Name: series-workflowslqsf Phase: Succeeded StartedAt: 2026-06-21 20:54:42 +0000 UTC FinishedAt: 2026-06-21 21:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[0] Phase: Succeeded StartedAt: 2026-06-21 20:54:42 +0000 UTC FinishedAt: 2026-06-21 21:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[0].run-triage Phase: Succeeded StartedAt: 2026-06-21 20:54:42 +0000 UTC FinishedAt: 2026-06-21 21:05:44 +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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "FTRACE", "DYNAMIC_FTRACE" ], "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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "FTRACE", "DYNAMIC_FTRACE" ], "series_id": "66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_tracing_multi_link_fill_link_info" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzM2VmNzhjNzBmMDgzNGVkOWUwNDVmNWFlZWQ1NDIyMzUyMGJmNTJhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdW4gMjEgMjE6MDM6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uODA0MjNjY2M2YjU3YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTY4MzksNiAmIzQzOzY4MzksMTUgQEAgc3RydWN0IGJwZl9saW5rX2luZm8ge1xuIFx0XHRcdF9fdTMyIGZsYWdzO1xuIFx0XHRcdF9fdTMyIHBpZDtcbiBcdFx0fSB1cHJvYmVfbXVsdGk7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRfX3UzMiBhdHRhY2hfdHlwZTtcbiYjNDM7XHRcdFx0X191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi9cbiYjNDM7XHRcdFx0X191MzIgb2JqX2lkO1xuJiM0MztcdFx0XHRfX3UzMiA6MzI7XG4mIzQzO1x0XHRcdF9fYWxpZ25lZF91NjQgaWRzO1xuJiM0MztcdFx0XHRfX2FsaWduZWRfdTY0IGFkZHJzO1xuJiM0MztcdFx0XHRfX2FsaWduZWRfdTY0IGNvb2tpZXM7XG4mIzQzO1x0XHR9IHRyYWNpbmdfbXVsdGk7XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0X191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovXG4gXHRcdFx0X191MzIgOjMyO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggODJmOGZlZWE2OTMxMWEuLmZkYWI0ZWM1YWQ0ZjQ1IDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0zNjk5LDYgJiM0MzszNjk5LDYwIEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gXHRrdmZyZWUodHJfbGluayk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHR1NjQgX191c2VyICp1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY29va2llcyk7XG4mIzQzO1x0dTY0IF9fdXNlciAqdWFkZHJzID0gdTY0X3RvX3VzZXJfcHRyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hZGRycyk7XG4mIzQzO1x0dTMyIF9fdXNlciAqdWlkcyA9IHU2NF90b191c2VyX3B0cihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuaWRzKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluaztcbiYjNDM7XHR1MzIgdWNvdW50ID0gaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50O1xuJiM0MztcdGJvb2wgaGFzX2Nvb2tpZXMsIHNob3dfYWRkcnM7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICgodWlkcyB8fCB1Y29va2llcyB8fCB1YWRkcnMpIFx1MDAyNlx1MDAyNiAhdWNvdW50KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHRyX2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xuJiM0MztcbiYjNDM7XHRpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUgPSB0cl9saW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGU7XG4mIzQzO1x0aW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50ID0gdHJfbGluay1cdTAwM2Vub2Rlc19jbnQ7XG4mIzQzO1x0aW5mby1cdTAwM2V0cmFjaW5nX211bHRpLm9ial9pZCA9IGJ0Zl9vYmpfaWQodHJfbGluay1cdTAwM2VsaW5rLnByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXVpZHMgXHUwMDI2XHUwMDI2ICF1Y29va2llcyBcdTAwMjZcdTAwMjYgIXVhZGRycylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAodWNvdW50IFx1MDAzYyB0cl9saW5rLVx1MDAzZW5vZGVzX2NudClcbiYjNDM7XHRcdGVyciA9IC1FTk9TUEM7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dWNvdW50ID0gdHJfbGluay1cdTAwM2Vub2Rlc19jbnQ7XG4mIzQzO1xuJiM0MztcdGhhc19jb29raWVzID0gISF0cl9saW5rLVx1MDAzZWNvb2tpZXM7XG4mIzQzO1x0c2hvd19hZGRycyA9IGthbGxzeW1zX3Nob3dfdmFsdWUoY3VycmVudF9jcmVkKCkpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdWNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX25vZGUgKm1ub2RlID0gXHUwMDI2dHJfbGluay1cdTAwM2Vub2Rlc1tpXTtcbiYjNDM7XHRcdHU2NCBhZGRyLCBjb29raWU7XG4mIzQzO1x0XHR1MzIgaWQ7XG4mIzQzO1xuJiM0MztcdFx0YnBmX3RyYW1wb2xpbmVfdW5wYWNrX2tleShtbm9kZS1cdTAwM2V0cmFtcG9saW5lLVx1MDAzZWtleSwgTlVMTCwgXHUwMDI2aWQpO1xuJiM0MztcbiYjNDM7XHRcdGFkZHIgPSBzaG93X2FkZHJzID8gbW5vZGUtXHUwMDNldHJhbXBvbGluZS1cdTAwM2VpcCA6IDA7XG4mIzQzO1x0XHRjb29raWUgPSBoYXNfY29va2llcyA/IHRyX2xpbmstXHUwMDNlY29va2llc1tpXSA6IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHVpZHMgXHUwMDI2XHUwMDI2IHB1dF91c2VyKGlkLCB1aWRzICYjNDM7IGkpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdGlmICh1YWRkcnMgXHUwMDI2XHUwMDI2IHB1dF91c2VyKGFkZHIsIHVhZGRycyAmIzQzOyBpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRpZiAodWNvb2tpZXMgXHUwMDI2XHUwMDI2IHB1dF91c2VyKGNvb2tpZSwgdWNvb2tpZXMgJiM0MzsgaSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX1BST0NfRlNcbiBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdFx0XHRcdCAgc3RydWN0IHNlcV9maWxlICpzZXEpXG5AQCAtMzcyOSw2ICYjNDM7Mzc4Myw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XG4gXHQucmVsZWFzZSA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSxcbiBcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxuJiM0MztcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXG4gXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9saW5rLmMgYi90b29scy9icGYvYnBmdG9vbC9saW5rLmNcbmluZGV4IGJkY2Q3MTdiMDM0OGY4Li41OGRhZGVlOTg0YTA3OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvbGluay5jXG5AQCAtMzc3LDYgJiM0MzszNzcsMzEgQEAgc3RhdGljIF9fdTY0ICp1NjRfdG9fYXJyKF9fdTY0IHZhbClcbiBcdHJldHVybiAoX191NjQgKikgdTY0X3RvX3B0cih2YWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIF9fdTMyICp1NjRfdG9fdTMyX2FycihfX3U2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKF9fdTMyICopdTY0X3RvX3B0cih2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGtlcm5lbF9zeW0gKmZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKF9fdTY0IGFkZHIsIGJvb2wgaXNfaWJ0X2VuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0LyogTG9hZCBpdCBvbmNlIGZvciBhbGwuICovXG4mIzQzO1x0aWYgKCFkZC5zeW1fY291bnQpXG4mIzQzO1x0XHRrZXJuZWxfc3ltc19sb2FkKFx1MDAyNmRkKTtcbiYjNDM7XHRpZiAoIWRkLnN5bV9jb3VudClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRzeW0gPSBrZXJuZWxfc3ltc19zZWFyY2goXHUwMDI2ZGQsIGFkZHIpO1xuJiM0MztcdGlmICghc3ltIFx1MDAyNlx1MDAyNiBpc19pYnRfZW5hYmxlZCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2U9IDQpXG4mIzQzO1x0XHRzeW0gPSBrZXJuZWxfc3ltc19zZWFyY2goXHUwMDI2ZGQsIGFkZHIgLSA0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN5bTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIHNob3dfdXByb2JlX211bHRpX2pzb24oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8sIGpzb25fd3JpdGVyX3QgKnd0cilcbiB7XG5AQCAtNDAzLDYgJiM0Mzs0MjgsNDMgQEAgc2hvd191cHJvYmVfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxuIFx0anNvbndfZW5kX2FycmF5KGpzb25fd3RyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO3Nob3dfdHJhY2luZ19tdWx0aV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpXG4mIzQzO3tcbiYjNDM7XHRib29sIGlzX2lidF9lbmFibGVkID0gaXNfeDg2X2lidF9lbmFibGVkKCk7XG4mIzQzO1x0X191MzIgaTtcbiYjNDM7XG4mIzQzO1x0c2hvd19saW5rX2F0dGFjaF90eXBlX2pzb24oaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmF0dGFjaF90eXBlLCB3dHIpO1xuJiM0MztcdGpzb253X3VpbnRfZmllbGQod3RyLCBcJiMzNDtmdW5jX2NudFwmIzM0OywgaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KTtcbiYjNDM7XHRqc29ud191aW50X2ZpZWxkKHd0ciwgXCYjMzQ7b2JqX2lkXCYjMzQ7LCBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkub2JqX2lkKTtcbiYjNDM7XHRqc29ud19uYW1lKHd0ciwgXCYjMzQ7ZnVuY3NcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRqc29ud19zdGFydF9hcnJheSh3dHIpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRfX3U2NCBhZGRyID0gdTY0X3RvX2FycihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuYWRkcnMpW2ldO1xuJiM0MztcdFx0c3RydWN0IGtlcm5lbF9zeW0gKnN5bTtcbiYjNDM7XG4mIzQzO1x0XHRzeW0gPSBmaW5kX2tlcm5lbF9zeW1fYnlfYWRkcihhZGRyLCBpc19pYnRfZW5hYmxlZCk7XG4mIzQzO1xuJiM0MztcdFx0anNvbndfc3RhcnRfb2JqZWN0KHd0cik7XG4mIzQzO1x0XHRqc29ud191aW50X2ZpZWxkKHd0ciwgXCYjMzQ7aWRcJiMzNDssIHU2NF90b191MzJfYXJyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5pZHMpW2ldKTtcbiYjNDM7XHRcdGpzb253X3VpbnRfZmllbGQod3RyLCBcJiMzNDthZGRyXCYjMzQ7LCBhZGRyKTtcbiYjNDM7XHRcdGlmIChzeW0pIHtcbiYjNDM7XHRcdFx0anNvbndfc3RyaW5nX2ZpZWxkKHd0ciwgXCYjMzQ7ZnVuY1wmIzM0Oywgc3ltLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0XHRpZiAoc3ltLVx1MDAzZW1vZHVsZVswXSA9PSAmIzM5O1xcMCYjMzk7KSB7XG4mIzQzO1x0XHRcdFx0anNvbndfbmFtZSh3dHIsIFwmIzM0O21vZHVsZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0anNvbndfbnVsbCh3dHIpO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGpzb253X3N0cmluZ19maWVsZCh3dHIsIFwmIzM0O21vZHVsZVwmIzM0Oywgc3ltLVx1MDAzZW1vZHVsZSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGpzb253X3VpbnRfZmllbGQod3RyLCBcJiMzNDtjb29raWVcJiMzNDssIHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcbiYjNDM7XHRcdGpzb253X2VuZF9vYmplY3Qod3RyKTtcbiYjNDM7XHR9XG4mIzQzO1x0anNvbndfZW5kX2FycmF5KHd0cik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBzaG93X3BlcmZfZXZlbnRfa3Byb2JlX2pzb24oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8sIGpzb25fd3JpdGVyX3QgKnd0cilcbiB7XG5AQCAtNTg5LDYgJiM0Mzs2NTEsOSBAQCBzdGF0aWMgaW50IHNob3dfbGlua19jbG9zZV9qc29uKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxuIFx0XHRzaG93X3Vwcm9iZV9tdWx0aV9qc29uKGluZm8sIGpzb25fd3RyKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEk6XG4mIzQzO1x0XHRzaG93X3RyYWNpbmdfbXVsdGlfanNvbihpbmZvLCBqc29uX3d0cik7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxuIFx0XHRzd2l0Y2ggKGluZm8tXHUwMDNlcGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6XG5AQCAtODMzLDYgJiM0Mzs4OTgsMzggQEAgc3RhdGljIHZvaWQgc2hvd191cHJvYmVfbXVsdGlfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzaG93X3RyYWNpbmdfbXVsdGlfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRib29sIGlzX2lidF9lbmFibGVkID0gaXNfeDg2X2lidF9lbmFibGVkKCk7XG4mIzQzO1x0X191MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDtcXG5cXHRcJiMzNDspO1xuJiM0MztcdHNob3dfbGlua19hdHRhY2hfdHlwZV9wbGFpbihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUpO1xuJiM0MztcdHByaW50ZihcJiMzNDtvYmpfaWQgJXUgIFwmIzM0OywgaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLm9ial9pZCk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O2NvdW50ICV1ICBcJiMzNDssIGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudCk7XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDtcXG5cXHQlLTE2cyAlLTE2cyAlLTE2cyAlc1wmIzM0OyxcbiYjNDM7XHQgICAgICAgXCYjMzQ7YnRmX2lkXCYjMzQ7LCBcJiMzNDthZGRyXCYjMzQ7LCBcJiMzNDtjb29raWVcJiMzNDssIFwmIzM0O2Z1bmMgW21vZHVsZV1cJiMzNDspO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdF9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hZGRycylbaV07XG4mIzQzO1x0XHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xuJiM0MztcbiYjNDM7XHRcdHN5bSA9IGZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKGFkZHIsIGlzX2lidF9lbmFibGVkKTtcbiYjNDM7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7XFxuXFx0JS0xNnUgJTAxNmxseCAlLTE2bGx4XCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIHU2NF90b191MzJfYXJyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5pZHMpW2ldLFxuJiM0MztcdFx0ICAgICAgIGFkZHIsIHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcbiYjNDM7XHRcdGlmIChzeW0pIHtcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0OyAlc1wmIzM0Oywgc3ltLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0XHRpZiAoc3ltLVx1MDAzZW1vZHVsZVswXSAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0XHRcdHByaW50ZihcJiMzNDsgWyVzXVwmIzM0Oywgc3ltLVx1MDAzZW1vZHVsZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNob3dfcGVyZl9ldmVudF9rcHJvYmVfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4ge1xuIFx0Y29uc3QgY2hhciAqYnVmO1xuQEAgLTk4OSw2ICYjNDM7MTA4Niw5IEBAIHN0YXRpYyBpbnQgc2hvd19saW5rX2Nsb3NlX3BsYWluKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxuIFx0XHRzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihpbmZvKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEk6XG4mIzQzO1x0XHRzaG93X3RyYWNpbmdfbXVsdGlfcGxhaW4oaW5mbyk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxuIFx0XHRzd2l0Y2ggKGluZm8tXHUwMDNlcGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6XG5AQCAtMTAyOSw2ICYjNDM7MTEyOSw3IEBAIHN0YXRpYyBpbnQgc2hvd19saW5rX2Nsb3NlX3BsYWluKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gc3RhdGljIGludCBkb19zaG93X2xpbmsoaW50IGZkKVxuIHtcbiBcdF9fdTY0ICpyZWZfY3RyX29mZnNldHMgPSBOVUxMLCAqb2Zmc2V0cyA9IE5VTEwsICpjb29raWVzID0gTlVMTDtcbiYjNDM7XHRfX3UzMiAqaWRzID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XG4gXHRfX3UzMiBsZW4gPSBzaXplb2YoaW5mbyk7XG4gXHRjaGFyIHBhdGhfYnVmW1BBVEhfTUFYXTtcbkBAIC0xMTE0LDYgJiM0MzsxMjE1LDM5IEBAIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZClcbiBcdFx0XHRnb3RvIGFnYWluO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0aWYgKGluZm8udHlwZSA9PSBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFpbmZvLnRyYWNpbmdfbXVsdGkuaWRzKSB7XG4mIzQzO1x0XHRjb3VudCA9IGluZm8udHJhY2luZ19tdWx0aS5jb3VudDtcbiYjNDM7XHRcdGlmIChjb3VudCkge1xuJiM0MztcdFx0XHRpZHMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3UzMikpO1xuJiM0MztcdFx0XHRpZiAoIWlkcykge1xuJiM0MztcdFx0XHRcdHBfZXJyKFwmIzM0O21lbSBhbGxvYyBmYWlsZWRcJiMzNDspO1xuJiM0MztcdFx0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xuJiM0MztcbiYjNDM7XHRcdFx0YWRkcnMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3U2NCkpO1xuJiM0MztcdFx0XHRpZiAoIWFkZHJzKSB7XG4mIzQzO1x0XHRcdFx0cF9lcnIoXCYjMzQ7bWVtIGFsbG9jIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0ZnJlZShpZHMpO1xuJiM0MztcdFx0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGNvb2tpZXMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3U2NCkpO1xuJiM0MztcdFx0XHRpZiAoIWNvb2tpZXMpIHtcbiYjNDM7XHRcdFx0XHRwX2VycihcJiMzNDttZW0gYWxsb2MgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRmcmVlKGFkZHJzKTtcbiYjNDM7XHRcdFx0XHRmcmVlKGlkcyk7XG4mIzQzO1x0XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGluZm8udHJhY2luZ19tdWx0aS5jb29raWVzID0gcHRyX3RvX3U2NChjb29raWVzKTtcbiYjNDM7XHRcdFx0Z290byBhZ2FpbjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXHRpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfUEVSRl9FVkVOVCkge1xuIFx0XHRzd2l0Y2ggKGluZm8ucGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfVFJBQ0VQT0lOVDpcbkBAIC0xMTUzLDYgJiM0MzsxMjg3LDcgQEAgc3RhdGljIGludCBkb19zaG93X2xpbmsoaW50IGZkKVxuIFx0ZnJlZShjb29raWVzKTtcbiBcdGZyZWUob2Zmc2V0cyk7XG4gXHRmcmVlKGFkZHJzKTtcbiYjNDM7XHRmcmVlKGlkcyk7XG4gXHRjbG9zZShmZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uODA0MjNjY2M2YjU3YzcgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTY4MzksNiAmIzQzOzY4MzksMTUgQEAgc3RydWN0IGJwZl9saW5rX2luZm8ge1xuIFx0XHRcdF9fdTMyIGZsYWdzO1xuIFx0XHRcdF9fdTMyIHBpZDtcbiBcdFx0fSB1cHJvYmVfbXVsdGk7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRfX3UzMiBhdHRhY2hfdHlwZTtcbiYjNDM7XHRcdFx0X191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi9cbiYjNDM7XHRcdFx0X191MzIgb2JqX2lkO1xuJiM0MztcdFx0XHRfX3UzMiA6MzI7XG4mIzQzO1x0XHRcdF9fYWxpZ25lZF91NjQgaWRzO1xuJiM0MztcdFx0XHRfX2FsaWduZWRfdTY0IGFkZHJzO1xuJiM0MztcdFx0XHRfX2FsaWduZWRfdTY0IGNvb2tpZXM7XG4mIzQzO1x0XHR9IHRyYWNpbmdfbXVsdGk7XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0X191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovXG4gXHRcdFx0X191MzIgOjMyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG5pbmRleCBmNTg5ZWVmYmY5ZmJkNS4uOTY5ZjA0ZWU5YWM2YWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3RyYWNlX2hlbHBlcnMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3RfZmlsbF9saW5rX2luZm8uc2tlbC5oXCYjMzQ7XG5AQCAtMjQsNiAmIzQzOzI1LDIyIEBAIHN0YXRpYyBfX3U2NCBrbXVsdGlfY29va2llc1tdID0geyAzLCAxLCAyIH07XG4gI2RlZmluZSBLUFJPQkVfRlVOQyBcJiMzNDticGZfZmVudHJ5X3Rlc3QxXCYjMzQ7XG4gc3RhdGljIF9fdTY0IGtwcm9iZV9hZGRyO1xuIFxuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRtdWx0aV9zeW1zW10gPSB7XG4mIzQzO1x0XCYjMzQ7YnBmX2ZlbnRyeV90ZXN0MlwmIzM0OyxcbiYjNDM7XHRcJiMzNDticGZfZmVudHJ5X3Rlc3QxXCYjMzQ7LFxuJiM0MztcdFwmIzM0O2JwZl9mZW50cnlfdGVzdDNcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgX191NjQgdG11bHRpX2Nvb2tpZXNbXSA9IHsgMzAsIDEwLCAyMCB9O1xuJiM0MzsjZGVmaW5lIFRSQUNJTkdfTVVMVElfQ05UIEFSUkFZX1NJWkUodG11bHRpX3N5bXMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdG11bHRpX3RhcmdldCB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRfX3U2NCBhZGRyO1xuJiM0MztcdF9fdTY0IGNvb2tpZTtcbiYjNDM7XHRfX3UzMiBpZDtcbiYjNDM7fTtcbiYjNDM7XG4gI2RlZmluZSBVUFJPQkVfRklMRSBcJiMzNDsvcHJvYy9zZWxmL2V4ZVwmIzM0O1xuIHN0YXRpYyBzc2l6ZV90IHVwcm9iZV9vZmZzZXQ7XG4gLyogdXByb2JlIGF0dGFjaCBwb2ludCAqL1xuQEAgLTM5Niw2ICYjNDM7NDEzLDIyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2twcm9iZV9tdWx0aV9maWxsX2xpbmtfaW5mbyhzdHJ1Y3QgdGVzdF9maWxsX2xpbmtfaW5mbyAqc2tlbCxcbiBcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0bXVsdGlfdGFyZ2V0X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRhID0gYTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGIgPSBiO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHRhLVx1MDAzZWlkIFx1MDAzZSB0Yi1cdTAwM2VpZCkgLSAodGEtXHUwMDNlaWQgXHUwMDNjIHRiLVx1MDAzZWlkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzZXR1cF90bXVsdGlfdGFyZ2V0cyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4mIzQzO1x0XHRcdFx0c3RydWN0IHRtdWx0aV90YXJnZXQgKnRhcmdldHMsXG4mIzQzO1x0XHRcdFx0X191MzIgKm9ial9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ19pbmZvIHByb2dfaW5mbztcbiYjNDM7XHRfX3UzMiBsZW4gPSBzaXplb2YocHJvZ19pbmZvKTtcbiYjNDM7XHRzdHJ1Y3QgYnRmICpidGY7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XHRfX3MzMiBpZDtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCYjMzQ7YnRmX19sb2FkX3ZtbGludXhfYnRmXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZCA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCB0bXVsdGlfc3ltc1tpXSwgQlRGX0tJTkRfRlVOQyk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCYjMzQ7YnRmX19maW5kX2J5X25hbWVfa2luZFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdFx0dGFyZ2V0c1tpXS5uYW1lID0gdG11bHRpX3N5bXNbaV07XG4mIzQzO1x0XHR0YXJnZXRzW2ldLmFkZHIgPSBrc3ltX2dldF9hZGRyKHRtdWx0aV9zeW1zW2ldKTtcbiYjNDM7XHRcdHRhcmdldHNbaV0uY29va2llID0gdG11bHRpX2Nvb2tpZXNbaV07XG4mIzQzO1x0XHR0YXJnZXRzW2ldLmlkID0gaWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2cHJvZ19pbmZvLCAwLCBsZW4pO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2cHJvZ19pbmZvLCBcdTAwMjZsZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfZ2V0X2luZm9fYnlfZmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChwcm9nX2luZm8uYXR0YWNoX2J0Zl9vYmpfaWQsIDAsIFwmIzM0O2F0dGFjaF9idGZfb2JqX2lkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1x0Km9ial9pZCA9IHByb2dfaW5mby5hdHRhY2hfYnRmX29ial9pZDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUga2VybmVsIHRyYWNpbmcgbXVsdGkgYXR0YWNoIHNvcnRzIGlkcy4gV2Ugc29ydCBhcyB3ZWxsLFxuJiM0MztcdCAqIHNvIHdlIGNhbiBlYXNpbHkgY29tcGFyZSBpZHMgYW5kIGNvb2tpZXMgbGF0ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXNvcnQodGFyZ2V0cywgVFJBQ0lOR19NVUxUSV9DTlQsIHNpemVvZih0YXJnZXRzWzBdKSwgdG11bHRpX3RhcmdldF9jbXApO1xuJiM0MztcdGJ0Zl9fZnJlZShidGYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyb3I6XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO1x0cmV0dXJuIC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiYjNDM7XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRhcmdldHMsXG4mIzQzO1x0XHRcdFx0XHQgIF9fdTMyIG9ial9pZCwgYm9vbCBoYXNfY29va2llcylcbiYjNDM7e1xuJiM0MztcdGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlID0gYnBmX3Byb2dyYW1fX2V4cGVjdGVkX2F0dGFjaF90eXBlKHByb2cpO1xuJiM0MztcdF9fdTY0IGFkZHJzW1RSQUNJTkdfTVVMVElfQ05UXSwgY29va2llc1tUUkFDSU5HX01VTFRJX0NOVF07XG4mIzQzO1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xuJiM0MztcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRpbnQgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaW5mby50eXBlLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksIFwmIzM0O2luZm8udHlwZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIGF0dGFjaF90eXBlLCBcJiMzNDtpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQsIFRSQUNJTkdfTVVMVElfQ05ULCBcJiMzNDtpbmZvLnRyYWNpbmdfbXVsdGkuY291bnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7XG4mIzQzO1x0bWVtc2V0KGNvb2tpZXMsIDAsIHNpemVvZihjb29raWVzKSk7XG4mIzQzO1x0bWVtc2V0KGFkZHJzLCAwLCBzaXplb2YoYWRkcnMpKTtcbiYjNDM7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuY29va2llcyA9IGhhc19jb29raWVzID8gcHRyX3RvX3U2NChjb29raWVzKSA6IDA7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZsZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmZvLnR5cGUsIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSwgXCYjMzQ7aW5mby50eXBlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSwgYXR0YWNoX3R5cGUsIFwmIzM0O2luZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5jb3VudCwgVFJBQ0lOR19NVUxUSV9DTlQsIFwmIzM0O2luZm8udHJhY2luZ19tdWx0aS5jb3VudFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5vYmpfaWQsIG9ial9pZCwgXCYjMzQ7dHJhY2luZ19tdWx0aS50YXJnZXRfb2JqX2lkc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXCYjMzQ7dHJhY2luZ19tdWx0aS50YXJnZXRfYnRmX2lkc1wmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoY29va2llc1tpXSwgaGFzX2Nvb2tpZXMgPyB0YXJnZXRzW2ldLmNvb2tpZSA6IDAsIFwmIzM0O3RyYWNpbmdfbXVsdGkuY29va2llc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRhcmdldHNbaV0uYWRkcikge1xuJiM0MztcdFx0XHRzdHJ1Y3Qga3N5bSAqa3N5bTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghQVNTRVJUX05FUShhZGRyc1tpXSwgMCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5hZGRyc1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRrc3ltID0ga3N5bV9zZWFyY2goYWRkcnNbaV0pO1xuJiM0MztcdFx0XHRpZiAoIUFTU0VSVF9PS19QVFIoa3N5bSwgXCYjMzQ7a3N5bV9zZWFyY2hcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0QVNTRVJUX1NUUkVRKGtzeW0tXHUwMDNlbmFtZSwgdGFyZ2V0c1tpXS5uYW1lLCBcJiMzNDt0cmFjaW5nX211bHRpLmFkZHJfbmFtZVwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoYWRkcnNbaV0sIDAsIFwmIzM0O3RyYWNpbmdfbXVsdGkuYWRkcnNcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZlcmlmeV90cmFjaW5nX211bHRpX2ludmFsaWRfdXNlcl9idWZmZXIoaW50IGZkLCBjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIGlkc1tUUkFDSU5HX01VTFRJX0NOVF0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xuJiM0MztcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRpbnQgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHQvKiBXcm9uZyBpbmZvIHNldHVwIChpZHMgIT0gTlVMTCBhbmQgY250ID09IDApIC1cdTAwM2UgRUlOVkFMICovXG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcJiMzNDt0cmFjaW5nX211bHRpLmludmFsaWRfY291bnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBTbWFsbGVyIHRoYW4gYWN0dWFsbCBjb3VudCBwcm92aWRlZCAtXHUwMDNlIEVOT1NQQyAqL1xuJiM0MztcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xuJiM0MztcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UIC0gMTtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRU5PU1BDLCBcJiMzNDt0cmFjaW5nX211bHRpLnNtYWxsX2NvdW50XCYjMzQ7KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUUkFDSU5HX01VTFRJX0NOVCAtIDE7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5wYXJ0aWFsX2lkc1wmIzM0Oyk7XG4mIzQzO1x0LyogY2hlY2sgdGhhdCB0aGUgbGFzdCBlbnRyeSBpcyBub3QgcG9wdWxhdGVkICovXG4mIzQzO1x0QVNTRVJUX0VRKGlkc1tpXSwgMCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5wYXJ0aWFsX2lkc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEJpZ2dlciB0aGFuIGFjdHVhbGwgY291bnQgcHJvdmlkZWQgLVx1MDAzZSBPSyAqL1xuJiM0MztcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xuJiM0MztcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UICYjNDM7IDE7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4mIzQzO1x0QVNTRVJUX09LKGVyciwgXCYjMzQ7dHJhY2luZ19tdWx0aS5iaWdfY291bnRcJiMzNDspO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdEFTU0VSVF9FUShpZHNbaV0sIHRhcmdldHNbaV0uaWQsIFwmIzM0O3RyYWNpbmdfbXVsdGkuaWRzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogSW52YWxpZCBpZHMgcG9pbnRlciAtXHUwMDNlIEVGQVVMVCAqL1xuJiM0MztcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuJiM0MztcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSAweDE7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgLUVGQVVMVCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5iYWRfYnRmX2lkc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEludmFsaWQgY29va2llcyBwb2ludGVyIC1cdTAwM2UgRUZBVUxUICovXG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSAweDE7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgLUVGQVVMVCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5iYWRfY29va2llc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEludmFsaWQgYWRkcnMgcG9pbnRlciAtXHUwMDNlIEVGQVVMVCAqL1xuJiM0MztcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuJiM0MztcdGluZm8udHJhY2luZ19tdWx0aS5hZGRycyA9IDB4MTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRUZBVUxULCBcJiMzNDt0cmFjaW5nX211bHRpLmJhZF9jb29raWVzXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHN0cnVjdCB0ZXN0X2ZpbGxfbGlua19pbmZvICpza2VsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgYm9vbCBoYXNfY29va2llcywgYm9vbCBpbnZhbGlkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7XG4mIzQzO1x0c3RydWN0IHRtdWx0aV90YXJnZXQgdGFyZ2V0c1tUUkFDSU5HX01VTFRJX0NOVF07XG4mIzQzO1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSwgb2JqX2lkO1xuJiM0MztcdF9fdTY0IGNvb2tpZXNbVFJBQ0lOR19NVUxUSV9DTlRdO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiYjNDM7XHRpbnQgbGlua19mZCwgZXJyLCBpO1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX3g4Nl82NF9fXG4mIzQzO1x0dGVzdF9fc2tpcCgpO1xuJiM0MztcdHJldHVybjtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdGlmIChzZXR1cF90bXVsdGlfdGFyZ2V0cyhza2VsLVx1MDAzZXByb2dzLnRtdWx0aV9ydW4sIHRhcmdldHMsIFx1MDAyNm9ial9pZCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWRzW2ldID0gdGFyZ2V0c1tpXS5pZDtcbiYjNDM7XHRcdGNvb2tpZXNbaV0gPSB0YXJnZXRzW2ldLmNvb2tpZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9wdHMuaWRzID0gaWRzO1xuJiM0MztcdG9wdHMuY250ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4mIzQzO1x0aWYgKGhhc19jb29raWVzKVxuJiM0MztcdFx0b3B0cy5jb29raWVzID0gY29va2llcztcbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVx1MDAzZXByb2dzLnRtdWx0aV9ydW4sIE5VTEwsIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDticGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGlcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsaW5rX2ZkID0gYnBmX2xpbmtfX2ZkKGxpbmspO1xuJiM0MztcdGlmIChpbnZhbGlkKSB7XG4mIzQzO1x0XHR2ZXJpZnlfdHJhY2luZ19tdWx0aV9pbnZhbGlkX3VzZXJfYnVmZmVyKGxpbmtfZmQsIHRhcmdldHMpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlcnIgPSB2ZXJpZnlfdHJhY2luZ19tdWx0aV9saW5rX2luZm8obGlua19mZCwgc2tlbC1cdTAwM2Vwcm9ncy50bXVsdGlfcnVuLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHRhcmdldHMsIG9ial9pZCwgaGFzX2Nvb2tpZXMpO1xuJiM0MztcdFx0QVNTRVJUX09LKGVyciwgXCYjMzQ7dmVyaWZ5X3RyYWNpbmdfbXVsdGlfbGlua19pbmZvXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgU0VDKG5hbWUpIF9fYXR0cmlidXRlX18oKHNlY3Rpb24obmFtZSksIHVzZWQpKVxuIFxuIHN0YXRpYyBzaG9ydCB1cHJvYmVfbGlua19pbmZvX3NlbWFfMSBTRUMoXCYjMzQ7LnByb2Jlc1wmIzM0Oyk7XG5AQCAtNjQwLDYgJiM0Mzs4NzUsMTMgQEAgdm9pZCB0ZXN0X2ZpbGxfbGlua19pbmZvKHZvaWQpXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtrcHJvYmVfbXVsdGlfaW52YWxpZF91YnVmZlwmIzM0OykpXG4gXHRcdHRlc3Rfa3Byb2JlX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIHRydWUsIHRydWUsIHRydWUpO1xuIFxuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3RyYWNpbmdfbXVsdGlfbGlua19pbmZvXCYjMzQ7KSkge1xuJiM0MztcdFx0dGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIGZhbHNlLCBmYWxzZSk7XG4mIzQzO1x0XHR0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgZmFsc2UpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0cmFjaW5nX211bHRpX2ludmFsaWRfdWJ1ZmZcJiMzNDspKVxuJiM0MztcdFx0dGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIHRydWUsIHRydWUpO1xuJiM0MztcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3Vwcm9iZV9tdWx0aV9saW5rX2luZm9cJiMzNDspKVxuIFx0XHR0ZXN0X3Vwcm9iZV9tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCBmYWxzZSwgZmFsc2UpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dXJldHByb2JlX211bHRpX2xpbmtfaW5mb1wmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZpbGxfbGlua19pbmZvLmNcbmluZGV4IDEzN2JkNjI5MjE2M2E1Li5jODUwODE1MzhlOTNiZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZpbGxfbGlua19pbmZvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZpbGxfbGlua19pbmZvLmNcbkBAIC01OCw0ICYjNDM7NTgsMTAgQEAgaW50IEJQRl9QUk9HKHVtdWx0aV9ydW4pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtmZW50cnkubXVsdGlcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0bXVsdGlfcnVuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZmlsbF9saW5rX2luZm9gIHN1cHBvcnQgZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgIGxpbmtzLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdHJhY2luZyBtdWx0aSBsaW5rcyB2aWEgdGhlIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCBjb21tYW5kIG9mIHRoZSBgYnBmYCBzeXNjYWxsLiBUaGUgbmV3IGZ1bmN0aW9uIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGNvcGllcyBkYXRhIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzM2VmNzhjNzBmMDgzNGVkOWUwNDVmNWFlZWQ1NDIyMzUyMGJmNTJhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdW4gMjEgMjE6MDM6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggODliMzZkZTVmZGJiNmQuLjgwNDIzY2NjNmI1N2M3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC02ODM5LDYgJiM0Mzs2ODM5LDE1IEBAIHN0cnVjdCBicGZfbGlua19pbmZvIHsKIAkJCV9fdTMyIGZsYWdzOwogCQkJX191MzIgcGlkOwogCQl9IHVwcm9iZV9tdWx0aTsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJX191MzIgYXR0YWNoX3R5cGU7CiYjNDM7CQkJX191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi8KJiM0MzsJCQlfX3UzMiBvYmpfaWQ7CiYjNDM7CQkJX191MzIgOjMyOwomIzQzOwkJCV9fYWxpZ25lZF91NjQgaWRzOwomIzQzOwkJCV9fYWxpZ25lZF91NjQgYWRkcnM7CiYjNDM7CQkJX19hbGlnbmVkX3U2NCBjb29raWVzOwomIzQzOwkJfSB0cmFjaW5nX211bHRpOwogCQlzdHJ1Y3QgewogCQkJX191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovCiAJCQlfX3UzMiA6MzI7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKaW5kZXggODJmOGZlZWE2OTMxMWEuLmZkYWI0ZWM1YWQ0ZjQ1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCkBAIC0zNjk5LDYgJiM0MzszNjk5LDYwIEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiAJa3ZmcmVlKHRyX2xpbmspOwogfQogCiYjNDM7c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluaywKJiM0MzsJCQkJCQkgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwl1NjQgX191c2VyICp1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihpbmZvLSZndDt0cmFjaW5nX211bHRpLmNvb2tpZXMpOwomIzQzOwl1NjQgX191c2VyICp1YWRkcnMgPSB1NjRfdG9fdXNlcl9wdHIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5hZGRycyk7CiYjNDM7CXUzMiBfX3VzZXIgKnVpZHMgPSB1NjRfdG9fdXNlcl9wdHIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5pZHMpOwomIzQzOwlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluazsKJiM0MzsJdTMyIHVjb3VudCA9IGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuY291bnQ7CiYjNDM7CWJvb2wgaGFzX2Nvb2tpZXMsIHNob3dfYWRkcnM7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoKHVpZHMgfHwgdWNvb2tpZXMgfHwgdWFkZHJzKSAmYW1wOyZhbXA7ICF1Y291bnQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJdHJfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3RyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUgPSB0cl9saW5rLSZndDtsaW5rLmF0dGFjaF90eXBlOwomIzQzOwlpbmZvLSZndDt0cmFjaW5nX211bHRpLmNvdW50ID0gdHJfbGluay0mZ3Q7bm9kZXNfY250OwomIzQzOwlpbmZvLSZndDt0cmFjaW5nX211bHRpLm9ial9pZCA9IGJ0Zl9vYmpfaWQodHJfbGluay0mZ3Q7bGluay5wcm9nLSZndDthdXgtJmd0O2F0dGFjaF9idGYpOwomIzQzOwomIzQzOwlpZiAoIXVpZHMgJmFtcDsmYW1wOyAhdWNvb2tpZXMgJmFtcDsmYW1wOyAhdWFkZHJzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICh1Y291bnQgJmx0OyB0cl9saW5rLSZndDtub2Rlc19jbnQpCiYjNDM7CQllcnIgPSAtRU5PU1BDOwomIzQzOwllbHNlCiYjNDM7CQl1Y291bnQgPSB0cl9saW5rLSZndDtub2Rlc19jbnQ7CiYjNDM7CiYjNDM7CWhhc19jb29raWVzID0gISF0cl9saW5rLSZndDtjb29raWVzOwomIzQzOwlzaG93X2FkZHJzID0ga2FsbHN5bXNfc2hvd192YWx1ZShjdXJyZW50X2NyZWQoKSk7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdWNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJwZl90cmFjaW5nX211bHRpX25vZGUgKm1ub2RlID0gJmFtcDt0cl9saW5rLSZndDtub2Rlc1tpXTsKJiM0MzsJCXU2NCBhZGRyLCBjb29raWU7CiYjNDM7CQl1MzIgaWQ7CiYjNDM7CiYjNDM7CQlicGZfdHJhbXBvbGluZV91bnBhY2tfa2V5KG1ub2RlLSZndDt0cmFtcG9saW5lLSZndDtrZXksIE5VTEwsICZhbXA7aWQpOwomIzQzOwomIzQzOwkJYWRkciA9IHNob3dfYWRkcnMgPyBtbm9kZS0mZ3Q7dHJhbXBvbGluZS0mZ3Q7aXAgOiAwOwomIzQzOwkJY29va2llID0gaGFzX2Nvb2tpZXMgPyB0cl9saW5rLSZndDtjb29raWVzW2ldIDogMDsKJiM0MzsKJiM0MzsJCWlmICh1aWRzICZhbXA7JmFtcDsgcHV0X3VzZXIoaWQsIHVpZHMgJiM0MzsgaSkpCiYjNDM7CQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlpZiAodWFkZHJzICZhbXA7JmFtcDsgcHV0X3VzZXIoYWRkciwgdWFkZHJzICYjNDM7IGkpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJaWYgKHVjb29raWVzICZhbXA7JmFtcDsgcHV0X3VzZXIoY29va2llLCB1Y29va2llcyAmIzQzOyBpKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssCiAJCQkJCSAgc3RydWN0IHNlcV9maWxlICpzZXEpCkBAIC0zNzI5LDYgJiM0MzszNzgzLDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLAogc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0gewogCS5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLAogCS5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLAomIzQzOwkuZmlsbF9saW5rX2luZm8gPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJLnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuYwppbmRleCBiZGNkNzE3YjAzNDhmOC4uNThkYWRlZTk4NGEwNzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9saW5rLmMKQEAgLTM3Nyw2ICYjNDM7Mzc3LDMxIEBAIHN0YXRpYyBfX3U2NCAqdTY0X3RvX2FycihfX3U2NCB2YWwpCiAJcmV0dXJuIChfX3U2NCAqKSB1NjRfdG9fcHRyKHZhbCk7CiB9CiAKJiM0MztzdGF0aWMgX191MzIgKnU2NF90b191MzJfYXJyKF9fdTY0IHZhbCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoX191MzIgKil1NjRfdG9fcHRyKHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga2VybmVsX3N5bSAqZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoX191NjQgYWRkciwgYm9vbCBpc19pYnRfZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZXJuZWxfc3ltICpzeW07CiYjNDM7CiYjNDM7CWlmICghYWRkcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkvKiBMb2FkIGl0IG9uY2UgZm9yIGFsbC4gKi8KJiM0MzsJaWYgKCFkZC5zeW1fY291bnQpCiYjNDM7CQlrZXJuZWxfc3ltc19sb2FkKCZhbXA7ZGQpOwomIzQzOwlpZiAoIWRkLnN5bV9jb3VudCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlzeW0gPSBrZXJuZWxfc3ltc19zZWFyY2goJmFtcDtkZCwgYWRkcik7CiYjNDM7CWlmICghc3ltICZhbXA7JmFtcDsgaXNfaWJ0X2VuYWJsZWQgJmFtcDsmYW1wOyBhZGRyICZndDs9IDQpCiYjNDM7CQlzeW0gPSBrZXJuZWxfc3ltc19zZWFyY2goJmFtcDtkZCwgYWRkciAtIDQpOwomIzQzOwomIzQzOwlyZXR1cm4gc3ltOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBzaG93X3Vwcm9iZV9tdWx0aV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpCiB7CkBAIC00MDMsNiAmIzQzOzQyOCw0MyBAQCBzaG93X3Vwcm9iZV9tdWx0aV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpCiAJanNvbndfZW5kX2FycmF5KGpzb25fd3RyKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkCiYjNDM7c2hvd190cmFjaW5nX211bHRpX2pzb24oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8sIGpzb25fd3JpdGVyX3QgKnd0cikKJiM0Mzt7CiYjNDM7CWJvb2wgaXNfaWJ0X2VuYWJsZWQgPSBpc194ODZfaWJ0X2VuYWJsZWQoKTsKJiM0MzsJX191MzIgaTsKJiM0MzsKJiM0MzsJc2hvd19saW5rX2F0dGFjaF90eXBlX2pzb24oaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSwgd3RyKTsKJiM0MzsJanNvbndfdWludF9maWVsZCh3dHIsICYjMzQ7ZnVuY19jbnQmIzM0OywgaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5jb3VudCk7CiYjNDM7CWpzb253X3VpbnRfZmllbGQod3RyLCAmIzM0O29ial9pZCYjMzQ7LCBpbmZvLSZndDt0cmFjaW5nX211bHRpLm9ial9pZCk7CiYjNDM7CWpzb253X25hbWUod3RyLCAmIzM0O2Z1bmNzJiMzNDspOwomIzQzOwomIzQzOwlqc29ud19zdGFydF9hcnJheSh3dHIpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCV9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuYWRkcnMpW2ldOwomIzQzOwkJc3RydWN0IGtlcm5lbF9zeW0gKnN5bTsKJiM0MzsKJiM0MzsJCXN5bSA9IGZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKGFkZHIsIGlzX2lidF9lbmFibGVkKTsKJiM0MzsKJiM0MzsJCWpzb253X3N0YXJ0X29iamVjdCh3dHIpOwomIzQzOwkJanNvbndfdWludF9maWVsZCh3dHIsICYjMzQ7aWQmIzM0OywgdTY0X3RvX3UzMl9hcnIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5pZHMpW2ldKTsKJiM0MzsJCWpzb253X3VpbnRfZmllbGQod3RyLCAmIzM0O2FkZHImIzM0OywgYWRkcik7CiYjNDM7CQlpZiAoc3ltKSB7CiYjNDM7CQkJanNvbndfc3RyaW5nX2ZpZWxkKHd0ciwgJiMzNDtmdW5jJiMzNDssIHN5bS0mZ3Q7bmFtZSk7CiYjNDM7CQkJaWYgKHN5bS0mZ3Q7bW9kdWxlWzBdID09ICYjMzk7XDAmIzM5OykgewomIzQzOwkJCQlqc29ud19uYW1lKHd0ciwgJiMzNDttb2R1bGUmIzM0Oyk7CiYjNDM7CQkJCWpzb253X251bGwod3RyKTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlqc29ud19zdHJpbmdfZmllbGQod3RyLCAmIzM0O21vZHVsZSYjMzQ7LCBzeW0tJmd0O21vZHVsZSk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJanNvbndfdWludF9maWVsZCh3dHIsICYjMzQ7Y29va2llJiMzNDssIHU2NF90b19hcnIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5jb29raWVzKVtpXSk7CiYjNDM7CQlqc29ud19lbmRfb2JqZWN0KHd0cik7CiYjNDM7CX0KJiM0MzsJanNvbndfZW5kX2FycmF5KHd0cik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIHNob3dfcGVyZl9ldmVudF9rcHJvYmVfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKQogewpAQCAtNTg5LDYgJiM0Mzs2NTEsOSBAQCBzdGF0aWMgaW50IHNob3dfbGlua19jbG9zZV9qc29uKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pCiAJY2FzZSBCUEZfTElOS19UWVBFX1VQUk9CRV9NVUxUSToKIAkJc2hvd191cHJvYmVfbXVsdGlfanNvbihpbmZvLCBqc29uX3d0cik7CiAJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSToKJiM0MzsJCXNob3dfdHJhY2luZ19tdWx0aV9qc29uKGluZm8sIGpzb25fd3RyKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOgogCQlzd2l0Y2ggKGluZm8tJmd0O3BlcmZfZXZlbnQudHlwZSkgewogCQljYXNlIEJQRl9QRVJGX0VWRU5UX0VWRU5UOgpAQCAtODMzLDYgJiM0Mzs4OTgsMzggQEAgc3RhdGljIHZvaWQgc2hvd191cHJvYmVfbXVsdGlfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgc2hvd190cmFjaW5nX211bHRpX3BsYWluKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJYm9vbCBpc19pYnRfZW5hYmxlZCA9IGlzX3g4Nl9pYnRfZW5hYmxlZCgpOwomIzQzOwlfX3UzMiBpOwomIzQzOwomIzQzOwlpZiAoIWluZm8tJmd0O3RyYWNpbmdfbXVsdGkuY291bnQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O1xuXHQmIzM0Oyk7CiYjNDM7CXNob3dfbGlua19hdHRhY2hfdHlwZV9wbGFpbihpbmZvLSZndDt0cmFjaW5nX211bHRpLmF0dGFjaF90eXBlKTsKJiM0MzsJcHJpbnRmKCYjMzQ7b2JqX2lkICV1ICAmIzM0OywgaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5vYmpfaWQpOwomIzQzOwlwcmludGYoJiMzNDtjb3VudCAldSAgJiMzNDssIGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuY291bnQpOwomIzQzOwomIzQzOwlwcmludGYoJiMzNDtcblx0JS0xNnMgJS0xNnMgJS0xNnMgJXMmIzM0OywKJiM0MzsJICAgICAgICYjMzQ7YnRmX2lkJiMzNDssICYjMzQ7YWRkciYjMzQ7LCAmIzM0O2Nvb2tpZSYjMzQ7LCAmIzM0O2Z1bmMgW21vZHVsZV0mIzM0Oyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpbmZvLSZndDt0cmFjaW5nX211bHRpLmNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJX191NjQgYWRkciA9IHU2NF90b19hcnIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5hZGRycylbaV07CiYjNDM7CQlzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltOwomIzQzOwomIzQzOwkJc3ltID0gZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoYWRkciwgaXNfaWJ0X2VuYWJsZWQpOwomIzQzOwomIzQzOwkJcHJpbnRmKCYjMzQ7XG5cdCUtMTZ1ICUwMTZsbHggJS0xNmxseCYjMzQ7LAomIzQzOwkJICAgICAgIHU2NF90b191MzJfYXJyKGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuaWRzKVtpXSwKJiM0MzsJCSAgICAgICBhZGRyLCB1NjRfdG9fYXJyKGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuY29va2llcylbaV0pOwomIzQzOwkJaWYgKHN5bSkgewomIzQzOwkJCXByaW50ZigmIzM0OyAlcyYjMzQ7LCBzeW0tJmd0O25hbWUpOwomIzQzOwkJCWlmIChzeW0tJmd0O21vZHVsZVswXSAhPSAmIzM5O1wwJiMzOTspCiYjNDM7CQkJCXByaW50ZigmIzM0OyBbJXNdJiMzNDssIHN5bS0mZ3Q7bW9kdWxlKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNob3dfcGVyZl9ldmVudF9rcHJvYmVfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pCiB7CiAJY29uc3QgY2hhciAqYnVmOwpAQCAtOTg5LDYgJiM0MzsxMDg2LDkgQEAgc3RhdGljIGludCBzaG93X2xpbmtfY2xvc2VfcGxhaW4oaW50IGZkLCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbykKIAljYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOgogCQlzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihpbmZvKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJOgomIzQzOwkJc2hvd190cmFjaW5nX211bHRpX3BsYWluKGluZm8pOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBCUEZfTElOS19UWVBFX1BFUkZfRVZFTlQ6CiAJCXN3aXRjaCAoaW5mby0mZ3Q7cGVyZl9ldmVudC50eXBlKSB7CiAJCWNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6CkBAIC0xMDI5LDYgJiM0MzsxMTI5LDcgQEAgc3RhdGljIGludCBzaG93X2xpbmtfY2xvc2VfcGxhaW4oaW50IGZkLCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbykKIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZCkKIHsKIAlfX3U2NCAqcmVmX2N0cl9vZmZzZXRzID0gTlVMTCwgKm9mZnNldHMgPSBOVUxMLCAqY29va2llcyA9IE5VTEw7CiYjNDM7CV9fdTMyICppZHMgPSBOVUxMOwogCXN0cnVjdCBicGZfbGlua19pbmZvIGluZm87CiAJX191MzIgbGVuID0gc2l6ZW9mKGluZm8pOwogCWNoYXIgcGF0aF9idWZbUEFUSF9NQVhdOwpAQCAtMTExNCw2ICYjNDM7MTIxNSwzOSBAQCBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpCiAJCQlnb3RvIGFnYWluOwogCQl9CiAJfQomIzQzOwlpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaW5mby50cmFjaW5nX211bHRpLmlkcykgewomIzQzOwkJY291bnQgPSBpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQ7CiYjNDM7CQlpZiAoY291bnQpIHsKJiM0MzsJCQlpZHMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3UzMikpOwomIzQzOwkJCWlmICghaWRzKSB7CiYjNDM7CQkJCXBfZXJyKCYjMzQ7bWVtIGFsbG9jIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCQkJY2xvc2UoZmQpOwomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQl9CiYjNDM7CQkJaW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTsKJiM0MzsKJiM0MzsJCQlhZGRycyA9IGNhbGxvYyhjb3VudCwgc2l6ZW9mKF9fdTY0KSk7CiYjNDM7CQkJaWYgKCFhZGRycykgewomIzQzOwkJCQlwX2VycigmIzM0O21lbSBhbGxvYyBmYWlsZWQmIzM0Oyk7CiYjNDM7CQkJCWZyZWUoaWRzKTsKJiM0MzsJCQkJY2xvc2UoZmQpOwomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQl9CiYjNDM7CQkJaW5mby50cmFjaW5nX211bHRpLmFkZHJzID0gcHRyX3RvX3U2NChhZGRycyk7CiYjNDM7CiYjNDM7CQkJY29va2llcyA9IGNhbGxvYyhjb3VudCwgc2l6ZW9mKF9fdTY0KSk7CiYjNDM7CQkJaWYgKCFjb29raWVzKSB7CiYjNDM7CQkJCXBfZXJyKCYjMzQ7bWVtIGFsbG9jIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCQkJZnJlZShhZGRycyk7CiYjNDM7CQkJCWZyZWUoaWRzKTsKJiM0MzsJCQkJY2xvc2UoZmQpOwomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQl9CiYjNDM7CQkJaW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSBwdHJfdG9fdTY0KGNvb2tpZXMpOwomIzQzOwkJCWdvdG8gYWdhaW47CiYjNDM7CQl9CiYjNDM7CX0KIAlpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfUEVSRl9FVkVOVCkgewogCQlzd2l0Y2ggKGluZm8ucGVyZl9ldmVudC50eXBlKSB7CiAJCWNhc2UgQlBGX1BFUkZfRVZFTlRfVFJBQ0VQT0lOVDoKQEAgLTExNTMsNiAmIzQzOzEyODcsNyBAQCBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpCiAJZnJlZShjb29raWVzKTsKIAlmcmVlKG9mZnNldHMpOwogCWZyZWUoYWRkcnMpOwomIzQzOwlmcmVlKGlkcyk7CiAJY2xvc2UoZmQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi44MDQyM2NjYzZiNTdjNyAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtNjgzOSw2ICYjNDM7NjgzOSwxNSBAQCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyB7CiAJCQlfX3UzMiBmbGFnczsKIAkJCV9fdTMyIHBpZDsKIAkJfSB1cHJvYmVfbXVsdGk7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCV9fdTMyIGF0dGFjaF90eXBlOwomIzQzOwkJCV9fdTMyIGNvdW50OyAvKiBpbi9vdXQ6IHRyYWNpbmdfbXVsdGkgdGFyZ2V0IGNvdW50ICovCiYjNDM7CQkJX191MzIgb2JqX2lkOwomIzQzOwkJCV9fdTMyIDozMjsKJiM0MzsJCQlfX2FsaWduZWRfdTY0IGlkczsKJiM0MzsJCQlfX2FsaWduZWRfdTY0IGFkZHJzOwomIzQzOwkJCV9fYWxpZ25lZF91NjQgY29va2llczsKJiM0MzsJCX0gdHJhY2luZ19tdWx0aTsKIAkJc3RydWN0IHsKIAkJCV9fdTMyIHR5cGU7IC8qIGVudW0gYnBmX3BlcmZfZXZlbnRfdHlwZSAqLwogCQkJX191MzIgOjMyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmlsbF9saW5rX2luZm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmMKaW5kZXggZjU4OWVlZmJmOWZiZDUuLjk2OWYwNGVlOWFjNmFhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmMKQEAgLTQsNiAmIzQzOzQsNyBAQAogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDt0cmFjZV9oZWxwZXJzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X2ZpbGxfbGlua19pbmZvLnNrZWwuaCYjMzQ7CkBAIC0yNCw2ICYjNDM7MjUsMjIgQEAgc3RhdGljIF9fdTY0IGttdWx0aV9jb29raWVzW10gPSB7IDMsIDEsIDIgfTsKICNkZWZpbmUgS1BST0JFX0ZVTkMgJiMzNDticGZfZmVudHJ5X3Rlc3QxJiMzNDsKIHN0YXRpYyBfX3U2NCBrcHJvYmVfYWRkcjsKIAomIzQzO3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdG11bHRpX3N5bXNbXSA9IHsKJiM0MzsJJiMzNDticGZfZmVudHJ5X3Rlc3QyJiMzNDssCiYjNDM7CSYjMzQ7YnBmX2ZlbnRyeV90ZXN0MSYjMzQ7LAomIzQzOwkmIzM0O2JwZl9mZW50cnlfdGVzdDMmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBfX3U2NCB0bXVsdGlfY29va2llc1tdID0geyAzMCwgMTAsIDIwIH07CiYjNDM7I2RlZmluZSBUUkFDSU5HX01VTFRJX0NOVCBBUlJBWV9TSVpFKHRtdWx0aV9zeW1zKQomIzQzOwomIzQzO3N0cnVjdCB0bXVsdGlfdGFyZ2V0IHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJX191NjQgYWRkcjsKJiM0MzsJX191NjQgY29va2llOwomIzQzOwlfX3UzMiBpZDsKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBVUFJPQkVfRklMRSAmIzM0Oy9wcm9jL3NlbGYvZXhlJiMzNDsKIHN0YXRpYyBzc2l6ZV90IHVwcm9iZV9vZmZzZXQ7CiAvKiB1cHJvYmUgYXR0YWNoIHBvaW50ICovCkBAIC0zOTYsNiAmIzQzOzQxMywyMjQgQEAgc3RhdGljIHZvaWQgdGVzdF9rcHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc3RydWN0IHRlc3RfZmlsbF9saW5rX2luZm8gKnNrZWwsCiAJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHRtdWx0aV90YXJnZXRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGEgPSBhOwomIzQzOwljb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGIgPSBiOwomIzQzOwomIzQzOwlyZXR1cm4gKHRhLSZndDtpZCAmZ3Q7IHRiLSZndDtpZCkgLSAodGEtJmd0O2lkICZsdDsgdGItJmd0O2lkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzZXR1cF90bXVsdGlfdGFyZ2V0cyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csCiYjNDM7CQkJCXN0cnVjdCB0bXVsdGlfdGFyZ2V0ICp0YXJnZXRzLAomIzQzOwkJCQlfX3UzMiAqb2JqX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9wcm9nX2luZm8gcHJvZ19pbmZvOwomIzQzOwlfX3UzMiBsZW4gPSBzaXplb2YocHJvZ19pbmZvKTsKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwomIzQzOwlpbnQgZXJyLCBpOwomIzQzOwlfX3MzMiBpZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihidGYsICYjMzQ7YnRmX19sb2FkX3ZtbGludXhfYnRmJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVFJBQ0lOR19NVUxUSV9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZCA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCB0bXVsdGlfc3ltc1tpXSwgQlRGX0tJTkRfRlVOQyk7CiYjNDM7CQlpZiAoIUFTU0VSVF9HVChpZCwgMCwgJiMzNDtidGZfX2ZpbmRfYnlfbmFtZV9raW5kJiMzNDspKQomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CQl0YXJnZXRzW2ldLm5hbWUgPSB0bXVsdGlfc3ltc1tpXTsKJiM0MzsJCXRhcmdldHNbaV0uYWRkciA9IGtzeW1fZ2V0X2FkZHIodG11bHRpX3N5bXNbaV0pOwomIzQzOwkJdGFyZ2V0c1tpXS5jb29raWUgPSB0bXVsdGlfY29va2llc1tpXTsKJiM0MzsJCXRhcmdldHNbaV0uaWQgPSBpZDsKJiM0MzsJfQomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtwcm9nX2luZm8sIDAsIGxlbik7CiYjNDM7CWVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgJmFtcDtwcm9nX2luZm8sICZhbXA7bGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9wcm9nX2dldF9pbmZvX2J5X2ZkJiMzNDspKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJaWYgKCFBU1NFUlRfR1QocHJvZ19pbmZvLmF0dGFjaF9idGZfb2JqX2lkLCAwLCAmIzM0O2F0dGFjaF9idGZfb2JqX2lkJiMzNDspKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJKm9ial9pZCA9IHByb2dfaW5mby5hdHRhY2hfYnRmX29ial9pZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGtlcm5lbCB0cmFjaW5nIG11bHRpIGF0dGFjaCBzb3J0cyBpZHMuIFdlIHNvcnQgYXMgd2VsbCwKJiM0MzsJICogc28gd2UgY2FuIGVhc2lseSBjb21wYXJlIGlkcyBhbmQgY29va2llcyBsYXRlci4KJiM0MzsJICovCiYjNDM7CXFzb3J0KHRhcmdldHMsIFRSQUNJTkdfTVVMVElfQ05ULCBzaXplb2YodGFyZ2V0c1swXSksIHRtdWx0aV90YXJnZXRfY21wKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycm9yOgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKJiM0MzsJCQkJCSAgY29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRhcmdldHMsCiYjNDM7CQkJCQkgIF9fdTMyIG9ial9pZCwgYm9vbCBoYXNfY29va2llcykKJiM0Mzt7CiYjNDM7CWVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlID0gYnBmX3Byb2dyYW1fX2V4cGVjdGVkX2F0dGFjaF90eXBlKHByb2cpOwomIzQzOwlfX3U2NCBhZGRyc1tUUkFDSU5HX01VTFRJX0NOVF0sIGNvb2tpZXNbVFJBQ0lOR19NVUxUSV9DTlRdOwomIzQzOwlfX3UzMiBpZHNbVFJBQ0lOR19NVUxUSV9DTlRdOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvOwomIzQzOwlfX3UzMiBsZW4gPSBzaXplb2YoaW5mbyk7CiYjNDM7CWludCBlcnIsIGk7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCAmYW1wO2luZm8sICZhbXA7bGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShpbmZvLnR5cGUsIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSwgJiMzNDtpbmZvLnR5cGUmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIGF0dGFjaF90eXBlLCAmIzM0O2luZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5jb3VudCwgVFJBQ0lOR19NVUxUSV9DTlQsICYjMzQ7aW5mby50cmFjaW5nX211bHRpLmNvdW50JiMzNDspOwomIzQzOwomIzQzOwltZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7CiYjNDM7CW1lbXNldChjb29raWVzLCAwLCBzaXplb2YoY29va2llcykpOwomIzQzOwltZW1zZXQoYWRkcnMsIDAsIHNpemVvZihhZGRycykpOwomIzQzOwomIzQzOwlpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpOwomIzQzOwlpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSBoYXNfY29va2llcyA/IHB0cl90b191NjQoY29va2llcykgOiAwOwomIzQzOwlpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsICZhbXA7aW5mbywgJmFtcDtsZW4pOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZm8udHlwZSwgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJLCAmIzM0O2luZm8udHlwZSYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSwgYXR0YWNoX3R5cGUsICYjMzQ7aW5mby50cmFjaW5nX211bHRpLmF0dGFjaF90eXBlJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoaW5mby50cmFjaW5nX211bHRpLmNvdW50LCBUUkFDSU5HX01VTFRJX0NOVCwgJiMzNDtpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkub2JqX2lkLCBvYmpfaWQsICYjMzQ7dHJhY2luZ19tdWx0aS50YXJnZXRfb2JqX2lkcyYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRSQUNJTkdfTVVMVElfQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJQVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgJiMzNDt0cmFjaW5nX211bHRpLnRhcmdldF9idGZfaWRzJiMzNDspOwomIzQzOwkJQVNTRVJUX0VRKGNvb2tpZXNbaV0sIGhhc19jb29raWVzID8gdGFyZ2V0c1tpXS5jb29raWUgOiAwLCAmIzM0O3RyYWNpbmdfbXVsdGkuY29va2llcyYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmICh0YXJnZXRzW2ldLmFkZHIpIHsKJiM0MzsJCQlzdHJ1Y3Qga3N5bSAqa3N5bTsKJiM0MzsKJiM0MzsJCQlpZiAoIUFTU0VSVF9ORVEoYWRkcnNbaV0sIDAsICYjMzQ7dHJhY2luZ19tdWx0aS5hZGRycyYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIC0xOwomIzQzOwkJCWtzeW0gPSBrc3ltX3NlYXJjaChhZGRyc1tpXSk7CiYjNDM7CQkJaWYgKCFBU1NFUlRfT0tfUFRSKGtzeW0sICYjMzQ7a3N5bV9zZWFyY2gmIzM0OykpCiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQlBU1NFUlRfU1RSRVEoa3N5bS0mZ3Q7bmFtZSwgdGFyZ2V0c1tpXS5uYW1lLCAmIzM0O3RyYWNpbmdfbXVsdGkuYWRkcl9uYW1lJiMzNDspOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlBU1NFUlRfRVEoYWRkcnNbaV0sIDAsICYjMzQ7dHJhY2luZ19tdWx0aS5hZGRycyYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmVyaWZ5X3RyYWNpbmdfbXVsdGlfaW52YWxpZF91c2VyX2J1ZmZlcihpbnQgZmQsIGNvbnN0IHN0cnVjdCB0bXVsdGlfdGFyZ2V0ICp0YXJnZXRzKQomIzQzO3sKJiM0MzsJX191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvOwomIzQzOwlfX3UzMiBsZW4gPSBzaXplb2YoaW5mbyk7CiYjNDM7CWludCBlcnIsIGk7CiYjNDM7CiYjNDM7CS8qIFdyb25nIGluZm8gc2V0dXAgKGlkcyAhPSBOVUxMIGFuZCBjbnQgPT0gMCkgLSZndDsgRUlOVkFMICovCiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7CiYjNDM7CWVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCAmYW1wO2luZm8sICZhbXA7bGVuKTsKJiM0MzsJQVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgJiMzNDt0cmFjaW5nX211bHRpLmludmFsaWRfY291bnQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFNtYWxsZXIgdGhhbiBhY3R1YWxsIGNvdW50IHByb3ZpZGVkIC0mZ3Q7IEVOT1NQQyAqLwomIzQzOwltZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7CiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UIC0gMTsKJiM0MzsJZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsICZhbXA7aW5mbywgJmFtcDtsZW4pOwomIzQzOwlBU1NFUlRfRVEoZXJyLCAtRU5PU1BDLCAmIzM0O3RyYWNpbmdfbXVsdGkuc21hbGxfY291bnQmIzM0Oyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBUUkFDSU5HX01VTFRJX0NOVCAtIDE7IGkmIzQzOyYjNDM7KQomIzQzOwkJQVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgJiMzNDt0cmFjaW5nX211bHRpLnBhcnRpYWxfaWRzJiMzNDspOwomIzQzOwkvKiBjaGVjayB0aGF0IHRoZSBsYXN0IGVudHJ5IGlzIG5vdCBwb3B1bGF0ZWQgKi8KJiM0MzsJQVNTRVJUX0VRKGlkc1tpXSwgMCwgJiMzNDt0cmFjaW5nX211bHRpLnBhcnRpYWxfaWRzJiMzNDspOwomIzQzOwomIzQzOwkvKiBCaWdnZXIgdGhhbiBhY3R1YWxsIGNvdW50IHByb3ZpZGVkIC0mZ3Q7IE9LICovCiYjNDM7CW1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTsKJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQgJiM0MzsgMTsKJiM0MzsJZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsICZhbXA7aW5mbywgJmFtcDtsZW4pOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3RyYWNpbmdfbXVsdGkuYmlnX2NvdW50JiMzNDspOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVFJBQ0lOR19NVUxUSV9DTlQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJQVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgJiMzNDt0cmFjaW5nX211bHRpLmlkcyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogSW52YWxpZCBpZHMgcG9pbnRlciAtJmd0OyBFRkFVTFQgKi8KJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmlkcyA9IDB4MTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7CiYjNDM7CWVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCAmYW1wO2luZm8sICZhbXA7bGVuKTsKJiM0MzsJQVNTRVJUX0VRKGVyciwgLUVGQVVMVCwgJiMzNDt0cmFjaW5nX211bHRpLmJhZF9idGZfaWRzJiMzNDspOwomIzQzOwomIzQzOwkvKiBJbnZhbGlkIGNvb2tpZXMgcG9pbnRlciAtJmd0OyBFRkFVTFQgKi8KJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSAweDE7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UOwomIzQzOwllcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgJmFtcDtpbmZvLCAmYW1wO2xlbik7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FRkFVTFQsICYjMzQ7dHJhY2luZ19tdWx0aS5iYWRfY29va2llcyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogSW52YWxpZCBhZGRycyBwb2ludGVyIC0mZ3Q7IEVGQVVMVCAqLwomIzQzOwltZW1zZXQoJmFtcDtpbmZvLCAwLCBzaXplb2YoaW5mbykpOwomIzQzOwlpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSAweDE7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UOwomIzQzOwllcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgJmFtcDtpbmZvLCAmYW1wO2xlbik7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FRkFVTFQsICYjMzQ7dHJhY2luZ19tdWx0aS5iYWRfY29va2llcyYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHN0cnVjdCB0ZXN0X2ZpbGxfbGlua19pbmZvICpza2VsLAomIzQzOwkJCQkJICAgICAgYm9vbCBoYXNfY29va2llcywgYm9vbCBpbnZhbGlkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7CiYjNDM7CXN0cnVjdCB0bXVsdGlfdGFyZ2V0IHRhcmdldHNbVFJBQ0lOR19NVUxUSV9DTlRdOwomIzQzOwlfX3UzMiBpZHNbVFJBQ0lOR19NVUxUSV9DTlRdLCBvYmpfaWQ7CiYjNDM7CV9fdTY0IGNvb2tpZXNbVFJBQ0lOR19NVUxUSV9DTlRdOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CWludCBsaW5rX2ZkLCBlcnIsIGk7CiYjNDM7CiYjNDM7I2lmbmRlZiBfX3g4Nl82NF9fCiYjNDM7CXRlc3RfX3NraXAoKTsKJiM0MzsJcmV0dXJuOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlpZiAoc2V0dXBfdG11bHRpX3RhcmdldHMoc2tlbC0mZ3Q7cHJvZ3MudG11bHRpX3J1biwgdGFyZ2V0cywgJmFtcDtvYmpfaWQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVFJBQ0lOR19NVUxUSV9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZHNbaV0gPSB0YXJnZXRzW2ldLmlkOwomIzQzOwkJY29va2llc1tpXSA9IHRhcmdldHNbaV0uY29va2llOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9wdHMuaWRzID0gaWRzOwomIzQzOwlvcHRzLmNudCA9IFRSQUNJTkdfTVVMVElfQ05UOwomIzQzOwlpZiAoaGFzX2Nvb2tpZXMpCiYjNDM7CQlvcHRzLmNvb2tpZXMgPSBjb29raWVzOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpKHNrZWwtJmd0O3Byb2dzLnRtdWx0aV9ydW4sIE5VTEwsICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2JwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aSYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGlua19mZCA9IGJwZl9saW5rX19mZChsaW5rKTsKJiM0MzsJaWYgKGludmFsaWQpIHsKJiM0MzsJCXZlcmlmeV90cmFjaW5nX211bHRpX2ludmFsaWRfdXNlcl9idWZmZXIobGlua19mZCwgdGFyZ2V0cyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSB2ZXJpZnlfdHJhY2luZ19tdWx0aV9saW5rX2luZm8obGlua19mZCwgc2tlbC0mZ3Q7cHJvZ3MudG11bHRpX3J1biwKJiM0MzsJCQkJCQkgICAgIHRhcmdldHMsIG9ial9pZCwgaGFzX2Nvb2tpZXMpOwomIzQzOwkJQVNTRVJUX09LKGVyciwgJiMzNDt2ZXJpZnlfdHJhY2luZ19tdWx0aV9saW5rX2luZm8mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7fQomIzQzOwogI2RlZmluZSBTRUMobmFtZSkgX19hdHRyaWJ1dGVfXygoc2VjdGlvbihuYW1lKSwgdXNlZCkpCiAKIHN0YXRpYyBzaG9ydCB1cHJvYmVfbGlua19pbmZvX3NlbWFfMSBTRUMoJiMzNDsucHJvYmVzJiMzNDspOwpAQCAtNjQwLDYgJiM0Mzs4NzUsMTMgQEAgdm9pZCB0ZXN0X2ZpbGxfbGlua19pbmZvKHZvaWQpCiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrcHJvYmVfbXVsdGlfaW52YWxpZF91YnVmZiYjMzQ7KSkKIAkJdGVzdF9rcHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0cmFjaW5nX211bHRpX2xpbmtfaW5mbyYjMzQ7KSkgewomIzQzOwkJdGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIGZhbHNlLCBmYWxzZSk7CiYjNDM7CQl0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgZmFsc2UpOwomIzQzOwl9CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dHJhY2luZ19tdWx0aV9pbnZhbGlkX3VidWZmJiMzNDspKQomIzQzOwkJdGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIHRydWUsIHRydWUpOwomIzQzOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dXByb2JlX211bHRpX2xpbmtfaW5mbyYjMzQ7KSkKIAkJdGVzdF91cHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgZmFsc2UsIGZhbHNlKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VyZXRwcm9iZV9tdWx0aV9saW5rX2luZm8mIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9maWxsX2xpbmtfaW5mby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uYwppbmRleCAxMzdiZDYyOTIxNjNhNS4uYzg1MDgxNTM4ZTkzYmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZpbGxfbGlua19pbmZvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uYwpAQCAtNTgsNCAmIzQzOzU4LDEwIEBAIGludCBCUEZfUFJPRyh1bXVsdGlfcnVuKQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7ZmVudHJ5Lm11bHRpJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRtdWx0aV9ydW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGZpbGxfbGlua19pbmZvYCBJbXBsZW1lbnRhdGlvbiBmb3IgVHJhY2luZyBNdWx0aS1MaW5rcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoLiBJdCYjMzk7cyBhZGRpbmcgYGZpbGxfbGlua19pbmZvYCBzdXBwb3J0IHRvIGBicGZfdHJhY2luZ19tdWx0aV9saW5rYC4gTG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBzZXZlcmFsIGZpbGVzOiB0aGUgdWFwaSBoZWFkZXIsIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24sIGJwZnRvb2wsIGEgdG9vbHMgdWFwaSBoZWFkZXIsIGFuZCBzb21lIHNlbGZ0ZXN0cy4KClNwZWNpZmljYWxseSwgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBpcyBhZGRpbmcgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIHRvIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHNgLCB3aGljaCBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb24gYSB0cmFjaW5nIG11bHRpLWxpbmsgZmlsZSBkZXNjcmlwdG9yIHZpYSB0aGUgYGJwZmAgc3lzY2FsbC4KClRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gLiBBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHJlYWRpbmcgdXNlciBwb2ludGVycyBmb3IgYGNvb2tpZXNgLCBgYWRkcnNgLCBhbmQgYGlkc2AgZnJvbSB0aGUgYGluZm8tJmd0O3RyYWNpbmdfbXVsdGlgIHN0cnVjdHVyZSBhbmQgdXNpbmcgYHB1dF91c2VyYCB0byBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4KClRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIG5ldyBmZWF0dXJlLCBhIG5ldyBjb2RlIHBhdGggdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbCDigJMgc3BlY2lmaWNhbGx5IGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCB3aXRoIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgLiBBbmQgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1c2VyLXByb3ZpZGVkIHBvaW50ZXJzIGFuZCBib3VuZHMgY2hlY2tpbmcsIHRoZXJlIGFyZSBwbGVudHkgb2YgYXJlYXMgcmlwZSBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3MuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4uIE5vdywgd2hhdCBhYm91dCBgQ09ORklHX0ZQUk9CRWAsIGBDT05GSUdfS1BST0JFU2AsIG9yIGBDT05GSUdfQlBGX0VWRU5UU2A/IEEgcXVpY2sgZ3JlcCBmb3IgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wc2Agb3IgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIHNob3VsZCBnaXZlIHVzIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzY5Mj1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzAxLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3MDI6c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzAzLVx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzc4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODUtXHQuZGVhbGxvY19kZWZlcnJlZCA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg2Olx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg3LSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgY29kZSBzdXJyb3VuZGluZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2A6CgoqKkFuYWx5emluZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28sIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYC4uLiB0aGF0JiMzOTtzIGEgcHJldHR5IHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbWFwIHRoaXMgdG8gaXRzIGNvbnRleHQgd2l0aGluIHRoZSBCUEYgdHJhY2luZyBmcmFtZXdvcmsuIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhYm91dCBtYW5hZ2luZyBsaW5rIGluZm9ybWF0aW9uLCBlc3BlY2lhbGx5IHNpbmNlICYjMzQ7bXVsdGlfbGluayYjMzQ7IGlzIGluIHRoZXJlIHRvby4gVGhpcyBzdWdnZXN0cyBpbnRlcmFjdGlvbiB3aXRoIG11bHRpcGxlIEJQRiBwcm9ncmFtcyBvciBsaW5rcywgd2hpY2ggaGFzIGEgZGlzdGluY3Qgc2V0IG9mIGNvbXBsZXhpdGllcywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZXNlIHByb2dyYW1zIHNoYXJlIGRhdGEsIGhvdyB0aGV5IHJlbGF0ZSwgYW5kIGhvdyB0aGV5IHJlcG9ydCBvbiBldmVudHMuIEkmIzM5O20gaW1hZ2luaW5nIGl0JiMzOTtzIHVzZWQgdG8gY29sbGVjdCBvciBnZW5lcmF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgb2YgdGhlIGluZm8gYWJvdXQgdGhlIEJQRiBsaW5rcyBpbnZvbHZlZCBpbiB0cmFjaW5nLiBJIGJldCB0aGlzIGZ1bmN0aW9uIHRha2VzIGluIHNvbWUgY29udGV4dCwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IG5lZWRzIGZpbGxpbmcgaW4sIGFuZCByZXR1cm5zIGFuIGV4aXQgY29kZSBvZiBzb21lIGtpbmQuCgpJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIHVzZWQuIElzIGl0IGEgY29yZSBmdW5jdGlvbiwgb3IgbW9yZSBvZiBhIGhlbHBlcj8gSXMgaXQgZXhwb3NlZCBpbiB0aGUgbWFpbiBCUEYgQVBJLCBvciBpcyBpdCBtb3JlIG9mIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgb3RoZXIgZnVuY3Rpb25zIGxpa2VseSBjYWxsIHRoaXMgb25lLCBhcyB3ZWxsIGFzIHdoaWNoIGZ1bmN0aW9ucyBpdCYjMzk7cyBsaWtlbHkgdG8gY2FsbC4gSWYgaXQmIzM5O3MgYSBmaWxsIGZ1bmN0aW9uLCBpdCYjMzk7cyBsaWtlbHkgZmlsbGluZyBpbiBzb21lIGtpbmQgb2Ygc3RydWN0dXJlIHRoYXQgdGhlIHRyYWNpbmcgc3lzdGVtIHVzZXMgdG8gdW5kZXJzdGFuZCBob3cgcHJvZ3JhbXMgYXJlIGxpbmtlZCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEkmIzM5O2QgbGlrZSB0byBnZXQgYSBnb29kIG1lbnRhbCBtb2RlbCBvZiB0aGUgd2hvbGUgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciB0cmFjaW5nIGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBzdHJ1Y3R1cmUgaXQgZmlsbHMuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIGl0IHByb2R1Y2VzIGFuZCB3aGVyZSB0aGF0IGRhdGEgZW5kcyB1cCwgYmVjYXVzZSB0aGlzIGlzIHRoZSBpbmZvcm1hdGlvbiBtb3N0IGltcG9ydGFudCB0byBhIHVzZXIsIG5vdCB0aGUgaW50ZXJuYWwgbWFjaGluYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzc1Nz1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODItXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4NC1cdC5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODM5PWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkwMC1cdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkwMTpcdFx0ICAgICAgXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzkzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCYjMzk7cyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBJdOKAmXMgYSBwcmV0dHkgcG93ZXJmdWwgZnVuY3Rpb24sIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXRzIGF2YWlsYWJpbGl0eSBpcyBnb3Zlcm5lZCBieSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBzZW5zZSBvZiBpdHMgJiMzNDtwb3J0YWJpbGl0eSYjMzQ7IHNvIHRvIHNwZWFrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucywgaWYgYW55LCBJIG5lZWQgdG8gdmVyaWZ5IGFyZSBlbmFibGVkIGJlZm9yZSBJIGNhbiByZWx5IG9uIHRoaXMgYmVpbmcgcHJlc2VudCBhbmQgdXNhYmxlIGluIGEgcGFydGljdWxhciBlbnZpcm9ubWVudC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IGNoZWNraW5nIHRoZSBjb2RlYmFzZSBmb3IgYW55IG9idmlvdXMgY29uZmlnLXJlbGF0ZWQgY29uZGl0aW9uYWxzIHN1cnJvdW5kaW5nIGl0cyBkZWNsYXJhdGlvbiBvciBkZWZpbml0aW9uLiBObyB0aW1lIHRvIHdhc3RlIG9uIGFzc3VtcHRpb25zLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD03ODk9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjc5MDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpO1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03OTEtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTg0OD1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4NDk6YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg1MC17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVx0XHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NTpcdFx0XHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk2LVx0XHRlbHNlXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4MTg9c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MzgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzgzOTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MC17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MjgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkyOTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIFRyYWNlIEV2ZW50cyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRyYWNlIGV2ZW50cyBhcmUgc3RydWN0dXJlZC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaGAuIExldCYjMzk7cyB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDc5MC4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGNvcmUgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBtYWNybyB0aGF0IGxheXMgb3V0IHRoZSBiYXNpYyBmb3JtYXQgb2YgdGhlc2UgZXZlbnRzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBlbGVtZW50czogdGhlIGV2ZW50IGlkZW50aWZpZXIsIHRoZSBmb3JtYXQgc3RyaW5nLCBwZXJoYXBzIHNvbWUgZmllbGRzIHJlbGF0ZWQgdG8gZmlsdGVyaW5nLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGV2ZW50LXNwZWNpZmljIGRhdGEuIEl04oCZcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBhIG1hY3JvIGZvciBkZWZpbmluZyBzb21lIG9mIHRoZSBoZWxwZXJzIHRvIHNldHVwIHRoZSBldmVudHMuCkkgd29uZGVyIGlmIHRoYXQgcGFydGljdWxhciBsb2NhdGlvbiBob2xkcyB0aGUgcmVnaXN0cmF0aW9uIG1hY3Jvcywgb3IgaWYgaXQmIzM5O3MgdGhlIHN0cnVjdHVyZSBkZWNsYXJhdGlvbiBpdHNlbGYuIFRpbWUgdG8gZmluZCBvdXQuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY2xldmVyIHVzZSBvZiBwcmVwcm9jZXNzb3IgbWFnaWMsIEkganVzdCBob3BlIGl0JiMzOTtzIG5vdCBvdmVybHkgb2JmdXNjYXRlZC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4MDpcdGludCBicGZfcHJvYmVfdW5yZWdpc3RlcihzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cCwgc3RydWN0IGJwZl9yYXdfdHBfbGluayAqbGluayk7XG4gNzgxOlx0XG4gNzgyOlx0c3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpicGZfZ2V0X3Jhd190cmFjZXBvaW50KGNvbnN0IGNoYXIgKm5hbWUpO1xuIDc4MzpcdHZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cCk7XG4gNzg0Olx0aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxuIDc4NTpcdFx0XHRcdCAgICB1MzIgKmZkX3R5cGUsIGNvbnN0IGNoYXIgKipidWYsXG4gNzg2Olx0XHRcdFx0ICAgIHU2NCAqcHJvYmVfb2Zmc2V0LCB1NjQgKnByb2JlX2FkZHIsXG4gNzg3Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKm1pc3NlZCk7XG4gNzg4Olx0aW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4gNzg5Olx0aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4gNzkwOlx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKTtcbiA3OTE6XHQjZWxzZVxuIDc5MjpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpjdHgpXG4gNzkzOlx0e1xuIDc5NDpcdFx0cmV0dXJuIDE7XG4gNzk1Olx0fVxuIDc5NjpcdFxuIDc5NzpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmX2ZhdWx0YWJsZShzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxuIDc5ODpcdHtcbiA3OTk6XHRcdHJldHVybiAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIFByZXByb2Nlc3NvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgYW0gSSByaWdodCBub3cgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIGJsb2NrIG9mIGNvZGUgaXMgKmFjdHVhbGx5KiBnb2luZyB0byBkby4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkga25vdyB0aGUgbGlrZWx5IGN1bHByaXQgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGAjaWZkZWZgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBlbnZpcm9ubWVudC1zcGVjaWZpYyBkZWNpc2lvbnMgYXJlIGJlaW5nIG1hZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmUgZmxhZ3MsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBvcGVyYXRpbmcgc3lzdGVtIGRlZmluZXMgYXJlIGFjdGl2ZSBhdCB0aGlzIHBvaW50IGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGAjaWZkZWZgIHN0YXRlbWVudCBnb3Zlcm5zIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIE9uY2UgSSBrbm93IHRoYXQsIEkmIzM5O2xsIGhhdmUgYSBtdWNoIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaW4gdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIHZhcmlhbnQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTY5PXN0cnVjdCB0cmFjZV9keW5hbWljX2luZm8ge1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo3MDojaWZkZWYgQ09ORklHX0NQVV9CSUdfRU5ESUFOXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTcxLVx0dTE2XHRsZW47XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD0yNTE9ZW51bSB0cmFjZV9yZWcge1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMjUzLVx0VFJBQ0VfUkVHX1VOUkVHSVNURVIsXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjI1NDojaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTI1NS1cdFRSQUNFX1JFR19QRVJGX1JFR0lTVEVSLFxuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9Mjg5PXN0cnVjdCB0cmFjZV9ldmVudF9jbGFzcyB7XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0yOTEtXHR2b2lkXHRcdFx0KnByb2JlO1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDoyOTI6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0yOTMtXHR2b2lkXHRcdFx0KnBlcmZfcHJvYmU7XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD0zNjc9c3RydWN0IHRyYWNlX2V2ZW50X2NhbGwge1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMzg5LVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDozOTA6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0zOTEtXHRpbnRcdFx0XHRcdHBlcmZfcmVmY291bnQ7XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0zOTktXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjQwMDojaWZkZWYgQ09ORklHX0RZTkFNSUNfRVZFTlRTXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTQwMS1ib29sIHRyYWNlX2V2ZW50X2R5bl90cnlfZ2V0X3JlZihzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD00Mjg9c3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2V2ZW50X3B1dF9yZWYoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpXG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC00MzUtXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjQzNjojaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTQzNy1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfYXJyYXlfdmFsaWQoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpXG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD02NDY9c3RydWN0IHRyYWNlX2V2ZW50X2ZpbGUge1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNjc2LVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo2Nzc6I2lmZGVmIENPTkZJR19ISVNUX1RSSUdHRVJTXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTY3OC1leHRlcm4gc3RydWN0IGlycV93b3JrIGhpc3RfcG9sbF93b3JrO1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9NzU2PXRyYWNlX3RyaWdnZXJfc29mdF9kaXNhYmxlZChzdHJ1Y3QgdHJhY2VfZXZlbnRfZmlsZSAqZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc3MC1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzcxOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03NzItdW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpjdHgpO1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODc4PWludCB0cmFjZV9hcnJheV9zZXRfY2xyX2V2ZW50KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGNvbnN0IGNoYXIgKnN5c3RlbSxcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg4MC1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6ODgxOiNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODgyLXN0cnVjdCBwZXJmX2V2ZW50O1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODg5PWV4dGVybiB2b2lkIHBlcmZfdHJhY2VfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6ODkwOiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04OTEtZXh0ZXJuIGludCAgcGVyZl9rcHJvYmVfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGJvb2wgaXNfcmV0cHJvYmUpO1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODkzPWV4dGVybiBpbnQgYnBmX2dldF9rcHJvYmVfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04OTgtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjg5OTojaWZkZWYgQ09ORklHX1VQUk9CRV9FVkVOVFNcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtOTAwLWV4dGVybiBpbnQgIHBlcmZfdXByb2JlX2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgQlBGIEV2ZW50IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSBpcyB0byBnbyBkaWdnaW5nIGludG8gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZm9yIGFueXRoaW5nIEJQRi1yZWxhdGVkIHdpdGggdHJhY2luZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gaG93IGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBpcyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYWRkaXRpb25hbCBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoYXQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBhbnkgb3RoZXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGJlc2lkZXMgdGhlIHRvcC1sZXZlbCBgQ09ORklHX0JQRl9FVkVOVFNgIGZsYWcuIEl0IG1pZ2h0IGJlIGZ1cnRoZXIgZ2F0ZWQgYnkgc29tZSBvdGhlciBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ3LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjQ4OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ5LXN0cnVjdCBicGZfdHJhY2VfbW9kdWxlIHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTczPXVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZl9mYXVsdGFibGUoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4NTojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODYtQlBGX0NBTExfMihicGZfb3ZlcnJpZGVfcmV0dXJuLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB1bnNpZ25lZCBsb25nLCByYylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzA2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzE1OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTYtQlBGX0NBTExfMyhicGZfcHJvYmVfcmVhZF9jb21wYXQsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2MT1CVEZfU0VUX1NUQVJUKGJ0Zl9hbGxvd2xpc3RfZF9wYXRoKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2MjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTYzLUJURl9JRChmdW5jLCBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24pXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2NT1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9vcGVuKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2Ni0jZW5kaWZcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Njc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRIXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY4LUJURl9JRChmdW5jLCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnlfaXAodW5zaWduZWQgbG9uZyBmZW50cnlfaXApXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3Ni17XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA3NzojaWZkZWYgQ09ORklHX1g4Nl9LRVJORUxfSUJUXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3OC1cdGlmIChpc19lbmRicigodm9pZCAqKShmZW50cnlfaXAgLSBFTkRCUl9JTlNOX1NJWkUpKSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA4ND1CUEZfQ0FMTF8xKGJwZl9nZXRfZnVuY19pcF9rcHJvYmUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwODgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA4OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDkwLVx0cnVuX2N0eCA9IGNvbnRhaW5lcl9vZihjdXJyZW50LVx1MDAzZWJwZl9jdHgsIHN0cnVjdCBicGZfdHJhY2VfcnVuX2N0eCwgcnVuX2N0eCk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEyNzQ9YnBmX3RyYWNpbmdfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4MC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMjgxOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMjgyLVx0Y2FzZSBCUEZfRlVOQ19wcm9iZV9yZWFkOlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTEtXHRcdHJldHVybiBwcm9nLVx1MDAzZXNsZWVwYWJsZSA/IFx1MDAyNmJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvIDogXHUwMDI2YnBmX2dldF9zdGFja19wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMzUyOiNpZmRlZiBDT05GSUdfQlBGX0tQUk9CRV9PVkVSUklERVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTMtXHRjYXNlIEJQRl9GVU5DX292ZXJyaWRlX3JldHVybjpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMC1cdHN3aXRjaCAoZnVuY19pZCkge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MzE6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzMyLVx0Y2FzZSBCUEZfRlVOQ19za2Jfb3V0cHV0OlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xODI4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgcmF3X3RyYWNlcG9pbnRfcHJvZ19vcHMgPSB7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTgyOTojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzAtXHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyMDk9aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQzLVx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjQ0OiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDUtXHRcdGlmIChmbGFncyBcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfS1BST0JFKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ5LSNlbmRpZlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNTA6I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI1MS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBUUkFDRV9FVkVOVF9GTF9VUFJPQkUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNzM9c3Vic3lzX2luaXRjYWxsKHNlbmRfc2lnbmFsX2lycV93b3JrX2luaXQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI3NTojaWZkZWYgQ09ORklHX01PRFVMRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc2LXN0YXRpYyBpbnQgYnBmX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG9wLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMzI5PXN0cnVjdCBicGZfc2Vzc2lvbl9ydW5fY3R4IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzM1OiNpZmRlZiBDT05GSUdfRlBST0JFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNi1zdHJ1Y3QgYnBmX2twcm9iZV9tdWx0aV9saW5rIHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjQ0OD1zdGF0aWMgaW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI0OTctXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjQ5ODojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk5LXN0YXRpYyB2b2lkIGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTI3LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI1Mjg6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyOS1cdC5zaG93X2ZkaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI5NDM9c3RhdGljIHU2NCBicGZfa3Byb2JlX211bHRpX2VudHJ5X2lwKHN0cnVjdCBicGZfcnVuX2N0eCAqY3R4KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTQ4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI5NDk6I2lmZGVmIENPTkZJR19VUFJPQkVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk1MC1zdHJ1Y3QgYnBmX3Vwcm9iZV9tdWx0aV9saW5rO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMDA3PXN0YXRpYyBpbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3My1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMDc0OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzUtc3RhdGljIHZvaWQgYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMxMTU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxMTgtXHQuZmlsbF9saW5rX2luZm8gPSBicGZfdXByb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzExOTojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTIwLVx0LnNob3dfZmRpbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1Ny1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg3OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODgtXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCwgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgKm5vdCogZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGl0c2VsZi4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgZWl0aGVyIGFsd2F5cyBjb21waWxlZCB3aGVuIHRoYXQgZmlsZSBpcyBpbmNsdWRlZCwgb3IgdGhlIGluY2x1c2lvbiBvZiB0aGUgZW50aXJlIGZpbGUgaXMgY29uZGl0aW9uYWwuCgpNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgLiBJZiBgYnBmX3RyYWNlLm9gIGlzIGJ1aWx0IGNvbmRpdGlvbmFsbHksIG9yIGlmIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGNvbnRyb2wgaXRzIGluY2x1c2lvbiwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBhbnN3ZXIuIEl0IGlzIGEgdmVyeSBnb29kIGFwcHJvYWNoIGFzIHRoZSBgTWFrZWZpbGVgIHdpbGwgcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IHZhcmlhYmxlcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIGNvbnRyb2xsaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiB3aWxsIGV4aXN0IG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSAmIzQzOz0gdHJhY2VfZXZlbnRzX3VzZXIub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgJiM0Mzs9IGJwZl90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSAmIzQzOz0gdHJhY2Vfa3Byb2JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gQlBGIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIG5lZWQgZm9yIGBDT05GSUdfQlBGX0VWRU5UU2AuIFRoYXQmIzM5O3MgYSBnaXZlbiwgbmF0dXJhbGx5LiBCdXQgdGhlbiBJIGhhdmUgdG8gYXNrIG15c2VsZiwgd2hhdCBhYm91dCBgQ09ORklHX0JQRl9TWVNDQUxMYD8gSG1tbSwgeWVzLCBpdCBzZWVtcyBlc3NlbnRpYWwgZm9yIEJQRiBsaW5rcywgc28gdGhhdCYjMzk7cyBpbiB0aGUgbWl4LiBOb3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBsdXJraW5nIGFib3V0IHRoYXQgSSYjMzk7bSBvdmVybG9va2luZz8gSSBiZXR0ZXIgZG8gYSBxdWljayBzY2FuLiBMZXQgbWUgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGFkZGl0aW9uYWwgZmxhZ3MgbWlnaHQgY29tZSBpbnRvIHBsYXkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgzOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODM5Olx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuMzg0MDpcdHtcbjM4NDE6XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rID0gTlVMTDtcbjM4NDI6XHRcdHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqZmV4aXRzID0gTlVMTDtcbjM4NDM6XHRcdHN0cnVjdCBicGZfbGlua19wcmltZXIgbGlua19wcmltZXI7XG4zODQ0Olx0XHR1MzIgY250LCAqaWRzID0gTlVMTDtcbjM4NDU6XHRcdHU2NCBfX3VzZXIgKnVjb29raWVzO1xuMzg0NjpcdFx0dTY0ICpjb29raWVzID0gTlVMTDtcbjM4NDc6XHRcdHUzMiBfX3VzZXIgKnVpZHM7XG4zODQ4Olx0XHRpbnQgZXJyO1xuMzg0OTpcdFxuMzg1MDpcdFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuaWRzKTtcbjM4NTE6XHRcdGNudCA9IGF0dHItXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jbnQ7XG4zODUyOlx0XG4zODUzOlx0XHRpZiAoIWNudCB8fCAhdWlkcylcbjM4NTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODU1Olx0XHRpZiAoY250IFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXG4zODU2Olx0XHRcdHJldHVybiAtRTJCSUc7XG4zODU3Olx0XHRpZiAoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyB8fCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcbjM4NTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODU5Olx0XG4zODYwOlx0XHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XG4zODYxOlx0XHRpZiAoIWlkcylcbjM4NjI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zODYzOlx0XG4zODY0Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XG4zODY1Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4zODY2Olx0XHRcdGdvdG8gZXJyb3I7XG4zODY3Olx0XHR9XG4zODY4Olx0XG4zODY5Olx0XHR1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY29va2llcyk7XG4zODcwOlx0XHRpZiAodWNvb2tpZXMpIHtcbjM4NzE6XHRcdFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XG4zODcyOlx0XHRcdGlmICghY29va2llcykge1xuMzg3MzpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4zODc0Olx0XHRcdFx0Z290byBlcnJvcjtcbjM4NzU6XHRcdFx0fVxuMzg3NjpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoY29va2llcywgdWNvb2tpZXMsIGNudCAqIHNpemVvZigqY29va2llcykpKSB7XG4zODc3Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjM4Nzg6XHRcdFx0XHRnb3RvIGVycm9yO1xuMzg3OTpcdFx0XHR9XG4zODgwOlx0XHR9XG4zODgxOlx0XG4zODgyOlx0XHRlcnIgPSBjaGVja19kdXBfaWRzKGlkcywgY29va2llcywgY250KTtcbjM4ODM6XHRcdGlmIChlcnIpXG4zODg0Olx0XHRcdGdvdG8gZXJyb3I7XG4zODg1Olx0XG4zODg2Olx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcbjM4ODc6XHRcdFx0ZmV4aXRzID0ga3ZtYWxsb2Nfb2JqcygqZmV4aXRzLCBjbnQpO1xuMzg4ODpcdFx0XHRpZiAoIWZleGl0cykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk3NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUcmFjaW5nIE11bHRpLUxpbmsgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCwgd2hpY2ggaXMgdGhlIGBmaWxsX2xpbmtfaW5mb2AgaW1wbGVtZW50YXRpb24gZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgLiBUaGF0JiMzOTtzIGdvb2QsIGl0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSDigJMgY29uZmlybWVkIHZpYSBgYnBmKEJQRl9PQkpfR0VUX0lORk9fQllfRkQsIC4uLilgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIGBCUEZfRVZFTlRTYCBhbmQgYEJQRl9TWVNDQUxMYCwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBnb3RjaGFzLiBXaGF0IGFib3V0IGBDT05GSUdfRlBST0JFYCBvciBgQ09ORklHX0tQUk9CRV9FVkVOVFNgPyBOZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhvc2UuCgpUaGlua2luZyBtb3JlIGJyb2FkbHksIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGNsZWFybHkgdXNlZCBmb3IgZGlmZmVyZW50IHR5cGVzOiBgQlBGX1RSQUNFX0ZFTlRSWV9NVUxUSWAsIGBCUEZfVFJBQ0VfRkVYSVRfTVVMVElgLCBhbmQgYEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSWAuIFRoZXNlIGFyZSBhbGwgdHJhY2luZyBwcm9ncmFtcywgc28gaXQgbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgZGVmaW5lZCB3aXRoaW4gYW55IG90aGVyIGNvbmZpZyBhcyB3ZWxsLCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgdGhlc2UgdHlwZXMgb2YgZGVmaW5pdGlvbnMgdG8gYmUgd2VsbCBzdHJ1Y3R1cmVkLgoKUmlnaHQsIEkganVzdCBzYXcgaW4gYGluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmhgLCBpdCYjMzk7cyBhbGwgdW5kZXIgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyBteSBmaXJzdCB0aG91Z2h0LiBGaW5hbGx5LCBsZXQmIzM5O3MgdmVyaWZ5IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgY29udGFpbnMgYGlzX3RyYWNpbmdfbXVsdGlgIHRvIGNsb3NlIHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc190cmFjaW5nX211bHRpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MjE3OT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Byb2dfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIxOTItXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjIxOTM6c3RhdGljIGlubGluZSBib29sIGlzX3RyYWNpbmdfbXVsdGkoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbmluY2x1ZGUvbGludXgvYnBmLmgtMjE5NC17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjk3Mj1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMDQ3LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzA0ODpcdG11bHRpX2Z1bmMgPSBpc190cmFjaW5nX211bHRpKGF0dHItXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzA0OS1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTMtXHRcdFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTQ6XHRcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk1LVx0XHRcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3OTM9c3RhdGljIGludCBjaGVja19hdHRhY2hfbW9kaWZ5X3JldHVybih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4MDQ6c3RhdGljIGJvb2wgaXNfdHJhY2luZ19tdWx0aV9pZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDUte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODA2Olx0cmV0dXJuIGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkgXHUwMDI2XHUwMDI2IGJwZl9tdWx0aV9mdW5jX2J0Zl9pZFswXSA9PSBidGZfaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODgwOT1zdGF0aWMgaW50IGJ0Zl9pZF9hbGxvd19zbGVlcGFibGUodTMyIGJ0Zl9pZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODI4LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgyOTpcdFx0aWYgKGlzX3RyYWNpbmdfbXVsdGlfaWQocHJvZywgYnRmX2lkKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgzMC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NTg9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTI1LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTEyNjpcdFx0aWYgKGlzX3RyYWNpbmdfbXVsdGlfaWQocHJvZywgYnRmX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTI3LVx0XHRcdGlmIChidGZfaXNfbW9kdWxlKGJ0ZikpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyNjM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzQ3LVx0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1RSQUNJTkcgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNDg6XHQgICAgaXNfdHJhY2luZ19tdWx0aShwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM0OS1cdFx0cmV0dXJuIDA7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz03NzcyPXN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzc3NC1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6Nzc3NTpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJhY2luZ19tdWx0aShlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxudG9vbHMvbGliL2JwZi9saWJicGYuYy03Nzc2LXtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTc4Mzk9c3RhdGljIGludCBsaWJicGZfcHJlcGFyZV9wcm9nX2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzkwMS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzkwMjpcdGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKSB7XG50b29scy9saWIvYnBmL2xpYmJwZi5jLTc5MDMtXHRcdGludCBlcnIsIGJ0Zl9vYmpfZmQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIFRyYWNpbmcgSW5mcmFzdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBzZWUgdGhpcyBgaXNfdHJhY2luZ19tdWx0aWAgZnVuY3Rpb24gY2FsbCwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyBsb2NhdGVkIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBCUEYgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBTbywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoYXQgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYW5kIHZlcmlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcm9sZSBpbiB0aGUgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgdHJhY2luZyBjYXBhYmlsaXRpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGhlYWRlciByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxOTA6XHQjZW5kaWZcbjIxOTE6XHR9XG4yMTkyOlx0XG4yMTkzOlx0c3RhdGljIGlubGluZSBib29sIGlzX3RyYWNpbmdfbXVsdGkoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbjIxOTQ6XHR7XG4yMTk1Olx0XHRyZXR1cm4gdHlwZSA9PSBCUEZfVFJBQ0VfRkVOVFJZX01VTFRJIHx8IHR5cGUgPT0gQlBGX1RSQUNFX0ZFWElUX01VTFRJIHx8XG4yMTk2Olx0XHQgICAgICAgdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEk7XG4yMTk3Olx0fVxuMjE5ODpcdFxuMjE5OTpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXG4yMjAwOlx0LyogVGhpcyBtYWNybyBoZWxwcyBkZXZlbG9wZXIgdG8gcmVnaXN0ZXIgYSBzdHJ1Y3Rfb3BzIHR5cGUgYW5kIGdlbmVyYXRlXG4yMjAxOlx0ICogdHlwZSBpbmZvcm1hdGlvbiBjb3JyZWN0bHkuIERldmVsb3BlcnMgc2hvdWxkIHVzZSB0aGlzIG1hY3JvIHRvIHJlZ2lzdGVyXG4yMjAyOlx0ICogYSBzdHJ1Y3Rfb3BzIHR5cGUgaW5zdGVhZCBvZiBjYWxsaW5nIF9fcmVnaXN0ZXJfYnBmX3N0cnVjdF9vcHMoKSBkaXJlY3RseS5cbjIyMDM6XHQgKi9cbjIyMDQ6XHQjZGVmaW5lIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKHN0X29wcywgdHlwZSlcdFx0XHRcdFxcXG4yMjA1Olx0XHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuMjIwNjpcdFx0XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfIyN0eXBlIHtcdFx0XHRcdFxcXG4yMjA3Olx0XHRcdFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZSBjb21tb247XHRcXFxuMjIwODpcdFx0XHRcdHN0cnVjdCB0eXBlIGRhdGEgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcdFxcXG4yMjA5Olx0XHRcdH07XHRcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCUEYgVHJhY2luZyBNdWx0aS1MaW5rIEZlYXR1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlzX3RyYWNpbmdfbXVsdGlgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBwcmltYXJpbHkgYWJvdXQgY2hlY2tpbmcgdGhlIGF0dGFjaCB0eXBlLiBNYWtlcyBzZW5zZS4gRGVmaW5pdGVseSBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb3JlIHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSwgYXMgZmFyIGFzIHRoaXMgcGF0Y2ggaXMgY29uY2VybmVkLCBhcmUgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gLiBPZiBjb3Vyc2UsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzICphbHNvKiBhIHBvdGVudGlhbCB0YXJnZXQgZm9yIGZ1enppbmcsIGFsdGhvdWdoIEkgY2FuIHNlZSB0aGlzIHBhcnRpY3VsYXIgcGF0Y2ggaXMgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRob3NlIG90aGVyIHR3by4KClRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBCUEZfRVZFTlRTYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgZGVmaW5pdGVseSByZXF1aXJlZC4KCk5vdywgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIHRoZXJlIGFueSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfRlBST0JFYCBvciBgQ09ORklHX0tQUk9CRVNgIGZvciB0aGlzIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGZ1bmN0aW9uYWxpdHk/IFNpbmNlIGl0IHVzZXMgYGJwZl90cmFtcF9ub2RlYCBhbmQgYGJwZl90cmFtcG9saW5lYCwgdGhvc2UgYXJlIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBMZXQgbWUgZGlnIGludG8gd2hlcmUgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgd2hpY2ggYXBwZWFycyB0byBiZSBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODE4PXN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4Mzk6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4NDAte1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM5Mjk6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjEwNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3Mgc2VsZi1yZWZsZWN0aW9uOgoKKipEZWVwIERpdmUgaW50byBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBEdWFsaXR5KioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBpcyBidWdnaW5nIG1lOiB3aHkgaW4gdGhlICp3b3JsZCogYXJlIHRoZXJlICp0d28qIGRlZmluaXRpb25zIGZvciBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYD8gSSBtZWFuLCBJIGtub3cgaG93IHRoZXNlIHRoaW5ncyBhcmUgc3RydWN0dXJlZCwgYW5kIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpcyBnZW5lcmFsbHkgcHJldHR5IGdvb2QsIGJ1dCB0aGlzIGZlZWxzLi4uIHJlZHVuZGFudC4gSXMgaXQgZHVlIHRvIHNvbWUgaGlzdG9yaWNhbCByZWFzb24sIGEgcmVmYWN0b3JpbmcsIGEgcGxhdGZvcm0tc3BlY2lmaWMgZGlmZmVyZW5jZSwgb3IgcGVyaGFwcyBzb21lIHN1YnRsZSBzZW1hbnRpYyBkaXN0aW5jdGlvbiB0aGF0IEkmIzM5O20gbWlzc2luZz8gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBhIGxheWVyaW5nIGlzc3VlIHdoZXJlIGRpZmZlcmVudCBrZXJuZWwgc3Vic3lzdGVtcyBlbmRlZCB1cCBkZXZlbG9waW5nIHNpbWlsYXIgZnVuY3Rpb25zIGluZGVwZW5kZW50bHksIGFuZCB0aGUgY29uc29saWRhdGlvbiBuZXZlciBxdWl0ZSBoYXBwZW5lZC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgaW4gY29kZWJhc2VzIHRoaXMgc2l6ZS4KCkkmIzM5O20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSB1c2UgY2FzZXMuIElzIG9uZSBsaWtlbHkgaW4gYSBkaXJlY3QgYXR0YWNobWVudCBzY2VuYXJpbywgYW5kIHRoZSBvdGhlciBtb3JlIGFic3RyYWN0ZWQ/IERvZXMgb25lIG1hbmFnZSBzb21lIGdsb2JhbCBzdGF0ZSB3aGlsZSB0aGUgb3RoZXIgaXMgbW9yZSBmb2N1c2VkIG9uIGxvY2FsIHJlc291cmNlcz8gQXJlIHRoZSBhcmd1bWVudHMgZGlmZmVyZW50IGVub3VnaCB0byBqdXN0aWZ5IHNlcGFyYXRlIGltcGxlbWVudGF0aW9ucywgb3IgaXMgdGhlcmUgYSBzdHJvbmcgY29kZS1yZXVzZSBvcHBvcnR1bml0eSB0aGF0IHdhcyBtaXNzZWQ/CgpJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdG8gcmVhbGx5IHN1c3MgdGhpcyBvdXQuIEkmIzM5O20gaG9waW5nIEkgZG9uJiMzOTt0IHJ1biBpbnRvIGEgc3BhZ2hldHRpIG1lc3Mgb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSB0byBwcmVwYXJlIGZvciBpdC4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBiZWhpbmQgdGhpcyBkZXNpZ24gY2hvaWNlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIG9wdGltaXphdGlvbiBJJiMzOTttIG92ZXJsb29raW5nLCBvciBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZiB0aGF0IHdhcyBtYWRlLiBJdCYjMzk7cyB0aW1lIHRvIHB1dCBvbiBteSBkZXRlY3RpdmUgaGF0IGFuZCBnbyBleHBsb3JpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzgzMDpcdFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbjM4MzE6XHRcdFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XG4zODMyOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjM4MzM6XHRcdFx0XHRicmVhaztcbjM4MzQ6XHRcdFx0fVxuMzgzNTpcdFx0fVxuMzgzNjpcdFx0cmV0dXJuIGVycjtcbjM4Mzc6XHR9XG4zODM4Olx0XG4zODM5Olx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuMzg0MDpcdHtcbjM4NDE6XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rID0gTlVMTDtcbjM4NDI6XHRcdHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqZmV4aXRzID0gTlVMTDtcbjM4NDM6XHRcdHN0cnVjdCBicGZfbGlua19wcmltZXIgbGlua19wcmltZXI7XG4zODQ0Olx0XHR1MzIgY250LCAqaWRzID0gTlVMTDtcbjM4NDU6XHRcdHU2NCBfX3VzZXIgKnVjb29raWVzO1xuMzg0NjpcdFx0dTY0ICpjb29raWVzID0gTlVMTDtcbjM4NDc6XHRcdHUzMiBfX3VzZXIgKnVpZHM7XG4zODQ4Olx0XHRpbnQgZXJyO1xuMzg0OTpcdFxuMzg1MDpcdFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuaWRzKTtcbjM4NTE6XHRcdGNudCA9IGF0dHItXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jbnQ7XG4zODUyOlx0XG4zODUzOlx0XHRpZiAoIWNudCB8fCAhdWlkcylcbjM4NTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODU1Olx0XHRpZiAoY250IFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXG4zODU2Olx0XHRcdHJldHVybiAtRTJCSUc7XG4zODU3Olx0XHRpZiAoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyB8fCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcbjM4NTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODU5Olx0XG4zODYwOlx0XHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XG4zODYxOlx0XHRpZiAoIWlkcylcbjM4NjI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zODYzOlx0XG4zODY0Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XG4zODY1Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4zODY2Olx0XHRcdGdvdG8gZXJyb3I7XG4zODY3Olx0XHR9XG4zODY4Olx0XG4zODY5Olx0XHR1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY29va2llcyk7XG4zODcwOlx0XHRpZiAodWNvb2tpZXMpIHtcbjM4NzE6XHRcdFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XG4zODcyOlx0XHRcdGlmICghY29va2llcykge1xuMzg3MzpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4zODc0Olx0XHRcdFx0Z290byBlcnJvcjtcbjM4NzU6XHRcdFx0fVxuMzg3NjpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoY29va2llcywgdWNvb2tpZXMsIGNudCAqIHNpemVvZigqY29va2llcykpKSB7XG4zODc3Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjM4Nzg6XHRcdFx0XHRnb3RvIGVycm9yO1xuMzg3OTpcdFx0XHR9XG4zODgwOlx0XHR9XG4zODgxOlx0XG4zODgyOlx0XHRlcnIgPSBjaGVja19kdXBfaWRzKGlkcywgY29va2llcywgY250KTtcbjM4ODM6XHRcdGlmIChlcnIpXG4zODg0Olx0XHRcdGdvdG8gZXJyb3I7XG4zODg1Olx0XG4zODg2Olx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcbjM4ODc6XHRcdFx0ZmV4aXRzID0ga3ZtYWxsb2Nfb2JqcygqZmV4aXRzLCBjbnQpO1xuMzg4ODpcdFx0XHRpZiAoIWZleGl0cykge1xuMzg4OTpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4zODkwOlx0XHRcdFx0Z290byBlcnJvcjtcbjM4OTE6XHRcdFx0fVxuMzg5MjpcdFx0fVxuMzg5MzpcdFxuMzg5NDpcdFx0bGluayA9IGt2emFsbG9jX2ZsZXgoKmxpbmssIG5vZGVzLCBjbnQpO1xuMzg5NTpcdFx0aWYgKCFsaW5rKSB7XG4zODk2Olx0XHRcdGVyciA9IC1FTk9NRU07XG4zODk3Olx0XHRcdGdvdG8gZXJyb3I7XG4zODk4Olx0XHR9XG4zODk5Olx0XG4zOTAwOlx0XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJLFxuMzkwMTpcdFx0XHQgICAgICBcdTAwMjZicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMsIHByb2csIHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpO1xuMzkwMjpcdFxuMzkwMzpcdFx0ZXJyID0gYnBmX2xpbmtfcHJpbWUoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBcdTAwMjZsaW5rX3ByaW1lcik7XG4zOTA0Olx0XHRpZiAoZXJyKVxuMzkwNTpcdFx0XHRnb3RvIGVycm9yO1xuMzkwNjpcdFxuMzkwNzpcdFx0bGluay1cdTAwM2Vub2Rlc19jbnQgPSBjbnQ7XG4zOTA4Olx0XHRsaW5rLVx1MDAzZWNvb2tpZXMgPSBjb29raWVzO1xuMzkwOTpcdFx0bGluay1cdTAwM2VmZXhpdHMgPSBmZXhpdHM7XG4zOTEwOlx0XG4zOTExOlx0XHRlcnIgPSBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gocHJvZywgaWRzLCBsaW5rKTtcbjM5MTI6XHRcdGt2ZnJlZShpZHMpO1xuMzkxMzpcdFx0aWYgKGVycikge1xuMzkxNDpcdFx0XHRicGZfbGlua19jbGVhbnVwKFx1MDAyNmxpbmtfcHJpbWVyKTtcbjM5MTU6XHRcdFx0cmV0dXJuIGVycjtcbjM5MTY6XHRcdH1cbjM5MTc6XHRcdHJldHVybiBicGZfbGlua19zZXR0bGUoXHUwMDI2bGlua19wcmltZXIpO1xuMzkxODpcdFxuMzkxOTpcdGVycm9yOlxuMzkyMDpcdFx0a3ZmcmVlKGZleGl0cyk7XG4zOTIxOlx0XHRrdmZyZWUoY29va2llcyk7XG4zOTIyOlx0XHRrdmZyZWUoaWRzKTtcbjM5MjM6XHRcdGt2ZnJlZShsaW5rKTtcbjM5MjQ6XHRcdHJldHVybiBlcnI7XG4zOTI1Olx0fVxuMzkyNjpcdFxuMzkyNzpcdCNlbHNlXG4zOTI4Olx0XG4zOTI5Olx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gRGlyZWN0aXZlcyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyB3aGVuIGVuY291bnRlcmluZyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBjb250ZXh0LiBUaGUgYCNpZmRlZmAgZGlyZWN0aXZlIGlzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHByZXByb2Nlc3NvciBtYWNybyBpcyBiZWluZyB0ZXN0ZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljIGAjaWZkZWZgIGlzIGNydWNpYWwgdG8gZmlndXJpbmcgb3V0ICp3aGF0KiB0aGlzIGJsb2NrIG9mIGNvZGUgaXMgYWN0dWFsbHkgc3VwcG9zZWQgdG8gZG8gb3IgKndoeSogaXQmIzM5O3MgaGVyZSBhdCBhbGwuIElzIGl0IGZvciBhIHNwZWNpZmljIHBsYXRmb3JtLCBhIGZlYXR1cmUgZmxhZywgYSBkZWJ1ZyBtb2RlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2l0aG91dCB0aGF0IGluZm9ybWF0aW9uLCB0aGlzIGNvZGUgaXMgYmFzaWNhbGx5IG1lYW5pbmdsZXNzIHRvIG1lLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IHNvIEkgY2FuIHN0YXJ0IHRvIHJlYXNvbiB0aHJvdWdoIHRoZSBsb2dpYyB3aXRoaW4gdGhpcyBibG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2Vsc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTU3PXN0YXRpYyBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTc3LX1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo3ODojZWxzZVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTc5LXN0YXRpYyBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzNTg9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdzLCBicGZfa3Byb2JlX211bHRpX3B0X3JlZ3MpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzNTktI2RlZmluZSBicGZfa3Byb2JlX211bHRpX3B0X3JlZ3NfcHRyKClcdHRoaXNfY3B1X3B0cihcdTAwMjZicGZfa3Byb2JlX211bHRpX3B0X3JlZ3MpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjM2MDojZWxzZVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzNjEtI2RlZmluZSBicGZfa3Byb2JlX211bHRpX3B0X3JlZ3NfcHRyKClcdChOVUxMKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNzc5PWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI5MzMtfVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI5MzQ6I2Vsc2UgLyogIUNPTkZJR19GUFJPQkUgKi9cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTM1LWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMyNTA9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzQwMC19XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQwMTojZWxzZSAvKiAhQ09ORklHX1VQUk9CRVMgKi9cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDAyLWludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4Mzk9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI2LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM5Mjc6I2Vsc2Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIHRoZSBQcmUtcmVxdWlzaXRlcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGhlYWRmaXJzdCBpbnRvIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiBzb21ldGhpbmcgZm91bmRhdGlvbmFsOiBgI2lmZGVmYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY2xhcmlmeSBpdHMgcm9sZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhpcywgbGlrZWx5IGtlcm5lbCwgZGV2ZWxvcG1lbnQuIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoaXMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZD8gQW5kIGlmIHNvLCB3aGF0JiMzOTtzIGl0IGd1YXJkaW5nPyBJcyBpdCBmZWF0dXJlIGF2YWlsYWJpbGl0eSwgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSwgdmVyc2lvbiBjb21wYXRpYmlsaXR5Li4uIHRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0LCBhbmQgSSBkb24mIzM5O3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLiBHcmFzcGluZyB0aGUgaW50ZW50IG9mIHRoZSBgI2lmZGVmYCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUmIzM5O3MgYmVoYXZpb3IuIEl04oCZcyBhYm91dCBidWlsZGluZyBhIHJvYnVzdCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIHRoYXQgYnJpbmcgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaW50byBleGlzdGVuY2UuIEkgd2FudCB0byBidWlsZCBhIHJvY2stc29saWQgZm91bmRhdGlvbiBvZiBrbm93bGVkZ2UgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ3LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjQ4OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ5LXN0cnVjdCBicGZfdHJhY2VfbW9kdWxlIHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTczPXVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZl9mYXVsdGFibGUoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4NTojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODYtQlBGX0NBTExfMihicGZfb3ZlcnJpZGVfcmV0dXJuLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB1bnNpZ25lZCBsb25nLCByYylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzA2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzE1OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTYtQlBGX0NBTExfMyhicGZfcHJvYmVfcmVhZF9jb21wYXQsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2MT1CVEZfU0VUX1NUQVJUKGJ0Zl9hbGxvd2xpc3RfZF9wYXRoKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2MjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTYzLUJURl9JRChmdW5jLCBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24pXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2NT1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9vcGVuKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2Ni0jZW5kaWZcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Njc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRIXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY4LUJURl9JRChmdW5jLCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnlfaXAodW5zaWduZWQgbG9uZyBmZW50cnlfaXApXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3Ni17XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA3NzojaWZkZWYgQ09ORklHX1g4Nl9LRVJORUxfSUJUXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3OC1cdGlmIChpc19lbmRicigodm9pZCAqKShmZW50cnlfaXAgLSBFTkRCUl9JTlNOX1NJWkUpKSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA4ND1CUEZfQ0FMTF8xKGJwZl9nZXRfZnVuY19pcF9rcHJvYmUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwODgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA4OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDkwLVx0cnVuX2N0eCA9IGNvbnRhaW5lcl9vZihjdXJyZW50LVx1MDAzZWJwZl9jdHgsIHN0cnVjdCBicGZfdHJhY2VfcnVuX2N0eCwgcnVuX2N0eCk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEyNzQ9YnBmX3RyYWNpbmdfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4MC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMjgxOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMjgyLVx0Y2FzZSBCUEZfRlVOQ19wcm9iZV9yZWFkOlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTEtXHRcdHJldHVybiBwcm9nLVx1MDAzZXNsZWVwYWJsZSA/IFx1MDAyNmJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvIDogXHUwMDI2YnBmX2dldF9zdGFja19wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMzUyOiNpZmRlZiBDT05GSUdfQlBGX0tQUk9CRV9PVkVSUklERVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTMtXHRjYXNlIEJQRl9GVU5DX292ZXJyaWRlX3JldHVybjpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMC1cdHN3aXRjaCAoZnVuY19pZCkge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MzE6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzMyLVx0Y2FzZSBCUEZfRlVOQ19za2Jfb3V0cHV0OlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xODI4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgcmF3X3RyYWNlcG9pbnRfcHJvZ19vcHMgPSB7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTgyOTojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzAtXHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyMDk9aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQzLVx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjQ0OiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDUtXHRcdGlmIChmbGFncyBcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfS1BST0JFKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ5LSNlbmRpZlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNTA6I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI1MS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBUUkFDRV9FVkVOVF9GTF9VUFJPQkUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNzM9c3Vic3lzX2luaXRjYWxsKHNlbmRfc2lnbmFsX2lycV93b3JrX2luaXQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI3NTojaWZkZWYgQ09ORklHX01PRFVMRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc2LXN0YXRpYyBpbnQgYnBmX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG9wLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMzI5PXN0cnVjdCBicGZfc2Vzc2lvbl9ydW5fY3R4IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzM1OiNpZmRlZiBDT05GSUdfRlBST0JFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNi1zdHJ1Y3QgYnBmX2twcm9iZV9tdWx0aV9saW5rIHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjQ0OD1zdGF0aWMgaW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI0OTctXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjQ5ODojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk5LXN0YXRpYyB2b2lkIGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTI3LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI1Mjg6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyOS1cdC5zaG93X2ZkaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI5NDM9c3RhdGljIHU2NCBicGZfa3Byb2JlX211bHRpX2VudHJ5X2lwKHN0cnVjdCBicGZfcnVuX2N0eCAqY3R4KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTQ4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI5NDk6I2lmZGVmIENPTkZJR19VUFJPQkVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk1MC1zdHJ1Y3QgYnBmX3Vwcm9iZV9tdWx0aV9saW5rO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMDA3PXN0YXRpYyBpbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3My1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMDc0OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzUtc3RhdGljIHZvaWQgYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMxMTU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxMTgtXHQuZmlsbF9saW5rX2luZm8gPSBicGZfdXByb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzExOTojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTIwLVx0LnNob3dfZmRpbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1Ny1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg3OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODgtXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MDAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbiBLZXJuZWwgVHJhY2luZyoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEFoYSwgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgKmlzbiYjMzk7dCogZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpbiB0aGlzIGZpbGUuIFRoYXQmIzM5O3MgdW51c3VhbCwgSSBleHBlY3RlZCBzb21lIHNvcnQgb2YgZmVhdHVyZSBmbGFnIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBvciBjb25maWd1cmF0aW9uLiBIbW0sIGJ1dCB3YWl0IGEgbWludXRlLCB0aGVyZSYjMzk7cyBhbiBgI2Vsc2VgIGJsb2NrIGRvd24gYXQgbGluZSAzOTI3LiBPa2F5LCBzbyAqc29tZXRoaW5nKiBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBjb2RlIHRoYXQgKmxlYWRzKiB0byB1c2luZyBvciBub3QgdXNpbmcgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBgI2lmYCB0aGF0IHBhaXJzIHdpdGggdGhhdCBgI2Vsc2VgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkgaGVyZS4gV2hhdCBleGFjdGx5IGlzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQ/IElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGlvbiwgYSBrZXJuZWwgcGFyYW1ldGVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW50byB0aGF0IGNvbmRpdGlvbmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzgwMDpcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXG4zODAxOlx0XHRcdCAgICAgICBjb25zdCB2b2lkICpwcml2IF9fbWF5YmVfdW51c2VkKVxuMzgwMjpcdHtcbjM4MDM6XHRcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XG4zODA0Olx0XHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XG4zODA1Olx0XHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xuMzgwNjpcdFxuMzgwNzpcdFx0aWRzICAgICA9IGRhdGFbMF07XG4zODA4Olx0XHRjb29raWVzID0gZGF0YVsxXTtcbjM4MDk6XHRcbjM4MTA6XHRcdGlmIChjb29raWVzKSB7XG4zODExOlx0XHRcdGNvb2tpZV9hID0gY29va2llcyAmIzQzOyAoaWRfYSAtIGlkcyk7XG4zODEyOlx0XHRcdGNvb2tpZV9iID0gY29va2llcyAmIzQzOyAoaWRfYiAtIGlkcyk7XG4zODEzOlx0XHRcdHN3YXAoKmNvb2tpZV9hLCAqY29va2llX2IpO1xuMzgxNDpcdFx0fVxuMzgxNTpcdFx0c3dhcCgqaWRfYSwgKmlkX2IpO1xuMzgxNjpcdH1cbjM4MTc6XHRcbjM4MTg6XHRzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbjM4MTk6XHR7XG4zODIwOlx0XHR2b2lkICpkYXRhWzJdID0geyBpZHMsIGNvb2tpZXMgfTtcbjM4MjE6XHRcdGludCBlcnIgPSAwO1xuMzgyMjpcdFxuMzgyMzpcdFx0LypcbjM4MjQ6XHRcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcbjM4MjU6XHRcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcbjM4MjY6XHRcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cbjM4Mjc6XHRcdCAqL1xuMzgyODpcdFx0c29ydF9yX25vbmF0b21pYyhpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XG4zODI5Olx0XG4zODMwOlx0XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuMzgzMTpcdFx0XHRpZiAoaWRzW2ldID09IGlkc1tpIC0gMV0pIHtcbjM4MzI6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzgzMzpcdFx0XHRcdGJyZWFrO1xuMzgzNDpcdFx0XHR9XG4zODM1Olx0XHR9XG4zODM2Olx0XHRyZXR1cm4gZXJyO1xuMzgzNzpcdH1cbjM4Mzg6XHRcbjM4Mzk6XHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4zODQwOlx0e1xuMzg0MTpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmsgPSBOVUxMO1xuMzg0MjpcdFx0c3RydWN0IGJwZl90cmFtcF9ub2RlICpmZXhpdHMgPSBOVUxMO1xuMzg0MzpcdFx0c3RydWN0IGJwZl9saW5rX3ByaW1lciBsaW5rX3ByaW1lcjtcbjM4NDQ6XHRcdHUzMiBjbnQsICppZHMgPSBOVUxMO1xuMzg0NTpcdFx0dTY0IF9fdXNlciAqdWNvb2tpZXM7XG4zODQ2Olx0XHR1NjQgKmNvb2tpZXMgPSBOVUxMO1xuMzg0NzpcdFx0dTMyIF9fdXNlciAqdWlkcztcbjM4NDg6XHRcdGludCBlcnI7XG4zODQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODAwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb2RlIHdpdGhpbiB0aGlzIGZpbGUuIEdpdmVuIHRoYXQgSSYjMzk7bSB3b3JraW5nIHdpdGggYSByZWxhdGl2ZWx5IGxhcmdlIGZpbGUsIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBhcHByb2FjaCByYXRoZXIgdGhhbiBhIGJyb2FkIHN3ZWVwLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gYmFja3dhcmQsIGJlZ2lubmluZyBhcm91bmQgbGluZSAzODAwLCB0byBsb29rIGZvciBgI2lmYCBvciBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGVzZSBhcmUgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIEkga25vdyB0aGF0IHNpZ25hbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MsIGFuZCB0aGV5JiMzOTtsbCBsaWtlbHkgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiBpZiB0aGVyZSYjMzk7cyBhbnkgYnJhbmNoaW5nIGxvZ2ljIG5lYXIgdGhhdCBsaW5lLiBGaW5kaW5nIHRoZXNlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0aXZlIGFuZCBpbmFjdGl2ZSBhcm91bmQgdGhhdCBsb2NhdGlvbi4gVGhpcyBzaG91bGQgYmUgYSBxdWljayB3YXkgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00Ny1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo0ODojaWZkZWYgQ09ORklHX01PRFVMRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00OS1zdHJ1Y3QgYnBmX3RyYWNlX21vZHVsZSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3Mz11bnNpZ25lZCBpbnQgdHJhY2VfY2FsbF9icGZfZmF1bHRhYmxlKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpjdHgpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4NC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODU6I2lmZGVmIENPTkZJR19CUEZfS1BST0JFX09WRVJSSURFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg2LUJQRl9DQUxMXzIoYnBmX292ZXJyaWRlX3JldHVybiwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdW5zaWduZWQgbG9uZywgcmMpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMwNj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9wcm90byA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMxNTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE2LUJQRl9DQUxMXzMoYnBmX3Byb2JlX3JlYWRfY29tcGF0LCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjE9QlRGX1NFVF9TVEFSVChidGZfYWxsb3dsaXN0X2RfcGF0aClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5NjI6I2lmZGVmIENPTkZJR19TRUNVUklUWVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2My1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjU9QlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfb3Blbilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjYtI2VuZGlmXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTY3OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfUEFUSFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2OC1CVEZfSUQoZnVuYywgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2VudHJ5X2lwKHVuc2lnbmVkIGxvbmcgZmVudHJ5X2lwKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzYte1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNzc6I2lmZGVmIENPTkZJR19YODZfS0VSTkVMX0lCVFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzgtXHRpZiAoaXNfZW5kYnIoKHZvaWQgKikoZmVudHJ5X2lwIC0gRU5EQlJfSU5TTl9TSVpFKSkpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwODQ9QlBGX0NBTExfMShicGZfZ2V0X2Z1bmNfaXBfa3Byb2JlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDg4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwODk6I2lmZGVmIENPTkZJR19VUFJPQkVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA5MC1cdHJ1bl9jdHggPSBjb250YWluZXJfb2YoY3VycmVudC1cdTAwM2VicGZfY3R4LCBzdHJ1Y3QgYnBmX3RyYWNlX3J1bl9jdHgsIHJ1bl9jdHgpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMjc0PWJwZl90cmFjaW5nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODAtXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTI4MTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4Mi1cdGNhc2UgQlBGX0ZVTkNfcHJvYmVfcmVhZDpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTM0Mz1rcHJvYmVfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUxLVx0XHRyZXR1cm4gcHJvZy1cdTAwM2VzbGVlcGFibGUgPyBcdTAwMjZicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA6IFx1MDAyNmJwZl9nZXRfc3RhY2tfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM1MjojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUzLVx0Y2FzZSBCUEZfRlVOQ19vdmVycmlkZV9yZXR1cm46XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3MjY9dHJhY2luZ19wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzAtXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzMxOiNpZmRlZiBDT05GSUdfTkVUXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMi1cdGNhc2UgQlBGX0ZVTkNfc2tiX291dHB1dDpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgyOD1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHJhd190cmFjZXBvaW50X3Byb2dfb3BzID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4Mjk6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODMwLVx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjA5PWludCBicGZfZ2V0X3BlcmZfZXZlbnRfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHUzMiAqcHJvZ19pZCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI0My1cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI0NDojaWZkZWYgQ09ORklHX0tQUk9CRV9FVkVOVFNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ1LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX0tQUk9CRSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI0OS0jZW5kaWZcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjUwOiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNTEtXHRcdGlmIChmbGFncyBcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfVVBST0JFKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjczPXN1YnN5c19pbml0Y2FsbChzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNzU6I2lmZGVmIENPTkZJR19NT0RVTEVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Ni1zdGF0aWMgaW50IGJwZl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBvcCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjMyOT1zdHJ1Y3QgYnBmX3Nlc3Npb25fcnVuX2N0eCB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjMzNTojaWZkZWYgQ09ORklHX0ZQUk9CRVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzYtc3RydWN0IGJwZl9rcHJvYmVfbXVsdGlfbGluayB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzNTI9c3RydWN0IHVzZXJfc3ltcyB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzNTYtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjM1NzojaWZuZGVmIENPTkZJR19IQVZFX0ZUUkFDRV9SRUdTX0hBVklOR19QVF9SRUdTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjM1OC1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MsIGJwZl9rcHJvYmVfbXVsdGlfcHRfcmVncyk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI0NDg9c3RhdGljIGludCBicGZfa3Byb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk3LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI0OTg6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5OS1zdGF0aWMgdm9pZCBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjUyND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfa3Byb2JlX211bHRpX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyNy1cdC5maWxsX2xpbmtfaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNTI4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MjktXHQuc2hvd19mZGluZm8gPSBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yOTQzPXN0YXRpYyB1NjQgYnBmX2twcm9iZV9tdWx0aV9lbnRyeV9pcChzdHJ1Y3QgYnBmX3J1bl9jdHggKmN0eClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk0OC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTQ5OiNpZmRlZiBDT05GSUdfVVBST0JFU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI5NTAtc3RydWN0IGJwZl91cHJvYmVfbXVsdGlfbGluaztcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzAwNz1zdGF0aWMgaW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzMtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzA3NDojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMDc1LXN0YXRpYyB2b2lkIGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMTE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTE4LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMxMTk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzEyMC1cdC5zaG93X2ZkaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2Nzk9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjgwLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM2ODE6I2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTKSBcdTAwMjZcdTAwMjYgXFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjgyLSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1Ny1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg3OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODgtXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5MDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb246CgoqKk5hdmlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIExhYnlyaW50aCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsYW5kZWQgb24gbGluZSAzNjgxLCBhbmQgaXQmIzM5O3Mgc3RhcmluZyBtZSByaWdodCBpbiB0aGUgZmFjZTogYSBgI2lmYCBzdGF0ZW1lbnQhIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGhhdCBjb21wbGV4IGNvbmRpdGlvbmFsIGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIFRoaXMgaXMgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3BlY2lmaWMgZmVhdHVyZSwgcHJlc3VtYWJseSByZWxhdGVkIHRvIGR5bmFtaWMgZnVuY3Rpb24gdHJhY2luZywgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaXJlY3QgY2FsbHMgb3B0aW1pemF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCAqdGhpcyogaXMgd2hlcmUgdGhlIGRlY2lzaW9uIGlzIG1hZGUuJiMzNDsgU28sIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIHBhdGggaXMgZXhlY3V0ZWQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGluIHdoYXQgc2l0dWF0aW9uIGRvZXMgdGhlIGJsb2NrIG9mIGNvZGUgaW5zaWRlIHRoaXMgI2lmLCBleGVjdXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY4MDpcdFxuMzY4MTpcdCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IFxcXG4zNjgyOlx0ICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxuMzY4MzpcdFxuMzY4NDpcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4zNjg1Olx0e1xuMzY4NjpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKnRyX2xpbmsgPVxuMzY4NzpcdFx0XHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xuMzY4ODpcdFxuMzY4OTpcdFx0V0FSTl9PTl9PTkNFKGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLVx1MDAzZXByb2csIHRyX2xpbmspKTtcbjM2OTA6XHR9XG4zNjkxOlx0XG4zNjkyOlx0c3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbjM2OTM6XHR7XG4zNjk0Olx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XG4zNjk1Olx0XHRcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7XG4zNjk2Olx0XG4zNjk3Olx0XHRrdmZyZWUodHJfbGluay1cdTAwM2VmZXhpdHMpO1xuMzY5ODpcdFx0a3ZmcmVlKHRyX2xpbmstXHUwMDNlY29va2llcyk7XG4zNjk5Olx0XHRrdmZyZWUodHJfbGluayk7XG4zNzAwOlx0fVxuMzcwMTpcdFxuMzcwMjpcdHN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4zNzAzOlx0XHRcdFx0XHRcdFx0IHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxuMzcwNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2NTQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBUcmFjaW5nIExpbmsgSW5mb3JtYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O3ZlIHBpbnBvaW50ZWQgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGFzIGJlaW5nIGdhdGVkIGJlaGluZCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIEV4Y2VsbGVudCwgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXNlIGNvbmZpZ3MgcGxheSB0b2dldGhlciBhbmQgaG93IHRoZXkgbWlnaHQgaW1wYWN0IHRoZSB1c2FiaWxpdHkgb2YgdGhpcyBmZWF0dXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLiBJIHJlY2FsbCBgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggeDg2LiBBbmQsIGlmIEkmIzM5O20gcmVtZW1iZXJpbmcgY29ycmVjdGx5LCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBpcyBhbHNvIG9mdGVuIGVuYWJsZWQgYnkgeDg2LiBTbywgYXJlIHRoZXNlIGNvbmZpZ3MgZXhwb3NlZCBhcyB1c2VyIG9wdGlvbnM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGFyZSBzb21ldGhpbmcgYSB1c2VyIGNhbiBjb250cm9sIGRpcmVjdGx5LCBvciBpZiB0aGV5IGFyZSBqdXN0IGJlaW5nIGltcGxpY2l0bHkgZW5hYmxlZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBlaXRoZXIgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBvciBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHVzZXItZmFjaW5nIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlbS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgc29tZXRoaW5nIHRoZSB1c2VyIG5lZWRzIHRvIGJlIGF3YXJlIG9mIG9yIGlmIHRoaXMgaXMgYW4geDg2LXNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzIxNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBGdHJhY2UgQm9vbGVhbiBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRlZl9ib29sIHlgIGRlZmluaXRpb24uIFRoaXMgaXMgY2xlYXJseSBjb250aW5nZW50IG9uIHRoZSBpbnRlcnBsYXkgb2YgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYW5kIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8gcmVsYXRlZCB0byBmdW5jdGlvbiB0cmFjaW5nLiBUaGlzIHJlbWluZHMgbWUgb2Ygc29tZSBwb3RlbnRpYWwgaXNzdWVzIGludm9sdmluZyByZWdpc3RlciB1c2FnZSB3aXRoIGR5bmFtaWMgZnRyYWNlLiBXZSBuZWVkIGEgYm9vbGVhbiB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYHlgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYHlgIHJlcHJlc2VudHMgdGhlIHNldHRpbmcgZm9yIHRoZSB1c2Ugb2YgZHluYW1pYyBmdHJhY2UuCgpCZWZvcmUgZ29pbmcgZnVydGhlciwgaXQgd291bGQgYmUgbG9naWNhbCB0byBjaGVjayBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBUaGlzIGlzIGxpa2VseSByZWxldmFudC4gSXQgc2VlbXMgbGlrZSB0aGUgYXJjaGl0ZWN0dXJlIG1heSBoYXZlIGl0cyBvd24gaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRpcmVjdCBvcGVyYXRpb25zIHBhdGguIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29ycmVjdCBkZWZhdWx0IHZhbHVlIGZvciBgeWAuIFRoaXMgY2hlY2tzIGEgc2luZ2xlIGZ0cmFjZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaWYgaXQgYWxsb3dzIHRoZSBkaXJlY3Qgb3BlcmF0aW9ucyBwYXRoLiBUaGUgdmFsdWUgbWF5IGJlIHVzZWQgdG8gYWxsb3cvZGlzYWxsb3cgdGhlIGB5YCB2YXJpYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTUwPWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1Mzpjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYzNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipIaWRkZW4gQm9vbGVhbnMgYW5kIENvbmZpZ3VyYXRpb24gRGV0YWlscyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgaGlkZGVuIGJvb2xlYW4gaGVyZS4gVGhhdCBtZWFucyB3ZSBkb24mIzM5O3QgbmVlZCB0byBleHBvc2UgaXQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgaW4gYEVuYWJsZUNvbmZpZ3NgLiBJdCYjMzk7cyBub3Qgc29tZXRoaW5nIHRoZXkgY2FuIGRpcmVjdGx5IHNlbGVjdCBvciBkZXNlbGVjdC4gSG93ZXZlciwgaXQgc2VlbXMgY3J1Y2lhbCB0byB0aGUgZnVuY3Rpb25hbGl0eSwgc28gd2UgKmRvKiBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBleHBsaWNpdGx5IHNwZWNpZnkgYENPTkZJR19CUEZfRVZFTlRTYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEhvbGQgb24gYSBzZWNvbmQuLi4gSSB0aGluayBgQ09ORklHX0JQRl9FVkVOVFNgICppcyogYWN0dWFsbHkgdXNlci1zZWxlY3RhYmxlLCBpc24mIzM5O3QgaXQ/IEJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIHZlcmlmeSBpZiBgQ09ORklHX0JQRl9FVkVOVFNgIGNhbiBiZSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfRVZFTlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctODU0LVx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgQlBGLUJhc2VkIFRyYWNpbmcqKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgZm9yIEJQRi1iYXNlZCB0cmFjaW5nLiBSaWdodCwgYEJQRl9FVkVOVFNgIGlzIGRlZmluaXRlbHkgdXNlci1zZWxlY3RhYmxlLCBzbyBJIHNob3VsZCBiZSBnb29kIHRoZXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9FVkVOVFNgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSBib3RoIGluY2x1ZGVkLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgd2hhdCBhYm91dCBgRlBST0JFYCBvciBgS1BST0JFU2A/IExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgZm9yIHRoYXQgaXMgdHVja2VkIGF3YXkgdW5kZXIgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIHdoaWNoIGl0c2VsZiBkZXBlbmRzIG9uIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYEZUUkFDRWAuIEFscmlnaHQsIHNvIGBGVFJBQ0VgIGlzICphYnNvbHV0ZWx5KiBuZWVkZWQsIGFuZCBgRFlOQU1JQ19GVFJBQ0VgIGFzIHdlbGwuIFRoYXTigJlzIGFsbCBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKQnV0IG5vdyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfRVZFTlRTYCBhcmUgY29ycmVjdC4gYEJQRl9FVkVOVFNgIGFsc28gZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgIGFuZCB0aGVuIGRlcGVuZHMgb24gYSBmZXcgb3RoZXIgdGhpbmdzLCBlaXRoZXIgYEtQUk9CRV9FVkVOVFNgLCBgVVBST0JFX0VWRU5UU2AsIG9yIGBQRVJGX0VWRU5UU2AuIEhhbmcgb27igKYgaXQmIzM5O3MgYEJQRl9TWVNDQUxMYCAqYW5kKiBgS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTIHx8IFBFUkZfRVZFTlRTYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgb25lIG9mIHRob3NlIGxhc3QgdGhyZWUgZW5hYmxlZCwgYXMgYEJQRl9TWVNDQUxMYCBkZXBlbmRzIG9uIG9uZSBvZiB0aG9zZSwgYW5kIHRoZSB3aG9sZSB0aGluZyBoaW5nZXMgb24gdGhhdC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBnbyBhbmQgZG91YmxlLWNoZWNrIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGZvciBgQlBGX0VWRU5UU2AuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODUxOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg1NTpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4NTY6XHRcdGJvb2xcbiA4NTc6XHRcdGRlZmF1bHQgeVxuIDg1ODpcdFx0aGVscFxuIDg1OTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NjA6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODYzOlx0XHRkZWZfYm9vbCBuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg2NjpcdFx0ZGVmX2Jvb2wgblxuIDg2NzpcdFxuIDg2ODpcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4gODY5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgRXZlbnQgQ29uZmlndXJhdGlvbiBhbmQgVHJhY2luZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBCUEZfRVZFTlRTYCBpcyBhIGJvb2xlYW4gdmFsdWUgdGhhdCYjMzk7cyBhdXRvbWF0aWNhbGx5IHNldCB0byAmIzM5O3kmIzM5OyAoeWVzKSBpZiBpdHMgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IGEgZGlyZWN0IHVzZXIgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCByYXRoZXIsIGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGBVUFJPQkVfRVZFTlRTYCwgYW5kIGBQRVJGX0VWRU5UU2AuIEdvdCBpdC4gU28sIHJlYWxseSwgd2hhdCB3ZSBuZWVkIHRvIGZvY3VzIG9uIGFyZSB0aG9zZSBkZXBlbmRlbmNpZXMuIFdlIGNhbiBqdXN0IGxpc3QgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9FVkVOVFNgLCBldmVuIHRob3VnaCBgQlBGX0VWRU5UU2AgZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTssIFN5emthbGxlciBoYW5kbGVzIHRoaXMuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQmIzM5O3MgdGhlIG1haW4gZnVuY3Rpb24gdG8gZm9jdXMgb24gaGVyZSwgcmVnYXJkaW5nIHRoZSBjb2RlIGFkZGVkIGJ5IHRoaXMgcGF0Y2g/IElzIGl0IGp1c3QgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gPyBZZXMsIHNlZW1zIGxpa2UgaXQuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZnVuY3Rpb24gYWRkZWQuIEFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBhbHNvIG1vZGlmaWVkLCBidXQgaXQmIzM5O3Mgbm90IGFsbG9jYXRpbmcgYW55dGhpbmcgbmV3LiBJdCYjMzk7cyBtb2RpZnlpbmcgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzYCwgbm90IHRoZSBhbGxvY2F0aW9uIGl0c2VsZi4gUmlnaHQsIG5vLCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhbHJlYWR5IGhhbmRsZWQgYGlkc2AgYW5kIGBjb29raWVzYCBhbGxvY2F0aW9uLiBJdCYjMzk7cyByZWFsbHkganVzdCB0aGUgbGluayBpbmZvIGFuZCBvcGVyYXRpb25zLiBIYW5nIG9uLCBsZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGRpZmYgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2OTI9c3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzcwMS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzAyOnN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzcwMy1cdFx0XHRcdFx0XHQgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg1LVx0LmRlYWxsb2NfZGVmZXJyZWQgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2MsXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4NjpcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4Ny0jaWZkZWYgQ09ORklHX1BST0NfRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MTUKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogNTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBCUEYgVHJhY2luZyBNdWx0aS1MaW5rIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gLCB3aGljaCBpcyBiZWluZyBhc3NpZ25lZCBhcyB0aGUgYC5maWxsX2xpbmtfaW5mb2AgZnVuY3Rpb24gd2l0aGluIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHNgLiBUaGF0JiMzOTtzIHRoZSBrZXkga2VybmVsIGZ1bmN0aW9uIHdlJiMzOTtyZSBhZGRpbmcuIFRoZSByZXN0IG9mIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb25maW5lZCB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzbyB0aGUgY29yZSBsb2dpYyByZXNpZGVzIGluIHRoYXQgb25lIGZ1bmN0aW9uLgoKVGhlcmVmb3JlLCBmb3Igb3VyIGZ1enppbmcgdGFyZ2V0cywgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AuIE5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7bGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AsIG9mIGNvdXJzZS4KCkhtbSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEFoYSwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGFyZSBwcmVyZXF1aXNpdGVzIGZvciBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgdG8gY29tcGlsZSwgYnV0IHRoZXNlIGFyZSBzZWxlY3RlZCBieSBgRlRSQUNFYCBhbmQgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBwcm9iYWJseSBzYWZlc3QgdG8gYWRkIGBGVFJBQ0VgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB0byBlbnN1cmUgZnVsbCBjb3ZlcmFnZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSByZWFjaGFiaWxpdHkuIFRoZSBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB2aWEgdGhlIGBicGYoQlBGX09CSl9HRVRfSU5GT19CWV9GRCwgLi4uKWAgc3lzY2FsbCBvbiBhIHRyYWNpbmcgbXVsdGkgbGluayBmaWxlIGRlc2NyaXB0b3IuIFdlIGdldCBvbmUgb2YgdGhvc2UgYnkgY2FsbGluZyBgYnBmKEJQRl9MSU5LX0NSRUFURSwgLi4uKWAgd2l0aCBgYXR0YWNoX3R5cGVgIHNldCB0byBlaXRoZXIgYEJQRl9UUkFDRV9GRU5UUllfTVVMVElgLCBgQlBGX1RSQUNFX0ZFWElUX01VTFRJYCwgb3IgYEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSWAuIFllcCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdmlhYmxlIGNvZGUgcGF0aC4gTm8gZGVhZCBjb2RlIHRoZXJlIQoKT2theSwgbGV0JiMzOTtzIHdyaXRlIHRoaXMgdXAgbmVhdGx5LgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzOiBbJiMzNDticGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0JQRl9TWVNDQUxMJiMzNDssICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LCAmIzM0O0ZUUkFDRSYjMzQ7LCAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDtdYAoqICAgYFJlYXNvbmluZzogVGhlIHBhdGNoIGVuYWJsZXMgdGhlIGBmaWxsX2xpbmtfaW5mb2AgZnVuY3Rpb25hbGl0eSBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgbGV0cyB1c2Vyc3BhY2UgcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgbXVsdGkgbGlua3MgdmlhIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCB0aHJvdWdoIHRoZSBicGYgc3lzY2FsbC4gU3BlY2lmaWNhbGx5LCB0aGUgbmV3IGZ1bmN0aW9uIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGNvcGllcyBkYXRhIGJhY2sgdG8gdXNlcnNwYWNlLiBTaW5jZSBpdCYjMzk7cyByZWFjaGFibGUgYW5kIGRhdGEgdHJhbnNmZXIgb2NjdXJzLCBpdCByZXF1aXJlcyBmdXp6aW5nLmAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowMzozOS4yNDYyMzEwNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQyMDQ0Nzk5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZmlsbF9saW5rX2luZm9gIHN1cHBvcnQgZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgIGxpbmtzLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdHJhY2luZyBtdWx0aSBsaW5rcyB2aWEgdGhlIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCBjb21tYW5kIG9mIHRoZSBgYnBmYCBzeXNjYWxsLiBUaGUgbmV3IGZ1bmN0aW9uIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGNvcGllcyBkYXRhIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowMzozOS4yNDYyMzU1ODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODg0MTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzZWY3OGM3MGYwODM0ZWQ5ZTA0NWY1YWVlZDU0MjIzNTIwYmY1MmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdW4gMjEgMjE6MDM6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggODliMzZkZTVmZGJiNmQuLjgwNDIzY2NjNmI1N2M3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC02ODM5LDYgKzY4MzksMTUgQEAgc3RydWN0IGJwZl9saW5rX2luZm8ge1xcbiBcXHRcXHRcXHRfX3UzMiBmbGFncztcXG4gXFx0XFx0XFx0X191MzIgcGlkO1xcbiBcXHRcXHR9IHVwcm9iZV9tdWx0aTtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0X191MzIgYXR0YWNoX3R5cGU7XFxuK1xcdFxcdFxcdF9fdTMyIGNvdW50OyAvKiBpbi9vdXQ6IHRyYWNpbmdfbXVsdGkgdGFyZ2V0IGNvdW50ICovXFxuK1xcdFxcdFxcdF9fdTMyIG9ial9pZDtcXG4rXFx0XFx0XFx0X191MzIgOjMyO1xcbitcXHRcXHRcXHRfX2FsaWduZWRfdTY0IGlkcztcXG4rXFx0XFx0XFx0X19hbGlnbmVkX3U2NCBhZGRycztcXG4rXFx0XFx0XFx0X19hbGlnbmVkX3U2NCBjb29raWVzO1xcbitcXHRcXHR9IHRyYWNpbmdfbXVsdGk7XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdF9fdTMyIHR5cGU7IC8qIGVudW0gYnBmX3BlcmZfZXZlbnRfdHlwZSAqL1xcbiBcXHRcXHRcXHRfX3UzMiA6MzI7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbmluZGV4IDgyZjhmZWVhNjkzMTFhLi5mZGFiNGVjNWFkNGY0NSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG5AQCAtMzY5OSw2ICszNjk5LDYwIEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuIFxcdGt2ZnJlZSh0cl9saW5rKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbit7XFxuK1xcdHU2NCBfX3VzZXIgKnVjb29raWVzID0gdTY0X3RvX3VzZXJfcHRyKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuY29va2llcyk7XFxuK1xcdHU2NCBfX3VzZXIgKnVhZGRycyA9IHU2NF90b191c2VyX3B0cihpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmFkZHJzKTtcXG4rXFx0dTMyIF9fdXNlciAqdWlkcyA9IHU2NF90b191c2VyX3B0cihpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmlkcyk7XFxuK1xcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICp0cl9saW5rO1xcbitcXHR1MzIgdWNvdW50ID0gaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDtcXG4rXFx0Ym9vbCBoYXNfY29va2llcywgc2hvd19hZGRycztcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoKHVpZHMgfHwgdWNvb2tpZXMgfHwgdWFkZHJzKSBcXHUwMDI2XFx1MDAyNiAhdWNvdW50KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHRyX2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xcbitcXG4rXFx0aW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSA9IHRyX2xpbmstXFx1MDAzZWxpbmsuYXR0YWNoX3R5cGU7XFxuK1xcdGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQgPSB0cl9saW5rLVxcdTAwM2Vub2Rlc19jbnQ7XFxuK1xcdGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkub2JqX2lkID0gYnRmX29ial9pZCh0cl9saW5rLVxcdTAwM2VsaW5rLnByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zik7XFxuK1xcbitcXHRpZiAoIXVpZHMgXFx1MDAyNlxcdTAwMjYgIXVjb29raWVzIFxcdTAwMjZcXHUwMDI2ICF1YWRkcnMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHVjb3VudCBcXHUwMDNjIHRyX2xpbmstXFx1MDAzZW5vZGVzX2NudClcXG4rXFx0XFx0ZXJyID0gLUVOT1NQQztcXG4rXFx0ZWxzZVxcbitcXHRcXHR1Y291bnQgPSB0cl9saW5rLVxcdTAwM2Vub2Rlc19jbnQ7XFxuK1xcbitcXHRoYXNfY29va2llcyA9ICEhdHJfbGluay1cXHUwMDNlY29va2llcztcXG4rXFx0c2hvd19hZGRycyA9IGthbGxzeW1zX3Nob3dfdmFsdWUoY3VycmVudF9jcmVkKCkpO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB1Y291bnQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGUgPSBcXHUwMDI2dHJfbGluay1cXHUwMDNlbm9kZXNbaV07XFxuK1xcdFxcdHU2NCBhZGRyLCBjb29raWU7XFxuK1xcdFxcdHUzMiBpZDtcXG4rXFxuK1xcdFxcdGJwZl90cmFtcG9saW5lX3VucGFja19rZXkobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUtXFx1MDAzZWtleSwgTlVMTCwgXFx1MDAyNmlkKTtcXG4rXFxuK1xcdFxcdGFkZHIgPSBzaG93X2FkZHJzID8gbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUtXFx1MDAzZWlwIDogMDtcXG4rXFx0XFx0Y29va2llID0gaGFzX2Nvb2tpZXMgPyB0cl9saW5rLVxcdTAwM2Vjb29raWVzW2ldIDogMDtcXG4rXFxuK1xcdFxcdGlmICh1aWRzIFxcdTAwMjZcXHUwMDI2IHB1dF91c2VyKGlkLCB1aWRzICsgaSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRpZiAodWFkZHJzIFxcdTAwMjZcXHUwMDI2IHB1dF91c2VyKGFkZHIsIHVhZGRycyArIGkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0aWYgKHVjb29raWVzIFxcdTAwMjZcXHUwMDI2IHB1dF91c2VyKGNvb2tpZSwgdWNvb2tpZXMgKyBpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG5AQCAtMzcyOSw2ICszNzgzLDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XFxuIFxcdC5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLFxcbiBcXHQuZGVhbGxvY19kZWZlcnJlZCA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyxcXG4rXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuIFxcdC5zaG93X2ZkaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvLFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvbGluay5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvbGluay5jXFxuaW5kZXggYmRjZDcxN2IwMzQ4ZjguLjU4ZGFkZWU5ODRhMDc4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuY1xcbkBAIC0zNzcsNiArMzc3LDMxIEBAIHN0YXRpYyBfX3U2NCAqdTY0X3RvX2FycihfX3U2NCB2YWwpXFxuIFxcdHJldHVybiAoX191NjQgKikgdTY0X3RvX3B0cih2YWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgX191MzIgKnU2NF90b191MzJfYXJyKF9fdTY0IHZhbClcXG4re1xcbitcXHRyZXR1cm4gKF9fdTMyICopdTY0X3RvX3B0cih2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGtlcm5lbF9zeW0gKmZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKF9fdTY0IGFkZHIsIGJvb2wgaXNfaWJ0X2VuYWJsZWQpXFxuK3tcXG4rXFx0c3RydWN0IGtlcm5lbF9zeW0gKnN5bTtcXG4rXFxuK1xcdGlmICghYWRkcilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHQvKiBMb2FkIGl0IG9uY2UgZm9yIGFsbC4gKi9cXG4rXFx0aWYgKCFkZC5zeW1fY291bnQpXFxuK1xcdFxcdGtlcm5lbF9zeW1zX2xvYWQoXFx1MDAyNmRkKTtcXG4rXFx0aWYgKCFkZC5zeW1fY291bnQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0c3ltID0ga2VybmVsX3N5bXNfc2VhcmNoKFxcdTAwMjZkZCwgYWRkcik7XFxuK1xcdGlmICghc3ltIFxcdTAwMjZcXHUwMDI2IGlzX2lidF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGFkZHIgXFx1MDAzZT0gNClcXG4rXFx0XFx0c3ltID0ga2VybmVsX3N5bXNfc2VhcmNoKFxcdTAwMjZkZCwgYWRkciAtIDQpO1xcbitcXG4rXFx0cmV0dXJuIHN5bTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gc2hvd191cHJvYmVfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxcbiB7XFxuQEAgLTQwMyw2ICs0MjgsNDMgQEAgc2hvd191cHJvYmVfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxcbiBcXHRqc29ud19lbmRfYXJyYXkoanNvbl93dHIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZFxcbitzaG93X3RyYWNpbmdfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxcbit7XFxuK1xcdGJvb2wgaXNfaWJ0X2VuYWJsZWQgPSBpc194ODZfaWJ0X2VuYWJsZWQoKTtcXG4rXFx0X191MzIgaTtcXG4rXFxuK1xcdHNob3dfbGlua19hdHRhY2hfdHlwZV9qc29uKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIHd0cik7XFxuK1xcdGpzb253X3VpbnRfZmllbGQod3RyLCBcXFwiZnVuY19jbnRcXFwiLCBpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KTtcXG4rXFx0anNvbndfdWludF9maWVsZCh3dHIsIFxcXCJvYmpfaWRcXFwiLCBpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLm9ial9pZCk7XFxuK1xcdGpzb253X25hbWUod3RyLCBcXFwiZnVuY3NcXFwiKTtcXG4rXFxuK1xcdGpzb253X3N0YXJ0X2FycmF5KHd0cik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDsgaSsrKSB7XFxuK1xcdFxcdF9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuYWRkcnMpW2ldO1xcbitcXHRcXHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xcbitcXG4rXFx0XFx0c3ltID0gZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoYWRkciwgaXNfaWJ0X2VuYWJsZWQpO1xcbitcXG4rXFx0XFx0anNvbndfc3RhcnRfb2JqZWN0KHd0cik7XFxuK1xcdFxcdGpzb253X3VpbnRfZmllbGQod3RyLCBcXFwiaWRcXFwiLCB1NjRfdG9fdTMyX2FycihpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmlkcylbaV0pO1xcbitcXHRcXHRqc29ud191aW50X2ZpZWxkKHd0ciwgXFxcImFkZHJcXFwiLCBhZGRyKTtcXG4rXFx0XFx0aWYgKHN5bSkge1xcbitcXHRcXHRcXHRqc29ud19zdHJpbmdfZmllbGQod3RyLCBcXFwiZnVuY1xcXCIsIHN5bS1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdFxcdGlmIChzeW0tXFx1MDAzZW1vZHVsZVswXSA9PSAnXFxcXDAnKSB7XFxuK1xcdFxcdFxcdFxcdGpzb253X25hbWUod3RyLCBcXFwibW9kdWxlXFxcIik7XFxuK1xcdFxcdFxcdFxcdGpzb253X251bGwod3RyKTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0anNvbndfc3RyaW5nX2ZpZWxkKHd0ciwgXFxcIm1vZHVsZVxcXCIsIHN5bS1cXHUwMDNlbW9kdWxlKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGpzb253X3VpbnRfZmllbGQod3RyLCBcXFwiY29va2llXFxcIiwgdTY0X3RvX2FycihpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcXG4rXFx0XFx0anNvbndfZW5kX29iamVjdCh3dHIpO1xcbitcXHR9XFxuK1xcdGpzb253X2VuZF9hcnJheSh3dHIpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBzaG93X3BlcmZfZXZlbnRfa3Byb2JlX2pzb24oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8sIGpzb25fd3JpdGVyX3QgKnd0cilcXG4ge1xcbkBAIC01ODksNiArNjUxLDkgQEAgc3RhdGljIGludCBzaG93X2xpbmtfY2xvc2VfanNvbihpbnQgZmQsIHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbiBcXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxcbiBcXHRcXHRzaG93X3Vwcm9iZV9tdWx0aV9qc29uKGluZm8sIGpzb25fd3RyKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJOlxcbitcXHRcXHRzaG93X3RyYWNpbmdfbXVsdGlfanNvbihpbmZvLCBqc29uX3d0cik7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9MSU5LX1RZUEVfUEVSRl9FVkVOVDpcXG4gXFx0XFx0c3dpdGNoIChpbmZvLVxcdTAwM2VwZXJmX2V2ZW50LnR5cGUpIHtcXG4gXFx0XFx0Y2FzZSBCUEZfUEVSRl9FVkVOVF9FVkVOVDpcXG5AQCAtODMzLDYgKzg5OCwzOCBAQCBzdGF0aWMgdm9pZCBzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzaG93X3RyYWNpbmdfbXVsdGlfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0Ym9vbCBpc19pYnRfZW5hYmxlZCA9IGlzX3g4Nl9pYnRfZW5hYmxlZCgpO1xcbitcXHRfX3UzMiBpO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwcmludGYoXFxcIlxcXFxuXFxcXHRcXFwiKTtcXG4rXFx0c2hvd19saW5rX2F0dGFjaF90eXBlX3BsYWluKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUpO1xcbitcXHRwcmludGYoXFxcIm9ial9pZCAldSAgXFxcIiwgaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5vYmpfaWQpO1xcbitcXHRwcmludGYoXFxcImNvdW50ICV1ICBcXFwiLCBpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KTtcXG4rXFxuK1xcdHByaW50ZihcXFwiXFxcXG5cXFxcdCUtMTZzICUtMTZzICUtMTZzICVzXFxcIixcXG4rXFx0ICAgICAgIFxcXCJidGZfaWRcXFwiLCBcXFwiYWRkclxcXCIsIFxcXCJjb29raWVcXFwiLCBcXFwiZnVuYyBbbW9kdWxlXVxcXCIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDsgaSsrKSB7XFxuK1xcdFxcdF9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuYWRkcnMpW2ldO1xcbitcXHRcXHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xcbitcXG4rXFx0XFx0c3ltID0gZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoYWRkciwgaXNfaWJ0X2VuYWJsZWQpO1xcbitcXG4rXFx0XFx0cHJpbnRmKFxcXCJcXFxcblxcXFx0JS0xNnUgJTAxNmxseCAlLTE2bGx4XFxcIixcXG4rXFx0XFx0ICAgICAgIHU2NF90b191MzJfYXJyKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuaWRzKVtpXSxcXG4rXFx0XFx0ICAgICAgIGFkZHIsIHU2NF90b19hcnIoaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5jb29raWVzKVtpXSk7XFxuK1xcdFxcdGlmIChzeW0pIHtcXG4rXFx0XFx0XFx0cHJpbnRmKFxcXCIgJXNcXFwiLCBzeW0tXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRpZiAoc3ltLVxcdTAwM2Vtb2R1bGVbMF0gIT0gJ1xcXFwwJylcXG4rXFx0XFx0XFx0XFx0cHJpbnRmKFxcXCIgWyVzXVxcXCIsIHN5bS1cXHUwMDNlbW9kdWxlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHNob3dfcGVyZl9ldmVudF9rcHJvYmVfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqYnVmO1xcbkBAIC05ODksNiArMTA4Niw5IEBAIHN0YXRpYyBpbnQgc2hvd19saW5rX2Nsb3NlX3BsYWluKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXFxuIFxcdGNhc2UgQlBGX0xJTktfVFlQRV9VUFJPQkVfTVVMVEk6XFxuIFxcdFxcdHNob3dfdXByb2JlX211bHRpX3BsYWluKGluZm8pO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEk6XFxuK1xcdFxcdHNob3dfdHJhY2luZ19tdWx0aV9wbGFpbihpbmZvKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxcbiBcXHRcXHRzd2l0Y2ggKGluZm8tXFx1MDAzZXBlcmZfZXZlbnQudHlwZSkge1xcbiBcXHRcXHRjYXNlIEJQRl9QRVJGX0VWRU5UX0VWRU5UOlxcbkBAIC0xMDI5LDYgKzExMjksNyBAQCBzdGF0aWMgaW50IHNob3dfbGlua19jbG9zZV9wbGFpbihpbnQgZmQsIHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbiBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpXFxuIHtcXG4gXFx0X191NjQgKnJlZl9jdHJfb2Zmc2V0cyA9IE5VTEwsICpvZmZzZXRzID0gTlVMTCwgKmNvb2tpZXMgPSBOVUxMO1xcbitcXHRfX3UzMiAqaWRzID0gTlVMTDtcXG4gXFx0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcXG4gXFx0X191MzIgbGVuID0gc2l6ZW9mKGluZm8pO1xcbiBcXHRjaGFyIHBhdGhfYnVmW1BBVEhfTUFYXTtcXG5AQCAtMTExNCw2ICsxMjE1LDM5IEBAIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZClcXG4gXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdGlmIChpbmZvLnR5cGUgPT0gQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaW5mby50cmFjaW5nX211bHRpLmlkcykge1xcbitcXHRcXHRjb3VudCA9IGluZm8udHJhY2luZ19tdWx0aS5jb3VudDtcXG4rXFx0XFx0aWYgKGNvdW50KSB7XFxuK1xcdFxcdFxcdGlkcyA9IGNhbGxvYyhjb3VudCwgc2l6ZW9mKF9fdTMyKSk7XFxuK1xcdFxcdFxcdGlmICghaWRzKSB7XFxuK1xcdFxcdFxcdFxcdHBfZXJyKFxcXCJtZW0gYWxsb2MgZmFpbGVkXFxcIik7XFxuK1xcdFxcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcXG4rXFxuK1xcdFxcdFxcdGFkZHJzID0gY2FsbG9jKGNvdW50LCBzaXplb2YoX191NjQpKTtcXG4rXFx0XFx0XFx0aWYgKCFhZGRycykge1xcbitcXHRcXHRcXHRcXHRwX2VycihcXFwibWVtIGFsbG9jIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRcXHRcXHRmcmVlKGlkcyk7XFxuK1xcdFxcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aW5mby50cmFjaW5nX211bHRpLmFkZHJzID0gcHRyX3RvX3U2NChhZGRycyk7XFxuK1xcbitcXHRcXHRcXHRjb29raWVzID0gY2FsbG9jKGNvdW50LCBzaXplb2YoX191NjQpKTtcXG4rXFx0XFx0XFx0aWYgKCFjb29raWVzKSB7XFxuK1xcdFxcdFxcdFxcdHBfZXJyKFxcXCJtZW0gYWxsb2MgZmFpbGVkXFxcIik7XFxuK1xcdFxcdFxcdFxcdGZyZWUoYWRkcnMpO1xcbitcXHRcXHRcXHRcXHRmcmVlKGlkcyk7XFxuK1xcdFxcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSBwdHJfdG9fdTY0KGNvb2tpZXMpO1xcbitcXHRcXHRcXHRnb3RvIGFnYWluO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0aWYgKGluZm8udHlwZSA9PSBCUEZfTElOS19UWVBFX1BFUkZfRVZFTlQpIHtcXG4gXFx0XFx0c3dpdGNoIChpbmZvLnBlcmZfZXZlbnQudHlwZSkge1xcbiBcXHRcXHRjYXNlIEJQRl9QRVJGX0VWRU5UX1RSQUNFUE9JTlQ6XFxuQEAgLTExNTMsNiArMTI4Nyw3IEBAIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZClcXG4gXFx0ZnJlZShjb29raWVzKTtcXG4gXFx0ZnJlZShvZmZzZXRzKTtcXG4gXFx0ZnJlZShhZGRycyk7XFxuK1xcdGZyZWUoaWRzKTtcXG4gXFx0Y2xvc2UoZmQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uODA0MjNjY2M2YjU3YzcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTY4MzksNiArNjgzOSwxNSBAQCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyB7XFxuIFxcdFxcdFxcdF9fdTMyIGZsYWdzO1xcbiBcXHRcXHRcXHRfX3UzMiBwaWQ7XFxuIFxcdFxcdH0gdXByb2JlX211bHRpO1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHRfX3UzMiBhdHRhY2hfdHlwZTtcXG4rXFx0XFx0XFx0X191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi9cXG4rXFx0XFx0XFx0X191MzIgb2JqX2lkO1xcbitcXHRcXHRcXHRfX3UzMiA6MzI7XFxuK1xcdFxcdFxcdF9fYWxpZ25lZF91NjQgaWRzO1xcbitcXHRcXHRcXHRfX2FsaWduZWRfdTY0IGFkZHJzO1xcbitcXHRcXHRcXHRfX2FsaWduZWRfdTY0IGNvb2tpZXM7XFxuK1xcdFxcdH0gdHJhY2luZ19tdWx0aTtcXG4gXFx0XFx0c3RydWN0IHtcXG4gXFx0XFx0XFx0X191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovXFxuIFxcdFxcdFxcdF9fdTMyIDozMjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmlsbF9saW5rX2luZm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmNcXG5pbmRleCBmNTg5ZWVmYmY5ZmJkNS4uOTY5ZjA0ZWU5YWM2YWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmlsbF9saW5rX2luZm8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmNcXG5AQCAtNCw2ICs0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9idGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInRyYWNlX2hlbHBlcnMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RfZmlsbF9saW5rX2luZm8uc2tlbC5oXFxcIlxcbkBAIC0yNCw2ICsyNSwyMiBAQCBzdGF0aWMgX191NjQga211bHRpX2Nvb2tpZXNbXSA9IHsgMywgMSwgMiB9O1xcbiAjZGVmaW5lIEtQUk9CRV9GVU5DIFxcXCJicGZfZmVudHJ5X3Rlc3QxXFxcIlxcbiBzdGF0aWMgX191NjQga3Byb2JlX2FkZHI7XFxuIFxcbitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRtdWx0aV9zeW1zW10gPSB7XFxuK1xcdFxcXCJicGZfZmVudHJ5X3Rlc3QyXFxcIixcXG4rXFx0XFxcImJwZl9mZW50cnlfdGVzdDFcXFwiLFxcbitcXHRcXFwiYnBmX2ZlbnRyeV90ZXN0M1xcXCIsXFxuK307XFxuK1xcbitzdGF0aWMgX191NjQgdG11bHRpX2Nvb2tpZXNbXSA9IHsgMzAsIDEwLCAyMCB9O1xcbisjZGVmaW5lIFRSQUNJTkdfTVVMVElfQ05UIEFSUkFZX1NJWkUodG11bHRpX3N5bXMpXFxuK1xcbitzdHJ1Y3QgdG11bHRpX3RhcmdldCB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdF9fdTY0IGFkZHI7XFxuK1xcdF9fdTY0IGNvb2tpZTtcXG4rXFx0X191MzIgaWQ7XFxuK307XFxuK1xcbiAjZGVmaW5lIFVQUk9CRV9GSUxFIFxcXCIvcHJvYy9zZWxmL2V4ZVxcXCJcXG4gc3RhdGljIHNzaXplX3QgdXByb2JlX29mZnNldDtcXG4gLyogdXByb2JlIGF0dGFjaCBwb2ludCAqL1xcbkBAIC0zOTYsNiArNDEzLDIyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2twcm9iZV9tdWx0aV9maWxsX2xpbmtfaW5mbyhzdHJ1Y3QgdGVzdF9maWxsX2xpbmtfaW5mbyAqc2tlbCxcXG4gXFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdG11bHRpX3RhcmdldF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGEgPSBhO1xcbitcXHRjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGIgPSBiO1xcbitcXG4rXFx0cmV0dXJuICh0YS1cXHUwMDNlaWQgXFx1MDAzZSB0Yi1cXHUwMDNlaWQpIC0gKHRhLVxcdTAwM2VpZCBcXHUwMDNjIHRiLVxcdTAwM2VpZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2V0dXBfdG11bHRpX3RhcmdldHMoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cyxcXG4rXFx0XFx0XFx0XFx0X191MzIgKm9ial9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBwcm9nX2luZm87XFxuK1xcdF9fdTMyIGxlbiA9IHNpemVvZihwcm9nX2luZm8pO1xcbitcXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcdGludCBlcnIsIGk7XFxuK1xcdF9fczMyIGlkO1xcbitcXG4rXFx0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFxcXCJidGZfX2xvYWRfdm1saW51eF9idGZcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpKyspIHtcXG4rXFx0XFx0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgdG11bHRpX3N5bXNbaV0sIEJURl9LSU5EX0ZVTkMpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXFxcImJ0Zl9fZmluZF9ieV9uYW1lX2tpbmRcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdFxcdHRhcmdldHNbaV0ubmFtZSA9IHRtdWx0aV9zeW1zW2ldO1xcbitcXHRcXHR0YXJnZXRzW2ldLmFkZHIgPSBrc3ltX2dldF9hZGRyKHRtdWx0aV9zeW1zW2ldKTtcXG4rXFx0XFx0dGFyZ2V0c1tpXS5jb29raWUgPSB0bXVsdGlfY29va2llc1tpXTtcXG4rXFx0XFx0dGFyZ2V0c1tpXS5pZCA9IGlkO1xcbitcXHR9XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNnByb2dfaW5mbywgMCwgbGVuKTtcXG4rXFx0ZXJyID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcXHUwMDI2cHJvZ19pbmZvLCBcXHUwMDI2bGVuKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmRcXFwiKSlcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0aWYgKCFBU1NFUlRfR1QocHJvZ19pbmZvLmF0dGFjaF9idGZfb2JqX2lkLCAwLCBcXFwiYXR0YWNoX2J0Zl9vYmpfaWRcXFwiKSlcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0Km9ial9pZCA9IHByb2dfaW5mby5hdHRhY2hfYnRmX29ial9pZDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBrZXJuZWwgdHJhY2luZyBtdWx0aSBhdHRhY2ggc29ydHMgaWRzLiBXZSBzb3J0IGFzIHdlbGwsXFxuK1xcdCAqIHNvIHdlIGNhbiBlYXNpbHkgY29tcGFyZSBpZHMgYW5kIGNvb2tpZXMgbGF0ZXIuXFxuK1xcdCAqL1xcbitcXHRxc29ydCh0YXJnZXRzLCBUUkFDSU5HX01VTFRJX0NOVCwgc2l6ZW9mKHRhcmdldHNbMF0pLCB0bXVsdGlfdGFyZ2V0X2NtcCk7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycm9yOlxcbitcXHRidGZfX2ZyZWUoYnRmKTtcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBfX3UzMiBvYmpfaWQsIGJvb2wgaGFzX2Nvb2tpZXMpXFxuK3tcXG4rXFx0ZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUgPSBicGZfcHJvZ3JhbV9fZXhwZWN0ZWRfYXR0YWNoX3R5cGUocHJvZyk7XFxuK1xcdF9fdTY0IGFkZHJzW1RSQUNJTkdfTVVMVElfQ05UXSwgY29va2llc1tUUkFDSU5HX01VTFRJX0NOVF07XFxuK1xcdF9fdTMyIGlkc1tUUkFDSU5HX01VTFRJX0NOVF07XFxuK1xcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XFxuK1xcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFxcdTAwMjZpbmZvLCBcXHUwMDI2bGVuKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5mby50eXBlLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksIFxcXCJpbmZvLnR5cGVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSwgYXR0YWNoX3R5cGUsIFxcXCJpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5jb3VudCwgVFJBQ0lOR19NVUxUSV9DTlQsIFxcXCJpbmZvLnRyYWNpbmdfbXVsdGkuY291bnRcXFwiKTtcXG4rXFxuK1xcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcXG4rXFx0bWVtc2V0KGNvb2tpZXMsIDAsIHNpemVvZihjb29raWVzKSk7XFxuK1xcdG1lbXNldChhZGRycywgMCwgc2l6ZW9mKGFkZHJzKSk7XFxuK1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTtcXG4rXFx0aW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSBoYXNfY29va2llcyA/IHB0cl90b191NjQoY29va2llcykgOiAwO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcXG4rXFxuK1xcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcXHUwMDI2aW5mbywgXFx1MDAyNmxlbik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGluZm8udHlwZSwgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJLCBcXFwiaW5mby50eXBlXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIGF0dGFjaF90eXBlLCBcXFwiaW5mby50cmFjaW5nX211bHRpLmF0dGFjaF90eXBlXFxcIik7XFxuK1xcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQsIFRSQUNJTkdfTVVMVElfQ05ULCBcXFwiaW5mby50cmFjaW5nX211bHRpLmNvdW50XFxcIik7XFxuK1xcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkub2JqX2lkLCBvYmpfaWQsIFxcXCJ0cmFjaW5nX211bHRpLnRhcmdldF9vYmpfaWRzXFxcIik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQ7IGkrKykge1xcbitcXHRcXHRBU1NFUlRfRVEoaWRzW2ldLCB0YXJnZXRzW2ldLmlkLCBcXFwidHJhY2luZ19tdWx0aS50YXJnZXRfYnRmX2lkc1xcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoY29va2llc1tpXSwgaGFzX2Nvb2tpZXMgPyB0YXJnZXRzW2ldLmNvb2tpZSA6IDAsIFxcXCJ0cmFjaW5nX211bHRpLmNvb2tpZXNcXFwiKTtcXG4rXFxuK1xcdFxcdGlmICh0YXJnZXRzW2ldLmFkZHIpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGtzeW0gKmtzeW07XFxuK1xcbitcXHRcXHRcXHRpZiAoIUFTU0VSVF9ORVEoYWRkcnNbaV0sIDAsIFxcXCJ0cmFjaW5nX211bHRpLmFkZHJzXFxcIikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0a3N5bSA9IGtzeW1fc2VhcmNoKGFkZHJzW2ldKTtcXG4rXFx0XFx0XFx0aWYgKCFBU1NFUlRfT0tfUFRSKGtzeW0sIFxcXCJrc3ltX3NlYXJjaFxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdEFTU0VSVF9TVFJFUShrc3ltLVxcdTAwM2VuYW1lLCB0YXJnZXRzW2ldLm5hbWUsIFxcXCJ0cmFjaW5nX211bHRpLmFkZHJfbmFtZVxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoYWRkcnNbaV0sIDAsIFxcXCJ0cmFjaW5nX211bHRpLmFkZHJzXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZlcmlmeV90cmFjaW5nX211bHRpX2ludmFsaWRfdXNlcl9idWZmZXIoaW50IGZkLCBjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cylcXG4re1xcbitcXHRfX3UzMiBpZHNbVFJBQ0lOR19NVUxUSV9DTlRdID0ge307XFxuK1xcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XFxuK1xcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdC8qIFdyb25nIGluZm8gc2V0dXAgKGlkcyAhPSBOVUxMIGFuZCBjbnQgPT0gMCkgLVxcdTAwM2UgRUlOVkFMICovXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcXG4rXFx0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFxcdTAwMjZpbmZvLCBcXHUwMDI2bGVuKTtcXG4rXFx0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXFxcInRyYWNpbmdfbXVsdGkuaW52YWxpZF9jb3VudFxcXCIpO1xcbitcXG4rXFx0LyogU21hbGxlciB0aGFuIGFjdHVhbGwgY291bnQgcHJvdmlkZWQgLVxcdTAwM2UgRU5PU1BDICovXFxuK1xcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVCAtIDE7XFxuK1xcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcXHUwMDI2aW5mbywgXFx1MDAyNmxlbik7XFxuK1xcdEFTU0VSVF9FUShlcnIsIC1FTk9TUEMsIFxcXCJ0cmFjaW5nX211bHRpLnNtYWxsX2NvdW50XFxcIik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUUkFDSU5HX01VTFRJX0NOVCAtIDE7IGkrKylcXG4rXFx0XFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXFxcInRyYWNpbmdfbXVsdGkucGFydGlhbF9pZHNcXFwiKTtcXG4rXFx0LyogY2hlY2sgdGhhdCB0aGUgbGFzdCBlbnRyeSBpcyBub3QgcG9wdWxhdGVkICovXFxuK1xcdEFTU0VSVF9FUShpZHNbaV0sIDAsIFxcXCJ0cmFjaW5nX211bHRpLnBhcnRpYWxfaWRzXFxcIik7XFxuK1xcbitcXHQvKiBCaWdnZXIgdGhhbiBhY3R1YWxsIGNvdW50IHByb3ZpZGVkIC1cXHUwMDNlIE9LICovXFxuK1xcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVCArIDE7XFxuK1xcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcXHUwMDI2aW5mbywgXFx1MDAyNmxlbik7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJ0cmFjaW5nX211bHRpLmJpZ19jb3VudFxcXCIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQ7IGkrKylcXG4rXFx0XFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXFxcInRyYWNpbmdfbXVsdGkuaWRzXFxcIik7XFxuK1xcbitcXHQvKiBJbnZhbGlkIGlkcyBwb2ludGVyIC1cXHUwMDNlIEVGQVVMVCAqL1xcbitcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuK1xcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSAweDE7XFxuK1xcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UO1xcbitcXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZsZW4pO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAtRUZBVUxULCBcXFwidHJhY2luZ19tdWx0aS5iYWRfYnRmX2lkc1xcXCIpO1xcbitcXG4rXFx0LyogSW52YWxpZCBjb29raWVzIHBvaW50ZXIgLVxcdTAwM2UgRUZBVUxUICovXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0aW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSAweDE7XFxuK1xcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UO1xcbitcXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZsZW4pO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAtRUZBVUxULCBcXFwidHJhY2luZ19tdWx0aS5iYWRfY29va2llc1xcXCIpO1xcbitcXG4rXFx0LyogSW52YWxpZCBhZGRycyBwb2ludGVyIC1cXHUwMDNlIEVGQVVMVCAqL1xcbitcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuK1xcdGluZm8udHJhY2luZ19tdWx0aS5hZGRycyA9IDB4MTtcXG4rXFx0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XFxuK1xcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcXHUwMDI2aW5mbywgXFx1MDAyNmxlbik7XFxuK1xcdEFTU0VSVF9FUShlcnIsIC1FRkFVTFQsIFxcXCJ0cmFjaW5nX211bHRpLmJhZF9jb29raWVzXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfdHJhY2luZ19tdWx0aV9maWxsX2xpbmtfaW5mbyhzdHJ1Y3QgdGVzdF9maWxsX2xpbmtfaW5mbyAqc2tlbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBoYXNfY29va2llcywgYm9vbCBpbnZhbGlkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90cmFjaW5nX211bHRpX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3QgdG11bHRpX3RhcmdldCB0YXJnZXRzW1RSQUNJTkdfTVVMVElfQ05UXTtcXG4rXFx0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSwgb2JqX2lkO1xcbitcXHRfX3U2NCBjb29raWVzW1RSQUNJTkdfTVVMVElfQ05UXTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXHRpbnQgbGlua19mZCwgZXJyLCBpO1xcbitcXG4rI2lmbmRlZiBfX3g4Nl82NF9fXFxuK1xcdHRlc3RfX3NraXAoKTtcXG4rXFx0cmV0dXJuO1xcbisjZW5kaWZcXG4rXFxuK1xcdGlmIChzZXR1cF90bXVsdGlfdGFyZ2V0cyhza2VsLVxcdTAwM2Vwcm9ncy50bXVsdGlfcnVuLCB0YXJnZXRzLCBcXHUwMDI2b2JqX2lkKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpKyspIHtcXG4rXFx0XFx0aWRzW2ldID0gdGFyZ2V0c1tpXS5pZDtcXG4rXFx0XFx0Y29va2llc1tpXSA9IHRhcmdldHNbaV0uY29va2llO1xcbitcXHR9XFxuK1xcbitcXHRvcHRzLmlkcyA9IGlkcztcXG4rXFx0b3B0cy5jbnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcXG4rXFx0aWYgKGhhc19jb29raWVzKVxcbitcXHRcXHRvcHRzLmNvb2tpZXMgPSBjb29raWVzO1xcbitcXG4rXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVxcdTAwM2Vwcm9ncy50bXVsdGlfcnVuLCBOVUxMLCBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxpbmtfZmQgPSBicGZfbGlua19fZmQobGluayk7XFxuK1xcdGlmIChpbnZhbGlkKSB7XFxuK1xcdFxcdHZlcmlmeV90cmFjaW5nX211bHRpX2ludmFsaWRfdXNlcl9idWZmZXIobGlua19mZCwgdGFyZ2V0cyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVyciA9IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhsaW5rX2ZkLCBza2VsLVxcdTAwM2Vwcm9ncy50bXVsdGlfcnVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRhcmdldHMsIG9ial9pZCwgaGFzX2Nvb2tpZXMpO1xcbitcXHRcXHRBU1NFUlRfT0soZXJyLCBcXFwidmVyaWZ5X3RyYWNpbmdfbXVsdGlfbGlua19pbmZvXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbit9XFxuK1xcbiAjZGVmaW5lIFNFQyhuYW1lKSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKG5hbWUpLCB1c2VkKSlcXG4gXFxuIHN0YXRpYyBzaG9ydCB1cHJvYmVfbGlua19pbmZvX3NlbWFfMSBTRUMoXFxcIi5wcm9iZXNcXFwiKTtcXG5AQCAtNjQwLDYgKzg3NSwxMyBAQCB2b2lkIHRlc3RfZmlsbF9saW5rX2luZm8odm9pZClcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImtwcm9iZV9tdWx0aV9pbnZhbGlkX3VidWZmXFxcIikpXFxuIFxcdFxcdHRlc3Rfa3Byb2JlX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIHRydWUsIHRydWUsIHRydWUpO1xcbiBcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInRyYWNpbmdfbXVsdGlfbGlua19pbmZvXFxcIikpIHtcXG4rXFx0XFx0dGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIGZhbHNlLCBmYWxzZSk7XFxuK1xcdFxcdHRlc3RfdHJhY2luZ19tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCB0cnVlLCBmYWxzZSk7XFxuK1xcdH1cXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInRyYWNpbmdfbXVsdGlfaW52YWxpZF91YnVmZlxcXCIpKVxcbitcXHRcXHR0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgdHJ1ZSk7XFxuK1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidXByb2JlX211bHRpX2xpbmtfaW5mb1xcXCIpKVxcbiBcXHRcXHR0ZXN0X3Vwcm9iZV9tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCBmYWxzZSwgZmFsc2UpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidXJldHByb2JlX211bHRpX2xpbmtfaW5mb1xcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9maWxsX2xpbmtfaW5mby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xcbmluZGV4IDEzN2JkNjI5MjE2M2E1Li5jODUwODE1MzhlOTNiZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9maWxsX2xpbmtfaW5mby5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xcbkBAIC01OCw0ICs1OCwxMCBAQCBpbnQgQlBGX1BST0codW11bHRpX3J1bilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiZmVudHJ5Lm11bHRpXFxcIilcXG4raW50IEJQRl9QUk9HKHRtdWx0aV9ydW4pXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowMzozOS43MzU4NjgwNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzcxNDgzNDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzNlZjc4YzcwZjA4MzRlZDllMDQ1ZjVhZWVkNTQyMjM1MjBiZjUyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVuIDIxIDIxOjAzOjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uODA0MjNjY2M2YjU3YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTY4MzksNiArNjgzOSwxNSBAQCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyB7XG4gXHRcdFx0X191MzIgZmxhZ3M7XG4gXHRcdFx0X191MzIgcGlkO1xuIFx0XHR9IHVwcm9iZV9tdWx0aTtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRfX3UzMiBhdHRhY2hfdHlwZTtcbitcdFx0XHRfX3UzMiBjb3VudDsgLyogaW4vb3V0OiB0cmFjaW5nX211bHRpIHRhcmdldCBjb3VudCAqL1xuK1x0XHRcdF9fdTMyIG9ial9pZDtcbitcdFx0XHRfX3UzMiA6MzI7XG4rXHRcdFx0X19hbGlnbmVkX3U2NCBpZHM7XG4rXHRcdFx0X19hbGlnbmVkX3U2NCBhZGRycztcbitcdFx0XHRfX2FsaWduZWRfdTY0IGNvb2tpZXM7XG4rXHRcdH0gdHJhY2luZ19tdWx0aTtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRfX3UzMiB0eXBlOyAvKiBlbnVtIGJwZl9wZXJmX2V2ZW50X3R5cGUgKi9cbiBcdFx0XHRfX3UzMiA6MzI7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCA4MmY4ZmVlYTY5MzExYS4uZmRhYjRlYzVhZDRmNDUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTM2OTksNiArMzY5OSw2MCBAQCBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuIFx0a3ZmcmVlKHRyX2xpbmspO1xuIH1cbiBcbitzdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbit7XG4rXHR1NjQgX191c2VyICp1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY29va2llcyk7XG4rXHR1NjQgX191c2VyICp1YWRkcnMgPSB1NjRfdG9fdXNlcl9wdHIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmFkZHJzKTtcbitcdHUzMiBfX3VzZXIgKnVpZHMgPSB1NjRfdG9fdXNlcl9wdHIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmlkcyk7XG4rXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluaztcbitcdHUzMiB1Y291bnQgPSBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQ7XG4rXHRib29sIGhhc19jb29raWVzLCBzaG93X2FkZHJzO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoKHVpZHMgfHwgdWNvb2tpZXMgfHwgdWFkZHJzKSBcdTAwMjZcdTAwMjYgIXVjb3VudClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR0cl9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTtcbitcbitcdGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSA9IHRyX2xpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZTtcbitcdGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudCA9IHRyX2xpbmstXHUwMDNlbm9kZXNfY250O1xuK1x0aW5mby1cdTAwM2V0cmFjaW5nX211bHRpLm9ial9pZCA9IGJ0Zl9vYmpfaWQodHJfbGluay1cdTAwM2VsaW5rLnByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGYpO1xuK1xuK1x0aWYgKCF1aWRzIFx1MDAyNlx1MDAyNiAhdWNvb2tpZXMgXHUwMDI2XHUwMDI2ICF1YWRkcnMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHVjb3VudCBcdTAwM2MgdHJfbGluay1cdTAwM2Vub2Rlc19jbnQpXG4rXHRcdGVyciA9IC1FTk9TUEM7XG4rXHRlbHNlXG4rXHRcdHVjb3VudCA9IHRyX2xpbmstXHUwMDNlbm9kZXNfY250O1xuK1xuK1x0aGFzX2Nvb2tpZXMgPSAhIXRyX2xpbmstXHUwMDNlY29va2llcztcbitcdHNob3dfYWRkcnMgPSBrYWxsc3ltc19zaG93X3ZhbHVlKGN1cnJlbnRfY3JlZCgpKTtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB1Y291bnQ7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGUgPSBcdTAwMjZ0cl9saW5rLVx1MDAzZW5vZGVzW2ldO1xuK1x0XHR1NjQgYWRkciwgY29va2llO1xuK1x0XHR1MzIgaWQ7XG4rXG4rXHRcdGJwZl90cmFtcG9saW5lX3VucGFja19rZXkobW5vZGUtXHUwMDNldHJhbXBvbGluZS1cdTAwM2VrZXksIE5VTEwsIFx1MDAyNmlkKTtcbitcbitcdFx0YWRkciA9IHNob3dfYWRkcnMgPyBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLVx1MDAzZWlwIDogMDtcbitcdFx0Y29va2llID0gaGFzX2Nvb2tpZXMgPyB0cl9saW5rLVx1MDAzZWNvb2tpZXNbaV0gOiAwO1xuK1xuK1x0XHRpZiAodWlkcyBcdTAwMjZcdTAwMjYgcHV0X3VzZXIoaWQsIHVpZHMgKyBpKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0aWYgKHVhZGRycyBcdTAwMjZcdTAwMjYgcHV0X3VzZXIoYWRkciwgdWFkZHJzICsgaSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdGlmICh1Y29va2llcyBcdTAwMjZcdTAwMjYgcHV0X3VzZXIoY29va2llLCB1Y29va2llcyArIGkpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbkBAIC0zNzI5LDYgKzM3ODMsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuIFx0LnJlbGVhc2UgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UsXG4gXHQuZGVhbGxvY19kZWZlcnJlZCA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyxcbitcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXG4gXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9saW5rLmMgYi90b29scy9icGYvYnBmdG9vbC9saW5rLmNcbmluZGV4IGJkY2Q3MTdiMDM0OGY4Li41OGRhZGVlOTg0YTA3OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvbGluay5jXG5AQCAtMzc3LDYgKzM3NywzMSBAQCBzdGF0aWMgX191NjQgKnU2NF90b19hcnIoX191NjQgdmFsKVxuIFx0cmV0dXJuIChfX3U2NCAqKSB1NjRfdG9fcHRyKHZhbCk7XG4gfVxuIFxuK3N0YXRpYyBfX3UzMiAqdTY0X3RvX3UzMl9hcnIoX191NjQgdmFsKVxuK3tcbitcdHJldHVybiAoX191MzIgKil1NjRfdG9fcHRyKHZhbCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qga2VybmVsX3N5bSAqZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoX191NjQgYWRkciwgYm9vbCBpc19pYnRfZW5hYmxlZClcbit7XG4rXHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xuK1xuK1x0aWYgKCFhZGRyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdC8qIExvYWQgaXQgb25jZSBmb3IgYWxsLiAqL1xuK1x0aWYgKCFkZC5zeW1fY291bnQpXG4rXHRcdGtlcm5lbF9zeW1zX2xvYWQoXHUwMDI2ZGQpO1xuK1x0aWYgKCFkZC5zeW1fY291bnQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0c3ltID0ga2VybmVsX3N5bXNfc2VhcmNoKFx1MDAyNmRkLCBhZGRyKTtcbitcdGlmICghc3ltIFx1MDAyNlx1MDAyNiBpc19pYnRfZW5hYmxlZCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2U9IDQpXG4rXHRcdHN5bSA9IGtlcm5lbF9zeW1zX3NlYXJjaChcdTAwMjZkZCwgYWRkciAtIDQpO1xuK1xuK1x0cmV0dXJuIHN5bTtcbit9XG4rXG4gc3RhdGljIHZvaWRcbiBzaG93X3Vwcm9iZV9tdWx0aV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpXG4ge1xuQEAgLTQwMyw2ICs0MjgsNDMgQEAgc2hvd191cHJvYmVfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxuIFx0anNvbndfZW5kX2FycmF5KGpzb25fd3RyKTtcbiB9XG4gXG4rc3RhdGljIHZvaWRcbitzaG93X3RyYWNpbmdfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxuK3tcbitcdGJvb2wgaXNfaWJ0X2VuYWJsZWQgPSBpc194ODZfaWJ0X2VuYWJsZWQoKTtcbitcdF9fdTMyIGk7XG4rXG4rXHRzaG93X2xpbmtfYXR0YWNoX3R5cGVfanNvbihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIHd0cik7XG4rXHRqc29ud191aW50X2ZpZWxkKHd0ciwgXCJmdW5jX2NudFwiLCBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQpO1xuK1x0anNvbndfdWludF9maWVsZCh3dHIsIFwib2JqX2lkXCIsIGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5vYmpfaWQpO1xuK1x0anNvbndfbmFtZSh3dHIsIFwiZnVuY3NcIik7XG4rXG4rXHRqc29ud19zdGFydF9hcnJheSh3dHIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50OyBpKyspIHtcbitcdFx0X191NjQgYWRkciA9IHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmFkZHJzKVtpXTtcbitcdFx0c3RydWN0IGtlcm5lbF9zeW0gKnN5bTtcbitcbitcdFx0c3ltID0gZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoYWRkciwgaXNfaWJ0X2VuYWJsZWQpO1xuK1xuK1x0XHRqc29ud19zdGFydF9vYmplY3Qod3RyKTtcbitcdFx0anNvbndfdWludF9maWVsZCh3dHIsIFwiaWRcIiwgdTY0X3RvX3UzMl9hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmlkcylbaV0pO1xuK1x0XHRqc29ud191aW50X2ZpZWxkKHd0ciwgXCJhZGRyXCIsIGFkZHIpO1xuK1x0XHRpZiAoc3ltKSB7XG4rXHRcdFx0anNvbndfc3RyaW5nX2ZpZWxkKHd0ciwgXCJmdW5jXCIsIHN5bS1cdTAwM2VuYW1lKTtcbitcdFx0XHRpZiAoc3ltLVx1MDAzZW1vZHVsZVswXSA9PSAnXFwwJykge1xuK1x0XHRcdFx0anNvbndfbmFtZSh3dHIsIFwibW9kdWxlXCIpO1xuK1x0XHRcdFx0anNvbndfbnVsbCh3dHIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRqc29ud19zdHJpbmdfZmllbGQod3RyLCBcIm1vZHVsZVwiLCBzeW0tXHUwMDNlbW9kdWxlKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0anNvbndfdWludF9maWVsZCh3dHIsIFwiY29va2llXCIsIHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcbitcdFx0anNvbndfZW5kX29iamVjdCh3dHIpO1xuK1x0fVxuK1x0anNvbndfZW5kX2FycmF5KHd0cik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gc2hvd19wZXJmX2V2ZW50X2twcm9iZV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpXG4ge1xuQEAgLTU4OSw2ICs2NTEsOSBAQCBzdGF0aWMgaW50IHNob3dfbGlua19jbG9zZV9qc29uKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxuIFx0XHRzaG93X3Vwcm9iZV9tdWx0aV9qc29uKGluZm8sIGpzb25fd3RyKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSTpcbitcdFx0c2hvd190cmFjaW5nX211bHRpX2pzb24oaW5mbywganNvbl93dHIpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxuIFx0XHRzd2l0Y2ggKGluZm8tXHUwMDNlcGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6XG5AQCAtODMzLDYgKzg5OCwzOCBAQCBzdGF0aWMgdm9pZCBzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgc2hvd190cmFjaW5nX211bHRpX3BsYWluKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxuK3tcbitcdGJvb2wgaXNfaWJ0X2VuYWJsZWQgPSBpc194ODZfaWJ0X2VuYWJsZWQoKTtcbitcdF9fdTMyIGk7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHJpbnRmKFwiXFxuXFx0XCIpO1xuK1x0c2hvd19saW5rX2F0dGFjaF90eXBlX3BsYWluKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSk7XG4rXHRwcmludGYoXCJvYmpfaWQgJXUgIFwiLCBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkub2JqX2lkKTtcbitcdHByaW50ZihcImNvdW50ICV1ICBcIiwgaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KTtcbitcbitcdHByaW50ZihcIlxcblxcdCUtMTZzICUtMTZzICUtMTZzICVzXCIsXG4rXHQgICAgICAgXCJidGZfaWRcIiwgXCJhZGRyXCIsIFwiY29va2llXCIsIFwiZnVuYyBbbW9kdWxlXVwiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDsgaSsrKSB7XG4rXHRcdF9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hZGRycylbaV07XG4rXHRcdHN0cnVjdCBrZXJuZWxfc3ltICpzeW07XG4rXG4rXHRcdHN5bSA9IGZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKGFkZHIsIGlzX2lidF9lbmFibGVkKTtcbitcbitcdFx0cHJpbnRmKFwiXFxuXFx0JS0xNnUgJTAxNmxseCAlLTE2bGx4XCIsXG4rXHRcdCAgICAgICB1NjRfdG9fdTMyX2FycihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuaWRzKVtpXSxcbitcdFx0ICAgICAgIGFkZHIsIHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcbitcdFx0aWYgKHN5bSkge1xuK1x0XHRcdHByaW50ZihcIiAlc1wiLCBzeW0tXHUwMDNlbmFtZSk7XG4rXHRcdFx0aWYgKHN5bS1cdTAwM2Vtb2R1bGVbMF0gIT0gJ1xcMCcpXG4rXHRcdFx0XHRwcmludGYoXCIgWyVzXVwiLCBzeW0tXHUwMDNlbW9kdWxlKTtcbitcdFx0fVxuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBzaG93X3BlcmZfZXZlbnRfa3Byb2JlX3BsYWluKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmJ1ZjtcbkBAIC05ODksNiArMTA4Niw5IEBAIHN0YXRpYyBpbnQgc2hvd19saW5rX2Nsb3NlX3BsYWluKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxuIFx0XHRzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihpbmZvKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSTpcbitcdFx0c2hvd190cmFjaW5nX211bHRpX3BsYWluKGluZm8pO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxuIFx0XHRzd2l0Y2ggKGluZm8tXHUwMDNlcGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6XG5AQCAtMTAyOSw2ICsxMTI5LDcgQEAgc3RhdGljIGludCBzaG93X2xpbmtfY2xvc2VfcGxhaW4oaW50IGZkLCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbiBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpXG4ge1xuIFx0X191NjQgKnJlZl9jdHJfb2Zmc2V0cyA9IE5VTEwsICpvZmZzZXRzID0gTlVMTCwgKmNvb2tpZXMgPSBOVUxMO1xuK1x0X191MzIgKmlkcyA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xuIFx0X191MzIgbGVuID0gc2l6ZW9mKGluZm8pO1xuIFx0Y2hhciBwYXRoX2J1ZltQQVRIX01BWF07XG5AQCAtMTExNCw2ICsxMjE1LDM5IEBAIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZClcbiBcdFx0XHRnb3RvIGFnYWluO1xuIFx0XHR9XG4gXHR9XG4rXHRpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSBcdTAwMjZcdTAwMjZcbitcdCAgICAhaW5mby50cmFjaW5nX211bHRpLmlkcykge1xuK1x0XHRjb3VudCA9IGluZm8udHJhY2luZ19tdWx0aS5jb3VudDtcbitcdFx0aWYgKGNvdW50KSB7XG4rXHRcdFx0aWRzID0gY2FsbG9jKGNvdW50LCBzaXplb2YoX191MzIpKTtcbitcdFx0XHRpZiAoIWlkcykge1xuK1x0XHRcdFx0cF9lcnIoXCJtZW0gYWxsb2MgZmFpbGVkXCIpO1xuK1x0XHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdFx0fVxuK1x0XHRcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7XG4rXG4rXHRcdFx0YWRkcnMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3U2NCkpO1xuK1x0XHRcdGlmICghYWRkcnMpIHtcbitcdFx0XHRcdHBfZXJyKFwibWVtIGFsbG9jIGZhaWxlZFwiKTtcbitcdFx0XHRcdGZyZWUoaWRzKTtcbitcdFx0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdH1cbitcdFx0XHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTtcbitcbitcdFx0XHRjb29raWVzID0gY2FsbG9jKGNvdW50LCBzaXplb2YoX191NjQpKTtcbitcdFx0XHRpZiAoIWNvb2tpZXMpIHtcbitcdFx0XHRcdHBfZXJyKFwibWVtIGFsbG9jIGZhaWxlZFwiKTtcbitcdFx0XHRcdGZyZWUoYWRkcnMpO1xuK1x0XHRcdFx0ZnJlZShpZHMpO1xuK1x0XHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdFx0fVxuK1x0XHRcdGluZm8udHJhY2luZ19tdWx0aS5jb29raWVzID0gcHRyX3RvX3U2NChjb29raWVzKTtcbitcdFx0XHRnb3RvIGFnYWluO1xuK1x0XHR9XG4rXHR9XG4gXHRpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfUEVSRl9FVkVOVCkge1xuIFx0XHRzd2l0Y2ggKGluZm8ucGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfVFJBQ0VQT0lOVDpcbkBAIC0xMTUzLDYgKzEyODcsNyBAQCBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpXG4gXHRmcmVlKGNvb2tpZXMpO1xuIFx0ZnJlZShvZmZzZXRzKTtcbiBcdGZyZWUoYWRkcnMpO1xuK1x0ZnJlZShpZHMpO1xuIFx0Y2xvc2UoZmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLjgwNDIzY2NjNmI1N2M3IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC02ODM5LDYgKzY4MzksMTUgQEAgc3RydWN0IGJwZl9saW5rX2luZm8ge1xuIFx0XHRcdF9fdTMyIGZsYWdzO1xuIFx0XHRcdF9fdTMyIHBpZDtcbiBcdFx0fSB1cHJvYmVfbXVsdGk7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0X191MzIgYXR0YWNoX3R5cGU7XG4rXHRcdFx0X191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi9cbitcdFx0XHRfX3UzMiBvYmpfaWQ7XG4rXHRcdFx0X191MzIgOjMyO1xuK1x0XHRcdF9fYWxpZ25lZF91NjQgaWRzO1xuK1x0XHRcdF9fYWxpZ25lZF91NjQgYWRkcnM7XG4rXHRcdFx0X19hbGlnbmVkX3U2NCBjb29raWVzO1xuK1x0XHR9IHRyYWNpbmdfbXVsdGk7XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0X191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovXG4gXHRcdFx0X191MzIgOjMyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG5pbmRleCBmNTg5ZWVmYmY5ZmJkNS4uOTY5ZjA0ZWU5YWM2YWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG5AQCAtNCw2ICs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcInRyYWNlX2hlbHBlcnMuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0X2ZpbGxfbGlua19pbmZvLnNrZWwuaFwiXG5AQCAtMjQsNiArMjUsMjIgQEAgc3RhdGljIF9fdTY0IGttdWx0aV9jb29raWVzW10gPSB7IDMsIDEsIDIgfTtcbiAjZGVmaW5lIEtQUk9CRV9GVU5DIFwiYnBmX2ZlbnRyeV90ZXN0MVwiXG4gc3RhdGljIF9fdTY0IGtwcm9iZV9hZGRyO1xuIFxuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdG11bHRpX3N5bXNbXSA9IHtcbitcdFwiYnBmX2ZlbnRyeV90ZXN0MlwiLFxuK1x0XCJicGZfZmVudHJ5X3Rlc3QxXCIsXG4rXHRcImJwZl9mZW50cnlfdGVzdDNcIixcbit9O1xuK1xuK3N0YXRpYyBfX3U2NCB0bXVsdGlfY29va2llc1tdID0geyAzMCwgMTAsIDIwIH07XG4rI2RlZmluZSBUUkFDSU5HX01VTFRJX0NOVCBBUlJBWV9TSVpFKHRtdWx0aV9zeW1zKVxuK1xuK3N0cnVjdCB0bXVsdGlfdGFyZ2V0IHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHRfX3U2NCBhZGRyO1xuK1x0X191NjQgY29va2llO1xuK1x0X191MzIgaWQ7XG4rfTtcbitcbiAjZGVmaW5lIFVQUk9CRV9GSUxFIFwiL3Byb2Mvc2VsZi9leGVcIlxuIHN0YXRpYyBzc2l6ZV90IHVwcm9iZV9vZmZzZXQ7XG4gLyogdXByb2JlIGF0dGFjaCBwb2ludCAqL1xuQEAgLTM5Niw2ICs0MTMsMjI0IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3Byb2JlX211bHRpX2ZpbGxfbGlua19pbmZvKHN0cnVjdCB0ZXN0X2ZpbGxfbGlua19pbmZvICpza2VsLFxuIFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdG11bHRpX3RhcmdldF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGEgPSBhO1xuK1x0Y29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRiID0gYjtcbitcbitcdHJldHVybiAodGEtXHUwMDNlaWQgXHUwMDNlIHRiLVx1MDAzZWlkKSAtICh0YS1cdTAwM2VpZCBcdTAwM2MgdGItXHUwMDNlaWQpO1xuK31cbitcbitzdGF0aWMgaW50IHNldHVwX3RtdWx0aV90YXJnZXRzKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbitcdFx0XHRcdHN0cnVjdCB0bXVsdGlfdGFyZ2V0ICp0YXJnZXRzLFxuK1x0XHRcdFx0X191MzIgKm9ial9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBwcm9nX2luZm87XG4rXHRfX3UzMiBsZW4gPSBzaXplb2YocHJvZ19pbmZvKTtcbitcdHN0cnVjdCBidGYgKmJ0ZjtcbitcdGludCBlcnIsIGk7XG4rXHRfX3MzMiBpZDtcbitcbitcdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJidGZfX2xvYWRfdm1saW51eF9idGZcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpKyspIHtcbitcdFx0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgdG11bHRpX3N5bXNbaV0sIEJURl9LSU5EX0ZVTkMpO1xuK1x0XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCJidGZfX2ZpbmRfYnlfbmFtZV9raW5kXCIpKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdHRhcmdldHNbaV0ubmFtZSA9IHRtdWx0aV9zeW1zW2ldO1xuK1x0XHR0YXJnZXRzW2ldLmFkZHIgPSBrc3ltX2dldF9hZGRyKHRtdWx0aV9zeW1zW2ldKTtcbitcdFx0dGFyZ2V0c1tpXS5jb29raWUgPSB0bXVsdGlfY29va2llc1tpXTtcbitcdFx0dGFyZ2V0c1tpXS5pZCA9IGlkO1xuK1x0fVxuK1xuK1x0bWVtc2V0KFx1MDAyNnByb2dfaW5mbywgMCwgbGVuKTtcbitcdGVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2cHJvZ19pbmZvLCBcdTAwMjZsZW4pO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkXCIpKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0aWYgKCFBU1NFUlRfR1QocHJvZ19pbmZvLmF0dGFjaF9idGZfb2JqX2lkLCAwLCBcImF0dGFjaF9idGZfb2JqX2lkXCIpKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0Km9ial9pZCA9IHByb2dfaW5mby5hdHRhY2hfYnRmX29ial9pZDtcbitcbitcdC8qXG4rXHQgKiBUaGUga2VybmVsIHRyYWNpbmcgbXVsdGkgYXR0YWNoIHNvcnRzIGlkcy4gV2Ugc29ydCBhcyB3ZWxsLFxuK1x0ICogc28gd2UgY2FuIGVhc2lseSBjb21wYXJlIGlkcyBhbmQgY29va2llcyBsYXRlci5cbitcdCAqL1xuK1x0cXNvcnQodGFyZ2V0cywgVFJBQ0lOR19NVUxUSV9DTlQsIHNpemVvZih0YXJnZXRzWzBdKSwgdG11bHRpX3RhcmdldF9jbXApO1xuK1x0YnRmX19mcmVlKGJ0Zik7XG4rXHRyZXR1cm4gMDtcbitcbitlcnJvcjpcbitcdGJ0Zl9fZnJlZShidGYpO1xuK1x0cmV0dXJuIC0xO1xuK31cbitcbitzdGF0aWMgaW50IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbitcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cyxcbitcdFx0XHRcdFx0ICBfX3UzMiBvYmpfaWQsIGJvb2wgaGFzX2Nvb2tpZXMpXG4re1xuK1x0ZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUgPSBicGZfcHJvZ3JhbV9fZXhwZWN0ZWRfYXR0YWNoX3R5cGUocHJvZyk7XG4rXHRfX3U2NCBhZGRyc1tUUkFDSU5HX01VTFRJX0NOVF0sIGNvb2tpZXNbVFJBQ0lOR19NVUxUSV9DTlRdO1xuK1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXTtcbitcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XG4rXHRfX3UzMiBsZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5mby50eXBlLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksIFwiaW5mby50eXBlXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRBU1NFUlRfRVEoaW5mby50cmFjaW5nX211bHRpLmF0dGFjaF90eXBlLCBhdHRhY2hfdHlwZSwgXCJpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGVcIik7XG4rXHRBU1NFUlRfRVEoaW5mby50cmFjaW5nX211bHRpLmNvdW50LCBUUkFDSU5HX01VTFRJX0NOVCwgXCJpbmZvLnRyYWNpbmdfbXVsdGkuY291bnRcIik7XG4rXG4rXHRtZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7XG4rXHRtZW1zZXQoY29va2llcywgMCwgc2l6ZW9mKGNvb2tpZXMpKTtcbitcdG1lbXNldChhZGRycywgMCwgc2l6ZW9mKGFkZHJzKSk7XG4rXG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xuK1x0aW5mby50cmFjaW5nX211bHRpLmFkZHJzID0gcHRyX3RvX3U2NChhZGRycyk7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuY29va2llcyA9IGhhc19jb29raWVzID8gcHRyX3RvX3U2NChjb29raWVzKSA6IDA7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcbitcbitcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZsZW4pO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShpbmZvLnR5cGUsIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSwgXCJpbmZvLnR5cGVcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIGF0dGFjaF90eXBlLCBcImluZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZVwiKTtcbitcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQsIFRSQUNJTkdfTVVMVElfQ05ULCBcImluZm8udHJhY2luZ19tdWx0aS5jb3VudFwiKTtcbitcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkub2JqX2lkLCBvYmpfaWQsIFwidHJhY2luZ19tdWx0aS50YXJnZXRfb2JqX2lkc1wiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpKyspIHtcbitcdFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXCJ0cmFjaW5nX211bHRpLnRhcmdldF9idGZfaWRzXCIpO1xuK1x0XHRBU1NFUlRfRVEoY29va2llc1tpXSwgaGFzX2Nvb2tpZXMgPyB0YXJnZXRzW2ldLmNvb2tpZSA6IDAsIFwidHJhY2luZ19tdWx0aS5jb29raWVzXCIpO1xuK1xuK1x0XHRpZiAodGFyZ2V0c1tpXS5hZGRyKSB7XG4rXHRcdFx0c3RydWN0IGtzeW0gKmtzeW07XG4rXG4rXHRcdFx0aWYgKCFBU1NFUlRfTkVRKGFkZHJzW2ldLCAwLCBcInRyYWNpbmdfbXVsdGkuYWRkcnNcIikpXG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0a3N5bSA9IGtzeW1fc2VhcmNoKGFkZHJzW2ldKTtcbitcdFx0XHRpZiAoIUFTU0VSVF9PS19QVFIoa3N5bSwgXCJrc3ltX3NlYXJjaFwiKSlcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRBU1NFUlRfU1RSRVEoa3N5bS1cdTAwM2VuYW1lLCB0YXJnZXRzW2ldLm5hbWUsIFwidHJhY2luZ19tdWx0aS5hZGRyX25hbWVcIik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0QVNTRVJUX0VRKGFkZHJzW2ldLCAwLCBcInRyYWNpbmdfbXVsdGkuYWRkcnNcIik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB2ZXJpZnlfdHJhY2luZ19tdWx0aV9pbnZhbGlkX3VzZXJfYnVmZmVyKGludCBmZCwgY29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRhcmdldHMpXG4re1xuK1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcbitcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcbitcdGludCBlcnIsIGk7XG4rXG4rXHQvKiBXcm9uZyBpbmZvIHNldHVwIChpZHMgIT0gTlVMTCBhbmQgY250ID09IDApIC1cdTAwM2UgRUlOVkFMICovXG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbitcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FSU5WQUwsIFwidHJhY2luZ19tdWx0aS5pbnZhbGlkX2NvdW50XCIpO1xuK1xuK1x0LyogU21hbGxlciB0aGFuIGFjdHVhbGwgY291bnQgcHJvdmlkZWQgLVx1MDAzZSBFTk9TUEMgKi9cbitcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcbitcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuK1x0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcbitcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UIC0gMTtcbitcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZsZW4pO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVOT1NQQywgXCJ0cmFjaW5nX211bHRpLnNtYWxsX2NvdW50XCIpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQgLSAxOyBpKyspXG4rXHRcdEFTU0VSVF9FUShpZHNbaV0sIHRhcmdldHNbaV0uaWQsIFwidHJhY2luZ19tdWx0aS5wYXJ0aWFsX2lkc1wiKTtcbitcdC8qIGNoZWNrIHRoYXQgdGhlIGxhc3QgZW50cnkgaXMgbm90IHBvcHVsYXRlZCAqL1xuK1x0QVNTRVJUX0VRKGlkc1tpXSwgMCwgXCJ0cmFjaW5nX211bHRpLnBhcnRpYWxfaWRzXCIpO1xuK1xuK1x0LyogQmlnZ2VyIHRoYW4gYWN0dWFsbCBjb3VudCBwcm92aWRlZCAtXHUwMDNlIE9LICovXG4rXHRtZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7XG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbitcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVCArIDE7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdEFTU0VSVF9PSyhlcnIsIFwidHJhY2luZ19tdWx0aS5iaWdfY291bnRcIik7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUUkFDSU5HX01VTFRJX0NOVDsgaSsrKVxuK1x0XHRBU1NFUlRfRVEoaWRzW2ldLCB0YXJnZXRzW2ldLmlkLCBcInRyYWNpbmdfbXVsdGkuaWRzXCIpO1xuK1xuK1x0LyogSW52YWxpZCBpZHMgcG9pbnRlciAtXHUwMDNlIEVGQVVMVCAqL1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gMHgxO1xuK1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FRkFVTFQsIFwidHJhY2luZ19tdWx0aS5iYWRfYnRmX2lkc1wiKTtcbitcbitcdC8qIEludmFsaWQgY29va2llcyBwb2ludGVyIC1cdTAwM2UgRUZBVUxUICovXG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbitcdGluZm8udHJhY2luZ19tdWx0aS5jb29raWVzID0gMHgxO1xuK1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FRkFVTFQsIFwidHJhY2luZ19tdWx0aS5iYWRfY29va2llc1wiKTtcbitcbitcdC8qIEludmFsaWQgYWRkcnMgcG9pbnRlciAtXHUwMDNlIEVGQVVMVCAqL1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSAweDE7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcbitcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZsZW4pO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVGQVVMVCwgXCJ0cmFjaW5nX211bHRpLmJhZF9jb29raWVzXCIpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc3RydWN0IHRlc3RfZmlsbF9saW5rX2luZm8gKnNrZWwsXG4rXHRcdFx0XHRcdCAgICAgIGJvb2wgaGFzX2Nvb2tpZXMsIGJvb2wgaW52YWxpZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCB0bXVsdGlfdGFyZ2V0IHRhcmdldHNbVFJBQ0lOR19NVUxUSV9DTlRdO1xuK1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSwgb2JqX2lkO1xuK1x0X191NjQgY29va2llc1tUUkFDSU5HX01VTFRJX0NOVF07XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXHRpbnQgbGlua19mZCwgZXJyLCBpO1xuK1xuKyNpZm5kZWYgX194ODZfNjRfX1xuK1x0dGVzdF9fc2tpcCgpO1xuK1x0cmV0dXJuO1xuKyNlbmRpZlxuK1xuK1x0aWYgKHNldHVwX3RtdWx0aV90YXJnZXRzKHNrZWwtXHUwMDNlcHJvZ3MudG11bHRpX3J1biwgdGFyZ2V0cywgXHUwMDI2b2JqX2lkKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQ7IGkrKykge1xuK1x0XHRpZHNbaV0gPSB0YXJnZXRzW2ldLmlkO1xuK1x0XHRjb29raWVzW2ldID0gdGFyZ2V0c1tpXS5jb29raWU7XG4rXHR9XG4rXG4rXHRvcHRzLmlkcyA9IGlkcztcbitcdG9wdHMuY250ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4rXHRpZiAoaGFzX2Nvb2tpZXMpXG4rXHRcdG9wdHMuY29va2llcyA9IGNvb2tpZXM7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpKHNrZWwtXHUwMDNlcHJvZ3MudG11bHRpX3J1biwgTlVMTCwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGlcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGxpbmtfZmQgPSBicGZfbGlua19fZmQobGluayk7XG4rXHRpZiAoaW52YWxpZCkge1xuK1x0XHR2ZXJpZnlfdHJhY2luZ19tdWx0aV9pbnZhbGlkX3VzZXJfYnVmZmVyKGxpbmtfZmQsIHRhcmdldHMpO1xuK1x0fSBlbHNlIHtcbitcdFx0ZXJyID0gdmVyaWZ5X3RyYWNpbmdfbXVsdGlfbGlua19pbmZvKGxpbmtfZmQsIHNrZWwtXHUwMDNlcHJvZ3MudG11bHRpX3J1bixcbitcdFx0XHRcdFx0XHQgICAgIHRhcmdldHMsIG9ial9pZCwgaGFzX2Nvb2tpZXMpO1xuK1x0XHRBU1NFUlRfT0soZXJyLCBcInZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mb1wiKTtcbitcdH1cbitcbitcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK31cbitcbiAjZGVmaW5lIFNFQyhuYW1lKSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKG5hbWUpLCB1c2VkKSlcbiBcbiBzdGF0aWMgc2hvcnQgdXByb2JlX2xpbmtfaW5mb19zZW1hXzEgU0VDKFwiLnByb2Jlc1wiKTtcbkBAIC02NDAsNiArODc1LDEzIEBAIHZvaWQgdGVzdF9maWxsX2xpbmtfaW5mbyh2b2lkKVxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJrcHJvYmVfbXVsdGlfaW52YWxpZF91YnVmZlwiKSlcbiBcdFx0dGVzdF9rcHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRyYWNpbmdfbXVsdGlfbGlua19pbmZvXCIpKSB7XG4rXHRcdHRlc3RfdHJhY2luZ19tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCBmYWxzZSwgZmFsc2UpO1xuK1x0XHR0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgZmFsc2UpO1xuK1x0fVxuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0cmFjaW5nX211bHRpX2ludmFsaWRfdWJ1ZmZcIikpXG4rXHRcdHRlc3RfdHJhY2luZ19tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCB0cnVlLCB0cnVlKTtcbitcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidXByb2JlX211bHRpX2xpbmtfaW5mb1wiKSlcbiBcdFx0dGVzdF91cHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgZmFsc2UsIGZhbHNlKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidXJldHByb2JlX211bHRpX2xpbmtfaW5mb1wiKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9maWxsX2xpbmtfaW5mby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xuaW5kZXggMTM3YmQ2MjkyMTYzYTUuLmM4NTA4MTUzOGU5M2JlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xuQEAgLTU4LDQgKzU4LDEwIEBAIGludCBCUEZfUFJPRyh1bXVsdGlfcnVuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcImZlbnRyeS5tdWx0aVwiKVxuK2ludCBCUEZfUFJPRyh0bXVsdGlfcnVuKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowMzozOS43MzU4NzA1MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDYwNDM4OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBmaWxsX2xpbmtfaW5mb2AgSW1wbGVtZW50YXRpb24gZm9yIFRyYWNpbmcgTXVsdGktTGlua3MqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2guIEl0J3MgYWRkaW5nIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCB0byBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua2AuIExvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIHVhcGkgaGVhZGVyLCB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uLCBicGZ0b29sLCBhIHRvb2xzIHVhcGkgaGVhZGVyLCBhbmQgc29tZSBzZWxmdGVzdHMuXG5cblNwZWNpZmljYWxseSwgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBpcyBhZGRpbmcgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIHRvIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHNgLCB3aGljaCBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb24gYSB0cmFjaW5nIG11bHRpLWxpbmsgZmlsZSBkZXNjcmlwdG9yIHZpYSB0aGUgYGJwZmAgc3lzY2FsbC5cblxuVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYC4gQWxyaWdodCwgaXQgbG9va3MgbGlrZSBpdCdzIHJlYWRpbmcgdXNlciBwb2ludGVycyBmb3IgYGNvb2tpZXNgLCBgYWRkcnNgLCBhbmQgYGlkc2AgZnJvbSB0aGUgYGluZm8tXHUwMDNldHJhY2luZ19tdWx0aWAgc3RydWN0dXJlIGFuZCB1c2luZyBgcHV0X3VzZXJgIHRvIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIG5ldyBmZWF0dXJlLCBhIG5ldyBjb2RlIHBhdGggdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbCDigJMgc3BlY2lmaWNhbGx5IGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCB3aXRoIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgLiBBbmQgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGJvdW5kcyBjaGVja2luZywgdGhlcmUgYXJlIHBsZW50eSBvZiBhcmVhcyByaXBlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlncy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbi4gTm93LCB3aGF0IGFib3V0IGBDT05GSUdfRlBST0JFYCwgYENPTkZJR19LUFJPQkVTYCwgb3IgYENPTkZJR19CUEZfRVZFTlRTYD8gQSBxdWljayBncmVwIGZvciBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzYCBvciBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2Agc2hvdWxkIGdpdmUgdXMgYSBkZWZpbml0aXZlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjAzOjQ2Ljc5NjMxMTQ2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE0OTEyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2OTI9c3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzAxLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzAyOnN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3MDMtXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODUtXFx0LmRlYWxsb2NfZGVmZXJyZWQgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2MsXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3ODY6XFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4Ny0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDM6NDkuMzExMjMxMjAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzNDg3NTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgY29kZSBzdXJyb3VuZGluZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2A6XG5cbioqQW5hbHl6aW5nIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvLCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AuLi4gdGhhdCdzIGEgcHJldHR5IHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbWFwIHRoaXMgdG8gaXRzIGNvbnRleHQgd2l0aGluIHRoZSBCUEYgdHJhY2luZyBmcmFtZXdvcmsuIEdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IG1hbmFnaW5nIGxpbmsgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgc2luY2UgXCJtdWx0aV9saW5rXCIgaXMgaW4gdGhlcmUgdG9vLiBUaGlzIHN1Z2dlc3RzIGludGVyYWN0aW9uIHdpdGggbXVsdGlwbGUgQlBGIHByb2dyYW1zIG9yIGxpbmtzLCB3aGljaCBoYXMgYSBkaXN0aW5jdCBzZXQgb2YgY29tcGxleGl0aWVzLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlc2UgcHJvZ3JhbXMgc2hhcmUgZGF0YSwgaG93IHRoZXkgcmVsYXRlLCBhbmQgaG93IHRoZXkgcmVwb3J0IG9uIGV2ZW50cy4gSSdtIGltYWdpbmluZyBpdCdzIHVzZWQgdG8gY29sbGVjdCBvciBnZW5lcmF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgb2YgdGhlIGluZm8gYWJvdXQgdGhlIEJQRiBsaW5rcyBpbnZvbHZlZCBpbiB0cmFjaW5nLiBJIGJldCB0aGlzIGZ1bmN0aW9uIHRha2VzIGluIHNvbWUgY29udGV4dCwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IG5lZWRzIGZpbGxpbmcgaW4sIGFuZCByZXR1cm5zIGFuIGV4aXQgY29kZSBvZiBzb21lIGtpbmQuXG5cbkknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIHVzZWQuIElzIGl0IGEgY29yZSBmdW5jdGlvbiwgb3IgbW9yZSBvZiBhIGhlbHBlcj8gSXMgaXQgZXhwb3NlZCBpbiB0aGUgbWFpbiBCUEYgQVBJLCBvciBpcyBpdCBtb3JlIG9mIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgb3RoZXIgZnVuY3Rpb25zIGxpa2VseSBjYWxsIHRoaXMgb25lLCBhcyB3ZWxsIGFzIHdoaWNoIGZ1bmN0aW9ucyBpdCdzIGxpa2VseSB0byBjYWxsLiBJZiBpdCdzIGEgZmlsbCBmdW5jdGlvbiwgaXQncyBsaWtlbHkgZmlsbGluZyBpbiBzb21lIGtpbmQgb2Ygc3RydWN0dXJlIHRoYXQgdGhlIHRyYWNpbmcgc3lzdGVtIHVzZXMgdG8gdW5kZXJzdGFuZCBob3cgcHJvZ3JhbXMgYXJlIGxpbmtlZCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEknZCBsaWtlIHRvIGdldCBhIGdvb2QgbWVudGFsIG1vZGVsIG9mIHRoZSB3aG9sZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgdHJhY2luZyBmbG93LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBzdHJ1Y3R1cmUgaXQgZmlsbHMuIEknbGwgZm9jdXMgb24gdGhlIGRhdGEgaXQgcHJvZHVjZXMgYW5kIHdoZXJlIHRoYXQgZGF0YSBlbmRzIHVwLCBiZWNhdXNlIHRoaXMgaXMgdGhlIGluZm9ybWF0aW9uIG1vc3QgaW1wb3J0YW50IHRvIGEgdXNlciwgbm90IHRoZSBpbnRlcm5hbCBtYWNoaW5hdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDIyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDM6NTMuOTQ2MTA5NDQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzg2NzQ1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzU3PXN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzgyLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4NC1cXHQucmVsZWFzZSA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODM5PWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTAwLVxcdGJwZl9saW5rX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkwMTpcXHRcXHQgICAgICBcXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjAzOjU2LjAyNDc4ODUwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjU5MzEyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAncyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYC4gSXTigJlzIGEgcHJldHR5IHBvd2VyZnVsIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0cyBhdmFpbGFiaWxpdHkgaXMgZ292ZXJuZWQgYnkgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdtIHRyeWluZyB0byBnZXQgYSBzZW5zZSBvZiBpdHMgXCJwb3J0YWJpbGl0eVwiIHNvIHRvIHNwZWFrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucywgaWYgYW55LCBJIG5lZWQgdG8gdmVyaWZ5IGFyZSBlbmFibGVkIGJlZm9yZSBJIGNhbiByZWx5IG9uIHRoaXMgYmVpbmcgcHJlc2VudCBhbmQgdXNhYmxlIGluIGEgcGFydGljdWxhciBlbnZpcm9ubWVudC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIGNvZGViYXNlIGZvciBhbnkgb2J2aW91cyBjb25maWctcmVsYXRlZCBjb25kaXRpb25hbHMgc3Vycm91bmRpbmcgaXRzIGRlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24uIE5vIHRpbWUgdG8gd2FzdGUgb24gYXNzdW1wdGlvbnMuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzkzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDM6NTkuNDUwNzIxNzk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODk5OTQ4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9Nzg5PWludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzkwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cik7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03OTEtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgaW50XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4NDk6YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04NTAte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTQtXFx0XFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NTpcXHRcXHRcXHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5Ni1cXHRcXHRlbHNlXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOD1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODM5OmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkyOTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDowMS4zNDA3MjE5NzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMzODc4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIFRyYWNlIEV2ZW50cyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHJhY2UgZXZlbnRzIGFyZSBzdHJ1Y3R1cmVkLiBJJ20gZ29pbmcgdG8ganVtcCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmhgLiBMZXQncyB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDc5MC4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGNvcmUgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBtYWNybyB0aGF0IGxheXMgb3V0IHRoZSBiYXNpYyBmb3JtYXQgb2YgdGhlc2UgZXZlbnRzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBlbGVtZW50czogdGhlIGV2ZW50IGlkZW50aWZpZXIsIHRoZSBmb3JtYXQgc3RyaW5nLCBwZXJoYXBzIHNvbWUgZmllbGRzIHJlbGF0ZWQgdG8gZmlsdGVyaW5nLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGV2ZW50LXNwZWNpZmljIGRhdGEuIEl04oCZcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBhIG1hY3JvIGZvciBkZWZpbmluZyBzb21lIG9mIHRoZSBoZWxwZXJzIHRvIHNldHVwIHRoZSBldmVudHMuXG5JIHdvbmRlciBpZiB0aGF0IHBhcnRpY3VsYXIgbG9jYXRpb24gaG9sZHMgdGhlIHJlZ2lzdHJhdGlvbiBtYWNyb3MsIG9yIGlmIGl0J3MgdGhlIHN0cnVjdHVyZSBkZWNsYXJhdGlvbiBpdHNlbGYuIFRpbWUgdG8gZmluZCBvdXQuIEknbSBleHBlY3Rpbmcgc29tZSBjbGV2ZXIgdXNlIG9mIHByZXByb2Nlc3NvciBtYWdpYywgSSBqdXN0IGhvcGUgaXQncyBub3Qgb3Zlcmx5IG9iZnVzY2F0ZWQuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjA0Ljc3NDYwMjY5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHRpbnQgYnBmX3Byb2JlX3VucmVnaXN0ZXIoc3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpidHAsIHN0cnVjdCBicGZfcmF3X3RwX2xpbmsgKmxpbmspO1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSk7XFxuIDc4MzpcXHR2b2lkIGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQoc3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpidHApO1xcbiA3ODQ6XFx0aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxcbiA3ODU6XFx0XFx0XFx0XFx0ICAgIHUzMiAqZmRfdHlwZSwgY29uc3QgY2hhciAqKmJ1ZixcXG4gNzg2OlxcdFxcdFxcdFxcdCAgICB1NjQgKnByb2JlX29mZnNldCwgdTY0ICpwcm9iZV9hZGRyLFxcbiA3ODc6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKm1pc3NlZCk7XFxuIDc4ODpcXHRpbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcXG4gNzg5OlxcdGludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA3OTA6XFx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKTtcXG4gNzkxOlxcdCNlbHNlXFxuIDc5MjpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZihzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxcbiA3OTM6XFx0e1xcbiA3OTQ6XFx0XFx0cmV0dXJuIDE7XFxuIDc5NTpcXHR9XFxuIDc5NjpcXHRcXG4gNzk3OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmX2ZhdWx0YWJsZShzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxcbiA3OTg6XFx0e1xcbiA3OTk6XFx0XFx0cmV0dXJuIDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjA0Ljc3NDY4ODczN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQzNTYyNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyBQcmVwcm9jZXNzb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nLCBcIldoZXJlIGFtIEkgcmlnaHQgbm93IGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpYyBibG9jayBvZiBjb2RlIGlzICphY3R1YWxseSogZ29pbmcgdG8gZG8uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJIGtub3cgdGhlIGxpa2VseSBjdWxwcml0IGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBgI2lmZGVmYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBlbnZpcm9ubWVudC1zcGVjaWZpYyBkZWNpc2lvbnMgYXJlIGJlaW5nIG1hZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmUgZmxhZ3MsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBvcGVyYXRpbmcgc3lzdGVtIGRlZmluZXMgYXJlIGFjdGl2ZSBhdCB0aGlzIHBvaW50IGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGAjaWZkZWZgIHN0YXRlbWVudCBnb3Zlcm5zIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIE9uY2UgSSBrbm93IHRoYXQsIEknbGwgaGF2ZSBhIG11Y2ggY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBpbiB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgdmFyaWFudC4gVGltZSB0byBnZXQgZG93biB0byBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MDcuNTE4MjU0NDQxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk4Nzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTY5PXN0cnVjdCB0cmFjZV9keW5hbWljX2luZm8ge1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzA6I2lmZGVmIENPTkZJR19DUFVfQklHX0VORElBTlxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNzEtXFx0dTE2XFx0bGVuO1xcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD0yNTE9ZW51bSB0cmFjZV9yZWcge1xcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0yNTMtXFx0VFJBQ0VfUkVHX1VOUkVHSVNURVIsXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDoyNTQ6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMjU1LVxcdFRSQUNFX1JFR19QRVJGX1JFR0lTVEVSLFxcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD0yODk9c3RydWN0IHRyYWNlX2V2ZW50X2NsYXNzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMjkxLVxcdHZvaWRcXHRcXHRcXHQqcHJvYmU7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDoyOTI6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMjkzLVxcdHZvaWRcXHRcXHRcXHQqcGVyZl9wcm9iZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9MzY3PXN0cnVjdCB0cmFjZV9ldmVudF9jYWxsIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMzg5LVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6MzkwOiNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTM5MS1cXHRpbnRcXHRcXHRcXHRcXHRwZXJmX3JlZmNvdW50O1xcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0zOTktXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo0MDA6I2lmZGVmIENPTkZJR19EWU5BTUlDX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNDAxLWJvb2wgdHJhY2VfZXZlbnRfZHluX3RyeV9nZXRfcmVmKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9NDI4PXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9ldmVudF9wdXRfcmVmKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsKVxcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC00MzUtXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo0MzY6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNDM3LXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19hcnJheV92YWxpZChzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbClcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9NjQ2PXN0cnVjdCB0cmFjZV9ldmVudF9maWxlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNjc2LVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6Njc3OiNpZmRlZiBDT05GSUdfSElTVF9UUklHR0VSU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNjc4LWV4dGVybiBzdHJ1Y3QgaXJxX3dvcmsgaGlzdF9wb2xsX3dvcms7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTc1Nj10cmFjZV90cmlnZ2VyX3NvZnRfZGlzYWJsZWQoc3RydWN0IHRyYWNlX2V2ZW50X2ZpbGUgKmZpbGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc3MC1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjc3MTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc3Mi11bnNpZ25lZCBpbnQgdHJhY2VfY2FsbF9icGYoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTg3OD1pbnQgdHJhY2VfYXJyYXlfc2V0X2Nscl9ldmVudChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBjb25zdCBjaGFyICpzeXN0ZW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg4MC1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjg4MTojaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04ODItc3RydWN0IHBlcmZfZXZlbnQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTg4OT1leHRlcm4gdm9pZCBwZXJmX3RyYWNlX2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4OTA6I2lmZGVmIENPTkZJR19LUFJPQkVfRVZFTlRTXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04OTEtZXh0ZXJuIGludCAgcGVyZl9rcHJvYmVfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGJvb2wgaXNfcmV0cHJvYmUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD04OTM9ZXh0ZXJuIGludCBicGZfZ2V0X2twcm9iZV9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODk4LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6ODk5OiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtOTAwLWV4dGVybiBpbnQgIHBlcmZfdXByb2JlX2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDowNy41NzQyNDg4MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjExMzMzNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIEJQRiBFdmVudCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSBpcyB0byBnbyBkaWdnaW5nIGludG8gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBmb3IgYW55dGhpbmcgQlBGLXJlbGF0ZWQgd2l0aCB0cmFjaW5nLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIGhvdyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYWRkaXRpb25hbCBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoYXQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBhbnkgb3RoZXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGJlc2lkZXMgdGhlIHRvcC1sZXZlbCBgQ09ORklHX0JQRl9FVkVOVFNgIGZsYWcuIEl0IG1pZ2h0IGJlIGZ1cnRoZXIgZ2F0ZWQgYnkgc29tZSBvdGhlciBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU0OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjEwLjc4NTU4NDgwNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4MTc0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtNDctXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjQ4OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00OS1zdHJ1Y3QgYnBmX3RyYWNlX21vZHVsZSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTczPXVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZl9mYXVsdGFibGUoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODQtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4NTojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg2LUJQRl9DQUxMXzIoYnBmX292ZXJyaWRlX3JldHVybiwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdW5zaWduZWQgbG9uZywgcmMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzA2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxNC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzE1OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0VcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE2LUJQRl9DQUxMXzMoYnBmX3Byb2JlX3JlYWRfY29tcGF0LCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2MT1CVEZfU0VUX1NUQVJUKGJ0Zl9hbGxvd2xpc3RfZF9wYXRoKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5NjI6I2lmZGVmIENPTkZJR19TRUNVUklUWVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjMtQlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjU9QlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfb3BlbilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY2LSNlbmRpZlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Njc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRIXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2OC1CVEZfSUQoZnVuYywgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnlfaXAodW5zaWduZWQgbG9uZyBmZW50cnlfaXApXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzYte1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMDc3OiNpZmRlZiBDT05GSUdfWDg2X0tFUk5FTF9JQlRcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3OC1cXHRpZiAoaXNfZW5kYnIoKHZvaWQgKikoZmVudHJ5X2lwIC0gRU5EQlJfSU5TTl9TSVpFKSkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA4ND1CUEZfQ0FMTF8xKGJwZl9nZXRfZnVuY19pcF9rcHJvYmUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA4OC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA4OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA5MC1cXHRydW5fY3R4ID0gY29udGFpbmVyX29mKGN1cnJlbnQtXFx1MDAzZWJwZl9jdHgsIHN0cnVjdCBicGZfdHJhY2VfcnVuX2N0eCwgcnVuX2N0eCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTI3ND1icGZfdHJhY2luZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEyODE6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMjgyLVxcdGNhc2UgQlBGX0ZVTkNfcHJvYmVfcmVhZDpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1MS1cXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNlc2xlZXBhYmxlID8gXFx1MDAyNmJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvIDogXFx1MDAyNmJwZl9nZXRfc3RhY2tfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEzNTI6I2lmZGVmIENPTkZJR19CUEZfS1BST0JFX09WRVJSSURFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTMtXFx0Y2FzZSBCUEZfRlVOQ19vdmVycmlkZV9yZXR1cm46XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzMwLVxcdHN3aXRjaCAoZnVuY19pZCkge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzMxOiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzItXFx0Y2FzZSBCUEZfRlVOQ19za2Jfb3V0cHV0Olxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE4Mjg9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyByYXdfdHJhY2Vwb2ludF9wcm9nX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTgyOTojaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODMwLVxcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3Jhd190cCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjA5PWludCBicGZfZ2V0X3BlcmZfZXZlbnRfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHUzMiAqcHJvZ19pZCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQzLVxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjQ0OiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ1LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX0tQUk9CRSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ5LSNlbmRpZlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjUwOiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjUxLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX1VQUk9CRSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjczPXN1YnN5c19pbml0Y2FsbChzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI3NTojaWZkZWYgQ09ORklHX01PRFVMRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Ni1zdGF0aWMgaW50IGJwZl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBvcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMzI5PXN0cnVjdCBicGZfc2Vzc2lvbl9ydW5fY3R4IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMzM0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzM1OiNpZmRlZiBDT05GSUdfRlBST0JFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzYtc3RydWN0IGJwZl9rcHJvYmVfbXVsdGlfbGluayB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjQ0OD1zdGF0aWMgaW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5Ny1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjQ5ODojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5OS1zdGF0aWMgdm9pZCBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MjctXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNTI4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTI5LVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mjk0Mz1zdGF0aWMgdTY0IGJwZl9rcHJvYmVfbXVsdGlfZW50cnlfaXAoc3RydWN0IGJwZl9ydW5fY3R4ICpjdHgpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk0OC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mjk0OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk1MC1zdHJ1Y3QgYnBmX3Vwcm9iZV9tdWx0aV9saW5rO1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMwMDc9c3RhdGljIGludCBicGZfdXByb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzMtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMwNzQ6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzUtc3RhdGljIHZvaWQgYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzExNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdXByb2JlX211bHRpX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTE4LVxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzExOTojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzEyMC1cXHQuc2hvd19mZGluZm8gPSBicGZfdXByb2JlX211bHRpX3Nob3dfZmRpbmZvLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3MDI9c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzU2OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU3LXN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3ODc6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODgtXFx0LnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjEwLjg0MDQwOTA0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzEwNjYyNDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgKm5vdCogZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGl0c2VsZi4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQncyBlaXRoZXIgYWx3YXlzIGNvbXBpbGVkIHdoZW4gdGhhdCBmaWxlIGlzIGluY2x1ZGVkLCBvciB0aGUgaW5jbHVzaW9uIG9mIHRoZSBlbnRpcmUgZmlsZSBpcyBjb25kaXRpb25hbC5cblxuTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBga2VybmVsL3RyYWNlL01ha2VmaWxlYC4gSWYgYGJwZl90cmFjZS5vYCBpcyBidWlsdCBjb25kaXRpb25hbGx5LCBvciBpZiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb250cm9sIGl0cyBpbmNsdXNpb24sIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGFuc3dlci4gSXQgaXMgYSB2ZXJ5IGdvb2QgYXBwcm9hY2ggYXMgdGhlIGBNYWtlZmlsZWAgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgY29udHJvbGxpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgZXhpc3Qgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjE0LjE1MTA3NTA3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyNTQ3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSArPSB0cmFjZV9ldmVudHNfdXNlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgKz0gYnBmX3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSArPSB0cmFjZV9rcHJvYmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDoxNC4yMDUzMzg0MDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NDgyNjAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIEJQRiBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBuZWVkIGZvciBgQ09ORklHX0JQRl9FVkVOVFNgLiBUaGF0J3MgYSBnaXZlbiwgbmF0dXJhbGx5LiBCdXQgdGhlbiBJIGhhdmUgdG8gYXNrIG15c2VsZiwgd2hhdCBhYm91dCBgQ09ORklHX0JQRl9TWVNDQUxMYD8gSG1tbSwgeWVzLCBpdCBzZWVtcyBlc3NlbnRpYWwgZm9yIEJQRiBsaW5rcywgc28gdGhhdCdzIGluIHRoZSBtaXguIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgYWJvdXQgdGhhdCBJJ20gb3Zlcmxvb2tpbmc/IEkgYmV0dGVyIGRvIGEgcXVpY2sgc2Nhbi4gTGV0IG1lIHNlZS4uLiBJJ2xsIGNoZWNrIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGFkZGl0aW9uYWwgZmxhZ3MgbWlnaHQgY29tZSBpbnRvIHBsYXkgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTQxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MTcuNDgwMTY3MDA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgzOSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgzOTpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MDpcXHR7XFxuMzg0MTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDQ6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NTpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ2OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0NzpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDg6XFx0XFx0aW50IGVycjtcXG4zODQ5OlxcdFxcbjM4NTA6XFx0XFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XFxuMzg1MTpcXHRcXHRjbnQgPSBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNudDtcXG4zODUyOlxcdFxcbjM4NTM6XFx0XFx0aWYgKCFjbnQgfHwgIXVpZHMpXFxuMzg1NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zODU1OlxcdFxcdGlmIChjbnQgXFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXFxuMzg1NjpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbjM4NTc6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmZsYWdzIHx8IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcXG4zODU4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4NTk6XFx0XFxuMzg2MDpcXHRcXHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XFxuMzg2MTpcXHRcXHRpZiAoIWlkcylcXG4zODYyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM4NjM6XFx0XFxuMzg2NDpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XFxuMzg2NTpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjM4NjY6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODY3OlxcdFxcdH1cXG4zODY4OlxcdFxcbjM4Njk6XFx0XFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jb29raWVzKTtcXG4zODcwOlxcdFxcdGlmICh1Y29va2llcykge1xcbjM4NzE6XFx0XFx0XFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XFxuMzg3MjpcXHRcXHRcXHRpZiAoIWNvb2tpZXMpIHtcXG4zODczOlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg3NDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4NzU6XFx0XFx0XFx0fVxcbjM4NzY6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xcbjM4Nzc6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4zODc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg3OTpcXHRcXHRcXHR9XFxuMzg4MDpcXHRcXHR9XFxuMzg4MTpcXHRcXG4zODgyOlxcdFxcdGVyciA9IGNoZWNrX2R1cF9pZHMoaWRzLCBjb29raWVzLCBjbnQpO1xcbjM4ODM6XFx0XFx0aWYgKGVycilcXG4zODg0OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4NTpcXHRcXG4zODg2OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcXG4zODg3OlxcdFxcdFxcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcXG4zODg4OlxcdFxcdFxcdGlmICghZmV4aXRzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjE3LjQ4MDMyNjc3OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk1MzE2Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRyYWNpbmcgTXVsdGktTGluayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AsIHdoaWNoIGlzIHRoZSBgZmlsbF9saW5rX2luZm9gIGltcGxlbWVudGF0aW9uIGZvciBgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJYC4gVGhhdCdzIGdvb2QsIGl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIOKAkyBjb25maXJtZWQgdmlhIGBicGYoQlBGX09CSl9HRVRfSU5GT19CWV9GRCwgLi4uKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgcmVxdWlyZWQgY29uZmlncyBhcmUgYEJQRl9FVkVOVFNgIGFuZCBgQlBGX1NZU0NBTExgLCB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGdvdGNoYXMuIFdoYXQgYWJvdXQgYENPTkZJR19GUFJPQkVgIG9yIGBDT05GSUdfS1BST0JFX0VWRU5UU2A/IE5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aG9zZS5cblxuVGhpbmtpbmcgbW9yZSBicm9hZGx5LCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBjbGVhcmx5IHVzZWQgZm9yIGRpZmZlcmVudCB0eXBlczogYEJQRl9UUkFDRV9GRU5UUllfTVVMVElgLCBgQlBGX1RSQUNFX0ZFWElUX01VTFRJYCwgYW5kIGBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVElgLiBUaGVzZSBhcmUgYWxsIHRyYWNpbmcgcHJvZ3JhbXMsIHNvIGl0IG1ha2VzIHNlbnNlLiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGRlZmluZWQgd2l0aGluIGFueSBvdGhlciBjb25maWcgYXMgd2VsbCwgSSB3b3VsZCBoYXZlIGV4cGVjdGVkIHRoZXNlIHR5cGVzIG9mIGRlZmluaXRpb25zIHRvIGJlIHdlbGwgc3RydWN0dXJlZC5cblxuUmlnaHQsIEkganVzdCBzYXcgaW4gYGluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmhgLCBpdCdzIGFsbCB1bmRlciBgQ09ORklHX0JQRl9FVkVOVFNgLiBUaGF0J3MgZ29vZDsgaXQgY29uZmlybXMgbXkgZmlyc3QgdGhvdWdodC4gRmluYWxseSwgbGV0J3MgdmVyaWZ5IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgY29udGFpbnMgYGlzX3RyYWNpbmdfbXVsdGlgIHRvIGNsb3NlIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk3NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjIyLjY3NTY0NTQyM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NTgxMDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc190cmFjaW5nX211bHRpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MjE3OT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Byb2dfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjE5Mi1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjIxOTM6c3RhdGljIGlubGluZSBib29sIGlzX3RyYWNpbmdfbXVsdGkoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIxOTQte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjk3Mj1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMwNDctXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzA0ODpcXHRtdWx0aV9mdW5jID0gaXNfdHJhY2luZ19tdWx0aShhdHRyLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzA0OS1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODkzLVxcdFxcdFxcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NDpcXHRcXHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk1LVxcdFxcdFxcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODc5Mz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9tb2RpZnlfcmV0dXJuKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3QgY2hhciAqZnVuY19uYW1lKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODAzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgwNDpzdGF0aWMgYm9vbCBpc190cmFjaW5nX211bHRpX2lkKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDUte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgwNjpcXHRyZXR1cm4gaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkgXFx1MDAyNlxcdTAwMjYgYnBmX211bHRpX2Z1bmNfYnRmX2lkWzBdID09IGJ0Zl9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDctfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODA5PXN0YXRpYyBpbnQgYnRmX2lkX2FsbG93X3NsZWVwYWJsZSh1MzIgYnRmX2lkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgyOC1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4Mjk6XFx0XFx0aWYgKGlzX3RyYWNpbmdfbXVsdGlfaWQocHJvZywgYnRmX2lkKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NTg9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMjUtXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTI2OlxcdFxcdGlmIChpc190cmFjaW5nX211bHRpX2lkKHByb2csIGJ0Zl9pZCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMjctXFx0XFx0XFx0aWYgKGJ0Zl9pc19tb2R1bGUoYnRmKSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MjYzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzQ3LVxcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfVFJBQ0lORyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM0ODpcXHQgICAgaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzQ5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz03NzcyPXN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03Nzc0LVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6Nzc3NTpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJhY2luZ19tdWx0aShlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzc3Ni17XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTc4Mzk9c3RhdGljIGludCBsaWJicGZfcHJlcGFyZV9wcm9nX2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03OTAxLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzkwMjpcXHRpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpIHtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTc5MDMtXFx0XFx0aW50IGVyciwgYnRmX29ial9mZCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjI0LjU3MTQ2MTg3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA4NDI0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFRyYWNpbmcgSW5mcmFzdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBpc190cmFjaW5nX211bHRpYCBmdW5jdGlvbiBjYWxsLCBhbmQgaXQncyBsb29raW5nIGxpa2UgaXQncyBkZWZpbmVkIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBpdCdzIGxvY2F0ZWQgaW4gYGluY2x1ZGUvbGludXgvYnBmLmhgLiBSaWdodCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBCUEYgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBTbywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoYXQgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYW5kIHZlcmlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcm9sZSBpbiB0aGUgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgdHJhY2luZyBjYXBhYmlsaXRpZXMuIExldCdzIHNlZSB3aGF0IHRoYXQgaGVhZGVyIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MjcuNDc5ODkwMjg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxOTA6XFx0I2VuZGlmXFxuMjE5MTpcXHR9XFxuMjE5MjpcXHRcXG4yMTkzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc190cmFjaW5nX211bHRpKGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuMjE5NDpcXHR7XFxuMjE5NTpcXHRcXHRyZXR1cm4gdHlwZSA9PSBCUEZfVFJBQ0VfRkVOVFJZX01VTFRJIHx8IHR5cGUgPT0gQlBGX1RSQUNFX0ZFWElUX01VTFRJIHx8XFxuMjE5NjpcXHRcXHQgICAgICAgdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEk7XFxuMjE5NzpcXHR9XFxuMjE5ODpcXHRcXG4yMTk5OlxcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG4yMjAwOlxcdC8qIFRoaXMgbWFjcm8gaGVscHMgZGV2ZWxvcGVyIHRvIHJlZ2lzdGVyIGEgc3RydWN0X29wcyB0eXBlIGFuZCBnZW5lcmF0ZVxcbjIyMDE6XFx0ICogdHlwZSBpbmZvcm1hdGlvbiBjb3JyZWN0bHkuIERldmVsb3BlcnMgc2hvdWxkIHVzZSB0aGlzIG1hY3JvIHRvIHJlZ2lzdGVyXFxuMjIwMjpcXHQgKiBhIHN0cnVjdF9vcHMgdHlwZSBpbnN0ZWFkIG9mIGNhbGxpbmcgX19yZWdpc3Rlcl9icGZfc3RydWN0X29wcygpIGRpcmVjdGx5LlxcbjIyMDM6XFx0ICovXFxuMjIwNDpcXHQjZGVmaW5lIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKHN0X29wcywgdHlwZSlcXHRcXHRcXHRcXHRcXFxcXFxuMjIwNTpcXHRcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4yMjA2OlxcdFxcdFxcdHN0cnVjdCBicGZfc3RydWN0X29wc18jI3R5cGUge1xcdFxcdFxcdFxcdFxcXFxcXG4yMjA3OlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc3RydWN0X29wc19jb21tb25fdmFsdWUgY29tbW9uO1xcdFxcXFxcXG4yMjA4OlxcdFxcdFxcdFxcdHN0cnVjdCB0eXBlIGRhdGEgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXHRcXFxcXFxuMjIwOTpcXHRcXHRcXHR9O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MjcuNDgwMTE4MzM1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDE2MTkwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIFRyYWNpbmcgTXVsdGktTGluayBGZWF0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXNfdHJhY2luZ19tdWx0aWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgcHJpbWFyaWx5IGFib3V0IGNoZWNraW5nIHRoZSBhdHRhY2ggdHlwZS4gTWFrZXMgc2Vuc2UuIERlZmluaXRlbHkgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgY29yZSBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUsIGFzIGZhciBhcyB0aGlzIHBhdGNoIGlzIGNvbmNlcm5lZCwgYXJlIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYC4gT2YgY291cnNlLCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyAqYWxzbyogYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbHRob3VnaCBJIGNhbiBzZWUgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGlzIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aG9zZSBvdGhlciB0d28uXG5cblRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBCUEZfRVZFTlRTYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgZGVmaW5pdGVseSByZXF1aXJlZC5cblxuTm93LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgdGhlcmUgYW55IGRlcGVuZGVuY3kgb24gYENPTkZJR19GUFJPQkVgIG9yIGBDT05GSUdfS1BST0JFU2AgZm9yIHRoaXMgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgZnVuY3Rpb25hbGl0eT8gU2luY2UgaXQgdXNlcyBgYnBmX3RyYW1wX25vZGVgIGFuZCBgYnBmX3RyYW1wb2xpbmVgLCB0aG9zZSBhcmUgd2hhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIExldCBtZSBkaWcgaW50byB3aGVyZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBhY3R1YWxseSBkZWZpbmVkLCB3aGljaCBhcHBlYXJzIHRvIGJlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjMxLjcyMTc0MDE2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2MDY1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOD1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODM5OmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkyOTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDozMS43NzczNTE2NDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMzkxMDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBzZWxmLXJlZmxlY3Rpb246XG5cbioqRGVlcCBEaXZlIGludG8gYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgRHVhbGl0eSoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIGlzIGJ1Z2dpbmcgbWU6IHdoeSBpbiB0aGUgKndvcmxkKiBhcmUgdGhlcmUgKnR3byogZGVmaW5pdGlvbnMgZm9yIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgPyBJIG1lYW4sIEkga25vdyBob3cgdGhlc2UgdGhpbmdzIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGlzIGdlbmVyYWxseSBwcmV0dHkgZ29vZCwgYnV0IHRoaXMgZmVlbHMuLi4gcmVkdW5kYW50LiBJcyBpdCBkdWUgdG8gc29tZSBoaXN0b3JpY2FsIHJlYXNvbiwgYSByZWZhY3RvcmluZywgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkaWZmZXJlbmNlLCBvciBwZXJoYXBzIHNvbWUgc3VidGxlIHNlbWFudGljIGRpc3RpbmN0aW9uIHRoYXQgSSdtIG1pc3Npbmc/IE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGxpa2VseSBhIGxheWVyaW5nIGlzc3VlIHdoZXJlIGRpZmZlcmVudCBrZXJuZWwgc3Vic3lzdGVtcyBlbmRlZCB1cCBkZXZlbG9waW5nIHNpbWlsYXIgZnVuY3Rpb25zIGluZGVwZW5kZW50bHksIGFuZCB0aGUgY29uc29saWRhdGlvbiBuZXZlciBxdWl0ZSBoYXBwZW5lZC4gVGhhdCdzIGEgY2xhc3NpYyBpbiBjb2RlYmFzZXMgdGhpcyBzaXplLlxuXG5JJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSB1c2UgY2FzZXMuIElzIG9uZSBsaWtlbHkgaW4gYSBkaXJlY3QgYXR0YWNobWVudCBzY2VuYXJpbywgYW5kIHRoZSBvdGhlciBtb3JlIGFic3RyYWN0ZWQ/IERvZXMgb25lIG1hbmFnZSBzb21lIGdsb2JhbCBzdGF0ZSB3aGlsZSB0aGUgb3RoZXIgaXMgbW9yZSBmb2N1c2VkIG9uIGxvY2FsIHJlc291cmNlcz8gQXJlIHRoZSBhcmd1bWVudHMgZGlmZmVyZW50IGVub3VnaCB0byBqdXN0aWZ5IHNlcGFyYXRlIGltcGxlbWVudGF0aW9ucywgb3IgaXMgdGhlcmUgYSBzdHJvbmcgY29kZS1yZXVzZSBvcHBvcnR1bml0eSB0aGF0IHdhcyBtaXNzZWQ/XG5cbkknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIHJlYWxseSBzdXNzIHRoaXMgb3V0LiBJJ20gaG9waW5nIEkgZG9uJ3QgcnVuIGludG8gYSBzcGFnaGV0dGkgbWVzcyBvZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGJ1dCBleHBlcmllbmNlIHRlbGxzIG1lIHRvIHByZXBhcmUgZm9yIGl0LiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGRlc2lnbiBjaG9pY2UuIFBlcmhhcHMgdGhlcmUncyBhbiBvcHRpbWl6YXRpb24gSSdtIG92ZXJsb29raW5nLCBvciBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZiB0aGF0IHdhcyBtYWRlLiBJdCdzIHRpbWUgdG8gcHV0IG9uIG15IGRldGVjdGl2ZSBoYXQgYW5kIGdvIGV4cGxvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDozNS43MTEyNjQ4NzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgzMDpcXHRcXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuMzgzMTpcXHRcXHRcXHRpZiAoaWRzW2ldID09IGlkc1tpIC0gMV0pIHtcXG4zODMyOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMzgzMzpcXHRcXHRcXHRcXHRicmVhaztcXG4zODM0OlxcdFxcdFxcdH1cXG4zODM1OlxcdFxcdH1cXG4zODM2OlxcdFxcdHJldHVybiBlcnI7XFxuMzgzNzpcXHR9XFxuMzgzODpcXHRcXG4zODM5OlxcdGludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4zODQwOlxcdHtcXG4zODQxOlxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rID0gTlVMTDtcXG4zODQyOlxcdFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqZmV4aXRzID0gTlVMTDtcXG4zODQzOlxcdFxcdHN0cnVjdCBicGZfbGlua19wcmltZXIgbGlua19wcmltZXI7XFxuMzg0NDpcXHRcXHR1MzIgY250LCAqaWRzID0gTlVMTDtcXG4zODQ1OlxcdFxcdHU2NCBfX3VzZXIgKnVjb29raWVzO1xcbjM4NDY6XFx0XFx0dTY0ICpjb29raWVzID0gTlVMTDtcXG4zODQ3OlxcdFxcdHUzMiBfX3VzZXIgKnVpZHM7XFxuMzg0ODpcXHRcXHRpbnQgZXJyO1xcbjM4NDk6XFx0XFxuMzg1MDpcXHRcXHR1aWRzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuaWRzKTtcXG4zODUxOlxcdFxcdGNudCA9IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY250O1xcbjM4NTI6XFx0XFxuMzg1MzpcXHRcXHRpZiAoIWNudCB8fCAhdWlkcylcXG4zODU0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4NTU6XFx0XFx0aWYgKGNudCBcXHUwMDNlIE1BWF9UUkFDSU5HX01VTFRJX0NOVClcXG4zODU2OlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuMzg1NzpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuZmxhZ3MgfHwgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudGFyZ2V0X2ZkKVxcbjM4NTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzg1OTpcXHRcXG4zODYwOlxcdFxcdGlkcyA9IGt2bWFsbG9jX29ianMoKmlkcywgY250KTtcXG4zODYxOlxcdFxcdGlmICghaWRzKVxcbjM4NjI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzg2MzpcXHRcXG4zODY0OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihpZHMsIHVpZHMsIGNudCAqIHNpemVvZigqaWRzKSkpIHtcXG4zODY1OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMzg2NjpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4Njc6XFx0XFx0fVxcbjM4Njg6XFx0XFxuMzg2OTpcXHRcXHR1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNvb2tpZXMpO1xcbjM4NzA6XFx0XFx0aWYgKHVjb29raWVzKSB7XFxuMzg3MTpcXHRcXHRcXHRjb29raWVzID0ga3ZtYWxsb2Nfb2JqcygqY29va2llcywgY250KTtcXG4zODcyOlxcdFxcdFxcdGlmICghY29va2llcykge1xcbjM4NzM6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4zODc0OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg3NTpcXHRcXHRcXHR9XFxuMzg3NjpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoY29va2llcywgdWNvb2tpZXMsIGNudCAqIHNpemVvZigqY29va2llcykpKSB7XFxuMzg3NzpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjM4Nzg6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODc5OlxcdFxcdFxcdH1cXG4zODgwOlxcdFxcdH1cXG4zODgxOlxcdFxcbjM4ODI6XFx0XFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XFxuMzg4MzpcXHRcXHRpZiAoZXJyKVxcbjM4ODQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODg1OlxcdFxcbjM4ODY6XFx0XFx0aWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSSkge1xcbjM4ODc6XFx0XFx0XFx0ZmV4aXRzID0ga3ZtYWxsb2Nfb2JqcygqZmV4aXRzLCBjbnQpO1xcbjM4ODg6XFx0XFx0XFx0aWYgKCFmZXhpdHMpIHtcXG4zODg5OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg5MDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4OTE6XFx0XFx0XFx0fVxcbjM4OTI6XFx0XFx0fVxcbjM4OTM6XFx0XFxuMzg5NDpcXHRcXHRsaW5rID0ga3Z6YWxsb2NfZmxleCgqbGluaywgbm9kZXMsIGNudCk7XFxuMzg5NTpcXHRcXHRpZiAoIWxpbmspIHtcXG4zODk2OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg5NzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4OTg6XFx0XFx0fVxcbjM4OTk6XFx0XFxuMzkwMDpcXHRcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksXFxuMzkwMTpcXHRcXHRcXHQgICAgICBcXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSk7XFxuMzkwMjpcXHRcXG4zOTAzOlxcdFxcdGVyciA9IGJwZl9saW5rX3ByaW1lKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBcXHUwMDI2bGlua19wcmltZXIpO1xcbjM5MDQ6XFx0XFx0aWYgKGVycilcXG4zOTA1OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzkwNjpcXHRcXG4zOTA3OlxcdFxcdGxpbmstXFx1MDAzZW5vZGVzX2NudCA9IGNudDtcXG4zOTA4OlxcdFxcdGxpbmstXFx1MDAzZWNvb2tpZXMgPSBjb29raWVzO1xcbjM5MDk6XFx0XFx0bGluay1cXHUwMDNlZmV4aXRzID0gZmV4aXRzO1xcbjM5MTA6XFx0XFxuMzkxMTpcXHRcXHRlcnIgPSBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gocHJvZywgaWRzLCBsaW5rKTtcXG4zOTEyOlxcdFxcdGt2ZnJlZShpZHMpO1xcbjM5MTM6XFx0XFx0aWYgKGVycikge1xcbjM5MTQ6XFx0XFx0XFx0YnBmX2xpbmtfY2xlYW51cChcXHUwMDI2bGlua19wcmltZXIpO1xcbjM5MTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zOTE2OlxcdFxcdH1cXG4zOTE3OlxcdFxcdHJldHVybiBicGZfbGlua19zZXR0bGUoXFx1MDAyNmxpbmtfcHJpbWVyKTtcXG4zOTE4OlxcdFxcbjM5MTk6XFx0ZXJyb3I6XFxuMzkyMDpcXHRcXHRrdmZyZWUoZmV4aXRzKTtcXG4zOTIxOlxcdFxcdGt2ZnJlZShjb29raWVzKTtcXG4zOTIyOlxcdFxcdGt2ZnJlZShpZHMpO1xcbjM5MjM6XFx0XFx0a3ZmcmVlKGxpbmspO1xcbjM5MjQ6XFx0XFx0cmV0dXJuIGVycjtcXG4zOTI1OlxcdH1cXG4zOTI2OlxcdFxcbjM5Mjc6XFx0I2Vsc2VcXG4zOTI4OlxcdFxcbjM5Mjk6XFx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDozNS43MTE2MDk2OTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MDgxNjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBEaXJlY3RpdmVzKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyB3aGVuIGVuY291bnRlcmluZyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBjb250ZXh0LiBUaGUgYCNpZmRlZmAgZGlyZWN0aXZlIGlzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHByZXByb2Nlc3NvciBtYWNybyBpcyBiZWluZyB0ZXN0ZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljIGAjaWZkZWZgIGlzIGNydWNpYWwgdG8gZmlndXJpbmcgb3V0ICp3aGF0KiB0aGlzIGJsb2NrIG9mIGNvZGUgaXMgYWN0dWFsbHkgc3VwcG9zZWQgdG8gZG8gb3IgKndoeSogaXQncyBoZXJlIGF0IGFsbC4gSXMgaXQgZm9yIGEgc3BlY2lmaWMgcGxhdGZvcm0sIGEgZmVhdHVyZSBmbGFnLCBhIGRlYnVnIG1vZGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaXRob3V0IHRoYXQgaW5mb3JtYXRpb24sIHRoaXMgY29kZSBpcyBiYXNpY2FsbHkgbWVhbmluZ2xlc3MgdG8gbWUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGVzdGFibGlzaCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgc28gSSBjYW4gc3RhcnQgdG8gcmVhc29uIHRocm91Z2ggdGhlIGxvZ2ljIHdpdGhpbiB0aGlzIGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MzguNjUyNDI4NTU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ1MDU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZWxzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTU3PXN0YXRpYyBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtNzctfVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo3ODojZWxzZVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy03OS1zdGF0aWMgc3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpicGZfZ2V0X3Jhd190cmFjZXBvaW50X21vZHVsZShjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzNTg9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdzLCBicGZfa3Byb2JlX211bHRpX3B0X3JlZ3MpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMzU5LSNkZWZpbmUgYnBmX2twcm9iZV9tdWx0aV9wdF9yZWdzX3B0cigpXFx0dGhpc19jcHVfcHRyKFxcdTAwMjZicGZfa3Byb2JlX211bHRpX3B0X3JlZ3MpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIzNjA6I2Vsc2VcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjM2MS0jZGVmaW5lIGJwZl9rcHJvYmVfbXVsdGlfcHRfcmVnc19wdHIoKVxcdChOVUxMKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI3Nzk9aW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTMzLX1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjkzNDojZWxzZSAvKiAhQ09ORklHX0ZQUk9CRSAqL1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTM1LWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzI1MD1pbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM0MDAtfVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDAxOiNlbHNlIC8qICFDT05GSUdfVVBST0JFUyAqL1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDAyLWludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgzOT1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyNi1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkyNzojZWxzZVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDozOC43MDg4ODQwODZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5MTI4ODIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIFByZS1yZXF1aXNpdGVzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBoZWFkZmlyc3QgaW50byBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiBzb21ldGhpbmcgZm91bmRhdGlvbmFsOiBgI2lmZGVmYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY2xhcmlmeSBpdHMgcm9sZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhpcywgbGlrZWx5IGtlcm5lbCwgZGV2ZWxvcG1lbnQuIEknbSB0aGlua2luZywgaXMgdGhpcyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkPyBBbmQgaWYgc28sIHdoYXQncyBpdCBndWFyZGluZz8gSXMgaXQgZmVhdHVyZSBhdmFpbGFiaWxpdHksIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUsIHZlcnNpb24gY29tcGF0aWJpbGl0eS4uLiB0aGUgcG9zc2liaWxpdGllcyBhcmUgdmFzdCwgYW5kIEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLiBHcmFzcGluZyB0aGUgaW50ZW50IG9mIHRoZSBgI2lmZGVmYCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUncyBiZWhhdmlvci4gSXTigJlzIGFib3V0IGJ1aWxkaW5nIGEgcm9idXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmRpdGlvbnMgdGhhdCBicmluZyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbnRvIGV4aXN0ZW5jZS4gSSB3YW50IHRvIGJ1aWxkIGEgcm9jay1zb2xpZCBmb3VuZGF0aW9uIG9mIGtub3dsZWRnZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Nzk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NDQuMDAwMTc0NjA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI5NTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00Ny1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6NDg6I2lmZGVmIENPTkZJR19NT0RVTEVTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ5LXN0cnVjdCBicGZfdHJhY2VfbW9kdWxlIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzM9dW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmX2ZhdWx0YWJsZShzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTg1OiNpZmRlZiBDT05GSUdfQlBGX0tQUk9CRV9PVkVSUklERVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODYtQlBGX0NBTExfMihicGZfb3ZlcnJpZGVfcmV0dXJuLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB1bnNpZ25lZCBsb25nLCByYylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMDY9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfcHJvdG8gPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMTU6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTYtQlBGX0NBTExfMyhicGZfcHJvYmVfcmVhZF9jb21wYXQsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9OTYxPUJURl9TRVRfU1RBUlQoYnRmX2FsbG93bGlzdF9kX3BhdGgpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2MjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2My1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2NT1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9vcGVuKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjYtI2VuZGlmXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2NzojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1BBVEhcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY4LUJURl9JRChmdW5jLCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbnRyeV9pcCh1bnNpZ25lZCBsb25nIGZlbnRyeV9pcClcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3Ni17XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNzc6I2lmZGVmIENPTkZJR19YODZfS0VSTkVMX0lCVFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDc4LVxcdGlmIChpc19lbmRicigodm9pZCAqKShmZW50cnlfaXAgLSBFTkRCUl9JTlNOX1NJWkUpKSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDg0PUJQRl9DQUxMXzEoYnBmX2dldF9mdW5jX2lwX2twcm9iZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDg4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMDg5OiNpZmRlZiBDT05GSUdfVVBST0JFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDkwLVxcdHJ1bl9jdHggPSBjb250YWluZXJfb2YoY3VycmVudC1cXHUwMDNlYnBmX2N0eCwgc3RydWN0IGJwZl90cmFjZV9ydW5fY3R4LCBydW5fY3R4KTtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMjc0PWJwZl90cmFjaW5nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4MC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTI4MTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODItXFx0Y2FzZSBCUEZfRlVOQ19wcm9iZV9yZWFkOlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEzNDM9a3Byb2JlX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUxLVxcdFxcdHJldHVybiBwcm9nLVxcdTAwM2VzbGVlcGFibGUgPyBcXHUwMDI2YnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gOiBcXHUwMDI2YnBmX2dldF9zdGFja19wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM1MjojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1My1cXHRjYXNlIEJQRl9GVU5DX292ZXJyaWRlX3JldHVybjpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzAtXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MzE6I2lmZGVmIENPTkZJR19ORVRcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMi1cXHRjYXNlIEJQRl9GVU5DX3NrYl9vdXRwdXQ6XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgyOD1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHJhd190cmFjZXBvaW50X3Byb2dfb3BzID0ge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODI5OiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzAtXFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyMDk9aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDMtXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNDQ6I2lmZGVmIENPTkZJR19LUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDUtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfS1BST0JFKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDktI2VuZGlmXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNTA6I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNTEtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfVVBST0JFKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNzM9c3Vic3lzX2luaXRjYWxsKHNlbmRfc2lnbmFsX2lycV93b3JrX2luaXQpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjc1OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc2LXN0YXRpYyBpbnQgYnBmX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG9wLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzMjk9c3RydWN0IGJwZl9zZXNzaW9uX3J1bl9jdHgge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzQtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIzMzU6I2lmZGVmIENPTkZJR19GUFJPQkVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNi1zdHJ1Y3QgYnBmX2twcm9iZV9tdWx0aV9saW5rIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNDQ4PXN0YXRpYyBpbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk3LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNDk4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk5LXN0YXRpYyB2b2lkIGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI1MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX2twcm9iZV9tdWx0aV9saW5rX2xvcHMgPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyNy1cXHQuZmlsbF9saW5rX2luZm8gPSBicGZfa3Byb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI1Mjg6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MjktXFx0LnNob3dfZmRpbmZvID0gYnBmX2twcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yOTQzPXN0YXRpYyB1NjQgYnBmX2twcm9iZV9tdWx0aV9lbnRyeV9pcChzdHJ1Y3QgYnBmX3J1bl9jdHggKmN0eClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTQ4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTQ5OiNpZmRlZiBDT05GSUdfVVBST0JFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTUwLXN0cnVjdCBicGZfdXByb2JlX211bHRpX2xpbms7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzAwNz1zdGF0aWMgaW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3My1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzA3NDojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3NS1zdGF0aWMgdm9pZCBicGZfdXByb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMTE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxMTgtXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMTE5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTIwLVxcdC5zaG93X2ZkaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTUtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTctc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODYtXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4NzojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4OC1cXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NDQuMDY1NDc0OTY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjA5NDM5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIEtlcm5lbCBUcmFjaW5nKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEFoYSwgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgKmlzbid0KiBndWFyZGVkIGJ5IGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGluIHRoaXMgZmlsZS4gVGhhdCdzIHVudXN1YWwsIEkgZXhwZWN0ZWQgc29tZSBzb3J0IG9mIGZlYXR1cmUgZmxhZyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUga2VybmVsIHZlcnNpb24gb3IgY29uZmlndXJhdGlvbi4gSG1tLCBidXQgd2FpdCBhIG1pbnV0ZSwgdGhlcmUncyBhbiBgI2Vsc2VgIGJsb2NrIGRvd24gYXQgbGluZSAzOTI3LiBPa2F5LCBzbyAqc29tZXRoaW5nKiBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBjb2RlIHRoYXQgKmxlYWRzKiB0byB1c2luZyBvciBub3QgdXNpbmcgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBgI2lmYCB0aGF0IHBhaXJzIHdpdGggdGhhdCBgI2Vsc2VgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkgaGVyZS4gV2hhdCBleGFjdGx5IGlzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQ/IElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGlvbiwgYSBrZXJuZWwgcGFyYW1ldGVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW50byB0aGF0IGNvbmRpdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcwMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjQ3LjY4NjQyMTA5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4MDA6XFx0c3RhdGljIHZvaWQgaWRzX3N3YXBfcih2b2lkICphLCB2b2lkICpiLCBpbnQgc2l6ZSBfX21heWJlX3VudXNlZCxcXG4zODAxOlxcdFxcdFxcdCAgICAgICBjb25zdCB2b2lkICpwcml2IF9fbWF5YmVfdW51c2VkKVxcbjM4MDI6XFx0e1xcbjM4MDM6XFx0XFx0dTY0ICpjb29raWVfYSwgKmNvb2tpZV9iLCAqY29va2llcztcXG4zODA0OlxcdFxcdHUzMiAqaWRfYSA9IGEsICppZF9iID0gYiwgKmlkcztcXG4zODA1OlxcdFxcdHZvaWQgKipkYXRhID0gKHZvaWQgKiopIHByaXY7XFxuMzgwNjpcXHRcXG4zODA3OlxcdFxcdGlkcyAgICAgPSBkYXRhWzBdO1xcbjM4MDg6XFx0XFx0Y29va2llcyA9IGRhdGFbMV07XFxuMzgwOTpcXHRcXG4zODEwOlxcdFxcdGlmIChjb29raWVzKSB7XFxuMzgxMTpcXHRcXHRcXHRjb29raWVfYSA9IGNvb2tpZXMgKyAoaWRfYSAtIGlkcyk7XFxuMzgxMjpcXHRcXHRcXHRjb29raWVfYiA9IGNvb2tpZXMgKyAoaWRfYiAtIGlkcyk7XFxuMzgxMzpcXHRcXHRcXHRzd2FwKCpjb29raWVfYSwgKmNvb2tpZV9iKTtcXG4zODE0OlxcdFxcdH1cXG4zODE1OlxcdFxcdHN3YXAoKmlkX2EsICppZF9iKTtcXG4zODE2OlxcdH1cXG4zODE3OlxcdFxcbjM4MTg6XFx0c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxuMzgxOTpcXHR7XFxuMzgyMDpcXHRcXHR2b2lkICpkYXRhWzJdID0geyBpZHMsIGNvb2tpZXMgfTtcXG4zODIxOlxcdFxcdGludCBlcnIgPSAwO1xcbjM4MjI6XFx0XFxuMzgyMzpcXHRcXHQvKlxcbjM4MjQ6XFx0XFx0ICogU29ydCBpZHMgYXJyYXkgKHRvZ2V0aGVyIHdpdGggY29va2llcyBhcnJheSBpZiBkZWZpbmVkKVxcbjM4MjU6XFx0XFx0ICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5c1xcbjM4MjY6XFx0XFx0ICogYXJlIGxlZnQgc29ydGVkLlxcbjM4Mjc6XFx0XFx0ICovXFxuMzgyODpcXHRcXHRzb3J0X3Jfbm9uYXRvbWljKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcXG4zODI5OlxcdFxcbjM4MzA6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzE6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNDpcXHRcXHRcXHR9XFxuMzgzNTpcXHRcXHR9XFxuMzgzNjpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzc6XFx0fVxcbjM4Mzg6XFx0XFxuMzgzOTpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MDpcXHR7XFxuMzg0MTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDQ6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NTpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ2OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0NzpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDg6XFx0XFx0aW50IGVycjtcXG4zODQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDo0Ny42ODY2MDIxNjNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg4NjY4MzM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBzb21lIHNwZWNpZmljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvZGUgd2l0aGluIHRoaXMgZmlsZS4gR2l2ZW4gdGhhdCBJJ20gd29ya2luZyB3aXRoIGEgcmVsYXRpdmVseSBsYXJnZSBmaWxlLCBJJ2xsIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBhcHByb2FjaCByYXRoZXIgdGhhbiBhIGJyb2FkIHN3ZWVwLiBJJ20gZ29pbmcgdG8gc2NhbiBiYWNrd2FyZCwgYmVnaW5uaW5nIGFyb3VuZCBsaW5lIDM4MDAsIHRvIGxvb2sgZm9yIGAjaWZgIG9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMuIFRoZXNlIGFyZSB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgSSBrbm93IHRoYXQgc2lnbmFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcywgYW5kIHRoZXknbGwgbGlrZWx5IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24gaWYgdGhlcmUncyBhbnkgYnJhbmNoaW5nIGxvZ2ljIG5lYXIgdGhhdCBsaW5lLiBGaW5kaW5nIHRoZXNlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQncyBhY3RpdmUgYW5kIGluYWN0aXZlIGFyb3VuZCB0aGF0IGxvY2F0aW9uLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdheSB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIHRoZSBjb2RlIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NTAuNTczMjg4Mjk0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg0MTExOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtNDctXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjQ4OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00OS1zdHJ1Y3QgYnBmX3RyYWNlX21vZHVsZSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTczPXVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZl9mYXVsdGFibGUoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODQtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4NTojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg2LUJQRl9DQUxMXzIoYnBmX292ZXJyaWRlX3JldHVybiwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdW5zaWduZWQgbG9uZywgcmMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzA2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxNC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzE1OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0VcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE2LUJQRl9DQUxMXzMoYnBmX3Byb2JlX3JlYWRfY29tcGF0LCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2MT1CVEZfU0VUX1NUQVJUKGJ0Zl9hbGxvd2xpc3RfZF9wYXRoKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5NjI6I2lmZGVmIENPTkZJR19TRUNVUklUWVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjMtQlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjU9QlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfb3BlbilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY2LSNlbmRpZlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Njc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRIXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2OC1CVEZfSUQoZnVuYywgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnlfaXAodW5zaWduZWQgbG9uZyBmZW50cnlfaXApXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzYte1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMDc3OiNpZmRlZiBDT05GSUdfWDg2X0tFUk5FTF9JQlRcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3OC1cXHRpZiAoaXNfZW5kYnIoKHZvaWQgKikoZmVudHJ5X2lwIC0gRU5EQlJfSU5TTl9TSVpFKSkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA4ND1CUEZfQ0FMTF8xKGJwZl9nZXRfZnVuY19pcF9rcHJvYmUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA4OC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA4OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA5MC1cXHRydW5fY3R4ID0gY29udGFpbmVyX29mKGN1cnJlbnQtXFx1MDAzZWJwZl9jdHgsIHN0cnVjdCBicGZfdHJhY2VfcnVuX2N0eCwgcnVuX2N0eCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTI3ND1icGZfdHJhY2luZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEyODE6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMjgyLVxcdGNhc2UgQlBGX0ZVTkNfcHJvYmVfcmVhZDpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1MS1cXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNlc2xlZXBhYmxlID8gXFx1MDAyNmJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvIDogXFx1MDAyNmJwZl9nZXRfc3RhY2tfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEzNTI6I2lmZGVmIENPTkZJR19CUEZfS1BST0JFX09WRVJSSURFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTMtXFx0Y2FzZSBCUEZfRlVOQ19vdmVycmlkZV9yZXR1cm46XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzMwLVxcdHN3aXRjaCAoZnVuY19pZCkge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzMxOiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzItXFx0Y2FzZSBCUEZfRlVOQ19za2Jfb3V0cHV0Olxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE4Mjg9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyByYXdfdHJhY2Vwb2ludF9wcm9nX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTgyOTojaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODMwLVxcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3Jhd190cCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjA5PWludCBicGZfZ2V0X3BlcmZfZXZlbnRfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHUzMiAqcHJvZ19pZCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQzLVxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjQ0OiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ1LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX0tQUk9CRSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ5LSNlbmRpZlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjUwOiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjUxLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX1VQUk9CRSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjczPXN1YnN5c19pbml0Y2FsbChzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI3NTojaWZkZWYgQ09ORklHX01PRFVMRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Ni1zdGF0aWMgaW50IGJwZl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBvcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMzI5PXN0cnVjdCBicGZfc2Vzc2lvbl9ydW5fY3R4IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMzM0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzM1OiNpZmRlZiBDT05GSUdfRlBST0JFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzYtc3RydWN0IGJwZl9rcHJvYmVfbXVsdGlfbGluayB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjM1Mj1zdHJ1Y3QgdXNlcl9zeW1zIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMzU2LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzU3OiNpZm5kZWYgQ09ORklHX0hBVkVfRlRSQUNFX1JFR1NfSEFWSU5HX1BUX1JFR1NcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjM1OC1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MsIGJwZl9rcHJvYmVfbXVsdGlfcHRfcmVncyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjQ0OD1zdGF0aWMgaW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5Ny1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjQ5ODojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5OS1zdGF0aWMgdm9pZCBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MjctXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNTI4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTI5LVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mjk0Mz1zdGF0aWMgdTY0IGJwZl9rcHJvYmVfbXVsdGlfZW50cnlfaXAoc3RydWN0IGJwZl9ydW5fY3R4ICpjdHgpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk0OC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mjk0OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk1MC1zdHJ1Y3QgYnBmX3Vwcm9iZV9tdWx0aV9saW5rO1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMwMDc9c3RhdGljIGludCBicGZfdXByb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzMtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMwNzQ6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzUtc3RhdGljIHZvaWQgYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzExNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdXByb2JlX211bHRpX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTE4LVxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzExOTojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzEyMC1cXHQuc2hvd19mZGluZm8gPSBicGZfdXByb2JlX211bHRpX3Nob3dfZmRpbmZvLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2Nzk9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4MC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY4MTojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4Mi0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTUtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTctc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODYtXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4NzojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4OC1cXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NTAuOTAxNzA2MDQ4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDMzNzY5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gTGFieXJpbnRoKipcblxuT2theSwgc28gSSd2ZSBsYW5kZWQgb24gbGluZSAzNjgxLCBhbmQgaXQncyBzdGFyaW5nIG1lIHJpZ2h0IGluIHRoZSBmYWNlOiBhIGAjaWZgIHN0YXRlbWVudCEgU3BlY2lmaWNhbGx5LCBpdCdzIHRoYXQgY29tcGxleCBjb25kaXRpb25hbCBjaGVjay4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzLlxuXG5MZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGFuZCBgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gVGhpcyBpcyB0aGUgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzcGVjaWZpYyBmZWF0dXJlLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gZHluYW1pYyBmdW5jdGlvbiB0cmFjaW5nLCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGEgZGlyZWN0IGNhbGxzIG9wdGltaXphdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgKnRoaXMqIGlzIHdoZXJlIHRoZSBkZWNpc2lvbiBpcyBtYWRlLlwiIFNvLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIHBhdGggaXMgZXhlY3V0ZWQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGluIHdoYXQgc2l0dWF0aW9uIGRvZXMgdGhlIGJsb2NrIG9mIGNvZGUgaW5zaWRlIHRoaXMgI2lmLCBleGVjdXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTkwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjU0LjI0NTA4NTMxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzY4MDpcXHRcXG4zNjgxOlxcdCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbjM2ODI6XFx0ICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxcbjM2ODM6XFx0XFxuMzY4NDpcXHRzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbjM2ODU6XFx0e1xcbjM2ODY6XFx0XFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKnRyX2xpbmsgPVxcbjM2ODc6XFx0XFx0XFx0Y29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTtcXG4zNjg4OlxcdFxcbjM2ODk6XFx0XFx0V0FSTl9PTl9PTkNFKGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLVxcdTAwM2Vwcm9nLCB0cl9saW5rKSk7XFxuMzY5MDpcXHR9XFxuMzY5MTpcXHRcXG4zNjkyOlxcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuMzY5MzpcXHR7XFxuMzY5NDpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XFxuMzY5NTpcXHRcXHRcXHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xcbjM2OTY6XFx0XFxuMzY5NzpcXHRcXHRrdmZyZWUodHJfbGluay1cXHUwMDNlZmV4aXRzKTtcXG4zNjk4OlxcdFxcdGt2ZnJlZSh0cl9saW5rLVxcdTAwM2Vjb29raWVzKTtcXG4zNjk5OlxcdFxcdGt2ZnJlZSh0cl9saW5rKTtcXG4zNzAwOlxcdH1cXG4zNzAxOlxcdFxcbjM3MDI6XFx0c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4zNzAzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG4zNzA0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NTQuMjQ1MjYxNzlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMzE0NDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFRyYWNpbmcgTGluayBJbmZvcm1hdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSd2ZSBwaW5wb2ludGVkIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBhcyBiZWluZyBnYXRlZCBiZWhpbmQgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBFeGNlbGxlbnQsIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXNlIGNvbmZpZ3MgcGxheSB0b2dldGhlciBhbmQgaG93IHRoZXkgbWlnaHQgaW1wYWN0IHRoZSB1c2FiaWxpdHkgb2YgdGhpcyBmZWF0dXJlLlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuIEkgcmVjYWxsIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCB4ODYuIEFuZCwgaWYgSSdtIHJlbWVtYmVyaW5nIGNvcnJlY3RseSwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgYWxzbyBvZnRlbiBlbmFibGVkIGJ5IHg4Ni4gU28sIGFyZSB0aGVzZSBjb25maWdzIGV4cG9zZWQgYXMgdXNlciBvcHRpb25zPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBhcmUgc29tZXRoaW5nIGEgdXNlciBjYW4gY29udHJvbCBkaXJlY3RseSwgb3IgaWYgdGhleSBhcmUganVzdCBiZWluZyBpbXBsaWNpdGx5IGVuYWJsZWQgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZS5cblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIGVpdGhlciBga2VybmVsL3RyYWNlL0tjb25maWdgIG9yIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBzZWUgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIGFuZCBpZiB0aGVyZSdzIGFueSB1c2VyLWZhY2luZyBvcHRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZW0uIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNvbWV0aGluZyB0aGUgdXNlciBuZWVkcyB0byBiZSBhd2FyZSBvZiBvciBpZiB0aGlzIGlzIGFuIHg4Ni1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjU0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NTguMzQ4NDA5MTc2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA4MzcyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNTowMC4yNTY3ODgxNzdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2MjYxMjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBEeW5hbWljIEZ0cmFjZSBCb29sZWFuIExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRlZl9ib29sIHlgIGRlZmluaXRpb24uIFRoaXMgaXMgY2xlYXJseSBjb250aW5nZW50IG9uIHRoZSBpbnRlcnBsYXkgb2YgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYW5kIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8gcmVsYXRlZCB0byBmdW5jdGlvbiB0cmFjaW5nLiBUaGlzIHJlbWluZHMgbWUgb2Ygc29tZSBwb3RlbnRpYWwgaXNzdWVzIGludm9sdmluZyByZWdpc3RlciB1c2FnZSB3aXRoIGR5bmFtaWMgZnRyYWNlLiBXZSBuZWVkIGEgYm9vbGVhbiB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYHlgLiBJJ20gZ3Vlc3NpbmcgdGhhdCBgeWAgcmVwcmVzZW50cyB0aGUgc2V0dGluZyBmb3IgdGhlIHVzZSBvZiBkeW5hbWljIGZ0cmFjZS5cblxuQmVmb3JlIGdvaW5nIGZ1cnRoZXIsIGl0IHdvdWxkIGJlIGxvZ2ljYWwgdG8gY2hlY2sgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gVGhpcyBpcyBsaWtlbHkgcmVsZXZhbnQuIEl0IHNlZW1zIGxpa2UgdGhlIGFyY2hpdGVjdHVyZSBtYXkgaGF2ZSBpdHMgb3duIGltcGxlbWVudGF0aW9uLiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRpcmVjdCBvcGVyYXRpb25zIHBhdGguIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29ycmVjdCBkZWZhdWx0IHZhbHVlIGZvciBgeWAuIFRoaXMgY2hlY2tzIGEgc2luZ2xlIGZ0cmFjZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaWYgaXQgYWxsb3dzIHRoZSBkaXJlY3Qgb3BlcmF0aW9ucyBwYXRoLiBUaGUgdmFsdWUgbWF5IGJlIHVzZWQgdG8gYWxsb3cvZGlzYWxsb3cgdGhlIGB5YCB2YXJpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNTowNC40MTk0MDQwNTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDY5NTU2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTUwPWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01Mi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1Mzpjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01NC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjA2LjMyNjM2NTcwMloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjU1ODU4OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqSGlkZGVuIEJvb2xlYW5zIGFuZCBDb25maWd1cmF0aW9uIERldGFpbHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBoaWRkZW4gYm9vbGVhbiBoZXJlLiBUaGF0IG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gZXhwb3NlIGl0IGRpcmVjdGx5IHRvIHRoZSB1c2VyIGluIGBFbmFibGVDb25maWdzYC4gSXQncyBub3Qgc29tZXRoaW5nIHRoZXkgY2FuIGRpcmVjdGx5IHNlbGVjdCBvciBkZXNlbGVjdC4gSG93ZXZlciwgaXQgc2VlbXMgY3J1Y2lhbCB0byB0aGUgZnVuY3Rpb25hbGl0eSwgc28gd2UgKmRvKiBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBleHBsaWNpdGx5IHNwZWNpZnkgYENPTkZJR19CUEZfRVZFTlRTYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEhvbGQgb24gYSBzZWNvbmQuLi4gSSB0aGluayBgQ09ORklHX0JQRl9FVkVOVFNgICppcyogYWN0dWFsbHkgdXNlci1zZWxlY3RhYmxlLCBpc24ndCBpdD8gQmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyB2ZXJpZnkgaWYgYENPTkZJR19CUEZfRVZFTlRTYCBjYW4gYmUgY29uZmlndXJlZCBieSB0aGUgdXNlci4gTmVlZCB0byBjb25maXJtIHRoYXQgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYzNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjA5Ljk4MjIyNzUwOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MTU1MjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0VWRU5UU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz04Mzk9Y29uZmlnIEVQUk9CRV9FVkVOVFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4NTM6Y29uZmlnIEJQRl9FVkVOVFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTQtXFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNToxMS45MzM3ODkzMThaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5NDMxMTExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgQlBGLUJhc2VkIFRyYWNpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gcHV0dGluZyB0b2dldGhlciBhIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgZm9yIEJQRi1iYXNlZCB0cmFjaW5nLiBSaWdodCwgYEJQRl9FVkVOVFNgIGlzIGRlZmluaXRlbHkgdXNlci1zZWxlY3RhYmxlLCBzbyBJIHNob3VsZCBiZSBnb29kIHRoZXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9FVkVOVFNgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSBib3RoIGluY2x1ZGVkLCB0aGF0J3MgYSBnaXZlbi4gTm93LCB3aGF0IGFib3V0IGBGUFJPQkVgIG9yIGBLUFJPQkVTYD8gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGZvciB0aGF0IGlzIHR1Y2tlZCBhd2F5IHVuZGVyIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBGVFJBQ0VgLiBBbHJpZ2h0LCBzbyBgRlRSQUNFYCBpcyAqYWJzb2x1dGVseSogbmVlZGVkLCBhbmQgYERZTkFNSUNfRlRSQUNFYCBhcyB3ZWxsLiBUaGF04oCZcyBhbGwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuQnV0IG5vdyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfRVZFTlRTYCBhcmUgY29ycmVjdC4gYEJQRl9FVkVOVFNgIGFsc28gZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgIGFuZCB0aGVuIGRlcGVuZHMgb24gYSBmZXcgb3RoZXIgdGhpbmdzLCBlaXRoZXIgYEtQUk9CRV9FVkVOVFNgLCBgVVBST0JFX0VWRU5UU2AsIG9yIGBQRVJGX0VWRU5UU2AuIEhhbmcgb27igKYgaXQncyBgQlBGX1NZU0NBTExgICphbmQqIGBLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMgfHwgUEVSRl9FVkVOVFNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBvbmUgb2YgdGhvc2UgbGFzdCB0aHJlZSBlbmFibGVkLCBhcyBgQlBGX1NZU0NBTExgIGRlcGVuZHMgb24gb25lIG9mIHRob3NlLCBhbmQgdGhlIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB0aGF0LiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGdvIGFuZCBkb3VibGUtY2hlY2sgYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBmb3IgYEJQRl9FVkVOVFNgLiBHb3R0YSBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDU6MTYuOTI4MTAyOTI2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxcbiA4NTE6XFx0XFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNvbmZpZyBCUEZfRVZFTlRTXFxuIDg1NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDg1NTpcXHRcXHRkZXBlbmRzIG9uIChLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IFBFUkZfRVZFTlRTXFxuIDg1NjpcXHRcXHRib29sXFxuIDg1NzpcXHRcXHRkZWZhdWx0IHlcXG4gODU4OlxcdFxcdGhlbHBcXG4gODU5OlxcdFxcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXFxuIDg2MDpcXHRcXHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxcbiA4NjE6XFx0XFxuIDg2MjpcXHRjb25maWcgRFlOQU1JQ19FVkVOVFNcXG4gODYzOlxcdFxcdGRlZl9ib29sIG5cXG4gODY0OlxcdFxcbiA4NjU6XFx0Y29uZmlnIFBST0JFX0VWRU5UU1xcbiA4NjY6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Njc6XFx0XFxuIDg2ODpcXHRjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbiA4Njk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBwcm9ncmFtcyB0byBvdmVycmlkZSBhIGtwcm9iZWQgZnVuY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjE2LjkyODIyMDgxNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzg5NDUzNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgRXZlbnQgQ29uZmlndXJhdGlvbiBhbmQgVHJhY2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYEJQRl9FVkVOVFNgIGlzIGEgYm9vbGVhbiB2YWx1ZSB0aGF0J3MgYXV0b21hdGljYWxseSBzZXQgdG8gJ3knICh5ZXMpIGlmIGl0cyBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4gVGhhdCBtZWFucyBpdCdzIG5vdCBhIGRpcmVjdCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBidXQgcmF0aGVyLCBpdHMgZGVwZW5kZW5jaWVzIGFyZS4gVGhlIGRlcGVuZGVuY2llcyBhcmUgYEJQRl9TWVNDQUxMYCwgYEtQUk9CRV9FVkVOVFNgLCBgVVBST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLiBHb3QgaXQuIFNvLCByZWFsbHksIHdoYXQgd2UgbmVlZCB0byBmb2N1cyBvbiBhcmUgdGhvc2UgZGVwZW5kZW5jaWVzLiBXZSBjYW4ganVzdCBsaXN0IGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfRVZFTlRTYCwgZXZlbiB0aG91Z2ggYEJQRl9FVkVOVFNgIGRlZmF1bHRzIHRvICd5JywgU3l6a2FsbGVyIGhhbmRsZXMgdGhpcy5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQncyB0aGUgbWFpbiBmdW5jdGlvbiB0byBmb2N1cyBvbiBoZXJlLCByZWdhcmRpbmcgdGhlIGNvZGUgYWRkZWQgYnkgdGhpcyBwYXRjaD8gSXMgaXQganVzdCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2A/IFllcywgc2VlbXMgbGlrZSBpdC4gVGhhdCdzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGFkZGVkLiBBbmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgYWxzbyBtb2RpZmllZCwgYnV0IGl0J3Mgbm90IGFsbG9jYXRpbmcgYW55dGhpbmcgbmV3LiBJdCdzIG1vZGlmeWluZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHNgLCBub3QgdGhlIGFsbG9jYXRpb24gaXRzZWxmLiBSaWdodCwgbm8sIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFscmVhZHkgaGFuZGxlZCBgaWRzYCBhbmQgYGNvb2tpZXNgIGFsbG9jYXRpb24uIEl0J3MgcmVhbGx5IGp1c3QgdGhlIGxpbmsgaW5mbyBhbmQgb3BlcmF0aW9ucy4gSGFuZyBvbiwgbGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBkaWZmIGFnYWluLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjIyLjcxNzY3NjY0OFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNzcwNzM2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjkyPXN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzcwMS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzcwMjpzdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzAzLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg1LVxcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg2OlxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODctI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjI0LjYyNTM4OTM0OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzUyOTc1NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBCUEYgVHJhY2luZyBNdWx0aS1MaW5rIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AsIHdoaWNoIGlzIGJlaW5nIGFzc2lnbmVkIGFzIHRoZSBgLmZpbGxfbGlua19pbmZvYCBmdW5jdGlvbiB3aXRoaW4gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wc2AuIFRoYXQncyB0aGUga2V5IGtlcm5lbCBmdW5jdGlvbiB3ZSdyZSBhZGRpbmcuIFRoZSByZXN0IG9mIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb25maW5lZCB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzbyB0aGUgY29yZSBsb2dpYyByZXNpZGVzIGluIHRoYXQgb25lIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIGZvciBvdXIgZnV6emluZyB0YXJnZXRzLCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYC4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gV2UnbGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AsIG9mIGNvdXJzZS5cblxuSG1tLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQWhhLCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCB0byBjb21waWxlLCBidXQgdGhlc2UgYXJlIHNlbGVjdGVkIGJ5IGBGVFJBQ0VgIGFuZCBhcmNoaXRlY3R1cmUuIEl0J3MgcHJvYmFibHkgc2FmZXN0IHRvIGFkZCBgRlRSQUNFYCBhbmQgYERZTkFNSUNfRlRSQUNFYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgdG8gZW5zdXJlIGZ1bGwgY292ZXJhZ2UuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHJlYWNoYWJpbGl0eS4gVGhlIGZ1bmN0aW9uIGlzIGFjY2Vzc2VkIHZpYSB0aGUgYGJwZihCUEZfT0JKX0dFVF9JTkZPX0JZX0ZELCAuLi4pYCBzeXNjYWxsIG9uIGEgdHJhY2luZyBtdWx0aSBsaW5rIGZpbGUgZGVzY3JpcHRvci4gV2UgZ2V0IG9uZSBvZiB0aG9zZSBieSBjYWxsaW5nIGBicGYoQlBGX0xJTktfQ1JFQVRFLCAuLi4pYCB3aXRoIGBhdHRhY2hfdHlwZWAgc2V0IHRvIGVpdGhlciBgQlBGX1RSQUNFX0ZFTlRSWV9NVUxUSWAsIGBCUEZfVFJBQ0VfRkVYSVRfTVVMVElgLCBvciBgQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJYC4gWWVwLCB0aGF0J3MgZGVmaW5pdGVseSBhIHZpYWJsZSBjb2RlIHBhdGguIE5vIGRlYWQgY29kZSB0aGVyZSFcblxuT2theSwgbGV0J3Mgd3JpdGUgdGhpcyB1cCBuZWF0bHkuXG5cbiogICBgV29ydGhGdXp6aW5nOiB0cnVlYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtcImJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9cIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtcIkJQRl9TWVNDQUxMXCIsIFwiQlBGX0VWRU5UU1wiLCBcIkZUUkFDRVwiLCBcIkRZTkFNSUNfRlRSQUNFXCJdYFxuKiAgIGBSZWFzb25pbmc6IFRoZSBwYXRjaCBlbmFibGVzIHRoZSBgZmlsbF9saW5rX2luZm9gIGZ1bmN0aW9uYWxpdHkgZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgIGxpbmtzLiBUaGlzIGxldHMgdXNlcnNwYWNlIHF1ZXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIG11bHRpIGxpbmtzIHZpYSBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAgdGhyb3VnaCB0aGUgYnBmIHN5c2NhbGwuIFNwZWNpZmljYWxseSwgdGhlIG5ldyBmdW5jdGlvbiBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgaGFuZGxlcyB1c2VyLXByb3ZpZGVkIHBvaW50ZXJzIGFuZCBjb3BpZXMgZGF0YSBiYWNrIHRvIHVzZXJzcGFjZS4gU2luY2UgaXQncyByZWFjaGFibGUgYW5kIGRhdGEgdHJhbnNmZXIgb2NjdXJzLCBpdCByZXF1aXJlcyBmdXp6aW5nLmBcblxuXG4iLCJJbnB1dFRva2VucyI6MzU4MTUsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjMzLjM3ODM2NzY1MVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzI5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZmlsbF9saW5rX2luZm9gIHN1cHBvcnQgZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgIGxpbmtzLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdHJhY2luZyBtdWx0aSBsaW5rcyB2aWEgdGhlIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCBjb21tYW5kIG9mIHRoZSBgYnBmYCBzeXNjYWxsLiBUaGUgbmV3IGZ1bmN0aW9uIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGNvcGllcyBkYXRhIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowslqsf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-21 20:54:42 +0000 UTC FinishedAt: 2026-06-21 21:05:34 +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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "FTRACE", "DYNAMIC_FTRACE" ], "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": "a975094bf98ca97be9146f9d3b5681a6f9cf5ce3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_EVENTS", "FTRACE", "DYNAMIC_FTRACE" ], "series_id": "66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_tracing_multi_link_fill_link_info" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzM2VmNzhjNzBmMDgzNGVkOWUwNDVmNWFlZWQ1NDIyMzUyMGJmNTJhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdW4gMjEgMjE6MDM6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uODA0MjNjY2M2YjU3YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTY4MzksNiAmIzQzOzY4MzksMTUgQEAgc3RydWN0IGJwZl9saW5rX2luZm8ge1xuIFx0XHRcdF9fdTMyIGZsYWdzO1xuIFx0XHRcdF9fdTMyIHBpZDtcbiBcdFx0fSB1cHJvYmVfbXVsdGk7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRfX3UzMiBhdHRhY2hfdHlwZTtcbiYjNDM7XHRcdFx0X191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi9cbiYjNDM7XHRcdFx0X191MzIgb2JqX2lkO1xuJiM0MztcdFx0XHRfX3UzMiA6MzI7XG4mIzQzO1x0XHRcdF9fYWxpZ25lZF91NjQgaWRzO1xuJiM0MztcdFx0XHRfX2FsaWduZWRfdTY0IGFkZHJzO1xuJiM0MztcdFx0XHRfX2FsaWduZWRfdTY0IGNvb2tpZXM7XG4mIzQzO1x0XHR9IHRyYWNpbmdfbXVsdGk7XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0X191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovXG4gXHRcdFx0X191MzIgOjMyO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuaW5kZXggODJmOGZlZWE2OTMxMWEuLmZkYWI0ZWM1YWQ0ZjQ1IDEwMDY0NFxuLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbkBAIC0zNjk5LDYgJiM0MzszNjk5LDYwIEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4gXHRrdmZyZWUodHJfbGluayk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHR1NjQgX191c2VyICp1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY29va2llcyk7XG4mIzQzO1x0dTY0IF9fdXNlciAqdWFkZHJzID0gdTY0X3RvX3VzZXJfcHRyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hZGRycyk7XG4mIzQzO1x0dTMyIF9fdXNlciAqdWlkcyA9IHU2NF90b191c2VyX3B0cihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuaWRzKTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluaztcbiYjNDM7XHR1MzIgdWNvdW50ID0gaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50O1xuJiM0MztcdGJvb2wgaGFzX2Nvb2tpZXMsIHNob3dfYWRkcnM7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICgodWlkcyB8fCB1Y29va2llcyB8fCB1YWRkcnMpIFx1MDAyNlx1MDAyNiAhdWNvdW50KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHRyX2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xuJiM0MztcbiYjNDM7XHRpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUgPSB0cl9saW5rLVx1MDAzZWxpbmsuYXR0YWNoX3R5cGU7XG4mIzQzO1x0aW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50ID0gdHJfbGluay1cdTAwM2Vub2Rlc19jbnQ7XG4mIzQzO1x0aW5mby1cdTAwM2V0cmFjaW5nX211bHRpLm9ial9pZCA9IGJ0Zl9vYmpfaWQodHJfbGluay1cdTAwM2VsaW5rLnByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXVpZHMgXHUwMDI2XHUwMDI2ICF1Y29va2llcyBcdTAwMjZcdTAwMjYgIXVhZGRycylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAodWNvdW50IFx1MDAzYyB0cl9saW5rLVx1MDAzZW5vZGVzX2NudClcbiYjNDM7XHRcdGVyciA9IC1FTk9TUEM7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dWNvdW50ID0gdHJfbGluay1cdTAwM2Vub2Rlc19jbnQ7XG4mIzQzO1xuJiM0MztcdGhhc19jb29raWVzID0gISF0cl9saW5rLVx1MDAzZWNvb2tpZXM7XG4mIzQzO1x0c2hvd19hZGRycyA9IGthbGxzeW1zX3Nob3dfdmFsdWUoY3VycmVudF9jcmVkKCkpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdWNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX25vZGUgKm1ub2RlID0gXHUwMDI2dHJfbGluay1cdTAwM2Vub2Rlc1tpXTtcbiYjNDM7XHRcdHU2NCBhZGRyLCBjb29raWU7XG4mIzQzO1x0XHR1MzIgaWQ7XG4mIzQzO1xuJiM0MztcdFx0YnBmX3RyYW1wb2xpbmVfdW5wYWNrX2tleShtbm9kZS1cdTAwM2V0cmFtcG9saW5lLVx1MDAzZWtleSwgTlVMTCwgXHUwMDI2aWQpO1xuJiM0MztcbiYjNDM7XHRcdGFkZHIgPSBzaG93X2FkZHJzID8gbW5vZGUtXHUwMDNldHJhbXBvbGluZS1cdTAwM2VpcCA6IDA7XG4mIzQzO1x0XHRjb29raWUgPSBoYXNfY29va2llcyA/IHRyX2xpbmstXHUwMDNlY29va2llc1tpXSA6IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHVpZHMgXHUwMDI2XHUwMDI2IHB1dF91c2VyKGlkLCB1aWRzICYjNDM7IGkpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHRcdGlmICh1YWRkcnMgXHUwMDI2XHUwMDI2IHB1dF91c2VyKGFkZHIsIHVhZGRycyAmIzQzOyBpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRpZiAodWNvb2tpZXMgXHUwMDI2XHUwMDI2IHB1dF91c2VyKGNvb2tpZSwgdWNvb2tpZXMgJiM0MzsgaSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX1BST0NfRlNcbiBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gXHRcdFx0XHRcdCAgc3RydWN0IHNlcV9maWxlICpzZXEpXG5AQCAtMzcyOSw2ICYjNDM7Mzc4Myw3IEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XG4gXHQucmVsZWFzZSA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSxcbiBcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxuJiM0MztcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXG4gXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9saW5rLmMgYi90b29scy9icGYvYnBmdG9vbC9saW5rLmNcbmluZGV4IGJkY2Q3MTdiMDM0OGY4Li41OGRhZGVlOTg0YTA3OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvbGluay5jXG5AQCAtMzc3LDYgJiM0MzszNzcsMzEgQEAgc3RhdGljIF9fdTY0ICp1NjRfdG9fYXJyKF9fdTY0IHZhbClcbiBcdHJldHVybiAoX191NjQgKikgdTY0X3RvX3B0cih2YWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIF9fdTMyICp1NjRfdG9fdTMyX2FycihfX3U2NCB2YWwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKF9fdTMyICopdTY0X3RvX3B0cih2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGtlcm5lbF9zeW0gKmZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKF9fdTY0IGFkZHIsIGJvb2wgaXNfaWJ0X2VuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFkZHIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0LyogTG9hZCBpdCBvbmNlIGZvciBhbGwuICovXG4mIzQzO1x0aWYgKCFkZC5zeW1fY291bnQpXG4mIzQzO1x0XHRrZXJuZWxfc3ltc19sb2FkKFx1MDAyNmRkKTtcbiYjNDM7XHRpZiAoIWRkLnN5bV9jb3VudClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRzeW0gPSBrZXJuZWxfc3ltc19zZWFyY2goXHUwMDI2ZGQsIGFkZHIpO1xuJiM0MztcdGlmICghc3ltIFx1MDAyNlx1MDAyNiBpc19pYnRfZW5hYmxlZCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2U9IDQpXG4mIzQzO1x0XHRzeW0gPSBrZXJuZWxfc3ltc19zZWFyY2goXHUwMDI2ZGQsIGFkZHIgLSA0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN5bTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIHNob3dfdXByb2JlX211bHRpX2pzb24oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8sIGpzb25fd3JpdGVyX3QgKnd0cilcbiB7XG5AQCAtNDAzLDYgJiM0Mzs0MjgsNDMgQEAgc2hvd191cHJvYmVfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxuIFx0anNvbndfZW5kX2FycmF5KGpzb25fd3RyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO3Nob3dfdHJhY2luZ19tdWx0aV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpXG4mIzQzO3tcbiYjNDM7XHRib29sIGlzX2lidF9lbmFibGVkID0gaXNfeDg2X2lidF9lbmFibGVkKCk7XG4mIzQzO1x0X191MzIgaTtcbiYjNDM7XG4mIzQzO1x0c2hvd19saW5rX2F0dGFjaF90eXBlX2pzb24oaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmF0dGFjaF90eXBlLCB3dHIpO1xuJiM0MztcdGpzb253X3VpbnRfZmllbGQod3RyLCBcJiMzNDtmdW5jX2NudFwmIzM0OywgaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KTtcbiYjNDM7XHRqc29ud191aW50X2ZpZWxkKHd0ciwgXCYjMzQ7b2JqX2lkXCYjMzQ7LCBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkub2JqX2lkKTtcbiYjNDM7XHRqc29ud19uYW1lKHd0ciwgXCYjMzQ7ZnVuY3NcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRqc29ud19zdGFydF9hcnJheSh3dHIpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRfX3U2NCBhZGRyID0gdTY0X3RvX2FycihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuYWRkcnMpW2ldO1xuJiM0MztcdFx0c3RydWN0IGtlcm5lbF9zeW0gKnN5bTtcbiYjNDM7XG4mIzQzO1x0XHRzeW0gPSBmaW5kX2tlcm5lbF9zeW1fYnlfYWRkcihhZGRyLCBpc19pYnRfZW5hYmxlZCk7XG4mIzQzO1xuJiM0MztcdFx0anNvbndfc3RhcnRfb2JqZWN0KHd0cik7XG4mIzQzO1x0XHRqc29ud191aW50X2ZpZWxkKHd0ciwgXCYjMzQ7aWRcJiMzNDssIHU2NF90b191MzJfYXJyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5pZHMpW2ldKTtcbiYjNDM7XHRcdGpzb253X3VpbnRfZmllbGQod3RyLCBcJiMzNDthZGRyXCYjMzQ7LCBhZGRyKTtcbiYjNDM7XHRcdGlmIChzeW0pIHtcbiYjNDM7XHRcdFx0anNvbndfc3RyaW5nX2ZpZWxkKHd0ciwgXCYjMzQ7ZnVuY1wmIzM0Oywgc3ltLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0XHRpZiAoc3ltLVx1MDAzZW1vZHVsZVswXSA9PSAmIzM5O1xcMCYjMzk7KSB7XG4mIzQzO1x0XHRcdFx0anNvbndfbmFtZSh3dHIsIFwmIzM0O21vZHVsZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0anNvbndfbnVsbCh3dHIpO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGpzb253X3N0cmluZ19maWVsZCh3dHIsIFwmIzM0O21vZHVsZVwmIzM0Oywgc3ltLVx1MDAzZW1vZHVsZSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGpzb253X3VpbnRfZmllbGQod3RyLCBcJiMzNDtjb29raWVcJiMzNDssIHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcbiYjNDM7XHRcdGpzb253X2VuZF9vYmplY3Qod3RyKTtcbiYjNDM7XHR9XG4mIzQzO1x0anNvbndfZW5kX2FycmF5KHd0cik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBzaG93X3BlcmZfZXZlbnRfa3Byb2JlX2pzb24oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8sIGpzb25fd3JpdGVyX3QgKnd0cilcbiB7XG5AQCAtNTg5LDYgJiM0Mzs2NTEsOSBAQCBzdGF0aWMgaW50IHNob3dfbGlua19jbG9zZV9qc29uKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxuIFx0XHRzaG93X3Vwcm9iZV9tdWx0aV9qc29uKGluZm8sIGpzb25fd3RyKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEk6XG4mIzQzO1x0XHRzaG93X3RyYWNpbmdfbXVsdGlfanNvbihpbmZvLCBqc29uX3d0cik7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxuIFx0XHRzd2l0Y2ggKGluZm8tXHUwMDNlcGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6XG5AQCAtODMzLDYgJiM0Mzs4OTgsMzggQEAgc3RhdGljIHZvaWQgc2hvd191cHJvYmVfbXVsdGlfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBzaG93X3RyYWNpbmdfbXVsdGlfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRib29sIGlzX2lidF9lbmFibGVkID0gaXNfeDg2X2lidF9lbmFibGVkKCk7XG4mIzQzO1x0X191MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDtcXG5cXHRcJiMzNDspO1xuJiM0MztcdHNob3dfbGlua19hdHRhY2hfdHlwZV9wbGFpbihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUpO1xuJiM0MztcdHByaW50ZihcJiMzNDtvYmpfaWQgJXUgIFwmIzM0OywgaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLm9ial9pZCk7XG4mIzQzO1x0cHJpbnRmKFwmIzM0O2NvdW50ICV1ICBcJiMzNDssIGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudCk7XG4mIzQzO1xuJiM0MztcdHByaW50ZihcJiMzNDtcXG5cXHQlLTE2cyAlLTE2cyAlLTE2cyAlc1wmIzM0OyxcbiYjNDM7XHQgICAgICAgXCYjMzQ7YnRmX2lkXCYjMzQ7LCBcJiMzNDthZGRyXCYjMzQ7LCBcJiMzNDtjb29raWVcJiMzNDssIFwmIzM0O2Z1bmMgW21vZHVsZV1cJiMzNDspO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdF9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hZGRycylbaV07XG4mIzQzO1x0XHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xuJiM0MztcbiYjNDM7XHRcdHN5bSA9IGZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKGFkZHIsIGlzX2lidF9lbmFibGVkKTtcbiYjNDM7XG4mIzQzO1x0XHRwcmludGYoXCYjMzQ7XFxuXFx0JS0xNnUgJTAxNmxseCAlLTE2bGx4XCYjMzQ7LFxuJiM0MztcdFx0ICAgICAgIHU2NF90b191MzJfYXJyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5pZHMpW2ldLFxuJiM0MztcdFx0ICAgICAgIGFkZHIsIHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcbiYjNDM7XHRcdGlmIChzeW0pIHtcbiYjNDM7XHRcdFx0cHJpbnRmKFwmIzM0OyAlc1wmIzM0Oywgc3ltLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0XHRpZiAoc3ltLVx1MDAzZW1vZHVsZVswXSAhPSAmIzM5O1xcMCYjMzk7KVxuJiM0MztcdFx0XHRcdHByaW50ZihcJiMzNDsgWyVzXVwmIzM0Oywgc3ltLVx1MDAzZW1vZHVsZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNob3dfcGVyZl9ldmVudF9rcHJvYmVfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4ge1xuIFx0Y29uc3QgY2hhciAqYnVmO1xuQEAgLTk4OSw2ICYjNDM7MTA4Niw5IEBAIHN0YXRpYyBpbnQgc2hvd19saW5rX2Nsb3NlX3BsYWluKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxuIFx0XHRzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihpbmZvKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEk6XG4mIzQzO1x0XHRzaG93X3RyYWNpbmdfbXVsdGlfcGxhaW4oaW5mbyk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxuIFx0XHRzd2l0Y2ggKGluZm8tXHUwMDNlcGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6XG5AQCAtMTAyOSw2ICYjNDM7MTEyOSw3IEBAIHN0YXRpYyBpbnQgc2hvd19saW5rX2Nsb3NlX3BsYWluKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gc3RhdGljIGludCBkb19zaG93X2xpbmsoaW50IGZkKVxuIHtcbiBcdF9fdTY0ICpyZWZfY3RyX29mZnNldHMgPSBOVUxMLCAqb2Zmc2V0cyA9IE5VTEwsICpjb29raWVzID0gTlVMTDtcbiYjNDM7XHRfX3UzMiAqaWRzID0gTlVMTDtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XG4gXHRfX3UzMiBsZW4gPSBzaXplb2YoaW5mbyk7XG4gXHRjaGFyIHBhdGhfYnVmW1BBVEhfTUFYXTtcbkBAIC0xMTE0LDYgJiM0MzsxMjE1LDM5IEBAIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZClcbiBcdFx0XHRnb3RvIGFnYWluO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0aWYgKGluZm8udHlwZSA9PSBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFpbmZvLnRyYWNpbmdfbXVsdGkuaWRzKSB7XG4mIzQzO1x0XHRjb3VudCA9IGluZm8udHJhY2luZ19tdWx0aS5jb3VudDtcbiYjNDM7XHRcdGlmIChjb3VudCkge1xuJiM0MztcdFx0XHRpZHMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3UzMikpO1xuJiM0MztcdFx0XHRpZiAoIWlkcykge1xuJiM0MztcdFx0XHRcdHBfZXJyKFwmIzM0O21lbSBhbGxvYyBmYWlsZWRcJiMzNDspO1xuJiM0MztcdFx0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xuJiM0MztcbiYjNDM7XHRcdFx0YWRkcnMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3U2NCkpO1xuJiM0MztcdFx0XHRpZiAoIWFkZHJzKSB7XG4mIzQzO1x0XHRcdFx0cF9lcnIoXCYjMzQ7bWVtIGFsbG9jIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0ZnJlZShpZHMpO1xuJiM0MztcdFx0XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGNvb2tpZXMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3U2NCkpO1xuJiM0MztcdFx0XHRpZiAoIWNvb2tpZXMpIHtcbiYjNDM7XHRcdFx0XHRwX2VycihcJiMzNDttZW0gYWxsb2MgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRmcmVlKGFkZHJzKTtcbiYjNDM7XHRcdFx0XHRmcmVlKGlkcyk7XG4mIzQzO1x0XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGluZm8udHJhY2luZ19tdWx0aS5jb29raWVzID0gcHRyX3RvX3U2NChjb29raWVzKTtcbiYjNDM7XHRcdFx0Z290byBhZ2FpbjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXHRpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfUEVSRl9FVkVOVCkge1xuIFx0XHRzd2l0Y2ggKGluZm8ucGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfVFJBQ0VQT0lOVDpcbkBAIC0xMTUzLDYgJiM0MzsxMjg3LDcgQEAgc3RhdGljIGludCBkb19zaG93X2xpbmsoaW50IGZkKVxuIFx0ZnJlZShjb29raWVzKTtcbiBcdGZyZWUob2Zmc2V0cyk7XG4gXHRmcmVlKGFkZHJzKTtcbiYjNDM7XHRmcmVlKGlkcyk7XG4gXHRjbG9zZShmZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uODA0MjNjY2M2YjU3YzcgMTAwNjQ0XG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTY4MzksNiAmIzQzOzY4MzksMTUgQEAgc3RydWN0IGJwZl9saW5rX2luZm8ge1xuIFx0XHRcdF9fdTMyIGZsYWdzO1xuIFx0XHRcdF9fdTMyIHBpZDtcbiBcdFx0fSB1cHJvYmVfbXVsdGk7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRfX3UzMiBhdHRhY2hfdHlwZTtcbiYjNDM7XHRcdFx0X191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi9cbiYjNDM7XHRcdFx0X191MzIgb2JqX2lkO1xuJiM0MztcdFx0XHRfX3UzMiA6MzI7XG4mIzQzO1x0XHRcdF9fYWxpZ25lZF91NjQgaWRzO1xuJiM0MztcdFx0XHRfX2FsaWduZWRfdTY0IGFkZHJzO1xuJiM0MztcdFx0XHRfX2FsaWduZWRfdTY0IGNvb2tpZXM7XG4mIzQzO1x0XHR9IHRyYWNpbmdfbXVsdGk7XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0X191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovXG4gXHRcdFx0X191MzIgOjMyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG5pbmRleCBmNTg5ZWVmYmY5ZmJkNS4uOTY5ZjA0ZWU5YWM2YWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3RyYWNlX2hlbHBlcnMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3Rlc3RfZmlsbF9saW5rX2luZm8uc2tlbC5oXCYjMzQ7XG5AQCAtMjQsNiAmIzQzOzI1LDIyIEBAIHN0YXRpYyBfX3U2NCBrbXVsdGlfY29va2llc1tdID0geyAzLCAxLCAyIH07XG4gI2RlZmluZSBLUFJPQkVfRlVOQyBcJiMzNDticGZfZmVudHJ5X3Rlc3QxXCYjMzQ7XG4gc3RhdGljIF9fdTY0IGtwcm9iZV9hZGRyO1xuIFxuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRtdWx0aV9zeW1zW10gPSB7XG4mIzQzO1x0XCYjMzQ7YnBmX2ZlbnRyeV90ZXN0MlwmIzM0OyxcbiYjNDM7XHRcJiMzNDticGZfZmVudHJ5X3Rlc3QxXCYjMzQ7LFxuJiM0MztcdFwmIzM0O2JwZl9mZW50cnlfdGVzdDNcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgX191NjQgdG11bHRpX2Nvb2tpZXNbXSA9IHsgMzAsIDEwLCAyMCB9O1xuJiM0MzsjZGVmaW5lIFRSQUNJTkdfTVVMVElfQ05UIEFSUkFZX1NJWkUodG11bHRpX3N5bXMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdG11bHRpX3RhcmdldCB7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRfX3U2NCBhZGRyO1xuJiM0MztcdF9fdTY0IGNvb2tpZTtcbiYjNDM7XHRfX3UzMiBpZDtcbiYjNDM7fTtcbiYjNDM7XG4gI2RlZmluZSBVUFJPQkVfRklMRSBcJiMzNDsvcHJvYy9zZWxmL2V4ZVwmIzM0O1xuIHN0YXRpYyBzc2l6ZV90IHVwcm9iZV9vZmZzZXQ7XG4gLyogdXByb2JlIGF0dGFjaCBwb2ludCAqL1xuQEAgLTM5Niw2ICYjNDM7NDEzLDIyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2twcm9iZV9tdWx0aV9maWxsX2xpbmtfaW5mbyhzdHJ1Y3QgdGVzdF9maWxsX2xpbmtfaW5mbyAqc2tlbCxcbiBcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0bXVsdGlfdGFyZ2V0X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRhID0gYTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGIgPSBiO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHRhLVx1MDAzZWlkIFx1MDAzZSB0Yi1cdTAwM2VpZCkgLSAodGEtXHUwMDNlaWQgXHUwMDNjIHRiLVx1MDAzZWlkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzZXR1cF90bXVsdGlfdGFyZ2V0cyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4mIzQzO1x0XHRcdFx0c3RydWN0IHRtdWx0aV90YXJnZXQgKnRhcmdldHMsXG4mIzQzO1x0XHRcdFx0X191MzIgKm9ial9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ19pbmZvIHByb2dfaW5mbztcbiYjNDM7XHRfX3UzMiBsZW4gPSBzaXplb2YocHJvZ19pbmZvKTtcbiYjNDM7XHRzdHJ1Y3QgYnRmICpidGY7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XHRfX3MzMiBpZDtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCYjMzQ7YnRmX19sb2FkX3ZtbGludXhfYnRmXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZCA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCB0bXVsdGlfc3ltc1tpXSwgQlRGX0tJTkRfRlVOQyk7XG4mIzQzO1x0XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCYjMzQ7YnRmX19maW5kX2J5X25hbWVfa2luZFwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1xuJiM0MztcdFx0dGFyZ2V0c1tpXS5uYW1lID0gdG11bHRpX3N5bXNbaV07XG4mIzQzO1x0XHR0YXJnZXRzW2ldLmFkZHIgPSBrc3ltX2dldF9hZGRyKHRtdWx0aV9zeW1zW2ldKTtcbiYjNDM7XHRcdHRhcmdldHNbaV0uY29va2llID0gdG11bHRpX2Nvb2tpZXNbaV07XG4mIzQzO1x0XHR0YXJnZXRzW2ldLmlkID0gaWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2cHJvZ19pbmZvLCAwLCBsZW4pO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2cHJvZ19pbmZvLCBcdTAwMjZsZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfZ2V0X2luZm9fYnlfZmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HVChwcm9nX2luZm8uYXR0YWNoX2J0Zl9vYmpfaWQsIDAsIFwmIzM0O2F0dGFjaF9idGZfb2JqX2lkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4mIzQzO1x0Km9ial9pZCA9IHByb2dfaW5mby5hdHRhY2hfYnRmX29ial9pZDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUga2VybmVsIHRyYWNpbmcgbXVsdGkgYXR0YWNoIHNvcnRzIGlkcy4gV2Ugc29ydCBhcyB3ZWxsLFxuJiM0MztcdCAqIHNvIHdlIGNhbiBlYXNpbHkgY29tcGFyZSBpZHMgYW5kIGNvb2tpZXMgbGF0ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXNvcnQodGFyZ2V0cywgVFJBQ0lOR19NVUxUSV9DTlQsIHNpemVvZih0YXJnZXRzWzBdKSwgdG11bHRpX3RhcmdldF9jbXApO1xuJiM0MztcdGJ0Zl9fZnJlZShidGYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyb3I6XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO1x0cmV0dXJuIC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiYjNDM7XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRhcmdldHMsXG4mIzQzO1x0XHRcdFx0XHQgIF9fdTMyIG9ial9pZCwgYm9vbCBoYXNfY29va2llcylcbiYjNDM7e1xuJiM0MztcdGVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlID0gYnBmX3Byb2dyYW1fX2V4cGVjdGVkX2F0dGFjaF90eXBlKHByb2cpO1xuJiM0MztcdF9fdTY0IGFkZHJzW1RSQUNJTkdfTVVMVElfQ05UXSwgY29va2llc1tUUkFDSU5HX01VTFRJX0NOVF07XG4mIzQzO1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xuJiM0MztcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRpbnQgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEoaW5mby50eXBlLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksIFwmIzM0O2luZm8udHlwZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIGF0dGFjaF90eXBlLCBcJiMzNDtpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGVcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQsIFRSQUNJTkdfTVVMVElfQ05ULCBcJiMzNDtpbmZvLnRyYWNpbmdfbXVsdGkuY291bnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7XG4mIzQzO1x0bWVtc2V0KGNvb2tpZXMsIDAsIHNpemVvZihjb29raWVzKSk7XG4mIzQzO1x0bWVtc2V0KGFkZHJzLCAwLCBzaXplb2YoYWRkcnMpKTtcbiYjNDM7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuY29va2llcyA9IGhhc19jb29raWVzID8gcHRyX3RvX3U2NChjb29raWVzKSA6IDA7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZsZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShpbmZvLnR5cGUsIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSwgXCYjMzQ7aW5mby50eXBlXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSwgYXR0YWNoX3R5cGUsIFwmIzM0O2luZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZVwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5jb3VudCwgVFJBQ0lOR19NVUxUSV9DTlQsIFwmIzM0O2luZm8udHJhY2luZ19tdWx0aS5jb3VudFwmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5vYmpfaWQsIG9ial9pZCwgXCYjMzQ7dHJhY2luZ19tdWx0aS50YXJnZXRfb2JqX2lkc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXCYjMzQ7dHJhY2luZ19tdWx0aS50YXJnZXRfYnRmX2lkc1wmIzM0Oyk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoY29va2llc1tpXSwgaGFzX2Nvb2tpZXMgPyB0YXJnZXRzW2ldLmNvb2tpZSA6IDAsIFwmIzM0O3RyYWNpbmdfbXVsdGkuY29va2llc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRhcmdldHNbaV0uYWRkcikge1xuJiM0MztcdFx0XHRzdHJ1Y3Qga3N5bSAqa3N5bTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghQVNTRVJUX05FUShhZGRyc1tpXSwgMCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5hZGRyc1wmIzM0OykpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRrc3ltID0ga3N5bV9zZWFyY2goYWRkcnNbaV0pO1xuJiM0MztcdFx0XHRpZiAoIUFTU0VSVF9PS19QVFIoa3N5bSwgXCYjMzQ7a3N5bV9zZWFyY2hcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0QVNTRVJUX1NUUkVRKGtzeW0tXHUwMDNlbmFtZSwgdGFyZ2V0c1tpXS5uYW1lLCBcJiMzNDt0cmFjaW5nX211bHRpLmFkZHJfbmFtZVwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRBU1NFUlRfRVEoYWRkcnNbaV0sIDAsIFwmIzM0O3RyYWNpbmdfbXVsdGkuYWRkcnNcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZlcmlmeV90cmFjaW5nX211bHRpX2ludmFsaWRfdXNlcl9idWZmZXIoaW50IGZkLCBjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIGlkc1tUUkFDSU5HX01VTFRJX0NOVF0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xuJiM0MztcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRpbnQgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHQvKiBXcm9uZyBpbmZvIHNldHVwIChpZHMgIT0gTlVMTCBhbmQgY250ID09IDApIC1cdTAwM2UgRUlOVkFMICovXG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcJiMzNDt0cmFjaW5nX211bHRpLmludmFsaWRfY291bnRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBTbWFsbGVyIHRoYW4gYWN0dWFsbCBjb3VudCBwcm92aWRlZCAtXHUwMDNlIEVOT1NQQyAqL1xuJiM0MztcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xuJiM0MztcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UIC0gMTtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRU5PU1BDLCBcJiMzNDt0cmFjaW5nX211bHRpLnNtYWxsX2NvdW50XCYjMzQ7KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUUkFDSU5HX01VTFRJX0NOVCAtIDE7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5wYXJ0aWFsX2lkc1wmIzM0Oyk7XG4mIzQzO1x0LyogY2hlY2sgdGhhdCB0aGUgbGFzdCBlbnRyeSBpcyBub3QgcG9wdWxhdGVkICovXG4mIzQzO1x0QVNTRVJUX0VRKGlkc1tpXSwgMCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5wYXJ0aWFsX2lkc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEJpZ2dlciB0aGFuIGFjdHVhbGwgY291bnQgcHJvdmlkZWQgLVx1MDAzZSBPSyAqL1xuJiM0MztcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xuJiM0MztcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UICYjNDM7IDE7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4mIzQzO1x0QVNTRVJUX09LKGVyciwgXCYjMzQ7dHJhY2luZ19tdWx0aS5iaWdfY291bnRcJiMzNDspO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdEFTU0VSVF9FUShpZHNbaV0sIHRhcmdldHNbaV0uaWQsIFwmIzM0O3RyYWNpbmdfbXVsdGkuaWRzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogSW52YWxpZCBpZHMgcG9pbnRlciAtXHUwMDNlIEVGQVVMVCAqL1xuJiM0MztcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuJiM0MztcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSAweDE7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgLUVGQVVMVCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5iYWRfYnRmX2lkc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEludmFsaWQgY29va2llcyBwb2ludGVyIC1cdTAwM2UgRUZBVUxUICovXG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSAweDE7XG4mIzQzO1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFx1MDAyNmluZm8sIFx1MDAyNmxlbik7XG4mIzQzO1x0QVNTRVJUX0VRKGVyciwgLUVGQVVMVCwgXCYjMzQ7dHJhY2luZ19tdWx0aS5iYWRfY29va2llc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdC8qIEludmFsaWQgYWRkcnMgcG9pbnRlciAtXHUwMDNlIEVGQVVMVCAqL1xuJiM0MztcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuJiM0MztcdGluZm8udHJhY2luZ19tdWx0aS5hZGRycyA9IDB4MTtcbiYjNDM7XHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcbiYjNDM7XHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRUZBVUxULCBcJiMzNDt0cmFjaW5nX211bHRpLmJhZF9jb29raWVzXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHN0cnVjdCB0ZXN0X2ZpbGxfbGlua19pbmZvICpza2VsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgYm9vbCBoYXNfY29va2llcywgYm9vbCBpbnZhbGlkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7XG4mIzQzO1x0c3RydWN0IHRtdWx0aV90YXJnZXQgdGFyZ2V0c1tUUkFDSU5HX01VTFRJX0NOVF07XG4mIzQzO1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSwgb2JqX2lkO1xuJiM0MztcdF9fdTY0IGNvb2tpZXNbVFJBQ0lOR19NVUxUSV9DTlRdO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiYjNDM7XHRpbnQgbGlua19mZCwgZXJyLCBpO1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfX3g4Nl82NF9fXG4mIzQzO1x0dGVzdF9fc2tpcCgpO1xuJiM0MztcdHJldHVybjtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdGlmIChzZXR1cF90bXVsdGlfdGFyZ2V0cyhza2VsLVx1MDAzZXByb2dzLnRtdWx0aV9ydW4sIHRhcmdldHMsIFx1MDAyNm9ial9pZCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWRzW2ldID0gdGFyZ2V0c1tpXS5pZDtcbiYjNDM7XHRcdGNvb2tpZXNbaV0gPSB0YXJnZXRzW2ldLmNvb2tpZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9wdHMuaWRzID0gaWRzO1xuJiM0MztcdG9wdHMuY250ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4mIzQzO1x0aWYgKGhhc19jb29raWVzKVxuJiM0MztcdFx0b3B0cy5jb29raWVzID0gY29va2llcztcbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVx1MDAzZXByb2dzLnRtdWx0aV9ydW4sIE5VTEwsIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcJiMzNDticGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGlcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsaW5rX2ZkID0gYnBmX2xpbmtfX2ZkKGxpbmspO1xuJiM0MztcdGlmIChpbnZhbGlkKSB7XG4mIzQzO1x0XHR2ZXJpZnlfdHJhY2luZ19tdWx0aV9pbnZhbGlkX3VzZXJfYnVmZmVyKGxpbmtfZmQsIHRhcmdldHMpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlcnIgPSB2ZXJpZnlfdHJhY2luZ19tdWx0aV9saW5rX2luZm8obGlua19mZCwgc2tlbC1cdTAwM2Vwcm9ncy50bXVsdGlfcnVuLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHRhcmdldHMsIG9ial9pZCwgaGFzX2Nvb2tpZXMpO1xuJiM0MztcdFx0QVNTRVJUX09LKGVyciwgXCYjMzQ7dmVyaWZ5X3RyYWNpbmdfbXVsdGlfbGlua19pbmZvXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgU0VDKG5hbWUpIF9fYXR0cmlidXRlX18oKHNlY3Rpb24obmFtZSksIHVzZWQpKVxuIFxuIHN0YXRpYyBzaG9ydCB1cHJvYmVfbGlua19pbmZvX3NlbWFfMSBTRUMoXCYjMzQ7LnByb2Jlc1wmIzM0Oyk7XG5AQCAtNjQwLDYgJiM0Mzs4NzUsMTMgQEAgdm9pZCB0ZXN0X2ZpbGxfbGlua19pbmZvKHZvaWQpXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtrcHJvYmVfbXVsdGlfaW52YWxpZF91YnVmZlwmIzM0OykpXG4gXHRcdHRlc3Rfa3Byb2JlX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIHRydWUsIHRydWUsIHRydWUpO1xuIFxuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3RyYWNpbmdfbXVsdGlfbGlua19pbmZvXCYjMzQ7KSkge1xuJiM0MztcdFx0dGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIGZhbHNlLCBmYWxzZSk7XG4mIzQzO1x0XHR0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgZmFsc2UpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt0cmFjaW5nX211bHRpX2ludmFsaWRfdWJ1ZmZcJiMzNDspKVxuJiM0MztcdFx0dGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIHRydWUsIHRydWUpO1xuJiM0MztcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3Vwcm9iZV9tdWx0aV9saW5rX2luZm9cJiMzNDspKVxuIFx0XHR0ZXN0X3Vwcm9iZV9tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCBmYWxzZSwgZmFsc2UpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dXJldHByb2JlX211bHRpX2xpbmtfaW5mb1wmIzM0OykpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZpbGxfbGlua19pbmZvLmNcbmluZGV4IDEzN2JkNjI5MjE2M2E1Li5jODUwODE1MzhlOTNiZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZpbGxfbGlua19pbmZvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZpbGxfbGlua19pbmZvLmNcbkBAIC01OCw0ICYjNDM7NTgsMTAgQEAgaW50IEJQRl9QUk9HKHVtdWx0aV9ydW4pXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtmZW50cnkubXVsdGlcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0bXVsdGlfcnVuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfRVZFTlRTJiMzNDssCiAgICAmIzM0O0ZUUkFDRSYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgZmlsbF9saW5rX2luZm9gIHN1cHBvcnQgZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgIGxpbmtzLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdHJhY2luZyBtdWx0aSBsaW5rcyB2aWEgdGhlIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCBjb21tYW5kIG9mIHRoZSBgYnBmYCBzeXNjYWxsLiBUaGUgbmV3IGZ1bmN0aW9uIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGNvcGllcyBkYXRhIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzM2VmNzhjNzBmMDgzNGVkOWUwNDVmNWFlZWQ1NDIyMzUyMGJmNTJhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBKdW4gMjEgMjE6MDM6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKaW5kZXggODliMzZkZTVmZGJiNmQuLjgwNDIzY2NjNmI1N2M3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCkBAIC02ODM5LDYgJiM0Mzs2ODM5LDE1IEBAIHN0cnVjdCBicGZfbGlua19pbmZvIHsKIAkJCV9fdTMyIGZsYWdzOwogCQkJX191MzIgcGlkOwogCQl9IHVwcm9iZV9tdWx0aTsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJX191MzIgYXR0YWNoX3R5cGU7CiYjNDM7CQkJX191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi8KJiM0MzsJCQlfX3UzMiBvYmpfaWQ7CiYjNDM7CQkJX191MzIgOjMyOwomIzQzOwkJCV9fYWxpZ25lZF91NjQgaWRzOwomIzQzOwkJCV9fYWxpZ25lZF91NjQgYWRkcnM7CiYjNDM7CQkJX19hbGlnbmVkX3U2NCBjb29raWVzOwomIzQzOwkJfSB0cmFjaW5nX211bHRpOwogCQlzdHJ1Y3QgewogCQkJX191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovCiAJCQlfX3UzMiA6MzI7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKaW5kZXggODJmOGZlZWE2OTMxMWEuLmZkYWI0ZWM1YWQ0ZjQ1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jCkBAIC0zNjk5LDYgJiM0MzszNjk5LDYwIEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiAJa3ZmcmVlKHRyX2xpbmspOwogfQogCiYjNDM7c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluaywKJiM0MzsJCQkJCQkgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwl1NjQgX191c2VyICp1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihpbmZvLSZndDt0cmFjaW5nX211bHRpLmNvb2tpZXMpOwomIzQzOwl1NjQgX191c2VyICp1YWRkcnMgPSB1NjRfdG9fdXNlcl9wdHIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5hZGRycyk7CiYjNDM7CXUzMiBfX3VzZXIgKnVpZHMgPSB1NjRfdG9fdXNlcl9wdHIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5pZHMpOwomIzQzOwlzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluazsKJiM0MzsJdTMyIHVjb3VudCA9IGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuY291bnQ7CiYjNDM7CWJvb2wgaGFzX2Nvb2tpZXMsIHNob3dfYWRkcnM7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoKHVpZHMgfHwgdWNvb2tpZXMgfHwgdWFkZHJzKSAmYW1wOyZhbXA7ICF1Y291bnQpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJdHJfbGluayA9IGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3RyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUgPSB0cl9saW5rLSZndDtsaW5rLmF0dGFjaF90eXBlOwomIzQzOwlpbmZvLSZndDt0cmFjaW5nX211bHRpLmNvdW50ID0gdHJfbGluay0mZ3Q7bm9kZXNfY250OwomIzQzOwlpbmZvLSZndDt0cmFjaW5nX211bHRpLm9ial9pZCA9IGJ0Zl9vYmpfaWQodHJfbGluay0mZ3Q7bGluay5wcm9nLSZndDthdXgtJmd0O2F0dGFjaF9idGYpOwomIzQzOwomIzQzOwlpZiAoIXVpZHMgJmFtcDsmYW1wOyAhdWNvb2tpZXMgJmFtcDsmYW1wOyAhdWFkZHJzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICh1Y291bnQgJmx0OyB0cl9saW5rLSZndDtub2Rlc19jbnQpCiYjNDM7CQllcnIgPSAtRU5PU1BDOwomIzQzOwllbHNlCiYjNDM7CQl1Y291bnQgPSB0cl9saW5rLSZndDtub2Rlc19jbnQ7CiYjNDM7CiYjNDM7CWhhc19jb29raWVzID0gISF0cl9saW5rLSZndDtjb29raWVzOwomIzQzOwlzaG93X2FkZHJzID0ga2FsbHN5bXNfc2hvd192YWx1ZShjdXJyZW50X2NyZWQoKSk7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdWNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGJwZl90cmFjaW5nX211bHRpX25vZGUgKm1ub2RlID0gJmFtcDt0cl9saW5rLSZndDtub2Rlc1tpXTsKJiM0MzsJCXU2NCBhZGRyLCBjb29raWU7CiYjNDM7CQl1MzIgaWQ7CiYjNDM7CiYjNDM7CQlicGZfdHJhbXBvbGluZV91bnBhY2tfa2V5KG1ub2RlLSZndDt0cmFtcG9saW5lLSZndDtrZXksIE5VTEwsICZhbXA7aWQpOwomIzQzOwomIzQzOwkJYWRkciA9IHNob3dfYWRkcnMgPyBtbm9kZS0mZ3Q7dHJhbXBvbGluZS0mZ3Q7aXAgOiAwOwomIzQzOwkJY29va2llID0gaGFzX2Nvb2tpZXMgPyB0cl9saW5rLSZndDtjb29raWVzW2ldIDogMDsKJiM0MzsKJiM0MzsJCWlmICh1aWRzICZhbXA7JmFtcDsgcHV0X3VzZXIoaWQsIHVpZHMgJiM0MzsgaSkpCiYjNDM7CQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlpZiAodWFkZHJzICZhbXA7JmFtcDsgcHV0X3VzZXIoYWRkciwgdWFkZHJzICYjNDM7IGkpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwkJaWYgKHVjb29raWVzICZhbXA7JmFtcDsgcHV0X3VzZXIoY29va2llLCB1Y29va2llcyAmIzQzOyBpKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssCiAJCQkJCSAgc3RydWN0IHNlcV9maWxlICpzZXEpCkBAIC0zNzI5LDYgJiM0MzszNzgzLDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLAogc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0gewogCS5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLAogCS5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLAomIzQzOwkuZmlsbF9saW5rX2luZm8gPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJLnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuYwppbmRleCBiZGNkNzE3YjAzNDhmOC4uNThkYWRlZTk4NGEwNzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9saW5rLmMKQEAgLTM3Nyw2ICYjNDM7Mzc3LDMxIEBAIHN0YXRpYyBfX3U2NCAqdTY0X3RvX2FycihfX3U2NCB2YWwpCiAJcmV0dXJuIChfX3U2NCAqKSB1NjRfdG9fcHRyKHZhbCk7CiB9CiAKJiM0MztzdGF0aWMgX191MzIgKnU2NF90b191MzJfYXJyKF9fdTY0IHZhbCkKJiM0Mzt7CiYjNDM7CXJldHVybiAoX191MzIgKil1NjRfdG9fcHRyKHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga2VybmVsX3N5bSAqZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoX191NjQgYWRkciwgYm9vbCBpc19pYnRfZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZXJuZWxfc3ltICpzeW07CiYjNDM7CiYjNDM7CWlmICghYWRkcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkvKiBMb2FkIGl0IG9uY2UgZm9yIGFsbC4gKi8KJiM0MzsJaWYgKCFkZC5zeW1fY291bnQpCiYjNDM7CQlrZXJuZWxfc3ltc19sb2FkKCZhbXA7ZGQpOwomIzQzOwlpZiAoIWRkLnN5bV9jb3VudCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlzeW0gPSBrZXJuZWxfc3ltc19zZWFyY2goJmFtcDtkZCwgYWRkcik7CiYjNDM7CWlmICghc3ltICZhbXA7JmFtcDsgaXNfaWJ0X2VuYWJsZWQgJmFtcDsmYW1wOyBhZGRyICZndDs9IDQpCiYjNDM7CQlzeW0gPSBrZXJuZWxfc3ltc19zZWFyY2goJmFtcDtkZCwgYWRkciAtIDQpOwomIzQzOwomIzQzOwlyZXR1cm4gc3ltOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBzaG93X3Vwcm9iZV9tdWx0aV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpCiB7CkBAIC00MDMsNiAmIzQzOzQyOCw0MyBAQCBzaG93X3Vwcm9iZV9tdWx0aV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpCiAJanNvbndfZW5kX2FycmF5KGpzb25fd3RyKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkCiYjNDM7c2hvd190cmFjaW5nX211bHRpX2pzb24oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8sIGpzb25fd3JpdGVyX3QgKnd0cikKJiM0Mzt7CiYjNDM7CWJvb2wgaXNfaWJ0X2VuYWJsZWQgPSBpc194ODZfaWJ0X2VuYWJsZWQoKTsKJiM0MzsJX191MzIgaTsKJiM0MzsKJiM0MzsJc2hvd19saW5rX2F0dGFjaF90eXBlX2pzb24oaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSwgd3RyKTsKJiM0MzsJanNvbndfdWludF9maWVsZCh3dHIsICYjMzQ7ZnVuY19jbnQmIzM0OywgaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5jb3VudCk7CiYjNDM7CWpzb253X3VpbnRfZmllbGQod3RyLCAmIzM0O29ial9pZCYjMzQ7LCBpbmZvLSZndDt0cmFjaW5nX211bHRpLm9ial9pZCk7CiYjNDM7CWpzb253X25hbWUod3RyLCAmIzM0O2Z1bmNzJiMzNDspOwomIzQzOwomIzQzOwlqc29ud19zdGFydF9hcnJheSh3dHIpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCV9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuYWRkcnMpW2ldOwomIzQzOwkJc3RydWN0IGtlcm5lbF9zeW0gKnN5bTsKJiM0MzsKJiM0MzsJCXN5bSA9IGZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKGFkZHIsIGlzX2lidF9lbmFibGVkKTsKJiM0MzsKJiM0MzsJCWpzb253X3N0YXJ0X29iamVjdCh3dHIpOwomIzQzOwkJanNvbndfdWludF9maWVsZCh3dHIsICYjMzQ7aWQmIzM0OywgdTY0X3RvX3UzMl9hcnIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5pZHMpW2ldKTsKJiM0MzsJCWpzb253X3VpbnRfZmllbGQod3RyLCAmIzM0O2FkZHImIzM0OywgYWRkcik7CiYjNDM7CQlpZiAoc3ltKSB7CiYjNDM7CQkJanNvbndfc3RyaW5nX2ZpZWxkKHd0ciwgJiMzNDtmdW5jJiMzNDssIHN5bS0mZ3Q7bmFtZSk7CiYjNDM7CQkJaWYgKHN5bS0mZ3Q7bW9kdWxlWzBdID09ICYjMzk7XDAmIzM5OykgewomIzQzOwkJCQlqc29ud19uYW1lKHd0ciwgJiMzNDttb2R1bGUmIzM0Oyk7CiYjNDM7CQkJCWpzb253X251bGwod3RyKTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlqc29ud19zdHJpbmdfZmllbGQod3RyLCAmIzM0O21vZHVsZSYjMzQ7LCBzeW0tJmd0O21vZHVsZSk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJanNvbndfdWludF9maWVsZCh3dHIsICYjMzQ7Y29va2llJiMzNDssIHU2NF90b19hcnIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5jb29raWVzKVtpXSk7CiYjNDM7CQlqc29ud19lbmRfb2JqZWN0KHd0cik7CiYjNDM7CX0KJiM0MzsJanNvbndfZW5kX2FycmF5KHd0cik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIHNob3dfcGVyZl9ldmVudF9rcHJvYmVfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKQogewpAQCAtNTg5LDYgJiM0Mzs2NTEsOSBAQCBzdGF0aWMgaW50IHNob3dfbGlua19jbG9zZV9qc29uKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pCiAJY2FzZSBCUEZfTElOS19UWVBFX1VQUk9CRV9NVUxUSToKIAkJc2hvd191cHJvYmVfbXVsdGlfanNvbihpbmZvLCBqc29uX3d0cik7CiAJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSToKJiM0MzsJCXNob3dfdHJhY2luZ19tdWx0aV9qc29uKGluZm8sIGpzb25fd3RyKTsKJiM0MzsJCWJyZWFrOwogCWNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOgogCQlzd2l0Y2ggKGluZm8tJmd0O3BlcmZfZXZlbnQudHlwZSkgewogCQljYXNlIEJQRl9QRVJGX0VWRU5UX0VWRU5UOgpAQCAtODMzLDYgJiM0Mzs4OTgsMzggQEAgc3RhdGljIHZvaWQgc2hvd191cHJvYmVfbXVsdGlfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgc2hvd190cmFjaW5nX211bHRpX3BsYWluKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJYm9vbCBpc19pYnRfZW5hYmxlZCA9IGlzX3g4Nl9pYnRfZW5hYmxlZCgpOwomIzQzOwlfX3UzMiBpOwomIzQzOwomIzQzOwlpZiAoIWluZm8tJmd0O3RyYWNpbmdfbXVsdGkuY291bnQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXByaW50ZigmIzM0O1xuXHQmIzM0Oyk7CiYjNDM7CXNob3dfbGlua19hdHRhY2hfdHlwZV9wbGFpbihpbmZvLSZndDt0cmFjaW5nX211bHRpLmF0dGFjaF90eXBlKTsKJiM0MzsJcHJpbnRmKCYjMzQ7b2JqX2lkICV1ICAmIzM0OywgaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5vYmpfaWQpOwomIzQzOwlwcmludGYoJiMzNDtjb3VudCAldSAgJiMzNDssIGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuY291bnQpOwomIzQzOwomIzQzOwlwcmludGYoJiMzNDtcblx0JS0xNnMgJS0xNnMgJS0xNnMgJXMmIzM0OywKJiM0MzsJICAgICAgICYjMzQ7YnRmX2lkJiMzNDssICYjMzQ7YWRkciYjMzQ7LCAmIzM0O2Nvb2tpZSYjMzQ7LCAmIzM0O2Z1bmMgW21vZHVsZV0mIzM0Oyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBpbmZvLSZndDt0cmFjaW5nX211bHRpLmNvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJX191NjQgYWRkciA9IHU2NF90b19hcnIoaW5mby0mZ3Q7dHJhY2luZ19tdWx0aS5hZGRycylbaV07CiYjNDM7CQlzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltOwomIzQzOwomIzQzOwkJc3ltID0gZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoYWRkciwgaXNfaWJ0X2VuYWJsZWQpOwomIzQzOwomIzQzOwkJcHJpbnRmKCYjMzQ7XG5cdCUtMTZ1ICUwMTZsbHggJS0xNmxseCYjMzQ7LAomIzQzOwkJICAgICAgIHU2NF90b191MzJfYXJyKGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuaWRzKVtpXSwKJiM0MzsJCSAgICAgICBhZGRyLCB1NjRfdG9fYXJyKGluZm8tJmd0O3RyYWNpbmdfbXVsdGkuY29va2llcylbaV0pOwomIzQzOwkJaWYgKHN5bSkgewomIzQzOwkJCXByaW50ZigmIzM0OyAlcyYjMzQ7LCBzeW0tJmd0O25hbWUpOwomIzQzOwkJCWlmIChzeW0tJmd0O21vZHVsZVswXSAhPSAmIzM5O1wwJiMzOTspCiYjNDM7CQkJCXByaW50ZigmIzM0OyBbJXNdJiMzNDssIHN5bS0mZ3Q7bW9kdWxlKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNob3dfcGVyZl9ldmVudF9rcHJvYmVfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pCiB7CiAJY29uc3QgY2hhciAqYnVmOwpAQCAtOTg5LDYgJiM0MzsxMDg2LDkgQEAgc3RhdGljIGludCBzaG93X2xpbmtfY2xvc2VfcGxhaW4oaW50IGZkLCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbykKIAljYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOgogCQlzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihpbmZvKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJOgomIzQzOwkJc2hvd190cmFjaW5nX211bHRpX3BsYWluKGluZm8pOwomIzQzOwkJYnJlYWs7CiAJY2FzZSBCUEZfTElOS19UWVBFX1BFUkZfRVZFTlQ6CiAJCXN3aXRjaCAoaW5mby0mZ3Q7cGVyZl9ldmVudC50eXBlKSB7CiAJCWNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6CkBAIC0xMDI5LDYgJiM0MzsxMTI5LDcgQEAgc3RhdGljIGludCBzaG93X2xpbmtfY2xvc2VfcGxhaW4oaW50IGZkLCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbykKIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZCkKIHsKIAlfX3U2NCAqcmVmX2N0cl9vZmZzZXRzID0gTlVMTCwgKm9mZnNldHMgPSBOVUxMLCAqY29va2llcyA9IE5VTEw7CiYjNDM7CV9fdTMyICppZHMgPSBOVUxMOwogCXN0cnVjdCBicGZfbGlua19pbmZvIGluZm87CiAJX191MzIgbGVuID0gc2l6ZW9mKGluZm8pOwogCWNoYXIgcGF0aF9idWZbUEFUSF9NQVhdOwpAQCAtMTExNCw2ICYjNDM7MTIxNSwzOSBAQCBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpCiAJCQlnb3RvIGFnYWluOwogCQl9CiAJfQomIzQzOwlpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhaW5mby50cmFjaW5nX211bHRpLmlkcykgewomIzQzOwkJY291bnQgPSBpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQ7CiYjNDM7CQlpZiAoY291bnQpIHsKJiM0MzsJCQlpZHMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3UzMikpOwomIzQzOwkJCWlmICghaWRzKSB7CiYjNDM7CQkJCXBfZXJyKCYjMzQ7bWVtIGFsbG9jIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCQkJY2xvc2UoZmQpOwomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQl9CiYjNDM7CQkJaW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTsKJiM0MzsKJiM0MzsJCQlhZGRycyA9IGNhbGxvYyhjb3VudCwgc2l6ZW9mKF9fdTY0KSk7CiYjNDM7CQkJaWYgKCFhZGRycykgewomIzQzOwkJCQlwX2VycigmIzM0O21lbSBhbGxvYyBmYWlsZWQmIzM0Oyk7CiYjNDM7CQkJCWZyZWUoaWRzKTsKJiM0MzsJCQkJY2xvc2UoZmQpOwomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQl9CiYjNDM7CQkJaW5mby50cmFjaW5nX211bHRpLmFkZHJzID0gcHRyX3RvX3U2NChhZGRycyk7CiYjNDM7CiYjNDM7CQkJY29va2llcyA9IGNhbGxvYyhjb3VudCwgc2l6ZW9mKF9fdTY0KSk7CiYjNDM7CQkJaWYgKCFjb29raWVzKSB7CiYjNDM7CQkJCXBfZXJyKCYjMzQ7bWVtIGFsbG9jIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCQkJZnJlZShhZGRycyk7CiYjNDM7CQkJCWZyZWUoaWRzKTsKJiM0MzsJCQkJY2xvc2UoZmQpOwomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQl9CiYjNDM7CQkJaW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSBwdHJfdG9fdTY0KGNvb2tpZXMpOwomIzQzOwkJCWdvdG8gYWdhaW47CiYjNDM7CQl9CiYjNDM7CX0KIAlpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfUEVSRl9FVkVOVCkgewogCQlzd2l0Y2ggKGluZm8ucGVyZl9ldmVudC50eXBlKSB7CiAJCWNhc2UgQlBGX1BFUkZfRVZFTlRfVFJBQ0VQT0lOVDoKQEAgLTExNTMsNiAmIzQzOzEyODcsNyBAQCBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpCiAJZnJlZShjb29raWVzKTsKIAlmcmVlKG9mZnNldHMpOwogCWZyZWUoYWRkcnMpOwomIzQzOwlmcmVlKGlkcyk7CiAJY2xvc2UoZmQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCmluZGV4IDg5YjM2ZGU1ZmRiYjZkLi44MDQyM2NjYzZiNTdjNyAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaApAQCAtNjgzOSw2ICYjNDM7NjgzOSwxNSBAQCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyB7CiAJCQlfX3UzMiBmbGFnczsKIAkJCV9fdTMyIHBpZDsKIAkJfSB1cHJvYmVfbXVsdGk7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCV9fdTMyIGF0dGFjaF90eXBlOwomIzQzOwkJCV9fdTMyIGNvdW50OyAvKiBpbi9vdXQ6IHRyYWNpbmdfbXVsdGkgdGFyZ2V0IGNvdW50ICovCiYjNDM7CQkJX191MzIgb2JqX2lkOwomIzQzOwkJCV9fdTMyIDozMjsKJiM0MzsJCQlfX2FsaWduZWRfdTY0IGlkczsKJiM0MzsJCQlfX2FsaWduZWRfdTY0IGFkZHJzOwomIzQzOwkJCV9fYWxpZ25lZF91NjQgY29va2llczsKJiM0MzsJCX0gdHJhY2luZ19tdWx0aTsKIAkJc3RydWN0IHsKIAkJCV9fdTMyIHR5cGU7IC8qIGVudW0gYnBmX3BlcmZfZXZlbnRfdHlwZSAqLwogCQkJX191MzIgOjMyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmlsbF9saW5rX2luZm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmMKaW5kZXggZjU4OWVlZmJmOWZiZDUuLjk2OWYwNGVlOWFjNmFhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmMKQEAgLTQsNiAmIzQzOzQsNyBAQAogI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJiMzNDt0cmFjZV9oZWxwZXJzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0ZXN0X2ZpbGxfbGlua19pbmZvLnNrZWwuaCYjMzQ7CkBAIC0yNCw2ICYjNDM7MjUsMjIgQEAgc3RhdGljIF9fdTY0IGttdWx0aV9jb29raWVzW10gPSB7IDMsIDEsIDIgfTsKICNkZWZpbmUgS1BST0JFX0ZVTkMgJiMzNDticGZfZmVudHJ5X3Rlc3QxJiMzNDsKIHN0YXRpYyBfX3U2NCBrcHJvYmVfYWRkcjsKIAomIzQzO3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdG11bHRpX3N5bXNbXSA9IHsKJiM0MzsJJiMzNDticGZfZmVudHJ5X3Rlc3QyJiMzNDssCiYjNDM7CSYjMzQ7YnBmX2ZlbnRyeV90ZXN0MSYjMzQ7LAomIzQzOwkmIzM0O2JwZl9mZW50cnlfdGVzdDMmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBfX3U2NCB0bXVsdGlfY29va2llc1tdID0geyAzMCwgMTAsIDIwIH07CiYjNDM7I2RlZmluZSBUUkFDSU5HX01VTFRJX0NOVCBBUlJBWV9TSVpFKHRtdWx0aV9zeW1zKQomIzQzOwomIzQzO3N0cnVjdCB0bXVsdGlfdGFyZ2V0IHsKJiM0MzsJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJX191NjQgYWRkcjsKJiM0MzsJX191NjQgY29va2llOwomIzQzOwlfX3UzMiBpZDsKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBVUFJPQkVfRklMRSAmIzM0Oy9wcm9jL3NlbGYvZXhlJiMzNDsKIHN0YXRpYyBzc2l6ZV90IHVwcm9iZV9vZmZzZXQ7CiAvKiB1cHJvYmUgYXR0YWNoIHBvaW50ICovCkBAIC0zOTYsNiAmIzQzOzQxMywyMjQgQEAgc3RhdGljIHZvaWQgdGVzdF9rcHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc3RydWN0IHRlc3RfZmlsbF9saW5rX2luZm8gKnNrZWwsCiAJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHRtdWx0aV90YXJnZXRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGEgPSBhOwomIzQzOwljb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGIgPSBiOwomIzQzOwomIzQzOwlyZXR1cm4gKHRhLSZndDtpZCAmZ3Q7IHRiLSZndDtpZCkgLSAodGEtJmd0O2lkICZsdDsgdGItJmd0O2lkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzZXR1cF90bXVsdGlfdGFyZ2V0cyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csCiYjNDM7CQkJCXN0cnVjdCB0bXVsdGlfdGFyZ2V0ICp0YXJnZXRzLAomIzQzOwkJCQlfX3UzMiAqb2JqX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9wcm9nX2luZm8gcHJvZ19pbmZvOwomIzQzOwlfX3UzMiBsZW4gPSBzaXplb2YocHJvZ19pbmZvKTsKJiM0MzsJc3RydWN0IGJ0ZiAqYnRmOwomIzQzOwlpbnQgZXJyLCBpOwomIzQzOwlfX3MzMiBpZDsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihidGYsICYjMzQ7YnRmX19sb2FkX3ZtbGludXhfYnRmJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVFJBQ0lOR19NVUxUSV9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZCA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCB0bXVsdGlfc3ltc1tpXSwgQlRGX0tJTkRfRlVOQyk7CiYjNDM7CQlpZiAoIUFTU0VSVF9HVChpZCwgMCwgJiMzNDtidGZfX2ZpbmRfYnlfbmFtZV9raW5kJiMzNDspKQomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CQl0YXJnZXRzW2ldLm5hbWUgPSB0bXVsdGlfc3ltc1tpXTsKJiM0MzsJCXRhcmdldHNbaV0uYWRkciA9IGtzeW1fZ2V0X2FkZHIodG11bHRpX3N5bXNbaV0pOwomIzQzOwkJdGFyZ2V0c1tpXS5jb29raWUgPSB0bXVsdGlfY29va2llc1tpXTsKJiM0MzsJCXRhcmdldHNbaV0uaWQgPSBpZDsKJiM0MzsJfQomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtwcm9nX2luZm8sIDAsIGxlbik7CiYjNDM7CWVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgJmFtcDtwcm9nX2luZm8sICZhbXA7bGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9wcm9nX2dldF9pbmZvX2J5X2ZkJiMzNDspKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJaWYgKCFBU1NFUlRfR1QocHJvZ19pbmZvLmF0dGFjaF9idGZfb2JqX2lkLCAwLCAmIzM0O2F0dGFjaF9idGZfb2JqX2lkJiMzNDspKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJKm9ial9pZCA9IHByb2dfaW5mby5hdHRhY2hfYnRmX29ial9pZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGtlcm5lbCB0cmFjaW5nIG11bHRpIGF0dGFjaCBzb3J0cyBpZHMuIFdlIHNvcnQgYXMgd2VsbCwKJiM0MzsJICogc28gd2UgY2FuIGVhc2lseSBjb21wYXJlIGlkcyBhbmQgY29va2llcyBsYXRlci4KJiM0MzsJICovCiYjNDM7CXFzb3J0KHRhcmdldHMsIFRSQUNJTkdfTVVMVElfQ05ULCBzaXplb2YodGFyZ2V0c1swXSksIHRtdWx0aV90YXJnZXRfY21wKTsKJiM0MzsJYnRmX19mcmVlKGJ0Zik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycm9yOgomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKJiM0MzsJCQkJCSAgY29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRhcmdldHMsCiYjNDM7CQkJCQkgIF9fdTMyIG9ial9pZCwgYm9vbCBoYXNfY29va2llcykKJiM0Mzt7CiYjNDM7CWVudW0gYnBmX2F0dGFjaF90eXBlIGF0dGFjaF90eXBlID0gYnBmX3Byb2dyYW1fX2V4cGVjdGVkX2F0dGFjaF90eXBlKHByb2cpOwomIzQzOwlfX3U2NCBhZGRyc1tUUkFDSU5HX01VTFRJX0NOVF0sIGNvb2tpZXNbVFJBQ0lOR19NVUxUSV9DTlRdOwomIzQzOwlfX3UzMiBpZHNbVFJBQ0lOR19NVUxUSV9DTlRdOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvOwomIzQzOwlfX3UzMiBsZW4gPSBzaXplb2YoaW5mbyk7CiYjNDM7CWludCBlcnIsIGk7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCAmYW1wO2luZm8sICZhbXA7bGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkJiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9FUShpbmZvLnR5cGUsIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSwgJiMzNDtpbmZvLnR5cGUmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIGF0dGFjaF90eXBlLCAmIzM0O2luZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5jb3VudCwgVFJBQ0lOR19NVUxUSV9DTlQsICYjMzQ7aW5mby50cmFjaW5nX211bHRpLmNvdW50JiMzNDspOwomIzQzOwomIzQzOwltZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7CiYjNDM7CW1lbXNldChjb29raWVzLCAwLCBzaXplb2YoY29va2llcykpOwomIzQzOwltZW1zZXQoYWRkcnMsIDAsIHNpemVvZihhZGRycykpOwomIzQzOwomIzQzOwlpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpOwomIzQzOwlpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSBoYXNfY29va2llcyA/IHB0cl90b191NjQoY29va2llcykgOiAwOwomIzQzOwlpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsICZhbXA7aW5mbywgJmFtcDtsZW4pOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQmIzM0OykpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX0VRKGluZm8udHlwZSwgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJLCAmIzM0O2luZm8udHlwZSYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSwgYXR0YWNoX3R5cGUsICYjMzQ7aW5mby50cmFjaW5nX211bHRpLmF0dGFjaF90eXBlJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoaW5mby50cmFjaW5nX211bHRpLmNvdW50LCBUUkFDSU5HX01VTFRJX0NOVCwgJiMzNDtpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQmIzM0Oyk7CiYjNDM7CUFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkub2JqX2lkLCBvYmpfaWQsICYjMzQ7dHJhY2luZ19tdWx0aS50YXJnZXRfb2JqX2lkcyYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRSQUNJTkdfTVVMVElfQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJQVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgJiMzNDt0cmFjaW5nX211bHRpLnRhcmdldF9idGZfaWRzJiMzNDspOwomIzQzOwkJQVNTRVJUX0VRKGNvb2tpZXNbaV0sIGhhc19jb29raWVzID8gdGFyZ2V0c1tpXS5jb29raWUgOiAwLCAmIzM0O3RyYWNpbmdfbXVsdGkuY29va2llcyYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmICh0YXJnZXRzW2ldLmFkZHIpIHsKJiM0MzsJCQlzdHJ1Y3Qga3N5bSAqa3N5bTsKJiM0MzsKJiM0MzsJCQlpZiAoIUFTU0VSVF9ORVEoYWRkcnNbaV0sIDAsICYjMzQ7dHJhY2luZ19tdWx0aS5hZGRycyYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIC0xOwomIzQzOwkJCWtzeW0gPSBrc3ltX3NlYXJjaChhZGRyc1tpXSk7CiYjNDM7CQkJaWYgKCFBU1NFUlRfT0tfUFRSKGtzeW0sICYjMzQ7a3N5bV9zZWFyY2gmIzM0OykpCiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQlBU1NFUlRfU1RSRVEoa3N5bS0mZ3Q7bmFtZSwgdGFyZ2V0c1tpXS5uYW1lLCAmIzM0O3RyYWNpbmdfbXVsdGkuYWRkcl9uYW1lJiMzNDspOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlBU1NFUlRfRVEoYWRkcnNbaV0sIDAsICYjMzQ7dHJhY2luZ19tdWx0aS5hZGRycyYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmVyaWZ5X3RyYWNpbmdfbXVsdGlfaW52YWxpZF91c2VyX2J1ZmZlcihpbnQgZmQsIGNvbnN0IHN0cnVjdCB0bXVsdGlfdGFyZ2V0ICp0YXJnZXRzKQomIzQzO3sKJiM0MzsJX191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSA9IHt9OwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvOwomIzQzOwlfX3UzMiBsZW4gPSBzaXplb2YoaW5mbyk7CiYjNDM7CWludCBlcnIsIGk7CiYjNDM7CiYjNDM7CS8qIFdyb25nIGluZm8gc2V0dXAgKGlkcyAhPSBOVUxMIGFuZCBjbnQgPT0gMCkgLSZndDsgRUlOVkFMICovCiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7CiYjNDM7CWVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCAmYW1wO2luZm8sICZhbXA7bGVuKTsKJiM0MzsJQVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgJiMzNDt0cmFjaW5nX211bHRpLmludmFsaWRfY291bnQmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFNtYWxsZXIgdGhhbiBhY3R1YWxsIGNvdW50IHByb3ZpZGVkIC0mZ3Q7IEVOT1NQQyAqLwomIzQzOwltZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7CiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UIC0gMTsKJiM0MzsJZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsICZhbXA7aW5mbywgJmFtcDtsZW4pOwomIzQzOwlBU1NFUlRfRVEoZXJyLCAtRU5PU1BDLCAmIzM0O3RyYWNpbmdfbXVsdGkuc21hbGxfY291bnQmIzM0Oyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBUUkFDSU5HX01VTFRJX0NOVCAtIDE7IGkmIzQzOyYjNDM7KQomIzQzOwkJQVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgJiMzNDt0cmFjaW5nX211bHRpLnBhcnRpYWxfaWRzJiMzNDspOwomIzQzOwkvKiBjaGVjayB0aGF0IHRoZSBsYXN0IGVudHJ5IGlzIG5vdCBwb3B1bGF0ZWQgKi8KJiM0MzsJQVNTRVJUX0VRKGlkc1tpXSwgMCwgJiMzNDt0cmFjaW5nX211bHRpLnBhcnRpYWxfaWRzJiMzNDspOwomIzQzOwomIzQzOwkvKiBCaWdnZXIgdGhhbiBhY3R1YWxsIGNvdW50IHByb3ZpZGVkIC0mZ3Q7IE9LICovCiYjNDM7CW1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTsKJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQgJiM0MzsgMTsKJiM0MzsJZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsICZhbXA7aW5mbywgJmFtcDtsZW4pOwomIzQzOwlBU1NFUlRfT0soZXJyLCAmIzM0O3RyYWNpbmdfbXVsdGkuYmlnX2NvdW50JiMzNDspOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVFJBQ0lOR19NVUxUSV9DTlQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJQVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgJiMzNDt0cmFjaW5nX211bHRpLmlkcyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogSW52YWxpZCBpZHMgcG9pbnRlciAtJmd0OyBFRkFVTFQgKi8KJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmlkcyA9IDB4MTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7CiYjNDM7CWVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCAmYW1wO2luZm8sICZhbXA7bGVuKTsKJiM0MzsJQVNTRVJUX0VRKGVyciwgLUVGQVVMVCwgJiMzNDt0cmFjaW5nX211bHRpLmJhZF9idGZfaWRzJiMzNDspOwomIzQzOwomIzQzOwkvKiBJbnZhbGlkIGNvb2tpZXMgcG9pbnRlciAtJmd0OyBFRkFVTFQgKi8KJiM0MzsJbWVtc2V0KCZhbXA7aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKJiM0MzsJaW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSAweDE7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UOwomIzQzOwllcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgJmFtcDtpbmZvLCAmYW1wO2xlbik7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FRkFVTFQsICYjMzQ7dHJhY2luZ19tdWx0aS5iYWRfY29va2llcyYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogSW52YWxpZCBhZGRycyBwb2ludGVyIC0mZ3Q7IEVGQVVMVCAqLwomIzQzOwltZW1zZXQoJmFtcDtpbmZvLCAwLCBzaXplb2YoaW5mbykpOwomIzQzOwlpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSAweDE7CiYjNDM7CWluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UOwomIzQzOwllcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgJmFtcDtpbmZvLCAmYW1wO2xlbik7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FRkFVTFQsICYjMzQ7dHJhY2luZ19tdWx0aS5iYWRfY29va2llcyYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHN0cnVjdCB0ZXN0X2ZpbGxfbGlua19pbmZvICpza2VsLAomIzQzOwkJCQkJICAgICAgYm9vbCBoYXNfY29va2llcywgYm9vbCBpbnZhbGlkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3RyYWNpbmdfbXVsdGlfb3B0cywgb3B0cyk7CiYjNDM7CXN0cnVjdCB0bXVsdGlfdGFyZ2V0IHRhcmdldHNbVFJBQ0lOR19NVUxUSV9DTlRdOwomIzQzOwlfX3UzMiBpZHNbVFJBQ0lOR19NVUxUSV9DTlRdLCBvYmpfaWQ7CiYjNDM7CV9fdTY0IGNvb2tpZXNbVFJBQ0lOR19NVUxUSV9DTlRdOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CWludCBsaW5rX2ZkLCBlcnIsIGk7CiYjNDM7CiYjNDM7I2lmbmRlZiBfX3g4Nl82NF9fCiYjNDM7CXRlc3RfX3NraXAoKTsKJiM0MzsJcmV0dXJuOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlpZiAoc2V0dXBfdG11bHRpX3RhcmdldHMoc2tlbC0mZ3Q7cHJvZ3MudG11bHRpX3J1biwgdGFyZ2V0cywgJmFtcDtvYmpfaWQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVFJBQ0lOR19NVUxUSV9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZHNbaV0gPSB0YXJnZXRzW2ldLmlkOwomIzQzOwkJY29va2llc1tpXSA9IHRhcmdldHNbaV0uY29va2llOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9wdHMuaWRzID0gaWRzOwomIzQzOwlvcHRzLmNudCA9IFRSQUNJTkdfTVVMVElfQ05UOwomIzQzOwlpZiAoaGFzX2Nvb2tpZXMpCiYjNDM7CQlvcHRzLmNvb2tpZXMgPSBjb29raWVzOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpKHNrZWwtJmd0O3Byb2dzLnRtdWx0aV9ydW4sIE5VTEwsICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihsaW5rLCAmIzM0O2JwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aSYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbGlua19mZCA9IGJwZl9saW5rX19mZChsaW5rKTsKJiM0MzsJaWYgKGludmFsaWQpIHsKJiM0MzsJCXZlcmlmeV90cmFjaW5nX211bHRpX2ludmFsaWRfdXNlcl9idWZmZXIobGlua19mZCwgdGFyZ2V0cyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSB2ZXJpZnlfdHJhY2luZ19tdWx0aV9saW5rX2luZm8obGlua19mZCwgc2tlbC0mZ3Q7cHJvZ3MudG11bHRpX3J1biwKJiM0MzsJCQkJCQkgICAgIHRhcmdldHMsIG9ial9pZCwgaGFzX2Nvb2tpZXMpOwomIzQzOwkJQVNTRVJUX09LKGVyciwgJiMzNDt2ZXJpZnlfdHJhY2luZ19tdWx0aV9saW5rX2luZm8mIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7fQomIzQzOwogI2RlZmluZSBTRUMobmFtZSkgX19hdHRyaWJ1dGVfXygoc2VjdGlvbihuYW1lKSwgdXNlZCkpCiAKIHN0YXRpYyBzaG9ydCB1cHJvYmVfbGlua19pbmZvX3NlbWFfMSBTRUMoJiMzNDsucHJvYmVzJiMzNDspOwpAQCAtNjQwLDYgJiM0Mzs4NzUsMTMgQEAgdm9pZCB0ZXN0X2ZpbGxfbGlua19pbmZvKHZvaWQpCiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtrcHJvYmVfbXVsdGlfaW52YWxpZF91YnVmZiYjMzQ7KSkKIAkJdGVzdF9rcHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt0cmFjaW5nX211bHRpX2xpbmtfaW5mbyYjMzQ7KSkgewomIzQzOwkJdGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIGZhbHNlLCBmYWxzZSk7CiYjNDM7CQl0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgZmFsc2UpOwomIzQzOwl9CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dHJhY2luZ19tdWx0aV9pbnZhbGlkX3VidWZmJiMzNDspKQomIzQzOwkJdGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIHRydWUsIHRydWUpOwomIzQzOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7dXByb2JlX211bHRpX2xpbmtfaW5mbyYjMzQ7KSkKIAkJdGVzdF91cHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgZmFsc2UsIGZhbHNlKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3VyZXRwcm9iZV9tdWx0aV9saW5rX2luZm8mIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9maWxsX2xpbmtfaW5mby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uYwppbmRleCAxMzdiZDYyOTIxNjNhNS4uYzg1MDgxNTM4ZTkzYmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZpbGxfbGlua19pbmZvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uYwpAQCAtNTgsNCAmIzQzOzU4LDEwIEBAIGludCBCUEZfUFJPRyh1bXVsdGlfcnVuKQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7ZmVudHJ5Lm11bHRpJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRtdWx0aV9ydW4pCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGZpbGxfbGlua19pbmZvYCBJbXBsZW1lbnRhdGlvbiBmb3IgVHJhY2luZyBNdWx0aS1MaW5rcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoLiBJdCYjMzk7cyBhZGRpbmcgYGZpbGxfbGlua19pbmZvYCBzdXBwb3J0IHRvIGBicGZfdHJhY2luZ19tdWx0aV9saW5rYC4gTG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBzZXZlcmFsIGZpbGVzOiB0aGUgdWFwaSBoZWFkZXIsIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24sIGJwZnRvb2wsIGEgdG9vbHMgdWFwaSBoZWFkZXIsIGFuZCBzb21lIHNlbGZ0ZXN0cy4KClNwZWNpZmljYWxseSwgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBpcyBhZGRpbmcgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIHRvIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHNgLCB3aGljaCBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb24gYSB0cmFjaW5nIG11bHRpLWxpbmsgZmlsZSBkZXNjcmlwdG9yIHZpYSB0aGUgYGJwZmAgc3lzY2FsbC4KClRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gLiBBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHJlYWRpbmcgdXNlciBwb2ludGVycyBmb3IgYGNvb2tpZXNgLCBgYWRkcnNgLCBhbmQgYGlkc2AgZnJvbSB0aGUgYGluZm8tJmd0O3RyYWNpbmdfbXVsdGlgIHN0cnVjdHVyZSBhbmQgdXNpbmcgYHB1dF91c2VyYCB0byBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4KClRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIG5ldyBmZWF0dXJlLCBhIG5ldyBjb2RlIHBhdGggdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbCDigJMgc3BlY2lmaWNhbGx5IGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCB3aXRoIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgLiBBbmQgc2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1c2VyLXByb3ZpZGVkIHBvaW50ZXJzIGFuZCBib3VuZHMgY2hlY2tpbmcsIHRoZXJlIGFyZSBwbGVudHkgb2YgYXJlYXMgcmlwZSBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3MuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4uIE5vdywgd2hhdCBhYm91dCBgQ09ORklHX0ZQUk9CRWAsIGBDT05GSUdfS1BST0JFU2AsIG9yIGBDT05GSUdfQlBGX0VWRU5UU2A/IEEgcXVpY2sgZ3JlcCBmb3IgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wc2Agb3IgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIHNob3VsZCBnaXZlIHVzIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzY5Mj1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzAxLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3MDI6c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzAzLVx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzc4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODUtXHQuZGVhbGxvY19kZWZlcnJlZCA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg2Olx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg3LSNpZmRlZiBDT05GSUdfUFJPQ19GU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgY29kZSBzdXJyb3VuZGluZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2A6CgoqKkFuYWx5emluZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28sIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYC4uLiB0aGF0JiMzOTtzIGEgcHJldHR5IHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbWFwIHRoaXMgdG8gaXRzIGNvbnRleHQgd2l0aGluIHRoZSBCUEYgdHJhY2luZyBmcmFtZXdvcmsuIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhYm91dCBtYW5hZ2luZyBsaW5rIGluZm9ybWF0aW9uLCBlc3BlY2lhbGx5IHNpbmNlICYjMzQ7bXVsdGlfbGluayYjMzQ7IGlzIGluIHRoZXJlIHRvby4gVGhpcyBzdWdnZXN0cyBpbnRlcmFjdGlvbiB3aXRoIG11bHRpcGxlIEJQRiBwcm9ncmFtcyBvciBsaW5rcywgd2hpY2ggaGFzIGEgZGlzdGluY3Qgc2V0IG9mIGNvbXBsZXhpdGllcywgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZXNlIHByb2dyYW1zIHNoYXJlIGRhdGEsIGhvdyB0aGV5IHJlbGF0ZSwgYW5kIGhvdyB0aGV5IHJlcG9ydCBvbiBldmVudHMuIEkmIzM5O20gaW1hZ2luaW5nIGl0JiMzOTtzIHVzZWQgdG8gY29sbGVjdCBvciBnZW5lcmF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgb2YgdGhlIGluZm8gYWJvdXQgdGhlIEJQRiBsaW5rcyBpbnZvbHZlZCBpbiB0cmFjaW5nLiBJIGJldCB0aGlzIGZ1bmN0aW9uIHRha2VzIGluIHNvbWUgY29udGV4dCwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IG5lZWRzIGZpbGxpbmcgaW4sIGFuZCByZXR1cm5zIGFuIGV4aXQgY29kZSBvZiBzb21lIGtpbmQuCgpJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0JiMzOTtzIHVzZWQuIElzIGl0IGEgY29yZSBmdW5jdGlvbiwgb3IgbW9yZSBvZiBhIGhlbHBlcj8gSXMgaXQgZXhwb3NlZCBpbiB0aGUgbWFpbiBCUEYgQVBJLCBvciBpcyBpdCBtb3JlIG9mIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgb3RoZXIgZnVuY3Rpb25zIGxpa2VseSBjYWxsIHRoaXMgb25lLCBhcyB3ZWxsIGFzIHdoaWNoIGZ1bmN0aW9ucyBpdCYjMzk7cyBsaWtlbHkgdG8gY2FsbC4gSWYgaXQmIzM5O3MgYSBmaWxsIGZ1bmN0aW9uLCBpdCYjMzk7cyBsaWtlbHkgZmlsbGluZyBpbiBzb21lIGtpbmQgb2Ygc3RydWN0dXJlIHRoYXQgdGhlIHRyYWNpbmcgc3lzdGVtIHVzZXMgdG8gdW5kZXJzdGFuZCBob3cgcHJvZ3JhbXMgYXJlIGxpbmtlZCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEkmIzM5O2QgbGlrZSB0byBnZXQgYSBnb29kIG1lbnRhbCBtb2RlbCBvZiB0aGUgd2hvbGUgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciB0cmFjaW5nIGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBzdHJ1Y3R1cmUgaXQgZmlsbHMuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBkYXRhIGl0IHByb2R1Y2VzIGFuZCB3aGVyZSB0aGF0IGRhdGEgZW5kcyB1cCwgYmVjYXVzZSB0aGlzIGlzIHRoZSBpbmZvcm1hdGlvbiBtb3N0IGltcG9ydGFudCB0byBhIHVzZXIsIG5vdCB0aGUgaW50ZXJuYWwgbWFjaGluYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mzc1Nz1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODItXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4NC1cdC5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODM5PWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkwMC1cdGJwZl9saW5rX2luaXQoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkwMTpcdFx0ICAgICAgXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzkzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCYjMzk7cyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLiBJdOKAmXMgYSBwcmV0dHkgcG93ZXJmdWwgZnVuY3Rpb24sIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXRzIGF2YWlsYWJpbGl0eSBpcyBnb3Zlcm5lZCBieSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBzZW5zZSBvZiBpdHMgJiMzNDtwb3J0YWJpbGl0eSYjMzQ7IHNvIHRvIHNwZWFrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucywgaWYgYW55LCBJIG5lZWQgdG8gdmVyaWZ5IGFyZSBlbmFibGVkIGJlZm9yZSBJIGNhbiByZWx5IG9uIHRoaXMgYmVpbmcgcHJlc2VudCBhbmQgdXNhYmxlIGluIGEgcGFydGljdWxhciBlbnZpcm9ubWVudC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IGNoZWNraW5nIHRoZSBjb2RlYmFzZSBmb3IgYW55IG9idmlvdXMgY29uZmlnLXJlbGF0ZWQgY29uZGl0aW9uYWxzIHN1cnJvdW5kaW5nIGl0cyBkZWNsYXJhdGlvbiBvciBkZWZpbml0aW9uLiBObyB0aW1lIHRvIHdhc3RlIG9uIGFzc3VtcHRpb25zLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdHJhY2luZ19tdWx0aV9hdHRhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD03ODk9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjc5MDppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpO1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03OTEtI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTg0OD1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4NDk6YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg1MC17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVx0XHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NTpcdFx0XHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk2LVx0XHRlbHNlXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4MTg9c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4MzgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzgzOTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MC17XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MjgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkyOTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkzMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIFRyYWNlIEV2ZW50cyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRyYWNlIGV2ZW50cyBhcmUgc3RydWN0dXJlZC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBzb3VyY2UsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaGAuIExldCYjMzk7cyB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDc5MC4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGNvcmUgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBtYWNybyB0aGF0IGxheXMgb3V0IHRoZSBiYXNpYyBmb3JtYXQgb2YgdGhlc2UgZXZlbnRzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBlbGVtZW50czogdGhlIGV2ZW50IGlkZW50aWZpZXIsIHRoZSBmb3JtYXQgc3RyaW5nLCBwZXJoYXBzIHNvbWUgZmllbGRzIHJlbGF0ZWQgdG8gZmlsdGVyaW5nLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGV2ZW50LXNwZWNpZmljIGRhdGEuIEl04oCZcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBhIG1hY3JvIGZvciBkZWZpbmluZyBzb21lIG9mIHRoZSBoZWxwZXJzIHRvIHNldHVwIHRoZSBldmVudHMuCkkgd29uZGVyIGlmIHRoYXQgcGFydGljdWxhciBsb2NhdGlvbiBob2xkcyB0aGUgcmVnaXN0cmF0aW9uIG1hY3Jvcywgb3IgaWYgaXQmIzM5O3MgdGhlIHN0cnVjdHVyZSBkZWNsYXJhdGlvbiBpdHNlbGYuIFRpbWUgdG8gZmluZCBvdXQuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY2xldmVyIHVzZSBvZiBwcmVwcm9jZXNzb3IgbWFnaWMsIEkganVzdCBob3BlIGl0JiMzOTtzIG5vdCBvdmVybHkgb2JmdXNjYXRlZC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc4MDpcdGludCBicGZfcHJvYmVfdW5yZWdpc3RlcihzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cCwgc3RydWN0IGJwZl9yYXdfdHBfbGluayAqbGluayk7XG4gNzgxOlx0XG4gNzgyOlx0c3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpicGZfZ2V0X3Jhd190cmFjZXBvaW50KGNvbnN0IGNoYXIgKm5hbWUpO1xuIDc4MzpcdHZvaWQgYnBmX3B1dF9yYXdfdHJhY2Vwb2ludChzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJ0cCk7XG4gNzg0Olx0aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxuIDc4NTpcdFx0XHRcdCAgICB1MzIgKmZkX3R5cGUsIGNvbnN0IGNoYXIgKipidWYsXG4gNzg2Olx0XHRcdFx0ICAgIHU2NCAqcHJvYmVfb2Zmc2V0LCB1NjQgKnByb2JlX2FkZHIsXG4gNzg3Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKm1pc3NlZCk7XG4gNzg4Olx0aW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4gNzg5Olx0aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4gNzkwOlx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKTtcbiA3OTE6XHQjZWxzZVxuIDc5MjpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpjdHgpXG4gNzkzOlx0e1xuIDc5NDpcdFx0cmV0dXJuIDE7XG4gNzk1Olx0fVxuIDc5NjpcdFxuIDc5NzpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmX2ZhdWx0YWJsZShzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxuIDc5ODpcdHtcbiA3OTk6XHRcdHJldHVybiAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIFByZXByb2Nlc3NvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgYW0gSSByaWdodCBub3cgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNwZWNpZmljIGJsb2NrIG9mIGNvZGUgaXMgKmFjdHVhbGx5KiBnb2luZyB0byBkby4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEkga25vdyB0aGUgbGlrZWx5IGN1bHByaXQgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGAjaWZkZWZgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBlbnZpcm9ubWVudC1zcGVjaWZpYyBkZWNpc2lvbnMgYXJlIGJlaW5nIG1hZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmUgZmxhZ3MsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBvcGVyYXRpbmcgc3lzdGVtIGRlZmluZXMgYXJlIGFjdGl2ZSBhdCB0aGlzIHBvaW50IGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGAjaWZkZWZgIHN0YXRlbWVudCBnb3Zlcm5zIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIE9uY2UgSSBrbm93IHRoYXQsIEkmIzM5O2xsIGhhdmUgYSBtdWNoIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaW4gdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIHZhcmlhbnQuIFRpbWUgdG8gZ2V0IGRvd24gdG8gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTY5PXN0cnVjdCB0cmFjZV9keW5hbWljX2luZm8ge1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo3MDojaWZkZWYgQ09ORklHX0NQVV9CSUdfRU5ESUFOXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTcxLVx0dTE2XHRsZW47XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD0yNTE9ZW51bSB0cmFjZV9yZWcge1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMjUzLVx0VFJBQ0VfUkVHX1VOUkVHSVNURVIsXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjI1NDojaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTI1NS1cdFRSQUNFX1JFR19QRVJGX1JFR0lTVEVSLFxuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9Mjg5PXN0cnVjdCB0cmFjZV9ldmVudF9jbGFzcyB7XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0yOTEtXHR2b2lkXHRcdFx0KnByb2JlO1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDoyOTI6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0yOTMtXHR2b2lkXHRcdFx0KnBlcmZfcHJvYmU7XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD0zNjc9c3RydWN0IHRyYWNlX2V2ZW50X2NhbGwge1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMzg5LVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDozOTA6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0zOTEtXHRpbnRcdFx0XHRcdHBlcmZfcmVmY291bnQ7XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0zOTktXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjQwMDojaWZkZWYgQ09ORklHX0RZTkFNSUNfRVZFTlRTXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTQwMS1ib29sIHRyYWNlX2V2ZW50X2R5bl90cnlfZ2V0X3JlZihzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCk7XG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD00Mjg9c3RhdGljIGlubGluZSB2b2lkIHRyYWNlX2V2ZW50X3B1dF9yZWYoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpXG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC00MzUtXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjQzNjojaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTQzNy1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfYXJyYXlfdmFsaWQoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpXG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD02NDY9c3RydWN0IHRyYWNlX2V2ZW50X2ZpbGUge1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNjc2LVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo2Nzc6I2lmZGVmIENPTkZJR19ISVNUX1RSSUdHRVJTXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTY3OC1leHRlcm4gc3RydWN0IGlycV93b3JrIGhpc3RfcG9sbF93b3JrO1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9NzU2PXRyYWNlX3RyaWdnZXJfc29mdF9kaXNhYmxlZChzdHJ1Y3QgdHJhY2VfZXZlbnRfZmlsZSAqZmlsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc3MC1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzcxOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03NzItdW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpjdHgpO1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODc4PWludCB0cmFjZV9hcnJheV9zZXRfY2xyX2V2ZW50KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGNvbnN0IGNoYXIgKnN5c3RlbSxcbi0tXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg4MC1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6ODgxOiNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODgyLXN0cnVjdCBwZXJmX2V2ZW50O1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODg5PWV4dGVybiB2b2lkIHBlcmZfdHJhY2VfZGVsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6ODkwOiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04OTEtZXh0ZXJuIGludCAgcGVyZl9rcHJvYmVfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGJvb2wgaXNfcmV0cHJvYmUpO1xuLS1cbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODkzPWV4dGVybiBpbnQgYnBmX2dldF9rcHJvYmVfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4tLVxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04OTgtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjg5OTojaWZkZWYgQ09ORklHX1VQUk9CRV9FVkVOVFNcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtOTAwLWV4dGVybiBpbnQgIHBlcmZfdXByb2JlX2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkV4YW1pbmluZyB0aGUgQlBGIEV2ZW50IENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSBpcyB0byBnbyBkaWdnaW5nIGludG8gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgZm9yIGFueXRoaW5nIEJQRi1yZWxhdGVkIHdpdGggdHJhY2luZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gaG93IGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBpcyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYWRkaXRpb25hbCBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoYXQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBhbnkgb3RoZXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGJlc2lkZXMgdGhlIHRvcC1sZXZlbCBgQ09ORklHX0JQRl9FVkVOVFNgIGZsYWcuIEl0IG1pZ2h0IGJlIGZ1cnRoZXIgZ2F0ZWQgYnkgc29tZSBvdGhlciBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ3LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjQ4OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ5LXN0cnVjdCBicGZfdHJhY2VfbW9kdWxlIHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTczPXVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZl9mYXVsdGFibGUoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4NTojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODYtQlBGX0NBTExfMihicGZfb3ZlcnJpZGVfcmV0dXJuLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB1bnNpZ25lZCBsb25nLCByYylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzA2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzE1OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTYtQlBGX0NBTExfMyhicGZfcHJvYmVfcmVhZF9jb21wYXQsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2MT1CVEZfU0VUX1NUQVJUKGJ0Zl9hbGxvd2xpc3RfZF9wYXRoKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2MjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTYzLUJURl9JRChmdW5jLCBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24pXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2NT1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9vcGVuKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2Ni0jZW5kaWZcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Njc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRIXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY4LUJURl9JRChmdW5jLCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnlfaXAodW5zaWduZWQgbG9uZyBmZW50cnlfaXApXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3Ni17XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA3NzojaWZkZWYgQ09ORklHX1g4Nl9LRVJORUxfSUJUXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3OC1cdGlmIChpc19lbmRicigodm9pZCAqKShmZW50cnlfaXAgLSBFTkRCUl9JTlNOX1NJWkUpKSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA4ND1CUEZfQ0FMTF8xKGJwZl9nZXRfZnVuY19pcF9rcHJvYmUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwODgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA4OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDkwLVx0cnVuX2N0eCA9IGNvbnRhaW5lcl9vZihjdXJyZW50LVx1MDAzZWJwZl9jdHgsIHN0cnVjdCBicGZfdHJhY2VfcnVuX2N0eCwgcnVuX2N0eCk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEyNzQ9YnBmX3RyYWNpbmdfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4MC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMjgxOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMjgyLVx0Y2FzZSBCUEZfRlVOQ19wcm9iZV9yZWFkOlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTEtXHRcdHJldHVybiBwcm9nLVx1MDAzZXNsZWVwYWJsZSA/IFx1MDAyNmJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvIDogXHUwMDI2YnBmX2dldF9zdGFja19wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMzUyOiNpZmRlZiBDT05GSUdfQlBGX0tQUk9CRV9PVkVSUklERVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTMtXHRjYXNlIEJQRl9GVU5DX292ZXJyaWRlX3JldHVybjpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMC1cdHN3aXRjaCAoZnVuY19pZCkge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MzE6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzMyLVx0Y2FzZSBCUEZfRlVOQ19za2Jfb3V0cHV0OlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xODI4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgcmF3X3RyYWNlcG9pbnRfcHJvZ19vcHMgPSB7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTgyOTojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzAtXHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyMDk9aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQzLVx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjQ0OiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDUtXHRcdGlmIChmbGFncyBcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfS1BST0JFKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ5LSNlbmRpZlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNTA6I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI1MS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBUUkFDRV9FVkVOVF9GTF9VUFJPQkUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNzM9c3Vic3lzX2luaXRjYWxsKHNlbmRfc2lnbmFsX2lycV93b3JrX2luaXQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI3NTojaWZkZWYgQ09ORklHX01PRFVMRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc2LXN0YXRpYyBpbnQgYnBmX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG9wLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMzI5PXN0cnVjdCBicGZfc2Vzc2lvbl9ydW5fY3R4IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzM1OiNpZmRlZiBDT05GSUdfRlBST0JFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNi1zdHJ1Y3QgYnBmX2twcm9iZV9tdWx0aV9saW5rIHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjQ0OD1zdGF0aWMgaW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI0OTctXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjQ5ODojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk5LXN0YXRpYyB2b2lkIGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTI3LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI1Mjg6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyOS1cdC5zaG93X2ZkaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI5NDM9c3RhdGljIHU2NCBicGZfa3Byb2JlX211bHRpX2VudHJ5X2lwKHN0cnVjdCBicGZfcnVuX2N0eCAqY3R4KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTQ4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI5NDk6I2lmZGVmIENPTkZJR19VUFJPQkVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk1MC1zdHJ1Y3QgYnBmX3Vwcm9iZV9tdWx0aV9saW5rO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMDA3PXN0YXRpYyBpbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3My1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMDc0OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzUtc3RhdGljIHZvaWQgYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMxMTU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxMTgtXHQuZmlsbF9saW5rX2luZm8gPSBicGZfdXByb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzExOTojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTIwLVx0LnNob3dfZmRpbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1Ny1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg3OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODgtXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCwgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgKm5vdCogZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGl0c2VsZi4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgZWl0aGVyIGFsd2F5cyBjb21waWxlZCB3aGVuIHRoYXQgZmlsZSBpcyBpbmNsdWRlZCwgb3IgdGhlIGluY2x1c2lvbiBvZiB0aGUgZW50aXJlIGZpbGUgaXMgY29uZGl0aW9uYWwuCgpNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgLiBJZiBgYnBmX3RyYWNlLm9gIGlzIGJ1aWx0IGNvbmRpdGlvbmFsbHksIG9yIGlmIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGNvbnRyb2wgaXRzIGluY2x1c2lvbiwgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBhbnN3ZXIuIEl0IGlzIGEgdmVyeSBnb29kIGFwcHJvYWNoIGFzIHRoZSBgTWFrZWZpbGVgIHdpbGwgcG9pbnQgbWUgdG8gdGhlIHJlbGV2YW50IHZhcmlhYmxlcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIGNvbnRyb2xsaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiB3aWxsIGV4aXN0IG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTU0PUtDT1ZfSU5TVFJVTUVOVF90cmFjZV9pcnFzb2ZmLm8gOj0gblxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU1LVxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxua2VybmVsL3RyYWNlL01ha2VmaWxlLTU3LVxuLS1cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSAmIzQzOz0gdHJhY2VfZXZlbnRzX3VzZXIub1xua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgJiM0Mzs9IGJwZl90cmFjZS5vXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSAmIzQzOz0gdHJhY2Vfa3Byb2JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5NDEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gQlBGIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIG5lZWQgZm9yIGBDT05GSUdfQlBGX0VWRU5UU2AuIFRoYXQmIzM5O3MgYSBnaXZlbiwgbmF0dXJhbGx5LiBCdXQgdGhlbiBJIGhhdmUgdG8gYXNrIG15c2VsZiwgd2hhdCBhYm91dCBgQ09ORklHX0JQRl9TWVNDQUxMYD8gSG1tbSwgeWVzLCBpdCBzZWVtcyBlc3NlbnRpYWwgZm9yIEJQRiBsaW5rcywgc28gdGhhdCYjMzk7cyBpbiB0aGUgbWl4LiBOb3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBsdXJraW5nIGFib3V0IHRoYXQgSSYjMzk7bSBvdmVybG9va2luZz8gSSBiZXR0ZXIgZG8gYSBxdWljayBzY2FuLiBMZXQgbWUgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGFkZGl0aW9uYWwgZmxhZ3MgbWlnaHQgY29tZSBpbnRvIHBsYXkgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgzOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODM5Olx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuMzg0MDpcdHtcbjM4NDE6XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rID0gTlVMTDtcbjM4NDI6XHRcdHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqZmV4aXRzID0gTlVMTDtcbjM4NDM6XHRcdHN0cnVjdCBicGZfbGlua19wcmltZXIgbGlua19wcmltZXI7XG4zODQ0Olx0XHR1MzIgY250LCAqaWRzID0gTlVMTDtcbjM4NDU6XHRcdHU2NCBfX3VzZXIgKnVjb29raWVzO1xuMzg0NjpcdFx0dTY0ICpjb29raWVzID0gTlVMTDtcbjM4NDc6XHRcdHUzMiBfX3VzZXIgKnVpZHM7XG4zODQ4Olx0XHRpbnQgZXJyO1xuMzg0OTpcdFxuMzg1MDpcdFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuaWRzKTtcbjM4NTE6XHRcdGNudCA9IGF0dHItXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jbnQ7XG4zODUyOlx0XG4zODUzOlx0XHRpZiAoIWNudCB8fCAhdWlkcylcbjM4NTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODU1Olx0XHRpZiAoY250IFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXG4zODU2Olx0XHRcdHJldHVybiAtRTJCSUc7XG4zODU3Olx0XHRpZiAoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyB8fCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcbjM4NTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODU5Olx0XG4zODYwOlx0XHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XG4zODYxOlx0XHRpZiAoIWlkcylcbjM4NjI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zODYzOlx0XG4zODY0Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XG4zODY1Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4zODY2Olx0XHRcdGdvdG8gZXJyb3I7XG4zODY3Olx0XHR9XG4zODY4Olx0XG4zODY5Olx0XHR1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY29va2llcyk7XG4zODcwOlx0XHRpZiAodWNvb2tpZXMpIHtcbjM4NzE6XHRcdFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XG4zODcyOlx0XHRcdGlmICghY29va2llcykge1xuMzg3MzpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4zODc0Olx0XHRcdFx0Z290byBlcnJvcjtcbjM4NzU6XHRcdFx0fVxuMzg3NjpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoY29va2llcywgdWNvb2tpZXMsIGNudCAqIHNpemVvZigqY29va2llcykpKSB7XG4zODc3Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjM4Nzg6XHRcdFx0XHRnb3RvIGVycm9yO1xuMzg3OTpcdFx0XHR9XG4zODgwOlx0XHR9XG4zODgxOlx0XG4zODgyOlx0XHRlcnIgPSBjaGVja19kdXBfaWRzKGlkcywgY29va2llcywgY250KTtcbjM4ODM6XHRcdGlmIChlcnIpXG4zODg0Olx0XHRcdGdvdG8gZXJyb3I7XG4zODg1Olx0XG4zODg2Olx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcbjM4ODc6XHRcdFx0ZmV4aXRzID0ga3ZtYWxsb2Nfb2JqcygqZmV4aXRzLCBjbnQpO1xuMzg4ODpcdFx0XHRpZiAoIWZleGl0cykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk3NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUcmFjaW5nIE11bHRpLUxpbmsgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCwgd2hpY2ggaXMgdGhlIGBmaWxsX2xpbmtfaW5mb2AgaW1wbGVtZW50YXRpb24gZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgLiBUaGF0JiMzOTtzIGdvb2QsIGl0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSDigJMgY29uZmlybWVkIHZpYSBgYnBmKEJQRl9PQkpfR0VUX0lORk9fQllfRkQsIC4uLilgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIGBCUEZfRVZFTlRTYCBhbmQgYEJQRl9TWVNDQUxMYCwgdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBnb3RjaGFzLiBXaGF0IGFib3V0IGBDT05GSUdfRlBST0JFYCBvciBgQ09ORklHX0tQUk9CRV9FVkVOVFNgPyBOZWVkIHRvIGJlIHN1cmUgdG8gY2hlY2sgdGhvc2UuCgpUaGlua2luZyBtb3JlIGJyb2FkbHksIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGNsZWFybHkgdXNlZCBmb3IgZGlmZmVyZW50IHR5cGVzOiBgQlBGX1RSQUNFX0ZFTlRSWV9NVUxUSWAsIGBCUEZfVFJBQ0VfRkVYSVRfTVVMVElgLCBhbmQgYEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSWAuIFRoZXNlIGFyZSBhbGwgdHJhY2luZyBwcm9ncmFtcywgc28gaXQgbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgZGVmaW5lZCB3aXRoaW4gYW55IG90aGVyIGNvbmZpZyBhcyB3ZWxsLCBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgdGhlc2UgdHlwZXMgb2YgZGVmaW5pdGlvbnMgdG8gYmUgd2VsbCBzdHJ1Y3R1cmVkLgoKUmlnaHQsIEkganVzdCBzYXcgaW4gYGluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmhgLCBpdCYjMzk7cyBhbGwgdW5kZXIgYENPTkZJR19CUEZfRVZFTlRTYC4gVGhhdCYjMzk7cyBnb29kOyBpdCBjb25maXJtcyBteSBmaXJzdCB0aG91Z2h0LiBGaW5hbGx5LCBsZXQmIzM5O3MgdmVyaWZ5IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgY29udGFpbnMgYGlzX3RyYWNpbmdfbXVsdGlgIHRvIGNsb3NlIHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc190cmFjaW5nX211bHRpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MjE3OT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Byb2dfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIxOTItXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjIxOTM6c3RhdGljIGlubGluZSBib29sIGlzX3RyYWNpbmdfbXVsdGkoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbmluY2x1ZGUvbGludXgvYnBmLmgtMjE5NC17XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjk3Mj1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMDQ3LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzA0ODpcdG11bHRpX2Z1bmMgPSBpc190cmFjaW5nX211bHRpKGF0dHItXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzA0OS1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01ODQ0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTMtXHRcdFx0cmV0ID0gY2dyb3VwX2JwZl9saW5rX2F0dGFjaChhdHRyLCBwcm9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTQ6XHRcdGVsc2UgaWYgKGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk1LVx0XHRcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg3OTM9c3RhdGljIGludCBjaGVja19hdHRhY2hfbW9kaWZ5X3JldHVybih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4MDQ6c3RhdGljIGJvb2wgaXNfdHJhY2luZ19tdWx0aV9pZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDUte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODA2Olx0cmV0dXJuIGlzX3RyYWNpbmdfbXVsdGkocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkgXHUwMDI2XHUwMDI2IGJwZl9tdWx0aV9mdW5jX2J0Zl9pZFswXSA9PSBidGZfaWQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDctfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODgwOT1zdGF0aWMgaW50IGJ0Zl9pZF9hbGxvd19zbGVlcGFibGUodTMyIGJ0Zl9pZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODI4LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgyOTpcdFx0aWYgKGlzX3RyYWNpbmdfbXVsdGlfaWQocHJvZywgYnRmX2lkKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgzMC1cdFx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NTg9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTI1LVx0XHQgKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTEyNjpcdFx0aWYgKGlzX3RyYWNpbmdfbXVsdGlfaWQocHJvZywgYnRmX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MTI3LVx0XHRcdGlmIChidGZfaXNfbW9kdWxlKGJ0ZikpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkyNjM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzQ3LVx0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1RSQUNJTkcgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNDg6XHQgICAgaXNfdHJhY2luZ19tdWx0aShwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM0OS1cdFx0cmV0dXJuIDA7XG4tLVxudG9vbHMvbGliL2JwZi9saWJicGYuYz03NzcyPXN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzc3NC1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6Nzc3NTpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJhY2luZ19tdWx0aShlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxudG9vbHMvbGliL2JwZi9saWJicGYuYy03Nzc2LXtcbi0tXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTc4Mzk9c3RhdGljIGludCBsaWJicGZfcHJlcGFyZV9wcm9nX2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxuLS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzkwMS1cbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzkwMjpcdGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKSB7XG50b29scy9saWIvYnBmL2xpYmJwZi5jLTc5MDMtXHRcdGludCBlcnIsIGJ0Zl9vYmpfZmQgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQlBGIFRyYWNpbmcgSW5mcmFzdHJ1Y3R1cmUqKgoKT2theSwgc28gSSBzZWUgdGhpcyBgaXNfdHJhY2luZ19tdWx0aWAgZnVuY3Rpb24gY2FsbCwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBpdCYjMzk7cyBkZWZpbmVkIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBpdCYjMzk7cyBsb2NhdGVkIGluIGBpbmNsdWRlL2xpbnV4L2JwZi5oYC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBCUEYgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBTbywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoYXQgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYW5kIHZlcmlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcm9sZSBpbiB0aGUgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgdHJhY2luZyBjYXBhYmlsaXRpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGhlYWRlciByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxOTA6XHQjZW5kaWZcbjIxOTE6XHR9XG4yMTkyOlx0XG4yMTkzOlx0c3RhdGljIGlubGluZSBib29sIGlzX3RyYWNpbmdfbXVsdGkoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbjIxOTQ6XHR7XG4yMTk1Olx0XHRyZXR1cm4gdHlwZSA9PSBCUEZfVFJBQ0VfRkVOVFJZX01VTFRJIHx8IHR5cGUgPT0gQlBGX1RSQUNFX0ZFWElUX01VTFRJIHx8XG4yMTk2Olx0XHQgICAgICAgdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEk7XG4yMTk3Olx0fVxuMjE5ODpcdFxuMjE5OTpcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXG4yMjAwOlx0LyogVGhpcyBtYWNybyBoZWxwcyBkZXZlbG9wZXIgdG8gcmVnaXN0ZXIgYSBzdHJ1Y3Rfb3BzIHR5cGUgYW5kIGdlbmVyYXRlXG4yMjAxOlx0ICogdHlwZSBpbmZvcm1hdGlvbiBjb3JyZWN0bHkuIERldmVsb3BlcnMgc2hvdWxkIHVzZSB0aGlzIG1hY3JvIHRvIHJlZ2lzdGVyXG4yMjAyOlx0ICogYSBzdHJ1Y3Rfb3BzIHR5cGUgaW5zdGVhZCBvZiBjYWxsaW5nIF9fcmVnaXN0ZXJfYnBmX3N0cnVjdF9vcHMoKSBkaXJlY3RseS5cbjIyMDM6XHQgKi9cbjIyMDQ6XHQjZGVmaW5lIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKHN0X29wcywgdHlwZSlcdFx0XHRcdFxcXG4yMjA1Olx0XHQoe1x0XHRcdFx0XHRcdFx0XHRcXFxuMjIwNjpcdFx0XHRzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfIyN0eXBlIHtcdFx0XHRcdFxcXG4yMjA3Olx0XHRcdFx0c3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2NvbW1vbl92YWx1ZSBjb21tb247XHRcXFxuMjIwODpcdFx0XHRcdHN0cnVjdCB0eXBlIGRhdGEgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcdFxcXG4yMjA5Olx0XHRcdH07XHRcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCUEYgVHJhY2luZyBNdWx0aS1MaW5rIEZlYXR1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlzX3RyYWNpbmdfbXVsdGlgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBwcmltYXJpbHkgYWJvdXQgY2hlY2tpbmcgdGhlIGF0dGFjaCB0eXBlLiBNYWtlcyBzZW5zZS4gRGVmaW5pdGVseSBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBjb3JlIHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSwgYXMgZmFyIGFzIHRoaXMgcGF0Y2ggaXMgY29uY2VybmVkLCBhcmUgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gLiBPZiBjb3Vyc2UsIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzICphbHNvKiBhIHBvdGVudGlhbCB0YXJnZXQgZm9yIGZ1enppbmcsIGFsdGhvdWdoIEkgY2FuIHNlZSB0aGlzIHBhcnRpY3VsYXIgcGF0Y2ggaXMgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRob3NlIG90aGVyIHR3by4KClRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBCUEZfRVZFTlRTYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgZGVmaW5pdGVseSByZXF1aXJlZC4KCk5vdywgSSB3YW50IHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcuIElzIHRoZXJlIGFueSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfRlBST0JFYCBvciBgQ09ORklHX0tQUk9CRVNgIGZvciB0aGlzIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGZ1bmN0aW9uYWxpdHk/IFNpbmNlIGl0IHVzZXMgYGJwZl90cmFtcF9ub2RlYCBhbmQgYGJwZl90cmFtcG9saW5lYCwgdGhvc2UgYXJlIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBMZXQgbWUgZGlnIGludG8gd2hlcmUgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgd2hpY2ggYXBwZWFycyB0byBiZSBpbiBga2VybmVsL3RyYWNlL2JwZl90cmFjZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODE4PXN0YXRpYyBpbnQgY2hlY2tfZHVwX2lkcyh1MzIgKmlkcywgdTY0ICpjb29raWVzLCB1MzIgY250KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM4Mzk6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM4NDAte1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM5Mjk6aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjEwNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3Mgc2VsZi1yZWZsZWN0aW9uOgoKKipEZWVwIERpdmUgaW50byBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBEdWFsaXR5KioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBpcyBidWdnaW5nIG1lOiB3aHkgaW4gdGhlICp3b3JsZCogYXJlIHRoZXJlICp0d28qIGRlZmluaXRpb25zIGZvciBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYD8gSSBtZWFuLCBJIGtub3cgaG93IHRoZXNlIHRoaW5ncyBhcmUgc3RydWN0dXJlZCwgYW5kIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpcyBnZW5lcmFsbHkgcHJldHR5IGdvb2QsIGJ1dCB0aGlzIGZlZWxzLi4uIHJlZHVuZGFudC4gSXMgaXQgZHVlIHRvIHNvbWUgaGlzdG9yaWNhbCByZWFzb24sIGEgcmVmYWN0b3JpbmcsIGEgcGxhdGZvcm0tc3BlY2lmaWMgZGlmZmVyZW5jZSwgb3IgcGVyaGFwcyBzb21lIHN1YnRsZSBzZW1hbnRpYyBkaXN0aW5jdGlvbiB0aGF0IEkmIzM5O20gbWlzc2luZz8gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGxpa2VseSBhIGxheWVyaW5nIGlzc3VlIHdoZXJlIGRpZmZlcmVudCBrZXJuZWwgc3Vic3lzdGVtcyBlbmRlZCB1cCBkZXZlbG9waW5nIHNpbWlsYXIgZnVuY3Rpb25zIGluZGVwZW5kZW50bHksIGFuZCB0aGUgY29uc29saWRhdGlvbiBuZXZlciBxdWl0ZSBoYXBwZW5lZC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgaW4gY29kZWJhc2VzIHRoaXMgc2l6ZS4KCkkmIzM5O20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSB1c2UgY2FzZXMuIElzIG9uZSBsaWtlbHkgaW4gYSBkaXJlY3QgYXR0YWNobWVudCBzY2VuYXJpbywgYW5kIHRoZSBvdGhlciBtb3JlIGFic3RyYWN0ZWQ/IERvZXMgb25lIG1hbmFnZSBzb21lIGdsb2JhbCBzdGF0ZSB3aGlsZSB0aGUgb3RoZXIgaXMgbW9yZSBmb2N1c2VkIG9uIGxvY2FsIHJlc291cmNlcz8gQXJlIHRoZSBhcmd1bWVudHMgZGlmZmVyZW50IGVub3VnaCB0byBqdXN0aWZ5IHNlcGFyYXRlIGltcGxlbWVudGF0aW9ucywgb3IgaXMgdGhlcmUgYSBzdHJvbmcgY29kZS1yZXVzZSBvcHBvcnR1bml0eSB0aGF0IHdhcyBtaXNzZWQ/CgpJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgdG8gcmVhbGx5IHN1c3MgdGhpcyBvdXQuIEkmIzM5O20gaG9waW5nIEkgZG9uJiMzOTt0IHJ1biBpbnRvIGEgc3BhZ2hldHRpIG1lc3Mgb2YgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSB0byBwcmVwYXJlIGZvciBpdC4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBiZWhpbmQgdGhpcyBkZXNpZ24gY2hvaWNlLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIG9wdGltaXphdGlvbiBJJiMzOTttIG92ZXJsb29raW5nLCBvciBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZiB0aGF0IHdhcyBtYWRlLiBJdCYjMzk7cyB0aW1lIHRvIHB1dCBvbiBteSBkZXRlY3RpdmUgaGF0IGFuZCBnbyBleHBsb3JpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzgzMDpcdFx0Zm9yIChpbnQgaSA9IDE7IGkgXHUwMDNjIGNudDsgaSYjNDM7JiM0MzspIHtcbjM4MzE6XHRcdFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XG4zODMyOlx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjM4MzM6XHRcdFx0XHRicmVhaztcbjM4MzQ6XHRcdFx0fVxuMzgzNTpcdFx0fVxuMzgzNjpcdFx0cmV0dXJuIGVycjtcbjM4Mzc6XHR9XG4zODM4Olx0XG4zODM5Olx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuMzg0MDpcdHtcbjM4NDE6XHRcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rID0gTlVMTDtcbjM4NDI6XHRcdHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqZmV4aXRzID0gTlVMTDtcbjM4NDM6XHRcdHN0cnVjdCBicGZfbGlua19wcmltZXIgbGlua19wcmltZXI7XG4zODQ0Olx0XHR1MzIgY250LCAqaWRzID0gTlVMTDtcbjM4NDU6XHRcdHU2NCBfX3VzZXIgKnVjb29raWVzO1xuMzg0NjpcdFx0dTY0ICpjb29raWVzID0gTlVMTDtcbjM4NDc6XHRcdHUzMiBfX3VzZXIgKnVpZHM7XG4zODQ4Olx0XHRpbnQgZXJyO1xuMzg0OTpcdFxuMzg1MDpcdFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuaWRzKTtcbjM4NTE6XHRcdGNudCA9IGF0dHItXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jbnQ7XG4zODUyOlx0XG4zODUzOlx0XHRpZiAoIWNudCB8fCAhdWlkcylcbjM4NTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODU1Olx0XHRpZiAoY250IFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXG4zODU2Olx0XHRcdHJldHVybiAtRTJCSUc7XG4zODU3Olx0XHRpZiAoYXR0ci1cdTAwM2VsaW5rX2NyZWF0ZS5mbGFncyB8fCBhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcbjM4NTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zODU5Olx0XG4zODYwOlx0XHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XG4zODYxOlx0XHRpZiAoIWlkcylcbjM4NjI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zODYzOlx0XG4zODY0Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XG4zODY1Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4zODY2Olx0XHRcdGdvdG8gZXJyb3I7XG4zODY3Olx0XHR9XG4zODY4Olx0XG4zODY5Olx0XHR1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY29va2llcyk7XG4zODcwOlx0XHRpZiAodWNvb2tpZXMpIHtcbjM4NzE6XHRcdFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XG4zODcyOlx0XHRcdGlmICghY29va2llcykge1xuMzg3MzpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4zODc0Olx0XHRcdFx0Z290byBlcnJvcjtcbjM4NzU6XHRcdFx0fVxuMzg3NjpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoY29va2llcywgdWNvb2tpZXMsIGNudCAqIHNpemVvZigqY29va2llcykpKSB7XG4zODc3Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjM4Nzg6XHRcdFx0XHRnb3RvIGVycm9yO1xuMzg3OTpcdFx0XHR9XG4zODgwOlx0XHR9XG4zODgxOlx0XG4zODgyOlx0XHRlcnIgPSBjaGVja19kdXBfaWRzKGlkcywgY29va2llcywgY250KTtcbjM4ODM6XHRcdGlmIChlcnIpXG4zODg0Olx0XHRcdGdvdG8gZXJyb3I7XG4zODg1Olx0XG4zODg2Olx0XHRpZiAocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcbjM4ODc6XHRcdFx0ZmV4aXRzID0ga3ZtYWxsb2Nfb2JqcygqZmV4aXRzLCBjbnQpO1xuMzg4ODpcdFx0XHRpZiAoIWZleGl0cykge1xuMzg4OTpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4zODkwOlx0XHRcdFx0Z290byBlcnJvcjtcbjM4OTE6XHRcdFx0fVxuMzg5MjpcdFx0fVxuMzg5MzpcdFxuMzg5NDpcdFx0bGluayA9IGt2emFsbG9jX2ZsZXgoKmxpbmssIG5vZGVzLCBjbnQpO1xuMzg5NTpcdFx0aWYgKCFsaW5rKSB7XG4zODk2Olx0XHRcdGVyciA9IC1FTk9NRU07XG4zODk3Olx0XHRcdGdvdG8gZXJyb3I7XG4zODk4Olx0XHR9XG4zODk5Olx0XG4zOTAwOlx0XHRicGZfbGlua19pbml0KFx1MDAyNmxpbmstXHUwMDNlbGluaywgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJLFxuMzkwMTpcdFx0XHQgICAgICBcdTAwMjZicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMsIHByb2csIHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpO1xuMzkwMjpcdFxuMzkwMzpcdFx0ZXJyID0gYnBmX2xpbmtfcHJpbWUoXHUwMDI2bGluay1cdTAwM2VsaW5rLCBcdTAwMjZsaW5rX3ByaW1lcik7XG4zOTA0Olx0XHRpZiAoZXJyKVxuMzkwNTpcdFx0XHRnb3RvIGVycm9yO1xuMzkwNjpcdFxuMzkwNzpcdFx0bGluay1cdTAwM2Vub2Rlc19jbnQgPSBjbnQ7XG4zOTA4Olx0XHRsaW5rLVx1MDAzZWNvb2tpZXMgPSBjb29raWVzO1xuMzkwOTpcdFx0bGluay1cdTAwM2VmZXhpdHMgPSBmZXhpdHM7XG4zOTEwOlx0XG4zOTExOlx0XHRlcnIgPSBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gocHJvZywgaWRzLCBsaW5rKTtcbjM5MTI6XHRcdGt2ZnJlZShpZHMpO1xuMzkxMzpcdFx0aWYgKGVycikge1xuMzkxNDpcdFx0XHRicGZfbGlua19jbGVhbnVwKFx1MDAyNmxpbmtfcHJpbWVyKTtcbjM5MTU6XHRcdFx0cmV0dXJuIGVycjtcbjM5MTY6XHRcdH1cbjM5MTc6XHRcdHJldHVybiBicGZfbGlua19zZXR0bGUoXHUwMDI2bGlua19wcmltZXIpO1xuMzkxODpcdFxuMzkxOTpcdGVycm9yOlxuMzkyMDpcdFx0a3ZmcmVlKGZleGl0cyk7XG4zOTIxOlx0XHRrdmZyZWUoY29va2llcyk7XG4zOTIyOlx0XHRrdmZyZWUoaWRzKTtcbjM5MjM6XHRcdGt2ZnJlZShsaW5rKTtcbjM5MjQ6XHRcdHJldHVybiBlcnI7XG4zOTI1Olx0fVxuMzkyNjpcdFxuMzkyNzpcdCNlbHNlXG4zOTI4Olx0XG4zOTI5Olx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkyOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gRGlyZWN0aXZlcyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyB3aGVuIGVuY291bnRlcmluZyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBjb250ZXh0LiBUaGUgYCNpZmRlZmAgZGlyZWN0aXZlIGlzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHByZXByb2Nlc3NvciBtYWNybyBpcyBiZWluZyB0ZXN0ZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljIGAjaWZkZWZgIGlzIGNydWNpYWwgdG8gZmlndXJpbmcgb3V0ICp3aGF0KiB0aGlzIGJsb2NrIG9mIGNvZGUgaXMgYWN0dWFsbHkgc3VwcG9zZWQgdG8gZG8gb3IgKndoeSogaXQmIzM5O3MgaGVyZSBhdCBhbGwuIElzIGl0IGZvciBhIHNwZWNpZmljIHBsYXRmb3JtLCBhIGZlYXR1cmUgZmxhZywgYSBkZWJ1ZyBtb2RlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2l0aG91dCB0aGF0IGluZm9ybWF0aW9uLCB0aGlzIGNvZGUgaXMgYmFzaWNhbGx5IG1lYW5pbmdsZXNzIHRvIG1lLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBlc3RhYmxpc2ggdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IHNvIEkgY2FuIHN0YXJ0IHRvIHJlYXNvbiB0aHJvdWdoIHRoZSBsb2dpYyB3aXRoaW4gdGhpcyBibG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2Vsc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTU3PXN0YXRpYyBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTc3LX1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo3ODojZWxzZVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTc5LXN0YXRpYyBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzNTg9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdzLCBicGZfa3Byb2JlX211bHRpX3B0X3JlZ3MpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzNTktI2RlZmluZSBicGZfa3Byb2JlX211bHRpX3B0X3JlZ3NfcHRyKClcdHRoaXNfY3B1X3B0cihcdTAwMjZicGZfa3Byb2JlX211bHRpX3B0X3JlZ3MpXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjM2MDojZWxzZVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzNjEtI2RlZmluZSBicGZfa3Byb2JlX211bHRpX3B0X3JlZ3NfcHRyKClcdChOVUxMKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNzc5PWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI5MzMtfVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI5MzQ6I2Vsc2UgLyogIUNPTkZJR19GUFJPQkUgKi9cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTM1LWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMyNTA9aW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzQwMC19XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzQwMTojZWxzZSAvKiAhQ09ORklHX1VQUk9CRVMgKi9cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDAyLWludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM4Mzk9aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI2LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM5Mjc6I2Vsc2Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc5NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIHRoZSBQcmUtcmVxdWlzaXRlcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGhlYWRmaXJzdCBpbnRvIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiBzb21ldGhpbmcgZm91bmRhdGlvbmFsOiBgI2lmZGVmYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY2xhcmlmeSBpdHMgcm9sZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhpcywgbGlrZWx5IGtlcm5lbCwgZGV2ZWxvcG1lbnQuIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoaXMgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBndWFyZD8gQW5kIGlmIHNvLCB3aGF0JiMzOTtzIGl0IGd1YXJkaW5nPyBJcyBpdCBmZWF0dXJlIGF2YWlsYWJpbGl0eSwgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSwgdmVyc2lvbiBjb21wYXRpYmlsaXR5Li4uIHRoZSBwb3NzaWJpbGl0aWVzIGFyZSB2YXN0LCBhbmQgSSBkb24mIzM5O3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLiBHcmFzcGluZyB0aGUgaW50ZW50IG9mIHRoZSBgI2lmZGVmYCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUmIzM5O3MgYmVoYXZpb3IuIEl04oCZcyBhYm91dCBidWlsZGluZyBhIHJvYnVzdCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIHRoYXQgYnJpbmcgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaW50byBleGlzdGVuY2UuIEkgd2FudCB0byBidWlsZCBhIHJvY2stc29saWQgZm91bmRhdGlvbiBvZiBrbm93bGVkZ2UgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ3LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjQ4OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ5LXN0cnVjdCBicGZfdHJhY2VfbW9kdWxlIHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTczPXVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZl9mYXVsdGFibGUoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4NTojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODYtQlBGX0NBTExfMihicGZfb3ZlcnJpZGVfcmV0dXJuLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB1bnNpZ25lZCBsb25nLCByYylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzA2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzE1OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTYtQlBGX0NBTExfMyhicGZfcHJvYmVfcmVhZF9jb21wYXQsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2MT1CVEZfU0VUX1NUQVJUKGJ0Zl9hbGxvd2xpc3RfZF9wYXRoKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2MjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTYzLUJURl9JRChmdW5jLCBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24pXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2NT1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9vcGVuKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2Ni0jZW5kaWZcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Njc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRIXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY4LUJURl9JRChmdW5jLCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnlfaXAodW5zaWduZWQgbG9uZyBmZW50cnlfaXApXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3Ni17XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA3NzojaWZkZWYgQ09ORklHX1g4Nl9LRVJORUxfSUJUXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3OC1cdGlmIChpc19lbmRicigodm9pZCAqKShmZW50cnlfaXAgLSBFTkRCUl9JTlNOX1NJWkUpKSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA4ND1CUEZfQ0FMTF8xKGJwZl9nZXRfZnVuY19pcF9rcHJvYmUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwODgtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA4OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDkwLVx0cnVuX2N0eCA9IGNvbnRhaW5lcl9vZihjdXJyZW50LVx1MDAzZWJwZl9jdHgsIHN0cnVjdCBicGZfdHJhY2VfcnVuX2N0eCwgcnVuX2N0eCk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEyNzQ9YnBmX3RyYWNpbmdfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4MC1cdFx0cmV0dXJuIFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMjgxOiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0Vcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMjgyLVx0Y2FzZSBCUEZfRlVOQ19wcm9iZV9yZWFkOlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTEtXHRcdHJldHVybiBwcm9nLVx1MDAzZXNsZWVwYWJsZSA/IFx1MDAyNmJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvIDogXHUwMDI2YnBmX2dldF9zdGFja19wcm90bztcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMzUyOiNpZmRlZiBDT05GSUdfQlBGX0tQUk9CRV9PVkVSUklERVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTMtXHRjYXNlIEJQRl9GVU5DX292ZXJyaWRlX3JldHVybjpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMC1cdHN3aXRjaCAoZnVuY19pZCkge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MzE6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzMyLVx0Y2FzZSBCUEZfRlVOQ19za2Jfb3V0cHV0OlxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xODI4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgcmF3X3RyYWNlcG9pbnRfcHJvZ19vcHMgPSB7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTgyOTojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzAtXHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAsXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyMDk9aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQzLVx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjQ0OiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDUtXHRcdGlmIChmbGFncyBcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfS1BST0JFKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ5LSNlbmRpZlxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNTA6I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI1MS1cdFx0aWYgKGZsYWdzIFx1MDAyNiBUUkFDRV9FVkVOVF9GTF9VUFJPQkUpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNzM9c3Vic3lzX2luaXRjYWxsKHNlbmRfc2lnbmFsX2lycV93b3JrX2luaXQpO1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI3NTojaWZkZWYgQ09ORklHX01PRFVMRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc2LXN0YXRpYyBpbnQgYnBmX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG9wLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMzI5PXN0cnVjdCBicGZfc2Vzc2lvbl9ydW5fY3R4IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzM1OiNpZmRlZiBDT05GSUdfRlBST0JFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNi1zdHJ1Y3QgYnBmX2twcm9iZV9tdWx0aV9saW5rIHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjQ0OD1zdGF0aWMgaW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI0OTctXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjQ5ODojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk5LXN0YXRpYyB2b2lkIGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTI3LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI1Mjg6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyOS1cdC5zaG93X2ZkaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI5NDM9c3RhdGljIHU2NCBicGZfa3Byb2JlX211bHRpX2VudHJ5X2lwKHN0cnVjdCBicGZfcnVuX2N0eCAqY3R4KVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTQ4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI5NDk6I2lmZGVmIENPTkZJR19VUFJPQkVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk1MC1zdHJ1Y3QgYnBmX3Vwcm9iZV9tdWx0aV9saW5rO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMDA3PXN0YXRpYyBpbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3My1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMDc0OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzUtc3RhdGljIHZvaWQgYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMxMTU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2xvcHMgPSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxMTgtXHQuZmlsbF9saW5rX2luZm8gPSBicGZfdXByb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzExOTojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTIwLVx0LnNob3dfZmRpbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1Ny1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg3OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODgtXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MDAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbiBLZXJuZWwgVHJhY2luZyoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEFoYSwgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgKmlzbiYjMzk7dCogZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpbiB0aGlzIGZpbGUuIFRoYXQmIzM5O3MgdW51c3VhbCwgSSBleHBlY3RlZCBzb21lIHNvcnQgb2YgZmVhdHVyZSBmbGFnIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBvciBjb25maWd1cmF0aW9uLiBIbW0sIGJ1dCB3YWl0IGEgbWludXRlLCB0aGVyZSYjMzk7cyBhbiBgI2Vsc2VgIGJsb2NrIGRvd24gYXQgbGluZSAzOTI3LiBPa2F5LCBzbyAqc29tZXRoaW5nKiBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBjb2RlIHRoYXQgKmxlYWRzKiB0byB1c2luZyBvciBub3QgdXNpbmcgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBgI2lmYCB0aGF0IHBhaXJzIHdpdGggdGhhdCBgI2Vsc2VgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkgaGVyZS4gV2hhdCBleGFjdGx5IGlzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQ/IElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGlvbiwgYSBrZXJuZWwgcGFyYW1ldGVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW50byB0aGF0IGNvbmRpdGlvbmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzgwMDpcdHN0YXRpYyB2b2lkIGlkc19zd2FwX3Iodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUgX19tYXliZV91bnVzZWQsXG4zODAxOlx0XHRcdCAgICAgICBjb25zdCB2b2lkICpwcml2IF9fbWF5YmVfdW51c2VkKVxuMzgwMjpcdHtcbjM4MDM6XHRcdHU2NCAqY29va2llX2EsICpjb29raWVfYiwgKmNvb2tpZXM7XG4zODA0Olx0XHR1MzIgKmlkX2EgPSBhLCAqaWRfYiA9IGIsICppZHM7XG4zODA1Olx0XHR2b2lkICoqZGF0YSA9ICh2b2lkICoqKSBwcml2O1xuMzgwNjpcdFxuMzgwNzpcdFx0aWRzICAgICA9IGRhdGFbMF07XG4zODA4Olx0XHRjb29raWVzID0gZGF0YVsxXTtcbjM4MDk6XHRcbjM4MTA6XHRcdGlmIChjb29raWVzKSB7XG4zODExOlx0XHRcdGNvb2tpZV9hID0gY29va2llcyAmIzQzOyAoaWRfYSAtIGlkcyk7XG4zODEyOlx0XHRcdGNvb2tpZV9iID0gY29va2llcyAmIzQzOyAoaWRfYiAtIGlkcyk7XG4zODEzOlx0XHRcdHN3YXAoKmNvb2tpZV9hLCAqY29va2llX2IpO1xuMzgxNDpcdFx0fVxuMzgxNTpcdFx0c3dhcCgqaWRfYSwgKmlkX2IpO1xuMzgxNjpcdH1cbjM4MTc6XHRcbjM4MTg6XHRzdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcbjM4MTk6XHR7XG4zODIwOlx0XHR2b2lkICpkYXRhWzJdID0geyBpZHMsIGNvb2tpZXMgfTtcbjM4MjE6XHRcdGludCBlcnIgPSAwO1xuMzgyMjpcdFxuMzgyMzpcdFx0LypcbjM4MjQ6XHRcdCAqIFNvcnQgaWRzIGFycmF5ICh0b2dldGhlciB3aXRoIGNvb2tpZXMgYXJyYXkgaWYgZGVmaW5lZClcbjM4MjU6XHRcdCAqIGFuZCBjaGVjayBpdCBmb3IgZHVwbGljYXRlcy4gVGhlIGlkcyBhbmQgY29va2llcyBhcnJheXNcbjM4MjY6XHRcdCAqIGFyZSBsZWZ0IHNvcnRlZC5cbjM4Mjc6XHRcdCAqL1xuMzgyODpcdFx0c29ydF9yX25vbmF0b21pYyhpZHMsIGNudCwgc2l6ZW9mKGlkc1swXSksIGlkc19jbXBfciwgaWRzX3N3YXBfciwgZGF0YSk7XG4zODI5Olx0XG4zODMwOlx0XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuMzgzMTpcdFx0XHRpZiAoaWRzW2ldID09IGlkc1tpIC0gMV0pIHtcbjM4MzI6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzgzMzpcdFx0XHRcdGJyZWFrO1xuMzgzNDpcdFx0XHR9XG4zODM1Olx0XHR9XG4zODM2Olx0XHRyZXR1cm4gZXJyO1xuMzgzNzpcdH1cbjM4Mzg6XHRcbjM4Mzk6XHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG4zODQwOlx0e1xuMzg0MTpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKmxpbmsgPSBOVUxMO1xuMzg0MjpcdFx0c3RydWN0IGJwZl90cmFtcF9ub2RlICpmZXhpdHMgPSBOVUxMO1xuMzg0MzpcdFx0c3RydWN0IGJwZl9saW5rX3ByaW1lciBsaW5rX3ByaW1lcjtcbjM4NDQ6XHRcdHUzMiBjbnQsICppZHMgPSBOVUxMO1xuMzg0NTpcdFx0dTY0IF9fdXNlciAqdWNvb2tpZXM7XG4zODQ2Olx0XHR1NjQgKmNvb2tpZXMgPSBOVUxMO1xuMzg0NzpcdFx0dTMyIF9fdXNlciAqdWlkcztcbjM4NDg6XHRcdGludCBlcnI7XG4zODQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODAwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb2RlIHdpdGhpbiB0aGlzIGZpbGUuIEdpdmVuIHRoYXQgSSYjMzk7bSB3b3JraW5nIHdpdGggYSByZWxhdGl2ZWx5IGxhcmdlIGZpbGUsIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBhcHByb2FjaCByYXRoZXIgdGhhbiBhIGJyb2FkIHN3ZWVwLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gYmFja3dhcmQsIGJlZ2lubmluZyBhcm91bmQgbGluZSAzODAwLCB0byBsb29rIGZvciBgI2lmYCBvciBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGVzZSBhcmUgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIEkga25vdyB0aGF0IHNpZ25hbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9ja3MsIGFuZCB0aGV5JiMzOTtsbCBsaWtlbHkgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiBpZiB0aGVyZSYjMzk7cyBhbnkgYnJhbmNoaW5nIGxvZ2ljIG5lYXIgdGhhdCBsaW5lLiBGaW5kaW5nIHRoZXNlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0aXZlIGFuZCBpbmFjdGl2ZSBhcm91bmQgdGhhdCBsb2NhdGlvbi4gVGhpcyBzaG91bGQgYmUgYSBxdWljayB3YXkgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00Ny1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo0ODojaWZkZWYgQ09ORklHX01PRFVMRVNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00OS1zdHJ1Y3QgYnBmX3RyYWNlX21vZHVsZSB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3Mz11bnNpZ25lZCBpbnQgdHJhY2VfY2FsbF9icGZfZmF1bHRhYmxlKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsLCB2b2lkICpjdHgpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4NC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODU6I2lmZGVmIENPTkZJR19CUEZfS1BST0JFX09WRVJSSURFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg2LUJQRl9DQUxMXzIoYnBmX292ZXJyaWRlX3JldHVybiwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdW5zaWduZWQgbG9uZywgcmMpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMwNj1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3Byb2JlX3JlYWRfa2VybmVsX3N0cl9wcm90byA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMxNTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE2LUJQRl9DQUxMXzMoYnBmX3Byb2JlX3JlYWRfY29tcGF0LCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjE9QlRGX1NFVF9TVEFSVChidGZfYWxsb3dsaXN0X2RfcGF0aClcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5NjI6I2lmZGVmIENPTkZJR19TRUNVUklUWVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2My1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjU9QlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfb3Blbilcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjYtI2VuZGlmXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6OTY3OiNpZmRlZiBDT05GSUdfU0VDVVJJVFlfUEFUSFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2OC1CVEZfSUQoZnVuYywgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2VudHJ5X2lwKHVuc2lnbmVkIGxvbmcgZmVudHJ5X2lwKVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzYte1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNzc6I2lmZGVmIENPTkZJR19YODZfS0VSTkVMX0lCVFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzgtXHRpZiAoaXNfZW5kYnIoKHZvaWQgKikoZmVudHJ5X2lwIC0gRU5EQlJfSU5TTl9TSVpFKSkpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwODQ9QlBGX0NBTExfMShicGZfZ2V0X2Z1bmNfaXBfa3Byb2JlLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDg4LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwODk6I2lmZGVmIENPTkZJR19VUFJPQkVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA5MC1cdHJ1bl9jdHggPSBjb250YWluZXJfb2YoY3VycmVudC1cdTAwM2VicGZfY3R4LCBzdHJ1Y3QgYnBmX3RyYWNlX3J1bl9jdHgsIHJ1bl9jdHgpO1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMjc0PWJwZl90cmFjaW5nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODAtXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTI4MTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4Mi1cdGNhc2UgQlBGX0ZVTkNfcHJvYmVfcmVhZDpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTM0Mz1rcHJvYmVfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUxLVx0XHRyZXR1cm4gcHJvZy1cdTAwM2VzbGVlcGFibGUgPyBcdTAwMjZicGZfZ2V0X3N0YWNrX3NsZWVwYWJsZV9wcm90byA6IFx1MDAyNmJwZl9nZXRfc3RhY2tfcHJvdG87XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM1MjojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUzLVx0Y2FzZSBCUEZfRlVOQ19vdmVycmlkZV9yZXR1cm46XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE3MjY9dHJhY2luZ19wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzAtXHRzd2l0Y2ggKGZ1bmNfaWQpIHtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzMxOiNpZmRlZiBDT05GSUdfTkVUXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMi1cdGNhc2UgQlBGX0ZVTkNfc2tiX291dHB1dDpcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgyOD1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHJhd190cmFjZXBvaW50X3Byb2dfb3BzID0ge1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4Mjk6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODMwLVx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjA5PWludCBicGZfZ2V0X3BlcmZfZXZlbnRfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHUzMiAqcHJvZ19pZCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI0My1cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI0NDojaWZkZWYgQ09ORklHX0tQUk9CRV9FVkVOVFNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ1LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX0tQUk9CRSlcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI0OS0jZW5kaWZcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjUwOiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNTEtXHRcdGlmIChmbGFncyBcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfVVBST0JFKVxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjczPXN1YnN5c19pbml0Y2FsbChzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc0LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNzU6I2lmZGVmIENPTkZJR19NT0RVTEVTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Ni1zdGF0aWMgaW50IGJwZl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBvcCxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjMyOT1zdHJ1Y3QgYnBmX3Nlc3Npb25fcnVuX2N0eCB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzQtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjMzNTojaWZkZWYgQ09ORklHX0ZQUk9CRVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzYtc3RydWN0IGJwZl9rcHJvYmVfbXVsdGlfbGluayB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzNTI9c3RydWN0IHVzZXJfc3ltcyB7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzNTYtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjM1NzojaWZuZGVmIENPTkZJR19IQVZFX0ZUUkFDRV9SRUdTX0hBVklOR19QVF9SRUdTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjM1OC1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MsIGJwZl9rcHJvYmVfbXVsdGlfcHRfcmVncyk7XG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI0NDg9c3RhdGljIGludCBicGZfa3Byb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk3LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI0OTg6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5OS1zdGF0aWMgdm9pZCBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjUyND1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfa3Byb2JlX211bHRpX2xpbmtfbG9wcyA9IHtcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyNy1cdC5maWxsX2xpbmtfaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNTI4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MjktXHQuc2hvd19mZGluZm8gPSBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yOTQzPXN0YXRpYyB1NjQgYnBmX2twcm9iZV9tdWx0aV9lbnRyeV9pcChzdHJ1Y3QgYnBmX3J1bl9jdHggKmN0eClcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk0OC1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTQ5OiNpZmRlZiBDT05GSUdfVVBST0JFU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI5NTAtc3RydWN0IGJwZl91cHJvYmVfbXVsdGlfbGluaztcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzAwNz1zdGF0aWMgaW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzMtXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzA3NDojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMDc1LXN0YXRpYyB2b2lkIGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMTE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTE4LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMxMTk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzEyMC1cdC5zaG93X2ZkaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2Nzk9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjgwLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM2ODE6I2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTKSBcdTAwMjZcdTAwMjYgXFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNjgyLSAgICBkZWZpbmVkKENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QUylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU1LVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc1Ny1zdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg3OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODgtXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5MDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb246CgoqKk5hdmlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIExhYnlyaW50aCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsYW5kZWQgb24gbGluZSAzNjgxLCBhbmQgaXQmIzM5O3Mgc3RhcmluZyBtZSByaWdodCBpbiB0aGUgZmFjZTogYSBgI2lmYCBzdGF0ZW1lbnQhIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdGhhdCBjb21wbGV4IGNvbmRpdGlvbmFsIGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMuCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIFRoaXMgaXMgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3BlY2lmaWMgZmVhdHVyZSwgcHJlc3VtYWJseSByZWxhdGVkIHRvIGR5bmFtaWMgZnVuY3Rpb24gdHJhY2luZywgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkaXJlY3QgY2FsbHMgb3B0aW1pemF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCAqdGhpcyogaXMgd2hlcmUgdGhlIGRlY2lzaW9uIGlzIG1hZGUuJiMzNDsgU28sIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIHBhdGggaXMgZXhlY3V0ZWQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGluIHdoYXQgc2l0dWF0aW9uIGRvZXMgdGhlIGJsb2NrIG9mIGNvZGUgaW5zaWRlIHRoaXMgI2lmLCBleGVjdXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzY4MDpcdFxuMzY4MTpcdCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXHUwMDI2XHUwMDI2IFxcXG4zNjgyOlx0ICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxuMzY4MzpcdFxuMzY4NDpcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4zNjg1Olx0e1xuMzY4NjpcdFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKnRyX2xpbmsgPVxuMzY4NzpcdFx0XHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xuMzY4ODpcdFxuMzY4OTpcdFx0V0FSTl9PTl9PTkNFKGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLVx1MDAzZXByb2csIHRyX2xpbmspKTtcbjM2OTA6XHR9XG4zNjkxOlx0XG4zNjkyOlx0c3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbjM2OTM6XHR7XG4zNjk0Olx0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XG4zNjk1Olx0XHRcdGNvbnRhaW5lcl9vZihsaW5rLCBzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluaywgbGluayk7XG4zNjk2Olx0XG4zNjk3Olx0XHRrdmZyZWUodHJfbGluay1cdTAwM2VmZXhpdHMpO1xuMzY5ODpcdFx0a3ZmcmVlKHRyX2xpbmstXHUwMDNlY29va2llcyk7XG4zNjk5Olx0XHRrdmZyZWUodHJfbGluayk7XG4zNzAwOlx0fVxuMzcwMTpcdFxuMzcwMjpcdHN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4zNzAzOlx0XHRcdFx0XHRcdFx0IHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxuMzcwNDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2NTQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBUcmFjaW5nIExpbmsgSW5mb3JtYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O3ZlIHBpbnBvaW50ZWQgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGFzIGJlaW5nIGdhdGVkIGJlaGluZCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AuIEV4Y2VsbGVudCwgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXNlIGNvbmZpZ3MgcGxheSB0b2dldGhlciBhbmQgaG93IHRoZXkgbWlnaHQgaW1wYWN0IHRoZSB1c2FiaWxpdHkgb2YgdGhpcyBmZWF0dXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLiBJIHJlY2FsbCBgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYCBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggeDg2LiBBbmQsIGlmIEkmIzM5O20gcmVtZW1iZXJpbmcgY29ycmVjdGx5LCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBpcyBhbHNvIG9mdGVuIGVuYWJsZWQgYnkgeDg2LiBTbywgYXJlIHRoZXNlIGNvbmZpZ3MgZXhwb3NlZCBhcyB1c2VyIG9wdGlvbnM/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGFyZSBzb21ldGhpbmcgYSB1c2VyIGNhbiBjb250cm9sIGRpcmVjdGx5LCBvciBpZiB0aGV5IGFyZSBqdXN0IGJlaW5nIGltcGxpY2l0bHkgZW5hYmxlZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBlaXRoZXIgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBvciBgYXJjaC94ODYvS2NvbmZpZ2AgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IHVzZXItZmFjaW5nIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlbS4gVGhpcyB3aWxsIHRlbGwgbWUgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgc29tZXRoaW5nIHRoZSB1c2VyIG5lZWRzIHRvIGJlIGF3YXJlIG9mIG9yIGlmIHRoaXMgaXMgYW4geDg2LXNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTMyND1jb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxua2VybmVsL3RyYWNlL0tjb25maWc6MzI5OmNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1xua2VybmVsL3RyYWNlL0tjb25maWctMzMwLVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzIxNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgRHluYW1pYyBGdHJhY2UgQm9vbGVhbiBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGRlZl9ib29sIHlgIGRlZmluaXRpb24uIFRoaXMgaXMgY2xlYXJseSBjb250aW5nZW50IG9uIHRoZSBpbnRlcnBsYXkgb2YgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYW5kIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8gcmVsYXRlZCB0byBmdW5jdGlvbiB0cmFjaW5nLiBUaGlzIHJlbWluZHMgbWUgb2Ygc29tZSBwb3RlbnRpYWwgaXNzdWVzIGludm9sdmluZyByZWdpc3RlciB1c2FnZSB3aXRoIGR5bmFtaWMgZnRyYWNlLiBXZSBuZWVkIGEgYm9vbGVhbiB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYHlgLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYHlgIHJlcHJlc2VudHMgdGhlIHNldHRpbmcgZm9yIHRoZSB1c2Ugb2YgZHluYW1pYyBmdHJhY2UuCgpCZWZvcmUgZ29pbmcgZnVydGhlciwgaXQgd291bGQgYmUgbG9naWNhbCB0byBjaGVjayBgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBUaGlzIGlzIGxpa2VseSByZWxldmFudC4gSXQgc2VlbXMgbGlrZSB0aGUgYXJjaGl0ZWN0dXJlIG1heSBoYXZlIGl0cyBvd24gaW1wbGVtZW50YXRpb24uIEl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRpcmVjdCBvcGVyYXRpb25zIHBhdGguIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29ycmVjdCBkZWZhdWx0IHZhbHVlIGZvciBgeWAuIFRoaXMgY2hlY2tzIGEgc2luZ2xlIGZ0cmFjZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaWYgaXQgYWxsb3dzIHRoZSBkaXJlY3Qgb3BlcmF0aW9ucyBwYXRoLiBUaGUgdmFsdWUgbWF5IGJlIHVzZWQgdG8gYWxsb3cvZGlzYWxsb3cgdGhlIGB5YCB2YXJpYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTUwPWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNTItXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1Mzpjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcbmtlcm5lbC90cmFjZS9LY29uZmlnLTU0LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYzNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipIaWRkZW4gQm9vbGVhbnMgYW5kIENvbmZpZ3VyYXRpb24gRGV0YWlscyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgaGlkZGVuIGJvb2xlYW4gaGVyZS4gVGhhdCBtZWFucyB3ZSBkb24mIzM5O3QgbmVlZCB0byBleHBvc2UgaXQgZGlyZWN0bHkgdG8gdGhlIHVzZXIgaW4gYEVuYWJsZUNvbmZpZ3NgLiBJdCYjMzk7cyBub3Qgc29tZXRoaW5nIHRoZXkgY2FuIGRpcmVjdGx5IHNlbGVjdCBvciBkZXNlbGVjdC4gSG93ZXZlciwgaXQgc2VlbXMgY3J1Y2lhbCB0byB0aGUgZnVuY3Rpb25hbGl0eSwgc28gd2UgKmRvKiBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBleHBsaWNpdGx5IHNwZWNpZnkgYENPTkZJR19CUEZfRVZFTlRTYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEhvbGQgb24gYSBzZWNvbmQuLi4gSSB0aGluayBgQ09ORklHX0JQRl9FVkVOVFNgICppcyogYWN0dWFsbHkgdXNlci1zZWxlY3RhYmxlLCBpc24mIzM5O3QgaXQ/IEJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIHZlcmlmeSBpZiBgQ09ORklHX0JQRl9FVkVOVFNgIGNhbiBiZSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfRVZFTlRTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnPTgzOT1jb25maWcgRVBST0JFX0VWRU5UU1xuLS1cbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cbmtlcm5lbC90cmFjZS9LY29uZmlnOjg1Mzpjb25maWcgQlBGX0VWRU5UU1xua2VybmVsL3RyYWNlL0tjb25maWctODU0LVx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMSAyMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzk5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgQlBGLUJhc2VkIFRyYWNpbmcqKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgZm9yIEJQRi1iYXNlZCB0cmFjaW5nLiBSaWdodCwgYEJQRl9FVkVOVFNgIGlzIGRlZmluaXRlbHkgdXNlci1zZWxlY3RhYmxlLCBzbyBJIHNob3VsZCBiZSBnb29kIHRoZXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9FVkVOVFNgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSBib3RoIGluY2x1ZGVkLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgd2hhdCBhYm91dCBgRlBST0JFYCBvciBgS1BST0JFU2A/IExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgZm9yIHRoYXQgaXMgdHVja2VkIGF3YXkgdW5kZXIgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AsIHdoaWNoIGl0c2VsZiBkZXBlbmRzIG9uIGBEWU5BTUlDX0ZUUkFDRV9XSVRIX1JFR1NgLCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24gYEZUUkFDRWAuIEFscmlnaHQsIHNvIGBGVFJBQ0VgIGlzICphYnNvbHV0ZWx5KiBuZWVkZWQsIGFuZCBgRFlOQU1JQ19GVFJBQ0VgIGFzIHdlbGwuIFRoYXTigJlzIGFsbCBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKQnV0IG5vdyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfRVZFTlRTYCBhcmUgY29ycmVjdC4gYEJQRl9FVkVOVFNgIGFsc28gZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgIGFuZCB0aGVuIGRlcGVuZHMgb24gYSBmZXcgb3RoZXIgdGhpbmdzLCBlaXRoZXIgYEtQUk9CRV9FVkVOVFNgLCBgVVBST0JFX0VWRU5UU2AsIG9yIGBQRVJGX0VWRU5UU2AuIEhhbmcgb27igKYgaXQmIzM5O3MgYEJQRl9TWVNDQUxMYCAqYW5kKiBgS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTIHx8IFBFUkZfRVZFTlRTYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgb25lIG9mIHRob3NlIGxhc3QgdGhyZWUgZW5hYmxlZCwgYXMgYEJQRl9TWVNDQUxMYCBkZXBlbmRzIG9uIG9uZSBvZiB0aG9zZSwgYW5kIHRoZSB3aG9sZSB0aGluZyBoaW5nZXMgb24gdGhhdC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBnbyBhbmQgZG91YmxlLWNoZWNrIGBrZXJuZWwvdHJhY2UvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGZvciBgQlBGX0VWRU5UU2AuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHQgIGNvbnZlcnQgdGhlIHR5cGUgb2YgYW4gZXZlbnQgZmllbGQuIEZvciBleGFtcGxlLCB0dXJuIGFuXG4gODUxOlx0XHQgIGFkZHJlc3MgaW50byBhIHN0cmluZy5cbiA4NTI6XHRcbiA4NTM6XHRjb25maWcgQlBGX0VWRU5UU1xuIDg1NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDg1NTpcdFx0ZGVwZW5kcyBvbiAoS1BST0JFX0VWRU5UUyB8fCBVUFJPQkVfRVZFTlRTKSBcdTAwMjZcdTAwMjYgUEVSRl9FVkVOVFNcbiA4NTY6XHRcdGJvb2xcbiA4NTc6XHRcdGRlZmF1bHQgeVxuIDg1ODpcdFx0aGVscFxuIDg1OTpcdFx0ICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBhdHRhY2ggQlBGIHByb2dyYW1zIHRvIGtwcm9iZSwgdXByb2JlLCBhbmRcbiA4NjA6XHRcdCAgdHJhY2Vwb2ludCBldmVudHMuXG4gODYxOlx0XG4gODYyOlx0Y29uZmlnIERZTkFNSUNfRVZFTlRTXG4gODYzOlx0XHRkZWZfYm9vbCBuXG4gODY0Olx0XG4gODY1Olx0Y29uZmlnIFBST0JFX0VWRU5UU1xuIDg2NjpcdFx0ZGVmX2Jvb2wgblxuIDg2NzpcdFxuIDg2ODpcdGNvbmZpZyBCUEZfS1BST0JFX09WRVJSSURFXG4gODY5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgcHJvZ3JhbXMgdG8gb3ZlcnJpZGUgYSBrcHJvYmVkIGZ1bmN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgRXZlbnQgQ29uZmlndXJhdGlvbiBhbmQgVHJhY2luZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBCUEZfRVZFTlRTYCBpcyBhIGJvb2xlYW4gdmFsdWUgdGhhdCYjMzk7cyBhdXRvbWF0aWNhbGx5IHNldCB0byAmIzM5O3kmIzM5OyAoeWVzKSBpZiBpdHMgZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQuIFRoYXQgbWVhbnMgaXQmIzM5O3Mgbm90IGEgZGlyZWN0IHVzZXIgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCByYXRoZXIsIGl0cyBkZXBlbmRlbmNpZXMgYXJlLiBUaGUgZGVwZW5kZW5jaWVzIGFyZSBgQlBGX1NZU0NBTExgLCBgS1BST0JFX0VWRU5UU2AsIGBVUFJPQkVfRVZFTlRTYCwgYW5kIGBQRVJGX0VWRU5UU2AuIEdvdCBpdC4gU28sIHJlYWxseSwgd2hhdCB3ZSBuZWVkIHRvIGZvY3VzIG9uIGFyZSB0aG9zZSBkZXBlbmRlbmNpZXMuIFdlIGNhbiBqdXN0IGxpc3QgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9FVkVOVFNgLCBldmVuIHRob3VnaCBgQlBGX0VWRU5UU2AgZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTssIFN5emthbGxlciBoYW5kbGVzIHRoaXMuCgpOb3csIGxldCYjMzk7cyBzZWUsIHdoYXQmIzM5O3MgdGhlIG1haW4gZnVuY3Rpb24gdG8gZm9jdXMgb24gaGVyZSwgcmVnYXJkaW5nIHRoZSBjb2RlIGFkZGVkIGJ5IHRoaXMgcGF0Y2g/IElzIGl0IGp1c3QgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gPyBZZXMsIHNlZW1zIGxpa2UgaXQuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgZnVuY3Rpb24gYWRkZWQuIEFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBhbHNvIG1vZGlmaWVkLCBidXQgaXQmIzM5O3Mgbm90IGFsbG9jYXRpbmcgYW55dGhpbmcgbmV3LiBJdCYjMzk7cyBtb2RpZnlpbmcgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGFuZCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzYCwgbm90IHRoZSBhbGxvY2F0aW9uIGl0c2VsZi4gUmlnaHQsIG5vLCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBhbHJlYWR5IGhhbmRsZWQgYGlkc2AgYW5kIGBjb29raWVzYCBhbGxvY2F0aW9uLiBJdCYjMzk7cyByZWFsbHkganVzdCB0aGUgbGluayBpbmZvIGFuZCBvcGVyYXRpb25zLiBIYW5nIG9uLCBsZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGRpZmYgYWdhaW4sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIxIDIxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2OTI9c3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcbi0tXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzcwMS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzAyOnN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzcwMy1cdFx0XHRcdFx0XHQgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4tLVxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuLS1cbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg1LVx0LmRlYWxsb2NfZGVmZXJyZWQgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2MsXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4NjpcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4Ny0jaWZkZWYgQ09ORklHX1BST0NfRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MTUKCQkJCQkJCW91dHB1dDogMTc4CgkJCQkJCQl0aG91Z2h0czogNTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBCUEYgVHJhY2luZyBNdWx0aS1MaW5rIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gLCB3aGljaCBpcyBiZWluZyBhc3NpZ25lZCBhcyB0aGUgYC5maWxsX2xpbmtfaW5mb2AgZnVuY3Rpb24gd2l0aGluIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHNgLiBUaGF0JiMzOTtzIHRoZSBrZXkga2VybmVsIGZ1bmN0aW9uIHdlJiMzOTtyZSBhZGRpbmcuIFRoZSByZXN0IG9mIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb25maW5lZCB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzbyB0aGUgY29yZSBsb2dpYyByZXNpZGVzIGluIHRoYXQgb25lIGZ1bmN0aW9uLgoKVGhlcmVmb3JlLCBmb3Igb3VyIGZ1enppbmcgdGFyZ2V0cywgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AuIE5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7bGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AsIG9mIGNvdXJzZS4KCkhtbSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEFoYSwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGFyZSBwcmVyZXF1aXNpdGVzIGZvciBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgdG8gY29tcGlsZSwgYnV0IHRoZXNlIGFyZSBzZWxlY3RlZCBieSBgRlRSQUNFYCBhbmQgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBwcm9iYWJseSBzYWZlc3QgdG8gYWRkIGBGVFJBQ0VgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCB0byBlbnN1cmUgZnVsbCBjb3ZlcmFnZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSByZWFjaGFiaWxpdHkuIFRoZSBmdW5jdGlvbiBpcyBhY2Nlc3NlZCB2aWEgdGhlIGBicGYoQlBGX09CSl9HRVRfSU5GT19CWV9GRCwgLi4uKWAgc3lzY2FsbCBvbiBhIHRyYWNpbmcgbXVsdGkgbGluayBmaWxlIGRlc2NyaXB0b3IuIFdlIGdldCBvbmUgb2YgdGhvc2UgYnkgY2FsbGluZyBgYnBmKEJQRl9MSU5LX0NSRUFURSwgLi4uKWAgd2l0aCBgYXR0YWNoX3R5cGVgIHNldCB0byBlaXRoZXIgYEJQRl9UUkFDRV9GRU5UUllfTVVMVElgLCBgQlBGX1RSQUNFX0ZFWElUX01VTFRJYCwgb3IgYEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSWAuIFllcCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdmlhYmxlIGNvZGUgcGF0aC4gTm8gZGVhZCBjb2RlIHRoZXJlIQoKT2theSwgbGV0JiMzOTtzIHdyaXRlIHRoaXMgdXAgbmVhdGx5LgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzOiBbJiMzNDticGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0JQRl9TWVNDQUxMJiMzNDssICYjMzQ7QlBGX0VWRU5UUyYjMzQ7LCAmIzM0O0ZUUkFDRSYjMzQ7LCAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDtdYAoqICAgYFJlYXNvbmluZzogVGhlIHBhdGNoIGVuYWJsZXMgdGhlIGBmaWxsX2xpbmtfaW5mb2AgZnVuY3Rpb25hbGl0eSBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgbGV0cyB1c2Vyc3BhY2UgcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgbXVsdGkgbGlua3MgdmlhIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCB0aHJvdWdoIHRoZSBicGYgc3lzY2FsbC4gU3BlY2lmaWNhbGx5LCB0aGUgbmV3IGZ1bmN0aW9uIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGNvcGllcyBkYXRhIGJhY2sgdG8gdXNlcnNwYWNlLiBTaW5jZSBpdCYjMzk7cyByZWFjaGFibGUgYW5kIGRhdGEgdHJhbnNmZXIgb2NjdXJzLCBpdCByZXF1aXJlcyBmdXp6aW5nLmAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjEgMjE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9FVkVOVFMmIzM0OywKICAgICYjMzQ7RlRSQUNFJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowMzozOS4yNDYyMzEwNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQyMDQ0Nzk5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZmlsbF9saW5rX2luZm9gIHN1cHBvcnQgZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgIGxpbmtzLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdHJhY2luZyBtdWx0aSBsaW5rcyB2aWEgdGhlIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCBjb21tYW5kIG9mIHRoZSBgYnBmYCBzeXNjYWxsLiBUaGUgbmV3IGZ1bmN0aW9uIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGNvcGllcyBkYXRhIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowMzozOS4yNDYyMzU1ODlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODg0MTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMzZWY3OGM3MGYwODM0ZWQ5ZTA0NWY1YWVlZDU0MjIzNTIwYmY1MmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdW4gMjEgMjE6MDM6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuaW5kZXggODliMzZkZTVmZGJiNmQuLjgwNDIzY2NjNmI1N2M3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxcbkBAIC02ODM5LDYgKzY4MzksMTUgQEAgc3RydWN0IGJwZl9saW5rX2luZm8ge1xcbiBcXHRcXHRcXHRfX3UzMiBmbGFncztcXG4gXFx0XFx0XFx0X191MzIgcGlkO1xcbiBcXHRcXHR9IHVwcm9iZV9tdWx0aTtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0X191MzIgYXR0YWNoX3R5cGU7XFxuK1xcdFxcdFxcdF9fdTMyIGNvdW50OyAvKiBpbi9vdXQ6IHRyYWNpbmdfbXVsdGkgdGFyZ2V0IGNvdW50ICovXFxuK1xcdFxcdFxcdF9fdTMyIG9ial9pZDtcXG4rXFx0XFx0XFx0X191MzIgOjMyO1xcbitcXHRcXHRcXHRfX2FsaWduZWRfdTY0IGlkcztcXG4rXFx0XFx0XFx0X19hbGlnbmVkX3U2NCBhZGRycztcXG4rXFx0XFx0XFx0X19hbGlnbmVkX3U2NCBjb29raWVzO1xcbitcXHRcXHR9IHRyYWNpbmdfbXVsdGk7XFxuIFxcdFxcdHN0cnVjdCB7XFxuIFxcdFxcdFxcdF9fdTMyIHR5cGU7IC8qIGVudW0gYnBmX3BlcmZfZXZlbnRfdHlwZSAqL1xcbiBcXHRcXHRcXHRfX3UzMiA6MzI7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xcbmluZGV4IDgyZjhmZWVhNjkzMTFhLi5mZGFiNGVjNWFkNGY0NSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG4rKysgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcXG5AQCAtMzY5OSw2ICszNjk5LDYwIEBAIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuIFxcdGt2ZnJlZSh0cl9saW5rKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbit7XFxuK1xcdHU2NCBfX3VzZXIgKnVjb29raWVzID0gdTY0X3RvX3VzZXJfcHRyKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuY29va2llcyk7XFxuK1xcdHU2NCBfX3VzZXIgKnVhZGRycyA9IHU2NF90b191c2VyX3B0cihpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmFkZHJzKTtcXG4rXFx0dTMyIF9fdXNlciAqdWlkcyA9IHU2NF90b191c2VyX3B0cihpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmlkcyk7XFxuK1xcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICp0cl9saW5rO1xcbitcXHR1MzIgdWNvdW50ID0gaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDtcXG4rXFx0Ym9vbCBoYXNfY29va2llcywgc2hvd19hZGRycztcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoKHVpZHMgfHwgdWNvb2tpZXMgfHwgdWFkZHJzKSBcXHUwMDI2XFx1MDAyNiAhdWNvdW50KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHRyX2xpbmsgPSBjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xcbitcXG4rXFx0aW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSA9IHRyX2xpbmstXFx1MDAzZWxpbmsuYXR0YWNoX3R5cGU7XFxuK1xcdGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQgPSB0cl9saW5rLVxcdTAwM2Vub2Rlc19jbnQ7XFxuK1xcdGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkub2JqX2lkID0gYnRmX29ial9pZCh0cl9saW5rLVxcdTAwM2VsaW5rLnByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zik7XFxuK1xcbitcXHRpZiAoIXVpZHMgXFx1MDAyNlxcdTAwMjYgIXVjb29raWVzIFxcdTAwMjZcXHUwMDI2ICF1YWRkcnMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHVjb3VudCBcXHUwMDNjIHRyX2xpbmstXFx1MDAzZW5vZGVzX2NudClcXG4rXFx0XFx0ZXJyID0gLUVOT1NQQztcXG4rXFx0ZWxzZVxcbitcXHRcXHR1Y291bnQgPSB0cl9saW5rLVxcdTAwM2Vub2Rlc19jbnQ7XFxuK1xcbitcXHRoYXNfY29va2llcyA9ICEhdHJfbGluay1cXHUwMDNlY29va2llcztcXG4rXFx0c2hvd19hZGRycyA9IGthbGxzeW1zX3Nob3dfdmFsdWUoY3VycmVudF9jcmVkKCkpO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB1Y291bnQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGUgPSBcXHUwMDI2dHJfbGluay1cXHUwMDNlbm9kZXNbaV07XFxuK1xcdFxcdHU2NCBhZGRyLCBjb29raWU7XFxuK1xcdFxcdHUzMiBpZDtcXG4rXFxuK1xcdFxcdGJwZl90cmFtcG9saW5lX3VucGFja19rZXkobW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUtXFx1MDAzZWtleSwgTlVMTCwgXFx1MDAyNmlkKTtcXG4rXFxuK1xcdFxcdGFkZHIgPSBzaG93X2FkZHJzID8gbW5vZGUtXFx1MDAzZXRyYW1wb2xpbmUtXFx1MDAzZWlwIDogMDtcXG4rXFx0XFx0Y29va2llID0gaGFzX2Nvb2tpZXMgPyB0cl9saW5rLVxcdTAwM2Vjb29raWVzW2ldIDogMDtcXG4rXFxuK1xcdFxcdGlmICh1aWRzIFxcdTAwMjZcXHUwMDI2IHB1dF91c2VyKGlkLCB1aWRzICsgaSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRpZiAodWFkZHJzIFxcdTAwMjZcXHUwMDI2IHB1dF91c2VyKGFkZHIsIHVhZGRycyArIGkpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0XFx0aWYgKHVjb29raWVzIFxcdTAwMjZcXHUwMDI2IHB1dF91c2VyKGNvb2tpZSwgdWNvb2tpZXMgKyBpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG5AQCAtMzcyOSw2ICszNzgzLDcgQEAgc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHMgPSB7XFxuIFxcdC5yZWxlYXNlID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19yZWxlYXNlLFxcbiBcXHQuZGVhbGxvY19kZWZlcnJlZCA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyxcXG4rXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuIFxcdC5zaG93X2ZkaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvLFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvbGluay5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvbGluay5jXFxuaW5kZXggYmRjZDcxN2IwMzQ4ZjguLjU4ZGFkZWU5ODRhMDc4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuY1xcbkBAIC0zNzcsNiArMzc3LDMxIEBAIHN0YXRpYyBfX3U2NCAqdTY0X3RvX2FycihfX3U2NCB2YWwpXFxuIFxcdHJldHVybiAoX191NjQgKikgdTY0X3RvX3B0cih2YWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgX191MzIgKnU2NF90b191MzJfYXJyKF9fdTY0IHZhbClcXG4re1xcbitcXHRyZXR1cm4gKF9fdTMyICopdTY0X3RvX3B0cih2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGtlcm5lbF9zeW0gKmZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKF9fdTY0IGFkZHIsIGJvb2wgaXNfaWJ0X2VuYWJsZWQpXFxuK3tcXG4rXFx0c3RydWN0IGtlcm5lbF9zeW0gKnN5bTtcXG4rXFxuK1xcdGlmICghYWRkcilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHQvKiBMb2FkIGl0IG9uY2UgZm9yIGFsbC4gKi9cXG4rXFx0aWYgKCFkZC5zeW1fY291bnQpXFxuK1xcdFxcdGtlcm5lbF9zeW1zX2xvYWQoXFx1MDAyNmRkKTtcXG4rXFx0aWYgKCFkZC5zeW1fY291bnQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0c3ltID0ga2VybmVsX3N5bXNfc2VhcmNoKFxcdTAwMjZkZCwgYWRkcik7XFxuK1xcdGlmICghc3ltIFxcdTAwMjZcXHUwMDI2IGlzX2lidF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2IGFkZHIgXFx1MDAzZT0gNClcXG4rXFx0XFx0c3ltID0ga2VybmVsX3N5bXNfc2VhcmNoKFxcdTAwMjZkZCwgYWRkciAtIDQpO1xcbitcXG4rXFx0cmV0dXJuIHN5bTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWRcXG4gc2hvd191cHJvYmVfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxcbiB7XFxuQEAgLTQwMyw2ICs0MjgsNDMgQEAgc2hvd191cHJvYmVfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxcbiBcXHRqc29ud19lbmRfYXJyYXkoanNvbl93dHIpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZFxcbitzaG93X3RyYWNpbmdfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxcbit7XFxuK1xcdGJvb2wgaXNfaWJ0X2VuYWJsZWQgPSBpc194ODZfaWJ0X2VuYWJsZWQoKTtcXG4rXFx0X191MzIgaTtcXG4rXFxuK1xcdHNob3dfbGlua19hdHRhY2hfdHlwZV9qc29uKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIHd0cik7XFxuK1xcdGpzb253X3VpbnRfZmllbGQod3RyLCBcXFwiZnVuY19jbnRcXFwiLCBpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KTtcXG4rXFx0anNvbndfdWludF9maWVsZCh3dHIsIFxcXCJvYmpfaWRcXFwiLCBpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLm9ial9pZCk7XFxuK1xcdGpzb253X25hbWUod3RyLCBcXFwiZnVuY3NcXFwiKTtcXG4rXFxuK1xcdGpzb253X3N0YXJ0X2FycmF5KHd0cik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDsgaSsrKSB7XFxuK1xcdFxcdF9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuYWRkcnMpW2ldO1xcbitcXHRcXHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xcbitcXG4rXFx0XFx0c3ltID0gZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoYWRkciwgaXNfaWJ0X2VuYWJsZWQpO1xcbitcXG4rXFx0XFx0anNvbndfc3RhcnRfb2JqZWN0KHd0cik7XFxuK1xcdFxcdGpzb253X3VpbnRfZmllbGQod3RyLCBcXFwiaWRcXFwiLCB1NjRfdG9fdTMyX2FycihpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmlkcylbaV0pO1xcbitcXHRcXHRqc29ud191aW50X2ZpZWxkKHd0ciwgXFxcImFkZHJcXFwiLCBhZGRyKTtcXG4rXFx0XFx0aWYgKHN5bSkge1xcbitcXHRcXHRcXHRqc29ud19zdHJpbmdfZmllbGQod3RyLCBcXFwiZnVuY1xcXCIsIHN5bS1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdFxcdGlmIChzeW0tXFx1MDAzZW1vZHVsZVswXSA9PSAnXFxcXDAnKSB7XFxuK1xcdFxcdFxcdFxcdGpzb253X25hbWUod3RyLCBcXFwibW9kdWxlXFxcIik7XFxuK1xcdFxcdFxcdFxcdGpzb253X251bGwod3RyKTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0anNvbndfc3RyaW5nX2ZpZWxkKHd0ciwgXFxcIm1vZHVsZVxcXCIsIHN5bS1cXHUwMDNlbW9kdWxlKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGpzb253X3VpbnRfZmllbGQod3RyLCBcXFwiY29va2llXFxcIiwgdTY0X3RvX2FycihpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcXG4rXFx0XFx0anNvbndfZW5kX29iamVjdCh3dHIpO1xcbitcXHR9XFxuK1xcdGpzb253X2VuZF9hcnJheSh3dHIpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBzaG93X3BlcmZfZXZlbnRfa3Byb2JlX2pzb24oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8sIGpzb25fd3JpdGVyX3QgKnd0cilcXG4ge1xcbkBAIC01ODksNiArNjUxLDkgQEAgc3RhdGljIGludCBzaG93X2xpbmtfY2xvc2VfanNvbihpbnQgZmQsIHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbiBcXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxcbiBcXHRcXHRzaG93X3Vwcm9iZV9tdWx0aV9qc29uKGluZm8sIGpzb25fd3RyKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJOlxcbitcXHRcXHRzaG93X3RyYWNpbmdfbXVsdGlfanNvbihpbmZvLCBqc29uX3d0cik7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9MSU5LX1RZUEVfUEVSRl9FVkVOVDpcXG4gXFx0XFx0c3dpdGNoIChpbmZvLVxcdTAwM2VwZXJmX2V2ZW50LnR5cGUpIHtcXG4gXFx0XFx0Y2FzZSBCUEZfUEVSRl9FVkVOVF9FVkVOVDpcXG5AQCAtODMzLDYgKzg5OCwzOCBAQCBzdGF0aWMgdm9pZCBzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzaG93X3RyYWNpbmdfbXVsdGlfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0Ym9vbCBpc19pYnRfZW5hYmxlZCA9IGlzX3g4Nl9pYnRfZW5hYmxlZCgpO1xcbitcXHRfX3UzMiBpO1xcbitcXG4rXFx0aWYgKCFpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwcmludGYoXFxcIlxcXFxuXFxcXHRcXFwiKTtcXG4rXFx0c2hvd19saW5rX2F0dGFjaF90eXBlX3BsYWluKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUpO1xcbitcXHRwcmludGYoXFxcIm9ial9pZCAldSAgXFxcIiwgaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5vYmpfaWQpO1xcbitcXHRwcmludGYoXFxcImNvdW50ICV1ICBcXFwiLCBpbmZvLVxcdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KTtcXG4rXFxuK1xcdHByaW50ZihcXFwiXFxcXG5cXFxcdCUtMTZzICUtMTZzICUtMTZzICVzXFxcIixcXG4rXFx0ICAgICAgIFxcXCJidGZfaWRcXFwiLCBcXFwiYWRkclxcXCIsIFxcXCJjb29raWVcXFwiLCBcXFwiZnVuYyBbbW9kdWxlXVxcXCIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDsgaSsrKSB7XFxuK1xcdFxcdF9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuYWRkcnMpW2ldO1xcbitcXHRcXHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xcbitcXG4rXFx0XFx0c3ltID0gZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoYWRkciwgaXNfaWJ0X2VuYWJsZWQpO1xcbitcXG4rXFx0XFx0cHJpbnRmKFxcXCJcXFxcblxcXFx0JS0xNnUgJTAxNmxseCAlLTE2bGx4XFxcIixcXG4rXFx0XFx0ICAgICAgIHU2NF90b191MzJfYXJyKGluZm8tXFx1MDAzZXRyYWNpbmdfbXVsdGkuaWRzKVtpXSxcXG4rXFx0XFx0ICAgICAgIGFkZHIsIHU2NF90b19hcnIoaW5mby1cXHUwMDNldHJhY2luZ19tdWx0aS5jb29raWVzKVtpXSk7XFxuK1xcdFxcdGlmIChzeW0pIHtcXG4rXFx0XFx0XFx0cHJpbnRmKFxcXCIgJXNcXFwiLCBzeW0tXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRpZiAoc3ltLVxcdTAwM2Vtb2R1bGVbMF0gIT0gJ1xcXFwwJylcXG4rXFx0XFx0XFx0XFx0cHJpbnRmKFxcXCIgWyVzXVxcXCIsIHN5bS1cXHUwMDNlbW9kdWxlKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHNob3dfcGVyZl9ldmVudF9rcHJvYmVfcGxhaW4oc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqYnVmO1xcbkBAIC05ODksNiArMTA4Niw5IEBAIHN0YXRpYyBpbnQgc2hvd19saW5rX2Nsb3NlX3BsYWluKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXFxuIFxcdGNhc2UgQlBGX0xJTktfVFlQRV9VUFJPQkVfTVVMVEk6XFxuIFxcdFxcdHNob3dfdXByb2JlX211bHRpX3BsYWluKGluZm8pO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEk6XFxuK1xcdFxcdHNob3dfdHJhY2luZ19tdWx0aV9wbGFpbihpbmZvKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxcbiBcXHRcXHRzd2l0Y2ggKGluZm8tXFx1MDAzZXBlcmZfZXZlbnQudHlwZSkge1xcbiBcXHRcXHRjYXNlIEJQRl9QRVJGX0VWRU5UX0VWRU5UOlxcbkBAIC0xMDI5LDYgKzExMjksNyBAQCBzdGF0aWMgaW50IHNob3dfbGlua19jbG9zZV9wbGFpbihpbnQgZmQsIHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbiBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpXFxuIHtcXG4gXFx0X191NjQgKnJlZl9jdHJfb2Zmc2V0cyA9IE5VTEwsICpvZmZzZXRzID0gTlVMTCwgKmNvb2tpZXMgPSBOVUxMO1xcbitcXHRfX3UzMiAqaWRzID0gTlVMTDtcXG4gXFx0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcXG4gXFx0X191MzIgbGVuID0gc2l6ZW9mKGluZm8pO1xcbiBcXHRjaGFyIHBhdGhfYnVmW1BBVEhfTUFYXTtcXG5AQCAtMTExNCw2ICsxMjE1LDM5IEBAIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZClcXG4gXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdGlmIChpbmZvLnR5cGUgPT0gQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhaW5mby50cmFjaW5nX211bHRpLmlkcykge1xcbitcXHRcXHRjb3VudCA9IGluZm8udHJhY2luZ19tdWx0aS5jb3VudDtcXG4rXFx0XFx0aWYgKGNvdW50KSB7XFxuK1xcdFxcdFxcdGlkcyA9IGNhbGxvYyhjb3VudCwgc2l6ZW9mKF9fdTMyKSk7XFxuK1xcdFxcdFxcdGlmICghaWRzKSB7XFxuK1xcdFxcdFxcdFxcdHBfZXJyKFxcXCJtZW0gYWxsb2MgZmFpbGVkXFxcIik7XFxuK1xcdFxcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcXG4rXFxuK1xcdFxcdFxcdGFkZHJzID0gY2FsbG9jKGNvdW50LCBzaXplb2YoX191NjQpKTtcXG4rXFx0XFx0XFx0aWYgKCFhZGRycykge1xcbitcXHRcXHRcXHRcXHRwX2VycihcXFwibWVtIGFsbG9jIGZhaWxlZFxcXCIpO1xcbitcXHRcXHRcXHRcXHRmcmVlKGlkcyk7XFxuK1xcdFxcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aW5mby50cmFjaW5nX211bHRpLmFkZHJzID0gcHRyX3RvX3U2NChhZGRycyk7XFxuK1xcbitcXHRcXHRcXHRjb29raWVzID0gY2FsbG9jKGNvdW50LCBzaXplb2YoX191NjQpKTtcXG4rXFx0XFx0XFx0aWYgKCFjb29raWVzKSB7XFxuK1xcdFxcdFxcdFxcdHBfZXJyKFxcXCJtZW0gYWxsb2MgZmFpbGVkXFxcIik7XFxuK1xcdFxcdFxcdFxcdGZyZWUoYWRkcnMpO1xcbitcXHRcXHRcXHRcXHRmcmVlKGlkcyk7XFxuK1xcdFxcdFxcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSBwdHJfdG9fdTY0KGNvb2tpZXMpO1xcbitcXHRcXHRcXHRnb3RvIGFnYWluO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0aWYgKGluZm8udHlwZSA9PSBCUEZfTElOS19UWVBFX1BFUkZfRVZFTlQpIHtcXG4gXFx0XFx0c3dpdGNoIChpbmZvLnBlcmZfZXZlbnQudHlwZSkge1xcbiBcXHRcXHRjYXNlIEJQRl9QRVJGX0VWRU5UX1RSQUNFUE9JTlQ6XFxuQEAgLTExNTMsNiArMTI4Nyw3IEBAIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZClcXG4gXFx0ZnJlZShjb29raWVzKTtcXG4gXFx0ZnJlZShvZmZzZXRzKTtcXG4gXFx0ZnJlZShhZGRycyk7XFxuK1xcdGZyZWUoaWRzKTtcXG4gXFx0Y2xvc2UoZmQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uODA0MjNjY2M2YjU3YzcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXFxuQEAgLTY4MzksNiArNjgzOSwxNSBAQCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyB7XFxuIFxcdFxcdFxcdF9fdTMyIGZsYWdzO1xcbiBcXHRcXHRcXHRfX3UzMiBwaWQ7XFxuIFxcdFxcdH0gdXByb2JlX211bHRpO1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHRfX3UzMiBhdHRhY2hfdHlwZTtcXG4rXFx0XFx0XFx0X191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi9cXG4rXFx0XFx0XFx0X191MzIgb2JqX2lkO1xcbitcXHRcXHRcXHRfX3UzMiA6MzI7XFxuK1xcdFxcdFxcdF9fYWxpZ25lZF91NjQgaWRzO1xcbitcXHRcXHRcXHRfX2FsaWduZWRfdTY0IGFkZHJzO1xcbitcXHRcXHRcXHRfX2FsaWduZWRfdTY0IGNvb2tpZXM7XFxuK1xcdFxcdH0gdHJhY2luZ19tdWx0aTtcXG4gXFx0XFx0c3RydWN0IHtcXG4gXFx0XFx0XFx0X191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovXFxuIFxcdFxcdFxcdF9fdTMyIDozMjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmlsbF9saW5rX2luZm8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmNcXG5pbmRleCBmNTg5ZWVmYmY5ZmJkNS4uOTY5ZjA0ZWU5YWM2YWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvZmlsbF9saW5rX2luZm8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmNcXG5AQCAtNCw2ICs0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9idGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInRyYWNlX2hlbHBlcnMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRlc3RfZmlsbF9saW5rX2luZm8uc2tlbC5oXFxcIlxcbkBAIC0yNCw2ICsyNSwyMiBAQCBzdGF0aWMgX191NjQga211bHRpX2Nvb2tpZXNbXSA9IHsgMywgMSwgMiB9O1xcbiAjZGVmaW5lIEtQUk9CRV9GVU5DIFxcXCJicGZfZmVudHJ5X3Rlc3QxXFxcIlxcbiBzdGF0aWMgX191NjQga3Byb2JlX2FkZHI7XFxuIFxcbitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRtdWx0aV9zeW1zW10gPSB7XFxuK1xcdFxcXCJicGZfZmVudHJ5X3Rlc3QyXFxcIixcXG4rXFx0XFxcImJwZl9mZW50cnlfdGVzdDFcXFwiLFxcbitcXHRcXFwiYnBmX2ZlbnRyeV90ZXN0M1xcXCIsXFxuK307XFxuK1xcbitzdGF0aWMgX191NjQgdG11bHRpX2Nvb2tpZXNbXSA9IHsgMzAsIDEwLCAyMCB9O1xcbisjZGVmaW5lIFRSQUNJTkdfTVVMVElfQ05UIEFSUkFZX1NJWkUodG11bHRpX3N5bXMpXFxuK1xcbitzdHJ1Y3QgdG11bHRpX3RhcmdldCB7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdF9fdTY0IGFkZHI7XFxuK1xcdF9fdTY0IGNvb2tpZTtcXG4rXFx0X191MzIgaWQ7XFxuK307XFxuK1xcbiAjZGVmaW5lIFVQUk9CRV9GSUxFIFxcXCIvcHJvYy9zZWxmL2V4ZVxcXCJcXG4gc3RhdGljIHNzaXplX3QgdXByb2JlX29mZnNldDtcXG4gLyogdXByb2JlIGF0dGFjaCBwb2ludCAqL1xcbkBAIC0zOTYsNiArNDEzLDIyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X2twcm9iZV9tdWx0aV9maWxsX2xpbmtfaW5mbyhzdHJ1Y3QgdGVzdF9maWxsX2xpbmtfaW5mbyAqc2tlbCxcXG4gXFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdG11bHRpX3RhcmdldF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGEgPSBhO1xcbitcXHRjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGIgPSBiO1xcbitcXG4rXFx0cmV0dXJuICh0YS1cXHUwMDNlaWQgXFx1MDAzZSB0Yi1cXHUwMDNlaWQpIC0gKHRhLVxcdTAwM2VpZCBcXHUwMDNjIHRiLVxcdTAwM2VpZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2V0dXBfdG11bHRpX3RhcmdldHMoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cyxcXG4rXFx0XFx0XFx0XFx0X191MzIgKm9ial9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBwcm9nX2luZm87XFxuK1xcdF9fdTMyIGxlbiA9IHNpemVvZihwcm9nX2luZm8pO1xcbitcXHRzdHJ1Y3QgYnRmICpidGY7XFxuK1xcdGludCBlcnIsIGk7XFxuK1xcdF9fczMyIGlkO1xcbitcXG4rXFx0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidGYsIFxcXCJidGZfX2xvYWRfdm1saW51eF9idGZcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpKyspIHtcXG4rXFx0XFx0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgdG11bHRpX3N5bXNbaV0sIEJURl9LSU5EX0ZVTkMpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXFxcImJ0Zl9fZmluZF9ieV9uYW1lX2tpbmRcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFxuK1xcdFxcdHRhcmdldHNbaV0ubmFtZSA9IHRtdWx0aV9zeW1zW2ldO1xcbitcXHRcXHR0YXJnZXRzW2ldLmFkZHIgPSBrc3ltX2dldF9hZGRyKHRtdWx0aV9zeW1zW2ldKTtcXG4rXFx0XFx0dGFyZ2V0c1tpXS5jb29raWUgPSB0bXVsdGlfY29va2llc1tpXTtcXG4rXFx0XFx0dGFyZ2V0c1tpXS5pZCA9IGlkO1xcbitcXHR9XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNnByb2dfaW5mbywgMCwgbGVuKTtcXG4rXFx0ZXJyID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQoYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBcXHUwMDI2cHJvZ19pbmZvLCBcXHUwMDI2bGVuKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmRcXFwiKSlcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0aWYgKCFBU1NFUlRfR1QocHJvZ19pbmZvLmF0dGFjaF9idGZfb2JqX2lkLCAwLCBcXFwiYXR0YWNoX2J0Zl9vYmpfaWRcXFwiKSlcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0Km9ial9pZCA9IHByb2dfaW5mby5hdHRhY2hfYnRmX29ial9pZDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBrZXJuZWwgdHJhY2luZyBtdWx0aSBhdHRhY2ggc29ydHMgaWRzLiBXZSBzb3J0IGFzIHdlbGwsXFxuK1xcdCAqIHNvIHdlIGNhbiBlYXNpbHkgY29tcGFyZSBpZHMgYW5kIGNvb2tpZXMgbGF0ZXIuXFxuK1xcdCAqL1xcbitcXHRxc29ydCh0YXJnZXRzLCBUUkFDSU5HX01VTFRJX0NOVCwgc2l6ZW9mKHRhcmdldHNbMF0pLCB0bXVsdGlfdGFyZ2V0X2NtcCk7XFxuK1xcdGJ0Zl9fZnJlZShidGYpO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycm9yOlxcbitcXHRidGZfX2ZyZWUoYnRmKTtcXG4rXFx0cmV0dXJuIC0xO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBfX3UzMiBvYmpfaWQsIGJvb2wgaGFzX2Nvb2tpZXMpXFxuK3tcXG4rXFx0ZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUgPSBicGZfcHJvZ3JhbV9fZXhwZWN0ZWRfYXR0YWNoX3R5cGUocHJvZyk7XFxuK1xcdF9fdTY0IGFkZHJzW1RSQUNJTkdfTVVMVElfQ05UXSwgY29va2llc1tUUkFDSU5HX01VTFRJX0NOVF07XFxuK1xcdF9fdTMyIGlkc1tUUkFDSU5HX01VTFRJX0NOVF07XFxuK1xcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XFxuK1xcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFxcdTAwMjZpbmZvLCBcXHUwMDI2bGVuKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0aWYgKCFBU1NFUlRfRVEoaW5mby50eXBlLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksIFxcXCJpbmZvLnR5cGVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSwgYXR0YWNoX3R5cGUsIFxcXCJpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGVcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKGluZm8udHJhY2luZ19tdWx0aS5jb3VudCwgVFJBQ0lOR19NVUxUSV9DTlQsIFxcXCJpbmZvLnRyYWNpbmdfbXVsdGkuY291bnRcXFwiKTtcXG4rXFxuK1xcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcXG4rXFx0bWVtc2V0KGNvb2tpZXMsIDAsIHNpemVvZihjb29raWVzKSk7XFxuK1xcdG1lbXNldChhZGRycywgMCwgc2l6ZW9mKGFkZHJzKSk7XFxuK1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTtcXG4rXFx0aW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSBoYXNfY29va2llcyA/IHB0cl90b191NjQoY29va2llcykgOiAwO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcXG4rXFxuK1xcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcXHUwMDI2aW5mbywgXFx1MDAyNmxlbik7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX0VRKGluZm8udHlwZSwgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJLCBcXFwiaW5mby50eXBlXFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIGF0dGFjaF90eXBlLCBcXFwiaW5mby50cmFjaW5nX211bHRpLmF0dGFjaF90eXBlXFxcIik7XFxuK1xcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQsIFRSQUNJTkdfTVVMVElfQ05ULCBcXFwiaW5mby50cmFjaW5nX211bHRpLmNvdW50XFxcIik7XFxuK1xcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkub2JqX2lkLCBvYmpfaWQsIFxcXCJ0cmFjaW5nX211bHRpLnRhcmdldF9vYmpfaWRzXFxcIik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQ7IGkrKykge1xcbitcXHRcXHRBU1NFUlRfRVEoaWRzW2ldLCB0YXJnZXRzW2ldLmlkLCBcXFwidHJhY2luZ19tdWx0aS50YXJnZXRfYnRmX2lkc1xcXCIpO1xcbitcXHRcXHRBU1NFUlRfRVEoY29va2llc1tpXSwgaGFzX2Nvb2tpZXMgPyB0YXJnZXRzW2ldLmNvb2tpZSA6IDAsIFxcXCJ0cmFjaW5nX211bHRpLmNvb2tpZXNcXFwiKTtcXG4rXFxuK1xcdFxcdGlmICh0YXJnZXRzW2ldLmFkZHIpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGtzeW0gKmtzeW07XFxuK1xcbitcXHRcXHRcXHRpZiAoIUFTU0VSVF9ORVEoYWRkcnNbaV0sIDAsIFxcXCJ0cmFjaW5nX211bHRpLmFkZHJzXFxcIikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0a3N5bSA9IGtzeW1fc2VhcmNoKGFkZHJzW2ldKTtcXG4rXFx0XFx0XFx0aWYgKCFBU1NFUlRfT0tfUFRSKGtzeW0sIFxcXCJrc3ltX3NlYXJjaFxcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdEFTU0VSVF9TVFJFUShrc3ltLVxcdTAwM2VuYW1lLCB0YXJnZXRzW2ldLm5hbWUsIFxcXCJ0cmFjaW5nX211bHRpLmFkZHJfbmFtZVxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRBU1NFUlRfRVEoYWRkcnNbaV0sIDAsIFxcXCJ0cmFjaW5nX211bHRpLmFkZHJzXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHZlcmlmeV90cmFjaW5nX211bHRpX2ludmFsaWRfdXNlcl9idWZmZXIoaW50IGZkLCBjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cylcXG4re1xcbitcXHRfX3UzMiBpZHNbVFJBQ0lOR19NVUxUSV9DTlRdID0ge307XFxuK1xcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XFxuK1xcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdC8qIFdyb25nIGluZm8gc2V0dXAgKGlkcyAhPSBOVUxMIGFuZCBjbnQgPT0gMCkgLVxcdTAwM2UgRUlOVkFMICovXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcXG4rXFx0ZXJyID0gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmQsIFxcdTAwMjZpbmZvLCBcXHUwMDI2bGVuKTtcXG4rXFx0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXFxcInRyYWNpbmdfbXVsdGkuaW52YWxpZF9jb3VudFxcXCIpO1xcbitcXG4rXFx0LyogU21hbGxlciB0aGFuIGFjdHVhbGwgY291bnQgcHJvdmlkZWQgLVxcdTAwM2UgRU5PU1BDICovXFxuK1xcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVCAtIDE7XFxuK1xcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcXHUwMDI2aW5mbywgXFx1MDAyNmxlbik7XFxuK1xcdEFTU0VSVF9FUShlcnIsIC1FTk9TUEMsIFxcXCJ0cmFjaW5nX211bHRpLnNtYWxsX2NvdW50XFxcIik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBUUkFDSU5HX01VTFRJX0NOVCAtIDE7IGkrKylcXG4rXFx0XFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXFxcInRyYWNpbmdfbXVsdGkucGFydGlhbF9pZHNcXFwiKTtcXG4rXFx0LyogY2hlY2sgdGhhdCB0aGUgbGFzdCBlbnRyeSBpcyBub3QgcG9wdWxhdGVkICovXFxuK1xcdEFTU0VSVF9FUShpZHNbaV0sIDAsIFxcXCJ0cmFjaW5nX211bHRpLnBhcnRpYWxfaWRzXFxcIik7XFxuK1xcbitcXHQvKiBCaWdnZXIgdGhhbiBhY3R1YWxsIGNvdW50IHByb3ZpZGVkIC1cXHUwMDNlIE9LICovXFxuK1xcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xcbitcXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVCArIDE7XFxuK1xcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcXHUwMDI2aW5mbywgXFx1MDAyNmxlbik7XFxuK1xcdEFTU0VSVF9PSyhlcnIsIFxcXCJ0cmFjaW5nX211bHRpLmJpZ19jb3VudFxcXCIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQ7IGkrKylcXG4rXFx0XFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXFxcInRyYWNpbmdfbXVsdGkuaWRzXFxcIik7XFxuK1xcbitcXHQvKiBJbnZhbGlkIGlkcyBwb2ludGVyIC1cXHUwMDNlIEVGQVVMVCAqL1xcbitcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuK1xcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSAweDE7XFxuK1xcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UO1xcbitcXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZsZW4pO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAtRUZBVUxULCBcXFwidHJhY2luZ19tdWx0aS5iYWRfYnRmX2lkc1xcXCIpO1xcbitcXG4rXFx0LyogSW52YWxpZCBjb29raWVzIHBvaW50ZXIgLVxcdTAwM2UgRUZBVUxUICovXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0aW5mby50cmFjaW5nX211bHRpLmNvb2tpZXMgPSAweDE7XFxuK1xcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UO1xcbitcXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZsZW4pO1xcbitcXHRBU1NFUlRfRVEoZXJyLCAtRUZBVUxULCBcXFwidHJhY2luZ19tdWx0aS5iYWRfY29va2llc1xcXCIpO1xcbitcXG4rXFx0LyogSW52YWxpZCBhZGRycyBwb2ludGVyIC1cXHUwMDNlIEVGQVVMVCAqL1xcbitcXHRtZW1zZXQoXFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XFxuK1xcdGluZm8udHJhY2luZ19tdWx0aS5hZGRycyA9IDB4MTtcXG4rXFx0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XFxuK1xcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcXHUwMDI2aW5mbywgXFx1MDAyNmxlbik7XFxuK1xcdEFTU0VSVF9FUShlcnIsIC1FRkFVTFQsIFxcXCJ0cmFjaW5nX211bHRpLmJhZF9jb29raWVzXFxcIik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3RfdHJhY2luZ19tdWx0aV9maWxsX2xpbmtfaW5mbyhzdHJ1Y3QgdGVzdF9maWxsX2xpbmtfaW5mbyAqc2tlbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBoYXNfY29va2llcywgYm9vbCBpbnZhbGlkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90cmFjaW5nX211bHRpX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3QgdG11bHRpX3RhcmdldCB0YXJnZXRzW1RSQUNJTkdfTVVMVElfQ05UXTtcXG4rXFx0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSwgb2JqX2lkO1xcbitcXHRfX3U2NCBjb29raWVzW1RSQUNJTkdfTVVMVElfQ05UXTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXHRpbnQgbGlua19mZCwgZXJyLCBpO1xcbitcXG4rI2lmbmRlZiBfX3g4Nl82NF9fXFxuK1xcdHRlc3RfX3NraXAoKTtcXG4rXFx0cmV0dXJuO1xcbisjZW5kaWZcXG4rXFxuK1xcdGlmIChzZXR1cF90bXVsdGlfdGFyZ2V0cyhza2VsLVxcdTAwM2Vwcm9ncy50bXVsdGlfcnVuLCB0YXJnZXRzLCBcXHUwMDI2b2JqX2lkKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpKyspIHtcXG4rXFx0XFx0aWRzW2ldID0gdGFyZ2V0c1tpXS5pZDtcXG4rXFx0XFx0Y29va2llc1tpXSA9IHRhcmdldHNbaV0uY29va2llO1xcbitcXHR9XFxuK1xcbitcXHRvcHRzLmlkcyA9IGlkcztcXG4rXFx0b3B0cy5jbnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcXG4rXFx0aWYgKGhhc19jb29raWVzKVxcbitcXHRcXHRvcHRzLmNvb2tpZXMgPSBjb29raWVzO1xcbitcXG4rXFx0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfdHJhY2luZ19tdWx0aShza2VsLVxcdTAwM2Vwcm9ncy50bXVsdGlfcnVuLCBOVUxMLCBcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihsaW5rLCBcXFwiYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxpbmtfZmQgPSBicGZfbGlua19fZmQobGluayk7XFxuK1xcdGlmIChpbnZhbGlkKSB7XFxuK1xcdFxcdHZlcmlmeV90cmFjaW5nX211bHRpX2ludmFsaWRfdXNlcl9idWZmZXIobGlua19mZCwgdGFyZ2V0cyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVyciA9IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhsaW5rX2ZkLCBza2VsLVxcdTAwM2Vwcm9ncy50bXVsdGlfcnVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRhcmdldHMsIG9ial9pZCwgaGFzX2Nvb2tpZXMpO1xcbitcXHRcXHRBU1NFUlRfT0soZXJyLCBcXFwidmVyaWZ5X3RyYWNpbmdfbXVsdGlfbGlua19pbmZvXFxcIik7XFxuK1xcdH1cXG4rXFxuK1xcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbit9XFxuK1xcbiAjZGVmaW5lIFNFQyhuYW1lKSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKG5hbWUpLCB1c2VkKSlcXG4gXFxuIHN0YXRpYyBzaG9ydCB1cHJvYmVfbGlua19pbmZvX3NlbWFfMSBTRUMoXFxcIi5wcm9iZXNcXFwiKTtcXG5AQCAtNjQwLDYgKzg3NSwxMyBAQCB2b2lkIHRlc3RfZmlsbF9saW5rX2luZm8odm9pZClcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImtwcm9iZV9tdWx0aV9pbnZhbGlkX3VidWZmXFxcIikpXFxuIFxcdFxcdHRlc3Rfa3Byb2JlX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIHRydWUsIHRydWUsIHRydWUpO1xcbiBcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInRyYWNpbmdfbXVsdGlfbGlua19pbmZvXFxcIikpIHtcXG4rXFx0XFx0dGVzdF90cmFjaW5nX211bHRpX2ZpbGxfbGlua19pbmZvKHNrZWwsIGZhbHNlLCBmYWxzZSk7XFxuK1xcdFxcdHRlc3RfdHJhY2luZ19tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCB0cnVlLCBmYWxzZSk7XFxuK1xcdH1cXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInRyYWNpbmdfbXVsdGlfaW52YWxpZF91YnVmZlxcXCIpKVxcbitcXHRcXHR0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgdHJ1ZSk7XFxuK1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidXByb2JlX211bHRpX2xpbmtfaW5mb1xcXCIpKVxcbiBcXHRcXHR0ZXN0X3Vwcm9iZV9tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCBmYWxzZSwgZmFsc2UpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwidXJldHByb2JlX211bHRpX2xpbmtfaW5mb1xcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9maWxsX2xpbmtfaW5mby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xcbmluZGV4IDEzN2JkNjI5MjE2M2E1Li5jODUwODE1MzhlOTNiZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9maWxsX2xpbmtfaW5mby5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xcbkBAIC01OCw0ICs1OCwxMCBAQCBpbnQgQlBGX1BST0codW11bHRpX3J1bilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwiZmVudHJ5Lm11bHRpXFxcIilcXG4raW50IEJQRl9QUk9HKHRtdWx0aV9ydW4pXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowMzozOS43MzU4NjgwNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzcxNDgzNDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzNlZjc4YzcwZjA4MzRlZDllMDQ1ZjVhZWVkNTQyMjM1MjBiZjUyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVuIDIxIDIxOjAzOjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG5pbmRleCA4OWIzNmRlNWZkYmI2ZC4uODA0MjNjY2M2YjU3YzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuQEAgLTY4MzksNiArNjgzOSwxNSBAQCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyB7XG4gXHRcdFx0X191MzIgZmxhZ3M7XG4gXHRcdFx0X191MzIgcGlkO1xuIFx0XHR9IHVwcm9iZV9tdWx0aTtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRfX3UzMiBhdHRhY2hfdHlwZTtcbitcdFx0XHRfX3UzMiBjb3VudDsgLyogaW4vb3V0OiB0cmFjaW5nX211bHRpIHRhcmdldCBjb3VudCAqL1xuK1x0XHRcdF9fdTMyIG9ial9pZDtcbitcdFx0XHRfX3UzMiA6MzI7XG4rXHRcdFx0X19hbGlnbmVkX3U2NCBpZHM7XG4rXHRcdFx0X19hbGlnbmVkX3U2NCBhZGRycztcbitcdFx0XHRfX2FsaWduZWRfdTY0IGNvb2tpZXM7XG4rXHRcdH0gdHJhY2luZ19tdWx0aTtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRfX3UzMiB0eXBlOyAvKiBlbnVtIGJwZl9wZXJmX2V2ZW50X3R5cGUgKi9cbiBcdFx0XHRfX3UzMiA6MzI7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jIGIva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXG5pbmRleCA4MmY4ZmVlYTY5MzExYS4uZmRhYjRlYzVhZDRmNDUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcbisrKyBiL2tlcm5lbC90cmFjZS9icGZfdHJhY2UuY1xuQEAgLTM2OTksNiArMzY5OSw2MCBAQCBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2Moc3RydWN0IGJwZl9saW5rICpsaW5rKVxuIFx0a3ZmcmVlKHRyX2xpbmspO1xuIH1cbiBcbitzdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxuK1x0XHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbit7XG4rXHR1NjQgX191c2VyICp1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY29va2llcyk7XG4rXHR1NjQgX191c2VyICp1YWRkcnMgPSB1NjRfdG9fdXNlcl9wdHIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmFkZHJzKTtcbitcdHUzMiBfX3VzZXIgKnVpZHMgPSB1NjRfdG9fdXNlcl9wdHIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmlkcyk7XG4rXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluaztcbitcdHUzMiB1Y291bnQgPSBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQ7XG4rXHRib29sIGhhc19jb29raWVzLCBzaG93X2FkZHJzO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoKHVpZHMgfHwgdWNvb2tpZXMgfHwgdWFkZHJzKSBcdTAwMjZcdTAwMjYgIXVjb3VudClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR0cl9saW5rID0gY29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTtcbitcbitcdGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSA9IHRyX2xpbmstXHUwMDNlbGluay5hdHRhY2hfdHlwZTtcbitcdGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudCA9IHRyX2xpbmstXHUwMDNlbm9kZXNfY250O1xuK1x0aW5mby1cdTAwM2V0cmFjaW5nX211bHRpLm9ial9pZCA9IGJ0Zl9vYmpfaWQodHJfbGluay1cdTAwM2VsaW5rLnByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGYpO1xuK1xuK1x0aWYgKCF1aWRzIFx1MDAyNlx1MDAyNiAhdWNvb2tpZXMgXHUwMDI2XHUwMDI2ICF1YWRkcnMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHVjb3VudCBcdTAwM2MgdHJfbGluay1cdTAwM2Vub2Rlc19jbnQpXG4rXHRcdGVyciA9IC1FTk9TUEM7XG4rXHRlbHNlXG4rXHRcdHVjb3VudCA9IHRyX2xpbmstXHUwMDNlbm9kZXNfY250O1xuK1xuK1x0aGFzX2Nvb2tpZXMgPSAhIXRyX2xpbmstXHUwMDNlY29va2llcztcbitcdHNob3dfYWRkcnMgPSBrYWxsc3ltc19zaG93X3ZhbHVlKGN1cnJlbnRfY3JlZCgpKTtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB1Y291bnQ7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbm9kZSAqbW5vZGUgPSBcdTAwMjZ0cl9saW5rLVx1MDAzZW5vZGVzW2ldO1xuK1x0XHR1NjQgYWRkciwgY29va2llO1xuK1x0XHR1MzIgaWQ7XG4rXG4rXHRcdGJwZl90cmFtcG9saW5lX3VucGFja19rZXkobW5vZGUtXHUwMDNldHJhbXBvbGluZS1cdTAwM2VrZXksIE5VTEwsIFx1MDAyNmlkKTtcbitcbitcdFx0YWRkciA9IHNob3dfYWRkcnMgPyBtbm9kZS1cdTAwM2V0cmFtcG9saW5lLVx1MDAzZWlwIDogMDtcbitcdFx0Y29va2llID0gaGFzX2Nvb2tpZXMgPyB0cl9saW5rLVx1MDAzZWNvb2tpZXNbaV0gOiAwO1xuK1xuK1x0XHRpZiAodWlkcyBcdTAwMjZcdTAwMjYgcHV0X3VzZXIoaWQsIHVpZHMgKyBpKSlcbitcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcdFx0aWYgKHVhZGRycyBcdTAwMjZcdTAwMjYgcHV0X3VzZXIoYWRkciwgdWFkZHJzICsgaSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXHRcdGlmICh1Y29va2llcyBcdTAwMjZcdTAwMjYgcHV0X3VzZXIoY29va2llLCB1Y29va2llcyArIGkpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfUFJPQ19GU1xuIHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbkBAIC0zNzI5LDYgKzM3ODMsNyBAQCBzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xuIFx0LnJlbGVhc2UgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2UsXG4gXHQuZGVhbGxvY19kZWZlcnJlZCA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyxcbitcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXG4gI2lmZGVmIENPTkZJR19QUk9DX0ZTXG4gXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9saW5rLmMgYi90b29scy9icGYvYnBmdG9vbC9saW5rLmNcbmluZGV4IGJkY2Q3MTdiMDM0OGY4Li41OGRhZGVlOTg0YTA3OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL2xpbmsuY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvbGluay5jXG5AQCAtMzc3LDYgKzM3NywzMSBAQCBzdGF0aWMgX191NjQgKnU2NF90b19hcnIoX191NjQgdmFsKVxuIFx0cmV0dXJuIChfX3U2NCAqKSB1NjRfdG9fcHRyKHZhbCk7XG4gfVxuIFxuK3N0YXRpYyBfX3UzMiAqdTY0X3RvX3UzMl9hcnIoX191NjQgdmFsKVxuK3tcbitcdHJldHVybiAoX191MzIgKil1NjRfdG9fcHRyKHZhbCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qga2VybmVsX3N5bSAqZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoX191NjQgYWRkciwgYm9vbCBpc19pYnRfZW5hYmxlZClcbit7XG4rXHRzdHJ1Y3Qga2VybmVsX3N5bSAqc3ltO1xuK1xuK1x0aWYgKCFhZGRyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdC8qIExvYWQgaXQgb25jZSBmb3IgYWxsLiAqL1xuK1x0aWYgKCFkZC5zeW1fY291bnQpXG4rXHRcdGtlcm5lbF9zeW1zX2xvYWQoXHUwMDI2ZGQpO1xuK1x0aWYgKCFkZC5zeW1fY291bnQpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0c3ltID0ga2VybmVsX3N5bXNfc2VhcmNoKFx1MDAyNmRkLCBhZGRyKTtcbitcdGlmICghc3ltIFx1MDAyNlx1MDAyNiBpc19pYnRfZW5hYmxlZCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2U9IDQpXG4rXHRcdHN5bSA9IGtlcm5lbF9zeW1zX3NlYXJjaChcdTAwMjZkZCwgYWRkciAtIDQpO1xuK1xuK1x0cmV0dXJuIHN5bTtcbit9XG4rXG4gc3RhdGljIHZvaWRcbiBzaG93X3Vwcm9iZV9tdWx0aV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpXG4ge1xuQEAgLTQwMyw2ICs0MjgsNDMgQEAgc2hvd191cHJvYmVfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxuIFx0anNvbndfZW5kX2FycmF5KGpzb25fd3RyKTtcbiB9XG4gXG4rc3RhdGljIHZvaWRcbitzaG93X3RyYWNpbmdfbXVsdGlfanNvbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbywganNvbl93cml0ZXJfdCAqd3RyKVxuK3tcbitcdGJvb2wgaXNfaWJ0X2VuYWJsZWQgPSBpc194ODZfaWJ0X2VuYWJsZWQoKTtcbitcdF9fdTMyIGk7XG4rXG4rXHRzaG93X2xpbmtfYXR0YWNoX3R5cGVfanNvbihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIHd0cik7XG4rXHRqc29ud191aW50X2ZpZWxkKHd0ciwgXCJmdW5jX2NudFwiLCBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuY291bnQpO1xuK1x0anNvbndfdWludF9maWVsZCh3dHIsIFwib2JqX2lkXCIsIGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5vYmpfaWQpO1xuK1x0anNvbndfbmFtZSh3dHIsIFwiZnVuY3NcIik7XG4rXG4rXHRqc29ud19zdGFydF9hcnJheSh3dHIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50OyBpKyspIHtcbitcdFx0X191NjQgYWRkciA9IHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmFkZHJzKVtpXTtcbitcdFx0c3RydWN0IGtlcm5lbF9zeW0gKnN5bTtcbitcbitcdFx0c3ltID0gZmluZF9rZXJuZWxfc3ltX2J5X2FkZHIoYWRkciwgaXNfaWJ0X2VuYWJsZWQpO1xuK1xuK1x0XHRqc29ud19zdGFydF9vYmplY3Qod3RyKTtcbitcdFx0anNvbndfdWludF9maWVsZCh3dHIsIFwiaWRcIiwgdTY0X3RvX3UzMl9hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmlkcylbaV0pO1xuK1x0XHRqc29ud191aW50X2ZpZWxkKHd0ciwgXCJhZGRyXCIsIGFkZHIpO1xuK1x0XHRpZiAoc3ltKSB7XG4rXHRcdFx0anNvbndfc3RyaW5nX2ZpZWxkKHd0ciwgXCJmdW5jXCIsIHN5bS1cdTAwM2VuYW1lKTtcbitcdFx0XHRpZiAoc3ltLVx1MDAzZW1vZHVsZVswXSA9PSAnXFwwJykge1xuK1x0XHRcdFx0anNvbndfbmFtZSh3dHIsIFwibW9kdWxlXCIpO1xuK1x0XHRcdFx0anNvbndfbnVsbCh3dHIpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRqc29ud19zdHJpbmdfZmllbGQod3RyLCBcIm1vZHVsZVwiLCBzeW0tXHUwMDNlbW9kdWxlKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0anNvbndfdWludF9maWVsZCh3dHIsIFwiY29va2llXCIsIHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcbitcdFx0anNvbndfZW5kX29iamVjdCh3dHIpO1xuK1x0fVxuK1x0anNvbndfZW5kX2FycmF5KHd0cik7XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gc2hvd19wZXJmX2V2ZW50X2twcm9iZV9qc29uKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvLCBqc29uX3dyaXRlcl90ICp3dHIpXG4ge1xuQEAgLTU4OSw2ICs2NTEsOSBAQCBzdGF0aWMgaW50IHNob3dfbGlua19jbG9zZV9qc29uKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxuIFx0XHRzaG93X3Vwcm9iZV9tdWx0aV9qc29uKGluZm8sIGpzb25fd3RyKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSTpcbitcdFx0c2hvd190cmFjaW5nX211bHRpX2pzb24oaW5mbywganNvbl93dHIpO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxuIFx0XHRzd2l0Y2ggKGluZm8tXHUwMDNlcGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6XG5AQCAtODMzLDYgKzg5OCwzOCBAQCBzdGF0aWMgdm9pZCBzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgc2hvd190cmFjaW5nX211bHRpX3BsYWluKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxuK3tcbitcdGJvb2wgaXNfaWJ0X2VuYWJsZWQgPSBpc194ODZfaWJ0X2VuYWJsZWQoKTtcbitcdF9fdTMyIGk7XG4rXG4rXHRpZiAoIWluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHJpbnRmKFwiXFxuXFx0XCIpO1xuK1x0c2hvd19saW5rX2F0dGFjaF90eXBlX3BsYWluKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZSk7XG4rXHRwcmludGYoXCJvYmpfaWQgJXUgIFwiLCBpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkub2JqX2lkKTtcbitcdHByaW50ZihcImNvdW50ICV1ICBcIiwgaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvdW50KTtcbitcbitcdHByaW50ZihcIlxcblxcdCUtMTZzICUtMTZzICUtMTZzICVzXCIsXG4rXHQgICAgICAgXCJidGZfaWRcIiwgXCJhZGRyXCIsIFwiY29va2llXCIsIFwiZnVuYyBbbW9kdWxlXVwiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5jb3VudDsgaSsrKSB7XG4rXHRcdF9fdTY0IGFkZHIgPSB1NjRfdG9fYXJyKGluZm8tXHUwMDNldHJhY2luZ19tdWx0aS5hZGRycylbaV07XG4rXHRcdHN0cnVjdCBrZXJuZWxfc3ltICpzeW07XG4rXG4rXHRcdHN5bSA9IGZpbmRfa2VybmVsX3N5bV9ieV9hZGRyKGFkZHIsIGlzX2lidF9lbmFibGVkKTtcbitcbitcdFx0cHJpbnRmKFwiXFxuXFx0JS0xNnUgJTAxNmxseCAlLTE2bGx4XCIsXG4rXHRcdCAgICAgICB1NjRfdG9fdTMyX2FycihpbmZvLVx1MDAzZXRyYWNpbmdfbXVsdGkuaWRzKVtpXSxcbitcdFx0ICAgICAgIGFkZHIsIHU2NF90b19hcnIoaW5mby1cdTAwM2V0cmFjaW5nX211bHRpLmNvb2tpZXMpW2ldKTtcbitcdFx0aWYgKHN5bSkge1xuK1x0XHRcdHByaW50ZihcIiAlc1wiLCBzeW0tXHUwMDNlbmFtZSk7XG4rXHRcdFx0aWYgKHN5bS1cdTAwM2Vtb2R1bGVbMF0gIT0gJ1xcMCcpXG4rXHRcdFx0XHRwcmludGYoXCIgWyVzXVwiLCBzeW0tXHUwMDNlbW9kdWxlKTtcbitcdFx0fVxuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBzaG93X3BlcmZfZXZlbnRfa3Byb2JlX3BsYWluKHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmJ1ZjtcbkBAIC05ODksNiArMTA4Niw5IEBAIHN0YXRpYyBpbnQgc2hvd19saW5rX2Nsb3NlX3BsYWluKGludCBmZCwgc3RydWN0IGJwZl9saW5rX2luZm8gKmluZm8pXG4gXHRjYXNlIEJQRl9MSU5LX1RZUEVfVVBST0JFX01VTFRJOlxuIFx0XHRzaG93X3Vwcm9iZV9tdWx0aV9wbGFpbihpbmZvKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSTpcbitcdFx0c2hvd190cmFjaW5nX211bHRpX3BsYWluKGluZm8pO1xuK1x0XHRicmVhaztcbiBcdGNhc2UgQlBGX0xJTktfVFlQRV9QRVJGX0VWRU5UOlxuIFx0XHRzd2l0Y2ggKGluZm8tXHUwMDNlcGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfRVZFTlQ6XG5AQCAtMTAyOSw2ICsxMTI5LDcgQEAgc3RhdGljIGludCBzaG93X2xpbmtfY2xvc2VfcGxhaW4oaW50IGZkLCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcbiBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpXG4ge1xuIFx0X191NjQgKnJlZl9jdHJfb2Zmc2V0cyA9IE5VTEwsICpvZmZzZXRzID0gTlVMTCwgKmNvb2tpZXMgPSBOVUxMO1xuK1x0X191MzIgKmlkcyA9IE5VTEw7XG4gXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBpbmZvO1xuIFx0X191MzIgbGVuID0gc2l6ZW9mKGluZm8pO1xuIFx0Y2hhciBwYXRoX2J1ZltQQVRIX01BWF07XG5AQCAtMTExNCw2ICsxMjE1LDM5IEBAIHN0YXRpYyBpbnQgZG9fc2hvd19saW5rKGludCBmZClcbiBcdFx0XHRnb3RvIGFnYWluO1xuIFx0XHR9XG4gXHR9XG4rXHRpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSBcdTAwMjZcdTAwMjZcbitcdCAgICAhaW5mby50cmFjaW5nX211bHRpLmlkcykge1xuK1x0XHRjb3VudCA9IGluZm8udHJhY2luZ19tdWx0aS5jb3VudDtcbitcdFx0aWYgKGNvdW50KSB7XG4rXHRcdFx0aWRzID0gY2FsbG9jKGNvdW50LCBzaXplb2YoX191MzIpKTtcbitcdFx0XHRpZiAoIWlkcykge1xuK1x0XHRcdFx0cF9lcnIoXCJtZW0gYWxsb2MgZmFpbGVkXCIpO1xuK1x0XHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdFx0fVxuK1x0XHRcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7XG4rXG4rXHRcdFx0YWRkcnMgPSBjYWxsb2MoY291bnQsIHNpemVvZihfX3U2NCkpO1xuK1x0XHRcdGlmICghYWRkcnMpIHtcbitcdFx0XHRcdHBfZXJyKFwibWVtIGFsbG9jIGZhaWxlZFwiKTtcbitcdFx0XHRcdGZyZWUoaWRzKTtcbitcdFx0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdH1cbitcdFx0XHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSBwdHJfdG9fdTY0KGFkZHJzKTtcbitcbitcdFx0XHRjb29raWVzID0gY2FsbG9jKGNvdW50LCBzaXplb2YoX191NjQpKTtcbitcdFx0XHRpZiAoIWNvb2tpZXMpIHtcbitcdFx0XHRcdHBfZXJyKFwibWVtIGFsbG9jIGZhaWxlZFwiKTtcbitcdFx0XHRcdGZyZWUoYWRkcnMpO1xuK1x0XHRcdFx0ZnJlZShpZHMpO1xuK1x0XHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdFx0fVxuK1x0XHRcdGluZm8udHJhY2luZ19tdWx0aS5jb29raWVzID0gcHRyX3RvX3U2NChjb29raWVzKTtcbitcdFx0XHRnb3RvIGFnYWluO1xuK1x0XHR9XG4rXHR9XG4gXHRpZiAoaW5mby50eXBlID09IEJQRl9MSU5LX1RZUEVfUEVSRl9FVkVOVCkge1xuIFx0XHRzd2l0Y2ggKGluZm8ucGVyZl9ldmVudC50eXBlKSB7XG4gXHRcdGNhc2UgQlBGX1BFUkZfRVZFTlRfVFJBQ0VQT0lOVDpcbkBAIC0xMTUzLDYgKzEyODcsNyBAQCBzdGF0aWMgaW50IGRvX3Nob3dfbGluayhpbnQgZmQpXG4gXHRmcmVlKGNvb2tpZXMpO1xuIFx0ZnJlZShvZmZzZXRzKTtcbiBcdGZyZWUoYWRkcnMpO1xuK1x0ZnJlZShpZHMpO1xuIFx0Y2xvc2UoZmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaFxuaW5kZXggODliMzZkZTVmZGJiNmQuLjgwNDIzY2NjNmI1N2M3IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmhcbkBAIC02ODM5LDYgKzY4MzksMTUgQEAgc3RydWN0IGJwZl9saW5rX2luZm8ge1xuIFx0XHRcdF9fdTMyIGZsYWdzO1xuIFx0XHRcdF9fdTMyIHBpZDtcbiBcdFx0fSB1cHJvYmVfbXVsdGk7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0X191MzIgYXR0YWNoX3R5cGU7XG4rXHRcdFx0X191MzIgY291bnQ7IC8qIGluL291dDogdHJhY2luZ19tdWx0aSB0YXJnZXQgY291bnQgKi9cbitcdFx0XHRfX3UzMiBvYmpfaWQ7XG4rXHRcdFx0X191MzIgOjMyO1xuK1x0XHRcdF9fYWxpZ25lZF91NjQgaWRzO1xuK1x0XHRcdF9fYWxpZ25lZF91NjQgYWRkcnM7XG4rXHRcdFx0X19hbGlnbmVkX3U2NCBjb29raWVzO1xuK1x0XHR9IHRyYWNpbmdfbXVsdGk7XG4gXHRcdHN0cnVjdCB7XG4gXHRcdFx0X191MzIgdHlwZTsgLyogZW51bSBicGZfcGVyZl9ldmVudF90eXBlICovXG4gXHRcdFx0X191MzIgOjMyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2ZpbGxfbGlua19pbmZvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG5pbmRleCBmNTg5ZWVmYmY5ZmJkNS4uOTY5ZjA0ZWU5YWM2YWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9maWxsX2xpbmtfaW5mby5jXG5AQCAtNCw2ICs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcInRyYWNlX2hlbHBlcnMuaFwiXG4gI2luY2x1ZGUgXCJ0ZXN0X2ZpbGxfbGlua19pbmZvLnNrZWwuaFwiXG5AQCAtMjQsNiArMjUsMjIgQEAgc3RhdGljIF9fdTY0IGttdWx0aV9jb29raWVzW10gPSB7IDMsIDEsIDIgfTtcbiAjZGVmaW5lIEtQUk9CRV9GVU5DIFwiYnBmX2ZlbnRyeV90ZXN0MVwiXG4gc3RhdGljIF9fdTY0IGtwcm9iZV9hZGRyO1xuIFxuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdG11bHRpX3N5bXNbXSA9IHtcbitcdFwiYnBmX2ZlbnRyeV90ZXN0MlwiLFxuK1x0XCJicGZfZmVudHJ5X3Rlc3QxXCIsXG4rXHRcImJwZl9mZW50cnlfdGVzdDNcIixcbit9O1xuK1xuK3N0YXRpYyBfX3U2NCB0bXVsdGlfY29va2llc1tdID0geyAzMCwgMTAsIDIwIH07XG4rI2RlZmluZSBUUkFDSU5HX01VTFRJX0NOVCBBUlJBWV9TSVpFKHRtdWx0aV9zeW1zKVxuK1xuK3N0cnVjdCB0bXVsdGlfdGFyZ2V0IHtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHRfX3U2NCBhZGRyO1xuK1x0X191NjQgY29va2llO1xuK1x0X191MzIgaWQ7XG4rfTtcbitcbiAjZGVmaW5lIFVQUk9CRV9GSUxFIFwiL3Byb2Mvc2VsZi9leGVcIlxuIHN0YXRpYyBzc2l6ZV90IHVwcm9iZV9vZmZzZXQ7XG4gLyogdXByb2JlIGF0dGFjaCBwb2ludCAqL1xuQEAgLTM5Niw2ICs0MTMsMjI0IEBAIHN0YXRpYyB2b2lkIHRlc3Rfa3Byb2JlX211bHRpX2ZpbGxfbGlua19pbmZvKHN0cnVjdCB0ZXN0X2ZpbGxfbGlua19pbmZvICpza2VsLFxuIFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdG11bHRpX3RhcmdldF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGEgPSBhO1xuK1x0Y29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRiID0gYjtcbitcbitcdHJldHVybiAodGEtXHUwMDNlaWQgXHUwMDNlIHRiLVx1MDAzZWlkKSAtICh0YS1cdTAwM2VpZCBcdTAwM2MgdGItXHUwMDNlaWQpO1xuK31cbitcbitzdGF0aWMgaW50IHNldHVwX3RtdWx0aV90YXJnZXRzKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbitcdFx0XHRcdHN0cnVjdCB0bXVsdGlfdGFyZ2V0ICp0YXJnZXRzLFxuK1x0XHRcdFx0X191MzIgKm9ial9pZClcbit7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBwcm9nX2luZm87XG4rXHRfX3UzMiBsZW4gPSBzaXplb2YocHJvZ19pbmZvKTtcbitcdHN0cnVjdCBidGYgKmJ0ZjtcbitcdGludCBlcnIsIGk7XG4rXHRfX3MzMiBpZDtcbitcbitcdGJ0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGJ0ZiwgXCJidGZfX2xvYWRfdm1saW51eF9idGZcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpKyspIHtcbitcdFx0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgdG11bHRpX3N5bXNbaV0sIEJURl9LSU5EX0ZVTkMpO1xuK1x0XHRpZiAoIUFTU0VSVF9HVChpZCwgMCwgXCJidGZfX2ZpbmRfYnlfbmFtZV9raW5kXCIpKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXG4rXHRcdHRhcmdldHNbaV0ubmFtZSA9IHRtdWx0aV9zeW1zW2ldO1xuK1x0XHR0YXJnZXRzW2ldLmFkZHIgPSBrc3ltX2dldF9hZGRyKHRtdWx0aV9zeW1zW2ldKTtcbitcdFx0dGFyZ2V0c1tpXS5jb29raWUgPSB0bXVsdGlfY29va2llc1tpXTtcbitcdFx0dGFyZ2V0c1tpXS5pZCA9IGlkO1xuK1x0fVxuK1xuK1x0bWVtc2V0KFx1MDAyNnByb2dfaW5mbywgMCwgbGVuKTtcbitcdGVyciA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgXHUwMDI2cHJvZ19pbmZvLCBcdTAwMjZsZW4pO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkXCIpKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0aWYgKCFBU1NFUlRfR1QocHJvZ19pbmZvLmF0dGFjaF9idGZfb2JqX2lkLCAwLCBcImF0dGFjaF9idGZfb2JqX2lkXCIpKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0Km9ial9pZCA9IHByb2dfaW5mby5hdHRhY2hfYnRmX29ial9pZDtcbitcbitcdC8qXG4rXHQgKiBUaGUga2VybmVsIHRyYWNpbmcgbXVsdGkgYXR0YWNoIHNvcnRzIGlkcy4gV2Ugc29ydCBhcyB3ZWxsLFxuK1x0ICogc28gd2UgY2FuIGVhc2lseSBjb21wYXJlIGlkcyBhbmQgY29va2llcyBsYXRlci5cbitcdCAqL1xuK1x0cXNvcnQodGFyZ2V0cywgVFJBQ0lOR19NVUxUSV9DTlQsIHNpemVvZih0YXJnZXRzWzBdKSwgdG11bHRpX3RhcmdldF9jbXApO1xuK1x0YnRmX19mcmVlKGJ0Zik7XG4rXHRyZXR1cm4gMDtcbitcbitlcnJvcjpcbitcdGJ0Zl9fZnJlZShidGYpO1xuK1x0cmV0dXJuIC0xO1xuK31cbitcbitzdGF0aWMgaW50IHZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mbyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbitcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdG11bHRpX3RhcmdldCAqdGFyZ2V0cyxcbitcdFx0XHRcdFx0ICBfX3UzMiBvYmpfaWQsIGJvb2wgaGFzX2Nvb2tpZXMpXG4re1xuK1x0ZW51bSBicGZfYXR0YWNoX3R5cGUgYXR0YWNoX3R5cGUgPSBicGZfcHJvZ3JhbV9fZXhwZWN0ZWRfYXR0YWNoX3R5cGUocHJvZyk7XG4rXHRfX3U2NCBhZGRyc1tUUkFDSU5HX01VTFRJX0NOVF0sIGNvb2tpZXNbVFJBQ0lOR19NVUxUSV9DTlRdO1xuK1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXTtcbitcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XG4rXHRfX3UzMiBsZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfRVEoaW5mby50eXBlLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksIFwiaW5mby50eXBlXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRBU1NFUlRfRVEoaW5mby50cmFjaW5nX211bHRpLmF0dGFjaF90eXBlLCBhdHRhY2hfdHlwZSwgXCJpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGVcIik7XG4rXHRBU1NFUlRfRVEoaW5mby50cmFjaW5nX211bHRpLmNvdW50LCBUUkFDSU5HX01VTFRJX0NOVCwgXCJpbmZvLnRyYWNpbmdfbXVsdGkuY291bnRcIik7XG4rXG4rXHRtZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7XG4rXHRtZW1zZXQoY29va2llcywgMCwgc2l6ZW9mKGNvb2tpZXMpKTtcbitcdG1lbXNldChhZGRycywgMCwgc2l6ZW9mKGFkZHJzKSk7XG4rXG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gcHRyX3RvX3U2NChpZHMpO1xuK1x0aW5mby50cmFjaW5nX211bHRpLmFkZHJzID0gcHRyX3RvX3U2NChhZGRycyk7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuY29va2llcyA9IGhhc19jb29raWVzID8gcHRyX3RvX3U2NChjb29raWVzKSA6IDA7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcbitcbitcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZsZW4pO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJwZl9saW5rX2dldF9pbmZvX2J5X2ZkXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAoIUFTU0VSVF9FUShpbmZvLnR5cGUsIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSwgXCJpbmZvLnR5cGVcIikpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuYXR0YWNoX3R5cGUsIGF0dGFjaF90eXBlLCBcImluZm8udHJhY2luZ19tdWx0aS5hdHRhY2hfdHlwZVwiKTtcbitcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQsIFRSQUNJTkdfTVVMVElfQ05ULCBcImluZm8udHJhY2luZ19tdWx0aS5jb3VudFwiKTtcbitcdEFTU0VSVF9FUShpbmZvLnRyYWNpbmdfbXVsdGkub2JqX2lkLCBvYmpfaWQsIFwidHJhY2luZ19tdWx0aS50YXJnZXRfb2JqX2lkc1wiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRSQUNJTkdfTVVMVElfQ05UOyBpKyspIHtcbitcdFx0QVNTRVJUX0VRKGlkc1tpXSwgdGFyZ2V0c1tpXS5pZCwgXCJ0cmFjaW5nX211bHRpLnRhcmdldF9idGZfaWRzXCIpO1xuK1x0XHRBU1NFUlRfRVEoY29va2llc1tpXSwgaGFzX2Nvb2tpZXMgPyB0YXJnZXRzW2ldLmNvb2tpZSA6IDAsIFwidHJhY2luZ19tdWx0aS5jb29raWVzXCIpO1xuK1xuK1x0XHRpZiAodGFyZ2V0c1tpXS5hZGRyKSB7XG4rXHRcdFx0c3RydWN0IGtzeW0gKmtzeW07XG4rXG4rXHRcdFx0aWYgKCFBU1NFUlRfTkVRKGFkZHJzW2ldLCAwLCBcInRyYWNpbmdfbXVsdGkuYWRkcnNcIikpXG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0a3N5bSA9IGtzeW1fc2VhcmNoKGFkZHJzW2ldKTtcbitcdFx0XHRpZiAoIUFTU0VSVF9PS19QVFIoa3N5bSwgXCJrc3ltX3NlYXJjaFwiKSlcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRBU1NFUlRfU1RSRVEoa3N5bS1cdTAwM2VuYW1lLCB0YXJnZXRzW2ldLm5hbWUsIFwidHJhY2luZ19tdWx0aS5hZGRyX25hbWVcIik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0QVNTRVJUX0VRKGFkZHJzW2ldLCAwLCBcInRyYWNpbmdfbXVsdGkuYWRkcnNcIik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB2ZXJpZnlfdHJhY2luZ19tdWx0aV9pbnZhbGlkX3VzZXJfYnVmZmVyKGludCBmZCwgY29uc3Qgc3RydWN0IHRtdWx0aV90YXJnZXQgKnRhcmdldHMpXG4re1xuK1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSA9IHt9O1xuK1x0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcbitcdF9fdTMyIGxlbiA9IHNpemVvZihpbmZvKTtcbitcdGludCBlcnIsIGk7XG4rXG4rXHQvKiBXcm9uZyBpbmZvIHNldHVwIChpZHMgIT0gTlVMTCBhbmQgY250ID09IDApIC1cdTAwM2UgRUlOVkFMICovXG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbitcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FSU5WQUwsIFwidHJhY2luZ19tdWx0aS5pbnZhbGlkX2NvdW50XCIpO1xuK1xuK1x0LyogU21hbGxlciB0aGFuIGFjdHVhbGwgY291bnQgcHJvdmlkZWQgLVx1MDAzZSBFTk9TUEMgKi9cbitcdG1lbXNldChpZHMsIDAsIHNpemVvZihpZHMpKTtcbitcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuK1x0aW5mby50cmFjaW5nX211bHRpLmlkcyA9IHB0cl90b191NjQoaWRzKTtcbitcdGluZm8udHJhY2luZ19tdWx0aS5jb3VudCA9IFRSQUNJTkdfTVVMVElfQ05UIC0gMTtcbitcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZsZW4pO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVOT1NQQywgXCJ0cmFjaW5nX211bHRpLnNtYWxsX2NvdW50XCIpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQgLSAxOyBpKyspXG4rXHRcdEFTU0VSVF9FUShpZHNbaV0sIHRhcmdldHNbaV0uaWQsIFwidHJhY2luZ19tdWx0aS5wYXJ0aWFsX2lkc1wiKTtcbitcdC8qIGNoZWNrIHRoYXQgdGhlIGxhc3QgZW50cnkgaXMgbm90IHBvcHVsYXRlZCAqL1xuK1x0QVNTRVJUX0VRKGlkc1tpXSwgMCwgXCJ0cmFjaW5nX211bHRpLnBhcnRpYWxfaWRzXCIpO1xuK1xuK1x0LyogQmlnZ2VyIHRoYW4gYWN0dWFsbCBjb3VudCBwcm92aWRlZCAtXHUwMDNlIE9LICovXG4rXHRtZW1zZXQoaWRzLCAwLCBzaXplb2YoaWRzKSk7XG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbitcdGluZm8udHJhY2luZ19tdWx0aS5pZHMgPSBwdHJfdG9fdTY0KGlkcyk7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVCArIDE7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdEFTU0VSVF9PSyhlcnIsIFwidHJhY2luZ19tdWx0aS5iaWdfY291bnRcIik7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUUkFDSU5HX01VTFRJX0NOVDsgaSsrKVxuK1x0XHRBU1NFUlRfRVEoaWRzW2ldLCB0YXJnZXRzW2ldLmlkLCBcInRyYWNpbmdfbXVsdGkuaWRzXCIpO1xuK1xuK1x0LyogSW52YWxpZCBpZHMgcG9pbnRlciAtXHUwMDNlIEVGQVVMVCAqL1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuaWRzID0gMHgxO1xuK1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FRkFVTFQsIFwidHJhY2luZ19tdWx0aS5iYWRfYnRmX2lkc1wiKTtcbitcbitcdC8qIEludmFsaWQgY29va2llcyBwb2ludGVyIC1cdTAwM2UgRUZBVUxUICovXG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbitcdGluZm8udHJhY2luZ19tdWx0aS5jb29raWVzID0gMHgxO1xuK1x0aW5mby50cmFjaW5nX211bHRpLmNvdW50ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4rXHRlcnIgPSBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZCwgXHUwMDI2aW5mbywgXHUwMDI2bGVuKTtcbitcdEFTU0VSVF9FUShlcnIsIC1FRkFVTFQsIFwidHJhY2luZ19tdWx0aS5iYWRfY29va2llc1wiKTtcbitcbitcdC8qIEludmFsaWQgYWRkcnMgcG9pbnRlciAtXHUwMDNlIEVGQVVMVCAqL1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIHNpemVvZihpbmZvKSk7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuYWRkcnMgPSAweDE7XG4rXHRpbmZvLnRyYWNpbmdfbXVsdGkuY291bnQgPSBUUkFDSU5HX01VTFRJX0NOVDtcbitcdGVyciA9IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKGZkLCBcdTAwMjZpbmZvLCBcdTAwMjZsZW4pO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVGQVVMVCwgXCJ0cmFjaW5nX211bHRpLmJhZF9jb29raWVzXCIpO1xuK31cbitcbitzdGF0aWMgdm9pZCB0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc3RydWN0IHRlc3RfZmlsbF9saW5rX2luZm8gKnNrZWwsXG4rXHRcdFx0XHRcdCAgICAgIGJvb2wgaGFzX2Nvb2tpZXMsIGJvb2wgaW52YWxpZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfdHJhY2luZ19tdWx0aV9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCB0bXVsdGlfdGFyZ2V0IHRhcmdldHNbVFJBQ0lOR19NVUxUSV9DTlRdO1xuK1x0X191MzIgaWRzW1RSQUNJTkdfTVVMVElfQ05UXSwgb2JqX2lkO1xuK1x0X191NjQgY29va2llc1tUUkFDSU5HX01VTFRJX0NOVF07XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXHRpbnQgbGlua19mZCwgZXJyLCBpO1xuK1xuKyNpZm5kZWYgX194ODZfNjRfX1xuK1x0dGVzdF9fc2tpcCgpO1xuK1x0cmV0dXJuO1xuKyNlbmRpZlxuK1xuK1x0aWYgKHNldHVwX3RtdWx0aV90YXJnZXRzKHNrZWwtXHUwMDNlcHJvZ3MudG11bHRpX3J1biwgdGFyZ2V0cywgXHUwMDI2b2JqX2lkKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVFJBQ0lOR19NVUxUSV9DTlQ7IGkrKykge1xuK1x0XHRpZHNbaV0gPSB0YXJnZXRzW2ldLmlkO1xuK1x0XHRjb29raWVzW2ldID0gdGFyZ2V0c1tpXS5jb29raWU7XG4rXHR9XG4rXG4rXHRvcHRzLmlkcyA9IGlkcztcbitcdG9wdHMuY250ID0gVFJBQ0lOR19NVUxUSV9DTlQ7XG4rXHRpZiAoaGFzX2Nvb2tpZXMpXG4rXHRcdG9wdHMuY29va2llcyA9IGNvb2tpZXM7XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF90cmFjaW5nX211bHRpKHNrZWwtXHUwMDNlcHJvZ3MudG11bHRpX3J1biwgTlVMTCwgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIobGluaywgXCJicGZfcHJvZ3JhbV9fYXR0YWNoX3RyYWNpbmdfbXVsdGlcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGxpbmtfZmQgPSBicGZfbGlua19fZmQobGluayk7XG4rXHRpZiAoaW52YWxpZCkge1xuK1x0XHR2ZXJpZnlfdHJhY2luZ19tdWx0aV9pbnZhbGlkX3VzZXJfYnVmZmVyKGxpbmtfZmQsIHRhcmdldHMpO1xuK1x0fSBlbHNlIHtcbitcdFx0ZXJyID0gdmVyaWZ5X3RyYWNpbmdfbXVsdGlfbGlua19pbmZvKGxpbmtfZmQsIHNrZWwtXHUwMDNlcHJvZ3MudG11bHRpX3J1bixcbitcdFx0XHRcdFx0XHQgICAgIHRhcmdldHMsIG9ial9pZCwgaGFzX2Nvb2tpZXMpO1xuK1x0XHRBU1NFUlRfT0soZXJyLCBcInZlcmlmeV90cmFjaW5nX211bHRpX2xpbmtfaW5mb1wiKTtcbitcdH1cbitcbitcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK31cbitcbiAjZGVmaW5lIFNFQyhuYW1lKSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKG5hbWUpLCB1c2VkKSlcbiBcbiBzdGF0aWMgc2hvcnQgdXByb2JlX2xpbmtfaW5mb19zZW1hXzEgU0VDKFwiLnByb2Jlc1wiKTtcbkBAIC02NDAsNiArODc1LDEzIEBAIHZvaWQgdGVzdF9maWxsX2xpbmtfaW5mbyh2b2lkKVxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJrcHJvYmVfbXVsdGlfaW52YWxpZF91YnVmZlwiKSlcbiBcdFx0dGVzdF9rcHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInRyYWNpbmdfbXVsdGlfbGlua19pbmZvXCIpKSB7XG4rXHRcdHRlc3RfdHJhY2luZ19tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCBmYWxzZSwgZmFsc2UpO1xuK1x0XHR0ZXN0X3RyYWNpbmdfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgdHJ1ZSwgZmFsc2UpO1xuK1x0fVxuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJ0cmFjaW5nX211bHRpX2ludmFsaWRfdWJ1ZmZcIikpXG4rXHRcdHRlc3RfdHJhY2luZ19tdWx0aV9maWxsX2xpbmtfaW5mbyhza2VsLCB0cnVlLCB0cnVlKTtcbitcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidXByb2JlX211bHRpX2xpbmtfaW5mb1wiKSlcbiBcdFx0dGVzdF91cHJvYmVfbXVsdGlfZmlsbF9saW5rX2luZm8oc2tlbCwgZmFsc2UsIGZhbHNlKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwidXJldHByb2JlX211bHRpX2xpbmtfaW5mb1wiKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9maWxsX2xpbmtfaW5mby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xuaW5kZXggMTM3YmQ2MjkyMTYzYTUuLmM4NTA4MTUzOGU5M2JlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZmlsbF9saW5rX2luZm8uY1xuQEAgLTU4LDQgKzU4LDEwIEBAIGludCBCUEZfUFJPRyh1bXVsdGlfcnVuKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcImZlbnRyeS5tdWx0aVwiKVxuK2ludCBCUEZfUFJPRyh0bXVsdGlfcnVuKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowMzozOS43MzU4NzA1MThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDYwNDM4OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGBmaWxsX2xpbmtfaW5mb2AgSW1wbGVtZW50YXRpb24gZm9yIFRyYWNpbmcgTXVsdGktTGlua3MqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBuZXcgcGF0Y2guIEl0J3MgYWRkaW5nIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCB0byBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua2AuIExvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogdGhlIHVhcGkgaGVhZGVyLCB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uLCBicGZ0b29sLCBhIHRvb2xzIHVhcGkgaGVhZGVyLCBhbmQgc29tZSBzZWxmdGVzdHMuXG5cblNwZWNpZmljYWxseSwgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBpcyBhZGRpbmcgYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIHRvIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHNgLCB3aGljaCBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb24gYSB0cmFjaW5nIG11bHRpLWxpbmsgZmlsZSBkZXNjcmlwdG9yIHZpYSB0aGUgYGJwZmAgc3lzY2FsbC5cblxuVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIExldCdzIHN0YXJ0IHdpdGggYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AgYW5kIHRha2UgYSBsb29rIGF0IGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYC4gQWxyaWdodCwgaXQgbG9va3MgbGlrZSBpdCdzIHJlYWRpbmcgdXNlciBwb2ludGVycyBmb3IgYGNvb2tpZXNgLCBgYWRkcnNgLCBhbmQgYGlkc2AgZnJvbSB0aGUgYGluZm8tXHUwMDNldHJhY2luZ19tdWx0aWAgc3RydWN0dXJlIGFuZCB1c2luZyBgcHV0X3VzZXJgIHRvIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIG5ldyBmZWF0dXJlLCBhIG5ldyBjb2RlIHBhdGggdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbCDigJMgc3BlY2lmaWNhbGx5IGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCB3aXRoIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgLiBBbmQgc2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGJvdW5kcyBjaGVja2luZywgdGhlcmUgYXJlIHBsZW50eSBvZiBhcmVhcyByaXBlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlncy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbi4gTm93LCB3aGF0IGFib3V0IGBDT05GSUdfRlBST0JFYCwgYENPTkZJR19LUFJPQkVTYCwgb3IgYENPTkZJR19CUEZfRVZFTlRTYD8gQSBxdWljayBncmVwIGZvciBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzYCBvciBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgaW4gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2Agc2hvdWxkIGdpdmUgdXMgYSBkZWZpbml0aXZlIGFuc3dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjAzOjQ2Ljc5NjMxMTQ2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE0OTEyMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2OTI9c3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jKHN0cnVjdCBicGZfbGluayAqbGluaylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzAxLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzAyOnN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3MDMtXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfbGlua19pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODUtXFx0LmRlYWxsb2NfZGVmZXJyZWQgPSBicGZfdHJhY2luZ19tdWx0aV9saW5rX2RlYWxsb2MsXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3ODY6XFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4Ny0jaWZkZWYgQ09ORklHX1BST0NfRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDM6NDkuMzExMjMxMjAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzNDg3NTk5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aGUgY29kZSBzdXJyb3VuZGluZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2A6XG5cbioqQW5hbHl6aW5nIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvLCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AuLi4gdGhhdCdzIGEgcHJldHR5IHNwZWNpZmljIGZ1bmN0aW9uIG5hbWUuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbWFwIHRoaXMgdG8gaXRzIGNvbnRleHQgd2l0aGluIHRoZSBCUEYgdHJhY2luZyBmcmFtZXdvcmsuIEdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGFib3V0IG1hbmFnaW5nIGxpbmsgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgc2luY2UgXCJtdWx0aV9saW5rXCIgaXMgaW4gdGhlcmUgdG9vLiBUaGlzIHN1Z2dlc3RzIGludGVyYWN0aW9uIHdpdGggbXVsdGlwbGUgQlBGIHByb2dyYW1zIG9yIGxpbmtzLCB3aGljaCBoYXMgYSBkaXN0aW5jdCBzZXQgb2YgY29tcGxleGl0aWVzLCBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlc2UgcHJvZ3JhbXMgc2hhcmUgZGF0YSwgaG93IHRoZXkgcmVsYXRlLCBhbmQgaG93IHRoZXkgcmVwb3J0IG9uIGV2ZW50cy4gSSdtIGltYWdpbmluZyBpdCdzIHVzZWQgdG8gY29sbGVjdCBvciBnZW5lcmF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgb2YgdGhlIGluZm8gYWJvdXQgdGhlIEJQRiBsaW5rcyBpbnZvbHZlZCBpbiB0cmFjaW5nLiBJIGJldCB0aGlzIGZ1bmN0aW9uIHRha2VzIGluIHNvbWUgY29udGV4dCwgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IG5lZWRzIGZpbGxpbmcgaW4sIGFuZCByZXR1cm5zIGFuIGV4aXQgY29kZSBvZiBzb21lIGtpbmQuXG5cbkknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIHVzZWQuIElzIGl0IGEgY29yZSBmdW5jdGlvbiwgb3IgbW9yZSBvZiBhIGhlbHBlcj8gSXMgaXQgZXhwb3NlZCBpbiB0aGUgbWFpbiBCUEYgQVBJLCBvciBpcyBpdCBtb3JlIG9mIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgb3RoZXIgZnVuY3Rpb25zIGxpa2VseSBjYWxsIHRoaXMgb25lLCBhcyB3ZWxsIGFzIHdoaWNoIGZ1bmN0aW9ucyBpdCdzIGxpa2VseSB0byBjYWxsLiBJZiBpdCdzIGEgZmlsbCBmdW5jdGlvbiwgaXQncyBsaWtlbHkgZmlsbGluZyBpbiBzb21lIGtpbmQgb2Ygc3RydWN0dXJlIHRoYXQgdGhlIHRyYWNpbmcgc3lzdGVtIHVzZXMgdG8gdW5kZXJzdGFuZCBob3cgcHJvZ3JhbXMgYXJlIGxpbmtlZCBhbmQgd2hhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuIEknZCBsaWtlIHRvIGdldCBhIGdvb2QgbWVudGFsIG1vZGVsIG9mIHRoZSB3aG9sZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgdHJhY2luZyBmbG93LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgaW5wdXRzIHRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBzdHJ1Y3R1cmUgaXQgZmlsbHMuIEknbGwgZm9jdXMgb24gdGhlIGRhdGEgaXQgcHJvZHVjZXMgYW5kIHdoZXJlIHRoYXQgZGF0YSBlbmRzIHVwLCBiZWNhdXNlIHRoaXMgaXMgdGhlIGluZm9ybWF0aW9uIG1vc3QgaW1wb3J0YW50IHRvIGEgdXNlciwgbm90IHRoZSBpbnRlcm5hbCBtYWNoaW5hdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDIyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDM6NTMuOTQ2MTA5NDQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzg2NzQ1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzU3PXN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzgyLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4NC1cXHQucmVsZWFzZSA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfcmVsZWFzZSxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zODM5PWludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTAwLVxcdGJwZl9saW5rX2luaXQoXFx1MDAyNmxpbmstXFx1MDAzZWxpbmssIEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSSxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkwMTpcXHRcXHQgICAgICBcXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSk7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjAzOjU2LjAyNDc4ODUwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjU5MzEyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAncyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYC4gSXTigJlzIGEgcHJldHR5IHBvd2VyZnVsIGZ1bmN0aW9uLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0cyBhdmFpbGFiaWxpdHkgaXMgZ292ZXJuZWQgYnkgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdtIHRyeWluZyB0byBnZXQgYSBzZW5zZSBvZiBpdHMgXCJwb3J0YWJpbGl0eVwiIHNvIHRvIHNwZWFrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucywgaWYgYW55LCBJIG5lZWQgdG8gdmVyaWZ5IGFyZSBlbmFibGVkIGJlZm9yZSBJIGNhbiByZWx5IG9uIHRoaXMgYmVpbmcgcHJlc2VudCBhbmQgdXNhYmxlIGluIGEgcGFydGljdWxhciBlbnZpcm9ubWVudC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIGNvZGViYXNlIGZvciBhbnkgb2J2aW91cyBjb25maWctcmVsYXRlZCBjb25kaXRpb25hbHMgc3Vycm91bmRpbmcgaXRzIGRlY2xhcmF0aW9uIG9yIGRlZmluaXRpb24uIE5vIHRpbWUgdG8gd2FzdGUgb24gYXNzdW1wdGlvbnMuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzkzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDM6NTkuNDUwNzIxNzk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODk5OTQ4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9Nzg5PWludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzkwOmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cik7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC03OTEtI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgaW50XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4NDk6YnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04NTAte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTg0ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTQtXFx0XFx0ZWxzZSBpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NTpcXHRcXHRcXHRyZXQgPSBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2gocHJvZywgYXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5Ni1cXHRcXHRlbHNlXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOD1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODM5OmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkyOTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDowMS4zNDA3MjE5NzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMzODc4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIFRyYWNlIEV2ZW50cyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHJhY2UgZXZlbnRzIGFyZSBzdHJ1Y3R1cmVkLiBJJ20gZ29pbmcgdG8ganVtcCBkaXJlY3RseSBpbnRvIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmhgLiBMZXQncyB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDc5MC4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGNvcmUgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBtYWNybyB0aGF0IGxheXMgb3V0IHRoZSBiYXNpYyBmb3JtYXQgb2YgdGhlc2UgZXZlbnRzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBlbGVtZW50czogdGhlIGV2ZW50IGlkZW50aWZpZXIsIHRoZSBmb3JtYXQgc3RyaW5nLCBwZXJoYXBzIHNvbWUgZmllbGRzIHJlbGF0ZWQgdG8gZmlsdGVyaW5nLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIGV2ZW50LXNwZWNpZmljIGRhdGEuIEl04oCZcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBhIG1hY3JvIGZvciBkZWZpbmluZyBzb21lIG9mIHRoZSBoZWxwZXJzIHRvIHNldHVwIHRoZSBldmVudHMuXG5JIHdvbmRlciBpZiB0aGF0IHBhcnRpY3VsYXIgbG9jYXRpb24gaG9sZHMgdGhlIHJlZ2lzdHJhdGlvbiBtYWNyb3MsIG9yIGlmIGl0J3MgdGhlIHN0cnVjdHVyZSBkZWNsYXJhdGlvbiBpdHNlbGYuIFRpbWUgdG8gZmluZCBvdXQuIEknbSBleHBlY3Rpbmcgc29tZSBjbGV2ZXIgdXNlIG9mIHByZXByb2Nlc3NvciBtYWdpYywgSSBqdXN0IGhvcGUgaXQncyBub3Qgb3Zlcmx5IG9iZnVzY2F0ZWQuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUzMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjA0Ljc3NDYwMjY5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4MDpcXHRpbnQgYnBmX3Byb2JlX3VucmVnaXN0ZXIoc3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpidHAsIHN0cnVjdCBicGZfcmF3X3RwX2xpbmsgKmxpbmspO1xcbiA3ODE6XFx0XFxuIDc4MjpcXHRzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnQoY29uc3QgY2hhciAqbmFtZSk7XFxuIDc4MzpcXHR2b2lkIGJwZl9wdXRfcmF3X3RyYWNlcG9pbnQoc3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpidHApO1xcbiA3ODQ6XFx0aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxcbiA3ODU6XFx0XFx0XFx0XFx0ICAgIHUzMiAqZmRfdHlwZSwgY29uc3QgY2hhciAqKmJ1ZixcXG4gNzg2OlxcdFxcdFxcdFxcdCAgICB1NjQgKnByb2JlX29mZnNldCwgdTY0ICpwcm9iZV9hZGRyLFxcbiA3ODc6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKm1pc3NlZCk7XFxuIDc4ODpcXHRpbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcXG4gNzg5OlxcdGludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbiA3OTA6XFx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKTtcXG4gNzkxOlxcdCNlbHNlXFxuIDc5MjpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZihzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxcbiA3OTM6XFx0e1xcbiA3OTQ6XFx0XFx0cmV0dXJuIDE7XFxuIDc5NTpcXHR9XFxuIDc5NjpcXHRcXG4gNzk3OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmX2ZhdWx0YWJsZShzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxcbiA3OTg6XFx0e1xcbiA3OTk6XFx0XFx0cmV0dXJuIDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjA0Ljc3NDY4ODczN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQzNTYyNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyBQcmVwcm9jZXNzb3IgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nLCBcIldoZXJlIGFtIEkgcmlnaHQgbm93IGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpYyBibG9jayBvZiBjb2RlIGlzICphY3R1YWxseSogZ29pbmcgdG8gZG8uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJIGtub3cgdGhlIGxpa2VseSBjdWxwcml0IGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBgI2lmZGVmYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBlbnZpcm9ubWVudC1zcGVjaWZpYyBkZWNpc2lvbnMgYXJlIGJlaW5nIG1hZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZlYXR1cmUgZmxhZ3MsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBvciBvcGVyYXRpbmcgc3lzdGVtIGRlZmluZXMgYXJlIGFjdGl2ZSBhdCB0aGlzIHBvaW50IGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGAjaWZkZWZgIHN0YXRlbWVudCBnb3Zlcm5zIHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIE9uY2UgSSBrbm93IHRoYXQsIEknbGwgaGF2ZSBhIG11Y2ggY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBpbiB0aGlzIHBhcnRpY3VsYXIgYnVpbGQgdmFyaWFudC4gVGltZSB0byBnZXQgZG93biB0byBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MDcuNTE4MjU0NDQxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk4Nzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTY5PXN0cnVjdCB0cmFjZV9keW5hbWljX2luZm8ge1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6NzA6I2lmZGVmIENPTkZJR19DUFVfQklHX0VORElBTlxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNzEtXFx0dTE2XFx0bGVuO1xcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD0yNTE9ZW51bSB0cmFjZV9yZWcge1xcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0yNTMtXFx0VFJBQ0VfUkVHX1VOUkVHSVNURVIsXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDoyNTQ6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMjU1LVxcdFRSQUNFX1JFR19QRVJGX1JFR0lTVEVSLFxcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD0yODk9c3RydWN0IHRyYWNlX2V2ZW50X2NsYXNzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMjkxLVxcdHZvaWRcXHRcXHRcXHQqcHJvYmU7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDoyOTI6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMjkzLVxcdHZvaWRcXHRcXHRcXHQqcGVyZl9wcm9iZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9MzY3PXN0cnVjdCB0cmFjZV9ldmVudF9jYWxsIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtMzg5LVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6MzkwOiNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTM5MS1cXHRpbnRcXHRcXHRcXHRcXHRwZXJmX3JlZmNvdW50O1xcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC0zOTktXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo0MDA6I2lmZGVmIENPTkZJR19EWU5BTUlDX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNDAxLWJvb2wgdHJhY2VfZXZlbnRfZHluX3RyeV9nZXRfcmVmKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9NDI4PXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV9ldmVudF9wdXRfcmVmKHN0cnVjdCB0cmFjZV9ldmVudF9jYWxsICpjYWxsKVxcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC00MzUtXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo0MzY6I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNDM3LXN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19hcnJheV92YWxpZChzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbClcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg9NjQ2PXN0cnVjdCB0cmFjZV9ldmVudF9maWxlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNjc2LVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6Njc3OiNpZmRlZiBDT05GSUdfSElTVF9UUklHR0VSU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtNjc4LWV4dGVybiBzdHJ1Y3QgaXJxX3dvcmsgaGlzdF9wb2xsX3dvcms7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTc1Nj10cmFjZV90cmlnZ2VyX3NvZnRfZGlzYWJsZWQoc3RydWN0IHRyYWNlX2V2ZW50X2ZpbGUgKmZpbGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc3MC1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjc3MTojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTc3Mi11bnNpZ25lZCBpbnQgdHJhY2VfY2FsbF9icGYoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTg3OD1pbnQgdHJhY2VfYXJyYXlfc2V0X2Nscl9ldmVudChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCBjb25zdCBjaGFyICpzeXN0ZW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oLTg4MC1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oOjg4MTojaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04ODItc3RydWN0IHBlcmZfZXZlbnQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RyYWNlX2V2ZW50cy5oPTg4OT1leHRlcm4gdm9pZCBwZXJmX3RyYWNlX2RlbChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaDo4OTA6I2lmZGVmIENPTkZJR19LUFJPQkVfRVZFTlRTXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaC04OTEtZXh0ZXJuIGludCAgcGVyZl9rcHJvYmVfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGJvb2wgaXNfcmV0cHJvYmUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC90cmFjZV9ldmVudHMuaD04OTM9ZXh0ZXJuIGludCBicGZfZ2V0X2twcm9iZV9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcXG4tLVxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtODk4LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmg6ODk5OiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xcbmluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmgtOTAwLWV4dGVybiBpbnQgIHBlcmZfdXByb2JlX2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDowNy41NzQyNDg4MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjExMzMzNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipFeGFtaW5pbmcgdGhlIEJQRiBFdmVudCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIHRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBgQ09ORklHX0JQRl9FVkVOVFNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSBpcyB0byBnbyBkaWdnaW5nIGludG8gYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIFRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBmb3IgYW55dGhpbmcgQlBGLXJlbGF0ZWQgd2l0aCB0cmFjaW5nLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIGhvdyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYWRkaXRpb25hbCBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoYXQgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGhhcyBhbnkgb3RoZXIgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGJlc2lkZXMgdGhlIHRvcC1sZXZlbCBgQ09ORklHX0JQRl9FVkVOVFNgIGZsYWcuIEl0IG1pZ2h0IGJlIGZ1cnRoZXIgZ2F0ZWQgYnkgc29tZSBvdGhlciBmZWF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU0OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjEwLjc4NTU4NDgwNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ4MTc0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtNDctXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjQ4OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00OS1zdHJ1Y3QgYnBmX3RyYWNlX21vZHVsZSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTczPXVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZl9mYXVsdGFibGUoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODQtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4NTojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg2LUJQRl9DQUxMXzIoYnBmX292ZXJyaWRlX3JldHVybiwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdW5zaWduZWQgbG9uZywgcmMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzA2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxNC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzE1OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0VcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE2LUJQRl9DQUxMXzMoYnBmX3Byb2JlX3JlYWRfY29tcGF0LCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2MT1CVEZfU0VUX1NUQVJUKGJ0Zl9hbGxvd2xpc3RfZF9wYXRoKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5NjI6I2lmZGVmIENPTkZJR19TRUNVUklUWVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjMtQlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjU9QlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfb3BlbilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY2LSNlbmRpZlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Njc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRIXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2OC1CVEZfSUQoZnVuYywgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnlfaXAodW5zaWduZWQgbG9uZyBmZW50cnlfaXApXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzYte1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMDc3OiNpZmRlZiBDT05GSUdfWDg2X0tFUk5FTF9JQlRcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3OC1cXHRpZiAoaXNfZW5kYnIoKHZvaWQgKikoZmVudHJ5X2lwIC0gRU5EQlJfSU5TTl9TSVpFKSkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA4ND1CUEZfQ0FMTF8xKGJwZl9nZXRfZnVuY19pcF9rcHJvYmUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA4OC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA4OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA5MC1cXHRydW5fY3R4ID0gY29udGFpbmVyX29mKGN1cnJlbnQtXFx1MDAzZWJwZl9jdHgsIHN0cnVjdCBicGZfdHJhY2VfcnVuX2N0eCwgcnVuX2N0eCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTI3ND1icGZfdHJhY2luZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEyODE6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMjgyLVxcdGNhc2UgQlBGX0ZVTkNfcHJvYmVfcmVhZDpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1MS1cXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNlc2xlZXBhYmxlID8gXFx1MDAyNmJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvIDogXFx1MDAyNmJwZl9nZXRfc3RhY2tfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEzNTI6I2lmZGVmIENPTkZJR19CUEZfS1BST0JFX09WRVJSSURFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTMtXFx0Y2FzZSBCUEZfRlVOQ19vdmVycmlkZV9yZXR1cm46XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzMwLVxcdHN3aXRjaCAoZnVuY19pZCkge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzMxOiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzItXFx0Y2FzZSBCUEZfRlVOQ19za2Jfb3V0cHV0Olxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE4Mjg9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyByYXdfdHJhY2Vwb2ludF9wcm9nX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTgyOTojaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODMwLVxcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3Jhd190cCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjA5PWludCBicGZfZ2V0X3BlcmZfZXZlbnRfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHUzMiAqcHJvZ19pZCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQzLVxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjQ0OiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ1LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX0tQUk9CRSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ5LSNlbmRpZlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjUwOiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjUxLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX1VQUk9CRSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjczPXN1YnN5c19pbml0Y2FsbChzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI3NTojaWZkZWYgQ09ORklHX01PRFVMRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Ni1zdGF0aWMgaW50IGJwZl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBvcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMzI5PXN0cnVjdCBicGZfc2Vzc2lvbl9ydW5fY3R4IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMzM0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzM1OiNpZmRlZiBDT05GSUdfRlBST0JFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzYtc3RydWN0IGJwZl9rcHJvYmVfbXVsdGlfbGluayB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjQ0OD1zdGF0aWMgaW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5Ny1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjQ5ODojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5OS1zdGF0aWMgdm9pZCBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MjctXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNTI4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTI5LVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mjk0Mz1zdGF0aWMgdTY0IGJwZl9rcHJvYmVfbXVsdGlfZW50cnlfaXAoc3RydWN0IGJwZl9ydW5fY3R4ICpjdHgpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk0OC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mjk0OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk1MC1zdHJ1Y3QgYnBmX3Vwcm9iZV9tdWx0aV9saW5rO1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMwMDc9c3RhdGljIGludCBicGZfdXByb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzMtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMwNzQ6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzUtc3RhdGljIHZvaWQgYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzExNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdXByb2JlX211bHRpX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTE4LVxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzExOTojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzEyMC1cXHQuc2hvd19mZGluZm8gPSBicGZfdXByb2JlX211bHRpX3Nob3dfZmRpbmZvLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3MDI9c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU1LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzU2OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzU3LXN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg2LVxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3ODc6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODgtXFx0LnNob3dfZmRpbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjEwLjg0MDQwOTA0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzEwNjYyNDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgKm5vdCogZ3VhcmRlZCBieSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgd2l0aGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgIGl0c2VsZi4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQncyBlaXRoZXIgYWx3YXlzIGNvbXBpbGVkIHdoZW4gdGhhdCBmaWxlIGlzIGluY2x1ZGVkLCBvciB0aGUgaW5jbHVzaW9uIG9mIHRoZSBlbnRpcmUgZmlsZSBpcyBjb25kaXRpb25hbC5cblxuTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBga2VybmVsL3RyYWNlL01ha2VmaWxlYC4gSWYgYGJwZl90cmFjZS5vYCBpcyBidWlsdCBjb25kaXRpb25hbGx5LCBvciBpZiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb250cm9sIGl0cyBpbmNsdXNpb24sIHRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGFuc3dlci4gSXQgaXMgYSB2ZXJ5IGdvb2QgYXBwcm9hY2ggYXMgdGhlIGBNYWtlZmlsZWAgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBhcmUgY29udHJvbGxpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIHdpbGwgZXhpc3Qgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjE0LjE1MTA3NTA3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyNTQ3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9NYWtlZmlsZT01ND1LQ09WX0lOU1RSVU1FTlRfdHJhY2VfaXJxc29mZi5vIDo9IG5cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtNTUtXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjU2OkNGTEFHU19icGZfdHJhY2UubyA6PSAtSSQoc3JjKVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS01Ny1cXG4tLVxcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT0xMDk9b2JqLSQoQ09ORklHX1VTRVJfRVZFTlRTKSArPSB0cmFjZV9ldmVudHNfdXNlci5vXFxua2VybmVsL3RyYWNlL01ha2VmaWxlOjExMDpvYmotJChDT05GSUdfQlBGX0VWRU5UUykgKz0gYnBmX3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtMTExLW9iai0kKENPTkZJR19LUFJPQkVfRVZFTlRTKSArPSB0cmFjZV9rcHJvYmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDoxNC4yMDUzMzg0MDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NDgyNjAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIEJQRiBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBuZWVkIGZvciBgQ09ORklHX0JQRl9FVkVOVFNgLiBUaGF0J3MgYSBnaXZlbiwgbmF0dXJhbGx5LiBCdXQgdGhlbiBJIGhhdmUgdG8gYXNrIG15c2VsZiwgd2hhdCBhYm91dCBgQ09ORklHX0JQRl9TWVNDQUxMYD8gSG1tbSwgeWVzLCBpdCBzZWVtcyBlc3NlbnRpYWwgZm9yIEJQRiBsaW5rcywgc28gdGhhdCdzIGluIHRoZSBtaXguIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIGx1cmtpbmcgYWJvdXQgdGhhdCBJJ20gb3Zlcmxvb2tpbmc/IEkgYmV0dGVyIGRvIGEgcXVpY2sgc2Nhbi4gTGV0IG1lIHNlZS4uLiBJJ2xsIGNoZWNrIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGFkZGl0aW9uYWwgZmxhZ3MgbWlnaHQgY29tZSBpbnRvIHBsYXkgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTQxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MTcuNDgwMTY3MDA4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Nzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgzOSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgzOTpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MDpcXHR7XFxuMzg0MTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDQ6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NTpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ2OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0NzpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDg6XFx0XFx0aW50IGVycjtcXG4zODQ5OlxcdFxcbjM4NTA6XFx0XFx0dWlkcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmlkcyk7XFxuMzg1MTpcXHRcXHRjbnQgPSBhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNudDtcXG4zODUyOlxcdFxcbjM4NTM6XFx0XFx0aWYgKCFjbnQgfHwgIXVpZHMpXFxuMzg1NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zODU1OlxcdFxcdGlmIChjbnQgXFx1MDAzZSBNQVhfVFJBQ0lOR19NVUxUSV9DTlQpXFxuMzg1NjpcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbjM4NTc6XFx0XFx0aWYgKGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLmZsYWdzIHx8IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRhcmdldF9mZClcXG4zODU4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4NTk6XFx0XFxuMzg2MDpcXHRcXHRpZHMgPSBrdm1hbGxvY19vYmpzKCppZHMsIGNudCk7XFxuMzg2MTpcXHRcXHRpZiAoIWlkcylcXG4zODYyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM4NjM6XFx0XFxuMzg2NDpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoaWRzLCB1aWRzLCBjbnQgKiBzaXplb2YoKmlkcykpKSB7XFxuMzg2NTpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjM4NjY6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODY3OlxcdFxcdH1cXG4zODY4OlxcdFxcbjM4Njk6XFx0XFx0dWNvb2tpZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudHJhY2luZ19tdWx0aS5jb29raWVzKTtcXG4zODcwOlxcdFxcdGlmICh1Y29va2llcykge1xcbjM4NzE6XFx0XFx0XFx0Y29va2llcyA9IGt2bWFsbG9jX29ianMoKmNvb2tpZXMsIGNudCk7XFxuMzg3MjpcXHRcXHRcXHRpZiAoIWNvb2tpZXMpIHtcXG4zODczOlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg3NDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4NzU6XFx0XFx0XFx0fVxcbjM4NzY6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGNvb2tpZXMsIHVjb29raWVzLCBjbnQgKiBzaXplb2YoKmNvb2tpZXMpKSkge1xcbjM4Nzc6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4zODc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg3OTpcXHRcXHRcXHR9XFxuMzg4MDpcXHRcXHR9XFxuMzg4MTpcXHRcXG4zODgyOlxcdFxcdGVyciA9IGNoZWNrX2R1cF9pZHMoaWRzLCBjb29raWVzLCBjbnQpO1xcbjM4ODM6XFx0XFx0aWYgKGVycilcXG4zODg0OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg4NTpcXHRcXG4zODg2OlxcdFxcdGlmIChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEkpIHtcXG4zODg3OlxcdFxcdFxcdGZleGl0cyA9IGt2bWFsbG9jX29ianMoKmZleGl0cywgY250KTtcXG4zODg4OlxcdFxcdFxcdGlmICghZmV4aXRzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjE3LjQ4MDMyNjc3OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTk1MzE2Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRyYWNpbmcgTXVsdGktTGluayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AsIHdoaWNoIGlzIHRoZSBgZmlsbF9saW5rX2luZm9gIGltcGxlbWVudGF0aW9uIGZvciBgQlBGX0xJTktfVFlQRV9UUkFDSU5HX01VTFRJYC4gVGhhdCdzIGdvb2QsIGl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIOKAkyBjb25maXJtZWQgdmlhIGBicGYoQlBGX09CSl9HRVRfSU5GT19CWV9GRCwgLi4uKWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGUgcmVxdWlyZWQgY29uZmlncyBhcmUgYEJQRl9FVkVOVFNgIGFuZCBgQlBGX1NZU0NBTExgLCB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGdvdGNoYXMuIFdoYXQgYWJvdXQgYENPTkZJR19GUFJPQkVgIG9yIGBDT05GSUdfS1BST0JFX0VWRU5UU2A/IE5lZWQgdG8gYmUgc3VyZSB0byBjaGVjayB0aG9zZS5cblxuVGhpbmtpbmcgbW9yZSBicm9hZGx5LCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBjbGVhcmx5IHVzZWQgZm9yIGRpZmZlcmVudCB0eXBlczogYEJQRl9UUkFDRV9GRU5UUllfTVVMVElgLCBgQlBGX1RSQUNFX0ZFWElUX01VTFRJYCwgYW5kIGBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVElgLiBUaGVzZSBhcmUgYWxsIHRyYWNpbmcgcHJvZ3JhbXMsIHNvIGl0IG1ha2VzIHNlbnNlLiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGlzIGRlZmluZWQgd2l0aGluIGFueSBvdGhlciBjb25maWcgYXMgd2VsbCwgSSB3b3VsZCBoYXZlIGV4cGVjdGVkIHRoZXNlIHR5cGVzIG9mIGRlZmluaXRpb25zIHRvIGJlIHdlbGwgc3RydWN0dXJlZC5cblxuUmlnaHQsIEkganVzdCBzYXcgaW4gYGluY2x1ZGUvbGludXgvdHJhY2VfZXZlbnRzLmhgLCBpdCdzIGFsbCB1bmRlciBgQ09ORklHX0JQRl9FVkVOVFNgLiBUaGF0J3MgZ29vZDsgaXQgY29uZmlybXMgbXkgZmlyc3QgdGhvdWdodC4gRmluYWxseSwgbGV0J3MgdmVyaWZ5IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgY29udGFpbnMgYGlzX3RyYWNpbmdfbXVsdGlgIHRvIGNsb3NlIHRoaXMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk3NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjIyLjY3NTY0NTQyM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NTgxMDY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc190cmFjaW5nX211bHRpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MjE3OT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Byb2dfcHV0X3JlY3Vyc2lvbl9jb250ZXh0KHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjE5Mi1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjIxOTM6c3RhdGljIGlubGluZSBib29sIGlzX3RyYWNpbmdfbXVsdGkoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIxOTQte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9Mjk3Mj1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMwNDctXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzA0ODpcXHRtdWx0aV9mdW5jID0gaXNfdHJhY2luZ19tdWx0aShhdHRyLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzA0OS1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU4NDQ9c3RhdGljIGludCBsaW5rX2NyZWF0ZSh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODkzLVxcdFxcdFxcdHJldCA9IGNncm91cF9icGZfbGlua19hdHRhY2goYXR0ciwgcHJvZyk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NDpcXHRcXHRlbHNlIGlmIChpc190cmFjaW5nX211bHRpKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk1LVxcdFxcdFxcdHJldCA9IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChwcm9nLCBhdHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODc5Mz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9tb2RpZnlfcmV0dXJuKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3QgY2hhciAqZnVuY19uYW1lKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODAzLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgwNDpzdGF0aWMgYm9vbCBpc190cmFjaW5nX211bHRpX2lkKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDUte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgwNjpcXHRyZXR1cm4gaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkgXFx1MDAyNlxcdTAwMjYgYnBmX211bHRpX2Z1bmNfYnRmX2lkWzBdID09IGJ0Zl9pZDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDctfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODA5PXN0YXRpYyBpbnQgYnRmX2lkX2FsbG93X3NsZWVwYWJsZSh1MzIgYnRmX2lkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgyOC1cXHRcXHQgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4Mjk6XFx0XFx0aWYgKGlzX3RyYWNpbmdfbXVsdGlfaWQocHJvZywgYnRmX2lkKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NTg9aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMjUtXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTI2OlxcdFxcdGlmIChpc190cmFjaW5nX211bHRpX2lkKHByb2csIGJ0Zl9pZCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMjctXFx0XFx0XFx0aWYgKGJ0Zl9pc19tb2R1bGUoYnRmKSkge1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MjYzPXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzQ3LVxcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfVFJBQ0lORyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM0ODpcXHQgICAgaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzQ5LVxcdFxcdHJldHVybiAwO1xcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYz03NzcyPXN0YXRpYyBpbnQgbGliYnBmX2ZpbmRfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csIGNvbnN0IGNoYXIgKmF0dGFjaF9uYW1lLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03Nzc0LVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6Nzc3NTpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdHJhY2luZ19tdWx0aShlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmMtNzc3Ni17XFxuLS1cXG50b29scy9saWIvYnBmL2xpYmJwZi5jPTc4Mzk9c3RhdGljIGludCBsaWJicGZfcHJlcGFyZV9wcm9nX2xvYWQoc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nLFxcbi0tXFxudG9vbHMvbGliL2JwZi9saWJicGYuYy03OTAxLVxcbnRvb2xzL2xpYi9icGYvbGliYnBmLmM6NzkwMjpcXHRpZiAoaXNfdHJhY2luZ19tdWx0aShwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpIHtcXG50b29scy9saWIvYnBmL2xpYmJwZi5jLTc5MDMtXFx0XFx0aW50IGVyciwgYnRmX29ial9mZCA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjI0LjU3MTQ2MTg3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA4NDI0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQlBGIFRyYWNpbmcgSW5mcmFzdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBpc190cmFjaW5nX211bHRpYCBmdW5jdGlvbiBjYWxsLCBhbmQgaXQncyBsb29raW5nIGxpa2UgaXQncyBkZWZpbmVkIHdpdGhpbiB0aGUgTGludXgga2VybmVsIGhlYWRlcnMuIFNwZWNpZmljYWxseSwgdGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBpdCdzIGxvY2F0ZWQgaW4gYGluY2x1ZGUvbGludXgvYnBmLmhgLiBSaWdodCwgdGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBzb21ldGhpbmcgcmVsYXRlZCB0byBCUEYgdHJhY2luZyBmdW5jdGlvbmFsaXR5LiBTbywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoYXQgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCwgYW5kIHZlcmlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgcm9sZSBpbiB0aGUgQlBGIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgdHJhY2luZyBjYXBhYmlsaXRpZXMuIExldCdzIHNlZSB3aGF0IHRoYXQgaGVhZGVyIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MjcuNDc5ODkwMjg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTc1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxOTA6XFx0I2VuZGlmXFxuMjE5MTpcXHR9XFxuMjE5MjpcXHRcXG4yMTkzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc190cmFjaW5nX211bHRpKGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuMjE5NDpcXHR7XFxuMjE5NTpcXHRcXHRyZXR1cm4gdHlwZSA9PSBCUEZfVFJBQ0VfRkVOVFJZX01VTFRJIHx8IHR5cGUgPT0gQlBGX1RSQUNFX0ZFWElUX01VTFRJIHx8XFxuMjE5NjpcXHRcXHQgICAgICAgdHlwZSA9PSBCUEZfVFJBQ0VfRlNFU1NJT05fTVVMVEk7XFxuMjE5NzpcXHR9XFxuMjE5ODpcXHRcXG4yMTk5OlxcdCNpZiBkZWZpbmVkKENPTkZJR19CUEZfSklUKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CUEZfU1lTQ0FMTClcXG4yMjAwOlxcdC8qIFRoaXMgbWFjcm8gaGVscHMgZGV2ZWxvcGVyIHRvIHJlZ2lzdGVyIGEgc3RydWN0X29wcyB0eXBlIGFuZCBnZW5lcmF0ZVxcbjIyMDE6XFx0ICogdHlwZSBpbmZvcm1hdGlvbiBjb3JyZWN0bHkuIERldmVsb3BlcnMgc2hvdWxkIHVzZSB0aGlzIG1hY3JvIHRvIHJlZ2lzdGVyXFxuMjIwMjpcXHQgKiBhIHN0cnVjdF9vcHMgdHlwZSBpbnN0ZWFkIG9mIGNhbGxpbmcgX19yZWdpc3Rlcl9icGZfc3RydWN0X29wcygpIGRpcmVjdGx5LlxcbjIyMDM6XFx0ICovXFxuMjIwNDpcXHQjZGVmaW5lIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKHN0X29wcywgdHlwZSlcXHRcXHRcXHRcXHRcXFxcXFxuMjIwNTpcXHRcXHQoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4yMjA2OlxcdFxcdFxcdHN0cnVjdCBicGZfc3RydWN0X29wc18jI3R5cGUge1xcdFxcdFxcdFxcdFxcXFxcXG4yMjA3OlxcdFxcdFxcdFxcdHN0cnVjdCBicGZfc3RydWN0X29wc19jb21tb25fdmFsdWUgY29tbW9uO1xcdFxcXFxcXG4yMjA4OlxcdFxcdFxcdFxcdHN0cnVjdCB0eXBlIGRhdGEgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXHRcXFxcXFxuMjIwOTpcXHRcXHRcXHR9O1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MjcuNDgwMTE4MzM1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDE2MTkwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIFRyYWNpbmcgTXVsdGktTGluayBGZWF0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXNfdHJhY2luZ19tdWx0aWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgcHJpbWFyaWx5IGFib3V0IGNoZWNraW5nIHRoZSBhdHRhY2ggdHlwZS4gTWFrZXMgc2Vuc2UuIERlZmluaXRlbHkgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgY29yZSBzeW1ib2xzIHRvIGZvY3VzIG9uIGhlcmUsIGFzIGZhciBhcyB0aGlzIHBhdGNoIGlzIGNvbmNlcm5lZCwgYXJlIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYC4gT2YgY291cnNlLCBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyAqYWxzbyogYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbHRob3VnaCBJIGNhbiBzZWUgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGlzIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aG9zZSBvdGhlciB0d28uXG5cblRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBCUEZfRVZFTlRTYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgZGVmaW5pdGVseSByZXF1aXJlZC5cblxuTm93LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgdGhlcmUgYW55IGRlcGVuZGVuY3kgb24gYENPTkZJR19GUFJPQkVgIG9yIGBDT05GSUdfS1BST0JFU2AgZm9yIHRoaXMgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgZnVuY3Rpb25hbGl0eT8gU2luY2UgaXQgdXNlcyBgYnBmX3RyYW1wX25vZGVgIGFuZCBgYnBmX3RyYW1wb2xpbmVgLCB0aG9zZSBhcmUgd2hhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIExldCBtZSBkaWcgaW50byB3aGVyZSBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpcyBhY3R1YWxseSBkZWZpbmVkLCB3aGljaCBhcHBlYXJzIHRvIGJlIGluIGBrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM2OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjMxLjcyMTc0MDE2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2MDY1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgxOD1zdGF0aWMgaW50IGNoZWNrX2R1cF9pZHModTMyICppZHMsIHU2NCAqY29va2llcywgdTMyIGNudClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zODM4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozODM5OmludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzg0MC17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyOC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkyOTppbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM5MzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDozMS43NzczNTE2NDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMzkxMDU5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBzZWxmLXJlZmxlY3Rpb246XG5cbioqRGVlcCBEaXZlIGludG8gYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgRHVhbGl0eSoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc29tZXRoaW5nIGlzIGJ1Z2dpbmcgbWU6IHdoeSBpbiB0aGUgKndvcmxkKiBhcmUgdGhlcmUgKnR3byogZGVmaW5pdGlvbnMgZm9yIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgPyBJIG1lYW4sIEkga25vdyBob3cgdGhlc2UgdGhpbmdzIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGlzIGdlbmVyYWxseSBwcmV0dHkgZ29vZCwgYnV0IHRoaXMgZmVlbHMuLi4gcmVkdW5kYW50LiBJcyBpdCBkdWUgdG8gc29tZSBoaXN0b3JpY2FsIHJlYXNvbiwgYSByZWZhY3RvcmluZywgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkaWZmZXJlbmNlLCBvciBwZXJoYXBzIHNvbWUgc3VidGxlIHNlbWFudGljIGRpc3RpbmN0aW9uIHRoYXQgSSdtIG1pc3Npbmc/IE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGxpa2VseSBhIGxheWVyaW5nIGlzc3VlIHdoZXJlIGRpZmZlcmVudCBrZXJuZWwgc3Vic3lzdGVtcyBlbmRlZCB1cCBkZXZlbG9waW5nIHNpbWlsYXIgZnVuY3Rpb25zIGluZGVwZW5kZW50bHksIGFuZCB0aGUgY29uc29saWRhdGlvbiBuZXZlciBxdWl0ZSBoYXBwZW5lZC4gVGhhdCdzIGEgY2xhc3NpYyBpbiBjb2RlYmFzZXMgdGhpcyBzaXplLlxuXG5JJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9iYWJsZSB1c2UgY2FzZXMuIElzIG9uZSBsaWtlbHkgaW4gYSBkaXJlY3QgYXR0YWNobWVudCBzY2VuYXJpbywgYW5kIHRoZSBvdGhlciBtb3JlIGFic3RyYWN0ZWQ/IERvZXMgb25lIG1hbmFnZSBzb21lIGdsb2JhbCBzdGF0ZSB3aGlsZSB0aGUgb3RoZXIgaXMgbW9yZSBmb2N1c2VkIG9uIGxvY2FsIHJlc291cmNlcz8gQXJlIHRoZSBhcmd1bWVudHMgZGlmZmVyZW50IGVub3VnaCB0byBqdXN0aWZ5IHNlcGFyYXRlIGltcGxlbWVudGF0aW9ucywgb3IgaXMgdGhlcmUgYSBzdHJvbmcgY29kZS1yZXVzZSBvcHBvcnR1bml0eSB0aGF0IHdhcyBtaXNzZWQ/XG5cbkknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIHJlYWxseSBzdXNzIHRoaXMgb3V0LiBJJ20gaG9waW5nIEkgZG9uJ3QgcnVuIGludG8gYSBzcGFnaGV0dGkgbWVzcyBvZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGJ1dCBleHBlcmllbmNlIHRlbGxzIG1lIHRvIHByZXBhcmUgZm9yIGl0LiBVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGRlc2lnbiBjaG9pY2UuIFBlcmhhcHMgdGhlcmUncyBhbiBvcHRpbWl6YXRpb24gSSdtIG92ZXJsb29raW5nLCBvciBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZiB0aGF0IHdhcyBtYWRlLiBJdCdzIHRpbWUgdG8gcHV0IG9uIG15IGRldGVjdGl2ZSBoYXQgYW5kIGdvIGV4cGxvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDozNS43MTEyNjQ4NzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgzMDpcXHRcXHRmb3IgKGludCBpID0gMTsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuMzgzMTpcXHRcXHRcXHRpZiAoaWRzW2ldID09IGlkc1tpIC0gMV0pIHtcXG4zODMyOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMzgzMzpcXHRcXHRcXHRcXHRicmVhaztcXG4zODM0OlxcdFxcdFxcdH1cXG4zODM1OlxcdFxcdH1cXG4zODM2OlxcdFxcdHJldHVybiBlcnI7XFxuMzgzNzpcXHR9XFxuMzgzODpcXHRcXG4zODM5OlxcdGludCBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cilcXG4zODQwOlxcdHtcXG4zODQxOlxcdFxcdHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rICpsaW5rID0gTlVMTDtcXG4zODQyOlxcdFxcdHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqZmV4aXRzID0gTlVMTDtcXG4zODQzOlxcdFxcdHN0cnVjdCBicGZfbGlua19wcmltZXIgbGlua19wcmltZXI7XFxuMzg0NDpcXHRcXHR1MzIgY250LCAqaWRzID0gTlVMTDtcXG4zODQ1OlxcdFxcdHU2NCBfX3VzZXIgKnVjb29raWVzO1xcbjM4NDY6XFx0XFx0dTY0ICpjb29raWVzID0gTlVMTDtcXG4zODQ3OlxcdFxcdHUzMiBfX3VzZXIgKnVpZHM7XFxuMzg0ODpcXHRcXHRpbnQgZXJyO1xcbjM4NDk6XFx0XFxuMzg1MDpcXHRcXHR1aWRzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuaWRzKTtcXG4zODUxOlxcdFxcdGNudCA9IGF0dHItXFx1MDAzZWxpbmtfY3JlYXRlLnRyYWNpbmdfbXVsdGkuY250O1xcbjM4NTI6XFx0XFxuMzg1MzpcXHRcXHRpZiAoIWNudCB8fCAhdWlkcylcXG4zODU0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM4NTU6XFx0XFx0aWYgKGNudCBcXHUwMDNlIE1BWF9UUkFDSU5HX01VTFRJX0NOVClcXG4zODU2OlxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuMzg1NzpcXHRcXHRpZiAoYXR0ci1cXHUwMDNlbGlua19jcmVhdGUuZmxhZ3MgfHwgYXR0ci1cXHUwMDNlbGlua19jcmVhdGUudGFyZ2V0X2ZkKVxcbjM4NTg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzg1OTpcXHRcXG4zODYwOlxcdFxcdGlkcyA9IGt2bWFsbG9jX29ianMoKmlkcywgY250KTtcXG4zODYxOlxcdFxcdGlmICghaWRzKVxcbjM4NjI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzg2MzpcXHRcXG4zODY0OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihpZHMsIHVpZHMsIGNudCAqIHNpemVvZigqaWRzKSkpIHtcXG4zODY1OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMzg2NjpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4Njc6XFx0XFx0fVxcbjM4Njg6XFx0XFxuMzg2OTpcXHRcXHR1Y29va2llcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2VsaW5rX2NyZWF0ZS50cmFjaW5nX211bHRpLmNvb2tpZXMpO1xcbjM4NzA6XFx0XFx0aWYgKHVjb29raWVzKSB7XFxuMzg3MTpcXHRcXHRcXHRjb29raWVzID0ga3ZtYWxsb2Nfb2JqcygqY29va2llcywgY250KTtcXG4zODcyOlxcdFxcdFxcdGlmICghY29va2llcykge1xcbjM4NzM6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4zODc0OlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzg3NTpcXHRcXHRcXHR9XFxuMzg3NjpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoY29va2llcywgdWNvb2tpZXMsIGNudCAqIHNpemVvZigqY29va2llcykpKSB7XFxuMzg3NzpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjM4Nzg6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODc5OlxcdFxcdFxcdH1cXG4zODgwOlxcdFxcdH1cXG4zODgxOlxcdFxcbjM4ODI6XFx0XFx0ZXJyID0gY2hlY2tfZHVwX2lkcyhpZHMsIGNvb2tpZXMsIGNudCk7XFxuMzg4MzpcXHRcXHRpZiAoZXJyKVxcbjM4ODQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4zODg1OlxcdFxcbjM4ODY6XFx0XFx0aWYgKHByb2ctXFx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSSkge1xcbjM4ODc6XFx0XFx0XFx0ZmV4aXRzID0ga3ZtYWxsb2Nfb2JqcygqZmV4aXRzLCBjbnQpO1xcbjM4ODg6XFx0XFx0XFx0aWYgKCFmZXhpdHMpIHtcXG4zODg5OlxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg5MDpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4OTE6XFx0XFx0XFx0fVxcbjM4OTI6XFx0XFx0fVxcbjM4OTM6XFx0XFxuMzg5NDpcXHRcXHRsaW5rID0ga3Z6YWxsb2NfZmxleCgqbGluaywgbm9kZXMsIGNudCk7XFxuMzg5NTpcXHRcXHRpZiAoIWxpbmspIHtcXG4zODk2OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMzg5NzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjM4OTg6XFx0XFx0fVxcbjM4OTk6XFx0XFxuMzkwMDpcXHRcXHRicGZfbGlua19pbml0KFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVEksXFxuMzkwMTpcXHRcXHRcXHQgICAgICBcXHUwMDI2YnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzLCBwcm9nLCBwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSk7XFxuMzkwMjpcXHRcXG4zOTAzOlxcdFxcdGVyciA9IGJwZl9saW5rX3ByaW1lKFxcdTAwMjZsaW5rLVxcdTAwM2VsaW5rLCBcXHUwMDI2bGlua19wcmltZXIpO1xcbjM5MDQ6XFx0XFx0aWYgKGVycilcXG4zOTA1OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMzkwNjpcXHRcXG4zOTA3OlxcdFxcdGxpbmstXFx1MDAzZW5vZGVzX2NudCA9IGNudDtcXG4zOTA4OlxcdFxcdGxpbmstXFx1MDAzZWNvb2tpZXMgPSBjb29raWVzO1xcbjM5MDk6XFx0XFx0bGluay1cXHUwMDNlZmV4aXRzID0gZmV4aXRzO1xcbjM5MTA6XFx0XFxuMzkxMTpcXHRcXHRlcnIgPSBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2gocHJvZywgaWRzLCBsaW5rKTtcXG4zOTEyOlxcdFxcdGt2ZnJlZShpZHMpO1xcbjM5MTM6XFx0XFx0aWYgKGVycikge1xcbjM5MTQ6XFx0XFx0XFx0YnBmX2xpbmtfY2xlYW51cChcXHUwMDI2bGlua19wcmltZXIpO1xcbjM5MTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zOTE2OlxcdFxcdH1cXG4zOTE3OlxcdFxcdHJldHVybiBicGZfbGlua19zZXR0bGUoXFx1MDAyNmxpbmtfcHJpbWVyKTtcXG4zOTE4OlxcdFxcbjM5MTk6XFx0ZXJyb3I6XFxuMzkyMDpcXHRcXHRrdmZyZWUoZmV4aXRzKTtcXG4zOTIxOlxcdFxcdGt2ZnJlZShjb29raWVzKTtcXG4zOTIyOlxcdFxcdGt2ZnJlZShpZHMpO1xcbjM5MjM6XFx0XFx0a3ZmcmVlKGxpbmspO1xcbjM5MjQ6XFx0XFx0cmV0dXJuIGVycjtcXG4zOTI1OlxcdH1cXG4zOTI2OlxcdFxcbjM5Mjc6XFx0I2Vsc2VcXG4zOTI4OlxcdFxcbjM5Mjk6XFx0aW50IGJwZl90cmFjaW5nX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDozNS43MTE2MDk2OTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MDgxNjM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBEaXJlY3RpdmVzKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyB3aGVuIGVuY291bnRlcmluZyB0aGlzIHBpZWNlIG9mIGNvZGUgaXMgaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHBpbnBvaW50IHRoZSBjb250ZXh0LiBUaGUgYCNpZmRlZmAgZGlyZWN0aXZlIGlzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoaWNoIHByZXByb2Nlc3NvciBtYWNybyBpcyBiZWluZyB0ZXN0ZWQuIEtub3dpbmcgdGhlIHNwZWNpZmljIGAjaWZkZWZgIGlzIGNydWNpYWwgdG8gZmlndXJpbmcgb3V0ICp3aGF0KiB0aGlzIGJsb2NrIG9mIGNvZGUgaXMgYWN0dWFsbHkgc3VwcG9zZWQgdG8gZG8gb3IgKndoeSogaXQncyBoZXJlIGF0IGFsbC4gSXMgaXQgZm9yIGEgc3BlY2lmaWMgcGxhdGZvcm0sIGEgZmVhdHVyZSBmbGFnLCBhIGRlYnVnIG1vZGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaXRob3V0IHRoYXQgaW5mb3JtYXRpb24sIHRoaXMgY29kZSBpcyBiYXNpY2FsbHkgbWVhbmluZ2xlc3MgdG8gbWUuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGVzdGFibGlzaCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgc28gSSBjYW4gc3RhcnQgdG8gcmVhc29uIHRocm91Z2ggdGhlIGxvZ2ljIHdpdGhpbiB0aGlzIGJsb2NrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6MzguNjUyNDI4NTU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ1MDU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZWxzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTU3PXN0YXRpYyBzdHJ1Y3QgYnBmX3Jhd19ldmVudF9tYXAgKmJwZl9nZXRfcmF3X3RyYWNlcG9pbnRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtNzctfVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo3ODojZWxzZVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy03OS1zdGF0aWMgc3RydWN0IGJwZl9yYXdfZXZlbnRfbWFwICpicGZfZ2V0X3Jhd190cmFjZXBvaW50X21vZHVsZShjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzNTg9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdzLCBicGZfa3Byb2JlX211bHRpX3B0X3JlZ3MpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMzU5LSNkZWZpbmUgYnBmX2twcm9iZV9tdWx0aV9wdF9yZWdzX3B0cigpXFx0dGhpc19jcHVfcHRyKFxcdTAwMjZicGZfa3Byb2JlX211bHRpX3B0X3JlZ3MpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIzNjA6I2Vsc2VcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjM2MS0jZGVmaW5lIGJwZl9rcHJvYmVfbXVsdGlfcHRfcmVnc19wdHIoKVxcdChOVUxMKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI3Nzk9aW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTMzLX1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjkzNDojZWxzZSAvKiAhQ09ORklHX0ZQUk9CRSAqL1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTM1LWludCBicGZfa3Byb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzI1MD1pbnQgYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM0MDAtfVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNDAxOiNlbHNlIC8qICFDT05GSUdfVVBST0JFUyAqL1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNDAyLWludCBicGZfdXByb2JlX211bHRpX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzgzOT1pbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzkyNi1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzkyNzojZWxzZVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zOTI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDozOC43MDg4ODQwODZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5MTI4ODIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIFByZS1yZXF1aXNpdGVzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBoZWFkZmlyc3QgaW50byBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiBzb21ldGhpbmcgZm91bmRhdGlvbmFsOiBgI2lmZGVmYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY2xhcmlmeSBpdHMgcm9sZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhpcywgbGlrZWx5IGtlcm5lbCwgZGV2ZWxvcG1lbnQuIEknbSB0aGlua2luZywgaXMgdGhpcyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGd1YXJkPyBBbmQgaWYgc28sIHdoYXQncyBpdCBndWFyZGluZz8gSXMgaXQgZmVhdHVyZSBhdmFpbGFiaWxpdHksIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUsIHZlcnNpb24gY29tcGF0aWJpbGl0eS4uLiB0aGUgcG9zc2liaWxpdGllcyBhcmUgdmFzdCwgYW5kIEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLiBHcmFzcGluZyB0aGUgaW50ZW50IG9mIHRoZSBgI2lmZGVmYCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUncyBiZWhhdmlvci4gSXTigJlzIGFib3V0IGJ1aWxkaW5nIGEgcm9idXN0IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmRpdGlvbnMgdGhhdCBicmluZyBgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoYCBpbnRvIGV4aXN0ZW5jZS4gSSB3YW50IHRvIGJ1aWxkIGEgcm9jay1zb2xpZCBmb3VuZGF0aW9uIG9mIGtub3dsZWRnZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Nzk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NDQuMDAwMTc0NjA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI5NTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00Ny1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6NDg6I2lmZGVmIENPTkZJR19NT0RVTEVTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTQ5LXN0cnVjdCBicGZfdHJhY2VfbW9kdWxlIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzM9dW5zaWduZWQgaW50IHRyYWNlX2NhbGxfYnBmX2ZhdWx0YWJsZShzdHJ1Y3QgdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqY3R4KVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTg1OiNpZmRlZiBDT05GSUdfQlBGX0tQUk9CRV9PVkVSUklERVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODYtQlBGX0NBTExfMihicGZfb3ZlcnJpZGVfcmV0dXJuLCBzdHJ1Y3QgcHRfcmVncyAqLCByZWdzLCB1bnNpZ25lZCBsb25nLCByYylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMDY9Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9wcm9iZV9yZWFkX2tlcm5lbF9zdHJfcHJvdG8gPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMTU6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTYtQlBGX0NBTExfMyhicGZfcHJvYmVfcmVhZF9jb21wYXQsIHZvaWQgKiwgZHN0LCB1MzIsIHNpemUsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9OTYxPUJURl9TRVRfU1RBUlQoYnRmX2FsbG93bGlzdF9kX3BhdGgpXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2MjojaWZkZWYgQ09ORklHX1NFQ1VSSVRZXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2My1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2NT1CVEZfSUQoZnVuYywgc2VjdXJpdHlfZmlsZV9vcGVuKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjYtI2VuZGlmXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjk2NzojaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1BBVEhcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY4LUJURl9JRChmdW5jLCBzZWN1cml0eV9wYXRoX3RydW5jYXRlKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEwNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbnRyeV9pcCh1bnNpZ25lZCBsb25nIGZlbnRyeV9pcClcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3Ni17XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEwNzc6I2lmZGVmIENPTkZJR19YODZfS0VSTkVMX0lCVFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDc4LVxcdGlmIChpc19lbmRicigodm9pZCAqKShmZW50cnlfaXAgLSBFTkRCUl9JTlNOX1NJWkUpKSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDg0PUJQRl9DQUxMXzEoYnBmX2dldF9mdW5jX2lwX2twcm9iZSwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDg4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMDg5OiNpZmRlZiBDT05GSUdfVVBST0JFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMDkwLVxcdHJ1bl9jdHggPSBjb250YWluZXJfb2YoY3VycmVudC1cXHUwMDNlYnBmX2N0eCwgc3RydWN0IGJwZl90cmFjZV9ydW5fY3R4LCBydW5fY3R4KTtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMjc0PWJwZl90cmFjaW5nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTI4MC1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZF9wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTI4MTojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX05PTl9PVkVSTEFQUElOR19BRERSRVNTX1NQQUNFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODItXFx0Y2FzZSBCUEZfRlVOQ19wcm9iZV9yZWFkOlxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTEzNDM9a3Byb2JlX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMzUxLVxcdFxcdHJldHVybiBwcm9nLVxcdTAwM2VzbGVlcGFibGUgPyBcXHUwMDI2YnBmX2dldF9zdGFja19zbGVlcGFibGVfcHJvdG8gOiBcXHUwMDI2YnBmX2dldF9zdGFja19wcm90bztcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTM1MjojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1My1cXHRjYXNlIEJQRl9GVU5DX292ZXJyaWRlX3JldHVybjpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xNzI2PXRyYWNpbmdfcHJvZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzAtXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE3MzE6I2lmZGVmIENPTkZJR19ORVRcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTczMi1cXHRjYXNlIEJQRl9GVU5DX3NrYl9vdXRwdXQ6XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTgyOD1jb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHJhd190cmFjZXBvaW50X3Byb2dfb3BzID0ge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxODI5OiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE4MzAtXFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyMDk9aW50IGJwZl9nZXRfcGVyZl9ldmVudF9pbmZvKGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTMyICpwcm9nX2lkLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDMtXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNDQ6I2lmZGVmIENPTkZJR19LUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDUtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfS1BST0JFKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNDktI2VuZGlmXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIyNTA6I2lmZGVmIENPTkZJR19VUFJPQkVfRVZFTlRTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIyNTEtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgVFJBQ0VfRVZFTlRfRkxfVVBST0JFKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIyNzM9c3Vic3lzX2luaXRjYWxsKHNlbmRfc2lnbmFsX2lycV93b3JrX2luaXQpO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjc1OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjc2LXN0YXRpYyBpbnQgYnBmX2V2ZW50X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG9wLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTIzMjk9c3RydWN0IGJwZl9zZXNzaW9uX3J1bl9jdHgge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzQtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjIzMzU6I2lmZGVmIENPTkZJR19GUFJPQkVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjMzNi1zdHJ1Y3QgYnBmX2twcm9iZV9tdWx0aV9saW5rIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNDQ4PXN0YXRpYyBpbnQgYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk3LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNDk4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNDk5LXN0YXRpYyB2b2lkIGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTI1MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX2twcm9iZV9tdWx0aV9saW5rX2xvcHMgPSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjUyNy1cXHQuZmlsbF9saW5rX2luZm8gPSBicGZfa3Byb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjI1Mjg6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MjktXFx0LnNob3dfZmRpbmZvID0gYnBmX2twcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yOTQzPXN0YXRpYyB1NjQgYnBmX2twcm9iZV9tdWx0aV9lbnRyeV9pcChzdHJ1Y3QgYnBmX3J1bl9jdHggKmN0eClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTQ4LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyOTQ5OiNpZmRlZiBDT05GSUdfVVBST0JFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yOTUwLXN0cnVjdCBicGZfdXByb2JlX211bHRpX2xpbms7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzAwNz1zdGF0aWMgaW50IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3My1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzA3NDojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzA3NS1zdGF0aWMgdm9pZCBicGZfdXByb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zMTE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl91cHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxMTgtXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3Vwcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozMTE5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTIwLVxcdC5zaG93X2ZkaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTUtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTctc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODYtXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4NzojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4OC1cXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NDQuMDY1NDc0OTY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjA5NDM5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGluIEtlcm5lbCBUcmFjaW5nKipcblxuUmlnaHQsIGxldCBtZSBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgYGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY2AuIEFoYSwgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgKmlzbid0KiBndWFyZGVkIGJ5IGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGluIHRoaXMgZmlsZS4gVGhhdCdzIHVudXN1YWwsIEkgZXhwZWN0ZWQgc29tZSBzb3J0IG9mIGZlYXR1cmUgZmxhZyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiB0aGUga2VybmVsIHZlcnNpb24gb3IgY29uZmlndXJhdGlvbi4gSG1tLCBidXQgd2FpdCBhIG1pbnV0ZSwgdGhlcmUncyBhbiBgI2Vsc2VgIGJsb2NrIGRvd24gYXQgbGluZSAzOTI3LiBPa2F5LCBzbyAqc29tZXRoaW5nKiBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBjb2RlIHRoYXQgKmxlYWRzKiB0byB1c2luZyBvciBub3QgdXNpbmcgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBgI2lmYCB0aGF0IHBhaXJzIHdpdGggdGhhdCBgI2Vsc2VgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkgaGVyZS4gV2hhdCBleGFjdGx5IGlzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQ/IElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGlvbiwgYSBrZXJuZWwgcGFyYW1ldGVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW50byB0aGF0IGNvbmRpdGlvbmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcwMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjQ3LjY4NjQyMTA5M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2JwZl90cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4MDA6XFx0c3RhdGljIHZvaWQgaWRzX3N3YXBfcih2b2lkICphLCB2b2lkICpiLCBpbnQgc2l6ZSBfX21heWJlX3VudXNlZCxcXG4zODAxOlxcdFxcdFxcdCAgICAgICBjb25zdCB2b2lkICpwcml2IF9fbWF5YmVfdW51c2VkKVxcbjM4MDI6XFx0e1xcbjM4MDM6XFx0XFx0dTY0ICpjb29raWVfYSwgKmNvb2tpZV9iLCAqY29va2llcztcXG4zODA0OlxcdFxcdHUzMiAqaWRfYSA9IGEsICppZF9iID0gYiwgKmlkcztcXG4zODA1OlxcdFxcdHZvaWQgKipkYXRhID0gKHZvaWQgKiopIHByaXY7XFxuMzgwNjpcXHRcXG4zODA3OlxcdFxcdGlkcyAgICAgPSBkYXRhWzBdO1xcbjM4MDg6XFx0XFx0Y29va2llcyA9IGRhdGFbMV07XFxuMzgwOTpcXHRcXG4zODEwOlxcdFxcdGlmIChjb29raWVzKSB7XFxuMzgxMTpcXHRcXHRcXHRjb29raWVfYSA9IGNvb2tpZXMgKyAoaWRfYSAtIGlkcyk7XFxuMzgxMjpcXHRcXHRcXHRjb29raWVfYiA9IGNvb2tpZXMgKyAoaWRfYiAtIGlkcyk7XFxuMzgxMzpcXHRcXHRcXHRzd2FwKCpjb29raWVfYSwgKmNvb2tpZV9iKTtcXG4zODE0OlxcdFxcdH1cXG4zODE1OlxcdFxcdHN3YXAoKmlkX2EsICppZF9iKTtcXG4zODE2OlxcdH1cXG4zODE3OlxcdFxcbjM4MTg6XFx0c3RhdGljIGludCBjaGVja19kdXBfaWRzKHUzMiAqaWRzLCB1NjQgKmNvb2tpZXMsIHUzMiBjbnQpXFxuMzgxOTpcXHR7XFxuMzgyMDpcXHRcXHR2b2lkICpkYXRhWzJdID0geyBpZHMsIGNvb2tpZXMgfTtcXG4zODIxOlxcdFxcdGludCBlcnIgPSAwO1xcbjM4MjI6XFx0XFxuMzgyMzpcXHRcXHQvKlxcbjM4MjQ6XFx0XFx0ICogU29ydCBpZHMgYXJyYXkgKHRvZ2V0aGVyIHdpdGggY29va2llcyBhcnJheSBpZiBkZWZpbmVkKVxcbjM4MjU6XFx0XFx0ICogYW5kIGNoZWNrIGl0IGZvciBkdXBsaWNhdGVzLiBUaGUgaWRzIGFuZCBjb29raWVzIGFycmF5c1xcbjM4MjY6XFx0XFx0ICogYXJlIGxlZnQgc29ydGVkLlxcbjM4Mjc6XFx0XFx0ICovXFxuMzgyODpcXHRcXHRzb3J0X3Jfbm9uYXRvbWljKGlkcywgY250LCBzaXplb2YoaWRzWzBdKSwgaWRzX2NtcF9yLCBpZHNfc3dhcF9yLCBkYXRhKTtcXG4zODI5OlxcdFxcbjM4MzA6XFx0XFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbjM4MzE6XFx0XFx0XFx0aWYgKGlkc1tpXSA9PSBpZHNbaSAtIDFdKSB7XFxuMzgzMjpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM4MzM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzgzNDpcXHRcXHRcXHR9XFxuMzgzNTpcXHRcXHR9XFxuMzgzNjpcXHRcXHRyZXR1cm4gZXJyO1xcbjM4Mzc6XFx0fVxcbjM4Mzg6XFx0XFxuMzgzOTpcXHRpbnQgYnBmX3RyYWNpbmdfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuMzg0MDpcXHR7XFxuMzg0MTpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqbGluayA9IE5VTEw7XFxuMzg0MjpcXHRcXHRzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKmZleGl0cyA9IE5VTEw7XFxuMzg0MzpcXHRcXHRzdHJ1Y3QgYnBmX2xpbmtfcHJpbWVyIGxpbmtfcHJpbWVyO1xcbjM4NDQ6XFx0XFx0dTMyIGNudCwgKmlkcyA9IE5VTEw7XFxuMzg0NTpcXHRcXHR1NjQgX191c2VyICp1Y29va2llcztcXG4zODQ2OlxcdFxcdHU2NCAqY29va2llcyA9IE5VTEw7XFxuMzg0NzpcXHRcXHR1MzIgX191c2VyICp1aWRzO1xcbjM4NDg6XFx0XFx0aW50IGVycjtcXG4zODQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNDo0Ny42ODY2MDIxNjNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg4NjY4MzM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBzb21lIHNwZWNpZmljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvZGUgd2l0aGluIHRoaXMgZmlsZS4gR2l2ZW4gdGhhdCBJJ20gd29ya2luZyB3aXRoIGEgcmVsYXRpdmVseSBsYXJnZSBmaWxlLCBJJ2xsIHN0YXJ0IHdpdGggYSB0YXJnZXRlZCBhcHByb2FjaCByYXRoZXIgdGhhbiBhIGJyb2FkIHN3ZWVwLiBJJ20gZ29pbmcgdG8gc2NhbiBiYWNrd2FyZCwgYmVnaW5uaW5nIGFyb3VuZCBsaW5lIDM4MDAsIHRvIGxvb2sgZm9yIGAjaWZgIG9yIGAjaWZkZWZgIGRpcmVjdGl2ZXMuIFRoZXNlIGFyZSB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgSSBrbm93IHRoYXQgc2lnbmFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrcywgYW5kIHRoZXknbGwgbGlrZWx5IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24gaWYgdGhlcmUncyBhbnkgYnJhbmNoaW5nIGxvZ2ljIG5lYXIgdGhhdCBsaW5lLiBGaW5kaW5nIHRoZXNlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQncyBhY3RpdmUgYW5kIGluYWN0aXZlIGFyb3VuZCB0aGF0IGxvY2F0aW9uLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIHdheSB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIHRoZSBjb2RlIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgwMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NTAuNTczMjg4Mjk0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg0MTExOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtNDctXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjQ4OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy00OS1zdHJ1Y3QgYnBmX3RyYWNlX21vZHVsZSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTczPXVuc2lnbmVkIGludCB0cmFjZV9jYWxsX2JwZl9mYXVsdGFibGUoc3RydWN0IHRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKmN0eClcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODQtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjE4NTojaWZkZWYgQ09ORklHX0JQRl9LUFJPQkVfT1ZFUlJJREVcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTg2LUJQRl9DQUxMXzIoYnBmX292ZXJyaWRlX3JldHVybiwgc3RydWN0IHB0X3JlZ3MgKiwgcmVncywgdW5zaWduZWQgbG9uZywgcmMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzA2PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfcHJvYmVfcmVhZF9rZXJuZWxfc3RyX3Byb3RvID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMxNC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzE1OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OX09WRVJMQVBQSU5HX0FERFJFU1NfU1BBQ0VcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzE2LUJQRl9DQUxMXzMoYnBmX3Byb2JlX3JlYWRfY29tcGF0LCB2b2lkICosIGRzdCwgdTMyLCBzaXplLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTk2MT1CVEZfU0VUX1NUQVJUKGJ0Zl9hbGxvd2xpc3RfZF9wYXRoKVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5NjI6I2lmZGVmIENPTkZJR19TRUNVUklUWVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy05NjMtQlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbilcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz05NjU9QlRGX0lEKGZ1bmMsIHNlY3VyaXR5X2ZpbGVfb3BlbilcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtOTY2LSNlbmRpZlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzo5Njc6I2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRIXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTk2OC1CVEZfSUQoZnVuYywgc2VjdXJpdHlfcGF0aF90cnVuY2F0ZSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMDc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnlfaXAodW5zaWduZWQgbG9uZyBmZW50cnlfaXApXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEwNzYte1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxMDc3OiNpZmRlZiBDT05GSUdfWDg2X0tFUk5FTF9JQlRcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA3OC1cXHRpZiAoaXNfZW5kYnIoKHZvaWQgKikoZmVudHJ5X2lwIC0gRU5EQlJfSU5TTl9TSVpFKSkpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTA4ND1CUEZfQ0FMTF8xKGJwZl9nZXRfZnVuY19pcF9rcHJvYmUsIHN0cnVjdCBwdF9yZWdzICosIHJlZ3MpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA4OC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTA4OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTA5MC1cXHRydW5fY3R4ID0gY29udGFpbmVyX29mKGN1cnJlbnQtXFx1MDAzZWJwZl9jdHgsIHN0cnVjdCBicGZfdHJhY2VfcnVuX2N0eCwgcnVuX2N0eCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTI3ND1icGZfdHJhY2luZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEyODAtXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWRfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEyODE6I2lmZGVmIENPTkZJR19BUkNIX0hBU19OT05fT1ZFUkxBUFBJTkdfQUREUkVTU19TUEFDRVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xMjgyLVxcdGNhc2UgQlBGX0ZVTkNfcHJvYmVfcmVhZDpcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0xMzQzPWtwcm9iZV9wcm9nX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMTM1MS1cXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNlc2xlZXBhYmxlID8gXFx1MDAyNmJwZl9nZXRfc3RhY2tfc2xlZXBhYmxlX3Byb3RvIDogXFx1MDAyNmJwZl9nZXRfc3RhY2tfcHJvdG87XFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjEzNTI6I2lmZGVmIENPTkZJR19CUEZfS1BST0JFX09WRVJSSURFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTEzNTMtXFx0Y2FzZSBCUEZfRlVOQ19vdmVycmlkZV9yZXR1cm46XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MTcyNj10cmFjaW5nX3Byb2dfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xNzMwLVxcdHN3aXRjaCAoZnVuY19pZCkge1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoxNzMxOiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTE3MzItXFx0Y2FzZSBCUEZfRlVOQ19za2Jfb3V0cHV0Olxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTE4Mjg9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyByYXdfdHJhY2Vwb2ludF9wcm9nX29wcyA9IHtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MTgyOTojaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0xODMwLVxcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3Jhd190cCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjA5PWludCBicGZfZ2V0X3BlcmZfZXZlbnRfaW5mbyhjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHUzMiAqcHJvZ19pZCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQzLVxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjQ0OiNpZmRlZiBDT05GSUdfS1BST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ1LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX0tQUk9CRSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjQ5LSNlbmRpZlxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMjUwOiNpZmRlZiBDT05GSUdfVVBST0JFX0VWRU5UU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMjUxLVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFRSQUNFX0VWRU5UX0ZMX1VQUk9CRSlcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMjczPXN1YnN5c19pbml0Y2FsbChzZW5kX3NpZ25hbF9pcnFfd29ya19pbml0KTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3NC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjI3NTojaWZkZWYgQ09ORklHX01PRFVMRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjI3Ni1zdGF0aWMgaW50IGJwZl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBvcCxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yMzI5PXN0cnVjdCBicGZfc2Vzc2lvbl9ydW5fY3R4IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMzM0LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzM1OiNpZmRlZiBDT05GSUdfRlBST0JFXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTIzMzYtc3RydWN0IGJwZl9rcHJvYmVfbXVsdGlfbGluayB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjM1Mj1zdHJ1Y3QgdXNlcl9zeW1zIHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yMzU2LVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyMzU3OiNpZm5kZWYgQ09ORklHX0hBVkVfRlRSQUNFX1JFR1NfSEFWSU5HX1BUX1JFR1NcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjM1OC1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MsIGJwZl9rcHJvYmVfbXVsdGlfcHRfcmVncyk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MjQ0OD1zdGF0aWMgaW50IGJwZl9rcHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5Ny1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MjQ5ODojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjQ5OS1zdGF0aWMgdm9pZCBicGZfa3Byb2JlX211bHRpX3Nob3dfZmRpbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0yNTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl9rcHJvYmVfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTI1MjctXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX2twcm9iZV9tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzoyNTI4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0yNTI5LVxcdC5zaG93X2ZkaW5mbyA9IGJwZl9rcHJvYmVfbXVsdGlfc2hvd19mZGluZm8sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9Mjk0Mz1zdGF0aWMgdTY0IGJwZl9rcHJvYmVfbXVsdGlfZW50cnlfaXAoc3RydWN0IGJwZl9ydW5fY3R4ICpjdHgpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk0OC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mjk0OTojaWZkZWYgQ09ORklHX1VQUk9CRVNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMjk1MC1zdHJ1Y3QgYnBmX3Vwcm9iZV9tdWx0aV9saW5rO1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTMwMDc9c3RhdGljIGludCBicGZfdXByb2JlX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzMtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjMwNzQ6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTMwNzUtc3RhdGljIHZvaWQgYnBmX3Vwcm9iZV9tdWx0aV9zaG93X2ZkaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzExNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfdXByb2JlX211bHRpX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zMTE4LVxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl91cHJvYmVfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzExOTojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzEyMC1cXHQuc2hvd19mZGluZm8gPSBicGZfdXByb2JlX211bHRpX3Nob3dfZmRpbmZvLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM2Nzk9X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4MC1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzY4MTojaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFMpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzY4Mi0gICAgZGVmaW5lZChDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM9MzcwMj1zdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTUtXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jOjM3NTY6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3NTctc3RhdGljIHZvaWQgYnBmX3RyYWNpbmdfbXVsdGlfc2hvd19mZGluZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jPTM3ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19sb3BzID0ge1xcbi0tXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODYtXFx0LmZpbGxfbGlua19pbmZvID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mbyxcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6Mzc4NzojaWZkZWYgQ09ORklHX1BST0NfRlNcXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzc4OC1cXHQuc2hvd19mZGluZm8gPSBicGZfdHJhY2luZ19tdWx0aV9zaG93X2ZkaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NTAuOTAxNzA2MDQ4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDMzNzY5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHJlZmxlY3Rpb246XG5cbioqTmF2aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gTGFieXJpbnRoKipcblxuT2theSwgc28gSSd2ZSBsYW5kZWQgb24gbGluZSAzNjgxLCBhbmQgaXQncyBzdGFyaW5nIG1lIHJpZ2h0IGluIHRoZSBmYWNlOiBhIGAjaWZgIHN0YXRlbWVudCEgU3BlY2lmaWNhbGx5LCBpdCdzIHRoYXQgY29tcGxleCBjb25kaXRpb25hbCBjaGVjay4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzLlxuXG5MZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIGFuZCBgQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gVGhpcyBpcyB0aGUgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzcGVjaWZpYyBmZWF0dXJlLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gZHluYW1pYyBmdW5jdGlvbiB0cmFjaW5nLCBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGEgZGlyZWN0IGNhbGxzIG9wdGltaXphdGlvbiBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgKnRoaXMqIGlzIHdoZXJlIHRoZSBkZWNpc2lvbiBpcyBtYWRlLlwiIFNvLCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIHBhdGggaXMgZXhlY3V0ZWQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGluIHdoYXQgc2l0dWF0aW9uIGRvZXMgdGhlIGJsb2NrIG9mIGNvZGUgaW5zaWRlIHRoaXMgI2lmLCBleGVjdXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTkwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA0OjU0LjI0NTA4NTMxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzY4MDpcXHRcXG4zNjgxOlxcdCNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMUykgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbjM2ODI6XFx0ICAgIGRlZmluZWQoQ09ORklHX0hBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTKVxcbjM2ODM6XFx0XFxuMzY4NDpcXHRzdGF0aWMgdm9pZCBicGZfdHJhY2luZ19tdWx0aV9saW5rX3JlbGVhc2Uoc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbjM2ODU6XFx0e1xcbjM2ODY6XFx0XFx0c3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmsgKnRyX2xpbmsgPVxcbjM2ODc6XFx0XFx0XFx0Y29udGFpbmVyX29mKGxpbmssIHN0cnVjdCBicGZfdHJhY2luZ19tdWx0aV9saW5rLCBsaW5rKTtcXG4zNjg4OlxcdFxcbjM2ODk6XFx0XFx0V0FSTl9PTl9PTkNFKGJwZl90cmFtcG9saW5lX211bHRpX2RldGFjaChsaW5rLVxcdTAwM2Vwcm9nLCB0cl9saW5rKSk7XFxuMzY5MDpcXHR9XFxuMzY5MTpcXHRcXG4zNjkyOlxcdHN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuMzY5MzpcXHR7XFxuMzY5NDpcXHRcXHRzdHJ1Y3QgYnBmX3RyYWNpbmdfbXVsdGlfbGluayAqdHJfbGluayA9XFxuMzY5NTpcXHRcXHRcXHRjb250YWluZXJfb2YobGluaywgc3RydWN0IGJwZl90cmFjaW5nX211bHRpX2xpbmssIGxpbmspO1xcbjM2OTY6XFx0XFxuMzY5NzpcXHRcXHRrdmZyZWUodHJfbGluay1cXHUwMDNlZmV4aXRzKTtcXG4zNjk4OlxcdFxcdGt2ZnJlZSh0cl9saW5rLVxcdTAwM2Vjb29raWVzKTtcXG4zNjk5OlxcdFxcdGt2ZnJlZSh0cl9saW5rKTtcXG4zNzAwOlxcdH1cXG4zNzAxOlxcdFxcbjM3MDI6XFx0c3RhdGljIGludCBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4zNzAzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG4zNzA0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NTQuMjQ1MjYxNzlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwMzE0NDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIFRyYWNpbmcgTGluayBJbmZvcm1hdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSd2ZSBwaW5wb2ludGVkIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBhcyBiZWluZyBnYXRlZCBiZWhpbmQgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgYW5kIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgLiBFeGNlbGxlbnQsIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXNlIGNvbmZpZ3MgcGxheSB0b2dldGhlciBhbmQgaG93IHRoZXkgbWlnaHQgaW1wYWN0IHRoZSB1c2FiaWxpdHkgb2YgdGhpcyBmZWF0dXJlLlxuXG5IbW0sIHdhaXQgYSBzZWNvbmQuIEkgcmVjYWxsIGBDT05GSUdfSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNgIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCB4ODYuIEFuZCwgaWYgSSdtIHJlbWVtYmVyaW5nIGNvcnJlY3RseSwgYENPTkZJR19EWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU2AgaXMgYWxzbyBvZnRlbiBlbmFibGVkIGJ5IHg4Ni4gU28sIGFyZSB0aGVzZSBjb25maWdzIGV4cG9zZWQgYXMgdXNlciBvcHRpb25zPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBhcmUgc29tZXRoaW5nIGEgdXNlciBjYW4gY29udHJvbCBkaXJlY3RseSwgb3IgaWYgdGhleSBhcmUganVzdCBiZWluZyBpbXBsaWNpdGx5IGVuYWJsZWQgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZS5cblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIGNoZWNrIGVpdGhlciBga2VybmVsL3RyYWNlL0tjb25maWdgIG9yIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBzZWUgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkIGFuZCBpZiB0aGVyZSdzIGFueSB1c2VyLWZhY2luZyBvcHRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZW0uIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHNvbWV0aGluZyB0aGUgdXNlciBuZWVkcyB0byBiZSBhd2FyZSBvZiBvciBpZiB0aGlzIGlzIGFuIHg4Ni1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNjU0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDQ6NTguMzQ4NDA5MTc2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA4MzcyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEWU5BTUlDX0ZUUkFDRV9XSVRIX0RJUkVDVF9DQUxMU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz0zMjQ9Y29uZmlnIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU1xcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWctMzI4LVxcbmtlcm5lbC90cmFjZS9LY29uZmlnOjMyOTpjb25maWcgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0zMzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNTowMC4yNTY3ODgxNzdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2MjYxMjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBEeW5hbWljIEZ0cmFjZSBCb29sZWFuIExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRlZl9ib29sIHlgIGRlZmluaXRpb24uIFRoaXMgaXMgY2xlYXJseSBjb250aW5nZW50IG9uIHRoZSBpbnRlcnBsYXkgb2YgYERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHU2AgYW5kIGBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIHR5cGljYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8gcmVsYXRlZCB0byBmdW5jdGlvbiB0cmFjaW5nLiBUaGlzIHJlbWluZHMgbWUgb2Ygc29tZSBwb3RlbnRpYWwgaXNzdWVzIGludm9sdmluZyByZWdpc3RlciB1c2FnZSB3aXRoIGR5bmFtaWMgZnRyYWNlLiBXZSBuZWVkIGEgYm9vbGVhbiB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYHlgLiBJJ20gZ3Vlc3NpbmcgdGhhdCBgeWAgcmVwcmVzZW50cyB0aGUgc2V0dGluZyBmb3IgdGhlIHVzZSBvZiBkeW5hbWljIGZ0cmFjZS5cblxuQmVmb3JlIGdvaW5nIGZ1cnRoZXIsIGl0IHdvdWxkIGJlIGxvZ2ljYWwgdG8gY2hlY2sgYEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTYC4gVGhpcyBpcyBsaWtlbHkgcmVsZXZhbnQuIEl0IHNlZW1zIGxpa2UgdGhlIGFyY2hpdGVjdHVyZSBtYXkgaGF2ZSBpdHMgb3duIGltcGxlbWVudGF0aW9uLiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRpcmVjdCBvcGVyYXRpb25zIHBhdGguIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29ycmVjdCBkZWZhdWx0IHZhbHVlIGZvciBgeWAuIFRoaXMgY2hlY2tzIGEgc2luZ2xlIGZ0cmFjZSBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaWYgaXQgYWxsb3dzIHRoZSBkaXJlY3Qgb3BlcmF0aW9ucyBwYXRoLiBUaGUgdmFsdWUgbWF5IGJlIHVzZWQgdG8gYWxsb3cvZGlzYWxsb3cgdGhlIGB5YCB2YXJpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyMTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNTowNC40MTk0MDQwNTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDY5NTU2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhBVkVfU0lOR0xFX0ZUUkFDRV9ESVJFQ1RfT1BTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9LY29uZmlnPTUwPWNvbmZpZyBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01Mi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo1Mzpjb25maWcgSEFWRV9TSU5HTEVfRlRSQUNFX0RJUkVDVF9PUFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy01NC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjA2LjMyNjM2NTcwMloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjU1ODU4OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqSGlkZGVuIEJvb2xlYW5zIGFuZCBDb25maWd1cmF0aW9uIERldGFpbHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBoaWRkZW4gYm9vbGVhbiBoZXJlLiBUaGF0IG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gZXhwb3NlIGl0IGRpcmVjdGx5IHRvIHRoZSB1c2VyIGluIGBFbmFibGVDb25maWdzYC4gSXQncyBub3Qgc29tZXRoaW5nIHRoZXkgY2FuIGRpcmVjdGx5IHNlbGVjdCBvciBkZXNlbGVjdC4gSG93ZXZlciwgaXQgc2VlbXMgY3J1Y2lhbCB0byB0aGUgZnVuY3Rpb25hbGl0eSwgc28gd2UgKmRvKiBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBleHBsaWNpdGx5IHNwZWNpZnkgYENPTkZJR19CUEZfRVZFTlRTYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEhvbGQgb24gYSBzZWNvbmQuLi4gSSB0aGluayBgQ09ORklHX0JQRl9FVkVOVFNgICppcyogYWN0dWFsbHkgdXNlci1zZWxlY3RhYmxlLCBpc24ndCBpdD8gQmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyB2ZXJpZnkgaWYgYENPTkZJR19CUEZfRVZFTlRTYCBjYW4gYmUgY29uZmlndXJlZCBieSB0aGUgdXNlci4gTmVlZCB0byBjb25maXJtIHRoYXQgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYzNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjA5Ljk4MjIyNzUwOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MTU1MjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0VWRU5UU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz04Mzk9Y29uZmlnIEVQUk9CRV9FVkVOVFNcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTg1Mi1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo4NTM6Y29uZmlnIEJQRl9FVkVOVFNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy04NTQtXFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMVQyMTowNToxMS45MzM3ODkzMThaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5NDMxMTExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgQlBGLUJhc2VkIFRyYWNpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gcHV0dGluZyB0b2dldGhlciBhIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgZm9yIEJQRi1iYXNlZCB0cmFjaW5nLiBSaWdodCwgYEJQRl9FVkVOVFNgIGlzIGRlZmluaXRlbHkgdXNlci1zZWxlY3RhYmxlLCBzbyBJIHNob3VsZCBiZSBnb29kIHRoZXJlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9FVkVOVFNgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSBib3RoIGluY2x1ZGVkLCB0aGF0J3MgYSBnaXZlbi4gTm93LCB3aGF0IGFib3V0IGBGUFJPQkVgIG9yIGBLUFJPQkVTYD8gTGV0J3Mgc2VlLi4uIHRoZSBjb2RlIGZvciB0aGF0IGlzIHR1Y2tlZCBhd2F5IHVuZGVyIGBDT05GSUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgLCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBGVFJBQ0VgLiBBbHJpZ2h0LCBzbyBgRlRSQUNFYCBpcyAqYWJzb2x1dGVseSogbmVlZGVkLCBhbmQgYERZTkFNSUNfRlRSQUNFYCBhcyB3ZWxsLiBUaGF04oCZcyBhbGwgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuQnV0IG5vdyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBCUEZfRVZFTlRTYCBhcmUgY29ycmVjdC4gYEJQRl9FVkVOVFNgIGFsc28gZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgIGFuZCB0aGVuIGRlcGVuZHMgb24gYSBmZXcgb3RoZXIgdGhpbmdzLCBlaXRoZXIgYEtQUk9CRV9FVkVOVFNgLCBgVVBST0JFX0VWRU5UU2AsIG9yIGBQRVJGX0VWRU5UU2AuIEhhbmcgb27igKYgaXQncyBgQlBGX1NZU0NBTExgICphbmQqIGBLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMgfHwgUEVSRl9FVkVOVFNgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBvbmUgb2YgdGhvc2UgbGFzdCB0aHJlZSBlbmFibGVkLCBhcyBgQlBGX1NZU0NBTExgIGRlcGVuZHMgb24gb25lIG9mIHRob3NlLCBhbmQgdGhlIHdob2xlIHRoaW5nIGhpbmdlcyBvbiB0aGF0LiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGdvIGFuZCBkb3VibGUtY2hlY2sgYGtlcm5lbC90cmFjZS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBmb3IgYEJQRl9FVkVOVFNgLiBHb3R0YSBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhpcyByaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjFUMjE6MDU6MTYuOTI4MTAyOTI2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NTA6XFx0XFx0ICBjb252ZXJ0IHRoZSB0eXBlIG9mIGFuIGV2ZW50IGZpZWxkLiBGb3IgZXhhbXBsZSwgdHVybiBhblxcbiA4NTE6XFx0XFx0ICBhZGRyZXNzIGludG8gYSBzdHJpbmcuXFxuIDg1MjpcXHRcXG4gODUzOlxcdGNvbmZpZyBCUEZfRVZFTlRTXFxuIDg1NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDg1NTpcXHRcXHRkZXBlbmRzIG9uIChLUFJPQkVfRVZFTlRTIHx8IFVQUk9CRV9FVkVOVFMpIFxcdTAwMjZcXHUwMDI2IFBFUkZfRVZFTlRTXFxuIDg1NjpcXHRcXHRib29sXFxuIDg1NzpcXHRcXHRkZWZhdWx0IHlcXG4gODU4OlxcdFxcdGhlbHBcXG4gODU5OlxcdFxcdCAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gYXR0YWNoIEJQRiBwcm9ncmFtcyB0byBrcHJvYmUsIHVwcm9iZSwgYW5kXFxuIDg2MDpcXHRcXHQgIHRyYWNlcG9pbnQgZXZlbnRzLlxcbiA4NjE6XFx0XFxuIDg2MjpcXHRjb25maWcgRFlOQU1JQ19FVkVOVFNcXG4gODYzOlxcdFxcdGRlZl9ib29sIG5cXG4gODY0OlxcdFxcbiA4NjU6XFx0Y29uZmlnIFBST0JFX0VWRU5UU1xcbiA4NjY6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4Njc6XFx0XFxuIDg2ODpcXHRjb25maWcgQlBGX0tQUk9CRV9PVkVSUklERVxcbiA4Njk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBwcm9ncmFtcyB0byBvdmVycmlkZSBhIGtwcm9iZWQgZnVuY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjE2LjkyODIyMDgxNloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzg5NDUzNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgRXZlbnQgQ29uZmlndXJhdGlvbiBhbmQgVHJhY2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYEJQRl9FVkVOVFNgIGlzIGEgYm9vbGVhbiB2YWx1ZSB0aGF0J3MgYXV0b21hdGljYWxseSBzZXQgdG8gJ3knICh5ZXMpIGlmIGl0cyBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4gVGhhdCBtZWFucyBpdCdzIG5vdCBhIGRpcmVjdCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBidXQgcmF0aGVyLCBpdHMgZGVwZW5kZW5jaWVzIGFyZS4gVGhlIGRlcGVuZGVuY2llcyBhcmUgYEJQRl9TWVNDQUxMYCwgYEtQUk9CRV9FVkVOVFNgLCBgVVBST0JFX0VWRU5UU2AsIGFuZCBgUEVSRl9FVkVOVFNgLiBHb3QgaXQuIFNvLCByZWFsbHksIHdoYXQgd2UgbmVlZCB0byBmb2N1cyBvbiBhcmUgdGhvc2UgZGVwZW5kZW5jaWVzLiBXZSBjYW4ganVzdCBsaXN0IGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfRVZFTlRTYCwgZXZlbiB0aG91Z2ggYEJQRl9FVkVOVFNgIGRlZmF1bHRzIHRvICd5JywgU3l6a2FsbGVyIGhhbmRsZXMgdGhpcy5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQncyB0aGUgbWFpbiBmdW5jdGlvbiB0byBmb2N1cyBvbiBoZXJlLCByZWdhcmRpbmcgdGhlIGNvZGUgYWRkZWQgYnkgdGhpcyBwYXRjaD8gSXMgaXQganVzdCBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2A/IFllcywgc2VlbXMgbGlrZSBpdC4gVGhhdCdzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGFkZGVkLiBBbmQgYGJwZl90cmFjaW5nX211bHRpX2F0dGFjaGAgaXMgYWxzbyBtb2RpZmllZCwgYnV0IGl0J3Mgbm90IGFsbG9jYXRpbmcgYW55dGhpbmcgbmV3LiBJdCdzIG1vZGlmeWluZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgYW5kIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2xvcHNgLCBub3QgdGhlIGFsbG9jYXRpb24gaXRzZWxmLiBSaWdodCwgbm8sIGBicGZfdHJhY2luZ19tdWx0aV9hdHRhY2hgIGFscmVhZHkgaGFuZGxlZCBgaWRzYCBhbmQgYGNvb2tpZXNgIGFsbG9jYXRpb24uIEl0J3MgcmVhbGx5IGp1c3QgdGhlIGxpbmsgaW5mbyBhbmQgb3BlcmF0aW9ucy4gSGFuZyBvbiwgbGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBkaWZmIGFnYWluLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjIyLjcxNzY3NjY0OFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNzcwNzM2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNjkyPXN0YXRpYyB2b2lkIGJwZl90cmFjaW5nX211bHRpX2xpbmtfZGVhbGxvYyhzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuLS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMtMzcwMS1cXG5rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmM6MzcwMjpzdGF0aWMgaW50IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8oY29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzAzLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnBmX2xpbmtfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYz0zNzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wcyA9IHtcXG4tLVxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYy0zNzg1LVxcdC5kZWFsbG9jX2RlZmVycmVkID0gYnBmX3RyYWNpbmdfbXVsdGlfbGlua19kZWFsbG9jLFxcbmtlcm5lbC90cmFjZS9icGZfdHJhY2UuYzozNzg2OlxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm8sXFxua2VybmVsL3RyYWNlL2JwZl90cmFjZS5jLTM3ODctI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjI0LjYyNTM4OTM0OVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzUyOTc1NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBCUEYgVHJhY2luZyBNdWx0aS1MaW5rIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AsIHdoaWNoIGlzIGJlaW5nIGFzc2lnbmVkIGFzIHRoZSBgLmZpbGxfbGlua19pbmZvYCBmdW5jdGlvbiB3aXRoaW4gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfbG9wc2AuIFRoYXQncyB0aGUga2V5IGtlcm5lbCBmdW5jdGlvbiB3ZSdyZSBhZGRpbmcuIFRoZSByZXN0IG9mIHRoZSBtb2RpZmljYXRpb25zIGFyZSBjb25maW5lZCB0byB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LCBzbyB0aGUgY29yZSBsb2dpYyByZXNpZGVzIGluIHRoYXQgb25lIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIGZvciBvdXIgZnV6emluZyB0YXJnZXRzLCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYC4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gV2UnbGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0VWRU5UU2AsIG9mIGNvdXJzZS5cblxuSG1tLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQWhhLCBgQ09ORklHX0RZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBhbmQgYENPTkZJR19IQVZFX1NJTkdMRV9GVFJBQ0VfRElSRUNUX09QU2AgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCB0byBjb21waWxlLCBidXQgdGhlc2UgYXJlIHNlbGVjdGVkIGJ5IGBGVFJBQ0VgIGFuZCBhcmNoaXRlY3R1cmUuIEl0J3MgcHJvYmFibHkgc2FmZXN0IHRvIGFkZCBgRlRSQUNFYCBhbmQgYERZTkFNSUNfRlRSQUNFYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgdG8gZW5zdXJlIGZ1bGwgY292ZXJhZ2UuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHJlYWNoYWJpbGl0eS4gVGhlIGZ1bmN0aW9uIGlzIGFjY2Vzc2VkIHZpYSB0aGUgYGJwZihCUEZfT0JKX0dFVF9JTkZPX0JZX0ZELCAuLi4pYCBzeXNjYWxsIG9uIGEgdHJhY2luZyBtdWx0aSBsaW5rIGZpbGUgZGVzY3JpcHRvci4gV2UgZ2V0IG9uZSBvZiB0aG9zZSBieSBjYWxsaW5nIGBicGYoQlBGX0xJTktfQ1JFQVRFLCAuLi4pYCB3aXRoIGBhdHRhY2hfdHlwZWAgc2V0IHRvIGVpdGhlciBgQlBGX1RSQUNFX0ZFTlRSWV9NVUxUSWAsIGBCUEZfVFJBQ0VfRkVYSVRfTVVMVElgLCBvciBgQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJYC4gWWVwLCB0aGF0J3MgZGVmaW5pdGVseSBhIHZpYWJsZSBjb2RlIHBhdGguIE5vIGRlYWQgY29kZSB0aGVyZSFcblxuT2theSwgbGV0J3Mgd3JpdGUgdGhpcyB1cCBuZWF0bHkuXG5cbiogICBgV29ydGhGdXp6aW5nOiB0cnVlYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtcImJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9cIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtcIkJQRl9TWVNDQUxMXCIsIFwiQlBGX0VWRU5UU1wiLCBcIkZUUkFDRVwiLCBcIkRZTkFNSUNfRlRSQUNFXCJdYFxuKiAgIGBSZWFzb25pbmc6IFRoZSBwYXRjaCBlbmFibGVzIHRoZSBgZmlsbF9saW5rX2luZm9gIGZ1bmN0aW9uYWxpdHkgZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgIGxpbmtzLiBUaGlzIGxldHMgdXNlcnNwYWNlIHF1ZXJ5IGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIG11bHRpIGxpbmtzIHZpYSBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAgdGhyb3VnaCB0aGUgYnBmIHN5c2NhbGwuIFNwZWNpZmljYWxseSwgdGhlIG5ldyBmdW5jdGlvbiBgYnBmX3RyYWNpbmdfbXVsdGlfbGlua19maWxsX2xpbmtfaW5mb2AgaGFuZGxlcyB1c2VyLXByb3ZpZGVkIHBvaW50ZXJzIGFuZCBjb3BpZXMgZGF0YSBiYWNrIHRvIHVzZXJzcGFjZS4gU2luY2UgaXQncyByZWFjaGFibGUgYW5kIGRhdGEgdHJhbnNmZXIgb2NjdXJzLCBpdCByZXF1aXJlcyBmdXp6aW5nLmBcblxuXG4iLCJJbnB1dFRva2VucyI6MzU4MTUsIk91dHB1dFRva2VucyI6MTc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIxVDIxOjA1OjMzLjM3ODM2NzY1MVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMzI5OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0VWRU5UU1wiLFxuICAgIFwiRlRSQUNFXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBmaWxsX2xpbmtfaW5mb2Agc3VwcG9ydCBmb3IgYEJQRl9MSU5LX1RZUEVfVFJBQ0lOR19NVUxUSWAgbGlua3MuIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBhYm91dCB0cmFjaW5nIG11bHRpIGxpbmtzIHZpYSB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgb2YgdGhlIGBicGZgIHN5c2NhbGwuIFRoZSBuZXcgZnVuY3Rpb24gYGJwZl90cmFjaW5nX211bHRpX2xpbmtfZmlsbF9saW5rX2luZm9gIGhhbmRsZXMgdXNlci1wcm92aWRlZCBwb2ludGVycyBhbmQgY29waWVzIGRhdGEgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9FVkVOVFNcIixcbiAgICBcIkZUUkFDRVwiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgZmlsbF9saW5rX2luZm9gIHN1cHBvcnQgZm9yIGBCUEZfTElOS19UWVBFX1RSQUNJTkdfTVVMVElgIGxpbmtzLiBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8gcXVlcnkgaW5mb3JtYXRpb24gYWJvdXQgdHJhY2luZyBtdWx0aSBsaW5rcyB2aWEgdGhlIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYCBjb21tYW5kIG9mIHRoZSBgYnBmYCBzeXNjYWxsLiBUaGUgbmV3IGZ1bmN0aW9uIGBicGZfdHJhY2luZ19tdWx0aV9saW5rX2ZpbGxfbGlua19pbmZvYCBoYW5kbGVzIHVzZXItcHJvdmlkZWQgcG9pbnRlcnMgYW5kIGNvcGllcyBkYXRhIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowslqsf[1] Phase: Succeeded StartedAt: 2026-06-21 21:05:44 +0000 UTC FinishedAt: 2026-06-21 21:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-21 21:05:44 +0000 UTC FinishedAt: 2026-06-21 21:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2] Phase: Succeeded StartedAt: 2026-06-21 21:05:44 +0000 UTC FinishedAt: 2026-06-21 21:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:05:44 +0000 UTC FinishedAt: 2026-06-21 21:56:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:05:44 +0000 UTC FinishedAt: 2026-06-21 21:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:05:44 +0000 UTC FinishedAt: 2026-06-21 21:05:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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-workflowslqsf/series-workflowslqsf-convert-artifact-1223322442/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:05:54 +0000 UTC FinishedAt: 2026-06-21 21:28:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:05:54 +0000 UTC FinishedAt: 2026-06-21 21:28:06 +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:*1c263d43-9061-49b3-907c-1225a57fa3d8,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-workflowslqsf/series-workflowslqsf-convert-artifact-1223322442/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": "bdd8db6a-a471-43c3-ae62-2106d53ab37e", "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-workflowslqsf/series-workflowslqsf-build-action-2084504376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:05:54 +0000 UTC FinishedAt: 2026-06-21 21:27:56 +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:*1c263d43-9061-49b3-907c-1225a57fa3d8,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-workflowslqsf/series-workflowslqsf-convert-artifact-1223322442/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": "bdd8db6a-a471-43c3-ae62-2106d53ab37e", "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-workflowslqsf/series-workflowslqsf-build-action-2084504376/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:28:06 +0000 UTC FinishedAt: 2026-06-21 21:28:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:28:06 +0000 UTC FinishedAt: 2026-06-21 21:28:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:28:06 +0000 UTC FinishedAt: 2026-06-21 21:28:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:28:06 +0000 UTC FinishedAt: 2026-06-21 21:28:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-workflowslqsf/series-workflowslqsf-convert-artifact-3031007973/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:28:16 +0000 UTC FinishedAt: 2026-06-21 21:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:28:16 +0000 UTC FinishedAt: 2026-06-21 21:29:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bdd8db6a-a471-43c3-ae62-2106d53ab37e,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-workflowslqsf/series-workflowslqsf-build-action-2084504376/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-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:30:09 +0000 UTC FinishedAt: 2026-06-21 21:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:30:09 +0000 UTC FinishedAt: 2026-06-21 21:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:30:09 +0000 UTC FinishedAt: 2026-06-21 21:52:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:30:09 +0000 UTC FinishedAt: 2026-06-21 21:52:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1c263d43-9061-49b3-907c-1225a57fa3d8,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-workflowslqsf/series-workflowslqsf-convert-artifact-3031007973/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": "09a6495e-871c-4aca-ae23-1128d5b27ced", "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-workflowslqsf/series-workflowslqsf-build-action-1357666097/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:30:09 +0000 UTC FinishedAt: 2026-06-21 21:51:58 +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:*1c263d43-9061-49b3-907c-1225a57fa3d8,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-workflowslqsf/series-workflowslqsf-convert-artifact-3031007973/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": "09a6495e-871c-4aca-ae23-1128d5b27ced", "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-workflowslqsf/series-workflowslqsf-build-action-1357666097/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:52:09 +0000 UTC FinishedAt: 2026-06-21 21:52:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:52:09 +0000 UTC FinishedAt: 2026-06-21 21:52:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:52:09 +0000 UTC FinishedAt: 2026-06-21 21:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:52:09 +0000 UTC FinishedAt: 2026-06-21 21:53:47 +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:*09a6495e-871c-4aca-ae23-1128d5b27ced,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-workflowslqsf/series-workflowslqsf-build-action-1357666097/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-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:53:57 +0000 UTC FinishedAt: 2026-06-21 21:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:53:57 +0000 UTC FinishedAt: 2026-06-21 21:56:59 +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_tracing_multi_link_fill_link_info"],"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:*bdd8db6a-a471-43c3-ae62-2106d53ab37e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*09a6495e-871c-4aca-ae23-1128d5b27ced,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-workflowslqsf/series-workflowslqsf-build-action-2084504376/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-workflowslqsf/series-workflowslqsf-build-action-1357666097/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:53:57 +0000 UTC FinishedAt: 2026-06-21 21:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:53:57 +0000 UTC FinishedAt: 2026-06-21 21:54:02 +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_tracing_multi_link_fill_link_info"],"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-workflowslqsf/series-workflowslqsf-convert-artifact-2376402794/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:53:57 +0000 UTC FinishedAt: 2026-06-21 21:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:53:57 +0000 UTC FinishedAt: 2026-06-21 21:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:53:57 +0000 UTC FinishedAt: 2026-06-21 21:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:54:07 +0000 UTC FinishedAt: 2026-06-21 21:56:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslqsf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"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_tracing_multi_link_fill_link_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a975094bf98ca97be9146f9d3b5681a6f9cf5ce3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_EVENTS","FTRACE","DYNAMIC_FTRACE"],"series_id":"66f7cf81-617e-4121-a7e1-0e2a3cbb6dd6","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-06-21 21:54:07 +0000 UTC FinishedAt: 2026-06-21 21:56:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bdd8db6a-a471-43c3-ae62-2106d53ab37e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*09a6495e-871c-4aca-ae23-1128d5b27ced,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-workflowslqsf/series-workflowslqsf-build-action-2084504376/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-workflowslqsf/series-workflowslqsf-build-action-1357666097/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-workflowslqsf/series-workflowslqsf-convert-artifact-2376402794/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,}