Name: series-workflow6ftf9 Phase: Succeeded StartedAt: 2026-08-07 00:11:58 +0000 UTC FinishedAt: 2026-08-07 04:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[0] Phase: Succeeded StartedAt: 2026-08-07 00:11:58 +0000 UTC FinishedAt: 2026-08-07 00:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 00:11:58 +0000 UTC FinishedAt: 2026-08-07 00:53: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": "8c7f55d60aa3512fd3da7e9cf313723460e487b4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "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": "8c7f55d60aa3512fd3da7e9cf313723460e487b4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "a3ee9182-ce67-412b-81c3-86c5df191541" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "bpf_int_jit_compile" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdikgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgQlBGX0xPQURfQUNRIGluc3RydWN0aW9uLCBlbnN1cmluZyBpdCBpcyB0cmVhdGVkIGFzIGEgbG9hZCByYXRoZXIgdGhhbiBhIHN0b3JlIGZvciBleGNlcHRpb24gaGFuZGxpbmcsIGFuZCByZWplY3RpbmcgaXQgb24gdW50cnVzdGVkIHBvaW50ZXJzIGluIHRoZSB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNzg2ODJjMzA4Y2IzZGZlMjAzZDY4ZDExYzE2NDgyYjA1NDY5MmIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMDo1Mjo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCA0Y2RjN2RmYjA1YmE5Li5kMTRkMjk3ZWJiOTY3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTE3OCw3ICYjNDM7MTE3OCwxMiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXG4gXHRleC1cdTAwM2VpbnNuID0gaW5zX29mZnNldDtcbiBcbi1cdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBsb2FkLWFjcXVpcmUgaXMgb2YgQlBGX1NUWCBjbGFzcywgYnV0IHJlYWRzIGZyb20gc3JjX3JlZyBpbnRvXG4mIzQzO1x0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbiYjNDM7XHQgKiBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNiAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcbiBcdFx0ZHN0X3JlZyA9IERPTlRfQ0xFQVI7XG4gXG4gXHRleC1cdTAwM2VmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTtcbkBAIC0xMTkzLDcgJiM0MzsxMTk4LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgKiBtZW1vcnkgYWNjZXNzLiBQYXNzIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xuIFx0XHQgKiBleF9oYW5kbGVyX2JwZi5cbiBcdFx0ICovXG4tXHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTERYKVxuJiM0MztcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFggfHwgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcbiBcdFx0XHRhcmVuYV9yZWcgPSBicGYyYTY0W2luc24tXHUwMDNlc3JjX3JlZ107XG4gXHRcdGVsc2VcbiBcdFx0XHRhcmVuYV9yZWcgPSBicGYyYTY0W2luc24tXHUwMDNlZHN0X3JlZ107XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IDhmZTg5NjlmYjhhMGYuLjZiOTk3MmIwN2MxYjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMTk5NCw3ICYjNDM7MTk5NCw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHQvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi9cbiBcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4gXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXG4tXHRcdFx0XHRpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbiYjNDM7XHRcdFx0XHRicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pID8gcmQgOiBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsXG4gXHRcdFx0XHRjdHgpID86IHJldDtcbiBcbiBcdFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDAxZTdjZTU2OWMxZWQuLjg4ZWQ5NWIyZWFhNzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTIzMzEsOCAmIzQzOzIzMzEsMTMgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHRcdCAqIEJQRl9QUk9CRV9BVE9NSUMpIGJlZm9yZSBiZWluZyB1c2VkIGZvciB0aGUgbWVtb3J5IGFjY2Vzcy4gUGFzc1xuIFx0XHRcdFx0ICogdGhlIHJlZyBob2xkaW5nIHRoZSB1bm1vZGlmaWVkIDMyLWJpdCBhZGRyZXNzIHRvXG4gXHRcdFx0XHQgKiBleF9oYW5kbGVyX2JwZigpLlxuJiM0MztcdFx0XHRcdCAqXG4mIzQzO1x0XHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgaXMgb2YgQlBGX1NUWCBjbGFzcywgYnV0IHJlYWRzIGZyb20gc3JjX3JlZ1xuJiM0MztcdFx0XHRcdCAqIGludG8gZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZVxuJiM0MztcdFx0XHRcdCAqIHRyZWF0ZWQgYXMgYSBzdG9yZSBoZXJlLlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkge1xuJiM0MztcdFx0XHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTERYIHx8XG4mIzQzO1x0XHRcdFx0ICAgIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpIHtcbiBcdFx0XHRcdFx0YXJlbmFfcmVnID0gcmVnMnB0X3JlZ3Nbc3JjX3JlZ107XG4gXHRcdFx0XHRcdGZpeHVwX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xuIFx0XHRcdFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzNiYWNmYzY0NDRkZi4uZDc5YmY3NTU3ZWY2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMTMyLDIxICYjNDM7MTEzMiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHNldWRvX2Z1bmMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0cmV0dXJuIGJwZl9pc19sZGltbTY0KGluc24pIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19GVU5DO1xuIH1cbiBcbi0vKiBHaXZlbiBhIEJQRl9BVE9NSUMgaW5zdHJ1Y3Rpb24gQGF0b21pY19pbnNuLCByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhblxuLSAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi1icGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbilcbi17XG4tXHRzd2l0Y2ggKGF0b21pY19pbnNuLVx1MDAzZWltbSkge1xuLVx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG4tXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLX1cbi1cbiBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHtcbiBcdGludCAoKnRlc3RfcnVuKShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbiBcdFx0XHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uNDFiMDJkNTNlMjIyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0zODMsNiAmIzQzOzM4MywzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIC8qIExlZ2FjeSBhbGlhcyAqL1xuICNkZWZpbmUgQlBGX1NUWF9YQUREKFNJWkUsIERTVCwgU1JDLCBPRkYpIEJQRl9BVE9NSUNfT1AoU0laRSwgQlBGX0FERCwgRFNULCBTUkMsIE9GRilcbiBcbiYjNDM7LypcbiYjNDM7ICogR2l2ZW4gYSBCUEZfQVRPTUlDIGluc3RydWN0aW9uIEBhdG9taWNfaW5zbiwgcmV0dXJuIHRydWUgaWYgaXQgaXMgYW5cbiYjNDM7ICogYXRvbWljIGxvYWQgb3Igc3RvcmUsIGFuZCBmYWxzZSBpZiBpdCBpcyBhIHJlYWQtbW9kaWZ5LXdyaXRlIGluc3RydWN0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO2JwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmF0b21pY19pbnNuKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChhdG9taWNfaW5zbi1cdTAwM2VpbW0pIHtcbiYjNDM7XHRjYXNlIEJQRl9MT0FEX0FDUTpcbiYjNDM7XHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBsb2FkLWFjcXVpcmUgaXMgdGhlIG9ubHkgQlBGX1NUWCBjbGFzcyBpbnN0cnVjdGlvbiB0aGF0IHJlYWRzIGludG9cbiYjNDM7ICogZHN0X3JlZyBmcm9tIHNyY19yZWcgJiM0Mzsgb2ZmMTYsIGkuZS4gaXQgaGFzIHRoZSBvcGVyYW5kIHJvbGVzIG9mIGEgQlBGX0xEWC5cbiYjNDM7ICogVW5saWtlIGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZSgpLCBAaW5zbiBpcyBub3QgYXNzdW1lZCB0byBiZSBhIEJQRl9BVE9NSUNcbiYjNDM7ICogaW5zdHJ1Y3Rpb24gaGVyZSwgc28gdGhhdCBjYWxsZXJzIHdoaWNoIHdhbGsgYWxsIGluc3RydWN0aW9uIGNsYXNzZXMgY2FuXG4mIzQzOyAqIHVzZSB0aGlzIGRpcmVjdGx5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9TVFggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgfHxcbiYjNDM7XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGluc24tXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUTtcbiYjNDM7fVxuJiM0MztcbiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyAmIzQzOyBvZmYxNikgPSBpbW0zMiAqL1xuIFxuICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2MjMzYzAwODFkMTAuLjY0OGM1Nzg0MTc4ZWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTQ5MjMsNiAmIzQzOzQ5MjMsMzAgQEAgc3RhdGljIGJvb2wgaXNfYXJlbmFfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubylcbiBcdHJldHVybiByZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fQVJFTkE7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19sb2FkX2FjcV91bnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIEJQRl9MT0FEX0FDUSBpcyBub3QgcmV3cml0dGVuIHRvIGEgQlBGX1BST0JFX01FTSBsb2FkIGJ5IHRoZVxuJiM0MztcdCAqIHZlcmlmaWVyLCB1bmxpa2UgYSByZWd1bGFyIEJQRl9MRFguIFRoZSBKSVQgd291bGQgZW1pdCBhIHBsYWluIGxvYWRcbiYjNDM7XHQgKiB3aXRoIG5vIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSwgc28gYSBmYXVsdCAoZS5nLiBOVUxMIGRlcmVmKSBjcmFzaGVzXG4mIzQzO1x0ICogdGhlIGtlcm5lbCBpbnN0ZWFkIG9mIGJlaW5nIGhhbmRsZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSZWplY3QgdGhlIHNvdXJjZSBwb2ludGVyIHR5cGVzIHRoYXQgYSBCUEZfTERYIHdvdWxkIGhhdmUgaGFkIHRoYXRcbiYjNDM7XHQgKiBmYXVsdCBwcm90ZWN0aW9uIGFwcGxpZWQgdG8sIGkuZS4gdGhlIG9uZXMgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKClcbiYjNDM7XHQgKiB0dXJucyBpbnRvIEJQRl9QUk9CRV9NRU06IGEgYmFyZSBQVFJfVE9fQlRGX0lEIGFuZCBhbnkgUFRSX1VOVFJVU1RFRFxuJiM0MztcdCAqIHBvaW50ZXIgKHVudHJ1c3RlZCBidGYgaWRzLCB1bnRydXN0ZWQgTUVNX0FMTE9DLCByZG9ubHkgdW50cnVzdGVkXG4mIzQzO1x0ICogbWVtb3J5KS4gQSBQVFJfVFJVU1RFRCBwb2ludGVyIGlzIG5vdCBhbW9uZyB0aGVtLCBpcyBub3QgY29udmVydGVkLFxuJiM0MztcdCAqIGFuZCBzdGF5cyBhbGxvd2VkLiBTYW1lIGZvciB0aGUgb3RoZXIgZmxhZ2dlZCBQVFJfVE9fQlRGX0lEIHZhcmlhbnRzXG4mIzQzO1x0ICogKE1FTV9BTExPQywgTUVNX1JDVSwgLi4uKSwgaGVuY2UgdGhlIGV4YWN0IG1hdGNoIG9uIHRoZSBiYXNlIHR5cGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIGluc24tXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgKHJlZy1cdTAwM2V0eXBlID09IFBUUl9UT19CVEZfSUQgfHxcbiYjNDM7XHRcdCh0eXBlX2ZsYWcocmVnLVx1MDAzZXR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSk7XG4mIzQzO31cbiYjNDM7XG4gLyogUmV0dXJuIGZhbHNlIGlmIEByZWdubyBjb250YWlucyBhIHBvaW50ZXIgd2hvc2UgdHlwZSBpc24mIzM5O3Qgc3VwcG9ydGVkIGZvclxuICAqIGF0b21pYyBpbnN0cnVjdGlvbiBAaW5zbi5cbiAgKi9cbkBAIC00OTM5LDcgJiM0Mzs0OTYzLDggQEAgc3RhdGljIGJvb2wgYXRvbWljX3B0cl90eXBlX29rKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIHJlZ25vKSlcbiBcdFx0cmV0dXJuIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKTtcbi1cbiYjNDM7XHRpZiAoaXNfbG9hZF9hY3FfdW5zYWZlKGVudiwgcmVnbm8sIGluc24pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IGMzY2NlNWMyOTJiZGQuLjE1ZGQzYWUyYTg0YjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDMsNiAmIzQzOzEwMyw4IEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKVxuIFx0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfcmVhZF9mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt3cml0ZV9mYXVsdFwmIzM0OykpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV93cml0ZV9mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7bG9hZF9hY3F1aXJlX2ZhdWx0XCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuIFxuIFx0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IDhkOGU1M2QzNzI2NmMuLmNmNTUzM2UxMWYzOWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTE4NSw2ICYjNDM7MTg1LDUwIEBAIGludCBzdHJlYW1fYXJlbmFfcmVhZF9mYXVsdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7X19zdGRlcnIoXCYjMzQ7RVJST1I6IEFyZW5hIFJFQUQgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cJiMzNDspXG4mIzQzO19fc3RkZXJyKFwmIzM0O0NQVToge3tbMC05XSYjNDM7fX0gVUlEOiAwIFBJRDoge3tbMC05XSYjNDM7fX0gQ29tbToge3suKn19XCYjMzQ7KVxuJiM0MztfX3N0ZGVycihcJiMzNDtDYWxsIHRyYWNlOlxcblwmIzM0O1xuJiM0MztcJiMzNDt7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFxcXCYjNDM7MHhbMC05YS1mQS1GXSYjNDM7LzB4WzAtOWEtZkEtRl0mIzQzO1xcblwmIzM0O1xuJiM0MztcJiMzNDt8WyBcXHRdJiM0MztbXlxcbl0mIzQzO1xcbikqfX1cJiMzNDspXG4mIzQzO2ludCBzdHJlYW1fYXJlbmFfbG9hZF9hY3F1aXJlX2ZhdWx0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gbG9hZF9hY3F1aXJlX2luc24gPSB7XG4mIzQzO1x0XHQuY29kZVx0ID0gMHhjMyxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cbiYjNDM7XHRcdC5kc3RfcmVnID0gMCxcdFx0LyogQlBGX1JFR18wICovXG4mIzQzO1x0XHQuc3JjX3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuJiM0MztcdFx0Lm9mZlx0ID0gMHg3ZmZmLFxuJiM0MztcdFx0LmltbVx0ID0gMHgxMDAsXHQvKiBCUEZfTE9BRF9BQ1EgKi9cbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXHUwMDI2YXJlbmE7XG4mIzQzO1x0dTY0IHVzZXJfdm1fc3RhcnQsIHZhbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcdTAwMjZhcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICpcbiYjNDM7XHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxuJiM0MztcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcbiYjNDM7XHQgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmFycmllcl92YXIocHRyKTtcbiYjNDM7XHR1c2VyX3ZtX3N0YXJ0ID0gcHRyLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG4mIzQzO1x0ZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgJiM0MzsgMHg3ZmZmO1xuJiM0MztcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdFwmIzM0O3IxID0gJVt1c2VyX3ZtX3N0YXJ0XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IwID0gMTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0Oy44Ynl0ZSAlW2xvYWRfYWNxdWlyZV9pbnNuXTtcJiMzNDsgLyogcjAgPSBsb2FkX2FjcXVpcmUoKHUzMiAqKShyMSAmIzQzOyAweDdmZmYpKSAqL1xuJiM0MztcdFx0XCYjMzQ7JVt2YWxdID0gcjA7XCYjMzQ7XG4mIzQzO1x0XHQ6IFt2YWxdIFwmIzM0Oz1yXCYjMzQ7ICh2YWwpXG4mIzQzO1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcJiMzNDtyXCYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSxcbiYjNDM7XHRcdCAgX19pbW1faW5zbihsb2FkX2FjcXVpcmVfaW5zbiwgbG9hZF9hY3F1aXJlX2luc24pXG4mIzQzO1x0XHQ6IFwmIzM0O3IwXCYjMzQ7LCBcJiMzNDtyMVwmIzM0O1xuJiM0MztcdCk7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19ub2lubGluZSB2b2lkIHN1YnByb2codm9pZClcbiB7XG4gXHRpbnQgX19hcmVuYSAqYWRkciA9IChpbnQgX19hcmVuYSAqKTB4ZGVhZGJlZWY7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jXG5pbmRleCBhZTFkYWIxYjBjYmI3Li5kMTcwMjZkNzQ4MGQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9hZF9hY3F1aXJlLmNcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfY29yZV9yZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuIFxuQEAgLTIyMSw2ICYjNDM7MjIyLDMzIEBAIF9fbmFrZWQgdm9pZCBsb2FkX2FjcXVpcmVfZnJvbV9zb2NrX3BvaW50ZXIodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2xvYWQtYWNxdWlyZSBmcm9tIHJkb25seV91bnRydXN0ZWRfbWVtIHBvaW50ZXJcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0mIzQzO319IHJkb25seV91bnRydXN0ZWRfbWVtIGlzIG5vdCBhbGxvd2VkXCYjMzQ7KVxuJiM0MztpbnQgbG9hZF9hY3F1aXJlX2Zyb21fcmRvbmx5X3VudHJ1c3RlZF9tZW0odm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0X191NjQgdmFsID0gMDtcbiYjNDM7XHR2b2lkICpwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGJwZl9yZG9ubHlfY2FzdCh4LCAwKSB5aWVsZHMgUFRSX1RPX01FTSB8IE1FTV9SRE9OTFkgfCBQVFJfVU5UUlVTVEVELlxuJiM0MztcdCAqIEEgcmVndWxhciBCUEZfTERYIGZyb20gaXQgaXMgcmV3cml0dGVuIHRvIEJQRl9QUk9CRV9NRU0sIGJ1dCBhXG4mIzQzO1x0ICogbG9hZC1hY3F1aXJlIGlzIG5vdCwgc28gaXQgbXVzdCBiZSByZWplY3RlZCwgb3RoZXJ3aXNlIHRoZSBKSVQgZW1pdHNcbiYjNDM7XHQgKiBhIHBsYWluIGxvYWQgd2l0aCBubyBleGNlcHRpb24gdGFibGUgZW50cnkgYW5kIGEgZmF1bHQgd291bGQgY3Jhc2hcbiYjNDM7XHQgKiB0aGUga2VybmVsLlxuJiM0MztcdCAqL1xuJiM0MztcdHAgPSBicGZfcmRvbmx5X2Nhc3QoXHUwMDI2dmFsLCAwKTtcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFwmIzM0O3IxID0gJVtwXTtcJiMzNDtcbiYjNDM7XHRcJiMzNDsuOGJ5dGUgJVtsb2FkX2FjcXVpcmVfaW5zbl07XCYjMzQ7IC8vIHIwID0gbG9hZF9hY3F1aXJlKCh1NjQgKikocjEgJiM0MzsgMCkpO1xuJiM0MztcdDpcbiYjNDM7XHQ6IFtwXSBcJiMzNDtyXCYjMzQ7IChwKSxcbiYjNDM7XHQgIF9faW1tX2luc24obG9hZF9hY3F1aXJlX2luc24sXG4mIzQzO1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX0RXLCBCUEZfTE9BRF9BQ1EsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSlcbiYjNDM7XHQ6IFwmIzM0O3IwXCYjMzQ7LCBcJiMzNDtyMVwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiBfX2Rlc2NyaXB0aW9uKFwmIzM0O2xvYWQtYWNxdWlyZSB3aXRoIGludmFsaWQgcmVnaXN0ZXIgUjE1XCYjMzQ7KVxuIF9fZmFpbHVyZSBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnKFwmIzM0O1IxNSBpcyBpbnZhbGlkXCYjMzQ7KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YpIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIEJQRl9MT0FEX0FDUSBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgaXQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgcmF0aGVyIHRoYW4gYSBzdG9yZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcmVqZWN0aW5nIGl0IG9uIHVudHJ1c3RlZCBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTc4NjgyYzMwOGNiM2RmZTIwM2Q2OGQxMWMxNjQ4MmIwNTQ2OTJiMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDA6NTI6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDRjZGM3ZGZiMDViYTkuLmQxNGQyOTdlYmI5NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMTc4LDcgJiM0MzsxMTc4LDEyIEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAogCWV4LSZndDtpbnNuID0gaW5zX29mZnNldDsKIAotCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0xEWCkKJiM0MzsJLyoKJiM0MzsJICogQSBsb2FkLWFjcXVpcmUgaXMgb2YgQlBGX1NUWCBjbGFzcywgYnV0IHJlYWRzIGZyb20gc3JjX3JlZyBpbnRvCiYjNDM7CSAqIGRzdF9yZWcgbGlrZSBhIEJQRl9MRFggZG9lcywgaGVuY2UgaXQgbXVzdCBub3QgYmUgdHJlYXRlZCBhcyBhIHN0b3JlCiYjNDM7CSAqIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9MRFggJmFtcDsmYW1wOyAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkKIAkJZHN0X3JlZyA9IERPTlRfQ0xFQVI7CiAKIAlleC0mZ3Q7Zml4dXAgPSBGSUVMRF9QUkVQKEJQRl9GSVhVUF9SRUdfTUFTSywgZHN0X3JlZyk7CkBAIC0xMTkzLDcgJiM0MzsxMTk4LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkgKiBtZW1vcnkgYWNjZXNzLiBQYXNzIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0bwogCQkgKiBleF9oYW5kbGVyX2JwZi4KIAkJICovCi0JCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xEWCkKJiM0MzsJCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xEWCB8fCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKQogCQkJYXJlbmFfcmVnID0gYnBmMmE2NFtpbnNuLSZndDtzcmNfcmVnXTsKIAkJZWxzZQogCQkJYXJlbmFfcmVnID0gYnBmMmE2NFtpbnNuLSZndDtkc3RfcmVnXTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IDhmZTg5NjlmYjhhMGYuLjZiOTk3MmIwN2MxYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtMTk5NCw3ICYjNDM7MTk5NCw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCQkvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi8KIAkJaWYgKHJldCAmZ3Q7PSAwKQogCQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sCi0JCQkJaW5zbi0mZ3Q7aW1tID09IEJQRl9MT0FEX0FDUSA/IHJkIDogUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLAomIzQzOwkJCQlicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pID8gcmQgOiBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsCiAJCQkJY3R4KSA/OiByZXQ7CiAKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCAwMWU3Y2U1NjljMWVkLi44OGVkOTViMmVhYTcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0yMzMxLDggJiM0MzsyMzMxLDEzIEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCSAqIEJQRl9QUk9CRV9BVE9NSUMpIGJlZm9yZSBiZWluZyB1c2VkIGZvciB0aGUgbWVtb3J5IGFjY2Vzcy4gUGFzcwogCQkJCSAqIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0bwogCQkJCSAqIGV4X2hhbmRsZXJfYnBmKCkuCiYjNDM7CQkJCSAqCiYjNDM7CQkJCSAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcKJiM0MzsJCQkJICogaW50byBkc3RfcmVnIGxpa2UgYSBCUEZfTERYIGRvZXMsIGhlbmNlIGl0IG11c3Qgbm90IGJlCiYjNDM7CQkJCSAqIHRyZWF0ZWQgYXMgYSBzdG9yZSBoZXJlLgogCQkJCSAqLwotCQkJCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xEWCkgewomIzQzOwkJCQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9MRFggfHwKJiM0MzsJCQkJICAgIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpIHsKIAkJCQkJYXJlbmFfcmVnID0gcmVnMnB0X3JlZ3Nbc3JjX3JlZ107CiAJCQkJCWZpeHVwX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddOwogCQkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3M2JhY2ZjNjQ0NGRmLi5kNzliZjc1NTdlZjY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTExMzIsMjEgJiM0MzsxMTMyLDYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wc2V1ZG9fZnVuYyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJcmV0dXJuIGJwZl9pc19sZGltbTY0KGluc24pICZhbXA7JmFtcDsgaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkM7CiB9CiAKLS8qIEdpdmVuIGEgQlBGX0FUT01JQyBpbnN0cnVjdGlvbiBAYXRvbWljX2luc24sIHJldHVybiB0cnVlIGlmIGl0IGlzIGFuCi0gKiBhdG9taWMgbG9hZCBvciBzdG9yZSwgYW5kIGZhbHNlIGlmIGl0IGlzIGEgcmVhZC1tb2RpZnktd3JpdGUgaW5zdHJ1Y3Rpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqYXRvbWljX2luc24pCi17Ci0Jc3dpdGNoIChhdG9taWNfaW5zbi0mZ3Q7aW1tKSB7Ci0JY2FzZSBCUEZfTE9BRF9BQ1E6Ci0JY2FzZSBCUEZfU1RPUkVfUkVMOgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCiBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHsKIAlpbnQgKCp0ZXN0X3J1bikoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsCiAJCQl1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDMyZDUyOTdjNTU3ZTUuLjQxYjAyZDUzZTIyMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMzgzLDYgJiM0MzszODMsMzcgQEAgc3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIC8qIExlZ2FjeSBhbGlhcyAqLwogI2RlZmluZSBCUEZfU1RYX1hBREQoU0laRSwgRFNULCBTUkMsIE9GRikgQlBGX0FUT01JQ19PUChTSVpFLCBCUEZfQURELCBEU1QsIFNSQywgT0ZGKQogCiYjNDM7LyoKJiM0MzsgKiBHaXZlbiBhIEJQRl9BVE9NSUMgaW5zdHJ1Y3Rpb24gQGF0b21pY19pbnNuLCByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbgomIzQzOyAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0MzticGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbikKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoYXRvbWljX2luc24tJmd0O2ltbSkgewomIzQzOwljYXNlIEJQRl9MT0FEX0FDUToKJiM0MzsJY2FzZSBCUEZfU1RPUkVfUkVMOgomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGxvYWQtYWNxdWlyZSBpcyB0aGUgb25seSBCUEZfU1RYIGNsYXNzIGluc3RydWN0aW9uIHRoYXQgcmVhZHMgaW50bwomIzQzOyAqIGRzdF9yZWcgZnJvbSBzcmNfcmVnICYjNDM7IG9mZjE2LCBpLmUuIGl0IGhhcyB0aGUgb3BlcmFuZCByb2xlcyBvZiBhIEJQRl9MRFguCiYjNDM7ICogVW5saWtlIGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZSgpLCBAaW5zbiBpcyBub3QgYXNzdW1lZCB0byBiZSBhIEJQRl9BVE9NSUMKJiM0MzsgKiBpbnN0cnVjdGlvbiBoZXJlLCBzbyB0aGF0IGNhbGxlcnMgd2hpY2ggd2FsayBhbGwgaW5zdHJ1Y3Rpb24gY2xhc3NlcyBjYW4KJiM0MzsgKiB1c2UgdGhpcyBkaXJlY3RseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiYjNDM7ewomIzQzOwlyZXR1cm4gQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9TVFggJmFtcDsmYW1wOwomIzQzOwkgICAgICAgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9BVE9NSUMgfHwKJiM0MzsJCUJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGluc24tJmd0O2ltbSA9PSBCUEZfTE9BRF9BQ1E7CiYjNDM7fQomIzQzOwogLyogTWVtb3J5IHN0b3JlLCAqKHVpbnQgKikgKGRzdF9yZWcgJiM0Mzsgb2ZmMTYpID0gaW1tMzIgKi8KIAogI2RlZmluZSBCUEZfU1RfTUVNKFNJWkUsIERTVCwgT0ZGLCBJTU0pCQkJCVwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNjIzM2MwMDgxZDEwLi42NDhjNTc4NDE3OGVjIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC00OTIzLDYgJiM0Mzs0OTIzLDMwIEBAIHN0YXRpYyBib29sIGlzX2FyZW5hX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pCiAJcmV0dXJuIHJlZy0mZ3Q7dHlwZSA9PSBQVFJfVE9fQVJFTkE7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpc19sb2FkX2FjcV91bnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIEJQRl9MT0FEX0FDUSBpcyBub3QgcmV3cml0dGVuIHRvIGEgQlBGX1BST0JFX01FTSBsb2FkIGJ5IHRoZQomIzQzOwkgKiB2ZXJpZmllciwgdW5saWtlIGEgcmVndWxhciBCUEZfTERYLiBUaGUgSklUIHdvdWxkIGVtaXQgYSBwbGFpbiBsb2FkCiYjNDM7CSAqIHdpdGggbm8gZXhjZXB0aW9uIHRhYmxlIGVudHJ5LCBzbyBhIGZhdWx0IChlLmcuIE5VTEwgZGVyZWYpIGNyYXNoZXMKJiM0MzsJICogdGhlIGtlcm5lbCBpbnN0ZWFkIG9mIGJlaW5nIGhhbmRsZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFJlamVjdCB0aGUgc291cmNlIHBvaW50ZXIgdHlwZXMgdGhhdCBhIEJQRl9MRFggd291bGQgaGF2ZSBoYWQgdGhhdAomIzQzOwkgKiBmYXVsdCBwcm90ZWN0aW9uIGFwcGxpZWQgdG8sIGkuZS4gdGhlIG9uZXMgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKCkKJiM0MzsJICogdHVybnMgaW50byBCUEZfUFJPQkVfTUVNOiBhIGJhcmUgUFRSX1RPX0JURl9JRCBhbmQgYW55IFBUUl9VTlRSVVNURUQKJiM0MzsJICogcG9pbnRlciAodW50cnVzdGVkIGJ0ZiBpZHMsIHVudHJ1c3RlZCBNRU1fQUxMT0MsIHJkb25seSB1bnRydXN0ZWQKJiM0MzsJICogbWVtb3J5KS4gQSBQVFJfVFJVU1RFRCBwb2ludGVyIGlzIG5vdCBhbW9uZyB0aGVtLCBpcyBub3QgY29udmVydGVkLAomIzQzOwkgKiBhbmQgc3RheXMgYWxsb3dlZC4gU2FtZSBmb3IgdGhlIG90aGVyIGZsYWdnZWQgUFRSX1RPX0JURl9JRCB2YXJpYW50cwomIzQzOwkgKiAoTUVNX0FMTE9DLCBNRU1fUkNVLCAuLi4pLCBoZW5jZSB0aGUgZXhhY3QgbWF0Y2ggb24gdGhlIGJhc2UgdHlwZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBpbnNuLSZndDtpbW0gPT0gQlBGX0xPQURfQUNRICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIChyZWctJmd0O3R5cGUgPT0gUFRSX1RPX0JURl9JRCB8fAomIzQzOwkJKHR5cGVfZmxhZyhyZWctJmd0O3R5cGUpICZhbXA7IFBUUl9VTlRSVVNURUQpKTsKJiM0Mzt9CiYjNDM7CiAvKiBSZXR1cm4gZmFsc2UgaWYgQHJlZ25vIGNvbnRhaW5zIGEgcG9pbnRlciB3aG9zZSB0eXBlIGlzbiYjMzk7dCBzdXBwb3J0ZWQgZm9yCiAgKiBhdG9taWMgaW5zdHJ1Y3Rpb24gQGluc24uCiAgKi8KQEAgLTQ5MzksNyAmIzQzOzQ5NjMsOCBAQCBzdGF0aWMgYm9vbCBhdG9taWNfcHRyX3R5cGVfb2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLAogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGlzX2FyZW5hX3JlZyhlbnYsIHJlZ25vKSkKIAkJcmV0dXJuIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKTsKLQomIzQzOwlpZiAoaXNfbG9hZF9hY3FfdW5zYWZlKGVudiwgcmVnbm8sIGluc24pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCmluZGV4IGMzY2NlNWMyOTJiZGQuLjE1ZGQzYWUyYTg0YjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCkBAIC0xMDMsNiAmIzQzOzEwMyw4IEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKQogCQl0ZXN0X2FkZHJlc3Moc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX2FyZW5hX3JlYWRfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3dyaXRlX2ZhdWx0JiMzNDspKQogCQl0ZXN0X2FkZHJlc3Moc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX2FyZW5hX3dyaXRlX2ZhdWx0LCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmF1bHRfYWRkcik7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bG9hZF9hY3F1aXJlX2ZhdWx0JiMzNDspKQomIzQzOwkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKIAogCXN0cmVhbV9fZGVzdHJveShza2VsKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwppbmRleCA4ZDhlNTNkMzcyNjZjLi5jZjU1MzNlMTFmMzljIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCkBAIC0xODUsNiAmIzQzOzE4NSw1MCBAQCBpbnQgc3RyZWFtX2FyZW5hX3JlYWRfZmF1bHQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX3N0ZGVycigmIzM0O0VSUk9SOiBBcmVuYSBSRUFEIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19JiMzNDspCiYjNDM7X19zdGRlcnIoJiMzNDtDUFU6IHt7WzAtOV0mIzQzO319IFVJRDogMCBQSUQ6IHt7WzAtOV0mIzQzO319IENvbW06IHt7Lip9fSYjMzQ7KQomIzQzO19fc3RkZXJyKCYjMzQ7Q2FsbCB0cmFjZTpcbiYjMzQ7CiYjNDM7JiMzNDt7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFwmIzQzOzB4WzAtOWEtZkEtRl0mIzQzOy8weFswLTlhLWZBLUZdJiM0MztcbiYjMzQ7CiYjNDM7JiMzNDt8WyBcdF0mIzQzO1teXG5dJiM0MztcbikqfX0mIzM0OykKJiM0MztpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIGxvYWRfYWNxdWlyZV9pbnNuID0gewomIzQzOwkJLmNvZGUJID0gMHhjMywJLyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqLwomIzQzOwkJLmRzdF9yZWcgPSAwLAkJLyogQlBGX1JFR18wICovCiYjNDM7CQkuc3JjX3JlZyA9IDEsCQkvKiBCUEZfUkVHXzEgKi8KJiM0MzsJCS5vZmYJID0gMHg3ZmZmLAomIzQzOwkJLmltbQkgPSAweDEwMCwJLyogQlBGX0xPQURfQUNRICovCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopJmFtcDthcmVuYTsKJiM0MzsJdTY0IHVzZXJfdm1fc3RhcnQsIHZhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgJmFtcDthcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICoKJiM0MzsJICogdHJpZ2dlcnMgYm91bmRzIGNoZWNraW5nIHNpbmNlIHRoZSBtYXAgZGVmaW5pdGlvbiBpcyBzbWFsbGVyIHRoYW4KJiM0MzsJICogc3RydWN0IGJwZl9hcmVuYS4gYmFycmllcl92YXIoKSBtYWtlcyB0aGUgcG9pbnRlciBvcGFxdWUgdG8gR0NDLAomIzQzOwkgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuCiYjNDM7CSAqLwomIzQzOwliYXJyaWVyX3ZhcihwdHIpOwomIzQzOwl1c2VyX3ZtX3N0YXJ0ID0gcHRyLSZndDt1c2VyX3ZtX3N0YXJ0OwomIzQzOwlmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCAmIzQzOyAweDdmZmY7CiYjNDM7CWJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O3IxID0gJVt1c2VyX3ZtX3N0YXJ0XTsmIzM0OwomIzQzOwkJJiMzNDtyMCA9IDE7JiMzNDsKJiM0MzsJCSYjMzQ7LjhieXRlICVbbG9hZF9hY3F1aXJlX2luc25dOyYjMzQ7IC8qIHIwID0gbG9hZF9hY3F1aXJlKCh1MzIgKikocjEgJiM0MzsgMHg3ZmZmKSkgKi8KJiM0MzsJCSYjMzQ7JVt2YWxdID0gcjA7JiMzNDsKJiM0MzsJCTogW3ZhbF0gJiMzNDs9ciYjMzQ7ICh2YWwpCiYjNDM7CQk6IFt1c2VyX3ZtX3N0YXJ0XSAmIzM0O3ImIzM0OyAodXNlcl92bV9zdGFydCksCiYjNDM7CQkgIF9faW1tX2luc24obG9hZF9hY3F1aXJlX2luc24sIGxvYWRfYWNxdWlyZV9pbnNuKQomIzQzOwkJOiAmIzM0O3IwJiMzNDssICYjMzQ7cjEmIzM0OwomIzQzOwkpOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX25vaW5saW5lIHZvaWQgc3VicHJvZyh2b2lkKQogewogCWludCBfX2FyZW5hICphZGRyID0gKGludCBfX2FyZW5hICopMHhkZWFkYmVlZjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuYwppbmRleCBhZTFkYWIxYjBjYmI3Li5kMTcwMjZkNzQ4MGQ4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9hZF9hY3F1aXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jCkBAIC0zLDYgJiM0MzszLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2NvcmVfcmVhZC5oJmd0OwogI2luY2x1ZGUgJiMzNDsuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiAKQEAgLTIyMSw2ICYjNDM7MjIyLDMzIEBAIF9fbmFrZWQgdm9pZCBsb2FkX2FjcXVpcmVfZnJvbV9zb2NrX3BvaW50ZXIodm9pZCkKIAk6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2xvYWQtYWNxdWlyZSBmcm9tIHJkb25seV91bnRydXN0ZWRfbWVtIHBvaW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0mIzQzO319IHJkb25seV91bnRydXN0ZWRfbWVtIGlzIG5vdCBhbGxvd2VkJiMzNDspCiYjNDM7aW50IGxvYWRfYWNxdWlyZV9mcm9tX3Jkb25seV91bnRydXN0ZWRfbWVtKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CV9fdTY0IHZhbCA9IDA7CiYjNDM7CXZvaWQgKnA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGJwZl9yZG9ubHlfY2FzdCh4LCAwKSB5aWVsZHMgUFRSX1RPX01FTSB8IE1FTV9SRE9OTFkgfCBQVFJfVU5UUlVTVEVELgomIzQzOwkgKiBBIHJlZ3VsYXIgQlBGX0xEWCBmcm9tIGl0IGlzIHJld3JpdHRlbiB0byBCUEZfUFJPQkVfTUVNLCBidXQgYQomIzQzOwkgKiBsb2FkLWFjcXVpcmUgaXMgbm90LCBzbyBpdCBtdXN0IGJlIHJlamVjdGVkLCBvdGhlcndpc2UgdGhlIEpJVCBlbWl0cwomIzQzOwkgKiBhIHBsYWluIGxvYWQgd2l0aCBubyBleGNlcHRpb24gdGFibGUgZW50cnkgYW5kIGEgZmF1bHQgd291bGQgY3Jhc2gKJiM0MzsJICogdGhlIGtlcm5lbC4KJiM0MzsJICovCiYjNDM7CXAgPSBicGZfcmRvbmx5X2Nhc3QoJmFtcDt2YWwsIDApOwomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IxID0gJVtwXTsmIzM0OwomIzQzOwkmIzM0Oy44Ynl0ZSAlW2xvYWRfYWNxdWlyZV9pbnNuXTsmIzM0OyAvLyByMCA9IGxvYWRfYWNxdWlyZSgodTY0ICopKHIxICYjNDM7IDApKTsKJiM0MzsJOgomIzQzOwk6IFtwXSAmIzM0O3ImIzM0OyAocCksCiYjNDM7CSAgX19pbW1faW5zbihsb2FkX2FjcXVpcmVfaW5zbiwKJiM0MzsJCSAgICAgQlBGX0FUT01JQ19PUChCUEZfRFcsIEJQRl9MT0FEX0FDUSwgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApKQomIzQzOwk6ICYjMzQ7cjAmIzM0OywgJiMzNDtyMSYjMzQ7KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7bG9hZC1hY3F1aXJlIHdpdGggaW52YWxpZCByZWdpc3RlciBSMTUmIzM0OykKIF9fZmFpbHVyZSBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnKCYjMzQ7UjE1IGlzIGludmFsaWQmIzM0OykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxMQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGNydWNpYWwgZml4LCBhZGRyZXNzaW5nIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBoYW5kbGVzIGBCUEZfTE9BRF9BQ1FgIGluc3RydWN0aW9ucywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYXRvbWljIGxvYWQtYWNxdWlyZSBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlczogYXJtNjQsIHJpc2N2LCBhbmQgeDg2LiBUaGlzIHNjcmVhbXMgJiMzNDtmdXp6IG1lISYjMzQ7IOKAkyBpdCYjMzk7cyByaXBlIGZvciBmaW5kaW5nIHN1YnRsZSwgaGFyZC10by1wcmVkaWN0IGlzc3Vlcy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgZW5zdXJpbmcgdGhhdCB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzYWZldHkgY2hlY2tzIHByb3Blcmx5IGFjY291bnQgZm9yIGBCUEZfTE9BRF9BQ1FgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbmV3IGhlbHBlciwgYGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoKWAsIGFuZCBpbnRlZ3JhdGVkIGl0IGludG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVycyBmb3IgYXJtNjQgYW5kIHJpc2N2LCBhbmQgdGhlIHg4NiBleGNlcHRpb24gaGFuZGxpbmcgbG9naWMuIENydWNpYWxseSwgdGhlIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIG5vdyByZWplY3RzIGBCUEZfTE9BRF9BQ1FgIG9uIHVudHJ1c3RlZCBwb2ludGVycywgc2luY2UgdGhleSYjMzk7cmUgbm90IHJld3JpdHRlbiB0byBgQlBGX1BST0JFX01FTWAsIHdoaWNoIGNvdWxkIGxlYWQgdG8ga2VybmVsIHBhbmljcy4gTWFrZXMgc2Vuc2UgLSBwcmV2ZW50aW5nIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucyBpcyBwYXJhbW91bnQuCgpOb3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgdGhlIGZvbGxvd2luZzoKCiogICBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCB3aXRoaW4gYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCAoc3RhdGljKQoqICAgYGJwZl9qaXRfZW1pdF9pbnNuYCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AKKiAgIGBkb19qaXRgIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgCiogICBgaXNfbG9hZF9hY3FfdW5zYWZlYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKQoqICAgYGF0b21pY19wdHJfdHlwZV9va2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYykKCkkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBzdGF0aWMvbm9uLXN0YXRpYyBzdGF0dXMgb2YgYSBmZXcgb2YgdGhvc2Ugc3ltYm9scy4gSSYjMzk7bSBzbGlnaHRseSBzdXJwcmlzZWQgdG8gc2VlIHRoYXQgYGJwZl9qaXRfZW1pdF9pbnNuYCBpbiB0aGUgcmlzY3YgY29kZSBtaWdodCAqbm90KiBiZSBzdGF0aWMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgYWxzbyBpZiBgZG9faml0YCBpcyBpbmRlZWQgc3RhdGljIGluIHRoZSB4ODYgY29kZS4gVGhlc2UgZGV0YWlscyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGJyb2FkZXIgaW1wbGljYXRpb25zLgoKQW5kIG9mIGNvdXJzZSwgYGJwZl9jaGVja2AgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllciwgc28gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0aG9yb3VnaGx5LiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaCB0aGF0IG5lZWRzIHJpZ29yb3VzIGFuYWx5c2lzLCBlc3BlY2lhbGx5IGZyb20gYSBtZW1vcnktc2FmZXR5IHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgYnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjE6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjItXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9qaXRfZW1pdF9pbnNuYCBBY3Jvc3MgQXJjaGl0ZWN0dXJlcyoqCgpIbW0sIGBicGZfaml0X2VtaXRfaW5zbmAgYmVpbmcgbm9uLXN0YXRpYyBpbiB0aGUgUklTQy1WIGltcGxlbWVudGF0aW9uIGlzIGludGVyZXN0aW5nLiBJdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBjcm9zcy1hcmNoaXRlY3R1cmUgY29uc2lzdGVuY3kgYW5kIHBvcnRhYmlsaXR5IG9mIG91ciBCUEYgSklUIGluZnJhc3RydWN0dXJlLiBXaHkgaXMgaXQgbm9uLXN0YXRpYyB0aGVyZT8gV2hhdCBzcGVjaWZpYyBuZWVkIGRyb3ZlIHRoYXQgZGVzaWduIGNob2ljZT8gSXMgaXQgc29tZXRoaW5nIGluaGVyZW50IHRvIHRoZSBSSVNDLVYgSVNBIG9yIHRoZSB3YXkgdGhlIFJJU0MtViBKSVQgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBrZXJuZWw/CgpUaGlzIGRldmlhdGlvbiBmcm9tIHRoZSB0eXBpY2FsIHN0YXRpYyBkZWNsYXJhdGlvbiByYWlzZXMgc2V2ZXJhbCBxdWVzdGlvbnMuIERvZXMgdGhpcyBpbXBseSBhIGRlc2lnbiBwYXR0ZXJuIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgaW4gZnV0dXJlIEpJVCBlZmZvcnRzPyBEb2VzIGl0IGV4cG9zZSBtb3JlIG9mIHRoZSBKSVQgaW50ZXJuYWxzLCBhbmQgZG9lcyB0aGlzIGhhdmUgc2VjdXJpdHkgaW1wbGljYXRpb25zPwoKTm93LCB0aGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgdGhlIHg4NiBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgc3RhdGljIHRoZXJlPyBJZiBzbywgd2h5IHRoZSBkaWZmZXJlbmNlPyBJcyBpdCBhIG1hdHRlciBvZiBoaXN0b3JpY2FsIHJlYXNvbnMsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBvciBkZXNpZ24gcGhpbG9zb3BoeT8gSXMgdGhlcmUgYSBzdWJ0bGUsIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJhbCByZWFzb24gdGhhdCBpbmZsdWVuY2VzIHRoaXMgZGVjaXNpb24/CgpXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkaXNjcmVwYW5jeSBmdWxseS4gSXQgY291bGQgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0LCBidXQgaXQgY291bGQgYWxzbyByZXZlYWwgZGVlcGVyIGluc2lnaHRzIGludG8gdGhlIHBlcmZvcm1hbmNlIGFuZCBtYWludGFpbmFiaWxpdHkgb2Ygb3VyIEJQRiBKSVQgZW5naW5lIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gVGhpcyB2YXJpYW5jZSBuZWVkcyBzb21lIGludmVzdGlnYXRpb24gYXMgaXQgY291bGQgbGVhZCB0byBwb3RlbnRpYWwgcmVmYWN0b3JpbmcgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgZG9faml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjM5PXN0YXRpYyBpbnQgZW1pdF9zcGVjdHJlX2JoYl9iYXJyaWVyKHU4ICoqcHByb2csIHU4ICppcCxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTY4MC1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjgxOnN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjgyLVx0XHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMTIKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSklUIENvbXBpbGF0aW9uIEZsb3c6IEEgUXVpY2sgTWVudGFsIFJ1bi1UaHJvdWdoKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBkb19qaXRgIGlzIGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHNpZ24gaXQmIzM5O3MgcGFydCBvZiBhIHByaXZhdGUsIGludGVybmFsIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvbmZpcm1zIHdoYXQgSSBleHBlY3RlZDsgaXQgaXNuJiMzOTt0IHNvbWV0aGluZyBleHBvc2VkIGRpcmVjdGx5IHRvIHRoZSBvdXRzaWRlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlICptYWluKiBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlIOKAkyB0aGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHRoZSBsaWtlbHkgZXh0ZXJuYWwgZmFjaW5nIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIGFuZCBjb29yZGluYXRpbmcgdGhlIEp1c3QtSW4tVGltZSBjb21waWxhdGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zLiBJJiMzOTtkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhpbmdzIGxpa2UgY2hlY2tpbmcgZm9yIHByZXJlcXVpc2l0ZXMsIHNldHRpbmcgdXAgdGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50LCBhbmQgdGhlbiwgbGlrZWx5LCBjYWxsaW5nIGBkb19qaXRgIChvciBzb21lIHNpbWlsYXIgaW50ZXJuYWwgZnVuY3Rpb24pIHRvIGFjdHVhbGx5IGRvIHRoZSBoYXJkIHdvcmsgb2YgdHJhbnNsYXRpbmcgdGhlIEJQRiBieXRlY29kZSB0byBtYWNoaW5lIGNvZGUuIEdvb2QgZGVzaWduLCBrZWVwaW5nIHRoYXQgY29yZSBmdW5jdGlvbmFsaXR5IG5pY2VseSBlbmNhcHN1bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0cnVjdCBicGZfcHJvZyBcXCpicGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODQwPXN0cnVjdCB4NjRfaml0X2RhdGEge1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODUxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NTI6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQzCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkNvbnNpZGVyaW5nIHRoZSBBcmNoaXRlY3R1cmUgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBwaWVjZSBvZiB3b3JrLCBhbmQgbm93IEkmIzM5O20gdGhpbmtpbmcuLi4gd2UgbmVlZCB0byB0aGluayBhYm91dCB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCBnaXZlbiB0aGUgcHJldmFsZW5jZSBvZiBtb2JpbGUgZGV2aWNlcywgbW9kZXJuIHNlcnZlcnMsIGFuZCBldmVuIGRlc2t0b3BzIG5vdyBydW5uaW5nIG9uIEFSTS4gV2UgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nIGlzIGxpbWl0ZWQgdG8geDg2IG9yIHg2NCBhbnltb3JlLiBTbywgeWVhaCwgKmFuZCBmb3IgYXJtNjQ/KiBJdCYjMzk7cyBhbG1vc3QgYSBnaXZlbiB0aGF0IHdlIG5lZWQgdG8gYWRkcmVzcyB0aGF0LCB0b28uIFRoYXQmIzM5O3MgdGhlIGltcG9ydGFudCBxdWVzdGlvbiB0byBiZSBhc2tpbmcgb3Vyc2VsdmVzLCB0byBlbnN1cmUgdGhpcyBkZXNpZ24gaXMgYWN0dWFsbHkgcm9idXN0LiBHb3R0YSBjb25zaWRlciBpdCByaWdodCBmcm9tIHRoZSBiZWdpbm5pbmcsIG90aGVyd2lzZSwgaXQmIzM5O2xsIGhhdW50IHVzIGluIHRoZSBsb25nIHJ1bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0cnVjdCBicGZfcHJvZyBcXCpicGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjA5MT1zdHJ1Y3QgYXJtNjRfaml0X2RhdGEge1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwOTctXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMDk4OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgYGF0b21pY19wdHJfdHlwZV9va2AgQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgdmVyaWZpZXIgd29ya3MsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBhdG9taWNfcHRyX3R5cGVfb2tgIHdpdGhpbiBgY2hlY2tfYXRvbWljYC4gUmlnaHQsIHNvIGBjaGVja19hdG9taWNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgY2hlY2tpbmcgYXRvbWljIG9wZXJhdGlvbnMsIGFzIHRoZSBuYW1lIGltcGxpZXMuIEFuZCB3aXRoaW4gdGhhdCBjaGVjaywgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHVzaW5nIGBhdG9taWNfcHRyX3R5cGVfb2tgLiBUaGF0IG1lYW5zIHRoaXMgYGF0b21pY19wdHJfdHlwZV9va2AgZnVuY3Rpb24gKm11c3QqIGJlIGRvaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbCByZWxhdGVkIHRvIHBvaW50ZXIgdHlwZXMgaW4gdGhlIGNvbnRleHQgb2YgYXRvbWljIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGxpa2VseSBlbnN1cmluZyB0aGF0IGEgcG9pbnRlciB0eXBlIHVzZWQgaW4gYW4gYXRvbWljIGNvbnRleHQgaXMgYWN0dWFsbHkgdmFsaWQgYW5kIHRoYXQgaXRzIHVzZSBpcyBzYWZlIGFuZCB3ZWxsLWRlZmluZWQsIGFuZCB0aGF0IHRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGFsbG93cyBmb3IgdGhlIHVzZSBvZiB0aGUgcGFydGljdWxhciBwb2ludGVyIHR5cGUuIFBlcmhhcHMgaXQgZW5zdXJlcyB0aGUgcG9pbnRlciBpcyBhcHByb3ByaWF0ZWx5IGFsaWduZWQsIG9yIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5kZWZpbmVkIGJlaGF2aW91cnMsIHN1Y2ggYXMgY29uY3VycmVudCB3cml0ZXMgdG8gb3ZlcmxhcHBpbmcgcmVnaW9ucyBvZiBtZW1vcnkuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY2FsbGVkICpmcm9tKiBgY2hlY2tfYXRvbWljYCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBhIGNyaXRpY2FsLCBsb3ctbGV2ZWwgY29tcG9uZW50IG9mIHRoZSBvdmVyYWxsIGF0b21pYyBvcGVyYXRpb24gdmFsaWRhdGlvbiBwcm9jZXNzLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBzdGF0aWMgYW5hbHlzaXMgZm9yIHZlcmlmeWluZyB0aGUgY29ycmVjdG5lc3Mgb2YgYXRvbWljIG9wZXJhdGlvbnMgYXQgdGhlIHR5cGUgbGV2ZWwuIFRoZSB2ZXJpZmllciBpcyBjbGVhcmx5IHJlbHlpbmcgb24gdGhpcyBmdW5jdGlvbiB0byBlbmZvcmNlIGNlcnRhaW4gc2FmZXR5IGd1YXJhbnRlZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgaW50IGNoZWNrX2F0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjUxMj1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NDktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU1MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTUxLVx0XHRcdCAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NDEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY0MjpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19sb2FkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY0My1cdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NjYxOnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3N0b3JlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2Mi1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY4MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIHdoYXQgSSYjMzk7bSBzZWVpbmc6CgoqKkFuYWx5emluZyB0aGUgVmVyaWZpY2F0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIHZlcmlmaWVyIHdvcmtzLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlIGRlc2lnbiBlbXBoYXNpemVzIGEgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4gVGhlIGBjaGVja19hdG9taWNgIGZ1bmN0aW9uLCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbDsgaXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYW4gaW50ZXJuYWwsIGhlbHBlciBmdW5jdGlvbiwgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGV4cG9zZWQgb3IgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgdmVyaWZpY2F0aW9uIG1vZHVsZSBpdHNlbGYuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBhIHZlcnkgc3BlY2lmaWMsIGNvbnRhaW5lZCB0YXNrIHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIHBlcmhhcHMgYSBmb2N1c2VkIGF0b21pYyBpbnN0cnVjdGlvbiBjaGVjaywgZ2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUuCgpUaGUgcmVhbCBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIGVudGlyZSB2ZXJpZmljYXRpb24gcHJvY2VkdXJlLCBpcyBgYnBmX2NoZWNrYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgdmVyaWZpZXIgc3RhcnRzIGl0cyB3b3JrLCBJIGltYWdpbmUuIEl0IGlzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGVCUEYgc3lzdGVtIHRvIHZhbGlkYXRlIGEgcHJvZ3JhbS4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGV4cGVjdGF0aW9uOiBhIGNsZWFuLCBtb2R1bGFyIHN0cnVjdHVyZS4gIEkgY2FuIGFscmVhZHkgZW52aXNpb24gaG93IHRoaXMgZGVzaWduIGFsbG93cyBmb3IgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBjb3JlIHZlcmlmaWNhdGlvbiBsb2dpYyAoYGJwZl9jaGVja2ApIGFuZCB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgc3BlY2lhbGl6ZWQgdGFza3MgbGlrZSBpbnN0cnVjdGlvbi1sZXZlbCBjaGVja3MgKGBjaGVja19hdG9taWNgKS4gVGhpcyBzZXBhcmF0aW9uIGlzIHNvbWV0aGluZyBJIGRlZmluaXRlbHkgYXBwcmVjaWF0ZSBpbiBhIHN5c3RlbSBhcyBjb21wbGV4IGFzIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgYnBmX2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTEyMT1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEzNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTEzNTppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEzNi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU0OD1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NDctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2NDg6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjQ5LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMTA0PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIyMC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDIyMTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIyMi1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkluaXRpYWwgSklUIEludmVzdGlnYXRpb24gRm9jdXMqKgoKUmlnaHQsIHNvIGBicGZfY2hlY2tgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbSBsaWtlIHByb21pc2luZyBlbnRyeSBwb2ludHMuIFRob3NlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgQlBGIEpJVCBjb21waWxhdGlvbi4gTGV0IG1lIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBzeW1ib2xzLiBIb2xkIG9uLi4uIEkmIzM5O20ganVzdCByZWNhbGxpbmcgdGhhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdmVyeSBsaWtlbHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLiBEYW1uIGl0LiBOZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHdvcmtpbmcgZnJvbSB0aGUgY29ycmVjdCBjb2RlIHBhdGggYW5kIGFyY2hpdGVjdHVyZS4gSG1tbSwgZ290dGEgYmUgYSBtb3JlIGdlbmVyaWMgSklUIGZ1bmN0aW9uIGJ1cmllZCBzb21ld2hlcmUuIFRpbWUgdG8gc2VlIGlmIEkgY2FuIGZpbmQgYSBoaWdoZXItbGV2ZWwgb3IgYXJjaGl0ZWN0dXJlLWFnbm9zdGljIEpJVCBjb21waWxlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhvc2UsIG9yIGlzIGF0IGxlYXN0IGEgY2VudHJhbCBwb2ludCB0byBzdGFydCBmcm9tLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjYzOS1cdGlmICghYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSlcbmtlcm5lbC9icGYvY29yZS5jOjI2NDA6XHRcdHJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQxLVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2NjEtXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjYyOlx0cHJvZyA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcbmtlcm5lbC9icGYvY29yZS5jLTI2NjMtXHRpZiAocHJvZy1cdTAwM2VqaXRlZCkge1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjY5NS1cdCAqIGJsaW5kaW5nIGlzIGFjdGl2ZS4gSG93ZXZlciwgaW4gY2FzZSBvZiBlcnJvciBkdXJpbmdcbmtlcm5lbC9icGYvY29yZS5jOjI2OTY6XHQgKiBibGluZGluZywgYnBmX2ludF9qaXRfY29tcGlsZSgpIG11c3QgYWx3YXlzIHJldHVybiBhXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjk3LVx0ICogdmFsaWQgcHJvZ3JhbSwgd2hpY2ggaW4gdGhpcyBjYXNlIHdvdWxkIHNpbXBseSBub3Rcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMjE4PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGFpbF9jYWxsX3Byb3RvID0ge1xuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyMzAtLyogU3R1YiBmb3IgSklUcyB0aGF0IG9ubHkgc3VwcG9ydCBjQlBGLiBlQlBGIHByb2dyYW1zIGFyZSBpbnRlcnByZXRlZC5cbmtlcm5lbC9icGYvY29yZS5jOjMyMzE6ICogSXQgaXMgZW5jb3VyYWdlZCB0byBpbXBsZW1lbnQgYnBmX2ludF9qaXRfY29tcGlsZSgpIGluc3RlYWQsIHNvIHRoYXRcbmtlcm5lbC9icGYvY29yZS5jLTMyMzItICogZUJQRiBhbmQgaW1wbGljaXRseSBhbHNvIGNCUEYgY2FuIGdldCBKSVRlZCFcbmtlcm5lbC9icGYvY29yZS5jLTMyMzMtICovXG5rZXJuZWwvYnBmL2NvcmUuYzozMjM0OnN0cnVjdCBicGZfcHJvZyAqIF9fd2VhayBicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvY29yZS5jLTMyMzUte1xuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyMzktLyogU3R1YiBmb3IgSklUcyB0aGF0IHN1cHBvcnQgZUJQRi4gQWxsIGNCUEYgY29kZSBnZXRzIHRyYW5zZm9ybWVkIGludG9cbmtlcm5lbC9icGYvY29yZS5jOjMyNDA6ICogZUJQRiBieSB0aGUga2VybmVsIGFuZCBpcyBsYXRlciBjb21waWxlZCBieSBicGZfaW50X2ppdF9jb21waWxlKCkuXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjQxLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM3MgoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIGBicGZfaW50X2ppdF9jb21waWxlYCBpbiBga2VybmVsL2JwZi9jb3JlLmNgIGlzIGEgd2VhayBmdW5jdGlvbiBhbmQgaXMgbGlrZWx5IG92ZXJyaWRkZW4gYnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gVGhhdCBtYWtlcyBpdCBhIGRlY2VudCBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgaXQmIzM5O3MgYSBsaXR0bGUgZ2VuZXJpYywgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIuCgpGb3IgeDg2LCBpdCBjYWxscyBgZG9faml0YCwgd2hpY2ggbWlnaHQgYmUgbW9yZSB0YXJnZXRlZC4gQW5kLCBvZiBjb3Vyc2UsIGBicGZfY2hlY2tgIGlzIHRoZSB2ZXJpZmllciBlbnRyeSBwb2ludCwgc28gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlLiBUaGUgdmVyaWZpZXIgY2FsbHMgYGRvX2NoZWNrX21haW5gIHdoaWNoIHRoZW4gY2FsbHMgYGRvX2NoZWNrYCwgYnV0IGBicGZfY2hlY2tgIHNlZW1zIHNwZWNpZmljIGVub3VnaCBmb3Igbm93LiBJJiMzOTtsbCBzY2FuIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSB2ZXJpZmllciBmb3IgYWRkaXRpb25hbCB0YXJnZXRzLCBidXQgYGJwZl9jaGVja2AgaXMgcHJvYmFibHkgc3VmZmljaWVudC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gTm90aGluZyBzcGVjaWZpYyB0byBgQlBGX0xPQURfQUNRYCBhcyBhIGNvbmZpZ3VyYXRpb24sIGFzIGV4cGVjdGVkIOKAkyBpdCYjMzk7cyBqdXN0IGEgQlBGIGluc3RydWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBgQlBGX0xPQURfQUNRYCBpcyBoYW5kbGVkIGluIHRoZSB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycywgc3BlY2lmaWNhbGx5IGluIHJlZ2FyZHMgdG8gdW50cnVzdGVkIHBvaW50ZXJzIGFuZCBleGNlcHRpb24gaGFuZGxpbmcsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIHVuY292ZXIgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy4KCioqVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLioqCgpNeSBmb2N1cyBzeW1ib2xzIGFyZSBgYnBmX2NoZWNrYCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2KSB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBCUEZfTE9BRF9BQ1EgaW5zdHJ1Y3Rpb24sIGVuc3VyaW5nIGl0IGlzIHRyZWF0ZWQgYXMgYSBsb2FkIHJhdGhlciB0aGFuIGEgc3RvcmUgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZywgYW5kIHJlamVjdGluZyBpdCBvbiB1bnRydXN0ZWQgcG9pbnRlcnMgaW4gdGhlIHZlcmlmaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBCUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBieXBhc3NlcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2KSB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBCUEZfTE9BRF9BQ1EgaW5zdHJ1Y3Rpb24sIGVuc3VyaW5nIGl0IGlzIHRyZWF0ZWQgYXMgYSBsb2FkIHJhdGhlciB0aGFuIGEgc3RvcmUgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZywgYW5kIHJlamVjdGluZyBpdCBvbiB1bnRydXN0ZWQgcG9pbnRlcnMgaW4gdGhlIHZlcmlmaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBCUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBieXBhc3NlcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUyOjU1LjY1ODU3MDQ5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDk4OTY1NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YpIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIEJQRl9MT0FEX0FDUSBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgaXQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgcmF0aGVyIHRoYW4gYSBzdG9yZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcmVqZWN0aW5nIGl0IG9uIHVudHJ1c3RlZCBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1Mjo1NS42NTg1ODAxODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjYzMTE4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNzg2ODJjMzA4Y2IzZGZlMjAzZDY4ZDExYzE2NDgyYjA1NDY5MmIzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMDA6NTI6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IDRjZGM3ZGZiMDViYTkuLmQxNGQyOTdlYmI5NjcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0xMTc4LDcgKzExNzgsMTIgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXG4gXFx0ZXgtXFx1MDAzZWluc24gPSBpbnNfb2Zmc2V0O1xcbiBcXG4tXFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfTERYKVxcbitcXHQvKlxcbitcXHQgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnIGludG9cXG4rXFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcXG4rXFx0ICogaGVyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0xEWCBcXHUwMDI2XFx1MDAyNiAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcXG4gXFx0XFx0ZHN0X3JlZyA9IERPTlRfQ0xFQVI7XFxuIFxcbiBcXHRleC1cXHUwMDNlZml4dXAgPSBGSUVMRF9QUkVQKEJQRl9GSVhVUF9SRUdfTUFTSywgZHN0X3JlZyk7XFxuQEAgLTExOTMsNyArMTE5OCw3IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0ICogbWVtb3J5IGFjY2Vzcy4gUGFzcyB0aGUgcmVnIGhvbGRpbmcgdGhlIHVubW9kaWZpZWQgMzItYml0IGFkZHJlc3MgdG9cXG4gXFx0XFx0ICogZXhfaGFuZGxlcl9icGYuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9MRFgpXFxuK1xcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xEWCB8fCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKVxcbiBcXHRcXHRcXHRhcmVuYV9yZWcgPSBicGYyYTY0W2luc24tXFx1MDAzZXNyY19yZWddO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGFyZW5hX3JlZyA9IGJwZjJhNjRbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggOGZlODk2OWZiOGEwZi4uNmI5OTcyYjA3YzFiMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbkBAIC0xOTk0LDcgKzE5OTQsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0LyogcmV0IGNhbiBiZSAxIChza2lwLXpleHQpOyBleHRhYmxlIGVudHJ5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovXFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4gXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXFxuLVxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcXG4rXFx0XFx0XFx0XFx0YnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSA/IHJkIDogUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLFxcbiBcXHRcXHRcXHRcXHRjdHgpID86IHJldDtcXG4gXFxuIFxcdFxcdGlmIChyZXQpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IDAxZTdjZTU2OWMxZWQuLjg4ZWQ5NWIyZWFhNzIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTIzMzEsOCArMjMzMSwxMyBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0XFx0ICogQlBGX1BST0JFX0FUT01JQykgYmVmb3JlIGJlaW5nIHVzZWQgZm9yIHRoZSBtZW1vcnkgYWNjZXNzLiBQYXNzXFxuIFxcdFxcdFxcdFxcdCAqIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xcbiBcXHRcXHRcXHRcXHQgKiBleF9oYW5kbGVyX2JwZigpLlxcbitcXHRcXHRcXHRcXHQgKlxcbitcXHRcXHRcXHRcXHQgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnXFxuK1xcdFxcdFxcdFxcdCAqIGludG8gZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZVxcbitcXHRcXHRcXHRcXHQgKiB0cmVhdGVkIGFzIGEgc3RvcmUgaGVyZS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkge1xcbitcXHRcXHRcXHRcXHRpZiAoQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9MRFggfHxcXG4rXFx0XFx0XFx0XFx0ICAgIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpIHtcXG4gXFx0XFx0XFx0XFx0XFx0YXJlbmFfcmVnID0gcmVnMnB0X3JlZ3Nbc3JjX3JlZ107XFxuIFxcdFxcdFxcdFxcdFxcdGZpeHVwX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xcbiBcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLmQ3OWJmNzU1N2VmNjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMTEzMiwyMSArMTEzMiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHNldWRvX2Z1bmMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRyZXR1cm4gYnBmX2lzX2xkaW1tNjQoaW5zbikgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkM7XFxuIH1cXG4gXFxuLS8qIEdpdmVuIGEgQlBGX0FUT01JQyBpbnN0cnVjdGlvbiBAYXRvbWljX2luc24sIHJldHVybiB0cnVlIGlmIGl0IGlzIGFuXFxuLSAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi5cXG4tICovXFxuLXN0YXRpYyBpbmxpbmUgYm9vbFxcbi1icGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbilcXG4te1xcbi1cXHRzd2l0Y2ggKGF0b21pY19pbnNuLVxcdTAwM2VpbW0pIHtcXG4tXFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuLVxcdGNhc2UgQlBGX1NUT1JFX1JFTDpcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbi19XFxuLVxcbiBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHtcXG4gXFx0aW50ICgqdGVzdF9ydW4pKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbiBcXHRcXHRcXHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAzMmQ1Mjk3YzU1N2U1Li40MWIwMmQ1M2UyMjI4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuQEAgLTM4Myw2ICszODMsMzcgQEAgc3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4gLyogTGVnYWN5IGFsaWFzICovXFxuICNkZWZpbmUgQlBGX1NUWF9YQUREKFNJWkUsIERTVCwgU1JDLCBPRkYpIEJQRl9BVE9NSUNfT1AoU0laRSwgQlBGX0FERCwgRFNULCBTUkMsIE9GRilcXG4gXFxuKy8qXFxuKyAqIEdpdmVuIGEgQlBGX0FUT01JQyBpbnN0cnVjdGlvbiBAYXRvbWljX2luc24sIHJldHVybiB0cnVlIGlmIGl0IGlzIGFuXFxuKyAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbiticGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbilcXG4re1xcbitcXHRzd2l0Y2ggKGF0b21pY19pbnNuLVxcdTAwM2VpbW0pIHtcXG4rXFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuK1xcdGNhc2UgQlBGX1NUT1JFX1JFTDpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBBIGxvYWQtYWNxdWlyZSBpcyB0aGUgb25seSBCUEZfU1RYIGNsYXNzIGluc3RydWN0aW9uIHRoYXQgcmVhZHMgaW50b1xcbisgKiBkc3RfcmVnIGZyb20gc3JjX3JlZyArIG9mZjE2LCBpLmUuIGl0IGhhcyB0aGUgb3BlcmFuZCByb2xlcyBvZiBhIEJQRl9MRFguXFxuKyAqIFVubGlrZSBicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoKSwgQGluc24gaXMgbm90IGFzc3VtZWQgdG8gYmUgYSBCUEZfQVRPTUlDXFxuKyAqIGluc3RydWN0aW9uIGhlcmUsIHNvIHRoYXQgY2FsbGVycyB3aGljaCB3YWxrIGFsbCBpbnN0cnVjdGlvbiBjbGFzc2VzIGNhblxcbisgKiB1c2UgdGhpcyBkaXJlY3RseS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRyZXR1cm4gQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9TVFggXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIHx8XFxuK1xcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRO1xcbit9XFxuK1xcbiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyArIG9mZjE2KSA9IGltbTMyICovXFxuIFxcbiAjZGVmaW5lIEJQRl9TVF9NRU0oU0laRSwgRFNULCBPRkYsIElNTSlcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IGU2MjMzYzAwODFkMTAuLjY0OGM1Nzg0MTc4ZWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTQ5MjMsNiArNDkyMywzMCBAQCBzdGF0aWMgYm9vbCBpc19hcmVuYV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKVxcbiBcXHRyZXR1cm4gcmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19BUkVOQTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaXNfbG9hZF9hY3FfdW5zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBCUEZfTE9BRF9BQ1EgaXMgbm90IHJld3JpdHRlbiB0byBhIEJQRl9QUk9CRV9NRU0gbG9hZCBieSB0aGVcXG4rXFx0ICogdmVyaWZpZXIsIHVubGlrZSBhIHJlZ3VsYXIgQlBGX0xEWC4gVGhlIEpJVCB3b3VsZCBlbWl0IGEgcGxhaW4gbG9hZFxcbitcXHQgKiB3aXRoIG5vIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSwgc28gYSBmYXVsdCAoZS5nLiBOVUxMIGRlcmVmKSBjcmFzaGVzXFxuK1xcdCAqIHRoZSBrZXJuZWwgaW5zdGVhZCBvZiBiZWluZyBoYW5kbGVkLlxcbitcXHQgKlxcbitcXHQgKiBSZWplY3QgdGhlIHNvdXJjZSBwb2ludGVyIHR5cGVzIHRoYXQgYSBCUEZfTERYIHdvdWxkIGhhdmUgaGFkIHRoYXRcXG4rXFx0ICogZmF1bHQgcHJvdGVjdGlvbiBhcHBsaWVkIHRvLCBpLmUuIHRoZSBvbmVzIGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcygpXFxuK1xcdCAqIHR1cm5zIGludG8gQlBGX1BST0JFX01FTTogYSBiYXJlIFBUUl9UT19CVEZfSUQgYW5kIGFueSBQVFJfVU5UUlVTVEVEXFxuK1xcdCAqIHBvaW50ZXIgKHVudHJ1c3RlZCBidGYgaWRzLCB1bnRydXN0ZWQgTUVNX0FMTE9DLCByZG9ubHkgdW50cnVzdGVkXFxuK1xcdCAqIG1lbW9yeSkuIEEgUFRSX1RSVVNURUQgcG9pbnRlciBpcyBub3QgYW1vbmcgdGhlbSwgaXMgbm90IGNvbnZlcnRlZCxcXG4rXFx0ICogYW5kIHN0YXlzIGFsbG93ZWQuIFNhbWUgZm9yIHRoZSBvdGhlciBmbGFnZ2VkIFBUUl9UT19CVEZfSUQgdmFyaWFudHNcXG4rXFx0ICogKE1FTV9BTExPQywgTUVNX1JDVSwgLi4uKSwgaGVuY2UgdGhlIGV4YWN0IG1hdGNoIG9uIHRoZSBiYXNlIHR5cGUuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8XFxuK1xcdFxcdCh0eXBlX2ZsYWcocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2IFBUUl9VTlRSVVNURUQpKTtcXG4rfVxcbitcXG4gLyogUmV0dXJuIGZhbHNlIGlmIEByZWdubyBjb250YWlucyBhIHBvaW50ZXIgd2hvc2UgdHlwZSBpc24ndCBzdXBwb3J0ZWQgZm9yXFxuICAqIGF0b21pYyBpbnN0cnVjdGlvbiBAaW5zbi5cXG4gICovXFxuQEAgLTQ5MzksNyArNDk2Myw4IEBAIHN0YXRpYyBib29sIGF0b21pY19wdHJfdHlwZV9vayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIHJlZ25vKSlcXG4gXFx0XFx0cmV0dXJuIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKTtcXG4tXFxuK1xcdGlmIChpc19sb2FkX2FjcV91bnNhZmUoZW52LCByZWdubywgaW5zbikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcXG5pbmRleCBjM2NjZTVjMjkyYmRkLi4xNWRkM2FlMmE4NGI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcXG5AQCAtMTAzLDYgKzEwMyw4IEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKVxcbiBcXHRcXHR0ZXN0X2FkZHJlc3Moc2tlbC1cXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX3JlYWRfZmF1bHQsIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZhdWx0X2FkZHIpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwid3JpdGVfZmF1bHRcXFwiKSlcXG4gXFx0XFx0dGVzdF9hZGRyZXNzKHNrZWwtXFx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV93cml0ZV9mYXVsdCwgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmF1bHRfYWRkcik7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJsb2FkX2FjcXVpcmVfZmF1bHRcXFwiKSlcXG4rXFx0XFx0dGVzdF9hZGRyZXNzKHNrZWwtXFx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZhdWx0X2FkZHIpO1xcbiBcXG4gXFx0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xcbmluZGV4IDhkOGU1M2QzNzI2NmMuLmNmNTUzM2UxMWYzOWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXFxuQEAgLTE4NSw2ICsxODUsNTAgQEAgaW50IHN0cmVhbV9hcmVuYV9yZWFkX2ZhdWx0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX3N0ZGVycihcXFwiRVJST1I6IEFyZW5hIFJFQUQgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cXFwiKVxcbitfX3N0ZGVycihcXFwiQ1BVOiB7e1swLTldK319IFVJRDogMCBQSUQ6IHt7WzAtOV0rfX0gQ29tbToge3suKn19XFxcIilcXG4rX19zdGRlcnIoXFxcIkNhbGwgdHJhY2U6XFxcXG5cXFwiXFxuK1xcXCJ7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFxcXFxcXFwrMHhbMC05YS1mQS1GXSsvMHhbMC05YS1mQS1GXStcXFxcblxcXCJcXG4rXFxcInxbIFxcXFx0XStbXlxcXFxuXStcXFxcbikqfX1cXFwiKVxcbitpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBsb2FkX2FjcXVpcmVfaW5zbiA9IHtcXG4rXFx0XFx0LmNvZGVcXHQgPSAweGMzLFxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cXG4rXFx0XFx0LmRzdF9yZWcgPSAwLFxcdFxcdC8qIEJQRl9SRUdfMCAqL1xcbitcXHRcXHQuc3JjX3JlZyA9IDEsXFx0XFx0LyogQlBGX1JFR18xICovXFxuK1xcdFxcdC5vZmZcXHQgPSAweDdmZmYsXFxuK1xcdFxcdC5pbW1cXHQgPSAweDEwMCxcXHQvKiBCUEZfTE9BRF9BQ1EgKi9cXG4rXFx0fTtcXG4rXFx0c3RydWN0IGJwZl9hcmVuYSAqcHRyID0gKHZvaWQgKilcXHUwMDI2YXJlbmE7XFxuK1xcdHU2NCB1c2VyX3ZtX3N0YXJ0LCB2YWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcXHUwMDI2YXJlbmEgdG8gc3RydWN0IGJwZl9hcmVuYSAqXFxuK1xcdCAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuXFxuK1xcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcXG4rXFx0ICogcHJldmVudGluZyB0aGUgYm91bmRzIGFuYWx5c2lzLlxcbitcXHQgKi9cXG4rXFx0YmFycmllcl92YXIocHRyKTtcXG4rXFx0dXNlcl92bV9zdGFydCA9IHB0ci1cXHUwMDNldXNlcl92bV9zdGFydDtcXG4rXFx0ZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgKyAweDdmZmY7XFxuK1xcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcdFxcXCJyMSA9ICVbdXNlcl92bV9zdGFydF07XFxcIlxcbitcXHRcXHRcXFwicjAgPSAxO1xcXCJcXG4rXFx0XFx0XFxcIi44Ynl0ZSAlW2xvYWRfYWNxdWlyZV9pbnNuXTtcXFwiIC8qIHIwID0gbG9hZF9hY3F1aXJlKCh1MzIgKikocjEgKyAweDdmZmYpKSAqL1xcbitcXHRcXHRcXFwiJVt2YWxdID0gcjA7XFxcIlxcbitcXHRcXHQ6IFt2YWxdIFxcXCI9clxcXCIgKHZhbClcXG4rXFx0XFx0OiBbdXNlcl92bV9zdGFydF0gXFxcInJcXFwiICh1c2VyX3ZtX3N0YXJ0KSxcXG4rXFx0XFx0ICBfX2ltbV9pbnNuKGxvYWRfYWNxdWlyZV9pbnNuLCBsb2FkX2FjcXVpcmVfaW5zbilcXG4rXFx0XFx0OiBcXFwicjBcXFwiLCBcXFwicjFcXFwiXFxuK1xcdCk7XFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuIHN0YXRpYyBfX25vaW5saW5lIHZvaWQgc3VicHJvZyh2b2lkKVxcbiB7XFxuIFxcdGludCBfX2FyZW5hICphZGRyID0gKGludCBfX2FyZW5hICopMHhkZWFkYmVlZjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jXFxuaW5kZXggYWUxZGFiMWIwY2JiNy4uZDE3MDI2ZDc0ODBkOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9hZF9hY3F1aXJlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9hZF9hY3F1aXJlLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIi4uLy4uLy4uL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbiBcXG5AQCAtMjIxLDYgKzIyMiwzMyBAQCBfX25ha2VkIHZvaWQgbG9hZF9hY3F1aXJlX2Zyb21fc29ja19wb2ludGVyKHZvaWQpXFxuIFxcdDogX19jbG9iYmVyX2FsbCk7XFxuIH1cXG4gXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwibG9hZC1hY3F1aXJlIGZyb20gcmRvbmx5X3VudHJ1c3RlZF9tZW0gcG9pbnRlclxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiQlBGX0FUT01JQyBsb2FkcyBmcm9tIFJ7e1swLTldK319IHJkb25seV91bnRydXN0ZWRfbWVtIGlzIG5vdCBhbGxvd2VkXFxcIilcXG4raW50IGxvYWRfYWNxdWlyZV9mcm9tX3Jkb25seV91bnRydXN0ZWRfbWVtKHZvaWQgKmN0eClcXG4re1xcbitcXHRfX3U2NCB2YWwgPSAwO1xcbitcXHR2b2lkICpwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogYnBmX3Jkb25seV9jYXN0KHgsIDApIHlpZWxkcyBQVFJfVE9fTUVNIHwgTUVNX1JET05MWSB8IFBUUl9VTlRSVVNURUQuXFxuK1xcdCAqIEEgcmVndWxhciBCUEZfTERYIGZyb20gaXQgaXMgcmV3cml0dGVuIHRvIEJQRl9QUk9CRV9NRU0sIGJ1dCBhXFxuK1xcdCAqIGxvYWQtYWNxdWlyZSBpcyBub3QsIHNvIGl0IG11c3QgYmUgcmVqZWN0ZWQsIG90aGVyd2lzZSB0aGUgSklUIGVtaXRzXFxuK1xcdCAqIGEgcGxhaW4gbG9hZCB3aXRoIG5vIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSBhbmQgYSBmYXVsdCB3b3VsZCBjcmFzaFxcbitcXHQgKiB0aGUga2VybmVsLlxcbitcXHQgKi9cXG4rXFx0cCA9IGJwZl9yZG9ubHlfY2FzdChcXHUwMDI2dmFsLCAwKTtcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInIxID0gJVtwXTtcXFwiXFxuK1xcdFxcXCIuOGJ5dGUgJVtsb2FkX2FjcXVpcmVfaW5zbl07XFxcIiAvLyByMCA9IGxvYWRfYWNxdWlyZSgodTY0ICopKHIxICsgMCkpO1xcbitcXHQ6XFxuK1xcdDogW3BdIFxcXCJyXFxcIiAocCksXFxuK1xcdCAgX19pbW1faW5zbihsb2FkX2FjcXVpcmVfaW5zbixcXG4rXFx0XFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9EVywgQlBGX0xPQURfQUNRLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCkpXFxuK1xcdDogXFxcInIwXFxcIiwgXFxcInIxXFxcIik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcInNvY2tldFxcXCIpXFxuIF9fZGVzY3JpcHRpb24oXFxcImxvYWQtYWNxdWlyZSB3aXRoIGludmFsaWQgcmVnaXN0ZXIgUjE1XFxcIilcXG4gX19mYWlsdXJlIF9fZmFpbHVyZV91bnByaXYgX19tc2coXFxcIlIxNSBpcyBpbnZhbGlkXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTI6NTcuMDI1NTY1NTI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYxMzE5NTU2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdikgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgQlBGX0xPQURfQUNRIGluc3RydWN0aW9uLCBlbnN1cmluZyBpdCBpcyB0cmVhdGVkIGFzIGEgbG9hZCByYXRoZXIgdGhhbiBhIHN0b3JlIGZvciBleGNlcHRpb24gaGFuZGxpbmcsIGFuZCByZWplY3RpbmcgaXQgb24gdW50cnVzdGVkIHBvaW50ZXJzIGluIHRoZSB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU3ODY4MmMzMDhjYjNkZmUyMDNkNjhkMTFjMTY0ODJiMDU0NjkyYjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDAwOjUyOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggNGNkYzdkZmIwNWJhOS4uZDE0ZDI5N2ViYjk2NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTExNzgsNyArMTE3OCwxMiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXG4gXHRleC1cdTAwM2VpbnNuID0gaW5zX29mZnNldDtcbiBcbi1cdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYKVxuK1x0LypcbitcdCAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50b1xuK1x0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbitcdCAqIGhlcmUuXG4rXHQgKi9cbitcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNiAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcbiBcdFx0ZHN0X3JlZyA9IERPTlRfQ0xFQVI7XG4gXG4gXHRleC1cdTAwM2VmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTtcbkBAIC0xMTkzLDcgKzExOTgsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdCAqIG1lbW9yeSBhY2Nlc3MuIFBhc3MgdGhlIHJlZyBob2xkaW5nIHRoZSB1bm1vZGlmaWVkIDMyLWJpdCBhZGRyZXNzIHRvXG4gXHRcdCAqIGV4X2hhbmRsZXJfYnBmLlxuIFx0XHQgKi9cbi1cdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFgpXG4rXHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTERYIHx8IGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpXG4gXHRcdFx0YXJlbmFfcmVnID0gYnBmMmE2NFtpbnNuLVx1MDAzZXNyY19yZWddO1xuIFx0XHRlbHNlXG4gXHRcdFx0YXJlbmFfcmVnID0gYnBmMmE2NFtpbnNuLVx1MDAzZWRzdF9yZWddO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCA4ZmU4OTY5ZmI4YTBmLi42Yjk5NzJiMDdjMWIwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuQEAgLTE5OTQsNyArMTk5NCw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHQvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi9cbiBcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4gXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXG4tXHRcdFx0XHRpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbitcdFx0XHRcdGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbiBcdFx0XHRcdGN0eCkgPzogcmV0O1xuIFxuIFx0XHRpZiAocmV0KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggMDFlN2NlNTY5YzFlZC4uODhlZDk1YjJlYWE3MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMjMzMSw4ICsyMzMxLDEzIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHQgKiBCUEZfUFJPQkVfQVRPTUlDKSBiZWZvcmUgYmVpbmcgdXNlZCBmb3IgdGhlIG1lbW9yeSBhY2Nlc3MuIFBhc3NcbiBcdFx0XHRcdCAqIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xuIFx0XHRcdFx0ICogZXhfaGFuZGxlcl9icGYoKS5cbitcdFx0XHRcdCAqXG4rXHRcdFx0XHQgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnXG4rXHRcdFx0XHQgKiBpbnRvIGRzdF9yZWcgbGlrZSBhIEJQRl9MRFggZG9lcywgaGVuY2UgaXQgbXVzdCBub3QgYmVcbitcdFx0XHRcdCAqIHRyZWF0ZWQgYXMgYSBzdG9yZSBoZXJlLlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkge1xuK1x0XHRcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFggfHxcbitcdFx0XHRcdCAgICBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKSB7XG4gXHRcdFx0XHRcdGFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW3NyY19yZWddO1xuIFx0XHRcdFx0XHRmaXh1cF9yZWcgPSByZWcycHRfcmVnc1tkc3RfcmVnXTtcbiBcdFx0XHRcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLmQ3OWJmNzU1N2VmNjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTEzMiwyMSArMTEzMiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHNldWRvX2Z1bmMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0cmV0dXJuIGJwZl9pc19sZGltbTY0KGluc24pIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19GVU5DO1xuIH1cbiBcbi0vKiBHaXZlbiBhIEJQRl9BVE9NSUMgaW5zdHJ1Y3Rpb24gQGF0b21pY19pbnNuLCByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhblxuLSAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi1icGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbilcbi17XG4tXHRzd2l0Y2ggKGF0b21pY19pbnNuLVx1MDAzZWltbSkge1xuLVx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG4tXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLX1cbi1cbiBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHtcbiBcdGludCAoKnRlc3RfcnVuKShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbiBcdFx0XHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uNDFiMDJkNTNlMjIyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0zODMsNiArMzgzLDM3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gLyogTGVnYWN5IGFsaWFzICovXG4gI2RlZmluZSBCUEZfU1RYX1hBREQoU0laRSwgRFNULCBTUkMsIE9GRikgQlBGX0FUT01JQ19PUChTSVpFLCBCUEZfQURELCBEU1QsIFNSQywgT0ZGKVxuIFxuKy8qXG4rICogR2l2ZW4gYSBCUEZfQVRPTUlDIGluc3RydWN0aW9uIEBhdG9taWNfaW5zbiwgcmV0dXJuIHRydWUgaWYgaXQgaXMgYW5cbisgKiBhdG9taWMgbG9hZCBvciBzdG9yZSwgYW5kIGZhbHNlIGlmIGl0IGlzIGEgcmVhZC1tb2RpZnktd3JpdGUgaW5zdHJ1Y3Rpb24uXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4rYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqYXRvbWljX2luc24pXG4re1xuK1x0c3dpdGNoIChhdG9taWNfaW5zbi1cdTAwM2VpbW0pIHtcbitcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0Y2FzZSBCUEZfU1RPUkVfUkVMOlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4rLypcbisgKiBBIGxvYWQtYWNxdWlyZSBpcyB0aGUgb25seSBCUEZfU1RYIGNsYXNzIGluc3RydWN0aW9uIHRoYXQgcmVhZHMgaW50b1xuKyAqIGRzdF9yZWcgZnJvbSBzcmNfcmVnICsgb2ZmMTYsIGkuZS4gaXQgaGFzIHRoZSBvcGVyYW5kIHJvbGVzIG9mIGEgQlBGX0xEWC5cbisgKiBVbmxpa2UgYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKCksIEBpbnNuIGlzIG5vdCBhc3N1bWVkIHRvIGJlIGEgQlBGX0FUT01JQ1xuKyAqIGluc3RydWN0aW9uIGhlcmUsIHNvIHRoYXQgY2FsbGVycyB3aGljaCB3YWxrIGFsbCBpbnN0cnVjdGlvbiBjbGFzc2VzIGNhblxuKyAqIHVzZSB0aGlzIGRpcmVjdGx5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRyZXR1cm4gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1NUWCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIHx8XG4rXHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRO1xuK31cbitcbiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyArIG9mZjE2KSA9IGltbTMyICovXG4gXG4gI2RlZmluZSBCUEZfU1RfTUVNKFNJWkUsIERTVCwgT0ZGLCBJTU0pXHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTYyMzNjMDA4MWQxMC4uNjQ4YzU3ODQxNzhlYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDkyMyw2ICs0OTIzLDMwIEBAIHN0YXRpYyBib29sIGlzX2FyZW5hX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pXG4gXHRyZXR1cm4gcmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX0FSRU5BO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBpc19sb2FkX2FjcV91bnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTtcbitcbitcdC8qXG4rXHQgKiBBIEJQRl9MT0FEX0FDUSBpcyBub3QgcmV3cml0dGVuIHRvIGEgQlBGX1BST0JFX01FTSBsb2FkIGJ5IHRoZVxuK1x0ICogdmVyaWZpZXIsIHVubGlrZSBhIHJlZ3VsYXIgQlBGX0xEWC4gVGhlIEpJVCB3b3VsZCBlbWl0IGEgcGxhaW4gbG9hZFxuK1x0ICogd2l0aCBubyBleGNlcHRpb24gdGFibGUgZW50cnksIHNvIGEgZmF1bHQgKGUuZy4gTlVMTCBkZXJlZikgY3Jhc2hlc1xuK1x0ICogdGhlIGtlcm5lbCBpbnN0ZWFkIG9mIGJlaW5nIGhhbmRsZWQuXG4rXHQgKlxuK1x0ICogUmVqZWN0IHRoZSBzb3VyY2UgcG9pbnRlciB0eXBlcyB0aGF0IGEgQlBGX0xEWCB3b3VsZCBoYXZlIGhhZCB0aGF0XG4rXHQgKiBmYXVsdCBwcm90ZWN0aW9uIGFwcGxpZWQgdG8sIGkuZS4gdGhlIG9uZXMgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKClcbitcdCAqIHR1cm5zIGludG8gQlBGX1BST0JFX01FTTogYSBiYXJlIFBUUl9UT19CVEZfSUQgYW5kIGFueSBQVFJfVU5UUlVTVEVEXG4rXHQgKiBwb2ludGVyICh1bnRydXN0ZWQgYnRmIGlkcywgdW50cnVzdGVkIE1FTV9BTExPQywgcmRvbmx5IHVudHJ1c3RlZFxuK1x0ICogbWVtb3J5KS4gQSBQVFJfVFJVU1RFRCBwb2ludGVyIGlzIG5vdCBhbW9uZyB0aGVtLCBpcyBub3QgY29udmVydGVkLFxuK1x0ICogYW5kIHN0YXlzIGFsbG93ZWQuIFNhbWUgZm9yIHRoZSBvdGhlciBmbGFnZ2VkIFBUUl9UT19CVEZfSUQgdmFyaWFudHNcbitcdCAqIChNRU1fQUxMT0MsIE1FTV9SQ1UsIC4uLiksIGhlbmNlIHRoZSBleGFjdCBtYXRjaCBvbiB0aGUgYmFzZSB0eXBlLlxuK1x0ICovXG4rXHRyZXR1cm4gaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8XG4rXHRcdCh0eXBlX2ZsYWcocmVnLVx1MDAzZXR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSk7XG4rfVxuK1xuIC8qIFJldHVybiBmYWxzZSBpZiBAcmVnbm8gY29udGFpbnMgYSBwb2ludGVyIHdob3NlIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkIGZvclxuICAqIGF0b21pYyBpbnN0cnVjdGlvbiBAaW5zbi5cbiAgKi9cbkBAIC00OTM5LDcgKzQ5NjMsOCBAQCBzdGF0aWMgYm9vbCBhdG9taWNfcHRyX3R5cGVfb2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoaXNfYXJlbmFfcmVnKGVudiwgcmVnbm8pKVxuIFx0XHRyZXR1cm4gYnBmX2ppdF9zdXBwb3J0c19pbnNuKGluc24sIHRydWUpO1xuLVxuK1x0aWYgKGlzX2xvYWRfYWNxX3Vuc2FmZShlbnYsIHJlZ25vLCBpbnNuKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IGMzY2NlNWMyOTJiZGQuLjE1ZGQzYWUyYTg0YjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDMsNiArMTAzLDggQEAgdm9pZCB0ZXN0X3N0cmVhbV9hcmVuYV9mYXVsdF9hZGRyZXNzKHZvaWQpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9yZWFkX2ZhdWx0LCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmYXVsdF9hZGRyKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwid3JpdGVfZmF1bHRcIikpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV93cml0ZV9mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImxvYWRfYWNxdWlyZV9mYXVsdFwiKSlcbitcdFx0dGVzdF9hZGRyZXNzKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4gXG4gXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuaW5kZXggOGQ4ZTUzZDM3MjY2Yy4uY2Y1NTMzZTExZjM5YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5AQCAtMTg1LDYgKzE4NSw1MCBAQCBpbnQgc3RyZWFtX2FyZW5hX3JlYWRfZmF1bHQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19zdGRlcnIoXCJFUlJPUjogQXJlbmEgUkVBRCBhY2Nlc3MgYXQgdW5tYXBwZWQgYWRkcmVzcyAweHt7Lip9fVwiKVxuK19fc3RkZXJyKFwiQ1BVOiB7e1swLTldK319IFVJRDogMCBQSUQ6IHt7WzAtOV0rfX0gQ29tbToge3suKn19XCIpXG4rX19zdGRlcnIoXCJDYWxsIHRyYWNlOlxcblwiXG4rXCJ7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFxcXCsweFswLTlhLWZBLUZdKy8weFswLTlhLWZBLUZdK1xcblwiXG4rXCJ8WyBcXHRdK1teXFxuXStcXG4pKn19XCIpXG4raW50IHN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQodm9pZCAqY3R4KVxuK3tcbitcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gbG9hZF9hY3F1aXJlX2luc24gPSB7XG4rXHRcdC5jb2RlXHQgPSAweGMzLFx0LyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqL1xuK1x0XHQuZHN0X3JlZyA9IDAsXHRcdC8qIEJQRl9SRUdfMCAqL1xuK1x0XHQuc3JjX3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuK1x0XHQub2ZmXHQgPSAweDdmZmYsXG4rXHRcdC5pbW1cdCA9IDB4MTAwLFx0LyogQlBGX0xPQURfQUNRICovXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9hcmVuYSAqcHRyID0gKHZvaWQgKilcdTAwMjZhcmVuYTtcbitcdHU2NCB1c2VyX3ZtX3N0YXJ0LCB2YWw7XG4rXG4rXHQvKlxuK1x0ICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgXHUwMDI2YXJlbmEgdG8gc3RydWN0IGJwZl9hcmVuYSAqXG4rXHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxuK1x0ICogc3RydWN0IGJwZl9hcmVuYS4gYmFycmllcl92YXIoKSBtYWtlcyB0aGUgcG9pbnRlciBvcGFxdWUgdG8gR0NDLFxuK1x0ICogcHJldmVudGluZyB0aGUgYm91bmRzIGFuYWx5c2lzLlxuK1x0ICovXG4rXHRiYXJyaWVyX3ZhcihwdHIpO1xuK1x0dXNlcl92bV9zdGFydCA9IHB0ci1cdTAwM2V1c2VyX3ZtX3N0YXJ0O1xuK1x0ZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgKyAweDdmZmY7XG4rXHRicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpO1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFx0XCJyMSA9ICVbdXNlcl92bV9zdGFydF07XCJcbitcdFx0XCJyMCA9IDE7XCJcbitcdFx0XCIuOGJ5dGUgJVtsb2FkX2FjcXVpcmVfaW5zbl07XCIgLyogcjAgPSBsb2FkX2FjcXVpcmUoKHUzMiAqKShyMSArIDB4N2ZmZikpICovXG4rXHRcdFwiJVt2YWxdID0gcjA7XCJcbitcdFx0OiBbdmFsXSBcIj1yXCIgKHZhbClcbitcdFx0OiBbdXNlcl92bV9zdGFydF0gXCJyXCIgKHVzZXJfdm1fc3RhcnQpLFxuK1x0XHQgIF9faW1tX2luc24obG9hZF9hY3F1aXJlX2luc24sIGxvYWRfYWNxdWlyZV9pbnNuKVxuK1x0XHQ6IFwicjBcIiwgXCJyMVwiXG4rXHQpO1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4gc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBzdWJwcm9nKHZvaWQpXG4ge1xuIFx0aW50IF9fYXJlbmEgKmFkZHIgPSAoaW50IF9fYXJlbmEgKikweGRlYWRiZWVmO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuY1xuaW5kZXggYWUxZGFiMWIwY2JiNy4uZDE3MDI2ZDc0ODBkOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jXG5AQCAtMyw2ICszLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbkBAIC0yMjEsNiArMjIyLDMzIEBAIF9fbmFrZWQgdm9pZCBsb2FkX2FjcXVpcmVfZnJvbV9zb2NrX3BvaW50ZXIodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJsb2FkLWFjcXVpcmUgZnJvbSByZG9ubHlfdW50cnVzdGVkX21lbSBwb2ludGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiQlBGX0FUT01JQyBsb2FkcyBmcm9tIFJ7e1swLTldK319IHJkb25seV91bnRydXN0ZWRfbWVtIGlzIG5vdCBhbGxvd2VkXCIpXG4raW50IGxvYWRfYWNxdWlyZV9mcm9tX3Jkb25seV91bnRydXN0ZWRfbWVtKHZvaWQgKmN0eClcbit7XG4rXHRfX3U2NCB2YWwgPSAwO1xuK1x0dm9pZCAqcDtcbitcbitcdC8qXG4rXHQgKiBicGZfcmRvbmx5X2Nhc3QoeCwgMCkgeWllbGRzIFBUUl9UT19NRU0gfCBNRU1fUkRPTkxZIHwgUFRSX1VOVFJVU1RFRC5cbitcdCAqIEEgcmVndWxhciBCUEZfTERYIGZyb20gaXQgaXMgcmV3cml0dGVuIHRvIEJQRl9QUk9CRV9NRU0sIGJ1dCBhXG4rXHQgKiBsb2FkLWFjcXVpcmUgaXMgbm90LCBzbyBpdCBtdXN0IGJlIHJlamVjdGVkLCBvdGhlcndpc2UgdGhlIEpJVCBlbWl0c1xuK1x0ICogYSBwbGFpbiBsb2FkIHdpdGggbm8gZXhjZXB0aW9uIHRhYmxlIGVudHJ5IGFuZCBhIGZhdWx0IHdvdWxkIGNyYXNoXG4rXHQgKiB0aGUga2VybmVsLlxuK1x0ICovXG4rXHRwID0gYnBmX3Jkb25seV9jYXN0KFx1MDAyNnZhbCwgMCk7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMSA9ICVbcF07XCJcbitcdFwiLjhieXRlICVbbG9hZF9hY3F1aXJlX2luc25dO1wiIC8vIHIwID0gbG9hZF9hY3F1aXJlKCh1NjQgKikocjEgKyAwKSk7XG4rXHQ6XG4rXHQ6IFtwXSBcInJcIiAocCksXG4rXHQgIF9faW1tX2luc24obG9hZF9hY3F1aXJlX2luc24sXG4rXHRcdCAgICAgQlBGX0FUT01JQ19PUChCUEZfRFcsIEJQRl9MT0FEX0FDUSwgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApKVxuK1x0OiBcInIwXCIsIFwicjFcIik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwic29ja2V0XCIpXG4gX19kZXNjcmlwdGlvbihcImxvYWQtYWNxdWlyZSB3aXRoIGludmFsaWQgcmVnaXN0ZXIgUjE1XCIpXG4gX19mYWlsdXJlIF9fZmFpbHVyZV91bnByaXYgX19tc2coXCJSMTUgaXMgaW52YWxpZFwiKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTI6NTcuMDI1NTY2ODQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0ODEyMTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgY3J1Y2lhbCBmaXgsIGFkZHJlc3NpbmcgaG93IHRoZSBCUEYgc3Vic3lzdGVtIGhhbmRsZXMgYEJQRl9MT0FEX0FDUWAgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBhdG9taWMgbG9hZC1hY3F1aXJlIG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXJzIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzOiBhcm02NCwgcmlzY3YsIGFuZCB4ODYuIFRoaXMgc2NyZWFtcyBcImZ1enogbWUhXCIg4oCTIGl0J3MgcmlwZSBmb3IgZmluZGluZyBzdWJ0bGUsIGhhcmQtdG8tcHJlZGljdCBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgZW5zdXJpbmcgdGhhdCB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzYWZldHkgY2hlY2tzIHByb3Blcmx5IGFjY291bnQgZm9yIGBCUEZfTE9BRF9BQ1FgLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBuZXcgaGVscGVyLCBgYnBmX2F0b21pY19pc19sb2FkX2FjcSgpYCwgYW5kIGludGVncmF0ZWQgaXQgaW50byB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIGZvciBhcm02NCBhbmQgcmlzY3YsIGFuZCB0aGUgeDg2IGV4Y2VwdGlvbiBoYW5kbGluZyBsb2dpYy4gQ3J1Y2lhbGx5LCB0aGUgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agbm93IHJlamVjdHMgYEJQRl9MT0FEX0FDUWAgb24gdW50cnVzdGVkIHBvaW50ZXJzLCBzaW5jZSB0aGV5J3JlIG5vdCByZXdyaXR0ZW4gdG8gYEJQRl9QUk9CRV9NRU1gLCB3aGljaCBjb3VsZCBsZWFkIHRvIGtlcm5lbCBwYW5pY3MuIE1ha2VzIHNlbnNlIC0gcHJldmVudGluZyBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMgaXMgcGFyYW1vdW50LlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgdGhlIGZvbGxvd2luZzpcblxuKiAgIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIHdpdGhpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgIChzdGF0aWMpXG4qICAgYGJwZl9qaXRfZW1pdF9pbnNuYCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2BcbiogICBgZG9faml0YCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYFxuKiAgIGBpc19sb2FkX2FjcV91bnNhZmVgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpXG4qICAgYGF0b21pY19wdHJfdHlwZV9va2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcblxuSSBzaG91bGQgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHN0YXRpYy9ub24tc3RhdGljIHN0YXR1cyBvZiBhIGZldyBvZiB0aG9zZSBzeW1ib2xzLiBJJ20gc2xpZ2h0bHkgc3VycHJpc2VkIHRvIHNlZSB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgaW4gdGhlIHJpc2N2IGNvZGUgbWlnaHQgKm5vdCogYmUgc3RhdGljLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYW5kIGFsc28gaWYgYGRvX2ppdGAgaXMgaW5kZWVkIHN0YXRpYyBpbiB0aGUgeDg2IGNvZGUuIFRoZXNlIGRldGFpbHMgY291bGQgYmUgaW1wb3J0YW50IGZvciBicm9hZGVyIGltcGxpY2F0aW9ucy5cblxuQW5kIG9mIGNvdXJzZSwgYGJwZl9jaGVja2AgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllciwgc28gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgZnVuY3Rpb25zIGNhbGxlZCBmcm9tIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRob3JvdWdobHkuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIHRoYXQgbmVlZHMgcmlnb3JvdXMgYW5hbHlzaXMsIGVzcGVjaWFsbHkgZnJvbSBhIG1lbW9yeS1zYWZldHkgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzowMy42NzM2OTI2NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxODk3OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2MC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjE6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzYyLVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTM6MDMuNzM1ODg3MDU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NzI3NDUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgYnBmX2ppdF9lbWl0X2luc25gIEFjcm9zcyBBcmNoaXRlY3R1cmVzKipcblxuSG1tLCBgYnBmX2ppdF9lbWl0X2luc25gIGJlaW5nIG5vbi1zdGF0aWMgaW4gdGhlIFJJU0MtViBpbXBsZW1lbnRhdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgY3Jvc3MtYXJjaGl0ZWN0dXJlIGNvbnNpc3RlbmN5IGFuZCBwb3J0YWJpbGl0eSBvZiBvdXIgQlBGIEpJVCBpbmZyYXN0cnVjdHVyZS4gV2h5IGlzIGl0IG5vbi1zdGF0aWMgdGhlcmU/IFdoYXQgc3BlY2lmaWMgbmVlZCBkcm92ZSB0aGF0IGRlc2lnbiBjaG9pY2U/IElzIGl0IHNvbWV0aGluZyBpbmhlcmVudCB0byB0aGUgUklTQy1WIElTQSBvciB0aGUgd2F5IHRoZSBSSVNDLVYgSklUIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUga2VybmVsP1xuXG5UaGlzIGRldmlhdGlvbiBmcm9tIHRoZSB0eXBpY2FsIHN0YXRpYyBkZWNsYXJhdGlvbiByYWlzZXMgc2V2ZXJhbCBxdWVzdGlvbnMuIERvZXMgdGhpcyBpbXBseSBhIGRlc2lnbiBwYXR0ZXJuIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgaW4gZnV0dXJlIEpJVCBlZmZvcnRzPyBEb2VzIGl0IGV4cG9zZSBtb3JlIG9mIHRoZSBKSVQgaW50ZXJuYWxzLCBhbmQgZG9lcyB0aGlzIGhhdmUgc2VjdXJpdHkgaW1wbGljYXRpb25zP1xuXG5Ob3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBjaGVjayB0aGUgeDg2IGltcGxlbWVudGF0aW9uLiBJcyBpdCBzdGF0aWMgdGhlcmU/IElmIHNvLCB3aHkgdGhlIGRpZmZlcmVuY2U/IElzIGl0IGEgbWF0dGVyIG9mIGhpc3RvcmljYWwgcmVhc29ucywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIGRlc2lnbiBwaGlsb3NvcGh5PyBJcyB0aGVyZSBhIHN1YnRsZSwgdW5kZXJseWluZyBhcmNoaXRlY3R1cmFsIHJlYXNvbiB0aGF0IGluZmx1ZW5jZXMgdGhpcyBkZWNpc2lvbj9cblxuV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlzY3JlcGFuY3kgZnVsbHkuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCwgYnV0IGl0IGNvdWxkIGFsc28gcmV2ZWFsIGRlZXBlciBpbnNpZ2h0cyBpbnRvIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIG91ciBCUEYgSklUIGVuZ2luZSBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoaXMgdmFyaWFuY2UgbmVlZHMgc29tZSBpbnZlc3RpZ2F0aW9uIGFzIGl0IGNvdWxkIGxlYWQgdG8gcG90ZW50aWFsIHJlZmFjdG9yaW5nIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTM6MDcuMTkzMTY0MzA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzQ1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IGRvX2ppdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2Mzk9c3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2ODAtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE2ODE6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjgyLVxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjA3LjI1MTkxNjI5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzcyMzM0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkpJVCBDb21waWxhdGlvbiBGbG93OiBBIFF1aWNrIE1lbnRhbCBSdW4tVGhyb3VnaCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGRvX2ppdGAgaXMgZGVjbGFyZWQgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgc2lnbiBpdCdzIHBhcnQgb2YgYSBwcml2YXRlLCBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb25maXJtcyB3aGF0IEkgZXhwZWN0ZWQ7IGl0IGlzbid0IHNvbWV0aGluZyBleHBvc2VkIGRpcmVjdGx5IHRvIHRoZSBvdXRzaWRlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlICptYWluKiBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlIOKAkyB0aGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHRoZSBsaWtlbHkgZXh0ZXJuYWwgZmFjaW5nIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIGFuZCBjb29yZGluYXRpbmcgdGhlIEp1c3QtSW4tVGltZSBjb21waWxhdGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zLiBJJ2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBjaGVja2luZyBmb3IgcHJlcmVxdWlzaXRlcywgc2V0dGluZyB1cCB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIGFuZCB0aGVuLCBsaWtlbHksIGNhbGxpbmcgYGRvX2ppdGAgKG9yIHNvbWUgc2ltaWxhciBpbnRlcm5hbCBmdW5jdGlvbikgdG8gYWN0dWFsbHkgZG8gdGhlIGhhcmQgd29yayBvZiB0cmFuc2xhdGluZyB0aGUgQlBGIGJ5dGVjb2RlIHRvIG1hY2hpbmUgY29kZS4gR29vZCBkZXNpZ24sIGtlZXBpbmcgdGhhdCBjb3JlIGZ1bmN0aW9uYWxpdHkgbmljZWx5IGVuY2Fwc3VsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxMiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjEwLjUyOTE1MjY3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5MjA2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0cnVjdCBicGZfcHJvZyBcXFxcKmJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODQwPXN0cnVjdCB4NjRfaml0X2RhdGEge1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NTEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NTI6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg1My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjEwLjYzMDA3ODYyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzQ0NDA0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJ20gdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipDb25zaWRlcmluZyB0aGUgQXJjaGl0ZWN0dXJlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIHdlJ3ZlIGdvdCB0aGlzIHBpZWNlIG9mIHdvcmssIGFuZCBub3cgSSdtIHRoaW5raW5nLi4uIHdlIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGFybTY0IGFyY2hpdGVjdHVyZS4gSXQncyBhbG1vc3QgYXV0b21hdGljLCBnaXZlbiB0aGUgcHJldmFsZW5jZSBvZiBtb2JpbGUgZGV2aWNlcywgbW9kZXJuIHNlcnZlcnMsIGFuZCBldmVuIGRlc2t0b3BzIG5vdyBydW5uaW5nIG9uIEFSTS4gV2UgY2FuJ3QganVzdCBhc3N1bWUgYW55dGhpbmcgaXMgbGltaXRlZCB0byB4ODYgb3IgeDY0IGFueW1vcmUuIFNvLCB5ZWFoLCAqYW5kIGZvciBhcm02ND8qIEl0J3MgYWxtb3N0IGEgZ2l2ZW4gdGhhdCB3ZSBuZWVkIHRvIGFkZHJlc3MgdGhhdCwgdG9vLiBUaGF0J3MgdGhlIGltcG9ydGFudCBxdWVzdGlvbiB0byBiZSBhc2tpbmcgb3Vyc2VsdmVzLCB0byBlbnN1cmUgdGhpcyBkZXNpZ24gaXMgYWN0dWFsbHkgcm9idXN0LiBHb3R0YSBjb25zaWRlciBpdCByaWdodCBmcm9tIHRoZSBiZWdpbm5pbmcsIG90aGVyd2lzZSwgaXQnbGwgaGF1bnQgdXMgaW4gdGhlIGxvbmcgcnVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjQzLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzoxMy44MDQ1MjMzMDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDY0NjkwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RydWN0IGJwZl9wcm9nIFxcXFwqYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDkxPXN0cnVjdCBhcm02NF9qaXRfZGF0YSB7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDk3LVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIwOTg6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDk5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTM6MTQuMzI1MTc1MjQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDA1NDM2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgYGF0b21pY19wdHJfdHlwZV9va2AgQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIHZlcmlmaWVyIHdvcmtzLCBhbmQgaXQncyBjYWxsaW5nIGBhdG9taWNfcHRyX3R5cGVfb2tgIHdpdGhpbiBgY2hlY2tfYXRvbWljYC4gUmlnaHQsIHNvIGBjaGVja19hdG9taWNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgcmVzcG9uc2libGUgZm9yLCB3ZWxsLCBjaGVja2luZyBhdG9taWMgb3BlcmF0aW9ucywgYXMgdGhlIG5hbWUgaW1wbGllcy4gQW5kIHdpdGhpbiB0aGF0IGNoZWNrLCBpdCdzIHNwZWNpZmljYWxseSB1c2luZyBgYXRvbWljX3B0cl90eXBlX29rYC4gVGhhdCBtZWFucyB0aGlzIGBhdG9taWNfcHRyX3R5cGVfb2tgIGZ1bmN0aW9uICptdXN0KiBiZSBkb2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgcmVsYXRlZCB0byBwb2ludGVyIHR5cGVzIGluIHRoZSBjb250ZXh0IG9mIGF0b21pYyBvcGVyYXRpb25zLiBJdCdzIGxpa2VseSBlbnN1cmluZyB0aGF0IGEgcG9pbnRlciB0eXBlIHVzZWQgaW4gYW4gYXRvbWljIGNvbnRleHQgaXMgYWN0dWFsbHkgdmFsaWQgYW5kIHRoYXQgaXRzIHVzZSBpcyBzYWZlIGFuZCB3ZWxsLWRlZmluZWQsIGFuZCB0aGF0IHRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGFsbG93cyBmb3IgdGhlIHVzZSBvZiB0aGUgcGFydGljdWxhciBwb2ludGVyIHR5cGUuIFBlcmhhcHMgaXQgZW5zdXJlcyB0aGUgcG9pbnRlciBpcyBhcHByb3ByaWF0ZWx5IGFsaWduZWQsIG9yIHRoYXQgdGhlcmUgYXJlbid0IGFueSB1bmRlZmluZWQgYmVoYXZpb3Vycywgc3VjaCBhcyBjb25jdXJyZW50IHdyaXRlcyB0byBvdmVybGFwcGluZyByZWdpb25zIG9mIG1lbW9yeS4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCAqZnJvbSogYGNoZWNrX2F0b21pY2Agc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsLCBsb3ctbGV2ZWwgY29tcG9uZW50IG9mIHRoZSBvdmVyYWxsIGF0b21pYyBvcGVyYXRpb24gdmFsaWRhdGlvbiBwcm9jZXNzLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIHN0YXRpYyBhbmFseXNpcyBmb3IgdmVyaWZ5aW5nIHRoZSBjb3JyZWN0bmVzcyBvZiBhdG9taWMgb3BlcmF0aW9ucyBhdCB0aGUgdHlwZSBsZXZlbC4gVGhlIHZlcmlmaWVyIGlzIGNsZWFybHkgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uIHRvIGVuZm9yY2UgY2VydGFpbiBzYWZldHkgZ3VhcmFudGVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAxNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjE3Ljc2NTcyMTQzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwMTQ0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjUxMj1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU0OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU1MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU1MS1cXHRcXHRcXHQgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NDEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2NDI6c3RhdGljIGludCBjaGVja19hdG9taWNfbG9hZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjQzLVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2NjE6c3RhdGljIGludCBjaGVja19hdG9taWNfc3RvcmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY4MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzoxNy44MzQ3NDQyNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3MzczOTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gd2hhdCBJJ20gc2VlaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgVmVyaWZpY2F0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyB2ZXJpZmllciB3b3JrcywgYW5kIGl0J3MgY2xlYXIgdGhlIGRlc2lnbiBlbXBoYXNpemVzIGEgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4gVGhlIGBjaGVja19hdG9taWNgIGZ1bmN0aW9uLCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3MgYSBrZXkgZGV0YWlsOyBpdCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhbiBpbnRlcm5hbCwgaGVscGVyIGZ1bmN0aW9uLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSB2ZXJpZmljYXRpb24gbW9kdWxlIGl0c2VsZi4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgYSB2ZXJ5IHNwZWNpZmljLCBjb250YWluZWQgdGFzayB3aXRoaW4gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBwZXJoYXBzIGEgZm9jdXNlZCBhdG9taWMgaW5zdHJ1Y3Rpb24gY2hlY2ssIGdpdmVuIHRoZSBmdW5jdGlvbidzIG5hbWUuXG5cblRoZSByZWFsIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0aGF0IGtpY2tzIG9mZiB0aGUgZW50aXJlIHZlcmlmaWNhdGlvbiBwcm9jZWR1cmUsIGlzIGBicGZfY2hlY2tgLiBUaGF0J3Mgd2hlcmUgdGhlIHZlcmlmaWVyIHN0YXJ0cyBpdHMgd29yaywgSSBpbWFnaW5lLiBJdCBpcyBwcm9iYWJseSB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSByZXN0IG9mIHRoZSBlQlBGIHN5c3RlbSB0byB2YWxpZGF0ZSBhIHByb2dyYW0uIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBleHBlY3RhdGlvbjogYSBjbGVhbiwgbW9kdWxhciBzdHJ1Y3R1cmUuICBJIGNhbiBhbHJlYWR5IGVudmlzaW9uIGhvdyB0aGlzIGRlc2lnbiBhbGxvd3MgZm9yIGEgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgY29yZSB2ZXJpZmljYXRpb24gbG9naWMgKGBicGZfY2hlY2tgKSBhbmQgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHNwZWNpYWxpemVkIHRhc2tzIGxpa2UgaW5zdHJ1Y3Rpb24tbGV2ZWwgY2hlY2tzIChgY2hlY2tfYXRvbWljYCkuIFRoaXMgc2VwYXJhdGlvbiBpcyBzb21ldGhpbmcgSSBkZWZpbml0ZWx5IGFwcHJlY2lhdGUgaW4gYSBzeXN0ZW0gYXMgY29tcGxleCBhcyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzE5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTM6MjIuNTA4NDg1NzU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU2MzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGJwZl9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE5MTIxPXN0YXRpYyBib29sIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMzQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTM1OmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEzNi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTQ4PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjQ3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY0ODppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjQ5LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMTA0PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjIwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDIyMTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMjItXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjIyLjU3NjA1NTU1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU4MTUxMzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipJbml0aWFsIEpJVCBJbnZlc3RpZ2F0aW9uIEZvY3VzKipcblxuUmlnaHQsIHNvIGBicGZfY2hlY2tgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbSBsaWtlIHByb21pc2luZyBlbnRyeSBwb2ludHMuIFRob3NlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgQlBGIEpJVCBjb21waWxhdGlvbi4gTGV0IG1lIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBzeW1ib2xzLiBIb2xkIG9uLi4uIEknbSBqdXN0IHJlY2FsbGluZyB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB2ZXJ5IGxpa2VseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIERhbW4gaXQuIE5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gd29ya2luZyBmcm9tIHRoZSBjb3JyZWN0IGNvZGUgcGF0aCBhbmQgYXJjaGl0ZWN0dXJlLiBIbW1tLCBnb3R0YSBiZSBhIG1vcmUgZ2VuZXJpYyBKSVQgZnVuY3Rpb24gYnVyaWVkIHNvbWV3aGVyZS4gVGltZSB0byBzZWUgaWYgSSBjYW4gZmluZCBhIGhpZ2hlci1sZXZlbCBvciBhcmNoaXRlY3R1cmUtYWdub3N0aWMgSklUIGNvbXBpbGUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aG9zZSwgb3IgaXMgYXQgbGVhc3QgYSBjZW50cmFsIHBvaW50IHRvIHN0YXJ0IGZyb20uIExldCdzIHNlZSBpZiB0aGF0IGV4aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzoyNS44MzQyMDkyODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTcyNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM5LVxcdGlmICghYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSlcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjQwOlxcdFxcdHJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7XFxua2VybmVsL2JwZi9jb3JlLmMtMjY0MS1cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NjEtXFxua2VybmVsL2JwZi9jb3JlLmM6MjY2MjpcXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2NjMtXFx0aWYgKHByb2ctXFx1MDAzZWppdGVkKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjgwPXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjY5NS1cXHQgKiBibGluZGluZyBpcyBhY3RpdmUuIEhvd2V2ZXIsIGluIGNhc2Ugb2YgZXJyb3IgZHVyaW5nXFxua2VybmVsL2JwZi9jb3JlLmM6MjY5NjpcXHQgKiBibGluZGluZywgYnBmX2ludF9qaXRfY29tcGlsZSgpIG11c3QgYWx3YXlzIHJldHVybiBhXFxua2VybmVsL2JwZi9jb3JlLmMtMjY5Ny1cXHQgKiB2YWxpZCBwcm9ncmFtLCB3aGljaCBpbiB0aGlzIGNhc2Ugd291bGQgc2ltcGx5IG5vdFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzIxOD1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RhaWxfY2FsbF9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMzAtLyogU3R1YiBmb3IgSklUcyB0aGF0IG9ubHkgc3VwcG9ydCBjQlBGLiBlQlBGIHByb2dyYW1zIGFyZSBpbnRlcnByZXRlZC5cXG5rZXJuZWwvYnBmL2NvcmUuYzozMjMxOiAqIEl0IGlzIGVuY291cmFnZWQgdG8gaW1wbGVtZW50IGJwZl9pbnRfaml0X2NvbXBpbGUoKSBpbnN0ZWFkLCBzbyB0aGF0XFxua2VybmVsL2JwZi9jb3JlLmMtMzIzMi0gKiBlQlBGIGFuZCBpbXBsaWNpdGx5IGFsc28gY0JQRiBjYW4gZ2V0IEpJVGVkIVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMzMtICovXFxua2VybmVsL2JwZi9jb3JlLmM6MzIzNDpzdHJ1Y3QgYnBmX3Byb2cgKiBfX3dlYWsgYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9jb3JlLmMtMzIzNS17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjM5LS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBzdXBwb3J0IGVCUEYuIEFsbCBjQlBGIGNvZGUgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvXFxua2VybmVsL2JwZi9jb3JlLmM6MzI0MDogKiBlQlBGIGJ5IHRoZSBrZXJuZWwgYW5kIGlzIGxhdGVyIGNvbXBpbGVkIGJ5IGJwZl9pbnRfaml0X2NvbXBpbGUoKS5cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjQxLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzoyNS45Mjg3ODY0ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4ODkyOTM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIGBicGZfaW50X2ppdF9jb21waWxlYCBpbiBga2VybmVsL2JwZi9jb3JlLmNgIGlzIGEgd2VhayBmdW5jdGlvbiBhbmQgaXMgbGlrZWx5IG92ZXJyaWRkZW4gYnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gVGhhdCBtYWtlcyBpdCBhIGRlY2VudCBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgaXQncyBhIGxpdHRsZSBnZW5lcmljLCBzbyBJIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuRm9yIHg4NiwgaXQgY2FsbHMgYGRvX2ppdGAsIHdoaWNoIG1pZ2h0IGJlIG1vcmUgdGFyZ2V0ZWQuIEFuZCwgb2YgY291cnNlLCBgYnBmX2NoZWNrYCBpcyB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnQsIHNvIHRoYXQncyBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlLiBUaGUgdmVyaWZpZXIgY2FsbHMgYGRvX2NoZWNrX21haW5gIHdoaWNoIHRoZW4gY2FsbHMgYGRvX2NoZWNrYCwgYnV0IGBicGZfY2hlY2tgIHNlZW1zIHNwZWNpZmljIGVub3VnaCBmb3Igbm93LiBJJ2xsIHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHZlcmlmaWVyIGZvciBhZGRpdGlvbmFsIHRhcmdldHMsIGJ1dCBgYnBmX2NoZWNrYCBpcyBwcm9iYWJseSBzdWZmaWNpZW50LlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gTm90aGluZyBzcGVjaWZpYyB0byBgQlBGX0xPQURfQUNRYCBhcyBhIGNvbmZpZ3VyYXRpb24sIGFzIGV4cGVjdGVkIOKAkyBpdCdzIGp1c3QgYSBCUEYgaW5zdHJ1Y3Rpb24uIEdpdmVuIHRoYXQgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IGBCUEZfTE9BRF9BQ1FgIGlzIGhhbmRsZWQgaW4gdGhlIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXJzLCBzcGVjaWZpY2FsbHkgaW4gcmVnYXJkcyB0byB1bnRydXN0ZWQgcG9pbnRlcnMgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLlxuXG4qKlRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYC4qKlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSBgYnBmX2NoZWNrYCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBhbmQgSSdsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzcyLCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzozMy4wMTc3MTkyODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3OTY0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YpIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIEJQRl9MT0FEX0FDUSBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgaXQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgcmF0aGVyIHRoYW4gYSBzdG9yZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcmVqZWN0aW5nIGl0IG9uIHVudHJ1c3RlZCBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YpIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIEJQRl9MT0FEX0FDUSBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgaXQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgcmF0aGVyIHRoYW4gYSBzdG9yZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcmVqZWN0aW5nIGl0IG9uIHVudHJ1c3RlZCBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6ftf9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 00:11:58 +0000 UTC FinishedAt: 2026-08-07 00:53: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": "8c7f55d60aa3512fd3da7e9cf313723460e487b4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "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": "8c7f55d60aa3512fd3da7e9cf313723460e487b4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "a3ee9182-ce67-412b-81c3-86c5df191541" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "bpf_int_jit_compile" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdikgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgQlBGX0xPQURfQUNRIGluc3RydWN0aW9uLCBlbnN1cmluZyBpdCBpcyB0cmVhdGVkIGFzIGEgbG9hZCByYXRoZXIgdGhhbiBhIHN0b3JlIGZvciBleGNlcHRpb24gaGFuZGxpbmcsIGFuZCByZWplY3RpbmcgaXQgb24gdW50cnVzdGVkIHBvaW50ZXJzIGluIHRoZSB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNzg2ODJjMzA4Y2IzZGZlMjAzZDY4ZDExYzE2NDgyYjA1NDY5MmIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMDo1Mjo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCA0Y2RjN2RmYjA1YmE5Li5kMTRkMjk3ZWJiOTY3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTE3OCw3ICYjNDM7MTE3OCwxMiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXG4gXHRleC1cdTAwM2VpbnNuID0gaW5zX29mZnNldDtcbiBcbi1cdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBsb2FkLWFjcXVpcmUgaXMgb2YgQlBGX1NUWCBjbGFzcywgYnV0IHJlYWRzIGZyb20gc3JjX3JlZyBpbnRvXG4mIzQzO1x0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbiYjNDM7XHQgKiBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNiAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcbiBcdFx0ZHN0X3JlZyA9IERPTlRfQ0xFQVI7XG4gXG4gXHRleC1cdTAwM2VmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTtcbkBAIC0xMTkzLDcgJiM0MzsxMTk4LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgKiBtZW1vcnkgYWNjZXNzLiBQYXNzIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xuIFx0XHQgKiBleF9oYW5kbGVyX2JwZi5cbiBcdFx0ICovXG4tXHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTERYKVxuJiM0MztcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFggfHwgYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcbiBcdFx0XHRhcmVuYV9yZWcgPSBicGYyYTY0W2luc24tXHUwMDNlc3JjX3JlZ107XG4gXHRcdGVsc2VcbiBcdFx0XHRhcmVuYV9yZWcgPSBicGYyYTY0W2luc24tXHUwMDNlZHN0X3JlZ107XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IDhmZTg5NjlmYjhhMGYuLjZiOTk3MmIwN2MxYjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5AQCAtMTk5NCw3ICYjNDM7MTk5NCw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHQvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi9cbiBcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4gXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXG4tXHRcdFx0XHRpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbiYjNDM7XHRcdFx0XHRicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pID8gcmQgOiBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsXG4gXHRcdFx0XHRjdHgpID86IHJldDtcbiBcbiBcdFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IDAxZTdjZTU2OWMxZWQuLjg4ZWQ5NWIyZWFhNzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTIzMzEsOCAmIzQzOzIzMzEsMTMgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHRcdCAqIEJQRl9QUk9CRV9BVE9NSUMpIGJlZm9yZSBiZWluZyB1c2VkIGZvciB0aGUgbWVtb3J5IGFjY2Vzcy4gUGFzc1xuIFx0XHRcdFx0ICogdGhlIHJlZyBob2xkaW5nIHRoZSB1bm1vZGlmaWVkIDMyLWJpdCBhZGRyZXNzIHRvXG4gXHRcdFx0XHQgKiBleF9oYW5kbGVyX2JwZigpLlxuJiM0MztcdFx0XHRcdCAqXG4mIzQzO1x0XHRcdFx0ICogQSBsb2FkLWFjcXVpcmUgaXMgb2YgQlBGX1NUWCBjbGFzcywgYnV0IHJlYWRzIGZyb20gc3JjX3JlZ1xuJiM0MztcdFx0XHRcdCAqIGludG8gZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZVxuJiM0MztcdFx0XHRcdCAqIHRyZWF0ZWQgYXMgYSBzdG9yZSBoZXJlLlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkge1xuJiM0MztcdFx0XHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTERYIHx8XG4mIzQzO1x0XHRcdFx0ICAgIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpIHtcbiBcdFx0XHRcdFx0YXJlbmFfcmVnID0gcmVnMnB0X3JlZ3Nbc3JjX3JlZ107XG4gXHRcdFx0XHRcdGZpeHVwX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xuIFx0XHRcdFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggNzNiYWNmYzY0NDRkZi4uZDc5YmY3NTU3ZWY2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0xMTMyLDIxICYjNDM7MTEzMiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHNldWRvX2Z1bmMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0cmV0dXJuIGJwZl9pc19sZGltbTY0KGluc24pIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19GVU5DO1xuIH1cbiBcbi0vKiBHaXZlbiBhIEJQRl9BVE9NSUMgaW5zdHJ1Y3Rpb24gQGF0b21pY19pbnNuLCByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhblxuLSAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi1icGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbilcbi17XG4tXHRzd2l0Y2ggKGF0b21pY19pbnNuLVx1MDAzZWltbSkge1xuLVx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG4tXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLX1cbi1cbiBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHtcbiBcdGludCAoKnRlc3RfcnVuKShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbiBcdFx0XHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uNDFiMDJkNTNlMjIyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0zODMsNiAmIzQzOzM4MywzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19jYXN0X3VzZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIC8qIExlZ2FjeSBhbGlhcyAqL1xuICNkZWZpbmUgQlBGX1NUWF9YQUREKFNJWkUsIERTVCwgU1JDLCBPRkYpIEJQRl9BVE9NSUNfT1AoU0laRSwgQlBGX0FERCwgRFNULCBTUkMsIE9GRilcbiBcbiYjNDM7LypcbiYjNDM7ICogR2l2ZW4gYSBCUEZfQVRPTUlDIGluc3RydWN0aW9uIEBhdG9taWNfaW5zbiwgcmV0dXJuIHRydWUgaWYgaXQgaXMgYW5cbiYjNDM7ICogYXRvbWljIGxvYWQgb3Igc3RvcmUsIGFuZCBmYWxzZSBpZiBpdCBpcyBhIHJlYWQtbW9kaWZ5LXdyaXRlIGluc3RydWN0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO2JwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmF0b21pY19pbnNuKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChhdG9taWNfaW5zbi1cdTAwM2VpbW0pIHtcbiYjNDM7XHRjYXNlIEJQRl9MT0FEX0FDUTpcbiYjNDM7XHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSBsb2FkLWFjcXVpcmUgaXMgdGhlIG9ubHkgQlBGX1NUWCBjbGFzcyBpbnN0cnVjdGlvbiB0aGF0IHJlYWRzIGludG9cbiYjNDM7ICogZHN0X3JlZyBmcm9tIHNyY19yZWcgJiM0Mzsgb2ZmMTYsIGkuZS4gaXQgaGFzIHRoZSBvcGVyYW5kIHJvbGVzIG9mIGEgQlBGX0xEWC5cbiYjNDM7ICogVW5saWtlIGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZSgpLCBAaW5zbiBpcyBub3QgYXNzdW1lZCB0byBiZSBhIEJQRl9BVE9NSUNcbiYjNDM7ICogaW5zdHJ1Y3Rpb24gaGVyZSwgc28gdGhhdCBjYWxsZXJzIHdoaWNoIHdhbGsgYWxsIGluc3RydWN0aW9uIGNsYXNzZXMgY2FuXG4mIzQzOyAqIHVzZSB0aGlzIGRpcmVjdGx5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9TVFggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMgfHxcbiYjNDM7XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIGluc24tXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUTtcbiYjNDM7fVxuJiM0MztcbiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyAmIzQzOyBvZmYxNikgPSBpbW0zMiAqL1xuIFxuICNkZWZpbmUgQlBGX1NUX01FTShTSVpFLCBEU1QsIE9GRiwgSU1NKVx0XHRcdFx0XFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2MjMzYzAwODFkMTAuLjY0OGM1Nzg0MTc4ZWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTQ5MjMsNiAmIzQzOzQ5MjMsMzAgQEAgc3RhdGljIGJvb2wgaXNfYXJlbmFfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubylcbiBcdHJldHVybiByZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fQVJFTkE7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19sb2FkX2FjcV91bnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIEJQRl9MT0FEX0FDUSBpcyBub3QgcmV3cml0dGVuIHRvIGEgQlBGX1BST0JFX01FTSBsb2FkIGJ5IHRoZVxuJiM0MztcdCAqIHZlcmlmaWVyLCB1bmxpa2UgYSByZWd1bGFyIEJQRl9MRFguIFRoZSBKSVQgd291bGQgZW1pdCBhIHBsYWluIGxvYWRcbiYjNDM7XHQgKiB3aXRoIG5vIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSwgc28gYSBmYXVsdCAoZS5nLiBOVUxMIGRlcmVmKSBjcmFzaGVzXG4mIzQzO1x0ICogdGhlIGtlcm5lbCBpbnN0ZWFkIG9mIGJlaW5nIGhhbmRsZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSZWplY3QgdGhlIHNvdXJjZSBwb2ludGVyIHR5cGVzIHRoYXQgYSBCUEZfTERYIHdvdWxkIGhhdmUgaGFkIHRoYXRcbiYjNDM7XHQgKiBmYXVsdCBwcm90ZWN0aW9uIGFwcGxpZWQgdG8sIGkuZS4gdGhlIG9uZXMgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKClcbiYjNDM7XHQgKiB0dXJucyBpbnRvIEJQRl9QUk9CRV9NRU06IGEgYmFyZSBQVFJfVE9fQlRGX0lEIGFuZCBhbnkgUFRSX1VOVFJVU1RFRFxuJiM0MztcdCAqIHBvaW50ZXIgKHVudHJ1c3RlZCBidGYgaWRzLCB1bnRydXN0ZWQgTUVNX0FMTE9DLCByZG9ubHkgdW50cnVzdGVkXG4mIzQzO1x0ICogbWVtb3J5KS4gQSBQVFJfVFJVU1RFRCBwb2ludGVyIGlzIG5vdCBhbW9uZyB0aGVtLCBpcyBub3QgY29udmVydGVkLFxuJiM0MztcdCAqIGFuZCBzdGF5cyBhbGxvd2VkLiBTYW1lIGZvciB0aGUgb3RoZXIgZmxhZ2dlZCBQVFJfVE9fQlRGX0lEIHZhcmlhbnRzXG4mIzQzO1x0ICogKE1FTV9BTExPQywgTUVNX1JDVSwgLi4uKSwgaGVuY2UgdGhlIGV4YWN0IG1hdGNoIG9uIHRoZSBiYXNlIHR5cGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIGluc24tXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgKHJlZy1cdTAwM2V0eXBlID09IFBUUl9UT19CVEZfSUQgfHxcbiYjNDM7XHRcdCh0eXBlX2ZsYWcocmVnLVx1MDAzZXR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSk7XG4mIzQzO31cbiYjNDM7XG4gLyogUmV0dXJuIGZhbHNlIGlmIEByZWdubyBjb250YWlucyBhIHBvaW50ZXIgd2hvc2UgdHlwZSBpc24mIzM5O3Qgc3VwcG9ydGVkIGZvclxuICAqIGF0b21pYyBpbnN0cnVjdGlvbiBAaW5zbi5cbiAgKi9cbkBAIC00OTM5LDcgJiM0Mzs0OTYzLDggQEAgc3RhdGljIGJvb2wgYXRvbWljX3B0cl90eXBlX29rKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIHJlZ25vKSlcbiBcdFx0cmV0dXJuIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKTtcbi1cbiYjNDM7XHRpZiAoaXNfbG9hZF9hY3FfdW5zYWZlKGVudiwgcmVnbm8sIGluc24pKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IGMzY2NlNWMyOTJiZGQuLjE1ZGQzYWUyYTg0YjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDMsNiAmIzQzOzEwMyw4IEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKVxuIFx0XHR0ZXN0X2FkZHJlc3Moc2tlbC1cdTAwM2Vwcm9ncy5zdHJlYW1fYXJlbmFfcmVhZF9mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDt3cml0ZV9mYXVsdFwmIzM0OykpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV93cml0ZV9mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7bG9hZF9hY3F1aXJlX2ZhdWx0XCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWZhdWx0X2FkZHIpO1xuIFxuIFx0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbmluZGV4IDhkOGU1M2QzNzI2NmMuLmNmNTUzM2UxMWYzOWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuQEAgLTE4NSw2ICYjNDM7MTg1LDUwIEBAIGludCBzdHJlYW1fYXJlbmFfcmVhZF9mYXVsdCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7X19zdGRlcnIoXCYjMzQ7RVJST1I6IEFyZW5hIFJFQUQgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cJiMzNDspXG4mIzQzO19fc3RkZXJyKFwmIzM0O0NQVToge3tbMC05XSYjNDM7fX0gVUlEOiAwIFBJRDoge3tbMC05XSYjNDM7fX0gQ29tbToge3suKn19XCYjMzQ7KVxuJiM0MztfX3N0ZGVycihcJiMzNDtDYWxsIHRyYWNlOlxcblwmIzM0O1xuJiM0MztcJiMzNDt7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFxcXCYjNDM7MHhbMC05YS1mQS1GXSYjNDM7LzB4WzAtOWEtZkEtRl0mIzQzO1xcblwmIzM0O1xuJiM0MztcJiMzNDt8WyBcXHRdJiM0MztbXlxcbl0mIzQzO1xcbikqfX1cJiMzNDspXG4mIzQzO2ludCBzdHJlYW1fYXJlbmFfbG9hZF9hY3F1aXJlX2ZhdWx0KHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gbG9hZF9hY3F1aXJlX2luc24gPSB7XG4mIzQzO1x0XHQuY29kZVx0ID0gMHhjMyxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cbiYjNDM7XHRcdC5kc3RfcmVnID0gMCxcdFx0LyogQlBGX1JFR18wICovXG4mIzQzO1x0XHQuc3JjX3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuJiM0MztcdFx0Lm9mZlx0ID0gMHg3ZmZmLFxuJiM0MztcdFx0LmltbVx0ID0gMHgxMDAsXHQvKiBCUEZfTE9BRF9BQ1EgKi9cbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopXHUwMDI2YXJlbmE7XG4mIzQzO1x0dTY0IHVzZXJfdm1fc3RhcnQsIHZhbDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcdTAwMjZhcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICpcbiYjNDM7XHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxuJiM0MztcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcbiYjNDM7XHQgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YmFycmllcl92YXIocHRyKTtcbiYjNDM7XHR1c2VyX3ZtX3N0YXJ0ID0gcHRyLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG4mIzQzO1x0ZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgJiM0MzsgMHg3ZmZmO1xuJiM0MztcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcdFwmIzM0O3IxID0gJVt1c2VyX3ZtX3N0YXJ0XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IwID0gMTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0Oy44Ynl0ZSAlW2xvYWRfYWNxdWlyZV9pbnNuXTtcJiMzNDsgLyogcjAgPSBsb2FkX2FjcXVpcmUoKHUzMiAqKShyMSAmIzQzOyAweDdmZmYpKSAqL1xuJiM0MztcdFx0XCYjMzQ7JVt2YWxdID0gcjA7XCYjMzQ7XG4mIzQzO1x0XHQ6IFt2YWxdIFwmIzM0Oz1yXCYjMzQ7ICh2YWwpXG4mIzQzO1x0XHQ6IFt1c2VyX3ZtX3N0YXJ0XSBcJiMzNDtyXCYjMzQ7ICh1c2VyX3ZtX3N0YXJ0KSxcbiYjNDM7XHRcdCAgX19pbW1faW5zbihsb2FkX2FjcXVpcmVfaW5zbiwgbG9hZF9hY3F1aXJlX2luc24pXG4mIzQzO1x0XHQ6IFwmIzM0O3IwXCYjMzQ7LCBcJiMzNDtyMVwmIzM0O1xuJiM0MztcdCk7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19ub2lubGluZSB2b2lkIHN1YnByb2codm9pZClcbiB7XG4gXHRpbnQgX19hcmVuYSAqYWRkciA9IChpbnQgX19hcmVuYSAqKTB4ZGVhZGJlZWY7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jXG5pbmRleCBhZTFkYWIxYjBjYmI3Li5kMTcwMjZkNzQ4MGQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9hZF9hY3F1aXJlLmNcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfY29yZV9yZWFkLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YnBmX21pc2MuaFwmIzM0O1xuIFxuQEAgLTIyMSw2ICYjNDM7MjIyLDMzIEBAIF9fbmFrZWQgdm9pZCBsb2FkX2FjcXVpcmVfZnJvbV9zb2NrX3BvaW50ZXIodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O2xvYWQtYWNxdWlyZSBmcm9tIHJkb25seV91bnRydXN0ZWRfbWVtIHBvaW50ZXJcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0mIzQzO319IHJkb25seV91bnRydXN0ZWRfbWVtIGlzIG5vdCBhbGxvd2VkXCYjMzQ7KVxuJiM0MztpbnQgbG9hZF9hY3F1aXJlX2Zyb21fcmRvbmx5X3VudHJ1c3RlZF9tZW0odm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0X191NjQgdmFsID0gMDtcbiYjNDM7XHR2b2lkICpwO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGJwZl9yZG9ubHlfY2FzdCh4LCAwKSB5aWVsZHMgUFRSX1RPX01FTSB8IE1FTV9SRE9OTFkgfCBQVFJfVU5UUlVTVEVELlxuJiM0MztcdCAqIEEgcmVndWxhciBCUEZfTERYIGZyb20gaXQgaXMgcmV3cml0dGVuIHRvIEJQRl9QUk9CRV9NRU0sIGJ1dCBhXG4mIzQzO1x0ICogbG9hZC1hY3F1aXJlIGlzIG5vdCwgc28gaXQgbXVzdCBiZSByZWplY3RlZCwgb3RoZXJ3aXNlIHRoZSBKSVQgZW1pdHNcbiYjNDM7XHQgKiBhIHBsYWluIGxvYWQgd2l0aCBubyBleGNlcHRpb24gdGFibGUgZW50cnkgYW5kIGEgZmF1bHQgd291bGQgY3Jhc2hcbiYjNDM7XHQgKiB0aGUga2VybmVsLlxuJiM0MztcdCAqL1xuJiM0MztcdHAgPSBicGZfcmRvbmx5X2Nhc3QoXHUwMDI2dmFsLCAwKTtcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFwmIzM0O3IxID0gJVtwXTtcJiMzNDtcbiYjNDM7XHRcJiMzNDsuOGJ5dGUgJVtsb2FkX2FjcXVpcmVfaW5zbl07XCYjMzQ7IC8vIHIwID0gbG9hZF9hY3F1aXJlKCh1NjQgKikocjEgJiM0MzsgMCkpO1xuJiM0MztcdDpcbiYjNDM7XHQ6IFtwXSBcJiMzNDtyXCYjMzQ7IChwKSxcbiYjNDM7XHQgIF9faW1tX2luc24obG9hZF9hY3F1aXJlX2luc24sXG4mIzQzO1x0XHQgICAgIEJQRl9BVE9NSUNfT1AoQlBGX0RXLCBCUEZfTE9BRF9BQ1EsIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSlcbiYjNDM7XHQ6IFwmIzM0O3IwXCYjMzQ7LCBcJiMzNDtyMVwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiBfX2Rlc2NyaXB0aW9uKFwmIzM0O2xvYWQtYWNxdWlyZSB3aXRoIGludmFsaWQgcmVnaXN0ZXIgUjE1XCYjMzQ7KVxuIF9fZmFpbHVyZSBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnKFwmIzM0O1IxNSBpcyBpbnZhbGlkXCYjMzQ7KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YpIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIEJQRl9MT0FEX0FDUSBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgaXQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgcmF0aGVyIHRoYW4gYSBzdG9yZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcmVqZWN0aW5nIGl0IG9uIHVudHJ1c3RlZCBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTc4NjgyYzMwOGNiM2RmZTIwM2Q2OGQxMWMxNjQ4MmIwNTQ2OTJiMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDA6NTI6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IDRjZGM3ZGZiMDViYTkuLmQxNGQyOTdlYmI5NjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMTc4LDcgJiM0MzsxMTc4LDEyIEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwKIAogCWV4LSZndDtpbnNuID0gaW5zX29mZnNldDsKIAotCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX0xEWCkKJiM0MzsJLyoKJiM0MzsJICogQSBsb2FkLWFjcXVpcmUgaXMgb2YgQlBGX1NUWCBjbGFzcywgYnV0IHJlYWRzIGZyb20gc3JjX3JlZyBpbnRvCiYjNDM7CSAqIGRzdF9yZWcgbGlrZSBhIEJQRl9MRFggZG9lcywgaGVuY2UgaXQgbXVzdCBub3QgYmUgdHJlYXRlZCBhcyBhIHN0b3JlCiYjNDM7CSAqIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpICE9IEJQRl9MRFggJmFtcDsmYW1wOyAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSkKIAkJZHN0X3JlZyA9IERPTlRfQ0xFQVI7CiAKIAlleC0mZ3Q7Zml4dXAgPSBGSUVMRF9QUkVQKEJQRl9GSVhVUF9SRUdfTUFTSywgZHN0X3JlZyk7CkBAIC0xMTkzLDcgJiM0MzsxMTk4LDcgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQkgKiBtZW1vcnkgYWNjZXNzLiBQYXNzIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0bwogCQkgKiBleF9oYW5kbGVyX2JwZi4KIAkJICovCi0JCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xEWCkKJiM0MzsJCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xEWCB8fCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKQogCQkJYXJlbmFfcmVnID0gYnBmMmE2NFtpbnNuLSZndDtzcmNfcmVnXTsKIAkJZWxzZQogCQkJYXJlbmFfcmVnID0gYnBmMmE2NFtpbnNuLSZndDtkc3RfcmVnXTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IDhmZTg5NjlmYjhhMGYuLjZiOTk3MmIwN2MxYjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwpAQCAtMTk5NCw3ICYjNDM7MTk5NCw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCQkvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi8KIAkJaWYgKHJldCAmZ3Q7PSAwKQogCQkJcmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sCi0JCQkJaW5zbi0mZ3Q7aW1tID09IEJQRl9MT0FEX0FDUSA/IHJkIDogUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLAomIzQzOwkJCQlicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pID8gcmQgOiBSRUdfRE9OVF9DTEVBUl9NQVJLRVIsCiAJCQkJY3R4KSA/OiByZXQ7CiAKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCAwMWU3Y2U1NjljMWVkLi44OGVkOTViMmVhYTcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0yMzMxLDggJiM0MzsyMzMxLDEzIEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCSAqIEJQRl9QUk9CRV9BVE9NSUMpIGJlZm9yZSBiZWluZyB1c2VkIGZvciB0aGUgbWVtb3J5IGFjY2Vzcy4gUGFzcwogCQkJCSAqIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0bwogCQkJCSAqIGV4X2hhbmRsZXJfYnBmKCkuCiYjNDM7CQkJCSAqCiYjNDM7CQkJCSAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcKJiM0MzsJCQkJICogaW50byBkc3RfcmVnIGxpa2UgYSBCUEZfTERYIGRvZXMsIGhlbmNlIGl0IG11c3Qgbm90IGJlCiYjNDM7CQkJCSAqIHRyZWF0ZWQgYXMgYSBzdG9yZSBoZXJlLgogCQkJCSAqLwotCQkJCWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0xEWCkgewomIzQzOwkJCQlpZiAoQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9MRFggfHwKJiM0MzsJCQkJICAgIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpIHsKIAkJCQkJYXJlbmFfcmVnID0gcmVnMnB0X3JlZ3Nbc3JjX3JlZ107CiAJCQkJCWZpeHVwX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddOwogCQkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCA3M2JhY2ZjNjQ0NGRmLi5kNzliZjc1NTdlZjY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTExMzIsMjEgJiM0MzsxMTMyLDYgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wc2V1ZG9fZnVuYyhjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiAJcmV0dXJuIGJwZl9pc19sZGltbTY0KGluc24pICZhbXA7JmFtcDsgaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkM7CiB9CiAKLS8qIEdpdmVuIGEgQlBGX0FUT01JQyBpbnN0cnVjdGlvbiBAYXRvbWljX2luc24sIHJldHVybiB0cnVlIGlmIGl0IGlzIGFuCi0gKiBhdG9taWMgbG9hZCBvciBzdG9yZSwgYW5kIGZhbHNlIGlmIGl0IGlzIGEgcmVhZC1tb2RpZnktd3JpdGUgaW5zdHJ1Y3Rpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqYXRvbWljX2luc24pCi17Ci0Jc3dpdGNoIChhdG9taWNfaW5zbi0mZ3Q7aW1tKSB7Ci0JY2FzZSBCUEZfTE9BRF9BQ1E6Ci0JY2FzZSBCUEZfU1RPUkVfUkVMOgotCQlyZXR1cm4gdHJ1ZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCiBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHsKIAlpbnQgKCp0ZXN0X3J1bikoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsCiAJCQl1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDMyZDUyOTdjNTU3ZTUuLjQxYjAyZDUzZTIyMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMzgzLDYgJiM0MzszODMsMzcgQEAgc3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKIC8qIExlZ2FjeSBhbGlhcyAqLwogI2RlZmluZSBCUEZfU1RYX1hBREQoU0laRSwgRFNULCBTUkMsIE9GRikgQlBGX0FUT01JQ19PUChTSVpFLCBCUEZfQURELCBEU1QsIFNSQywgT0ZGKQogCiYjNDM7LyoKJiM0MzsgKiBHaXZlbiBhIEJQRl9BVE9NSUMgaW5zdHJ1Y3Rpb24gQGF0b21pY19pbnNuLCByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbgomIzQzOyAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wKJiM0MzticGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbikKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoYXRvbWljX2luc24tJmd0O2ltbSkgewomIzQzOwljYXNlIEJQRl9MT0FEX0FDUToKJiM0MzsJY2FzZSBCUEZfU1RPUkVfUkVMOgomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBIGxvYWQtYWNxdWlyZSBpcyB0aGUgb25seSBCUEZfU1RYIGNsYXNzIGluc3RydWN0aW9uIHRoYXQgcmVhZHMgaW50bwomIzQzOyAqIGRzdF9yZWcgZnJvbSBzcmNfcmVnICYjNDM7IG9mZjE2LCBpLmUuIGl0IGhhcyB0aGUgb3BlcmFuZCByb2xlcyBvZiBhIEJQRl9MRFguCiYjNDM7ICogVW5saWtlIGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZSgpLCBAaW5zbiBpcyBub3QgYXNzdW1lZCB0byBiZSBhIEJQRl9BVE9NSUMKJiM0MzsgKiBpbnN0cnVjdGlvbiBoZXJlLCBzbyB0aGF0IGNhbGxlcnMgd2hpY2ggd2FsayBhbGwgaW5zdHJ1Y3Rpb24gY2xhc3NlcyBjYW4KJiM0MzsgKiB1c2UgdGhpcyBkaXJlY3RseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYnBmX2F0b21pY19pc19sb2FkX2FjcShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiYjNDM7ewomIzQzOwlyZXR1cm4gQlBGX0NMQVNTKGluc24tJmd0O2NvZGUpID09IEJQRl9TVFggJmFtcDsmYW1wOwomIzQzOwkgICAgICAgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9BVE9NSUMgfHwKJiM0MzsJCUJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGluc24tJmd0O2ltbSA9PSBCUEZfTE9BRF9BQ1E7CiYjNDM7fQomIzQzOwogLyogTWVtb3J5IHN0b3JlLCAqKHVpbnQgKikgKGRzdF9yZWcgJiM0Mzsgb2ZmMTYpID0gaW1tMzIgKi8KIAogI2RlZmluZSBCUEZfU1RfTUVNKFNJWkUsIERTVCwgT0ZGLCBJTU0pCQkJCVwKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNjIzM2MwMDgxZDEwLi42NDhjNTc4NDE3OGVjIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC00OTIzLDYgJiM0Mzs0OTIzLDMwIEBAIHN0YXRpYyBib29sIGlzX2FyZW5hX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pCiAJcmV0dXJuIHJlZy0mZ3Q7dHlwZSA9PSBQVFJfVE9fQVJFTkE7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpc19sb2FkX2FjcV91bnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIEJQRl9MT0FEX0FDUSBpcyBub3QgcmV3cml0dGVuIHRvIGEgQlBGX1BST0JFX01FTSBsb2FkIGJ5IHRoZQomIzQzOwkgKiB2ZXJpZmllciwgdW5saWtlIGEgcmVndWxhciBCUEZfTERYLiBUaGUgSklUIHdvdWxkIGVtaXQgYSBwbGFpbiBsb2FkCiYjNDM7CSAqIHdpdGggbm8gZXhjZXB0aW9uIHRhYmxlIGVudHJ5LCBzbyBhIGZhdWx0IChlLmcuIE5VTEwgZGVyZWYpIGNyYXNoZXMKJiM0MzsJICogdGhlIGtlcm5lbCBpbnN0ZWFkIG9mIGJlaW5nIGhhbmRsZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFJlamVjdCB0aGUgc291cmNlIHBvaW50ZXIgdHlwZXMgdGhhdCBhIEJQRl9MRFggd291bGQgaGF2ZSBoYWQgdGhhdAomIzQzOwkgKiBmYXVsdCBwcm90ZWN0aW9uIGFwcGxpZWQgdG8sIGkuZS4gdGhlIG9uZXMgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKCkKJiM0MzsJICogdHVybnMgaW50byBCUEZfUFJPQkVfTUVNOiBhIGJhcmUgUFRSX1RPX0JURl9JRCBhbmQgYW55IFBUUl9VTlRSVVNURUQKJiM0MzsJICogcG9pbnRlciAodW50cnVzdGVkIGJ0ZiBpZHMsIHVudHJ1c3RlZCBNRU1fQUxMT0MsIHJkb25seSB1bnRydXN0ZWQKJiM0MzsJICogbWVtb3J5KS4gQSBQVFJfVFJVU1RFRCBwb2ludGVyIGlzIG5vdCBhbW9uZyB0aGVtLCBpcyBub3QgY29udmVydGVkLAomIzQzOwkgKiBhbmQgc3RheXMgYWxsb3dlZC4gU2FtZSBmb3IgdGhlIG90aGVyIGZsYWdnZWQgUFRSX1RPX0JURl9JRCB2YXJpYW50cwomIzQzOwkgKiAoTUVNX0FMTE9DLCBNRU1fUkNVLCAuLi4pLCBoZW5jZSB0aGUgZXhhY3QgbWF0Y2ggb24gdGhlIGJhc2UgdHlwZS4KJiM0MzsJICovCiYjNDM7CXJldHVybiBpbnNuLSZndDtpbW0gPT0gQlBGX0xPQURfQUNRICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIChyZWctJmd0O3R5cGUgPT0gUFRSX1RPX0JURl9JRCB8fAomIzQzOwkJKHR5cGVfZmxhZyhyZWctJmd0O3R5cGUpICZhbXA7IFBUUl9VTlRSVVNURUQpKTsKJiM0Mzt9CiYjNDM7CiAvKiBSZXR1cm4gZmFsc2UgaWYgQHJlZ25vIGNvbnRhaW5zIGEgcG9pbnRlciB3aG9zZSB0eXBlIGlzbiYjMzk7dCBzdXBwb3J0ZWQgZm9yCiAgKiBhdG9taWMgaW5zdHJ1Y3Rpb24gQGluc24uCiAgKi8KQEAgLTQ5MzksNyAmIzQzOzQ5NjMsOCBAQCBzdGF0aWMgYm9vbCBhdG9taWNfcHRyX3R5cGVfb2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLAogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGlzX2FyZW5hX3JlZyhlbnYsIHJlZ25vKSkKIAkJcmV0dXJuIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKTsKLQomIzQzOwlpZiAoaXNfbG9hZF9hY3FfdW5zYWZlKGVudiwgcmVnbm8sIGluc24pKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCmluZGV4IGMzY2NlNWMyOTJiZGQuLjE1ZGQzYWUyYTg0YjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jCkBAIC0xMDMsNiAmIzQzOzEwMyw4IEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKQogCQl0ZXN0X2FkZHJlc3Moc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX2FyZW5hX3JlYWRfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3dyaXRlX2ZhdWx0JiMzNDspKQogCQl0ZXN0X2FkZHJlc3Moc2tlbC0mZ3Q7cHJvZ3Muc3RyZWFtX2FyZW5hX3dyaXRlX2ZhdWx0LCAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7ZmF1bHRfYWRkcik7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7bG9hZF9hY3F1aXJlX2ZhdWx0JiMzNDspKQomIzQzOwkJdGVzdF9hZGRyZXNzKHNrZWwtJmd0O3Byb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsICZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtmYXVsdF9hZGRyKTsKIAogCXN0cmVhbV9fZGVzdHJveShza2VsKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYwppbmRleCA4ZDhlNTNkMzcyNjZjLi5jZjU1MzNlMTFmMzljIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RyZWFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jCkBAIC0xODUsNiAmIzQzOzE4NSw1MCBAQCBpbnQgc3RyZWFtX2FyZW5hX3JlYWRfZmF1bHQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX3N0ZGVycigmIzM0O0VSUk9SOiBBcmVuYSBSRUFEIGFjY2VzcyBhdCB1bm1hcHBlZCBhZGRyZXNzIDB4e3suKn19JiMzNDspCiYjNDM7X19zdGRlcnIoJiMzNDtDUFU6IHt7WzAtOV0mIzQzO319IFVJRDogMCBQSUQ6IHt7WzAtOV0mIzQzO319IENvbW06IHt7Lip9fSYjMzQ7KQomIzQzO19fc3RkZXJyKCYjMzQ7Q2FsbCB0cmFjZTpcbiYjMzQ7CiYjNDM7JiMzNDt7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFwmIzQzOzB4WzAtOWEtZkEtRl0mIzQzOy8weFswLTlhLWZBLUZdJiM0MztcbiYjMzQ7CiYjNDM7JiMzNDt8WyBcdF0mIzQzO1teXG5dJiM0MztcbikqfX0mIzM0OykKJiM0MztpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIGxvYWRfYWNxdWlyZV9pbnNuID0gewomIzQzOwkJLmNvZGUJID0gMHhjMywJLyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqLwomIzQzOwkJLmRzdF9yZWcgPSAwLAkJLyogQlBGX1JFR18wICovCiYjNDM7CQkuc3JjX3JlZyA9IDEsCQkvKiBCUEZfUkVHXzEgKi8KJiM0MzsJCS5vZmYJID0gMHg3ZmZmLAomIzQzOwkJLmltbQkgPSAweDEwMCwJLyogQlBGX0xPQURfQUNRICovCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfYXJlbmEgKnB0ciA9ICh2b2lkICopJmFtcDthcmVuYTsKJiM0MzsJdTY0IHVzZXJfdm1fc3RhcnQsIHZhbDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgJmFtcDthcmVuYSB0byBzdHJ1Y3QgYnBmX2FyZW5hICoKJiM0MzsJICogdHJpZ2dlcnMgYm91bmRzIGNoZWNraW5nIHNpbmNlIHRoZSBtYXAgZGVmaW5pdGlvbiBpcyBzbWFsbGVyIHRoYW4KJiM0MzsJICogc3RydWN0IGJwZl9hcmVuYS4gYmFycmllcl92YXIoKSBtYWtlcyB0aGUgcG9pbnRlciBvcGFxdWUgdG8gR0NDLAomIzQzOwkgKiBwcmV2ZW50aW5nIHRoZSBib3VuZHMgYW5hbHlzaXMuCiYjNDM7CSAqLwomIzQzOwliYXJyaWVyX3ZhcihwdHIpOwomIzQzOwl1c2VyX3ZtX3N0YXJ0ID0gcHRyLSZndDt1c2VyX3ZtX3N0YXJ0OwomIzQzOwlmYXVsdF9hZGRyID0gdXNlcl92bV9zdGFydCAmIzQzOyAweDdmZmY7CiYjNDM7CWJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkmIzM0O3IxID0gJVt1c2VyX3ZtX3N0YXJ0XTsmIzM0OwomIzQzOwkJJiMzNDtyMCA9IDE7JiMzNDsKJiM0MzsJCSYjMzQ7LjhieXRlICVbbG9hZF9hY3F1aXJlX2luc25dOyYjMzQ7IC8qIHIwID0gbG9hZF9hY3F1aXJlKCh1MzIgKikocjEgJiM0MzsgMHg3ZmZmKSkgKi8KJiM0MzsJCSYjMzQ7JVt2YWxdID0gcjA7JiMzNDsKJiM0MzsJCTogW3ZhbF0gJiMzNDs9ciYjMzQ7ICh2YWwpCiYjNDM7CQk6IFt1c2VyX3ZtX3N0YXJ0XSAmIzM0O3ImIzM0OyAodXNlcl92bV9zdGFydCksCiYjNDM7CQkgIF9faW1tX2luc24obG9hZF9hY3F1aXJlX2luc24sIGxvYWRfYWNxdWlyZV9pbnNuKQomIzQzOwkJOiAmIzM0O3IwJiMzNDssICYjMzQ7cjEmIzM0OwomIzQzOwkpOwomIzQzOwlyZXR1cm4gdmFsOwomIzQzO30KJiM0MzsKIHN0YXRpYyBfX25vaW5saW5lIHZvaWQgc3VicHJvZyh2b2lkKQogewogCWludCBfX2FyZW5hICphZGRyID0gKGludCBfX2FyZW5hICopMHhkZWFkYmVlZjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuYwppbmRleCBhZTFkYWIxYjBjYmI3Li5kMTcwMjZkNzQ4MGQ4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9hZF9hY3F1aXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jCkBAIC0zLDYgJiM0MzszLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwogI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2NvcmVfcmVhZC5oJmd0OwogI2luY2x1ZGUgJiMzNDsuLi8uLi8uLi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YnBmX21pc2MuaCYjMzQ7CiAKQEAgLTIyMSw2ICYjNDM7MjIyLDMzIEBAIF9fbmFrZWQgdm9pZCBsb2FkX2FjcXVpcmVfZnJvbV9zb2NrX3BvaW50ZXIodm9pZCkKIAk6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O2xvYWQtYWNxdWlyZSBmcm9tIHJkb25seV91bnRydXN0ZWRfbWVtIHBvaW50ZXImIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtCUEZfQVRPTUlDIGxvYWRzIGZyb20gUnt7WzAtOV0mIzQzO319IHJkb25seV91bnRydXN0ZWRfbWVtIGlzIG5vdCBhbGxvd2VkJiMzNDspCiYjNDM7aW50IGxvYWRfYWNxdWlyZV9mcm9tX3Jkb25seV91bnRydXN0ZWRfbWVtKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CV9fdTY0IHZhbCA9IDA7CiYjNDM7CXZvaWQgKnA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGJwZl9yZG9ubHlfY2FzdCh4LCAwKSB5aWVsZHMgUFRSX1RPX01FTSB8IE1FTV9SRE9OTFkgfCBQVFJfVU5UUlVTVEVELgomIzQzOwkgKiBBIHJlZ3VsYXIgQlBGX0xEWCBmcm9tIGl0IGlzIHJld3JpdHRlbiB0byBCUEZfUFJPQkVfTUVNLCBidXQgYQomIzQzOwkgKiBsb2FkLWFjcXVpcmUgaXMgbm90LCBzbyBpdCBtdXN0IGJlIHJlamVjdGVkLCBvdGhlcndpc2UgdGhlIEpJVCBlbWl0cwomIzQzOwkgKiBhIHBsYWluIGxvYWQgd2l0aCBubyBleGNlcHRpb24gdGFibGUgZW50cnkgYW5kIGEgZmF1bHQgd291bGQgY3Jhc2gKJiM0MzsJICogdGhlIGtlcm5lbC4KJiM0MzsJICovCiYjNDM7CXAgPSBicGZfcmRvbmx5X2Nhc3QoJmFtcDt2YWwsIDApOwomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IxID0gJVtwXTsmIzM0OwomIzQzOwkmIzM0Oy44Ynl0ZSAlW2xvYWRfYWNxdWlyZV9pbnNuXTsmIzM0OyAvLyByMCA9IGxvYWRfYWNxdWlyZSgodTY0ICopKHIxICYjNDM7IDApKTsKJiM0MzsJOgomIzQzOwk6IFtwXSAmIzM0O3ImIzM0OyAocCksCiYjNDM7CSAgX19pbW1faW5zbihsb2FkX2FjcXVpcmVfaW5zbiwKJiM0MzsJCSAgICAgQlBGX0FUT01JQ19PUChCUEZfRFcsIEJQRl9MT0FEX0FDUSwgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApKQomIzQzOwk6ICYjMzQ7cjAmIzM0OywgJiMzNDtyMSYjMzQ7KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7c29ja2V0JiMzNDspCiBfX2Rlc2NyaXB0aW9uKCYjMzQ7bG9hZC1hY3F1aXJlIHdpdGggaW52YWxpZCByZWdpc3RlciBSMTUmIzM0OykKIF9fZmFpbHVyZSBfX2ZhaWx1cmVfdW5wcml2IF9fbXNnKCYjMzQ7UjE1IGlzIGludmFsaWQmIzM0OykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxMQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGNydWNpYWwgZml4LCBhZGRyZXNzaW5nIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBoYW5kbGVzIGBCUEZfTE9BRF9BQ1FgIGluc3RydWN0aW9ucywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYXRvbWljIGxvYWQtYWNxdWlyZSBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlczogYXJtNjQsIHJpc2N2LCBhbmQgeDg2LiBUaGlzIHNjcmVhbXMgJiMzNDtmdXp6IG1lISYjMzQ7IOKAkyBpdCYjMzk7cyByaXBlIGZvciBmaW5kaW5nIHN1YnRsZSwgaGFyZC10by1wcmVkaWN0IGlzc3Vlcy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgZW5zdXJpbmcgdGhhdCB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzYWZldHkgY2hlY2tzIHByb3Blcmx5IGFjY291bnQgZm9yIGBCUEZfTE9BRF9BQ1FgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbmV3IGhlbHBlciwgYGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoKWAsIGFuZCBpbnRlZ3JhdGVkIGl0IGludG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVycyBmb3IgYXJtNjQgYW5kIHJpc2N2LCBhbmQgdGhlIHg4NiBleGNlcHRpb24gaGFuZGxpbmcgbG9naWMuIENydWNpYWxseSwgdGhlIHZlcmlmaWVyIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIG5vdyByZWplY3RzIGBCUEZfTE9BRF9BQ1FgIG9uIHVudHJ1c3RlZCBwb2ludGVycywgc2luY2UgdGhleSYjMzk7cmUgbm90IHJld3JpdHRlbiB0byBgQlBGX1BST0JFX01FTWAsIHdoaWNoIGNvdWxkIGxlYWQgdG8ga2VybmVsIHBhbmljcy4gTWFrZXMgc2Vuc2UgLSBwcmV2ZW50aW5nIG1lbW9yeSBhY2Nlc3MgdmlvbGF0aW9ucyBpcyBwYXJhbW91bnQuCgpOb3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgdGhlIGZvbGxvd2luZzoKCiogICBgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyYCB3aXRoaW4gYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCAoc3RhdGljKQoqICAgYGJwZl9qaXRfZW1pdF9pbnNuYCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AKKiAgIGBkb19qaXRgIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgCiogICBgaXNfbG9hZF9hY3FfdW5zYWZlYCBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCAoc3RhdGljKQoqICAgYGF0b21pY19wdHJfdHlwZV9va2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYykKCkkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBzdGF0aWMvbm9uLXN0YXRpYyBzdGF0dXMgb2YgYSBmZXcgb2YgdGhvc2Ugc3ltYm9scy4gSSYjMzk7bSBzbGlnaHRseSBzdXJwcmlzZWQgdG8gc2VlIHRoYXQgYGJwZl9qaXRfZW1pdF9pbnNuYCBpbiB0aGUgcmlzY3YgY29kZSBtaWdodCAqbm90KiBiZSBzdGF0aWMuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbmQgYWxzbyBpZiBgZG9faml0YCBpcyBpbmRlZWQgc3RhdGljIGluIHRoZSB4ODYgY29kZS4gVGhlc2UgZGV0YWlscyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGJyb2FkZXIgaW1wbGljYXRpb25zLgoKQW5kIG9mIGNvdXJzZSwgYGJwZl9jaGVja2AgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllciwgc28gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0aG9yb3VnaGx5LiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBwYXRjaCB0aGF0IG5lZWRzIHJpZ29yb3VzIGFuYWx5c2lzLCBlc3BlY2lhbGx5IGZyb20gYSBtZW1vcnktc2FmZXR5IHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgYnBmX2ppdF9lbWl0X2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjE6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNjItXHRcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGJwZl9qaXRfZW1pdF9pbnNuYCBBY3Jvc3MgQXJjaGl0ZWN0dXJlcyoqCgpIbW0sIGBicGZfaml0X2VtaXRfaW5zbmAgYmVpbmcgbm9uLXN0YXRpYyBpbiB0aGUgUklTQy1WIGltcGxlbWVudGF0aW9uIGlzIGludGVyZXN0aW5nLiBJdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBjcm9zcy1hcmNoaXRlY3R1cmUgY29uc2lzdGVuY3kgYW5kIHBvcnRhYmlsaXR5IG9mIG91ciBCUEYgSklUIGluZnJhc3RydWN0dXJlLiBXaHkgaXMgaXQgbm9uLXN0YXRpYyB0aGVyZT8gV2hhdCBzcGVjaWZpYyBuZWVkIGRyb3ZlIHRoYXQgZGVzaWduIGNob2ljZT8gSXMgaXQgc29tZXRoaW5nIGluaGVyZW50IHRvIHRoZSBSSVNDLVYgSVNBIG9yIHRoZSB3YXkgdGhlIFJJU0MtViBKSVQgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBrZXJuZWw/CgpUaGlzIGRldmlhdGlvbiBmcm9tIHRoZSB0eXBpY2FsIHN0YXRpYyBkZWNsYXJhdGlvbiByYWlzZXMgc2V2ZXJhbCBxdWVzdGlvbnMuIERvZXMgdGhpcyBpbXBseSBhIGRlc2lnbiBwYXR0ZXJuIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgaW4gZnV0dXJlIEpJVCBlZmZvcnRzPyBEb2VzIGl0IGV4cG9zZSBtb3JlIG9mIHRoZSBKSVQgaW50ZXJuYWxzLCBhbmQgZG9lcyB0aGlzIGhhdmUgc2VjdXJpdHkgaW1wbGljYXRpb25zPwoKTm93LCB0aGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gY2hlY2sgdGhlIHg4NiBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgc3RhdGljIHRoZXJlPyBJZiBzbywgd2h5IHRoZSBkaWZmZXJlbmNlPyBJcyBpdCBhIG1hdHRlciBvZiBoaXN0b3JpY2FsIHJlYXNvbnMsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBvciBkZXNpZ24gcGhpbG9zb3BoeT8gSXMgdGhlcmUgYSBzdWJ0bGUsIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJhbCByZWFzb24gdGhhdCBpbmZsdWVuY2VzIHRoaXMgZGVjaXNpb24/CgpXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkaXNjcmVwYW5jeSBmdWxseS4gSXQgY291bGQgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0LCBidXQgaXQgY291bGQgYWxzbyByZXZlYWwgZGVlcGVyIGluc2lnaHRzIGludG8gdGhlIHBlcmZvcm1hbmNlIGFuZCBtYWludGFpbmFiaWxpdHkgb2Ygb3VyIEJQRiBKSVQgZW5naW5lIGFjcm9zcyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gVGhpcyB2YXJpYW5jZSBuZWVkcyBzb21lIGludmVzdGlnYXRpb24gYXMgaXQgY291bGQgbGVhZCB0byBwb3RlbnRpYWwgcmVmYWN0b3JpbmcgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgZG9faml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjM5PXN0YXRpYyBpbnQgZW1pdF9zcGVjdHJlX2JoYl9iYXJyaWVyKHU4ICoqcHByb2csIHU4ICppcCxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTY4MC1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjgxOnN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjgyLVx0XHQgIHU4ICpyd19pbWFnZSwgaW50IG9sZHByb2dsZW4sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCBib29sIGptcF9wYWRkaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMTIKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSklUIENvbXBpbGF0aW9uIEZsb3c6IEEgUXVpY2sgTWVudGFsIFJ1bi1UaHJvdWdoKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBkb19qaXRgIGlzIGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHNpZ24gaXQmIzM5O3MgcGFydCBvZiBhIHByaXZhdGUsIGludGVybmFsIGltcGxlbWVudGF0aW9uLiBUaGlzIGNvbmZpcm1zIHdoYXQgSSBleHBlY3RlZDsgaXQgaXNuJiMzOTt0IHNvbWV0aGluZyBleHBvc2VkIGRpcmVjdGx5IHRvIHRoZSBvdXRzaWRlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlICptYWluKiBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlIOKAkyB0aGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHRoZSBsaWtlbHkgZXh0ZXJuYWwgZmFjaW5nIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIGFuZCBjb29yZGluYXRpbmcgdGhlIEp1c3QtSW4tVGltZSBjb21waWxhdGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zLiBJJiMzOTtkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhpbmdzIGxpa2UgY2hlY2tpbmcgZm9yIHByZXJlcXVpc2l0ZXMsIHNldHRpbmcgdXAgdGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50LCBhbmQgdGhlbiwgbGlrZWx5LCBjYWxsaW5nIGBkb19qaXRgIChvciBzb21lIHNpbWlsYXIgaW50ZXJuYWwgZnVuY3Rpb24pIHRvIGFjdHVhbGx5IGRvIHRoZSBoYXJkIHdvcmsgb2YgdHJhbnNsYXRpbmcgdGhlIEJQRiBieXRlY29kZSB0byBtYWNoaW5lIGNvZGUuIEdvb2QgZGVzaWduLCBrZWVwaW5nIHRoYXQgY29yZSBmdW5jdGlvbmFsaXR5IG5pY2VseSBlbmNhcHN1bGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0cnVjdCBicGZfcHJvZyBcXCpicGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODQwPXN0cnVjdCB4NjRfaml0X2RhdGEge1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODUxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NTI6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODUzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQzCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkNvbnNpZGVyaW5nIHRoZSBBcmNoaXRlY3R1cmUgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgdGhpcyBwaWVjZSBvZiB3b3JrLCBhbmQgbm93IEkmIzM5O20gdGhpbmtpbmcuLi4gd2UgbmVlZCB0byB0aGluayBhYm91dCB0aGUgYXJtNjQgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCBnaXZlbiB0aGUgcHJldmFsZW5jZSBvZiBtb2JpbGUgZGV2aWNlcywgbW9kZXJuIHNlcnZlcnMsIGFuZCBldmVuIGRlc2t0b3BzIG5vdyBydW5uaW5nIG9uIEFSTS4gV2UgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nIGlzIGxpbWl0ZWQgdG8geDg2IG9yIHg2NCBhbnltb3JlLiBTbywgeWVhaCwgKmFuZCBmb3IgYXJtNjQ/KiBJdCYjMzk7cyBhbG1vc3QgYSBnaXZlbiB0aGF0IHdlIG5lZWQgdG8gYWRkcmVzcyB0aGF0LCB0b28uIFRoYXQmIzM5O3MgdGhlIGltcG9ydGFudCBxdWVzdGlvbiB0byBiZSBhc2tpbmcgb3Vyc2VsdmVzLCB0byBlbnN1cmUgdGhpcyBkZXNpZ24gaXMgYWN0dWFsbHkgcm9idXN0LiBHb3R0YSBjb25zaWRlciBpdCByaWdodCBmcm9tIHRoZSBiZWdpbm5pbmcsIG90aGVyd2lzZSwgaXQmIzM5O2xsIGhhdW50IHVzIGluIHRoZSBsb25nIHJ1bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0cnVjdCBicGZfcHJvZyBcXCpicGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjA5MT1zdHJ1Y3QgYXJtNjRfaml0X2RhdGEge1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIwOTctXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMDk4OnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDk5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgYGF0b21pY19wdHJfdHlwZV9va2AgQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgdmVyaWZpZXIgd29ya3MsIGFuZCBpdCYjMzk7cyBjYWxsaW5nIGBhdG9taWNfcHRyX3R5cGVfb2tgIHdpdGhpbiBgY2hlY2tfYXRvbWljYC4gUmlnaHQsIHNvIGBjaGVja19hdG9taWNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgY2hlY2tpbmcgYXRvbWljIG9wZXJhdGlvbnMsIGFzIHRoZSBuYW1lIGltcGxpZXMuIEFuZCB3aXRoaW4gdGhhdCBjaGVjaywgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHVzaW5nIGBhdG9taWNfcHRyX3R5cGVfb2tgLiBUaGF0IG1lYW5zIHRoaXMgYGF0b21pY19wdHJfdHlwZV9va2AgZnVuY3Rpb24gKm11c3QqIGJlIGRvaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbCByZWxhdGVkIHRvIHBvaW50ZXIgdHlwZXMgaW4gdGhlIGNvbnRleHQgb2YgYXRvbWljIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGxpa2VseSBlbnN1cmluZyB0aGF0IGEgcG9pbnRlciB0eXBlIHVzZWQgaW4gYW4gYXRvbWljIGNvbnRleHQgaXMgYWN0dWFsbHkgdmFsaWQgYW5kIHRoYXQgaXRzIHVzZSBpcyBzYWZlIGFuZCB3ZWxsLWRlZmluZWQsIGFuZCB0aGF0IHRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGFsbG93cyBmb3IgdGhlIHVzZSBvZiB0aGUgcGFydGljdWxhciBwb2ludGVyIHR5cGUuIFBlcmhhcHMgaXQgZW5zdXJlcyB0aGUgcG9pbnRlciBpcyBhcHByb3ByaWF0ZWx5IGFsaWduZWQsIG9yIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5kZWZpbmVkIGJlaGF2aW91cnMsIHN1Y2ggYXMgY29uY3VycmVudCB3cml0ZXMgdG8gb3ZlcmxhcHBpbmcgcmVnaW9ucyBvZiBtZW1vcnkuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgY2FsbGVkICpmcm9tKiBgY2hlY2tfYXRvbWljYCBzdHJvbmdseSBzdWdnZXN0cyBpdCYjMzk7cyBhIGNyaXRpY2FsLCBsb3ctbGV2ZWwgY29tcG9uZW50IG9mIHRoZSBvdmVyYWxsIGF0b21pYyBvcGVyYXRpb24gdmFsaWRhdGlvbiBwcm9jZXNzLiBJdCYjMzk7cyBhIGtleSBwYXJ0IG9mIHRoZSBzdGF0aWMgYW5hbHlzaXMgZm9yIHZlcmlmeWluZyB0aGUgY29ycmVjdG5lc3Mgb2YgYXRvbWljIG9wZXJhdGlvbnMgYXQgdGhlIHR5cGUgbGV2ZWwuIFRoZSB2ZXJpZmllciBpcyBjbGVhcmx5IHJlbHlpbmcgb24gdGhpcyBmdW5jdGlvbiB0byBlbmZvcmNlIGNlcnRhaW4gc2FmZXR5IGd1YXJhbnRlZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgaW50IGNoZWNrX2F0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjUxMj1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1NDktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU1MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTUxLVx0XHRcdCAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NDEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY0MjpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19sb2FkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY0My1cdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NjYxOnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3N0b3JlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2Mi1cdFx0XHQgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY4MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIHdoYXQgSSYjMzk7bSBzZWVpbmc6CgoqKkFuYWx5emluZyB0aGUgVmVyaWZpY2F0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIHZlcmlmaWVyIHdvcmtzLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlIGRlc2lnbiBlbXBoYXNpemVzIGEgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4gVGhlIGBjaGVja19hdG9taWNgIGZ1bmN0aW9uLCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbDsgaXQgaW5kaWNhdGVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYW4gaW50ZXJuYWwsIGhlbHBlciBmdW5jdGlvbiwgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGV4cG9zZWQgb3IgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgdmVyaWZpY2F0aW9uIG1vZHVsZSBpdHNlbGYuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBhIHZlcnkgc3BlY2lmaWMsIGNvbnRhaW5lZCB0YXNrIHdpdGhpbiB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MsIHBlcmhhcHMgYSBmb2N1c2VkIGF0b21pYyBpbnN0cnVjdGlvbiBjaGVjaywgZ2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUuCgpUaGUgcmVhbCBlbnRyeSBwb2ludCwgdGhlIHByaW1hcnkgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIGVudGlyZSB2ZXJpZmljYXRpb24gcHJvY2VkdXJlLCBpcyBgYnBmX2NoZWNrYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgdmVyaWZpZXIgc3RhcnRzIGl0cyB3b3JrLCBJIGltYWdpbmUuIEl0IGlzIHByb2JhYmx5IHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGVCUEYgc3lzdGVtIHRvIHZhbGlkYXRlIGEgcHJvZ3JhbS4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGV4cGVjdGF0aW9uOiBhIGNsZWFuLCBtb2R1bGFyIHN0cnVjdHVyZS4gIEkgY2FuIGFscmVhZHkgZW52aXNpb24gaG93IHRoaXMgZGVzaWduIGFsbG93cyBmb3IgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBjb3JlIHZlcmlmaWNhdGlvbiBsb2dpYyAoYGJwZl9jaGVja2ApIGFuZCB0aGUgc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgc3BlY2lhbGl6ZWQgdGFza3MgbGlrZSBpbnN0cnVjdGlvbi1sZXZlbCBjaGVja3MgKGBjaGVja19hdG9taWNgKS4gVGhpcyBzZXBhcmF0aW9uIGlzIHNvbWV0aGluZyBJIGRlZmluaXRlbHkgYXBwcmVjaWF0ZSBpbiBhIHN5c3RlbSBhcyBjb21wbGV4IGFzIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgYnBmX2NoZWNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTEyMT1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEzNC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTEzNTppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEzNi1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU0OD1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2NDctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2NDg6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjQ5LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMTA0PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIyMC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDIyMTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDIyMi1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkluaXRpYWwgSklUIEludmVzdGlnYXRpb24gRm9jdXMqKgoKUmlnaHQsIHNvIGBicGZfY2hlY2tgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbSBsaWtlIHByb21pc2luZyBlbnRyeSBwb2ludHMuIFRob3NlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgQlBGIEpJVCBjb21waWxhdGlvbi4gTGV0IG1lIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBzeW1ib2xzLiBIb2xkIG9uLi4uIEkmIzM5O20ganVzdCByZWNhbGxpbmcgdGhhdCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgdmVyeSBsaWtlbHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLiBEYW1uIGl0LiBOZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIHdvcmtpbmcgZnJvbSB0aGUgY29ycmVjdCBjb2RlIHBhdGggYW5kIGFyY2hpdGVjdHVyZS4gSG1tbSwgZ290dGEgYmUgYSBtb3JlIGdlbmVyaWMgSklUIGZ1bmN0aW9uIGJ1cmllZCBzb21ld2hlcmUuIFRpbWUgdG8gc2VlIGlmIEkgY2FuIGZpbmQgYSBoaWdoZXItbGV2ZWwgb3IgYXJjaGl0ZWN0dXJlLWFnbm9zdGljIEpJVCBjb21waWxlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhvc2UsIG9yIGlzIGF0IGxlYXN0IGEgY2VudHJhbCBwb2ludCB0byBzdGFydCBmcm9tLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjYzOS1cdGlmICghYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSlcbmtlcm5lbC9icGYvY29yZS5jOjI2NDA6XHRcdHJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQxLVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2NjEtXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjYyOlx0cHJvZyA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcbmtlcm5lbC9icGYvY29yZS5jLTI2NjMtXHRpZiAocHJvZy1cdTAwM2VqaXRlZCkge1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2ODA9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjY5NS1cdCAqIGJsaW5kaW5nIGlzIGFjdGl2ZS4gSG93ZXZlciwgaW4gY2FzZSBvZiBlcnJvciBkdXJpbmdcbmtlcm5lbC9icGYvY29yZS5jOjI2OTY6XHQgKiBibGluZGluZywgYnBmX2ludF9qaXRfY29tcGlsZSgpIG11c3QgYWx3YXlzIHJldHVybiBhXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjk3LVx0ICogdmFsaWQgcHJvZ3JhbSwgd2hpY2ggaW4gdGhpcyBjYXNlIHdvdWxkIHNpbXBseSBub3Rcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMjE4PWNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGFpbF9jYWxsX3Byb3RvID0ge1xuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyMzAtLyogU3R1YiBmb3IgSklUcyB0aGF0IG9ubHkgc3VwcG9ydCBjQlBGLiBlQlBGIHByb2dyYW1zIGFyZSBpbnRlcnByZXRlZC5cbmtlcm5lbC9icGYvY29yZS5jOjMyMzE6ICogSXQgaXMgZW5jb3VyYWdlZCB0byBpbXBsZW1lbnQgYnBmX2ludF9qaXRfY29tcGlsZSgpIGluc3RlYWQsIHNvIHRoYXRcbmtlcm5lbC9icGYvY29yZS5jLTMyMzItICogZUJQRiBhbmQgaW1wbGljaXRseSBhbHNvIGNCUEYgY2FuIGdldCBKSVRlZCFcbmtlcm5lbC9icGYvY29yZS5jLTMyMzMtICovXG5rZXJuZWwvYnBmL2NvcmUuYzozMjM0OnN0cnVjdCBicGZfcHJvZyAqIF9fd2VhayBicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvY29yZS5jLTMyMzUte1xuLS1cbmtlcm5lbC9icGYvY29yZS5jLTMyMzktLyogU3R1YiBmb3IgSklUcyB0aGF0IHN1cHBvcnQgZUJQRi4gQWxsIGNCUEYgY29kZSBnZXRzIHRyYW5zZm9ybWVkIGludG9cbmtlcm5lbC9icGYvY29yZS5jOjMyNDA6ICogZUJQRiBieSB0aGUga2VybmVsIGFuZCBpcyBsYXRlciBjb21waWxlZCBieSBicGZfaW50X2ppdF9jb21waWxlKCkuXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjQxLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM3MgoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIGBicGZfaW50X2ppdF9jb21waWxlYCBpbiBga2VybmVsL2JwZi9jb3JlLmNgIGlzIGEgd2VhayBmdW5jdGlvbiBhbmQgaXMgbGlrZWx5IG92ZXJyaWRkZW4gYnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gVGhhdCBtYWtlcyBpdCBhIGRlY2VudCBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgaXQmIzM5O3MgYSBsaXR0bGUgZ2VuZXJpYywgc28gSSBuZWVkIHRvIGRpZyBkZWVwZXIuCgpGb3IgeDg2LCBpdCBjYWxscyBgZG9faml0YCwgd2hpY2ggbWlnaHQgYmUgbW9yZSB0YXJnZXRlZC4gQW5kLCBvZiBjb3Vyc2UsIGBicGZfY2hlY2tgIGlzIHRoZSB2ZXJpZmllciBlbnRyeSBwb2ludCwgc28gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlLiBUaGUgdmVyaWZpZXIgY2FsbHMgYGRvX2NoZWNrX21haW5gIHdoaWNoIHRoZW4gY2FsbHMgYGRvX2NoZWNrYCwgYnV0IGBicGZfY2hlY2tgIHNlZW1zIHNwZWNpZmljIGVub3VnaCBmb3Igbm93LiBJJiMzOTtsbCBzY2FuIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSB2ZXJpZmllciBmb3IgYWRkaXRpb25hbCB0YXJnZXRzLCBidXQgYGJwZl9jaGVja2AgaXMgcHJvYmFibHkgc3VmZmljaWVudC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gTm90aGluZyBzcGVjaWZpYyB0byBgQlBGX0xPQURfQUNRYCBhcyBhIGNvbmZpZ3VyYXRpb24sIGFzIGV4cGVjdGVkIOKAkyBpdCYjMzk7cyBqdXN0IGEgQlBGIGluc3RydWN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBjaGFuZ2VzIGhvdyBgQlBGX0xPQURfQUNRYCBpcyBoYW5kbGVkIGluIHRoZSB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycywgc3BlY2lmaWNhbGx5IGluIHJlZ2FyZHMgdG8gdW50cnVzdGVkIHBvaW50ZXJzIGFuZCBleGNlcHRpb24gaGFuZGxpbmcsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIHVuY292ZXIgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBieXBhc3Nlcy4KCioqVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLioqCgpNeSBmb2N1cyBzeW1ib2xzIGFyZSBgYnBmX2NoZWNrYCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2KSB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBCUEZfTE9BRF9BQ1EgaW5zdHJ1Y3Rpb24sIGVuc3VyaW5nIGl0IGlzIHRyZWF0ZWQgYXMgYSBsb2FkIHJhdGhlciB0aGFuIGEgc3RvcmUgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZywgYW5kIHJlamVjdGluZyBpdCBvbiB1bnRydXN0ZWQgcG9pbnRlcnMgaW4gdGhlIHZlcmlmaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBCUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBieXBhc3NlcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlcnMgKHg4NiwgYXJtNjQsIHJpc2N2KSB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBCUEZfTE9BRF9BQ1EgaW5zdHJ1Y3Rpb24sIGVuc3VyaW5nIGl0IGlzIHRyZWF0ZWQgYXMgYSBsb2FkIHJhdGhlciB0aGFuIGEgc3RvcmUgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZywgYW5kIHJlamVjdGluZyBpdCBvbiB1bnRydXN0ZWQgcG9pbnRlcnMgaW4gdGhlIHZlcmlmaWVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBCUEYgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBieXBhc3NlcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUyOjU1LjY1ODU3MDQ5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDk4OTY1NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YpIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIEJQRl9MT0FEX0FDUSBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgaXQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgcmF0aGVyIHRoYW4gYSBzdG9yZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcmVqZWN0aW5nIGl0IG9uIHVudHJ1c3RlZCBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1Mjo1NS42NTg1ODAxODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjYzMTE4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNzg2ODJjMzA4Y2IzZGZlMjAzZDY4ZDExYzE2NDgyYjA1NDY5MmIzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMDA6NTI6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IDRjZGM3ZGZiMDViYTkuLmQxNGQyOTdlYmI5NjcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0xMTc4LDcgKzExNzgsMTIgQEAgc3RhdGljIGludCBhZGRfZXhjZXB0aW9uX2hhbmRsZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXG4gXFx0ZXgtXFx1MDAzZWluc24gPSBpbnNfb2Zmc2V0O1xcbiBcXG4tXFx0aWYgKEJQRl9DTEFTUyhpbnNuLVxcdTAwM2Vjb2RlKSAhPSBCUEZfTERYKVxcbitcXHQvKlxcbitcXHQgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnIGludG9cXG4rXFx0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcXG4rXFx0ICogaGVyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX0xEWCBcXHUwMDI2XFx1MDAyNiAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcXG4gXFx0XFx0ZHN0X3JlZyA9IERPTlRfQ0xFQVI7XFxuIFxcbiBcXHRleC1cXHUwMDNlZml4dXAgPSBGSUVMRF9QUkVQKEJQRl9GSVhVUF9SRUdfTUFTSywgZHN0X3JlZyk7XFxuQEAgLTExOTMsNyArMTE5OCw3IEBAIHN0YXRpYyBpbnQgYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0ICogbWVtb3J5IGFjY2Vzcy4gUGFzcyB0aGUgcmVnIGhvbGRpbmcgdGhlIHVubW9kaWZpZWQgMzItYml0IGFkZHJlc3MgdG9cXG4gXFx0XFx0ICogZXhfaGFuZGxlcl9icGYuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9MRFgpXFxuK1xcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xEWCB8fCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKVxcbiBcXHRcXHRcXHRhcmVuYV9yZWcgPSBicGYyYTY0W2luc24tXFx1MDAzZXNyY19yZWddO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGFyZW5hX3JlZyA9IGJwZjJhNjRbaW5zbi1cXHUwMDNlZHN0X3JlZ107XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggOGZlODk2OWZiOGEwZi4uNmI5OTcyYjA3YzFiMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xcbkBAIC0xOTk0LDcgKzE5OTQsNyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcXG4gXFx0XFx0LyogcmV0IGNhbiBiZSAxIChza2lwLXpleHQpOyBleHRhYmxlIGVudHJ5IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkICovXFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4gXFx0XFx0XFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXFxuLVxcdFxcdFxcdFxcdGluc24tXFx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcXG4rXFx0XFx0XFx0XFx0YnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSA/IHJkIDogUkVHX0RPTlRfQ0xFQVJfTUFSS0VSLFxcbiBcXHRcXHRcXHRcXHRjdHgpID86IHJldDtcXG4gXFxuIFxcdFxcdGlmIChyZXQpXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IDAxZTdjZTU2OWMxZWQuLjg4ZWQ5NWIyZWFhNzIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTIzMzEsOCArMjMzMSwxMyBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0XFx0ICogQlBGX1BST0JFX0FUT01JQykgYmVmb3JlIGJlaW5nIHVzZWQgZm9yIHRoZSBtZW1vcnkgYWNjZXNzLiBQYXNzXFxuIFxcdFxcdFxcdFxcdCAqIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xcbiBcXHRcXHRcXHRcXHQgKiBleF9oYW5kbGVyX2JwZigpLlxcbitcXHRcXHRcXHRcXHQgKlxcbitcXHRcXHRcXHRcXHQgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnXFxuK1xcdFxcdFxcdFxcdCAqIGludG8gZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZVxcbitcXHRcXHRcXHRcXHQgKiB0cmVhdGVkIGFzIGEgc3RvcmUgaGVyZS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkge1xcbitcXHRcXHRcXHRcXHRpZiAoQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9MRFggfHxcXG4rXFx0XFx0XFx0XFx0ICAgIGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpIHtcXG4gXFx0XFx0XFx0XFx0XFx0YXJlbmFfcmVnID0gcmVnMnB0X3JlZ3Nbc3JjX3JlZ107XFxuIFxcdFxcdFxcdFxcdFxcdGZpeHVwX3JlZyA9IHJlZzJwdF9yZWdzW2RzdF9yZWddO1xcbiBcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLmQ3OWJmNzU1N2VmNjggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMTEzMiwyMSArMTEzMiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHNldWRvX2Z1bmMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiBcXHRyZXR1cm4gYnBmX2lzX2xkaW1tNjQoaW5zbikgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0ZVTkM7XFxuIH1cXG4gXFxuLS8qIEdpdmVuIGEgQlBGX0FUT01JQyBpbnN0cnVjdGlvbiBAYXRvbWljX2luc24sIHJldHVybiB0cnVlIGlmIGl0IGlzIGFuXFxuLSAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi5cXG4tICovXFxuLXN0YXRpYyBpbmxpbmUgYm9vbFxcbi1icGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbilcXG4te1xcbi1cXHRzd2l0Y2ggKGF0b21pY19pbnNuLVxcdTAwM2VpbW0pIHtcXG4tXFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuLVxcdGNhc2UgQlBGX1NUT1JFX1JFTDpcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbi19XFxuLVxcbiBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHtcXG4gXFx0aW50ICgqdGVzdF9ydW4pKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbiBcXHRcXHRcXHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAzMmQ1Mjk3YzU1N2U1Li40MWIwMmQ1M2UyMjI4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXFxuQEAgLTM4Myw2ICszODMsMzcgQEAgc3RhdGljIGlubGluZSBib29sIGluc25faXNfY2FzdF91c2VyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4gLyogTGVnYWN5IGFsaWFzICovXFxuICNkZWZpbmUgQlBGX1NUWF9YQUREKFNJWkUsIERTVCwgU1JDLCBPRkYpIEJQRl9BVE9NSUNfT1AoU0laRSwgQlBGX0FERCwgRFNULCBTUkMsIE9GRilcXG4gXFxuKy8qXFxuKyAqIEdpdmVuIGEgQlBGX0FUT01JQyBpbnN0cnVjdGlvbiBAYXRvbWljX2luc24sIHJldHVybiB0cnVlIGlmIGl0IGlzIGFuXFxuKyAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbFxcbiticGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbilcXG4re1xcbitcXHRzd2l0Y2ggKGF0b21pY19pbnNuLVxcdTAwM2VpbW0pIHtcXG4rXFx0Y2FzZSBCUEZfTE9BRF9BQ1E6XFxuK1xcdGNhc2UgQlBGX1NUT1JFX1JFTDpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBBIGxvYWQtYWNxdWlyZSBpcyB0aGUgb25seSBCUEZfU1RYIGNsYXNzIGluc3RydWN0aW9uIHRoYXQgcmVhZHMgaW50b1xcbisgKiBkc3RfcmVnIGZyb20gc3JjX3JlZyArIG9mZjE2LCBpLmUuIGl0IGhhcyB0aGUgb3BlcmFuZCByb2xlcyBvZiBhIEJQRl9MRFguXFxuKyAqIFVubGlrZSBicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoKSwgQGluc24gaXMgbm90IGFzc3VtZWQgdG8gYmUgYSBCUEZfQVRPTUlDXFxuKyAqIGluc3RydWN0aW9uIGhlcmUsIHNvIHRoYXQgY2FsbGVycyB3aGljaCB3YWxrIGFsbCBpbnN0cnVjdGlvbiBjbGFzc2VzIGNhblxcbisgKiB1c2UgdGhpcyBkaXJlY3RseS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRyZXR1cm4gQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9TVFggXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIHx8XFxuK1xcdFxcdEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9BVE9NSUMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBpbnNuLVxcdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRO1xcbit9XFxuK1xcbiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyArIG9mZjE2KSA9IGltbTMyICovXFxuIFxcbiAjZGVmaW5lIEJQRl9TVF9NRU0oU0laRSwgRFNULCBPRkYsIElNTSlcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IGU2MjMzYzAwODFkMTAuLjY0OGM1Nzg0MTc4ZWMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTQ5MjMsNiArNDkyMywzMCBAQCBzdGF0aWMgYm9vbCBpc19hcmVuYV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKVxcbiBcXHRyZXR1cm4gcmVnLVxcdTAwM2V0eXBlID09IFBUUl9UT19BUkVOQTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgaXNfbG9hZF9hY3FfdW5zYWZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubyxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnID0gcmVnX3N0YXRlKGVudiwgcmVnbm8pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQSBCUEZfTE9BRF9BQ1EgaXMgbm90IHJld3JpdHRlbiB0byBhIEJQRl9QUk9CRV9NRU0gbG9hZCBieSB0aGVcXG4rXFx0ICogdmVyaWZpZXIsIHVubGlrZSBhIHJlZ3VsYXIgQlBGX0xEWC4gVGhlIEpJVCB3b3VsZCBlbWl0IGEgcGxhaW4gbG9hZFxcbitcXHQgKiB3aXRoIG5vIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSwgc28gYSBmYXVsdCAoZS5nLiBOVUxMIGRlcmVmKSBjcmFzaGVzXFxuK1xcdCAqIHRoZSBrZXJuZWwgaW5zdGVhZCBvZiBiZWluZyBoYW5kbGVkLlxcbitcXHQgKlxcbitcXHQgKiBSZWplY3QgdGhlIHNvdXJjZSBwb2ludGVyIHR5cGVzIHRoYXQgYSBCUEZfTERYIHdvdWxkIGhhdmUgaGFkIHRoYXRcXG4rXFx0ICogZmF1bHQgcHJvdGVjdGlvbiBhcHBsaWVkIHRvLCBpLmUuIHRoZSBvbmVzIGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcygpXFxuK1xcdCAqIHR1cm5zIGludG8gQlBGX1BST0JFX01FTTogYSBiYXJlIFBUUl9UT19CVEZfSUQgYW5kIGFueSBQVFJfVU5UUlVTVEVEXFxuK1xcdCAqIHBvaW50ZXIgKHVudHJ1c3RlZCBidGYgaWRzLCB1bnRydXN0ZWQgTUVNX0FMTE9DLCByZG9ubHkgdW50cnVzdGVkXFxuK1xcdCAqIG1lbW9yeSkuIEEgUFRSX1RSVVNURUQgcG9pbnRlciBpcyBub3QgYW1vbmcgdGhlbSwgaXMgbm90IGNvbnZlcnRlZCxcXG4rXFx0ICogYW5kIHN0YXlzIGFsbG93ZWQuIFNhbWUgZm9yIHRoZSBvdGhlciBmbGFnZ2VkIFBUUl9UT19CVEZfSUQgdmFyaWFudHNcXG4rXFx0ICogKE1FTV9BTExPQywgTUVNX1JDVSwgLi4uKSwgaGVuY2UgdGhlIGV4YWN0IG1hdGNoIG9uIHRoZSBiYXNlIHR5cGUuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gaW5zbi1cXHUwMDNlaW1tID09IEJQRl9MT0FEX0FDUSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgKHJlZy1cXHUwMDNldHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8XFxuK1xcdFxcdCh0eXBlX2ZsYWcocmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2IFBUUl9VTlRSVVNURUQpKTtcXG4rfVxcbitcXG4gLyogUmV0dXJuIGZhbHNlIGlmIEByZWdubyBjb250YWlucyBhIHBvaW50ZXIgd2hvc2UgdHlwZSBpc24ndCBzdXBwb3J0ZWQgZm9yXFxuICAqIGF0b21pYyBpbnN0cnVjdGlvbiBAaW5zbi5cXG4gICovXFxuQEAgLTQ5MzksNyArNDk2Myw4IEBAIHN0YXRpYyBib29sIGF0b21pY19wdHJfdHlwZV9vayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIHJlZ25vKSlcXG4gXFx0XFx0cmV0dXJuIGJwZl9qaXRfc3VwcG9ydHNfaW5zbihpbnNuLCB0cnVlKTtcXG4tXFxuK1xcdGlmIChpc19sb2FkX2FjcV91bnNhZmUoZW52LCByZWdubywgaW5zbikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcXG5pbmRleCBjM2NjZTVjMjkyYmRkLi4xNWRkM2FlMmE4NGI3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcXG5AQCAtMTAzLDYgKzEwMyw4IEBAIHZvaWQgdGVzdF9zdHJlYW1fYXJlbmFfZmF1bHRfYWRkcmVzcyh2b2lkKVxcbiBcXHRcXHR0ZXN0X2FkZHJlc3Moc2tlbC1cXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX3JlYWRfZmF1bHQsIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZhdWx0X2FkZHIpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwid3JpdGVfZmF1bHRcXFwiKSlcXG4gXFx0XFx0dGVzdF9hZGRyZXNzKHNrZWwtXFx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV93cml0ZV9mYXVsdCwgXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZmF1bHRfYWRkcik7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJsb2FkX2FjcXVpcmVfZmF1bHRcXFwiKSlcXG4rXFx0XFx0dGVzdF9hZGRyZXNzKHNrZWwtXFx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQsIFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWZhdWx0X2FkZHIpO1xcbiBcXG4gXFx0c3RyZWFtX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xcbmluZGV4IDhkOGU1M2QzNzI2NmMuLmNmNTUzM2UxMWYzOWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXFxuQEAgLTE4NSw2ICsxODUsNTAgQEAgaW50IHN0cmVhbV9hcmVuYV9yZWFkX2ZhdWx0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX3N0ZGVycihcXFwiRVJST1I6IEFyZW5hIFJFQUQgYWNjZXNzIGF0IHVubWFwcGVkIGFkZHJlc3MgMHh7ey4qfX1cXFwiKVxcbitfX3N0ZGVycihcXFwiQ1BVOiB7e1swLTldK319IFVJRDogMCBQSUQ6IHt7WzAtOV0rfX0gQ29tbToge3suKn19XFxcIilcXG4rX19zdGRlcnIoXFxcIkNhbGwgdHJhY2U6XFxcXG5cXFwiXFxuK1xcXCJ7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFxcXFxcXFwrMHhbMC05YS1mQS1GXSsvMHhbMC05YS1mQS1GXStcXFxcblxcXCJcXG4rXFxcInxbIFxcXFx0XStbXlxcXFxuXStcXFxcbikqfX1cXFwiKVxcbitpbnQgc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBsb2FkX2FjcXVpcmVfaW5zbiA9IHtcXG4rXFx0XFx0LmNvZGVcXHQgPSAweGMzLFxcdC8qIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1cgKi9cXG4rXFx0XFx0LmRzdF9yZWcgPSAwLFxcdFxcdC8qIEJQRl9SRUdfMCAqL1xcbitcXHRcXHQuc3JjX3JlZyA9IDEsXFx0XFx0LyogQlBGX1JFR18xICovXFxuK1xcdFxcdC5vZmZcXHQgPSAweDdmZmYsXFxuK1xcdFxcdC5pbW1cXHQgPSAweDEwMCxcXHQvKiBCUEZfTE9BRF9BQ1EgKi9cXG4rXFx0fTtcXG4rXFx0c3RydWN0IGJwZl9hcmVuYSAqcHRyID0gKHZvaWQgKilcXHUwMDI2YXJlbmE7XFxuK1xcdHU2NCB1c2VyX3ZtX3N0YXJ0LCB2YWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcmV2ZW50IEdDQyBib3VuZHMgd2FybmluZzogY2FzdGluZyBcXHUwMDI2YXJlbmEgdG8gc3RydWN0IGJwZl9hcmVuYSAqXFxuK1xcdCAqIHRyaWdnZXJzIGJvdW5kcyBjaGVja2luZyBzaW5jZSB0aGUgbWFwIGRlZmluaXRpb24gaXMgc21hbGxlciB0aGFuXFxuK1xcdCAqIHN0cnVjdCBicGZfYXJlbmEuIGJhcnJpZXJfdmFyKCkgbWFrZXMgdGhlIHBvaW50ZXIgb3BhcXVlIHRvIEdDQyxcXG4rXFx0ICogcHJldmVudGluZyB0aGUgYm91bmRzIGFuYWx5c2lzLlxcbitcXHQgKi9cXG4rXFx0YmFycmllcl92YXIocHRyKTtcXG4rXFx0dXNlcl92bV9zdGFydCA9IHB0ci1cXHUwMDNldXNlcl92bV9zdGFydDtcXG4rXFx0ZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgKyAweDdmZmY7XFxuK1xcdGJwZl9hZGRyX3NwYWNlX2Nhc3QodXNlcl92bV9zdGFydCwgMCwgMSk7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcdFxcXCJyMSA9ICVbdXNlcl92bV9zdGFydF07XFxcIlxcbitcXHRcXHRcXFwicjAgPSAxO1xcXCJcXG4rXFx0XFx0XFxcIi44Ynl0ZSAlW2xvYWRfYWNxdWlyZV9pbnNuXTtcXFwiIC8qIHIwID0gbG9hZF9hY3F1aXJlKCh1MzIgKikocjEgKyAweDdmZmYpKSAqL1xcbitcXHRcXHRcXFwiJVt2YWxdID0gcjA7XFxcIlxcbitcXHRcXHQ6IFt2YWxdIFxcXCI9clxcXCIgKHZhbClcXG4rXFx0XFx0OiBbdXNlcl92bV9zdGFydF0gXFxcInJcXFwiICh1c2VyX3ZtX3N0YXJ0KSxcXG4rXFx0XFx0ICBfX2ltbV9pbnNuKGxvYWRfYWNxdWlyZV9pbnNuLCBsb2FkX2FjcXVpcmVfaW5zbilcXG4rXFx0XFx0OiBcXFwicjBcXFwiLCBcXFwicjFcXFwiXFxuK1xcdCk7XFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuIHN0YXRpYyBfX25vaW5saW5lIHZvaWQgc3VicHJvZyh2b2lkKVxcbiB7XFxuIFxcdGludCBfX2FyZW5hICphZGRyID0gKGludCBfX2FyZW5hICopMHhkZWFkYmVlZjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jXFxuaW5kZXggYWUxZGFiMWIwY2JiNy4uZDE3MDI2ZDc0ODBkOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9hZF9hY3F1aXJlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfbG9hZF9hY3F1aXJlLmNcXG5AQCAtMyw2ICszLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIi4uLy4uLy4uL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJicGZfbWlzYy5oXFxcIlxcbiBcXG5AQCAtMjIxLDYgKzIyMiwzMyBAQCBfX25ha2VkIHZvaWQgbG9hZF9hY3F1aXJlX2Zyb21fc29ja19wb2ludGVyKHZvaWQpXFxuIFxcdDogX19jbG9iYmVyX2FsbCk7XFxuIH1cXG4gXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwibG9hZC1hY3F1aXJlIGZyb20gcmRvbmx5X3VudHJ1c3RlZF9tZW0gcG9pbnRlclxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiQlBGX0FUT01JQyBsb2FkcyBmcm9tIFJ7e1swLTldK319IHJkb25seV91bnRydXN0ZWRfbWVtIGlzIG5vdCBhbGxvd2VkXFxcIilcXG4raW50IGxvYWRfYWNxdWlyZV9mcm9tX3Jkb25seV91bnRydXN0ZWRfbWVtKHZvaWQgKmN0eClcXG4re1xcbitcXHRfX3U2NCB2YWwgPSAwO1xcbitcXHR2b2lkICpwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogYnBmX3Jkb25seV9jYXN0KHgsIDApIHlpZWxkcyBQVFJfVE9fTUVNIHwgTUVNX1JET05MWSB8IFBUUl9VTlRSVVNURUQuXFxuK1xcdCAqIEEgcmVndWxhciBCUEZfTERYIGZyb20gaXQgaXMgcmV3cml0dGVuIHRvIEJQRl9QUk9CRV9NRU0sIGJ1dCBhXFxuK1xcdCAqIGxvYWQtYWNxdWlyZSBpcyBub3QsIHNvIGl0IG11c3QgYmUgcmVqZWN0ZWQsIG90aGVyd2lzZSB0aGUgSklUIGVtaXRzXFxuK1xcdCAqIGEgcGxhaW4gbG9hZCB3aXRoIG5vIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSBhbmQgYSBmYXVsdCB3b3VsZCBjcmFzaFxcbitcXHQgKiB0aGUga2VybmVsLlxcbitcXHQgKi9cXG4rXFx0cCA9IGJwZl9yZG9ubHlfY2FzdChcXHUwMDI2dmFsLCAwKTtcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInIxID0gJVtwXTtcXFwiXFxuK1xcdFxcXCIuOGJ5dGUgJVtsb2FkX2FjcXVpcmVfaW5zbl07XFxcIiAvLyByMCA9IGxvYWRfYWNxdWlyZSgodTY0ICopKHIxICsgMCkpO1xcbitcXHQ6XFxuK1xcdDogW3BdIFxcXCJyXFxcIiAocCksXFxuK1xcdCAgX19pbW1faW5zbihsb2FkX2FjcXVpcmVfaW5zbixcXG4rXFx0XFx0ICAgICBCUEZfQVRPTUlDX09QKEJQRl9EVywgQlBGX0xPQURfQUNRLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgMCkpXFxuK1xcdDogXFxcInIwXFxcIiwgXFxcInIxXFxcIik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcInNvY2tldFxcXCIpXFxuIF9fZGVzY3JpcHRpb24oXFxcImxvYWQtYWNxdWlyZSB3aXRoIGludmFsaWQgcmVnaXN0ZXIgUjE1XFxcIilcXG4gX19mYWlsdXJlIF9fZmFpbHVyZV91bnByaXYgX19tc2coXFxcIlIxNSBpcyBpbnZhbGlkXFxcIilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTI6NTcuMDI1NTY1NTI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzYxMzE5NTU2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXJzICh4ODYsIGFybTY0LCByaXNjdikgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgQlBGX0xPQURfQUNRIGluc3RydWN0aW9uLCBlbnN1cmluZyBpdCBpcyB0cmVhdGVkIGFzIGEgbG9hZCByYXRoZXIgdGhhbiBhIHN0b3JlIGZvciBleGNlcHRpb24gaGFuZGxpbmcsIGFuZCByZWplY3RpbmcgaXQgb24gdW50cnVzdGVkIHBvaW50ZXJzIGluIHRoZSB2ZXJpZmllci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgYnlwYXNzZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU3ODY4MmMzMDhjYjNkZmUyMDNkNjhkMTFjMTY0ODJiMDU0NjkyYjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDAwOjUyOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggNGNkYzdkZmIwNWJhOS4uZDE0ZDI5N2ViYjk2NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTExNzgsNyArMTE3OCwxMiBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXG4gXHRleC1cdTAwM2VpbnNuID0gaW5zX29mZnNldDtcbiBcbi1cdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYKVxuK1x0LypcbitcdCAqIEEgbG9hZC1hY3F1aXJlIGlzIG9mIEJQRl9TVFggY2xhc3MsIGJ1dCByZWFkcyBmcm9tIHNyY19yZWcgaW50b1xuK1x0ICogZHN0X3JlZyBsaWtlIGEgQlBGX0xEWCBkb2VzLCBoZW5jZSBpdCBtdXN0IG5vdCBiZSB0cmVhdGVkIGFzIGEgc3RvcmVcbitcdCAqIGhlcmUuXG4rXHQgKi9cbitcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYIFx1MDAyNlx1MDAyNiAhYnBmX2F0b21pY19pc19sb2FkX2FjcShpbnNuKSlcbiBcdFx0ZHN0X3JlZyA9IERPTlRfQ0xFQVI7XG4gXG4gXHRleC1cdTAwM2VmaXh1cCA9IEZJRUxEX1BSRVAoQlBGX0ZJWFVQX1JFR19NQVNLLCBkc3RfcmVnKTtcbkBAIC0xMTkzLDcgKzExOTgsNyBAQCBzdGF0aWMgaW50IGFkZF9leGNlcHRpb25faGFuZGxlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdCAqIG1lbW9yeSBhY2Nlc3MuIFBhc3MgdGhlIHJlZyBob2xkaW5nIHRoZSB1bm1vZGlmaWVkIDMyLWJpdCBhZGRyZXNzIHRvXG4gXHRcdCAqIGV4X2hhbmRsZXJfYnBmLlxuIFx0XHQgKi9cbi1cdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFgpXG4rXHRcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTERYIHx8IGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikpXG4gXHRcdFx0YXJlbmFfcmVnID0gYnBmMmE2NFtpbnNuLVx1MDAzZXNyY19yZWddO1xuIFx0XHRlbHNlXG4gXHRcdFx0YXJlbmFfcmVnID0gYnBmMmE2NFtpbnNuLVx1MDAzZWRzdF9yZWddO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXG5pbmRleCA4ZmU4OTY5ZmI4YTBmLi42Yjk5NzJiMDdjMWIwIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuKysrIGIvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY1xuQEAgLTE5OTQsNyArMTk5NCw3IEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0XHQvKiByZXQgY2FuIGJlIDEgKHNraXAtemV4dCk7IGV4dGFibGUgZW50cnkgc3RpbGwgbmVlZHMgdG8gYmUgYWRkZWQgKi9cbiBcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4gXHRcdFx0cmV0ID0gYWRkX2V4Y2VwdGlvbl9oYW5kbGVyKGluc24sXG4tXHRcdFx0XHRpbnNuLVx1MDAzZWltbSA9PSBCUEZfTE9BRF9BQ1EgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbitcdFx0XHRcdGJwZl9hdG9taWNfaXNfbG9hZF9hY3EoaW5zbikgPyByZCA6IFJFR19ET05UX0NMRUFSX01BUktFUixcbiBcdFx0XHRcdGN0eCkgPzogcmV0O1xuIFxuIFx0XHRpZiAocmV0KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggMDFlN2NlNTY5YzFlZC4uODhlZDk1YjJlYWE3MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMjMzMSw4ICsyMzMxLDEzIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHQgKiBCUEZfUFJPQkVfQVRPTUlDKSBiZWZvcmUgYmVpbmcgdXNlZCBmb3IgdGhlIG1lbW9yeSBhY2Nlc3MuIFBhc3NcbiBcdFx0XHRcdCAqIHRoZSByZWcgaG9sZGluZyB0aGUgdW5tb2RpZmllZCAzMi1iaXQgYWRkcmVzcyB0b1xuIFx0XHRcdFx0ICogZXhfaGFuZGxlcl9icGYoKS5cbitcdFx0XHRcdCAqXG4rXHRcdFx0XHQgKiBBIGxvYWQtYWNxdWlyZSBpcyBvZiBCUEZfU1RYIGNsYXNzLCBidXQgcmVhZHMgZnJvbSBzcmNfcmVnXG4rXHRcdFx0XHQgKiBpbnRvIGRzdF9yZWcgbGlrZSBhIEJQRl9MRFggZG9lcywgaGVuY2UgaXQgbXVzdCBub3QgYmVcbitcdFx0XHRcdCAqIHRyZWF0ZWQgYXMgYSBzdG9yZSBoZXJlLlxuIFx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAoQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0xEWCkge1xuK1x0XHRcdFx0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9MRFggfHxcbitcdFx0XHRcdCAgICBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGluc24pKSB7XG4gXHRcdFx0XHRcdGFyZW5hX3JlZyA9IHJlZzJwdF9yZWdzW3NyY19yZWddO1xuIFx0XHRcdFx0XHRmaXh1cF9yZWcgPSByZWcycHRfcmVnc1tkc3RfcmVnXTtcbiBcdFx0XHRcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmhcbmluZGV4IDczYmFjZmM2NDQ0ZGYuLmQ3OWJmNzU1N2VmNjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5AQCAtMTEzMiwyMSArMTEzMiw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHNldWRvX2Z1bmMoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuIFx0cmV0dXJuIGJwZl9pc19sZGltbTY0KGluc24pIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19GVU5DO1xuIH1cbiBcbi0vKiBHaXZlbiBhIEJQRl9BVE9NSUMgaW5zdHJ1Y3Rpb24gQGF0b21pY19pbnNuLCByZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhblxuLSAqIGF0b21pYyBsb2FkIG9yIHN0b3JlLCBhbmQgZmFsc2UgaWYgaXQgaXMgYSByZWFkLW1vZGlmeS13cml0ZSBpbnN0cnVjdGlvbi5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2xcbi1icGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoY29uc3Qgc3RydWN0IGJwZl9pbnNuICphdG9taWNfaW5zbilcbi17XG4tXHRzd2l0Y2ggKGF0b21pY19pbnNuLVx1MDAzZWltbSkge1xuLVx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG4tXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4tXHRcdHJldHVybiB0cnVlO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLX1cbi1cbiBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHtcbiBcdGludCAoKnRlc3RfcnVuKShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbiBcdFx0XHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uNDFiMDJkNTNlMjIyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0zODMsNiArMzgzLDM3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Nhc3RfdXNlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gLyogTGVnYWN5IGFsaWFzICovXG4gI2RlZmluZSBCUEZfU1RYX1hBREQoU0laRSwgRFNULCBTUkMsIE9GRikgQlBGX0FUT01JQ19PUChTSVpFLCBCUEZfQURELCBEU1QsIFNSQywgT0ZGKVxuIFxuKy8qXG4rICogR2l2ZW4gYSBCUEZfQVRPTUlDIGluc3RydWN0aW9uIEBhdG9taWNfaW5zbiwgcmV0dXJuIHRydWUgaWYgaXQgaXMgYW5cbisgKiBhdG9taWMgbG9hZCBvciBzdG9yZSwgYW5kIGZhbHNlIGlmIGl0IGlzIGEgcmVhZC1tb2RpZnktd3JpdGUgaW5zdHJ1Y3Rpb24uXG4rICovXG4rc3RhdGljIGlubGluZSBib29sXG4rYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqYXRvbWljX2luc24pXG4re1xuK1x0c3dpdGNoIChhdG9taWNfaW5zbi1cdTAwM2VpbW0pIHtcbitcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0Y2FzZSBCUEZfU1RPUkVfUkVMOlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4rLypcbisgKiBBIGxvYWQtYWNxdWlyZSBpcyB0aGUgb25seSBCUEZfU1RYIGNsYXNzIGluc3RydWN0aW9uIHRoYXQgcmVhZHMgaW50b1xuKyAqIGRzdF9yZWcgZnJvbSBzcmNfcmVnICsgb2ZmMTYsIGkuZS4gaXQgaGFzIHRoZSBvcGVyYW5kIHJvbGVzIG9mIGEgQlBGX0xEWC5cbisgKiBVbmxpa2UgYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKCksIEBpbnNuIGlzIG5vdCBhc3N1bWVkIHRvIGJlIGEgQlBGX0FUT01JQ1xuKyAqIGluc3RydWN0aW9uIGhlcmUsIHNvIHRoYXQgY2FsbGVycyB3aGljaCB3YWxrIGFsbCBpbnN0cnVjdGlvbiBjbGFzc2VzIGNhblxuKyAqIHVzZSB0aGlzIGRpcmVjdGx5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfYXRvbWljX2lzX2xvYWRfYWNxKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbit7XG4rXHRyZXR1cm4gQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1NUWCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDIHx8XG4rXHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX0FUT01JQykgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRO1xuK31cbitcbiAvKiBNZW1vcnkgc3RvcmUsICoodWludCAqKSAoZHN0X3JlZyArIG9mZjE2KSA9IGltbTMyICovXG4gXG4gI2RlZmluZSBCUEZfU1RfTUVNKFNJWkUsIERTVCwgT0ZGLCBJTU0pXHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTYyMzNjMDA4MWQxMC4uNjQ4YzU3ODQxNzhlYyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDkyMyw2ICs0OTIzLDMwIEBAIHN0YXRpYyBib29sIGlzX2FyZW5hX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8pXG4gXHRyZXR1cm4gcmVnLVx1MDAzZXR5cGUgPT0gUFRSX1RPX0FSRU5BO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBpc19sb2FkX2FjcV91bnNhZmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyA9IHJlZ19zdGF0ZShlbnYsIHJlZ25vKTtcbitcbitcdC8qXG4rXHQgKiBBIEJQRl9MT0FEX0FDUSBpcyBub3QgcmV3cml0dGVuIHRvIGEgQlBGX1BST0JFX01FTSBsb2FkIGJ5IHRoZVxuK1x0ICogdmVyaWZpZXIsIHVubGlrZSBhIHJlZ3VsYXIgQlBGX0xEWC4gVGhlIEpJVCB3b3VsZCBlbWl0IGEgcGxhaW4gbG9hZFxuK1x0ICogd2l0aCBubyBleGNlcHRpb24gdGFibGUgZW50cnksIHNvIGEgZmF1bHQgKGUuZy4gTlVMTCBkZXJlZikgY3Jhc2hlc1xuK1x0ICogdGhlIGtlcm5lbCBpbnN0ZWFkIG9mIGJlaW5nIGhhbmRsZWQuXG4rXHQgKlxuK1x0ICogUmVqZWN0IHRoZSBzb3VyY2UgcG9pbnRlciB0eXBlcyB0aGF0IGEgQlBGX0xEWCB3b3VsZCBoYXZlIGhhZCB0aGF0XG4rXHQgKiBmYXVsdCBwcm90ZWN0aW9uIGFwcGxpZWQgdG8sIGkuZS4gdGhlIG9uZXMgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKClcbitcdCAqIHR1cm5zIGludG8gQlBGX1BST0JFX01FTTogYSBiYXJlIFBUUl9UT19CVEZfSUQgYW5kIGFueSBQVFJfVU5UUlVTVEVEXG4rXHQgKiBwb2ludGVyICh1bnRydXN0ZWQgYnRmIGlkcywgdW50cnVzdGVkIE1FTV9BTExPQywgcmRvbmx5IHVudHJ1c3RlZFxuK1x0ICogbWVtb3J5KS4gQSBQVFJfVFJVU1RFRCBwb2ludGVyIGlzIG5vdCBhbW9uZyB0aGVtLCBpcyBub3QgY29udmVydGVkLFxuK1x0ICogYW5kIHN0YXlzIGFsbG93ZWQuIFNhbWUgZm9yIHRoZSBvdGhlciBmbGFnZ2VkIFBUUl9UT19CVEZfSUQgdmFyaWFudHNcbitcdCAqIChNRU1fQUxMT0MsIE1FTV9SQ1UsIC4uLiksIGhlbmNlIHRoZSBleGFjdCBtYXRjaCBvbiB0aGUgYmFzZSB0eXBlLlxuK1x0ICovXG4rXHRyZXR1cm4gaW5zbi1cdTAwM2VpbW0gPT0gQlBGX0xPQURfQUNRIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIChyZWctXHUwMDNldHlwZSA9PSBQVFJfVE9fQlRGX0lEIHx8XG4rXHRcdCh0eXBlX2ZsYWcocmVnLVx1MDAzZXR5cGUpIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSk7XG4rfVxuK1xuIC8qIFJldHVybiBmYWxzZSBpZiBAcmVnbm8gY29udGFpbnMgYSBwb2ludGVyIHdob3NlIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkIGZvclxuICAqIGF0b21pYyBpbnN0cnVjdGlvbiBAaW5zbi5cbiAgKi9cbkBAIC00OTM5LDcgKzQ5NjMsOCBAQCBzdGF0aWMgYm9vbCBhdG9taWNfcHRyX3R5cGVfb2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoaXNfYXJlbmFfcmVnKGVudiwgcmVnbm8pKVxuIFx0XHRyZXR1cm4gYnBmX2ppdF9zdXBwb3J0c19pbnNuKGluc24sIHRydWUpO1xuLVxuK1x0aWYgKGlzX2xvYWRfYWNxX3Vuc2FmZShlbnYsIHJlZ25vLCBpbnNuKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3N0cmVhbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbmluZGV4IGMzY2NlNWMyOTJiZGQuLjE1ZGQzYWUyYTg0YjcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc3RyZWFtLmNcbkBAIC0xMDMsNiArMTAzLDggQEAgdm9pZCB0ZXN0X3N0cmVhbV9hcmVuYV9mYXVsdF9hZGRyZXNzKHZvaWQpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV9yZWFkX2ZhdWx0LCBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VmYXVsdF9hZGRyKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwid3JpdGVfZmF1bHRcIikpXG4gXHRcdHRlc3RfYWRkcmVzcyhza2VsLVx1MDAzZXByb2dzLnN0cmVhbV9hcmVuYV93cml0ZV9mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImxvYWRfYWNxdWlyZV9mYXVsdFwiKSlcbitcdFx0dGVzdF9hZGRyZXNzKHNrZWwtXHUwMDNlcHJvZ3Muc3RyZWFtX2FyZW5hX2xvYWRfYWNxdWlyZV9mYXVsdCwgXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlZmF1bHRfYWRkcik7XG4gXG4gXHRzdHJlYW1fX2Rlc3Ryb3koc2tlbCk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuaW5kZXggOGQ4ZTUzZDM3MjY2Yy4uY2Y1NTMzZTExZjM5YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJlYW0uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cmVhbS5jXG5AQCAtMTg1LDYgKzE4NSw1MCBAQCBpbnQgc3RyZWFtX2FyZW5hX3JlYWRfZmF1bHQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19zdGRlcnIoXCJFUlJPUjogQXJlbmEgUkVBRCBhY2Nlc3MgYXQgdW5tYXBwZWQgYWRkcmVzcyAweHt7Lip9fVwiKVxuK19fc3RkZXJyKFwiQ1BVOiB7e1swLTldK319IFVJRDogMCBQSUQ6IHt7WzAtOV0rfX0gQ29tbToge3suKn19XCIpXG4rX19zdGRlcnIoXCJDYWxsIHRyYWNlOlxcblwiXG4rXCJ7eyhbYS16QS1aX11bYS16QS1aMC05X10qXFxcXCsweFswLTlhLWZBLUZdKy8weFswLTlhLWZBLUZdK1xcblwiXG4rXCJ8WyBcXHRdK1teXFxuXStcXG4pKn19XCIpXG4raW50IHN0cmVhbV9hcmVuYV9sb2FkX2FjcXVpcmVfZmF1bHQodm9pZCAqY3R4KVxuK3tcbitcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gbG9hZF9hY3F1aXJlX2luc24gPSB7XG4rXHRcdC5jb2RlXHQgPSAweGMzLFx0LyogQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVyAqL1xuK1x0XHQuZHN0X3JlZyA9IDAsXHRcdC8qIEJQRl9SRUdfMCAqL1xuK1x0XHQuc3JjX3JlZyA9IDEsXHRcdC8qIEJQRl9SRUdfMSAqL1xuK1x0XHQub2ZmXHQgPSAweDdmZmYsXG4rXHRcdC5pbW1cdCA9IDB4MTAwLFx0LyogQlBGX0xPQURfQUNRICovXG4rXHR9O1xuK1x0c3RydWN0IGJwZl9hcmVuYSAqcHRyID0gKHZvaWQgKilcdTAwMjZhcmVuYTtcbitcdHU2NCB1c2VyX3ZtX3N0YXJ0LCB2YWw7XG4rXG4rXHQvKlxuK1x0ICogUHJldmVudCBHQ0MgYm91bmRzIHdhcm5pbmc6IGNhc3RpbmcgXHUwMDI2YXJlbmEgdG8gc3RydWN0IGJwZl9hcmVuYSAqXG4rXHQgKiB0cmlnZ2VycyBib3VuZHMgY2hlY2tpbmcgc2luY2UgdGhlIG1hcCBkZWZpbml0aW9uIGlzIHNtYWxsZXIgdGhhblxuK1x0ICogc3RydWN0IGJwZl9hcmVuYS4gYmFycmllcl92YXIoKSBtYWtlcyB0aGUgcG9pbnRlciBvcGFxdWUgdG8gR0NDLFxuK1x0ICogcHJldmVudGluZyB0aGUgYm91bmRzIGFuYWx5c2lzLlxuK1x0ICovXG4rXHRiYXJyaWVyX3ZhcihwdHIpO1xuK1x0dXNlcl92bV9zdGFydCA9IHB0ci1cdTAwM2V1c2VyX3ZtX3N0YXJ0O1xuK1x0ZmF1bHRfYWRkciA9IHVzZXJfdm1fc3RhcnQgKyAweDdmZmY7XG4rXHRicGZfYWRkcl9zcGFjZV9jYXN0KHVzZXJfdm1fc3RhcnQsIDAsIDEpO1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFx0XCJyMSA9ICVbdXNlcl92bV9zdGFydF07XCJcbitcdFx0XCJyMCA9IDE7XCJcbitcdFx0XCIuOGJ5dGUgJVtsb2FkX2FjcXVpcmVfaW5zbl07XCIgLyogcjAgPSBsb2FkX2FjcXVpcmUoKHUzMiAqKShyMSArIDB4N2ZmZikpICovXG4rXHRcdFwiJVt2YWxdID0gcjA7XCJcbitcdFx0OiBbdmFsXSBcIj1yXCIgKHZhbClcbitcdFx0OiBbdXNlcl92bV9zdGFydF0gXCJyXCIgKHVzZXJfdm1fc3RhcnQpLFxuK1x0XHQgIF9faW1tX2luc24obG9hZF9hY3F1aXJlX2luc24sIGxvYWRfYWNxdWlyZV9pbnNuKVxuK1x0XHQ6IFwicjBcIiwgXCJyMVwiXG4rXHQpO1xuK1x0cmV0dXJuIHZhbDtcbit9XG4rXG4gc3RhdGljIF9fbm9pbmxpbmUgdm9pZCBzdWJwcm9nKHZvaWQpXG4ge1xuIFx0aW50IF9fYXJlbmEgKmFkZHIgPSAoaW50IF9fYXJlbmEgKikweGRlYWRiZWVmO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuY1xuaW5kZXggYWUxZGFiMWIwY2JiNy4uZDE3MDI2ZDc0ODBkOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9sb2FkX2FjcXVpcmUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2xvYWRfYWNxdWlyZS5jXG5AQCAtMyw2ICszLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuICNpbmNsdWRlIFwiLi4vLi4vLi4vaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiXG4gI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbiBcbkBAIC0yMjEsNiArMjIyLDMzIEBAIF9fbmFrZWQgdm9pZCBsb2FkX2FjcXVpcmVfZnJvbV9zb2NrX3BvaW50ZXIodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJsb2FkLWFjcXVpcmUgZnJvbSByZG9ubHlfdW50cnVzdGVkX21lbSBwb2ludGVyXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiQlBGX0FUT01JQyBsb2FkcyBmcm9tIFJ7e1swLTldK319IHJkb25seV91bnRydXN0ZWRfbWVtIGlzIG5vdCBhbGxvd2VkXCIpXG4raW50IGxvYWRfYWNxdWlyZV9mcm9tX3Jkb25seV91bnRydXN0ZWRfbWVtKHZvaWQgKmN0eClcbit7XG4rXHRfX3U2NCB2YWwgPSAwO1xuK1x0dm9pZCAqcDtcbitcbitcdC8qXG4rXHQgKiBicGZfcmRvbmx5X2Nhc3QoeCwgMCkgeWllbGRzIFBUUl9UT19NRU0gfCBNRU1fUkRPTkxZIHwgUFRSX1VOVFJVU1RFRC5cbitcdCAqIEEgcmVndWxhciBCUEZfTERYIGZyb20gaXQgaXMgcmV3cml0dGVuIHRvIEJQRl9QUk9CRV9NRU0sIGJ1dCBhXG4rXHQgKiBsb2FkLWFjcXVpcmUgaXMgbm90LCBzbyBpdCBtdXN0IGJlIHJlamVjdGVkLCBvdGhlcndpc2UgdGhlIEpJVCBlbWl0c1xuK1x0ICogYSBwbGFpbiBsb2FkIHdpdGggbm8gZXhjZXB0aW9uIHRhYmxlIGVudHJ5IGFuZCBhIGZhdWx0IHdvdWxkIGNyYXNoXG4rXHQgKiB0aGUga2VybmVsLlxuK1x0ICovXG4rXHRwID0gYnBmX3Jkb25seV9jYXN0KFx1MDAyNnZhbCwgMCk7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMSA9ICVbcF07XCJcbitcdFwiLjhieXRlICVbbG9hZF9hY3F1aXJlX2luc25dO1wiIC8vIHIwID0gbG9hZF9hY3F1aXJlKCh1NjQgKikocjEgKyAwKSk7XG4rXHQ6XG4rXHQ6IFtwXSBcInJcIiAocCksXG4rXHQgIF9faW1tX2luc24obG9hZF9hY3F1aXJlX2luc24sXG4rXHRcdCAgICAgQlBGX0FUT01JQ19PUChCUEZfRFcsIEJQRl9MT0FEX0FDUSwgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApKVxuK1x0OiBcInIwXCIsIFwicjFcIik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwic29ja2V0XCIpXG4gX19kZXNjcmlwdGlvbihcImxvYWQtYWNxdWlyZSB3aXRoIGludmFsaWQgcmVnaXN0ZXIgUjE1XCIpXG4gX19mYWlsdXJlIF9fZmFpbHVyZV91bnByaXYgX19tc2coXCJSMTUgaXMgaW52YWxpZFwiKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTI6NTcuMDI1NTY2ODQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0ODEyMTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgY3J1Y2lhbCBmaXgsIGFkZHJlc3NpbmcgaG93IHRoZSBCUEYgc3Vic3lzdGVtIGhhbmRsZXMgYEJQRl9MT0FEX0FDUWAgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBhdG9taWMgbG9hZC1hY3F1aXJlIG9wZXJhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgdGhlIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXJzIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzOiBhcm02NCwgcmlzY3YsIGFuZCB4ODYuIFRoaXMgc2NyZWFtcyBcImZ1enogbWUhXCIg4oCTIGl0J3MgcmlwZSBmb3IgZmluZGluZyBzdWJ0bGUsIGhhcmQtdG8tcHJlZGljdCBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgZW5zdXJpbmcgdGhhdCB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBzYWZldHkgY2hlY2tzIHByb3Blcmx5IGFjY291bnQgZm9yIGBCUEZfTE9BRF9BQ1FgLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBuZXcgaGVscGVyLCBgYnBmX2F0b21pY19pc19sb2FkX2FjcSgpYCwgYW5kIGludGVncmF0ZWQgaXQgaW50byB0aGUgZXhjZXB0aW9uIGhhbmRsZXJzIGZvciBhcm02NCBhbmQgcmlzY3YsIGFuZCB0aGUgeDg2IGV4Y2VwdGlvbiBoYW5kbGluZyBsb2dpYy4gQ3J1Y2lhbGx5LCB0aGUgdmVyaWZpZXIgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2Agbm93IHJlamVjdHMgYEJQRl9MT0FEX0FDUWAgb24gdW50cnVzdGVkIHBvaW50ZXJzLCBzaW5jZSB0aGV5J3JlIG5vdCByZXdyaXR0ZW4gdG8gYEJQRl9QUk9CRV9NRU1gLCB3aGljaCBjb3VsZCBsZWFkIHRvIGtlcm5lbCBwYW5pY3MuIE1ha2VzIHNlbnNlIC0gcHJldmVudGluZyBtZW1vcnkgYWNjZXNzIHZpb2xhdGlvbnMgaXMgcGFyYW1vdW50LlxuXG5Ob3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHRvdWNoZXMgdGhlIGZvbGxvd2luZzpcblxuKiAgIGBhZGRfZXhjZXB0aW9uX2hhbmRsZXJgIHdpdGhpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgIChzdGF0aWMpXG4qICAgYGJwZl9qaXRfZW1pdF9pbnNuYCBpbiBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2BcbiogICBgZG9faml0YCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYFxuKiAgIGBpc19sb2FkX2FjcV91bnNhZmVgIGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIChzdGF0aWMpXG4qICAgYGF0b21pY19wdHJfdHlwZV9va2AgaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgKHN0YXRpYylcblxuSSBzaG91bGQgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHN0YXRpYy9ub24tc3RhdGljIHN0YXR1cyBvZiBhIGZldyBvZiB0aG9zZSBzeW1ib2xzLiBJJ20gc2xpZ2h0bHkgc3VycHJpc2VkIHRvIHNlZSB0aGF0IGBicGZfaml0X2VtaXRfaW5zbmAgaW4gdGhlIHJpc2N2IGNvZGUgbWlnaHQgKm5vdCogYmUgc3RhdGljLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYW5kIGFsc28gaWYgYGRvX2ppdGAgaXMgaW5kZWVkIHN0YXRpYyBpbiB0aGUgeDg2IGNvZGUuIFRoZXNlIGRldGFpbHMgY291bGQgYmUgaW1wb3J0YW50IGZvciBicm9hZGVyIGltcGxpY2F0aW9ucy5cblxuQW5kIG9mIGNvdXJzZSwgYGJwZl9jaGVja2AgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSB2ZXJpZmllciwgc28gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgZnVuY3Rpb25zIGNhbGxlZCBmcm9tIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIHRob3JvdWdobHkuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIHRoYXQgbmVlZHMgcmlnb3JvdXMgYW5hbHlzaXMsIGVzcGVjaWFsbHkgZnJvbSBhIG1lbW9yeS1zYWZldHkgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzowMy42NzM2OTI2NzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxODk3OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBicGZfaml0X2VtaXRfaW5zblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMyND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM2MC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNjE6aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzYyLVxcdFxcdCAgICAgIGJvb2wgZXh0cmFfcGFzcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTM6MDMuNzM1ODg3MDU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NzI3NDUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgYnBmX2ppdF9lbWl0X2luc25gIEFjcm9zcyBBcmNoaXRlY3R1cmVzKipcblxuSG1tLCBgYnBmX2ppdF9lbWl0X2luc25gIGJlaW5nIG5vbi1zdGF0aWMgaW4gdGhlIFJJU0MtViBpbXBsZW1lbnRhdGlvbiBpcyBpbnRlcmVzdGluZy4gSXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgY3Jvc3MtYXJjaGl0ZWN0dXJlIGNvbnNpc3RlbmN5IGFuZCBwb3J0YWJpbGl0eSBvZiBvdXIgQlBGIEpJVCBpbmZyYXN0cnVjdHVyZS4gV2h5IGlzIGl0IG5vbi1zdGF0aWMgdGhlcmU/IFdoYXQgc3BlY2lmaWMgbmVlZCBkcm92ZSB0aGF0IGRlc2lnbiBjaG9pY2U/IElzIGl0IHNvbWV0aGluZyBpbmhlcmVudCB0byB0aGUgUklTQy1WIElTQSBvciB0aGUgd2F5IHRoZSBSSVNDLVYgSklUIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGUga2VybmVsP1xuXG5UaGlzIGRldmlhdGlvbiBmcm9tIHRoZSB0eXBpY2FsIHN0YXRpYyBkZWNsYXJhdGlvbiByYWlzZXMgc2V2ZXJhbCBxdWVzdGlvbnMuIERvZXMgdGhpcyBpbXBseSBhIGRlc2lnbiBwYXR0ZXJuIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgaW4gZnV0dXJlIEpJVCBlZmZvcnRzPyBEb2VzIGl0IGV4cG9zZSBtb3JlIG9mIHRoZSBKSVQgaW50ZXJuYWxzLCBhbmQgZG9lcyB0aGlzIGhhdmUgc2VjdXJpdHkgaW1wbGljYXRpb25zP1xuXG5Ob3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBjaGVjayB0aGUgeDg2IGltcGxlbWVudGF0aW9uLiBJcyBpdCBzdGF0aWMgdGhlcmU/IElmIHNvLCB3aHkgdGhlIGRpZmZlcmVuY2U/IElzIGl0IGEgbWF0dGVyIG9mIGhpc3RvcmljYWwgcmVhc29ucywgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMsIG9yIGRlc2lnbiBwaGlsb3NvcGh5PyBJcyB0aGVyZSBhIHN1YnRsZSwgdW5kZXJseWluZyBhcmNoaXRlY3R1cmFsIHJlYXNvbiB0aGF0IGluZmx1ZW5jZXMgdGhpcyBkZWNpc2lvbj9cblxuV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlzY3JlcGFuY3kgZnVsbHkuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIG92ZXJzaWdodCwgYnV0IGl0IGNvdWxkIGFsc28gcmV2ZWFsIGRlZXBlciBpbnNpZ2h0cyBpbnRvIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIG91ciBCUEYgSklUIGVuZ2luZSBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoaXMgdmFyaWFuY2UgbmVlZHMgc29tZSBpbnZlc3RpZ2F0aW9uIGFzIGl0IGNvdWxkIGxlYWQgdG8gcG90ZW50aWFsIHJlZmFjdG9yaW5nIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTM6MDcuMTkzMTY0MzA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NzQ1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IGRvX2ppdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2Mzk9c3RhdGljIGludCBlbWl0X3NwZWN0cmVfYmhiX2JhcnJpZXIodTggKipwcHJvZywgdTggKmlwLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2ODAtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE2ODE6c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjgyLVxcdFxcdCAgdTggKnJ3X2ltYWdlLCBpbnQgb2xkcHJvZ2xlbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIGJvb2wgam1wX3BhZGRpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjA3LjI1MTkxNjI5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzcyMzM0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkpJVCBDb21waWxhdGlvbiBGbG93OiBBIFF1aWNrIE1lbnRhbCBSdW4tVGhyb3VnaCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGRvX2ppdGAgaXMgZGVjbGFyZWQgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgc2lnbiBpdCdzIHBhcnQgb2YgYSBwcml2YXRlLCBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb25maXJtcyB3aGF0IEkgZXhwZWN0ZWQ7IGl0IGlzbid0IHNvbWV0aGluZyBleHBvc2VkIGRpcmVjdGx5IHRvIHRoZSBvdXRzaWRlLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlICptYWluKiBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlIOKAkyB0aGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHRoZSBsaWtlbHkgZXh0ZXJuYWwgZmFjaW5nIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIGFuZCBjb29yZGluYXRpbmcgdGhlIEp1c3QtSW4tVGltZSBjb21waWxhdGlvbiBvZiBCUEYgaW5zdHJ1Y3Rpb25zLiBJJ2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGluZ3MgbGlrZSBjaGVja2luZyBmb3IgcHJlcmVxdWlzaXRlcywgc2V0dGluZyB1cCB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQsIGFuZCB0aGVuLCBsaWtlbHksIGNhbGxpbmcgYGRvX2ppdGAgKG9yIHNvbWUgc2ltaWxhciBpbnRlcm5hbCBmdW5jdGlvbikgdG8gYWN0dWFsbHkgZG8gdGhlIGhhcmQgd29yayBvZiB0cmFuc2xhdGluZyB0aGUgQlBGIGJ5dGVjb2RlIHRvIG1hY2hpbmUgY29kZS4gR29vZCBkZXNpZ24sIGtlZXBpbmcgdGhhdCBjb3JlIGZ1bmN0aW9uYWxpdHkgbmljZWx5IGVuY2Fwc3VsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxMiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjEwLjUyOTE1MjY3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5MjA2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0cnVjdCBicGZfcHJvZyBcXFxcKmJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODQwPXN0cnVjdCB4NjRfaml0X2RhdGEge1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NTEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NTI6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg1My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjEwLjYzMDA3ODYyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzQ0NDA0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJ20gdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipDb25zaWRlcmluZyB0aGUgQXJjaGl0ZWN0dXJlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIHdlJ3ZlIGdvdCB0aGlzIHBpZWNlIG9mIHdvcmssIGFuZCBub3cgSSdtIHRoaW5raW5nLi4uIHdlIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGFybTY0IGFyY2hpdGVjdHVyZS4gSXQncyBhbG1vc3QgYXV0b21hdGljLCBnaXZlbiB0aGUgcHJldmFsZW5jZSBvZiBtb2JpbGUgZGV2aWNlcywgbW9kZXJuIHNlcnZlcnMsIGFuZCBldmVuIGRlc2t0b3BzIG5vdyBydW5uaW5nIG9uIEFSTS4gV2UgY2FuJ3QganVzdCBhc3N1bWUgYW55dGhpbmcgaXMgbGltaXRlZCB0byB4ODYgb3IgeDY0IGFueW1vcmUuIFNvLCB5ZWFoLCAqYW5kIGZvciBhcm02ND8qIEl0J3MgYWxtb3N0IGEgZ2l2ZW4gdGhhdCB3ZSBuZWVkIHRvIGFkZHJlc3MgdGhhdCwgdG9vLiBUaGF0J3MgdGhlIGltcG9ydGFudCBxdWVzdGlvbiB0byBiZSBhc2tpbmcgb3Vyc2VsdmVzLCB0byBlbnN1cmUgdGhpcyBkZXNpZ24gaXMgYWN0dWFsbHkgcm9idXN0LiBHb3R0YSBjb25zaWRlciBpdCByaWdodCBmcm9tIHRoZSBiZWdpbm5pbmcsIG90aGVyd2lzZSwgaXQnbGwgaGF1bnQgdXMgaW4gdGhlIGxvbmcgcnVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjQzLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzoxMy44MDQ1MjMzMDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDY0NjkwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RydWN0IGJwZl9wcm9nIFxcXFwqYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMDkxPXN0cnVjdCBhcm02NF9qaXRfZGF0YSB7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDk3LVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIwOTg6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMDk5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTM6MTQuMzI1MTc1MjQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDA1NDM2NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgYGF0b21pY19wdHJfdHlwZV9va2AgQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIHZlcmlmaWVyIHdvcmtzLCBhbmQgaXQncyBjYWxsaW5nIGBhdG9taWNfcHRyX3R5cGVfb2tgIHdpdGhpbiBgY2hlY2tfYXRvbWljYC4gUmlnaHQsIHNvIGBjaGVja19hdG9taWNgIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgcmVzcG9uc2libGUgZm9yLCB3ZWxsLCBjaGVja2luZyBhdG9taWMgb3BlcmF0aW9ucywgYXMgdGhlIG5hbWUgaW1wbGllcy4gQW5kIHdpdGhpbiB0aGF0IGNoZWNrLCBpdCdzIHNwZWNpZmljYWxseSB1c2luZyBgYXRvbWljX3B0cl90eXBlX29rYC4gVGhhdCBtZWFucyB0aGlzIGBhdG9taWNfcHRyX3R5cGVfb2tgIGZ1bmN0aW9uICptdXN0KiBiZSBkb2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgcmVsYXRlZCB0byBwb2ludGVyIHR5cGVzIGluIHRoZSBjb250ZXh0IG9mIGF0b21pYyBvcGVyYXRpb25zLiBJdCdzIGxpa2VseSBlbnN1cmluZyB0aGF0IGEgcG9pbnRlciB0eXBlIHVzZWQgaW4gYW4gYXRvbWljIGNvbnRleHQgaXMgYWN0dWFsbHkgdmFsaWQgYW5kIHRoYXQgaXRzIHVzZSBpcyBzYWZlIGFuZCB3ZWxsLWRlZmluZWQsIGFuZCB0aGF0IHRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGFsbG93cyBmb3IgdGhlIHVzZSBvZiB0aGUgcGFydGljdWxhciBwb2ludGVyIHR5cGUuIFBlcmhhcHMgaXQgZW5zdXJlcyB0aGUgcG9pbnRlciBpcyBhcHByb3ByaWF0ZWx5IGFsaWduZWQsIG9yIHRoYXQgdGhlcmUgYXJlbid0IGFueSB1bmRlZmluZWQgYmVoYXZpb3Vycywgc3VjaCBhcyBjb25jdXJyZW50IHdyaXRlcyB0byBvdmVybGFwcGluZyByZWdpb25zIG9mIG1lbW9yeS4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCAqZnJvbSogYGNoZWNrX2F0b21pY2Agc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsLCBsb3ctbGV2ZWwgY29tcG9uZW50IG9mIHRoZSBvdmVyYWxsIGF0b21pYyBvcGVyYXRpb24gdmFsaWRhdGlvbiBwcm9jZXNzLiBJdCdzIGEga2V5IHBhcnQgb2YgdGhlIHN0YXRpYyBhbmFseXNpcyBmb3IgdmVyaWZ5aW5nIHRoZSBjb3JyZWN0bmVzcyBvZiBhdG9taWMgb3BlcmF0aW9ucyBhdCB0aGUgdHlwZSBsZXZlbC4gVGhlIHZlcmlmaWVyIGlzIGNsZWFybHkgcmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uIHRvIGVuZm9yY2UgY2VydGFpbiBzYWZldHkgZ3VhcmFudGVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAxNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjE3Ljc2NTcyMTQzMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwMTQ0MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjUxMj1zdGF0aWMgaW50IGNoZWNrX3N0b3JlX3JlZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU0OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjU1MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU1MS1cXHRcXHRcXHQgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NDEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2NDI6c3RhdGljIGludCBjaGVja19hdG9taWNfbG9hZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjQzLVxcdFxcdFxcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2NjE6c3RhdGljIGludCBjaGVja19hdG9taWNfc3RvcmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY4MDpzdGF0aWMgaW50IGNoZWNrX2F0b21pYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzoxNy44MzQ3NDQyNDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3MzczOTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gd2hhdCBJJ20gc2VlaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgVmVyaWZpY2F0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyB2ZXJpZmllciB3b3JrcywgYW5kIGl0J3MgY2xlYXIgdGhlIGRlc2lnbiBlbXBoYXNpemVzIGEgc2VwYXJhdGlvbiBvZiBjb25jZXJucy4gVGhlIGBjaGVja19hdG9taWNgIGZ1bmN0aW9uLCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3MgYSBrZXkgZGV0YWlsOyBpdCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhbiBpbnRlcm5hbCwgaGVscGVyIGZ1bmN0aW9uLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvciBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSB2ZXJpZmljYXRpb24gbW9kdWxlIGl0c2VsZi4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgYSB2ZXJ5IHNwZWNpZmljLCBjb250YWluZWQgdGFzayB3aXRoaW4gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLCBwZXJoYXBzIGEgZm9jdXNlZCBhdG9taWMgaW5zdHJ1Y3Rpb24gY2hlY2ssIGdpdmVuIHRoZSBmdW5jdGlvbidzIG5hbWUuXG5cblRoZSByZWFsIGVudHJ5IHBvaW50LCB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0aGF0IGtpY2tzIG9mZiB0aGUgZW50aXJlIHZlcmlmaWNhdGlvbiBwcm9jZWR1cmUsIGlzIGBicGZfY2hlY2tgLiBUaGF0J3Mgd2hlcmUgdGhlIHZlcmlmaWVyIHN0YXJ0cyBpdHMgd29yaywgSSBpbWFnaW5lLiBJdCBpcyBwcm9iYWJseSB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSByZXN0IG9mIHRoZSBlQlBGIHN5c3RlbSB0byB2YWxpZGF0ZSBhIHByb2dyYW0uIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBleHBlY3RhdGlvbjogYSBjbGVhbiwgbW9kdWxhciBzdHJ1Y3R1cmUuICBJIGNhbiBhbHJlYWR5IGVudmlzaW9uIGhvdyB0aGlzIGRlc2lnbiBhbGxvd3MgZm9yIGEgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgY29yZSB2ZXJpZmljYXRpb24gbG9naWMgKGBicGZfY2hlY2tgKSBhbmQgdGhlIHN1cHBvcnRpbmcgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHNwZWNpYWxpemVkIHRhc2tzIGxpa2UgaW5zdHJ1Y3Rpb24tbGV2ZWwgY2hlY2tzIChgY2hlY2tfYXRvbWljYCkuIFRoaXMgc2VwYXJhdGlvbiBpcyBzb21ldGhpbmcgSSBkZWZpbml0ZWx5IGFwcHJlY2lhdGUgaW4gYSBzeXN0ZW0gYXMgY29tcGxleCBhcyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzE5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDA6NTM6MjIuNTA4NDg1NzU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU2MzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGJwZl9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTE5MTIxPXN0YXRpYyBib29sIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKGVudW0gYnBmX2F0dGFjaF90eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkxMzQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MTM1OmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTEzNi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NTQ4PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjQ3LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY0ODppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjQ5LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMTA0PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMjIwLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDIyMTppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAyMjItXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAwOjUzOjIyLjU3NjA1NTU1NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU4MTUxMzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipJbml0aWFsIEpJVCBJbnZlc3RpZ2F0aW9uIEZvY3VzKipcblxuUmlnaHQsIHNvIGBicGZfY2hlY2tgIGFuZCBgYnBmX2ludF9qaXRfY29tcGlsZWAgc2VlbSBsaWtlIHByb21pc2luZyBlbnRyeSBwb2ludHMuIFRob3NlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgQlBGIEpJVCBjb21waWxhdGlvbi4gTGV0IG1lIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBzeW1ib2xzLiBIb2xkIG9uLi4uIEknbSBqdXN0IHJlY2FsbGluZyB0aGF0IGBicGZfaW50X2ppdF9jb21waWxlYCBpcyB2ZXJ5IGxpa2VseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIERhbW4gaXQuIE5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gd29ya2luZyBmcm9tIHRoZSBjb3JyZWN0IGNvZGUgcGF0aCBhbmQgYXJjaGl0ZWN0dXJlLiBIbW1tLCBnb3R0YSBiZSBhIG1vcmUgZ2VuZXJpYyBKSVQgZnVuY3Rpb24gYnVyaWVkIHNvbWV3aGVyZS4gVGltZSB0byBzZWUgaWYgSSBjYW4gZmluZCBhIGhpZ2hlci1sZXZlbCBvciBhcmNoaXRlY3R1cmUtYWdub3N0aWMgSklUIGNvbXBpbGUgZnVuY3Rpb24gdGhhdCBjYWxscyB0aG9zZSwgb3IgaXMgYXQgbGVhc3QgYSBjZW50cmFsIHBvaW50IHRvIHN0YXJ0IGZyb20uIExldCdzIHNlZSBpZiB0aGF0IGV4aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzoyNS44MzQyMDkyODhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NTcyNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9jb3JlLmM9MjYzMz1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjM5LVxcdGlmICghYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSlcXG5rZXJuZWwvYnBmL2NvcmUuYzoyNjQwOlxcdFxcdHJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7XFxua2VybmVsL2JwZi9jb3JlLmMtMjY0MS1cXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NjEtXFxua2VybmVsL2JwZi9jb3JlLmM6MjY2MjpcXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2NjMtXFx0aWYgKHByb2ctXFx1MDAzZWppdGVkKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjgwPXN0cnVjdCBicGZfcHJvZyAqX19icGZfcHJvZ19zZWxlY3RfcnVudGltZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmZwLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjY5NS1cXHQgKiBibGluZGluZyBpcyBhY3RpdmUuIEhvd2V2ZXIsIGluIGNhc2Ugb2YgZXJyb3IgZHVyaW5nXFxua2VybmVsL2JwZi9jb3JlLmM6MjY5NjpcXHQgKiBibGluZGluZywgYnBmX2ludF9qaXRfY29tcGlsZSgpIG11c3QgYWx3YXlzIHJldHVybiBhXFxua2VybmVsL2JwZi9jb3JlLmMtMjY5Ny1cXHQgKiB2YWxpZCBwcm9ncmFtLCB3aGljaCBpbiB0aGlzIGNhc2Ugd291bGQgc2ltcGx5IG5vdFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzIxOD1jb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RhaWxfY2FsbF9wcm90byA9IHtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMzAtLyogU3R1YiBmb3IgSklUcyB0aGF0IG9ubHkgc3VwcG9ydCBjQlBGLiBlQlBGIHByb2dyYW1zIGFyZSBpbnRlcnByZXRlZC5cXG5rZXJuZWwvYnBmL2NvcmUuYzozMjMxOiAqIEl0IGlzIGVuY291cmFnZWQgdG8gaW1wbGVtZW50IGJwZl9pbnRfaml0X2NvbXBpbGUoKSBpbnN0ZWFkLCBzbyB0aGF0XFxua2VybmVsL2JwZi9jb3JlLmMtMzIzMi0gKiBlQlBGIGFuZCBpbXBsaWNpdGx5IGFsc28gY0JQRiBjYW4gZ2V0IEpJVGVkIVxcbmtlcm5lbC9icGYvY29yZS5jLTMyMzMtICovXFxua2VybmVsL2JwZi9jb3JlLmM6MzIzNDpzdHJ1Y3QgYnBmX3Byb2cgKiBfX3dlYWsgYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9jb3JlLmMtMzIzNS17XFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjM5LS8qIFN0dWIgZm9yIEpJVHMgdGhhdCBzdXBwb3J0IGVCUEYuIEFsbCBjQlBGIGNvZGUgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvXFxua2VybmVsL2JwZi9jb3JlLmM6MzI0MDogKiBlQlBGIGJ5IHRoZSBrZXJuZWwgYW5kIGlzIGxhdGVyIGNvbXBpbGVkIGJ5IGJwZl9pbnRfaml0X2NvbXBpbGUoKS5cXG5rZXJuZWwvYnBmL2NvcmUuYy0zMjQxLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzoyNS45Mjg3ODY0ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4ODkyOTM3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIGBicGZfaW50X2ppdF9jb21waWxlYCBpbiBga2VybmVsL2JwZi9jb3JlLmNgIGlzIGEgd2VhayBmdW5jdGlvbiBhbmQgaXMgbGlrZWx5IG92ZXJyaWRkZW4gYnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gVGhhdCBtYWtlcyBpdCBhIGRlY2VudCBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgaXQncyBhIGxpdHRsZSBnZW5lcmljLCBzbyBJIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuRm9yIHg4NiwgaXQgY2FsbHMgYGRvX2ppdGAsIHdoaWNoIG1pZ2h0IGJlIG1vcmUgdGFyZ2V0ZWQuIEFuZCwgb2YgY291cnNlLCBgYnBmX2NoZWNrYCBpcyB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnQsIHNvIHRoYXQncyBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlLiBUaGUgdmVyaWZpZXIgY2FsbHMgYGRvX2NoZWNrX21haW5gIHdoaWNoIHRoZW4gY2FsbHMgYGRvX2NoZWNrYCwgYnV0IGBicGZfY2hlY2tgIHNlZW1zIHNwZWNpZmljIGVub3VnaCBmb3Igbm93LiBJJ2xsIHNjYW4gZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHZlcmlmaWVyIGZvciBhZGRpdGlvbmFsIHRhcmdldHMsIGJ1dCBgYnBmX2NoZWNrYCBpcyBwcm9iYWJseSBzdWZmaWNpZW50LlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX0JQRl9KSVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgdGhlIG9idmlvdXMgb25lcy4gTm90aGluZyBzcGVjaWZpYyB0byBgQlBGX0xPQURfQUNRYCBhcyBhIGNvbmZpZ3VyYXRpb24sIGFzIGV4cGVjdGVkIOKAkyBpdCdzIGp1c3QgYSBCUEYgaW5zdHJ1Y3Rpb24uIEdpdmVuIHRoYXQgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IGBCUEZfTE9BRF9BQ1FgIGlzIGhhbmRsZWQgaW4gdGhlIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXJzLCBzcGVjaWZpY2FsbHkgaW4gcmVnYXJkcyB0byB1bnRydXN0ZWQgcG9pbnRlcnMgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzLlxuXG4qKlRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYC4qKlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZSBgYnBmX2NoZWNrYCBhbmQgYGJwZl9pbnRfaml0X2NvbXBpbGVgLCBhbmQgSSdsbCBuZWVkIHRvIGVuYWJsZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzcyLCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMDo1MzozMy4wMTc3MTkyODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3OTY0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YpIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIEJQRl9MT0FEX0FDUSBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgaXQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgcmF0aGVyIHRoYW4gYSBzdG9yZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcmVqZWN0aW5nIGl0IG9uIHVudHJ1c3RlZCBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfaW50X2ppdF9jb21waWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVycyAoeDg2LCBhcm02NCwgcmlzY3YpIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIEJQRl9MT0FEX0FDUSBpbnN0cnVjdGlvbiwgZW5zdXJpbmcgaXQgaXMgdHJlYXRlZCBhcyBhIGxvYWQgcmF0aGVyIHRoYW4gYSBzdG9yZSBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLCBhbmQgcmVqZWN0aW5nIGl0IG9uIHVudHJ1c3RlZCBwb2ludGVycyBpbiB0aGUgdmVyaWZpZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGJ5cGFzc2VzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6ftf9[1] Phase: Succeeded StartedAt: 2026-08-07 00:53:44 +0000 UTC FinishedAt: 2026-08-07 00:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 00:53:44 +0000 UTC FinishedAt: 2026-08-07 00:53:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2] Phase: Succeeded StartedAt: 2026-08-07 00:53:44 +0000 UTC FinishedAt: 2026-08-07 04:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 00:53:44 +0000 UTC FinishedAt: 2026-08-07 04:38:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","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-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 00:53:44 +0000 UTC FinishedAt: 2026-08-07 00:53:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 00:53:44 +0000 UTC FinishedAt: 2026-08-07 00:53:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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-workflow6ftf9/series-workflow6ftf9-convert-artifact-4249767747/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 00:53:54 +0000 UTC FinishedAt: 2026-08-07 01:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 00:53:54 +0000 UTC FinishedAt: 2026-08-07 01:10:03 +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:*b493815d-0638-48cc-b836-ef5b31ffa911,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-workflow6ftf9/series-workflow6ftf9-convert-artifact-4249767747/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": "94750087-ecfa-4315-bab1-08e5c7586a35", "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-workflow6ftf9/series-workflow6ftf9-build-action-715246001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 00:53:54 +0000 UTC FinishedAt: 2026-08-07 01:09:53 +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:*b493815d-0638-48cc-b836-ef5b31ffa911,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-workflow6ftf9/series-workflow6ftf9-convert-artifact-4249767747/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": "94750087-ecfa-4315-bab1-08e5c7586a35", "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-workflow6ftf9/series-workflow6ftf9-build-action-715246001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 01:10:03 +0000 UTC FinishedAt: 2026-08-07 01:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 01:10:03 +0000 UTC FinishedAt: 2026-08-07 01:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 01:10:03 +0000 UTC FinishedAt: 2026-08-07 01:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 01:10:03 +0000 UTC FinishedAt: 2026-08-07 01:10:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","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-workflow6ftf9/series-workflow6ftf9-convert-artifact-1555176954/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 01:10:13 +0000 UTC FinishedAt: 2026-08-07 01:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 01:10:13 +0000 UTC FinishedAt: 2026-08-07 01:12:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*94750087-ecfa-4315-bab1-08e5c7586a35,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-workflow6ftf9/series-workflow6ftf9-build-action-715246001/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-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 01:12:17 +0000 UTC FinishedAt: 2026-08-07 01:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 01:12:17 +0000 UTC FinishedAt: 2026-08-07 01:12:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 01:12:17 +0000 UTC FinishedAt: 2026-08-07 01:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 01:12:17 +0000 UTC FinishedAt: 2026-08-07 01:33:26 +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:*b493815d-0638-48cc-b836-ef5b31ffa911,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-workflow6ftf9/series-workflow6ftf9-convert-artifact-1555176954/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": "5e58af34-58ea-4bfa-a0f2-f24d2eb44457", "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-workflow6ftf9/series-workflow6ftf9-build-action-520928606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 01:12:17 +0000 UTC FinishedAt: 2026-08-07 01:33:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b493815d-0638-48cc-b836-ef5b31ffa911,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-workflow6ftf9/series-workflow6ftf9-convert-artifact-1555176954/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": "5e58af34-58ea-4bfa-a0f2-f24d2eb44457", "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-workflow6ftf9/series-workflow6ftf9-build-action-520928606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 01:33:26 +0000 UTC FinishedAt: 2026-08-07 01:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 01:33:26 +0000 UTC FinishedAt: 2026-08-07 01:33:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 01:33:26 +0000 UTC FinishedAt: 2026-08-07 01:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 01:33:26 +0000 UTC FinishedAt: 2026-08-07 01:35:05 +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:*5e58af34-58ea-4bfa-a0f2-f24d2eb44457,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-workflow6ftf9/series-workflow6ftf9-build-action-520928606/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-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 01:35:15 +0000 UTC FinishedAt: 2026-08-07 04:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 01:35:15 +0000 UTC FinishedAt: 2026-08-07 04:38:43 +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_check","bpf_int_jit_compile"],"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:*94750087-ecfa-4315-bab1-08e5c7586a35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5e58af34-58ea-4bfa-a0f2-f24d2eb44457,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-workflow6ftf9/series-workflow6ftf9-build-action-715246001/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-workflow6ftf9/series-workflow6ftf9-build-action-520928606/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 01:35:15 +0000 UTC FinishedAt: 2026-08-07 01:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 01:35:15 +0000 UTC FinishedAt: 2026-08-07 01:35:22 +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_check","bpf_int_jit_compile"],"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-workflow6ftf9/series-workflow6ftf9-convert-artifact-1194016303/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 01:35:15 +0000 UTC FinishedAt: 2026-08-07 01:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 01:35:15 +0000 UTC FinishedAt: 2026-08-07 01:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 01:35:15 +0000 UTC FinishedAt: 2026-08-07 01:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 01:35:25 +0000 UTC FinishedAt: 2026-08-07 04:38:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ftf9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"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_check","bpf_int_jit_compile"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8c7f55d60aa3512fd3da7e9cf313723460e487b4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a3ee9182-ce67-412b-81c3-86c5df191541","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 01:35:25 +0000 UTC FinishedAt: 2026-08-07 04:38:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*94750087-ecfa-4315-bab1-08e5c7586a35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5e58af34-58ea-4bfa-a0f2-f24d2eb44457,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-workflow6ftf9/series-workflow6ftf9-build-action-715246001/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-workflow6ftf9/series-workflow6ftf9-build-action-520928606/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-workflow6ftf9/series-workflow6ftf9-convert-artifact-1194016303/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,}