Name: series-workflow2ns7x Phase: Succeeded StartedAt: 2026-07-11 19:16:14 +0000 UTC FinishedAt: 2026-07-11 23:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[0] Phase: Succeeded StartedAt: 2026-07-11 19:16:14 +0000 UTC FinishedAt: 2026-07-11 19:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 19:16:14 +0000 UTC FinishedAt: 2026-07-11 19:33:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "db9a01c9-e278-40bd-9d68-db837f683d2b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_struct_ops_desc_init", "bpf_check_attach_target", "bpf_check_attach_btf_id_multi", "arch_prepare_bpf_trampoline" ], "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+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWVzIGZvciBjZXJ0YWluIGF0dGFjaCB0eXBlcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRiNjA3ZDI1NjdlYzQ0M2I1ZjU3MWZhYjE1YTk1ZDMxNDJiNGM5MzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOTozMjowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGRlNzUxNWVhMWJlYWU4Li4wYjhiZDMwZjdjODcwMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMzM2OSwxMSAmIzQzOzMzNjksOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuIFxuLVx0LyogZXh0cmEgcmVnaXN0ZXJzIGZvciBzdHJ1Y3QgYXJndW1lbnRzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9TVFJVQ1RfQVJHKVxuLVx0XHRcdG5yX3JlZ3MgJiM0Mzs9IChtLVx1MDAzZWFyZ19zaXplW2ldICYjNDM7IDcpIC8gOCAtIDE7XG4tXHR9XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5yX3JlZ3MgJiM0Mzs9IChtLVx1MDAzZWFyZ19zaXplW2ldICYjNDM7IDcpIC8gOCAtIDE7XG4gXG4gXHQvKiB4ODYtNjQgc3VwcG9ydHMgdXAgdG8gTUFYX0JQRl9GVU5DX0FSR1MgYXJndW1lbnRzLiAxLTZcbiBcdCAqIGFyZSBwYXNzZWQgdGhyb3VnaCByZWdzLCB0aGUgcmVtYWlucyBhcmUgdGhyb3VnaCBzdGFjay5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcbmluZGV4IDUxYjE2ZTVmNTUzNGUwLi40ZTdhNDhjMDJiZTVjZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5AQCAtNDQ1LDYgJiM0Mzs0NDUsMTggQEAgaW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXG4gXHRcdFx0Z290byBlcnJvdXQ7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgaW4gYSByZWdpc3RlciBwYWlyLFxuJiM0MztcdFx0ICogd2hpY2ggdGhlIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBkb2VzIG5vdCBwcmVzZXJ2ZSAob25seVxuJiM0MztcdFx0ICogOCBieXRlcyBvZiB0aGUgcmV0dXJuIHZhbHVlIGFyZSBzYXZlZCBhbmQgcmVzdG9yZWQpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc3Rfb3BzLVx1MDAzZWZ1bmNfbW9kZWxzW2ldLnJldF9zaXplIFx1MDAzZSA4KSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7ZnVuYyBwdHIgJXMgaW4gc3RydWN0ICVzIGhhcyBhIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bW5hbWUsIHN0X29wcy1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRcdGdvdG8gZXJyb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3R1Yl9mdW5jX2FkZHIgPSAqKHZvaWQgKiopKHN0X29wcy1cdTAwM2VjZmlfc3R1YnMgJiM0MzsgbW9mZik7XG4gXHRcdGVyciA9IHByZXBhcmVfYXJnX2luZm8oYnRmLCBzdF9vcHMtXHUwMDNlbmFtZSwgbW5hbWUsXG4gXHRcdFx0XHQgICAgICAgZnVuY19wcm90bywgc3R1Yl9mdW5jX2FkZHIsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA2NTE1ZDRkM2MwMDMyZi4uMjZkMjgxYjc3YTZlNzIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE4ODczLDYgJiM0MzsxODg3MywyMCBAQCBzdGF0aWMgaW50IGJ0Zl9pZF9hbGxvd19zbGVlcGFibGUodTMyIGJ0Zl9pZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCBzdHJ1Y3QgYlxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBCUEZfTU9ESUZZX1JFVFVSTjpcbiYjNDM7XHRjYXNlIEJQRl9UUkFDRV9GRVhJVDpcbiYjNDM7XHRjYXNlIEJQRl9UUkFDRV9GRVhJVF9NVUxUSTpcbiYjNDM7XHRjYXNlIEJQRl9UUkFDRV9GU0VTU0lPTjpcbiYjNDM7XHRjYXNlIEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSTpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5AQCAtMTkxMzcsNiAmIzQzOzE5MTUxLDE0IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4mIzQzO1x0XHRpZiAodGd0X2luZm8tXHUwMDNlZm1vZGVsLnJldF9zaXplIFx1MDAzZSA4IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKSB7XG4mIzQzO1x0XHRcdGJwZl9sb2cobG9nLFxuJiM0MztcdFx0XHRcdFwmIzM0O0F0dGFjaCB0byBmdW5jdGlvbiAlcyB3aXRoIGEgXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGF0dGFjaCB0eXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHRuYW1lKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogKi5tdWx0aSBwcm9ncmFtcyBkb24mIzM5O3QgbmVlZCBhbiBhZGRyZXNzIGR1cmluZyBwcm9ncmFtXG4gXHRcdCAqIHZlcmlmaWNhdGlvbiwgd2UganVzdCB0YWtlIHRoZSBtb2R1bGUgcmVmIGlmIG5lZWRlZC5cbkBAIC0xOTQxMyw2ICYjNDM7MTk0MzUsOSBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidFxuIFx0ZXJyID0gYnRmX2Rpc3RpbGxfZnVuY19wcm90byhOVUxMLCBidGYsIHQsIHRuYW1lLCBcdTAwMjZ0Z3RfaW5mby1cdTAwM2VmbW9kZWwpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAodGd0X2luZm8tXHUwMDNlZm1vZGVsLnJldF9zaXplIFx1MDAzZSA4IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdGlmIChidGZfaXNfbW9kdWxlKGJ0ZikpIHtcbiBcdFx0LyogVGhlIGJwZiBwcm9ncmFtIGFscmVhZHkgaG9sZHMgcmVmZXJlbmNlIHRvIG1vZHVsZS4gKi9cbiBcdFx0aWYgKFdBUk5fT05fT05DRSghcHJvZy1cdTAwM2VhdXgtXHUwMDNlbW9kKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfZmFpbHVyZS5jXG5pbmRleCBmOWY5ZTFjYjg3YmYxYy4uMzQ1ZGQyMWFkNjIxNzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmNcbkBAIC03Niw2ICYjNDM7NzYsMTYgQEAgc3RhdGljIHZvaWQgdGVzdF9mZXhpdF9ub3JldHVybnModm9pZClcbiBcdFx0XHQgICAgICAgXCYjMzQ7QXR0YWNoaW5nIGZleGl0L2ZzZXNzaW9uL2Ztb2RfcmV0IHRvIF9fbm9yZXR1cm4gZnVuY3Rpb24gJiMzOTtkb19leGl0JiMzOTsgaXMgcmVqZWN0ZWQuXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZmV4aXRfaW50MTI4X3JldCh2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBfX1NJWkVPRl9JTlQxMjhfX1xuJiM0MztcdHRlc3RfdHJhY2luZ19mYWlsX3Byb2coXCYjMzQ7ZmV4aXRfaW50MTI4X3JldFwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3dpdGggYSBcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXR0YWNoIHR5cGVcJiMzNDspO1xuJiM0MzsjZWxzZVxuJiM0MztcdHRlc3RfX3NraXAoKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZXN0X3RyYWNpbmdfZmFpbHVyZSh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2JwZl9zcGluX2xvY2tcJiMzNDspKVxuQEAgLTg2LDQgJiM0Mzs5Niw2IEBAIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZClcbiBcdFx0dGVzdF90cmFjaW5nX2RlbnkoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ZleGl0X25vcmV0dXJuc1wmIzM0OykpXG4gXHRcdHRlc3RfZmV4aXRfbm9yZXR1cm5zKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZmV4aXRfaW50MTI4X3JldFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2ZleGl0X2ludDEyOF9yZXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbmluZGV4IDZmOGMwYmZiMDQxNTU5Li4xNWI5NWQwMjM1YjUyMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt0cmFjaW5nX3N0cnVjdC5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cmFjaW5nX3N0cnVjdF9tYW55X2FyZ3Muc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3RyYWNpbmdfc3RydWN0X2ludDEyOC5za2VsLmhcJiMzNDtcbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9hcmdzKHZvaWQpXG4ge1xuQEAgLTExMiw2ICYjNDM7MTEzLDM5IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X21hbnlfYXJncyh2b2lkKVxuIFx0dHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbnQxMjhfYXJncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBfX2ludDEyOCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiBhIHJlZ2lzdGVyIHBhaXIgb24geDg2XzY0IGFuZFxuJiM0MztcdCAqIGFybTY0LCB3aGljaCB0aGUgdHJhbXBvbGluZSBwYWNrcyBpbnRvIHR3byBjb250ZXh0IHNsb3RzLiBPdGhlclxuJiM0MztcdCAqIGFyY2hpdGVjdHVyZXMgcGFzcyBhIF9faW50MTI4IGRpZmZlcmVudGx5IChlLmcuIHMzOTB4IHBhc3NlcyBsYXJnZXJcbiYjNDM7XHQgKiBhcmd1bWVudHMgYnkgcmVmZXJlbmNlKSwgc28gb25seSBleGVyY2lzZSB0aGlzIG9uIHg4Nl82NCBhbmQgYXJtNjQuXG4mIzQzO1x0ICovXG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4mIzQzO1x0c3RydWN0IHRyYWNpbmdfc3RydWN0X2ludDEyOCAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3RyYWNpbmdfc3RydWN0X2ludDEyOF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IHRyYWNpbmdfc3RydWN0X2ludDEyOF9fYXR0YWNoKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBkZXN0cm95X3NrZWw7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9PSyh0cmlnZ2VyX21vZHVsZV90ZXN0X3JlYWQoMjU2KSwgXCYjMzQ7dHJpZ2dlcl9yZWFkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRfYiwgMiwgXCYjMzQ7dDpiXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldF9jLCAzLCBcJiMzNDt0OmNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0X3JldCwgNiwgXCYjMzQ7dCByZXRcJiMzNDspO1xuJiM0MztcbiYjNDM7ZGVzdHJveV9za2VsOlxuJiM0MztcdHRyYWNpbmdfc3RydWN0X2ludDEyOF9fZGVzdHJveShza2VsKTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR0ZXN0X19za2lwKCk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRlc3RfdW5pb25fYXJncyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0cmFjaW5nX3N0cnVjdCAqc2tlbDtcbkBAIC0xNDUsNiAmIzQzOzE3OSw4IEBAIHZvaWQgdGVzdF90cmFjaW5nX3N0cnVjdCh2b2lkKVxuIFx0XHR0ZXN0X3N0cnVjdF9hcmdzKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzdHJ1Y3RfbWFueV9hcmdzXCYjMzQ7KSlcbiBcdFx0dGVzdF9zdHJ1Y3RfbWFueV9hcmdzKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7aW50MTI4X2FyZ3NcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9pbnQxMjhfYXJncygpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dW5pb25fYXJnc1wmIzM0OykpXG4gXHRcdHRlc3RfdW5pb25fYXJncygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmNcbmluZGV4IDY1ZTQ4NWM0NDY4YzYyLi5mN2EwOTU3Njc2Nzk1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfZmFpbHVyZS5jXG5AQCAtMzAsMyAmIzQzOzMwLDkgQEAgaW50IEJQRl9QUk9HKGZleGl0X25vcmV0dXJucylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P2ZleGl0L2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGZleGl0X2ludDEyOF9yZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NjM4ZGZlYzFmMzhlZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfc3RydWN0X2ludDEyOC5jXG5AQCAtMCwwICYjNDM7MSwxOCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7bG9uZyB0X2IsIHRfYywgdF9yZXQ7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmV4aXQvYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9pbnQxMjhfYXJnX2ZleGl0KHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dF9iID0gKGludCljdHhbMl07XG4mIzQzO1x0dF9jID0gKGxvbmcpY3R4WzNdO1xuJiM0MztcdHRfcmV0ID0gKGxvbmcpY3R4WzRdO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCAzMGYxY2QyMzA5M2NiZS4uZWIwZjliNWUxOGQ4NWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5AQCAtMTYxLDYgJiM0MzsxNjEsMzMgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9hcmdfcHRyX3RvX3N0cnVjdChzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfc3RydWN0X2FyZ18xICphKSB7XG4gXHRyZXR1cm4gYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdDtcbiB9XG4gXG4mIzQzOyNpZmRlZiBfX1NJWkVPRl9JTlQxMjhfX1xuJiM0Mztub2lubGluZSBfX2ludDEyOFxuJiM0MzticGZfdGVzdG1vZF90ZXN0X2ludDEyOF9yZXQoaW50IGEpXG4mIzQzO3tcbiYjNDM7XHRicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9hcmdfcmVzdWx0ID0gYTtcbiYjNDM7XHRyZXR1cm4gKF9faW50MTI4KWE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBfX2ludDEyOCAmIzM5O2EmIzM5OyBpcyB0aGUgZmlyc3QgYXJndW1lbnQgb24gcHVycG9zZS4gT24gYXJtNjQgYSAxNi1ieXRlXG4mIzQzOyAqIGFyZ3VtZW50IG11c3Qgc3RhcnQgaW4gYW4gZXZlbi1udW1iZXJlZCByZWdpc3RlciBwYWlyLCBzbyBwbGFjaW5nIGl0XG4mIzQzOyAqIGFmdGVyIGEgc2luZ2xlLXJlZ2lzdGVyIHNjYWxhciB3b3VsZCBsZWF2ZSBhIHBhZGRpbmcgcmVnaXN0ZXIgKHgxKVxuJiM0MzsgKiB1bnVzZWQuIHBhaG9sZSBtYXBzIHBhcmFtZXRlcnMgdG8gcmVnaXN0ZXJzIHBvc2l0aW9uYWxseSBhbmQgd291bGQgdGhlblxuJiM0MzsgKiBzZWUgdGhlIGZvbGxvd2luZyBhcmd1bWVudCBpbiBhbiBcJiMzNDt1bmV4cGVjdGVkXCYjMzQ7IHJlZ2lzdGVyIGFuZCBza2lwIEJURlxuJiM0MzsgKiBlbmNvZGluZyBvZiB0aGUgd2hvbGUgZnVuY3Rpb24sIG1ha2luZyBpdCB1bmF0dGFjaGFibGUuIEtlZXBpbmcgdGhlXG4mIzQzOyAqIF9faW50MTI4IGZpcnN0ICh4MDp4MSkgYXZvaWRzIHRoZSBwYWRkaW5nIHdoaWxlIHN0aWxsIGV4ZXJjaXNpbmcgdGhlXG4mIzQzOyAqIHRyYW1wb2xpbmUgcGFja2luZyBvZiBhIDEyOC1iaXQgYXJndW1lbnQgdG9nZXRoZXIgd2l0aCB0aGUgdHJhaWxpbmdcbiYjNDM7ICogaW50IGFuZCBsb25nIGFyZ3VtZW50cy5cbiYjNDM7ICovXG4mIzQzO25vaW5saW5lIGxvbmdcbiYjNDM7YnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnKF9faW50MTI4IGEsIGludCBiLCBsb25nIGMpXG4mIzQzO3tcbiYjNDM7XHRicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9hcmdfcmVzdWx0ID0gKGxvbmcpYSAmIzQzOyBiICYjNDM7IGM7XG4mIzQzO1x0cmV0dXJuIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQ7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIF9fd2VhayBub2lubGluZSB2b2lkIGJwZl90ZXN0bW9kX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfbmFtZSh2b2lkKVxuIHtcbiB9XG5AQCAtNTE0LDYgJiM0Mzs1NDEsMTEgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcbiBcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfYXJnX3B0cl90b19zdHJ1Y3QoXHUwMDI2c3RydWN0X2FyZzFfMik7XG4gXG4mIzQzOyNpZmRlZiBfX1NJWkVPRl9JTlQxMjhfX1xuJiM0MztcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldChpKTtcbiYjNDM7XHQodm9pZClicGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmcoKF9faW50MTI4KTEsIDIsIDMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHQodm9pZCl0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX3RwKE5VTEwpO1xuIFxuIFx0YnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWVzIGZvciBjZXJ0YWluIGF0dGFjaCB0eXBlcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGI2MDdkMjU2N2VjNDQzYjVmNTcxZmFiMTVhOTVkMzE0MmI0YzkzMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDE5OjMyOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGRlNzUxNWVhMWJlYWU4Li4wYjhiZDMwZjdjODcwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMzM2OSwxMSAmIzQzOzMzNjksOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbQogCVdBUk5fT05fT05DRSgoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpICZhbXA7JmFtcDsKIAkJICAgICAoZmxhZ3MgJmFtcDsgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpOwogCi0JLyogZXh0cmEgcmVnaXN0ZXJzIGZvciBzdHJ1Y3QgYXJndW1lbnRzICovCi0JZm9yIChpID0gMDsgaSAmbHQ7IG0tJmd0O25yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9TVFJVQ1RfQVJHKQotCQkJbnJfcmVncyAmIzQzOz0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gOCAtIDE7Ci0JfQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbS0mZ3Q7bnJfYXJnczsgaSYjNDM7JiM0MzspCiYjNDM7CQlucl9yZWdzICYjNDM7PSAobS0mZ3Q7YXJnX3NpemVbaV0gJiM0MzsgNykgLyA4IC0gMTsKIAogCS8qIHg4Ni02NCBzdXBwb3J0cyB1cCB0byBNQVhfQlBGX0ZVTkNfQVJHUyBhcmd1bWVudHMuIDEtNgogCSAqIGFyZSBwYXNzZWQgdGhyb3VnaCByZWdzLCB0aGUgcmVtYWlucyBhcmUgdGhyb3VnaCBzdGFjay4KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYwppbmRleCA1MWIxNmU1ZjU1MzRlMC4uNGU3YTQ4YzAyYmU1Y2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMKQEAgLTQ0NSw2ICYjNDM7NDQ1LDE4IEBAIGludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLAogCQkJZ290byBlcnJvdXQ7CiAJCX0KIAomIzQzOwkJLyoKJiM0MzsJCSAqIEEgJmd0OzggYnl0ZSByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgaW4gYSByZWdpc3RlciBwYWlyLAomIzQzOwkJICogd2hpY2ggdGhlIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBkb2VzIG5vdCBwcmVzZXJ2ZSAob25seQomIzQzOwkJICogOCBieXRlcyBvZiB0aGUgcmV0dXJuIHZhbHVlIGFyZSBzYXZlZCBhbmQgcmVzdG9yZWQpLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc3Rfb3BzLSZndDtmdW5jX21vZGVsc1tpXS5yZXRfc2l6ZSAmZ3Q7IDgpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7ZnVuYyBwdHIgJXMgaW4gc3RydWN0ICVzIGhhcyBhICZndDs4IGJ5dGUgcmV0dXJuIHZhbHVlLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0OywKJiM0MzsJCQkJbW5hbWUsIHN0X29wcy0mZ3Q7bmFtZSk7CiYjNDM7CQkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQkJZ290byBlcnJvdXQ7CiYjNDM7CQl9CiYjNDM7CiAJCXN0dWJfZnVuY19hZGRyID0gKih2b2lkICoqKShzdF9vcHMtJmd0O2NmaV9zdHVicyAmIzQzOyBtb2ZmKTsKIAkJZXJyID0gcHJlcGFyZV9hcmdfaW5mbyhidGYsIHN0X29wcy0mZ3Q7bmFtZSwgbW5hbWUsCiAJCQkJICAgICAgIGZ1bmNfcHJvdG8sIHN0dWJfZnVuY19hZGRyLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDY1MTVkNGQzYzAwMzJmLi4yNmQyODFiNzdhNmU3MiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTg4NzMsNiAmIzQzOzE4ODczLDIwIEBAIHN0YXRpYyBpbnQgYnRmX2lkX2FsbG93X3NsZWVwYWJsZSh1MzIgYnRmX2lkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHN0cnVjdCBiCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgQlBGX01PRElGWV9SRVRVUk46CiYjNDM7CWNhc2UgQlBGX1RSQUNFX0ZFWElUOgomIzQzOwljYXNlIEJQRl9UUkFDRV9GRVhJVF9NVUxUSToKJiM0MzsJY2FzZSBCUEZfVFJBQ0VfRlNFU1NJT046CiYjNDM7CWNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJOgomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZywKQEAgLTE5MTM3LDYgJiM0MzsxOTE1MSwxNCBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwogCiYjNDM7CQlpZiAodGd0X2luZm8tJmd0O2Ztb2RlbC5yZXRfc2l6ZSAmZ3Q7IDggJmFtcDsmYW1wOwomIzQzOwkJICAgIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKHByb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlKSkgewomIzQzOwkJCWJwZl9sb2cobG9nLAomIzQzOwkJCQkmIzM0O0F0dGFjaCB0byBmdW5jdGlvbiAlcyB3aXRoIGEgJmd0OzggYnl0ZSByZXR1cm4gdmFsdWUgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhdHRhY2ggdHlwZVxuJiMzNDssCiYjNDM7CQkJCXRuYW1lKTsKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCiAJCSAqICoubXVsdGkgcHJvZ3JhbXMgZG9uJiMzOTt0IG5lZWQgYW4gYWRkcmVzcyBkdXJpbmcgcHJvZ3JhbQogCQkgKiB2ZXJpZmljYXRpb24sIHdlIGp1c3QgdGFrZSB0aGUgbW9kdWxlIHJlZiBpZiBuZWVkZWQuCkBAIC0xOTQxMyw2ICYjNDM7MTk0MzUsOSBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidAogCWVyciA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oTlVMTCwgYnRmLCB0LCB0bmFtZSwgJmFtcDt0Z3RfaW5mby0mZ3Q7Zm1vZGVsKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKJiM0MzsJaWYgKHRndF9pbmZvLSZndDtmbW9kZWwucmV0X3NpemUgJmd0OyA4ICZhbXA7JmFtcDsKJiM0MzsJICAgIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKHByb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAoYnRmX2lzX21vZHVsZShidGYpKSB7CiAJCS8qIFRoZSBicGYgcHJvZ3JhbSBhbHJlYWR5IGhvbGRzIHJlZmVyZW5jZSB0byBtb2R1bGUuICovCiAJCWlmIChXQVJOX09OX09OQ0UoIXByb2ctJmd0O2F1eC0mZ3Q7bW9kKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmMKaW5kZXggZjlmOWUxY2I4N2JmMWMuLjM0NWRkMjFhZDYyMTcwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuYwpAQCAtNzYsNiAmIzQzOzc2LDE2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZmV4aXRfbm9yZXR1cm5zKHZvaWQpCiAJCQkgICAgICAgJiMzNDtBdHRhY2hpbmcgZmV4aXQvZnNlc3Npb24vZm1vZF9yZXQgdG8gX19ub3JldHVybiBmdW5jdGlvbiAmIzM5O2RvX2V4aXQmIzM5OyBpcyByZWplY3RlZC4mIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZleGl0X2ludDEyOF9yZXQodm9pZCkKJiM0Mzt7CiYjNDM7I2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fCiYjNDM7CXRlc3RfdHJhY2luZ19mYWlsX3Byb2coJiMzNDtmZXhpdF9pbnQxMjhfcmV0JiMzNDssCiYjNDM7CQkJICAgICAgICYjMzQ7d2l0aCBhICZndDs4IGJ5dGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXR0YWNoIHR5cGUmIzM0Oyk7CiYjNDM7I2Vsc2UKJiM0MzsJdGVzdF9fc2tpcCgpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2JwZl9zcGluX2xvY2smIzM0OykpCkBAIC04Niw0ICYjNDM7OTYsNiBAQCB2b2lkIHRlc3RfdHJhY2luZ19mYWlsdXJlKHZvaWQpCiAJCXRlc3RfdHJhY2luZ19kZW55KCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtmZXhpdF9ub3JldHVybnMmIzM0OykpCiAJCXRlc3RfZmV4aXRfbm9yZXR1cm5zKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZmV4aXRfaW50MTI4X3JldCYjMzQ7KSkKJiM0MzsJCXRlc3RfZmV4aXRfaW50MTI4X3JldCgpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmMKaW5kZXggNmY4YzBiZmIwNDE1NTkuLjE1Yjk1ZDAyMzViNTIyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX3N0cnVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmMKQEAgLTQsNiAmIzQzOzQsNyBAQAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKICNpbmNsdWRlICYjMzQ7dHJhY2luZ19zdHJ1Y3Quc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0cmFjaW5nX3N0cnVjdF9pbnQxMjguc2tlbC5oJiMzNDsKIAogc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3RfYXJncyh2b2lkKQogewpAQCAtMTEyLDYgJiM0MzsxMTMsMzkgQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3RfbWFueV9hcmdzKHZvaWQpCiAJdHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzX19kZXN0cm95KHNrZWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbnQxMjhfYXJncyh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogX19pbnQxMjggYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYSByZWdpc3RlciBwYWlyIG9uIHg4Nl82NCBhbmQKJiM0MzsJICogYXJtNjQsIHdoaWNoIHRoZSB0cmFtcG9saW5lIHBhY2tzIGludG8gdHdvIGNvbnRleHQgc2xvdHMuIE90aGVyCiYjNDM7CSAqIGFyY2hpdGVjdHVyZXMgcGFzcyBhIF9faW50MTI4IGRpZmZlcmVudGx5IChlLmcuIHMzOTB4IHBhc3NlcyBsYXJnZXIKJiM0MzsJICogYXJndW1lbnRzIGJ5IHJlZmVyZW5jZSksIHNvIG9ubHkgZXhlcmNpc2UgdGhpcyBvbiB4ODZfNjQgYW5kIGFybTY0LgomIzQzOwkgKi8KJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQomIzQzOwlzdHJ1Y3QgdHJhY2luZ19zdHJ1Y3RfaW50MTI4ICpza2VsOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3RyYWNpbmdfc3RydWN0X2ludDEyOF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2goc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0cmFjaW5nX3N0cnVjdF9pbnQxMjhfX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gZGVzdHJveV9za2VsOwomIzQzOwomIzQzOwlBU1NFUlRfT0sodHJpZ2dlcl9tb2R1bGVfdGVzdF9yZWFkKDI1NiksICYjMzQ7dHJpZ2dlcl9yZWFkJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0X2IsIDIsICYjMzQ7dDpiJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0X2MsIDMsICYjMzQ7dDpjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0X3JldCwgNiwgJiMzNDt0IHJldCYjMzQ7KTsKJiM0MzsKJiM0MztkZXN0cm95X3NrZWw6CiYjNDM7CXRyYWNpbmdfc3RydWN0X2ludDEyOF9fZGVzdHJveShza2VsKTsKJiM0MzsjZWxzZQomIzQzOwl0ZXN0X19za2lwKCk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF91bmlvbl9hcmdzKHZvaWQpCiB7CiAJc3RydWN0IHRyYWNpbmdfc3RydWN0ICpza2VsOwpAQCAtMTQ1LDYgJiM0MzsxNzksOCBAQCB2b2lkIHRlc3RfdHJhY2luZ19zdHJ1Y3Qodm9pZCkKIAkJdGVzdF9zdHJ1Y3RfYXJncygpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c3RydWN0X21hbnlfYXJncyYjMzQ7KSkKIAkJdGVzdF9zdHJ1Y3RfbWFueV9hcmdzKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aW50MTI4X2FyZ3MmIzM0OykpCiYjNDM7CQl0ZXN0X2ludDEyOF9hcmdzKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1bmlvbl9hcmdzJiMzNDspKQogCQl0ZXN0X3VuaW9uX2FyZ3MoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuYwppbmRleCA2NWU0ODVjNDQ2OGM2Mi4uZjdhMDk1NzY3Njc5NTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmMKQEAgLTMwLDMgJiM0MzszMCw5IEBAIGludCBCUEZfUFJPRyhmZXhpdF9ub3JldHVybnMpCiB7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P2ZleGl0L2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhmZXhpdF9pbnQxMjhfcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfc3RydWN0X2ludDEyOC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfc3RydWN0X2ludDEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NjM4ZGZlYzFmMzhlZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguYwpAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsKJiM0Mztsb25nIHRfYiwgdF9jLCB0X3JldDsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZXhpdC9icGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmcmIzM0OykKJiM0MztpbnQgdGVzdF9pbnQxMjhfYXJnX2ZleGl0KHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJdF9iID0gKGludCljdHhbMl07CiYjNDM7CXRfYyA9IChsb25nKWN0eFszXTsKJiM0MzsJdF9yZXQgPSAobG9uZyljdHhbNF07CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwppbmRleCAzMGYxY2QyMzA5M2NiZS4uZWIwZjliNWUxOGQ4NWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwpAQCAtMTYxLDYgJiM0MzsxNjEsMzMgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9hcmdfcHRyX3RvX3N0cnVjdChzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfc3RydWN0X2FyZ18xICphKSB7CiAJcmV0dXJuIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQ7CiB9CiAKJiM0MzsjaWZkZWYgX19TSVpFT0ZfSU5UMTI4X18KJiM0Mztub2lubGluZSBfX2ludDEyOAomIzQzO2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldChpbnQgYSkKJiM0Mzt7CiYjNDM7CWJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQgPSBhOwomIzQzOwlyZXR1cm4gKF9faW50MTI4KWE7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIF9faW50MTI4ICYjMzk7YSYjMzk7IGlzIHRoZSBmaXJzdCBhcmd1bWVudCBvbiBwdXJwb3NlLiBPbiBhcm02NCBhIDE2LWJ5dGUKJiM0MzsgKiBhcmd1bWVudCBtdXN0IHN0YXJ0IGluIGFuIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgcGFpciwgc28gcGxhY2luZyBpdAomIzQzOyAqIGFmdGVyIGEgc2luZ2xlLXJlZ2lzdGVyIHNjYWxhciB3b3VsZCBsZWF2ZSBhIHBhZGRpbmcgcmVnaXN0ZXIgKHgxKQomIzQzOyAqIHVudXNlZC4gcGFob2xlIG1hcHMgcGFyYW1ldGVycyB0byByZWdpc3RlcnMgcG9zaXRpb25hbGx5IGFuZCB3b3VsZCB0aGVuCiYjNDM7ICogc2VlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQgaW4gYW4gJiMzNDt1bmV4cGVjdGVkJiMzNDsgcmVnaXN0ZXIgYW5kIHNraXAgQlRGCiYjNDM7ICogZW5jb2Rpbmcgb2YgdGhlIHdob2xlIGZ1bmN0aW9uLCBtYWtpbmcgaXQgdW5hdHRhY2hhYmxlLiBLZWVwaW5nIHRoZQomIzQzOyAqIF9faW50MTI4IGZpcnN0ICh4MDp4MSkgYXZvaWRzIHRoZSBwYWRkaW5nIHdoaWxlIHN0aWxsIGV4ZXJjaXNpbmcgdGhlCiYjNDM7ICogdHJhbXBvbGluZSBwYWNraW5nIG9mIGEgMTI4LWJpdCBhcmd1bWVudCB0b2dldGhlciB3aXRoIHRoZSB0cmFpbGluZwomIzQzOyAqIGludCBhbmQgbG9uZyBhcmd1bWVudHMuCiYjNDM7ICovCiYjNDM7bm9pbmxpbmUgbG9uZwomIzQzO2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X2FyZyhfX2ludDEyOCBhLCBpbnQgYiwgbG9uZyBjKQomIzQzO3sKJiM0MzsJYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdCA9IChsb25nKWEgJiM0MzsgYiAmIzQzOyBjOwomIzQzOwlyZXR1cm4gYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBfX3dlYWsgbm9pbmxpbmUgdm9pZCBicGZfdGVzdG1vZF9sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nX25hbWUodm9pZCkKIHsKIH0KQEAgLTUxNCw2ICYjNDM7NTQxLDExIEBAIGJwZl90ZXN0bW9kX3Rlc3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAKIAkodm9pZClicGZfdGVzdG1vZF90ZXN0X2FyZ19wdHJfdG9fc3RydWN0KCZhbXA7c3RydWN0X2FyZzFfMik7CiAKJiM0MzsjaWZkZWYgX19TSVpFT0ZfSU5UMTI4X18KJiM0MzsJKHZvaWQpYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfcmV0KGkpOwomIzQzOwkodm9pZClicGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmcoKF9faW50MTI4KTEsIDIsIDMpOwomIzQzOyNlbmRpZgomIzQzOwogCSh2b2lkKXRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfcmF3X3RwX251bGxfdHAoTlVMTCk7CiAKIAlicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NzEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA5NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU3Vic3lzdGVtIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGxhcmdlIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcyBpbiBCUEYgdHJhbXBvbGluZXMgYW5kIHN0cnVjdCBvcHMuIFRoZSBrZXkgaWRlYSBoZXJlIGlzIHRvIGNvcnJlY3RseSBoYW5kbGUgdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMsIGxpa2UgYF9faW50MTI4YCBvciBzaXphYmxlIHN0cnVjdHMsIHdoaWNoIGFyZSBub3cgYmVpbmcgYWRkcmVzc2VkLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCkZpcnN0LCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhlIGNoYW5nZSBpbiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIHNpZ25pZmljYW50LiBUaGUgY29kZSBub3cgdW5jb25kaXRpb25hbGx5IGFsbG9jYXRlcyBleHRyYSByZWdpc3RlcnMgZm9yIGFueSBhcmd1bWVudCBsYXJnZXIgdGhhbiA4IGJ5dGVzLCBhcyBvcHBvc2VkIHRvIG9ubHkgZm9yIHN0cnVjdCBhcmd1bWVudHMuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBmaXggZm9yIHRoZSBvcmlnaW5hbCBsb2dpYy4KClRoZW4sIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHRoZXJlJiMzOTtzIGEgbmV3IGBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbGAgZnVuY3Rpb24gdGhhdCBlc3NlbnRpYWxseSBnYXRlcyB0aGUgYXR0YWNobWVudCB0byBmdW5jdGlvbnMgYmFzZWQgb24gcmV0dXJuIHNpemUgZm9yIGNlcnRhaW4gYXR0YWNoIHR5cGVzIGxpa2UgYEJQRl9NT0RJRllfUkVUVVJOYCBhbmQgYEJQRl9UUkFDRV9GRVhJVGAuIFRoaXMgcHJldmVudHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGdlbmVyYXRlIGluY29ycmVjdCByZXR1cm4gc2l6ZXMgaWYgdGhlIHNpemUgZXhjZWVkcyA4IGJ5dGVzLgoKVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSBpdCBoYW5kbGVzIHRoZXNlIGVkZ2UgY2FzZXMgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGhvbGVzLgoKSSYjMzk7bSB0aGlua2luZyB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyBzaG91bGQgYmU6CiogICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBJIGJlbGlldmUgdGhpcyBpcyBnb29kIGJlY2F1c2UgaXTigJlzIGNhbGxlZCBkdXJpbmcgdGhlIGxvYWRpbmcgYW5kIGF0dGFjaGluZyBvZiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIG5vdCBhbiBleGVjdXRpb24gYm90dGxlbmVjay4KKiAgIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgIOKAkyBmb3IgQlBGIHN0cnVjdF9vcHMgcmVnaXN0cmF0aW9uLgoqICAgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YCBhbmQgYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYCDigJMgYmVjYXVzZSB0aGVzZSBhcmUgY2FsbGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24uCgpJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgQlBGIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19CUEZfSklUYCwgYW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLgoKRmluYWxseSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgaWYgdGhvc2UgZGVwZW5kIG9uIHRoZSBCUEYgY29uZmlndXJhdGlvbnMsIGJ5IHVzaW5nIGBncmVwcGVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0yMjYyPWludCBicGZfc3RydWN0X29wc190ZXN0X3J1bihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIyNjQtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjIyNjU6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIyNjYtXHRcdFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTMyND1pbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzMwLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjMzMTppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zMzItXHRcdFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYz05ODM1PWJ0Zl9hZGRfc3RydWN0X29wcyhzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTg2Ni1cbmtlcm5lbC9icGYvYnRmLmM6OTg2NzpcdGVyciA9IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChcdTAwMjZ0YWItXHUwMDNlb3BzW2J0Zi1cdTAwM2VzdHJ1Y3Rfb3BzX3RhYi1cdTAwM2VjbnRdLCBidGYsIGxvZyk7XG5rZXJuZWwvYnBmL2J0Zi5jLTk4NjgtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEJQRiBWZXJpZmljYXRpb24gYW5kIEpJVCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBCUEYgYnl0ZWNvZGUgZ2V0cyB2ZXJpZmllZCBhbmQgdGhlbiBwb3RlbnRpYWxseSBKdXN0LUluLVRpbWUgY29tcGlsZWQuIFRoZSBjb3JlIG9mIHRoaXMgcHJvY2VzcywgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBuZWVkIHRvIGV4YW1pbmUgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGFuZCB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHR3byBzcGVjaWZpYyBmaWxlczogYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJIGtub3cgdGhhdCBgdmVyaWZpZXIuY2Agc2hvdWxkIGNvbnRhaW4gdGhlIGxvZ2ljIHRvIGFuYWx5emUgdGhlIEJQRiBieXRlY29kZSBmb3Igc2FmZXR5IGFuZCBhZGhlcmVuY2UgdG8gcnVsZXMgYmVmb3JlIGl0JiMzOTtzIGV4ZWN1dGVkIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgY3Jhc2hlcyBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGJwZl9qaXRfY29tcC5jYCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFjdHVhbCBKSVQgY29tcGlsYXRpb24gaGFwcGVucywgc3BlY2lmaWNhbGx5IGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgdHJhbnNsYXRpbmcgdGhlIEJQRiBpbnN0cnVjdGlvbnMgaW50byBuYXRpdmUgeDg2IG1hY2hpbmUgY29kZSBmb3IgZmFzdGVyIGV4ZWN1dGlvbi4gU28sIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZpbGVzIGlzIGtleS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgdmVyaWZpZXIsIGJ1dCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgdGhlIEpJVCBjb21waWxlciB3aWxsIGhhdmUgaXRzIG93biBleHBlY3RhdGlvbnMgYW5kIGFzc3VtcHRpb25zIGJhc2VkIG9uIHdoYXQgdGhlIHZlcmlmaWVyIGFsbG93cy4gVGhlIGNvbXBpbGF0aW9uIG1pZ2h0IGZhaWwgb3IgYmUgc3Vib3B0aW1hbCBpZiB0aGUgdmVyaWZpZXIgZG9lc24mIzM5O3QgZW5mb3JjZSB0aGUgcmlnaHQgY29uc3RyYWludHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE4MDk9c3RhdGljIHZvaWQgc2lnbl9leHRlbmQoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJkLCBpbnQgcmosIHU4IHNpemUsIGJvb2wgc2lnbilcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE4MzYtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE4Mzc6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTgzOC1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjE0ND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNjEtXHRqaXRfZmlsbF9ob2xlKGltYWdlLCAodW5zaWduZWQgaW50KShyb19pbWFnZV9lbmQgLSByb19pbWFnZSkpO1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTYyOlx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2Y3R4LCBpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE2My1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yMTgyPWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTkxLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTkyOlx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2Y3R4LCBcdTAwMjZpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE5My1cbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTY4Nj1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldCh1MzIgKmltYWdlLCB1MzIgKnJvX2ltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy03MjMtLypcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NzI0OiAqIFJlZmVyIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkgZm9yIHN0YWNrIGNvbXBvbmVudCBkZXRhaWxzLlxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy03MjUtICpcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTc5Nz1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9yZXN0b3JlX2FyZ3Nfc3RhY2sodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtODExLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo4MTI6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTgxMy1cdFx0XHRcdFx0IHZvaWQgKnJ3X2ltYWdlX2VuZCwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz0xMTkyPWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTk3LVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMTk4Olx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIE5VTEwsIE5VTEwsIE5VTEwsIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTExOTktXHRyZXR1cm4gcmV0O1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9MTIwMj1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTIxOC1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTIxOTpcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCByd19pbWFnZSwgcndfaW1hZ2UgJiM0Mzsgc2l6ZSwgaW1hZ2UsIG0sXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyMjAtXHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTk5PXN0YXRpYyBpbnQgaW52b2tlX2JwZihzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0biwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMjEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEwMjI6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTAyMy1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMDc9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTYtXHRjdHgucm9faW5zbnMgPSBOVUxMO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzE3Olx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIG0sIHRub2RlcywgZnVuY19hZGRyLCBmbGFncywgXHUwMDI2Y3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMxOC1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzQ4LVx0Y3R4LnJvX2luc25zID0gcm9faW1hZ2U7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNDk6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzLCBcdTAwMjZjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzUwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2MzI9c3RhdGljIGludCBhbGxvY19zdGFjayhzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCwgc2l6ZV90IHNpemUpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjQ5LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjUwOnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2NTEtXHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI5NjY9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NzQtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5NzU6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgXHUwMDI2dGppdCwgbSwgZmxhZ3MsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NzYtXHRcdFx0XHRcdCAgICB0bm9kZXMsIG9yaWdfY2FsbCk7XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yOTgxPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5MC1cdG1lbXNldChcdTAwMjZ0aml0LCAwLCBzaXplb2YodGppdCkpO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyOTkxOlx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIFx1MDAyNnRqaXQsIG0sIGZsYWdzLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTkyLVx0XHRcdFx0XHQgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwNC1cdHRqaXQuY29tbW9uLnByZ19idWYgPSBpbWFnZTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MzAwNTpcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBcdTAwMjZ0aml0LCBtLCBmbGFncyxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwNi1cdFx0XHRcdFx0ICAgIHRub2RlcywgZnVuY19hZGRyKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzI0ND1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzNDUtICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzM0NjpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMzQ3LVx0XHRcdFx0XHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY2Nj1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjgxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2ODI6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICYjNDM7IHNpemUsIGltYWdlLCBtLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2ODMtXHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjk1PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MDEtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcwMjpcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzAzLVx0ICogVGhpcyB3aWxsIE5PVCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIGRpcmVjdCBtYXAsIGFzIHdlIGRvIG5vdFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEyLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3MTM6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICYjNDM7IFBBR0VfU0laRSwgaW1hZ2UsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxNC1cdFx0XHRcdFx0ICAgIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGdldCB0aGlzIEJQRiB0cmFtcG9saW5lIHNldHVwIHJpZ2h0LiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZW5hYmxlIGEgZmV3IGtleSBjb25maWd1cmF0aW9ucyBpbiB0aGUga2VybmVsLiBGaXJzdCwgb2J2aW91c2x5LCBJIG5lZWQgYEJQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbC4gVGhlbiwgYEJQRl9KSVRgIGZvciBKdXN0LUluLVRpbWUgY29tcGlsYXRpb24sIGNhbiYjMzk7dCByZWFsbHkgZG8gbXVjaCB3aXRob3V0IHRoYXQuIFRoZSBgREVCVUdfSU5GT19CVEZgIG9wdGlvbiBpcyBhbHNvIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgaW50cm9zcGVjdGlvbiB3aXRoIEJURiAoQlBGIFR5cGUgRm9ybWF0KS4gQW5kIHNpbmNlIHRoaXMgKmlzKiBhYm91dCBCUEYgdHJhbXBvbGluZXMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCBgRlRSQUNFYC4gRmluYWxseSwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIHdpbGwgbmVlZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIHNvIHRoYXQgdGhlIEJQRiB0cmFtcG9saW5lcyBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1RSQU1QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZzogV2hlcmUgdG8gRmluZCB0aGUgVHJhbXBvbGluZT8qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYSB0cmFtcG9saW5lLCBwcmVzdW1hYmx5IHNvbWV0aGluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIEJQRiBvciBwb3NzaWJseSBldmVuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBsaWtlbHkgaW52b2x2ZW1lbnQgb2YgQlBGLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHNvbWV0aGluZyB0aGVyZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBlbmFibGluZyBvciBkaXNhYmxpbmcgdHJhbXBvbGluZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4KCkhvd2V2ZXIsIGEgdHJhbXBvbGluZSBjb3VsZCBhbHNvIGJlIGEgdmVyeSBzcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGZlYXR1cmUuIElmIGl0JiMzOTtzIHg4Ni1zcGVjaWZpYywgb3IgdXNlcyB4ODYgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB0aGVuIEkmIzM5O2xsIGltbWVkaWF0ZWx5IHNoaWZ0IG15IGF0dGVudGlvbiB0byBgYXJjaC94ODYvS2NvbmZpZ2AuIFRoYXQgd291bGQgYmUgd2hlcmUgSSYjMzk7ZCBhbnRpY2lwYXRlIGZpbmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gaXQsIHBhcnRpY3VsYXJseSBpZiBpdCYjMzk7cyB0aWVkIHRvIHRoaW5ncyBsaWtlIENQVSBmZWF0dXJlcywgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLCBvciBtZW1vcnkgbWFuYWdlbWVudC4KCkJhc2ljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0d28gZGlzdGluY3QgcGF0aHMgaGVyZS4gQlBGIGlzIG15IGZpcnN0IGd1ZXNzLCBidXQgeDg2IGlzIGEgdmVyeSBzdHJvbmcgY29udGVuZGVyLCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgY29udGV4dCBvZiB0aGlzICYjMzQ7dHJhbXBvbGluZSYjMzQ7IGltcGxlbWVudGF0aW9uLiBCb3RoIG9mIHRob3NlIGxvY2F0aW9ucyBhcmUgbXkgZ28tdG8gc3RhcnRpbmcgcG9pbnRzIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRob3NlIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjUzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgcmVsYXRlZCB0byB0aGUgQlBGIHZlcmlmaWVyLiBJJiMzOTttIG5vdCBsb29raW5nIGZvciBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXc7IEkgbmVlZCB0byBkaWcgZGVlcCBpbnRvIHRoZSBrbm9icyBhbmQgbGV2ZXJzIGF2YWlsYWJsZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMsIHJ1bnRpbWUgcGFyYW1ldGVycywgYW5kIGFueSBkZWJ1ZyBmbGFncyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHkgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgaW1wYWN0IGl0cyBzYWZldHkgZ3VhcmFudGVlcyBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLiBJIHN1c3BlY3QgdGhlcmUgYXJlIHNvbWUgaGlkZGVuIGdlbXMgaW4gdGhlcmUgcmVnYXJkaW5nIHRoZSB0cmFkZS1vZmZzIGl0IG1ha2VzIHRvIGF2b2lkIG92ZXJseSBhZ2dyZXNzaXZlIHZlcmlmaWNhdGlvbiB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZS4gVGltZSB0byBjaGVjayB0aGUgaW5jbHVkZXMsIG1hY3JvIGRlZmluaXRpb25zLCBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIHdpdGhpbiB0aGUgZmlsZSDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHJlbGF0ZWQgdG8gZmVhdHVyZSBnYXRpbmcgb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHNwZWNpZmljIHZlcmlmaWNhdGlvbiBjaGVja3MuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgb3B0aW1pemluZyBCUEYgcHJvZ3JhbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jaGVja19hdHRhY2hfdGFyZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE2MT1pbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTYzLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTY0OmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTY1LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9idGYuYz02ODQ4PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDI1LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAyNjpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDI3LVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjg5PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM4MjEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozODIyOlx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzgyMy1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwNzY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwODYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDg3Olx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwODgtXHRcdFx0XHQgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg4OD1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTg5OS0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MDA6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTAxLSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NzY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4ODktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4OTA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4OTEtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzMzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzM0Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzM1LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEltcGxlbWVudGF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIEJQRiBzdHVmZiwgZm9jdXNpbmcgb24gc29tZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgLCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLCBhbmQgYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYCwgYXMgd2VsbCBhcyB0aG9zZSBrZXkgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4KCkZpcnN0LCBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YC4uLiBpcyB0aGF0IGV2ZW4gcmVhY2hhYmxlPyBBaCwgeWVzLCBpdOKAmXMgY2xlYXJseSBhY2Nlc3NpYmxlIHRocm91Z2ggYGJwZl9zdHJ1Y3Rfb3BzX3N1cHBvcnRlZGAgYW5kIGBidGZfYWRkX3N0cnVjdF9vcHNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyByaWdodCBpbiB0aGUgaGVhcnQgb2YgQlRGIHBhcnNpbmcgYW5kIHN0cnVjdF9vcHMgcmVnaXN0cmF0aW9uLiAKCk5vdywgb24gdG8gYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YC4gSSByZW1lbWJlciB0aGlzIG9uZTsgaXQgZ2V0cyBpbnZva2VkIGR1cmluZyBib3RoIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiAqYW5kKiBkdXJpbmcgdGhlIGF0dGFjaCBwcm9jZXNzLiBTYW1lIHdpdGggYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYDsgdGhhdCYjMzk7cyBhbm90aGVyIGNyaXRpY2FsIGNoZWNrIGR1cmluZyB2ZXJpZmljYXRpb24uIFNvIHRoZSB2ZXJpZmljYXRpb24gcHJvY2VzcyBpcyBwcmV0dHkgdGhvcm91Z2guCgpIbW0sIHdoYXQgZWxzZSBtaWdodCBiZSBpbXBvcnRhbnQgY29uZmlnLXdpc2U/IFdhaXQuLi4gYEZUUkFDRWAhIFRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGtleSBkZXBlbmRlbmN5IHdoZW4gd29ya2luZyB3aXRoIEJQRiB0cmFtcG9saW5lcy4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZCByZWNlbnRseS4gVGhlc2UgY2FuIGJlIHRyaWNreSBhbmQgZWFzeSB0byBtaXNzIG9uIHF1aWNrIHJldmlld3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9UUkFNUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipMb2NhdGluZyB0aGUgVHJhbXBvbGluZSBPYmplY3QgRmlsZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYHRyYW1wb2xpbmUub2Agb2JqZWN0IGZpbGUgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIEJQRiBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgQlBGLXJlbGF0ZWQgY29tcGlsYXRpb24gaXMgbGlrZWx5IGNvbnRyb2xsZWQsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byBwaW5wb2ludCBpdHMgY3JlYXRpb24uIEkgd2lsbCBjaGVjayBmb3IgdGhpcyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW1wb2xpbmUubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2xpdmVwYXRjaC9yZWxpYWJsZS1zdGFja3RyYWNlLnJzdD0xNzk9aW5mb3JtYXRpb24gaXMgbm90IGluIGEgY29uc2lzdGVudCBsb2NhdGlvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlbnRyeVxuRG9jdW1lbnRhdGlvbi9saXZlcGF0Y2gvcmVsaWFibGUtc3RhY2t0cmFjZS5yc3Q6MTgwOnRyYW1wb2xpbmUgb3IgcmV0dXJuIHRyYW1wb2xpbmUuIEZvciBleGFtcGxlLCBjb25zaWRlcmluZyB0aGUgeDg2XzY0XG5Eb2N1bWVudGF0aW9uL2xpdmVwYXRjaC9yZWxpYWJsZS1zdGFja3RyYWNlLnJzdC0xODEtJiMzOTtyZXR1cm5fdG9faGFuZGxlciYjMzk7IHJldHVybiB0cmFtcG9saW5lOlxuLS1cbmFyY2gvYXJjL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmgtMTgtICogd2hpY2ggYWxsb3dzIHNpZ3JldHVybiBiYXNlZCByZS1lbnRyeSBpbnRvIGtlcm5lbCBhZnRlciBoYW5kbGluZyBzaWduYWwuXG5hcmNoL2FyYy9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oOjE5OiAqIFcvbyB0aGlzIGtlcm5lbCBuZWVkcyB0byBcJiMzNDtzeW50aGVzaXplXCYjMzQ7IHRoZSBzaWdyZXR1cm4gdHJhbXBvbGluZSBvbiB1c2VyXG5hcmNoL2FyYy9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oLTIwLSAqIG1vZGUgc3RhY2sgd2hpY2ggaW4gdHVybiBmb3JjZXMgdGhlIGZvbGxvd2luZzpcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfS1BST0JFUylcdFx0JiM0Mzs9IGtwcm9iZXMubyBkZWNvZGUtaW5zbi5vXHRcXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjM6XHRcdFx0XHQgICBrcHJvYmVzX3RyYW1wb2xpbmUub1x0XHRcXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL01ha2VmaWxlLTQtXHRcdFx0XHQgICBzaW11bGF0ZS1pbnNuLm9cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYz0xNDM0PXN0YXRpYyBpbnQgZ2NzX3NpZ25hbF9lbnRyeShfX3NpZ3Jlc3RvcmVfdCBzaWd0cmFtcCwgc3RydWN0IGtzaWduYWwgKmtzaWcpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMtMTQ1MS1cdC8qXG5hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYzoxNDUyOlx0ICogUHVzaCBhIGNhcCBhbmQgdGhlIEdDUyBlbnRyeSBmb3IgdGhlIHRyYW1wb2xpbmUgb250byB0aGUgR0NTLlxuYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMtMTQ1My1cdCAqL1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI1NTM9c3RhdGljIHZvaWQgc3RvcmVfZnVuY19tZXRhKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI1NjYtICogICBtb3YgeDksIGxyXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyNTY3OiAqICAgYmwgIFx1MDAzY2JwZl90cmFtcG9saW5lIG9yIHBsdFx1MDAzZVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjU2OC0gKlxuLS1cbmFyY2gvY3NreS9rZXJuZWwvcHJvYmVzL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX0tQUk9CRVMpXHRcdCYjNDM7PSBrcHJvYmVzLm8gZGVjb2RlLWluc24ubyBzaW11bGF0ZS1pbnNuLm9cbmFyY2gvY3NreS9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0tQUk9CRVMpXHRcdCYjNDM7PSBrcHJvYmVzX3RyYW1wb2xpbmUub1xuYXJjaC9jc2t5L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGUtNC1vYmotJChDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UpXHQmIzQzOz0gZnRyYWNlLm9cbi0tXG5hcmNoL2hleGFnb24va2VybmVsL01ha2VmaWxlPTc9b2JqLXkgJiM0Mzs9IHNldHVwLm8gaXJxX2NwdS5vIHRyYXBzLm8gc3lzY2FsbHRhYi5vIHNpZ25hbC5vIHRpbWUub1xuYXJjaC9oZXhhZ29uL2tlcm5lbC9NYWtlZmlsZTo4Om9iai15ICYjNDM7PSBwcm9jZXNzLm8gdHJhbXBvbGluZS5vIHJlc2V0Lm8gcHRyYWNlLm8gdmRzby5vXG5hcmNoL2hleGFnb24va2VybmVsL01ha2VmaWxlLTktXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTI5PWlmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVJcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGUtNDAtICBDRkxBR1NfUkVNT1ZFX3JldGhvb2subyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjQxOiAgQ0ZMQUdTX1JFTU9WRV9yZXRob29rX3RyYW1wb2xpbmUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTQyLWVuZGlmXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTc2PW9iai0kKENPTkZJR19LUFJPQkVTKVx0XHQmIzQzOz0ga3Byb2Jlcy5vXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGU6Nzc6b2JqLSQoQ09ORklHX1JFVEhPT0spXHRcdCYjNDM7PSByZXRob29rLm8gcmV0aG9va190cmFtcG9saW5lLm9cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZS03OC1vYmotJChDT05GSUdfVVBST0JFUylcdFx0JiM0Mzs9IHVwcm9iZXMub1xuLS1cbmFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jPTE4Mj1zdGF0aWMgaW50IHNldHVwX3J0X2ZyYW1lKHN0cnVjdCBrc2lnbmFsICprc2lnLCBzaWdzZXRfdCAqc2V0LFxuLS1cbmFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jLTIwMy1cdC8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2U7IGp1bXAgdG8gZml4ZWQgYWRkcmVzcyBzaWdyZXR1cm5cbmFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jOjIwNDpcdCAgIHRyYW1wb2xpbmUgb24ga3VzZXIgcGFnZS4gICovXG5hcmNoL25pb3MyL2tlcm5lbC9zaWduYWwuYy0yMDUtXHRyZWdzLVx1MDAzZXJhID0gKHVuc2lnbmVkIGxvbmcpICgweDEwNDQpO1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTM1PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTM4LVx0ICogVE9ETzogUmVtb3ZlIGFmdGVyIHZhbGlkYXRpbmcgc3VwcG9ydFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo1Mzk6XHQgKiBmb3IgZnNlc3Npb24gYW5kIHRyYW1wb2xpbmUgb24gcHBjMzIuXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTU0MC1cdCAqL1xuLS1cbmFyY2gvcmlzY3Yva2VybmVsL3Byb2Jlcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19LUFJPQkVTKVx0XHQmIzQzOz0ga3Byb2Jlcy5vIGRlY29kZS1pbnNuLm8gc2ltdWxhdGUtaW5zbi5vXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfUkVUSE9PSylcdFx0JiM0Mzs9IHJldGhvb2subyByZXRob29rX3RyYW1wb2xpbmUub1xuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX1VQUk9CRVMpXHRcdCYjNDM7PSB1cHJvYmVzLm8gZGVjb2RlLWluc24ubyBzaW11bGF0ZS1pbnNuLm9cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU9Nj1DRkxBR1NfUkVNT1ZFX3JldGhvb2subyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjc6Q0ZMQUdTX1JFTU9WRV9yZXRob29rX3RyYW1wb2xpbmUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuLS1cbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTM1PW9iai15XHQmIzQzOz0gdmVyc2lvbi5vIHBnbV9jaGVjay5vIGN0eXBlLm8gaXBsX2RhdGEubyByZWxvY3MubyBhbHRlcm5hdGl2ZS5vXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZTozNjpvYmoteVx0JiM0Mzs9IHV2Lm8gcHJpbnRrLm8gdHJhbXBvbGluZS5vXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZS0zNy1vYmotJChDT05GSUdfUkFORE9NSVpFX0JBU0UpXHQmIzQzOz0ga2FzbHIub1xuLS1cbmFyY2gveDg2L2h5cGVydi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTKVx0JiM0Mzs9IGh2X3NwaW5sb2NrLm9cbi0tXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGUtMTQtIGlmZGVmIENPTkZJR19NU0hWX1JPT1RcbmFyY2gveDg2L2h5cGVydi9NYWtlZmlsZToxNTogIENGTEFHU19SRU1PVkVfaHZfdHJhbXBvbGluZS5vICYjNDM7PSAtcGdcbmFyY2gveDg2L2h5cGVydi9NYWtlZmlsZToxNjogIENGTEFHU19odl90cmFtcG9saW5lLm8gICAgICAgICYjNDM7PSAtZm5vLXN0YWNrLXByb3RlY3RvclxuYXJjaC94ODYvaHlwZXJ2L01ha2VmaWxlOjE3OiAgb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApICAgICAgJiM0Mzs9IGh2X2NyYXNoLm8gaHZfdHJhbXBvbGluZS5vXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGUtMTgtIGVuZGlmXG4tLVxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jPTI4Mz1leHRlcm4gdm9pZCBmdHJhY2VfcmVnc19jYWxsZXJfam1wKHZvaWQpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy0yOTAtICogVGhlIGZ0cmFjZV9vcHMgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBjYWxsYmFjay4gU2luY2UgdGhlXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6MjkxOiAqIHRyYW1wb2xpbmUgb25seSBzZXJ2aWNlcyBhIHNpbmdsZSBmdHJhY2Vfb3BzLCB3ZSBjYW4gcGFzcyBpblxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTI5Mi0gKiB0aGF0IG9wcyBkaXJlY3RseS5cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9NDc3PXZvaWQgYXJjaF9mdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtNDg1LVx0aWYgKCFvcHMtXHUwMDNldHJhbXBvbGluZSkge1xuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjQ4NjpcdFx0b3BzLVx1MDAzZXRyYW1wb2xpbmUgPSBjcmVhdGVfdHJhbXBvbGluZShvcHMsIFx1MDAyNnNpemUpO1xuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQ4Ny1cdFx0aWYgKCFvcHMtXHUwMDNldHJhbXBvbGluZSlcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz01Nz1zdGF0aWMgdm9pZCB0cmFtcG9saW5lX3VubG9jayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTYxLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NjI6c3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02My1cdGludCAoKnJlZ2lzdGVyX2ZlbnRyeSkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmRhdGEpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsIHZvaWQgKmRhdGEpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9vcHM7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03My1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTctXHRcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1ODpcdFx0XHRcdFx0XHQgICAgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5LVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjQtXHRcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NTpcdFx0XHRcdFx0XHQgICAgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2LVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NzM9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTAwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NTAxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfb3BzID0ge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTAyLVx0LnJlZ2lzdGVyX2ZlbnRyeSAgID0gcmVnaXN0ZXJfZmVudHJ5LFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTY3Mz1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Njc0Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY3NS17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTA1PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkwNy1cdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MDg6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MDktXHRcdFx0XHQgICAgICB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk0Nj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTItXHR0cmFtcG9saW5lX2xvY2sodHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTUzOlx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTQtXHR0cmFtcG9saW5lX3VubG9jayh0cik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTU4PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTYwLVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTYxOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjItXHRcdFx0XHRcdHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTgzPWludCBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg5LVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk5MDpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05OTEtXHR0cmFtcG9saW5lX3VubG9jayh0cik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA3Nj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTExOC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMTk6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZzaGltX2xpbmstXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEyMC1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTU1OD1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzItXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU3NC1cdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz0yNjM1PXZvaWQgdXByb2JlX2hhbmRsZV90cmFtcG9saW5lKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTI2NTUtXHRcdCAqIG9yIE5VTEw7IHRoZSBsYXR0ZXIgY2FzZSBtZWFucyB0aGF0IG5vYm9keSBidXQgcmktXHUwMDNlZnVuY1xua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6MjY1NjpcdFx0ICogY291bGQgaGl0IHRoaXMgdHJhbXBvbGluZSBvbiByZXR1cm4uIFRPRE86IHNpZ2FsdHN0YWNrKCkuXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy0yNjU3LVx0XHQgKi9cbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9MzMwPWludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy0zNjQtXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6MzY1Olx0ZnRyYWNlX3VwZGF0ZV90cmFtcG9saW5lKG9wcyk7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtMzY2LVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz0zOTM9c3RhdGljIHZvaWQgZnRyYWNlX3VwZGF0ZV9waWRfZnVuYyh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00MDQtXHRcdFx0XHRmdHJhY2VfcGlkX2Z1bmMgOiBvcC1cdTAwM2VzYXZlZF9mdW5jO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQwNTpcdFx0XHRmdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUob3ApO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQwNi1cdFx0fVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDE0PXN0YXRpYyB2b2lkIGZ0cmFjZV91cGRhdGVfdHJhbXBvbGluZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NDE3LVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjg0MTg6XHRhcmNoX2Z0cmFjZV91cGRhdGVfdHJhbXBvbGluZShvcHMpO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg0MTktXHRpZiAob3BzLVx1MDAzZXRyYW1wb2xpbmUgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2V0cmFtcG9saW5lICE9IHRyYW1wb2xpbmUgXHUwMDI2XHUwMDI2XG4tLVxudG9vbHMvcGVyZi91dGlsL2Rzby5oPTI4PWVudW0gZHNvX2JpbmFyeV90eXBlIHtcbi0tXG50b29scy9wZXJmL3V0aWwvZHNvLmgtOTctXHREU09fQklOQVJZX1RZUEVfX0JQRl9QUk9HX0lORk8sXG50b29scy9wZXJmL3V0aWwvZHNvLmg6OTg6XHQvKiogQERTT19CSU5BUllfVFlQRV9fQlBGX0lNQUdFOiBqaXR0ZWQgQlBGIHRyYW1wb2xpbmUgb3IgZGlzcGF0Y2hlciBjb2RlLiAqL1xudG9vbHMvcGVyZi91dGlsL2Rzby5oLTk5LVx0RFNPX0JJTkFSWV9UWVBFX19CUEZfSU1BR0UsXG4tLVxudG9vbHMvcGVyZi91dGlsL21hcC5jPTUyOT11NjQgbWFwX19yaXBfMm9iamR1bXAoY29uc3Qgc3RydWN0IG1hcCAqbWFwLCB1NjQgcmlwKVxuLS1cbnRvb2xzL3BlcmYvdXRpbC9tYXAuYy01MzUtXHQgKiB2bWxpbnV4IGRvZXMgbm90IGhhdmUgcHJvZ3JhbSBoZWFkZXJzIGZvciBQVEkgZW50cnkgdHJhbXBvbGluZXMgYW5kXG50b29scy9wZXJmL3V0aWwvbWFwLmM6NTM2Olx0ICoga2NvcmUgbWF5IG5vdCBlaXRoZXIuIEhvd2V2ZXIgdGhlIHRyYW1wb2xpbmUgb2JqZWN0IGNvZGUgaXMgb24gdGhlXG50b29scy9wZXJmL3V0aWwvbWFwLmMtNTM3LVx0ICogbWFpbiBrZXJuZWwgbWFwLCBzbyBqdXN0IHVzZSB0aGF0IGluc3RlYWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njg1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIEJQRiBKSVQgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIGBDT05GSUdfQlBGX0pJVGAgb3B0aW9uIGlzIGNsZWFybHkgdGhlIGx5bmNocGluIGhlcmUsIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJpZ2h0IHN5bWJvbHMgZm9yIHRoaXMgZGVlcCBkaXZlLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCBpcyBpbmRlZWQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJdCBzZWVtcyByaWdodCAtIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciBhIHN0cnVjdF9vcHMsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IEJQRiBpbnRlcmFjdHMgd2l0aCBrZXJuZWwgc3RydWN0dXJlcywgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgb24gaXQuIEFuZCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGlzIHJlbGV2YW50IGJlY2F1c2UgaXQmIzM5O3Mgd2hlcmUgdGhlIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgaXRzZWxmIGlzIHZlcmlmaWVkLCB3aGljaCBpcyBjbGVhcmx5IGltcG9ydGFudCB0byB0aGUgcHJvY2Vzcy4gQm90aCBvZiB0aG9zZSBsb29rIGxpa2Ugc29saWQgY2FuZGlkYXRlcyBmb3IgdGhlIGFuYWx5c2lzLgoKQWxyaWdodCwgbGV0IG1lIG5vdyB0YWtlIGEgbG9vayBhdCBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgLCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBjYW4gcHJvdmlkZSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE1OTI9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE1OTUtLyogRnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gdmVyaWZpZXIuYywgdXNlZCBieSB0cmFtcG9saW5lLmMgKi9cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTU5NjppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE1OTctXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYxMT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYyNC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MjU6XHRcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKGJ0ZiwgcHJvZywgaWRzW2ldLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjI2LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MDM6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDA0LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDY5CgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBUcmFtcG9saW5lIGFuZCBMYXJnZSBBcmd1bWVudCBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgdHJhbXBvbGluZSBpc3N1ZS4gRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvcmUgZml4LCB3aGljaCBzZWVtcyB0byByZXNpZGUgaW4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhhdCYjMzk7cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEl0JiMzOTtzIHN0YXRpYywgYnV0IHRoYXQmIzM5O3MgZmluZTsgaXQgZG9lc24mIzM5O3QgcHJldmVudCBpbmNsdXNpb24uIEFjdHVhbGx5LCBJIGFsc28gbmVlZCB0byBpbmNsdWRlIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGJlY2F1c2UgaXQgY2FsbHMgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBhbmQgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIHNvIEkgc2hvdWxkIGluY2x1ZGUgaXQgZm9yIGNvbXBsZXRlbmVzcy4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGFib3V0IGNvcnJlY3RseSBoYW5kbGluZyBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gOCBieXRlcywgbGlrZSBgX19pbnQxMjhgLiBUaGUgYnVnIHdhcyB0aGF0IHRoZSB0cmFtcG9saW5lIHdhc24mIzM5O3QgYWxsb2NhdGluZyBlbm91Z2ggcmVnaXN0ZXJzLiBUaGlzIHdhcyBjYXVzaW5nIGlzc3VlcyBhdHRhY2hpbmcgdG8gZnVuY3Rpb25zIHRoYXQgaGF2ZSByZXR1cm4gdmFsdWVzICZndDsgOCBieXRlcy4gVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtLgoKSSYjMzk7dmUgZ290IHRocmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGltcG9ydGFudCB0byBub3RlOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLgoKRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQuIFNvLCB0aGlzIGlzIGEgcmVhbC13b3JsZCBmaXgsIG5vdCBqdXN0IGFuIGFjYWRlbWljIG9uZS4KCk15IGZvY3VzIHN5bWJvbHMgYXJlOgoqICAgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAKKiAgIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGAKKiAgIGBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aWAKKiAgIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgCgpgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgYmVjYXVzZSBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSBCUEYgdHJhbXBvbGluZSBpcyBjcmVhdGVkLCBzbyBpdCYjMzk7cyBhIGdvb2QgZW50cnkgcG9pbnQgZm9yIHRoZSBjaGFuZ2VzLiBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCBpcyBhbHNvIHJlbGV2YW50IHNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIGBidGZfYWRkX3N0cnVjdF9vcHNgLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBCVEYgaXMgbG9hZGVkLiBJdCBpcyBhbHNvIGFuIGltcG9ydGFudCBzeW1ib2wuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWVzIGZvciBjZXJ0YWluIGF0dGFjaCB0eXBlcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2tfYXR0YWNoX3RhcmdldCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aSYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHRyYW1wb2xpbmUgYW5kIHN0cnVjdF9vcHMgbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAoZS5nLiwgX19pbnQxMjgpLiBJdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgdHJhbXBvbGluZSBkaWQgbm90IGFsbG9jYXRlIGVub3VnaCByZWdpc3RlcnMgZm9yIGxhcmdlIGFyZ3VtZW50cyBhbmQgcmVqZWN0cyBhdHRhY2hpbmcgdG8gZnVuY3Rpb25zIHdpdGggXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZXMgZm9yIGNlcnRhaW4gYXR0YWNoIHR5cGVzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6MTAuMDI4Nzc1ODEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMjU3MjM5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFxcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlcyBmb3IgY2VydGFpbiBhdHRhY2ggdHlwZXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjEwLjAyODc3OTk1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwNjAzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGI2MDdkMjU2N2VjNDQzYjVmNTcxZmFiMTVhOTVkMzE0MmI0YzkzMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOTozMjowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uMGI4YmQzMGY3Yzg3MDAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTMzNjksMTEgKzMzNjksOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxcbiBcXHRXQVJOX09OX09OQ0UoKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgKGZsYWdzIFxcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xcbiBcXG4tXFx0LyogZXh0cmEgcmVnaXN0ZXJzIGZvciBzdHJ1Y3QgYXJndW1lbnRzICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtLVxcdTAwM2Vucl9hcmdzOyBpKyspIHtcXG4tXFx0XFx0aWYgKG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfU1RSVUNUX0FSRylcXG4tXFx0XFx0XFx0bnJfcmVncyArPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDggLSAxO1xcbi1cXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtLVxcdTAwM2Vucl9hcmdzOyBpKyspXFxuK1xcdFxcdG5yX3JlZ3MgKz0gKG0tXFx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4IC0gMTtcXG4gXFxuIFxcdC8qIHg4Ni02NCBzdXBwb3J0cyB1cCB0byBNQVhfQlBGX0ZVTkNfQVJHUyBhcmd1bWVudHMuIDEtNlxcbiBcXHQgKiBhcmUgcGFzc2VkIHRocm91Z2ggcmVncywgdGhlIHJlbWFpbnMgYXJlIHRocm91Z2ggc3RhY2suXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xcbmluZGV4IDUxYjE2ZTVmNTUzNGUwLi40ZTdhNDhjMDJiZTVjZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG5AQCAtNDQ1LDYgKzQ0NSwxOCBAQCBpbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG4gXFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgXFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgaW4gYSByZWdpc3RlciBwYWlyLFxcbitcXHRcXHQgKiB3aGljaCB0aGUgc3RydWN0X29wcyB0cmFtcG9saW5lIGRvZXMgbm90IHByZXNlcnZlIChvbmx5XFxuK1xcdFxcdCAqIDggYnl0ZXMgb2YgdGhlIHJldHVybiB2YWx1ZSBhcmUgc2F2ZWQgYW5kIHJlc3RvcmVkKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChzdF9vcHMtXFx1MDAzZWZ1bmNfbW9kZWxzW2ldLnJldF9zaXplIFxcdTAwM2UgOCkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJmdW5jIHB0ciAlcyBpbiBzdHJ1Y3QgJXMgaGFzIGEgXFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdG1uYW1lLCBzdF9vcHMtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHN0dWJfZnVuY19hZGRyID0gKih2b2lkICoqKShzdF9vcHMtXFx1MDAzZWNmaV9zdHVicyArIG1vZmYpO1xcbiBcXHRcXHRlcnIgPSBwcmVwYXJlX2FyZ19pbmZvKGJ0Ziwgc3Rfb3BzLVxcdTAwM2VuYW1lLCBtbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGZ1bmNfcHJvdG8sIHN0dWJfZnVuY19hZGRyLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA2NTE1ZDRkM2MwMDMyZi4uMjZkMjgxYjc3YTZlNzIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTE4ODczLDYgKzE4ODczLDIwIEBAIHN0YXRpYyBpbnQgYnRmX2lkX2FsbG93X3NsZWVwYWJsZSh1MzIgYnRmX2lkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHN0cnVjdCBiXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbit7XFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIEJQRl9NT0RJRllfUkVUVVJOOlxcbitcXHRjYXNlIEJQRl9UUkFDRV9GRVhJVDpcXG4rXFx0Y2FzZSBCUEZfVFJBQ0VfRkVYSVRfTVVMVEk6XFxuK1xcdGNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OOlxcbitcXHRjYXNlIEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSTpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbiBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxuQEAgLTE5MTM3LDYgKzE5MTUxLDE0IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdFxcdGlmICh0Z3RfaW5mby1cXHUwMDNlZm1vZGVsLnJldF9zaXplIFxcdTAwM2UgOCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKSB7XFxuK1xcdFxcdFxcdGJwZl9sb2cobG9nLFxcbitcXHRcXHRcXHRcXHRcXFwiQXR0YWNoIHRvIGZ1bmN0aW9uICVzIHdpdGggYSBcXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGF0dGFjaCB0eXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHR0bmFtZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogKi5tdWx0aSBwcm9ncmFtcyBkb24ndCBuZWVkIGFuIGFkZHJlc3MgZHVyaW5nIHByb2dyYW1cXG4gXFx0XFx0ICogdmVyaWZpY2F0aW9uLCB3ZSBqdXN0IHRha2UgdGhlIG1vZHVsZSByZWYgaWYgbmVlZGVkLlxcbkBAIC0xOTQxMyw2ICsxOTQzNSw5IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0XFxuIFxcdGVyciA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oTlVMTCwgYnRmLCB0LCB0bmFtZSwgXFx1MDAyNnRndF9pbmZvLVxcdTAwM2VmbW9kZWwpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0aWYgKHRndF9pbmZvLVxcdTAwM2VmbW9kZWwucmV0X3NpemUgXFx1MDAzZSA4IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0aWYgKGJ0Zl9pc19tb2R1bGUoYnRmKSkge1xcbiBcXHRcXHQvKiBUaGUgYnBmIHByb2dyYW0gYWxyZWFkeSBob2xkcyByZWZlcmVuY2UgdG8gbW9kdWxlLiAqL1xcbiBcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1vZCkpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmNcXG5pbmRleCBmOWY5ZTFjYjg3YmYxYy4uMzQ1ZGQyMWFkNjIxNzAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuY1xcbkBAIC03Niw2ICs3NiwxNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ZleGl0X25vcmV0dXJucyh2b2lkKVxcbiBcXHRcXHRcXHQgICAgICAgXFxcIkF0dGFjaGluZyBmZXhpdC9mc2Vzc2lvbi9mbW9kX3JldCB0byBfX25vcmV0dXJuIGZ1bmN0aW9uICdkb19leGl0JyBpcyByZWplY3RlZC5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGVzdF9mZXhpdF9pbnQxMjhfcmV0KHZvaWQpXFxuK3tcXG4rI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fXFxuK1xcdHRlc3RfdHJhY2luZ19mYWlsX3Byb2coXFxcImZleGl0X2ludDEyOF9yZXRcXFwiLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIndpdGggYSBcXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGF0dGFjaCB0eXBlXFxcIik7XFxuKyNlbHNlXFxuK1xcdHRlc3RfX3NraXAoKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnBmX3NwaW5fbG9ja1xcXCIpKVxcbkBAIC04Niw0ICs5Niw2IEBAIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZClcXG4gXFx0XFx0dGVzdF90cmFjaW5nX2RlbnkoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImZleGl0X25vcmV0dXJuc1xcXCIpKVxcbiBcXHRcXHR0ZXN0X2ZleGl0X25vcmV0dXJucygpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiZmV4aXRfaW50MTI4X3JldFxcXCIpKVxcbitcXHRcXHR0ZXN0X2ZleGl0X2ludDEyOF9yZXQoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX3N0cnVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuY1xcbmluZGV4IDZmOGMwYmZiMDQxNTU5Li4xNWI5NWQwMjM1YjUyMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX3N0cnVjdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuY1xcbkBAIC00LDYgKzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidHJhY2luZ19zdHJ1Y3Quc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRyYWNpbmdfc3RydWN0X2ludDEyOC5za2VsLmhcXFwiXFxuIFxcbiBzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9hcmdzKHZvaWQpXFxuIHtcXG5AQCAtMTEyLDYgKzExMywzOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9tYW55X2FyZ3Modm9pZClcXG4gXFx0dHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2ludDEyOF9hcmdzKHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogX19pbnQxMjggYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYSByZWdpc3RlciBwYWlyIG9uIHg4Nl82NCBhbmRcXG4rXFx0ICogYXJtNjQsIHdoaWNoIHRoZSB0cmFtcG9saW5lIHBhY2tzIGludG8gdHdvIGNvbnRleHQgc2xvdHMuIE90aGVyXFxuK1xcdCAqIGFyY2hpdGVjdHVyZXMgcGFzcyBhIF9faW50MTI4IGRpZmZlcmVudGx5IChlLmcuIHMzOTB4IHBhc3NlcyBsYXJnZXJcXG4rXFx0ICogYXJndW1lbnRzIGJ5IHJlZmVyZW5jZSksIHNvIG9ubHkgZXhlcmNpc2UgdGhpcyBvbiB4ODZfNjQgYW5kIGFybTY0LlxcbitcXHQgKi9cXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcXG4rXFx0c3RydWN0IHRyYWNpbmdfc3RydWN0X2ludDEyOCAqc2tlbDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSB0cmFjaW5nX3N0cnVjdF9pbnQxMjhfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJ0cmFjaW5nX3N0cnVjdF9pbnQxMjhfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRyYWNpbmdfc3RydWN0X2ludDEyOF9fYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gZGVzdHJveV9za2VsO1xcbitcXG4rXFx0QVNTRVJUX09LKHRyaWdnZXJfbW9kdWxlX3Rlc3RfcmVhZCgyNTYpLCBcXFwidHJpZ2dlcl9yZWFkXFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0X2IsIDIsIFxcXCJ0OmJcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldF9jLCAzLCBcXFwidDpjXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRfcmV0LCA2LCBcXFwidCByZXRcXFwiKTtcXG4rXFxuK2Rlc3Ryb3lfc2tlbDpcXG4rXFx0dHJhY2luZ19zdHJ1Y3RfaW50MTI4X19kZXN0cm95KHNrZWwpO1xcbisjZWxzZVxcbitcXHR0ZXN0X19za2lwKCk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X3VuaW9uX2FyZ3Modm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdHJhY2luZ19zdHJ1Y3QgKnNrZWw7XFxuQEAgLTE0NSw2ICsxNzksOCBAQCB2b2lkIHRlc3RfdHJhY2luZ19zdHJ1Y3Qodm9pZClcXG4gXFx0XFx0dGVzdF9zdHJ1Y3RfYXJncygpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic3RydWN0X21hbnlfYXJnc1xcXCIpKVxcbiBcXHRcXHR0ZXN0X3N0cnVjdF9tYW55X2FyZ3MoKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImludDEyOF9hcmdzXFxcIikpXFxuK1xcdFxcdHRlc3RfaW50MTI4X2FyZ3MoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInVuaW9uX2FyZ3NcXFwiKSlcXG4gXFx0XFx0dGVzdF91bmlvbl9hcmdzKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfZmFpbHVyZS5jXFxuaW5kZXggNjVlNDg1YzQ0NjhjNjIuLmY3YTA5NTc2NzY3OTU0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuY1xcbkBAIC0zMCwzICszMCw5IEBAIGludCBCUEZfUFJPRyhmZXhpdF9ub3JldHVybnMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK1NFQyhcXFwiP2ZleGl0L2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldFxcXCIpXFxuK2ludCBCUEZfUFJPRyhmZXhpdF9pbnQxMjhfcmV0KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2MzhkZmVjMWYzOGVmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguY1xcbkBAIC0wLDAgKzEsMTggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK2xvbmcgdF9iLCB0X2MsIHRfcmV0O1xcbitcXG4rU0VDKFxcXCJmZXhpdC9icGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmdcXFwiKVxcbitpbnQgdGVzdF9pbnQxMjhfYXJnX2ZleGl0KHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxcbit7XFxuK1xcdHRfYiA9IChpbnQpY3R4WzJdO1xcbitcXHR0X2MgPSAobG9uZyljdHhbM107XFxuK1xcdHRfcmV0ID0gKGxvbmcpY3R4WzRdO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuaW5kZXggMzBmMWNkMjMwOTNjYmUuLmViMGY5YjVlMThkODVmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuQEAgLTE2MSw2ICsxNjEsMzMgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9hcmdfcHRyX3RvX3N0cnVjdChzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfc3RydWN0X2FyZ18xICphKSB7XFxuIFxcdHJldHVybiBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9hcmdfcmVzdWx0O1xcbiB9XFxuIFxcbisjaWZkZWYgX19TSVpFT0ZfSU5UMTI4X19cXG4rbm9pbmxpbmUgX19pbnQxMjhcXG4rYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfcmV0KGludCBhKVxcbit7XFxuK1xcdGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQgPSBhO1xcbitcXHRyZXR1cm4gKF9faW50MTI4KWE7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZSBfX2ludDEyOCAnYScgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9uIHB1cnBvc2UuIE9uIGFybTY0IGEgMTYtYnl0ZVxcbisgKiBhcmd1bWVudCBtdXN0IHN0YXJ0IGluIGFuIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgcGFpciwgc28gcGxhY2luZyBpdFxcbisgKiBhZnRlciBhIHNpbmdsZS1yZWdpc3RlciBzY2FsYXIgd291bGQgbGVhdmUgYSBwYWRkaW5nIHJlZ2lzdGVyICh4MSlcXG4rICogdW51c2VkLiBwYWhvbGUgbWFwcyBwYXJhbWV0ZXJzIHRvIHJlZ2lzdGVycyBwb3NpdGlvbmFsbHkgYW5kIHdvdWxkIHRoZW5cXG4rICogc2VlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQgaW4gYW4gXFxcInVuZXhwZWN0ZWRcXFwiIHJlZ2lzdGVyIGFuZCBza2lwIEJURlxcbisgKiBlbmNvZGluZyBvZiB0aGUgd2hvbGUgZnVuY3Rpb24sIG1ha2luZyBpdCB1bmF0dGFjaGFibGUuIEtlZXBpbmcgdGhlXFxuKyAqIF9faW50MTI4IGZpcnN0ICh4MDp4MSkgYXZvaWRzIHRoZSBwYWRkaW5nIHdoaWxlIHN0aWxsIGV4ZXJjaXNpbmcgdGhlXFxuKyAqIHRyYW1wb2xpbmUgcGFja2luZyBvZiBhIDEyOC1iaXQgYXJndW1lbnQgdG9nZXRoZXIgd2l0aCB0aGUgdHJhaWxpbmdcXG4rICogaW50IGFuZCBsb25nIGFyZ3VtZW50cy5cXG4rICovXFxuK25vaW5saW5lIGxvbmdcXG4rYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnKF9faW50MTI4IGEsIGludCBiLCBsb25nIGMpXFxuK3tcXG4rXFx0YnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdCA9IChsb25nKWEgKyBiICsgYztcXG4rXFx0cmV0dXJuIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQ7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBfX3dlYWsgbm9pbmxpbmUgdm9pZCBicGZfdGVzdG1vZF9sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nX25hbWUodm9pZClcXG4ge1xcbiB9XFxuQEAgLTUxNCw2ICs1NDEsMTEgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFxuIFxcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfYXJnX3B0cl90b19zdHJ1Y3QoXFx1MDAyNnN0cnVjdF9hcmcxXzIpO1xcbiBcXG4rI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fXFxuK1xcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldChpKTtcXG4rXFx0KHZvaWQpYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnKChfX2ludDEyOCkxLCAyLCAzKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHQodm9pZCl0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX3RwKE5VTEwpO1xcbiBcXG4gXFx0YnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjoxMC43MTAxNTAyNjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NDQ0MzQwNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdFwiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRcIixcbiAgICBcImJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBhbmQgc3RydWN0X29wcyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcyBsYXJnZXIgdGhhbiA4IGJ5dGVzIChlLmcuLCBfX2ludDEyOCkuIEl0IGZpeGVzIGEgYnVnIHdoZXJlIHRoZSB0cmFtcG9saW5lIGRpZCBub3QgYWxsb2NhdGUgZW5vdWdoIHJlZ2lzdGVycyBmb3IgbGFyZ2UgYXJndW1lbnRzIGFuZCByZWplY3RzIGF0dGFjaGluZyB0byBmdW5jdGlvbnMgd2l0aCBcXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZXMgZm9yIGNlcnRhaW4gYXR0YWNoIHR5cGVzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiNjA3ZDI1NjdlYzQ0M2I1ZjU3MWZhYjE1YTk1ZDMxNDJiNGM5MzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOTozMjowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZGU3NTE1ZWExYmVhZTguLjBiOGJkMzBmN2M4NzAwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0zMzY5LDExICszMzY5LDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdFdBUk5fT05fT05DRSgoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAoZmxhZ3MgXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcbiBcbi1cdC8qIGV4dHJhIHJlZ2lzdGVycyBmb3Igc3RydWN0IGFyZ3VtZW50cyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpKyspIHtcbi1cdFx0aWYgKG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX1NUUlVDVF9BUkcpXG4tXHRcdFx0bnJfcmVncyArPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XG4tXHR9XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKylcbitcdFx0bnJfcmVncyArPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XG4gXG4gXHQvKiB4ODYtNjQgc3VwcG9ydHMgdXAgdG8gTUFYX0JQRl9GVU5DX0FSR1MgYXJndW1lbnRzLiAxLTZcbiBcdCAqIGFyZSBwYXNzZWQgdGhyb3VnaCByZWdzLCB0aGUgcmVtYWlucyBhcmUgdGhyb3VnaCBzdGFjay5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcbmluZGV4IDUxYjE2ZTVmNTUzNGUwLi40ZTdhNDhjMDJiZTVjZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuKysrIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5AQCAtNDQ1LDYgKzQ0NSwxOCBAQCBpbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcbiBcdFx0XHRnb3RvIGVycm91dDtcbiBcdFx0fVxuIFxuK1x0XHQvKlxuK1x0XHQgKiBBIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgaW4gYSByZWdpc3RlciBwYWlyLFxuK1x0XHQgKiB3aGljaCB0aGUgc3RydWN0X29wcyB0cmFtcG9saW5lIGRvZXMgbm90IHByZXNlcnZlIChvbmx5XG4rXHRcdCAqIDggYnl0ZXMgb2YgdGhlIHJldHVybiB2YWx1ZSBhcmUgc2F2ZWQgYW5kIHJlc3RvcmVkKS5cbitcdFx0ICovXG4rXHRcdGlmIChzdF9vcHMtXHUwMDNlZnVuY19tb2RlbHNbaV0ucmV0X3NpemUgXHUwMDNlIDgpIHtcbitcdFx0XHRwcl93YXJuKFwiZnVuYyBwdHIgJXMgaW4gc3RydWN0ICVzIGhhcyBhIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcXG5cIixcbitcdFx0XHRcdG1uYW1lLCBzdF9vcHMtXHUwMDNlbmFtZSk7XG4rXHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdFx0Z290byBlcnJvdXQ7XG4rXHRcdH1cbitcbiBcdFx0c3R1Yl9mdW5jX2FkZHIgPSAqKHZvaWQgKiopKHN0X29wcy1cdTAwM2VjZmlfc3R1YnMgKyBtb2ZmKTtcbiBcdFx0ZXJyID0gcHJlcGFyZV9hcmdfaW5mbyhidGYsIHN0X29wcy1cdTAwM2VuYW1lLCBtbmFtZSxcbiBcdFx0XHRcdCAgICAgICBmdW5jX3Byb3RvLCBzdHViX2Z1bmNfYWRkcixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDY1MTVkNGQzYzAwMzJmLi4yNmQyODFiNzdhNmU3MiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTg4NzMsNiArMTg4NzMsMjAgQEAgc3RhdGljIGludCBidGZfaWRfYWxsb3dfc2xlZXBhYmxlKHUzMiBidGZfaWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgc3RydWN0IGJcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuK3tcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBCUEZfTU9ESUZZX1JFVFVSTjpcbitcdGNhc2UgQlBGX1RSQUNFX0ZFWElUOlxuK1x0Y2FzZSBCUEZfVFJBQ0VfRkVYSVRfTVVMVEk6XG4rXHRjYXNlIEJQRl9UUkFDRV9GU0VTU0lPTjpcbitcdGNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJOlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gaW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcbkBAIC0xOTEzNyw2ICsxOTE1MSwxNCBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuK1x0XHRpZiAodGd0X2luZm8tXHUwMDNlZm1vZGVsLnJldF9zaXplIFx1MDAzZSA4IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpIHtcbitcdFx0XHRicGZfbG9nKGxvZyxcbitcdFx0XHRcdFwiQXR0YWNoIHRvIGZ1bmN0aW9uICVzIHdpdGggYSBcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXR0YWNoIHR5cGVcXG5cIixcbitcdFx0XHRcdHRuYW1lKTtcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcbiBcdFx0LypcbiBcdFx0ICogKi5tdWx0aSBwcm9ncmFtcyBkb24ndCBuZWVkIGFuIGFkZHJlc3MgZHVyaW5nIHByb2dyYW1cbiBcdFx0ICogdmVyaWZpY2F0aW9uLCB3ZSBqdXN0IHRha2UgdGhlIG1vZHVsZSByZWYgaWYgbmVlZGVkLlxuQEAgLTE5NDEzLDYgKzE5NDM1LDkgQEAgaW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRcbiBcdGVyciA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oTlVMTCwgYnRmLCB0LCB0bmFtZSwgXHUwMDI2dGd0X2luZm8tXHUwMDNlZm1vZGVsKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4rXHRpZiAodGd0X2luZm8tXHUwMDNlZm1vZGVsLnJldF9zaXplIFx1MDAzZSA4IFx1MDAyNlx1MDAyNlxuK1x0ICAgIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRpZiAoYnRmX2lzX21vZHVsZShidGYpKSB7XG4gXHRcdC8qIFRoZSBicGYgcHJvZ3JhbSBhbHJlYWR5IGhvbGRzIHJlZmVyZW5jZSB0byBtb2R1bGUuICovXG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIXByb2ctXHUwMDNlYXV4LVx1MDAzZW1vZCkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuY1xuaW5kZXggZjlmOWUxY2I4N2JmMWMuLjM0NWRkMjFhZDYyMTcwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfZmFpbHVyZS5jXG5AQCAtNzYsNiArNzYsMTYgQEAgc3RhdGljIHZvaWQgdGVzdF9mZXhpdF9ub3JldHVybnModm9pZClcbiBcdFx0XHQgICAgICAgXCJBdHRhY2hpbmcgZmV4aXQvZnNlc3Npb24vZm1vZF9yZXQgdG8gX19ub3JldHVybiBmdW5jdGlvbiAnZG9fZXhpdCcgaXMgcmVqZWN0ZWQuXCIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X2ZleGl0X2ludDEyOF9yZXQodm9pZClcbit7XG4rI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fXG4rXHR0ZXN0X3RyYWNpbmdfZmFpbF9wcm9nKFwiZmV4aXRfaW50MTI4X3JldFwiLFxuK1x0XHRcdCAgICAgICBcIndpdGggYSBcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXR0YWNoIHR5cGVcIik7XG4rI2Vsc2VcbitcdHRlc3RfX3NraXAoKTtcbisjZW5kaWZcbit9XG4rXG4gdm9pZCB0ZXN0X3RyYWNpbmdfZmFpbHVyZSh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnBmX3NwaW5fbG9ja1wiKSlcbkBAIC04Niw0ICs5Niw2IEBAIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZClcbiBcdFx0dGVzdF90cmFjaW5nX2RlbnkoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZmV4aXRfbm9yZXR1cm5zXCIpKVxuIFx0XHR0ZXN0X2ZleGl0X25vcmV0dXJucygpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmZXhpdF9pbnQxMjhfcmV0XCIpKVxuK1x0XHR0ZXN0X2ZleGl0X2ludDEyOF9yZXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbmluZGV4IDZmOGMwYmZiMDQxNTU5Li4xNWI5NWQwMjM1YjUyMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbkBAIC00LDYgKzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwidHJhY2luZ19zdHJ1Y3Quc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRyYWNpbmdfc3RydWN0X21hbnlfYXJncy5za2VsLmhcIlxuKyNpbmNsdWRlIFwidHJhY2luZ19zdHJ1Y3RfaW50MTI4LnNrZWwuaFwiXG4gXG4gc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3RfYXJncyh2b2lkKVxuIHtcbkBAIC0xMTIsNiArMTEzLDM5IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X21hbnlfYXJncyh2b2lkKVxuIFx0dHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X2ludDEyOF9hcmdzKHZvaWQpXG4re1xuK1x0LypcbitcdCAqIF9faW50MTI4IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIGEgcmVnaXN0ZXIgcGFpciBvbiB4ODZfNjQgYW5kXG4rXHQgKiBhcm02NCwgd2hpY2ggdGhlIHRyYW1wb2xpbmUgcGFja3MgaW50byB0d28gY29udGV4dCBzbG90cy4gT3RoZXJcbitcdCAqIGFyY2hpdGVjdHVyZXMgcGFzcyBhIF9faW50MTI4IGRpZmZlcmVudGx5IChlLmcuIHMzOTB4IHBhc3NlcyBsYXJnZXJcbitcdCAqIGFyZ3VtZW50cyBieSByZWZlcmVuY2UpLCBzbyBvbmx5IGV4ZXJjaXNlIHRoaXMgb24geDg2XzY0IGFuZCBhcm02NC5cbitcdCAqL1xuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4rXHRzdHJ1Y3QgdHJhY2luZ19zdHJ1Y3RfaW50MTI4ICpza2VsO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSB0cmFjaW5nX3N0cnVjdF9pbnQxMjhfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRyYWNpbmdfc3RydWN0X2ludDEyOF9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2goc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2hcIikpXG4rXHRcdGdvdG8gZGVzdHJveV9za2VsO1xuK1xuK1x0QVNTRVJUX09LKHRyaWdnZXJfbW9kdWxlX3Rlc3RfcmVhZCgyNTYpLCBcInRyaWdnZXJfcmVhZFwiKTtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0X2IsIDIsIFwidDpiXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRfYywgMywgXCJ0OmNcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldF9yZXQsIDYsIFwidCByZXRcIik7XG4rXG4rZGVzdHJveV9za2VsOlxuK1x0dHJhY2luZ19zdHJ1Y3RfaW50MTI4X19kZXN0cm95KHNrZWwpO1xuKyNlbHNlXG4rXHR0ZXN0X19za2lwKCk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfdW5pb25fYXJncyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0cmFjaW5nX3N0cnVjdCAqc2tlbDtcbkBAIC0xNDUsNiArMTc5LDggQEAgdm9pZCB0ZXN0X3RyYWNpbmdfc3RydWN0KHZvaWQpXG4gXHRcdHRlc3Rfc3RydWN0X2FyZ3MoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic3RydWN0X21hbnlfYXJnc1wiKSlcbiBcdFx0dGVzdF9zdHJ1Y3RfbWFueV9hcmdzKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImludDEyOF9hcmdzXCIpKVxuK1x0XHR0ZXN0X2ludDEyOF9hcmdzKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVuaW9uX2FyZ3NcIikpXG4gXHRcdHRlc3RfdW5pb25fYXJncygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmNcbmluZGV4IDY1ZTQ4NWM0NDY4YzYyLi5mN2EwOTU3Njc2Nzk1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfZmFpbHVyZS5jXG5AQCAtMzAsMyArMzAsOSBAQCBpbnQgQlBGX1BST0coZmV4aXRfbm9yZXR1cm5zKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitTRUMoXCI/ZmV4aXQvYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfcmV0XCIpXG4raW50IEJQRl9QUk9HKGZleGl0X2ludDEyOF9yZXQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NjM4ZGZlYzFmMzhlZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfc3RydWN0X2ludDEyOC5jXG5AQCAtMCwwICsxLDE4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuK2xvbmcgdF9iLCB0X2MsIHRfcmV0O1xuK1xuK1NFQyhcImZleGl0L2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X2FyZ1wiKVxuK2ludCB0ZXN0X2ludDEyOF9hcmdfZmV4aXQodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4re1xuK1x0dF9iID0gKGludCljdHhbMl07XG4rXHR0X2MgPSAobG9uZyljdHhbM107XG4rXHR0X3JldCA9IChsb25nKWN0eFs0XTtcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IDMwZjFjZDIzMDkzY2JlLi5lYjBmOWI1ZTE4ZDg1ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0xNjEsNiArMTYxLDMzIEBAIGJwZl90ZXN0bW9kX3Rlc3RfYXJnX3B0cl90b19zdHJ1Y3Qoc3RydWN0IGJwZl90ZXN0bW9kX3N0cnVjdF9hcmdfMSAqYSkge1xuIFx0cmV0dXJuIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQ7XG4gfVxuIFxuKyNpZmRlZiBfX1NJWkVPRl9JTlQxMjhfX1xuK25vaW5saW5lIF9faW50MTI4XG4rYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfcmV0KGludCBhKVxuK3tcbitcdGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQgPSBhO1xuK1x0cmV0dXJuIChfX2ludDEyOClhO1xuK31cbitcbisvKlxuKyAqIFRoZSBfX2ludDEyOCAnYScgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9uIHB1cnBvc2UuIE9uIGFybTY0IGEgMTYtYnl0ZVxuKyAqIGFyZ3VtZW50IG11c3Qgc3RhcnQgaW4gYW4gZXZlbi1udW1iZXJlZCByZWdpc3RlciBwYWlyLCBzbyBwbGFjaW5nIGl0XG4rICogYWZ0ZXIgYSBzaW5nbGUtcmVnaXN0ZXIgc2NhbGFyIHdvdWxkIGxlYXZlIGEgcGFkZGluZyByZWdpc3RlciAoeDEpXG4rICogdW51c2VkLiBwYWhvbGUgbWFwcyBwYXJhbWV0ZXJzIHRvIHJlZ2lzdGVycyBwb3NpdGlvbmFsbHkgYW5kIHdvdWxkIHRoZW5cbisgKiBzZWUgdGhlIGZvbGxvd2luZyBhcmd1bWVudCBpbiBhbiBcInVuZXhwZWN0ZWRcIiByZWdpc3RlciBhbmQgc2tpcCBCVEZcbisgKiBlbmNvZGluZyBvZiB0aGUgd2hvbGUgZnVuY3Rpb24sIG1ha2luZyBpdCB1bmF0dGFjaGFibGUuIEtlZXBpbmcgdGhlXG4rICogX19pbnQxMjggZmlyc3QgKHgwOngxKSBhdm9pZHMgdGhlIHBhZGRpbmcgd2hpbGUgc3RpbGwgZXhlcmNpc2luZyB0aGVcbisgKiB0cmFtcG9saW5lIHBhY2tpbmcgb2YgYSAxMjgtYml0IGFyZ3VtZW50IHRvZ2V0aGVyIHdpdGggdGhlIHRyYWlsaW5nXG4rICogaW50IGFuZCBsb25nIGFyZ3VtZW50cy5cbisgKi9cbitub2lubGluZSBsb25nXG4rYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnKF9faW50MTI4IGEsIGludCBiLCBsb25nIGMpXG4re1xuK1x0YnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdCA9IChsb25nKWEgKyBiICsgYztcbitcdHJldHVybiBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9hcmdfcmVzdWx0O1xuK31cbisjZW5kaWZcbitcbiBfX3dlYWsgbm9pbmxpbmUgdm9pZCBicGZfdGVzdG1vZF9sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nX25hbWUodm9pZClcbiB7XG4gfVxuQEAgLTUxNCw2ICs1NDEsMTEgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcbiBcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfYXJnX3B0cl90b19zdHJ1Y3QoXHUwMDI2c3RydWN0X2FyZzFfMik7XG4gXG4rI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fXG4rXHQodm9pZClicGZfdGVzdG1vZF90ZXN0X2ludDEyOF9yZXQoaSk7XG4rXHQodm9pZClicGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmcoKF9faW50MTI4KTEsIDIsIDMpO1xuKyNlbmRpZlxuK1xuIFx0KHZvaWQpdHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF90cChOVUxMKTtcbiBcbiBcdGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczMoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjEwLjcxMDE1MjE4MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjk5MTcwMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFN1YnN5c3RlbSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQncyB0b3VjaGluZyB0aGUgQlBGIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBsYXJnZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgaW4gQlBGIHRyYW1wb2xpbmVzIGFuZCBzdHJ1Y3Qgb3BzLiBUaGUga2V5IGlkZWEgaGVyZSBpcyB0byBjb3JyZWN0bHkgaGFuZGxlIHZhbHVlcyBsYXJnZXIgdGhhbiA4IGJ5dGVzLCBsaWtlIGBfX2ludDEyOGAgb3Igc2l6YWJsZSBzdHJ1Y3RzLCB3aGljaCBhcmUgbm93IGJlaW5nIGFkZHJlc3NlZC4gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuRmlyc3QsIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB0aGUgY2hhbmdlIGluIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgc2lnbmlmaWNhbnQuIFRoZSBjb2RlIG5vdyB1bmNvbmRpdGlvbmFsbHkgYWxsb2NhdGVzIGV4dHJhIHJlZ2lzdGVycyBmb3IgYW55IGFyZ3VtZW50IGxhcmdlciB0aGFuIDggYnl0ZXMsIGFzIG9wcG9zZWQgdG8gb25seSBmb3Igc3RydWN0IGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpeCBmb3IgdGhlIG9yaWdpbmFsIGxvZ2ljLlxuXG5UaGVuLCBsb29raW5nIGF0IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB0aGVyZSdzIGEgbmV3IGBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbGAgZnVuY3Rpb24gdGhhdCBlc3NlbnRpYWxseSBnYXRlcyB0aGUgYXR0YWNobWVudCB0byBmdW5jdGlvbnMgYmFzZWQgb24gcmV0dXJuIHNpemUgZm9yIGNlcnRhaW4gYXR0YWNoIHR5cGVzIGxpa2UgYEJQRl9NT0RJRllfUkVUVVJOYCBhbmQgYEJQRl9UUkFDRV9GRVhJVGAuIFRoaXMgcHJldmVudHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGdlbmVyYXRlIGluY29ycmVjdCByZXR1cm4gc2l6ZXMgaWYgdGhlIHNpemUgZXhjZWVkcyA4IGJ5dGVzLlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gZW5zdXJlIGl0IGhhbmRsZXMgdGhlc2UgZWRnZSBjYXNlcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBob2xlcy5cblxuSSdtIHRoaW5raW5nIHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHNob3VsZCBiZTpcbiogICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBJIGJlbGlldmUgdGhpcyBpcyBnb29kIGJlY2F1c2UgaXTigJlzIGNhbGxlZCBkdXJpbmcgdGhlIGxvYWRpbmcgYW5kIGF0dGFjaGluZyBvZiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIG5vdCBhbiBleGVjdXRpb24gYm90dGxlbmVjay5cbiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCDigJMgZm9yIEJQRiBzdHJ1Y3Rfb3BzIHJlZ2lzdHJhdGlvbi5cbiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGFuZCBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgIOKAkyBiZWNhdXNlIHRoZXNlIGFyZSBjYWxsZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbi5cblxuSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IEJQRiBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gV2UncmUgbG9va2luZyBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19CUEZfSklUYCwgYW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLlxuXG5GaW5hbGx5LCBJJ2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIGlmIHRob3NlIGRlcGVuZCBvbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb25zLCBieSB1c2luZyBgZ3JlcHBlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NzEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjoyMS40MDkzMjQ1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM0Nzc2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTIyNjI9aW50IGJwZl9zdHJ1Y3Rfb3BzX3Rlc3RfcnVuKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yMjY0LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvYnBmLmg6MjI2NTppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIyNjYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MzI0PWludCBicGZfc3RydWN0X29wc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHMsIHUzMiBtb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTMzMC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzMxOmludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zMzItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTk4MzU9YnRmX2FkZF9zdHJ1Y3Rfb3BzKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHMsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTk4NjYtXFxua2VybmVsL2JwZi9idGYuYzo5ODY3OlxcdGVyciA9IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChcXHUwMDI2dGFiLVxcdTAwM2VvcHNbYnRmLVxcdTAwM2VzdHJ1Y3Rfb3BzX3RhYi1cXHUwMDNlY250XSwgYnRmLCBsb2cpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTg2OC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjoyNC43NDQxMDg5NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3OTA4NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBCUEYgVmVyaWZpY2F0aW9uIGFuZCBKSVQgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBCUEYgYnl0ZWNvZGUgZ2V0cyB2ZXJpZmllZCBhbmQgdGhlbiBwb3RlbnRpYWxseSBKdXN0LUluLVRpbWUgY29tcGlsZWQuIFRoZSBjb3JlIG9mIHRoaXMgcHJvY2VzcywgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBuZWVkIHRvIGV4YW1pbmUgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGFuZCB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHR3byBzcGVjaWZpYyBmaWxlczogYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJIGtub3cgdGhhdCBgdmVyaWZpZXIuY2Agc2hvdWxkIGNvbnRhaW4gdGhlIGxvZ2ljIHRvIGFuYWx5emUgdGhlIEJQRiBieXRlY29kZSBmb3Igc2FmZXR5IGFuZCBhZGhlcmVuY2UgdG8gcnVsZXMgYmVmb3JlIGl0J3MgZXhlY3V0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBjcmFzaGVzIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgYnBmX2ppdF9jb21wLmNgIGlzIGxpa2VseSB3aGVyZSB0aGUgYWN0dWFsIEpJVCBjb21waWxhdGlvbiBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCB0cmFuc2xhdGluZyB0aGUgQlBGIGluc3RydWN0aW9ucyBpbnRvIG5hdGl2ZSB4ODYgbWFjaGluZSBjb2RlIGZvciBmYXN0ZXIgZXhlY3V0aW9uLiBTbywgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZmlsZXMgaXMga2V5LiBJJ2xsIHN0YXJ0IHdpdGggdGhlIHZlcmlmaWVyLCBidXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBKSVQgY29tcGlsZXIgd2lsbCBoYXZlIGl0cyBvd24gZXhwZWN0YXRpb25zIGFuZCBhc3N1bXB0aW9ucyBiYXNlZCBvbiB3aGF0IHRoZSB2ZXJpZmllciBhbGxvd3MuIFRoZSBjb21waWxhdGlvbiBtaWdodCBmYWlsIG9yIGJlIHN1Ym9wdGltYWwgaWYgdGhlIHZlcmlmaWVyIGRvZXNuJ3QgZW5mb3JjZSB0aGUgcmlnaHQgY29uc3RyYWludHMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6MjguMDAyMDE5MzgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTQwNzk2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xODA5PXN0YXRpYyB2b2lkIHNpZ25fZXh0ZW5kKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZCwgaW50IHJqLCB1OCBzaXplLCBib29sIHNpZ24pXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE4MzYtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxODM3OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xODM4LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjE0ND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE2MS1cXHRqaXRfZmlsbF9ob2xlKGltYWdlLCAodW5zaWduZWQgaW50KShyb19pbWFnZV9lbmQgLSByb19pbWFnZSkpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjE2MjpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2Y3R4LCBpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzKTtcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNjMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxODI9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE5MS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIxOTI6XFx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXFx1MDAyNmN0eCwgXFx1MDAyNmltLCBtLCB0bm9kZXMsIGZ1bmNfYWRkciwgZmxhZ3MpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE5My1cXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9Njg2PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9tb2RfcmV0KHUzMiAqaW1hZ2UsIHUzMiAqcm9faW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzIzLS8qXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo3MjQ6ICogUmVmZXIgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKSBmb3Igc3RhY2sgY29tcG9uZW50IGRldGFpbHMuXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy03MjUtICpcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9Nzk3PXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3Jlc3RvcmVfYXJnc19zdGFjayh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTgxMS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjgxMjpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTgxMy1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9MTE5Mj1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTk3LVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTE5ODpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2aW0sIE5VTEwsIE5VTEwsIE5VTEwsIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTk5LVxcdHJldHVybiByZXQ7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTEyMDI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTIxOC1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEyMTk6XFx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIHJ3X2ltYWdlLCByd19pbWFnZSArIHNpemUsIGltYWdlLCBtLFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTIyMC1cXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTk5PXN0YXRpYyBpbnQgaW52b2tlX2JwZihzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0biwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTAyMS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEwMjI6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMjMtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMwNz1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzE2LVxcdGN0eC5yb19pbnNucyA9IE5VTEw7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzE3OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzLCBcXHUwMDI2Y3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTgtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNDgtXFx0Y3R4LnJvX2luc25zID0gcm9faW1hZ2U7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzQ5OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBtLCB0bm9kZXMsIGZ1bmNfYWRkciwgZmxhZ3MsIFxcdTAwMjZjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM1MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjYzMj1zdGF0aWMgaW50IGFsbG9jX3N0YWNrKHN0cnVjdCBicGZfdHJhbXBfaml0ICp0aml0LCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjY0OS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI2NTA6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2NTEtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfdHJhbXBfaml0ICp0aml0LFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yOTY2PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NzQtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyOTc1OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgXFx1MDAyNnRqaXQsIG0sIGZsYWdzLFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjk3Ni1cXHRcXHRcXHRcXHRcXHQgICAgdG5vZGVzLCBvcmlnX2NhbGwpO1xcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yOTgxPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTkwLVxcdG1lbXNldChcXHUwMDI2dGppdCwgMCwgc2l6ZW9mKHRqaXQpKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5OTE6XFx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIFxcdTAwMjZ0aml0LCBtLCBmbGFncyxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTItXFx0XFx0XFx0XFx0XFx0ICAgIHRub2RlcywgZnVuY19hZGRyKTtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwNC1cXHR0aml0LmNvbW1vbi5wcmdfYnVmID0gaW1hZ2U7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDA1OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBcXHUwMDI2dGppdCwgbSwgZmxhZ3MsXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDA2LVxcdFxcdFxcdFxcdFxcdCAgICB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzI0ND1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzM0NS0gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzM0NjpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzM0Ny1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjY2PWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY4MS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY4MjpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICsgc2l6ZSwgaW1hZ2UsIG0sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2ODMtXFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY5NT1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MDEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3MDI6XFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzAzLVxcdCAqIFRoaXMgd2lsbCBOT1QgY2F1c2UgZnJhZ21lbnRhdGlvbiBpbiBkaXJlY3QgbWFwLCBhcyB3ZSBkbyBub3RcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEyLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzEzOlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICsgUEFHRV9TSVpFLCBpbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxNC1cXHRcXHRcXHRcXHRcXHQgICAgbSwgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6MzAuMTU2MTA0MzI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0Njg5NjIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IHRoaXMgQlBGIHRyYW1wb2xpbmUgc2V0dXAgcmlnaHQuIEknbSBnb2luZyB0byBuZWVkIHRvIGVuYWJsZSBhIGZldyBrZXkgY29uZmlndXJhdGlvbnMgaW4gdGhlIGtlcm5lbC4gRmlyc3QsIG9idmlvdXNseSwgSSBuZWVkIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQncyBmdW5kYW1lbnRhbC4gVGhlbiwgYEJQRl9KSVRgIGZvciBKdXN0LUluLVRpbWUgY29tcGlsYXRpb24sIGNhbid0IHJlYWxseSBkbyBtdWNoIHdpdGhvdXQgdGhhdC4gVGhlIGBERUJVR19JTkZPX0JURmAgb3B0aW9uIGlzIGFsc28gY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBpbnRyb3NwZWN0aW9uIHdpdGggQlRGIChCUEYgVHlwZSBGb3JtYXQpLiBBbmQgc2luY2UgdGhpcyAqaXMqIGFib3V0IEJQRiB0cmFtcG9saW5lcywgSSdtIGdvaW5nIHRvIG5lZWQgYEZUUkFDRWAuIEZpbmFsbHksIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgSSB3aWxsIG5lZWQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBzbyB0aGF0IHRoZSBCUEYgdHJhbXBvbGluZXMgZnVuY3Rpb24gY29ycmVjdGx5LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjMzLjcwMzAwMjY4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgzNDcyMTkzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1RSQU1QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjozNS40ODY0ODI3ODNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA2MzcyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmc6IFdoZXJlIHRvIEZpbmQgdGhlIFRyYW1wb2xpbmU/KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBhIHRyYW1wb2xpbmUsIHByZXN1bWFibHkgc29tZXRoaW5nIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgQlBGIG9yIHBvc3NpYmx5IGV2ZW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZlYXR1cmVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGxpa2VseSBpbnZvbHZlbWVudCBvZiBCUEYsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIHdpdGhpbiB0aGUga2VybmVsLiBJJ2QgZXhwZWN0IHRvIGZpbmQgc29tZXRoaW5nIHRoZXJlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0cmFtcG9saW5lIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLlxuXG5Ib3dldmVyLCBhIHRyYW1wb2xpbmUgY291bGQgYWxzbyBiZSBhIHZlcnkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlLiBJZiBpdCdzIHg4Ni1zcGVjaWZpYywgb3IgdXNlcyB4ODYgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB0aGVuIEknbGwgaW1tZWRpYXRlbHkgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gVGhhdCB3b3VsZCBiZSB3aGVyZSBJJ2QgYW50aWNpcGF0ZSBmaW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGl0LCBwYXJ0aWN1bGFybHkgaWYgaXQncyB0aWVkIHRvIHRoaW5ncyBsaWtlIENQVSBmZWF0dXJlcywgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLCBvciBtZW1vcnkgbWFuYWdlbWVudC5cblxuQmFzaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdHdvIGRpc3RpbmN0IHBhdGhzIGhlcmUuIEJQRiBpcyBteSBmaXJzdCBndWVzcywgYnV0IHg4NiBpcyBhIHZlcnkgc3Ryb25nIGNvbnRlbmRlciwgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIGNvbnRleHQgb2YgdGhpcyBcInRyYW1wb2xpbmVcIiBpbXBsZW1lbnRhdGlvbi4gQm90aCBvZiB0aG9zZSBsb2NhdGlvbnMgYXJlIG15IGdvLXRvIHN0YXJ0aW5nIHBvaW50cyBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aG9zZSBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjozOS4xOTI4NTc2MDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTg2MTc0ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6NDAuOTkxNDgwMzIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODMyMTU2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXIuIEknbSBub3QgbG9va2luZyBmb3IgYSBoaWdoLWxldmVsIG92ZXJ2aWV3OyBJIG5lZWQgdG8gZGlnIGRlZXAgaW50byB0aGUga25vYnMgYW5kIGxldmVycyBhdmFpbGFibGUuIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMsIHJ1bnRpbWUgcGFyYW1ldGVycywgYW5kIGFueSBkZWJ1ZyBmbGFncyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHkgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgaW1wYWN0IGl0cyBzYWZldHkgZ3VhcmFudGVlcyBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLiBJIHN1c3BlY3QgdGhlcmUgYXJlIHNvbWUgaGlkZGVuIGdlbXMgaW4gdGhlcmUgcmVnYXJkaW5nIHRoZSB0cmFkZS1vZmZzIGl0IG1ha2VzIHRvIGF2b2lkIG92ZXJseSBhZ2dyZXNzaXZlIHZlcmlmaWNhdGlvbiB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZS4gVGltZSB0byBjaGVjayB0aGUgaW5jbHVkZXMsIG1hY3JvIGRlZmluaXRpb25zLCBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIHdpdGhpbiB0aGUgZmlsZSDigJMgdGhhdCdzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnl0aGluZyByZWxhdGVkIHRvIGZlYXR1cmUgZ2F0aW5nIG9yIGVuYWJsaW5nL2Rpc2FibGluZyBzcGVjaWZpYyB2ZXJpZmljYXRpb24gY2hlY2tzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVhbGx5IG9wdGltaXppbmcgQlBGIHByb2dyYW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY1MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjQ0Ljc3NDY5ODQwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwOTExNDMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTExNjE9aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTYzLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE2NDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExNjUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9Njg0OD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MDI1LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjcwMjY6XFx0XFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNzAyNy1cXHRcXHR0bmFtZSArPSBzaXplb2YoXFxcImJ0Zl90cmFjZV9cXFwiKSAtIDE7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjg5PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzgyMS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozODIyOlxcdFxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIHRndF9wcm9nLCBidGZfaWQsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzgyMy1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGd0X2luZm8pO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA3Nj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDg2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwODc6XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDg4LVxcdFxcdFxcdFxcdCAgICAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zl9pZCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg4OD1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODk5LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MDA6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwMS0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NzY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg4OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4OTA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODkxLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzM0OlxcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzMzUtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6NDYuNzgzODQ4MTU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDI4NzI3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEltcGxlbWVudGF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBCUEYgc3R1ZmYsIGZvY3VzaW5nIG9uIHNvbWUgc3BlY2lmaWMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIEknbSB6ZXJvaW5nIGluIG9uIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgLCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLCBhbmQgYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYCwgYXMgd2VsbCBhcyB0aG9zZSBrZXkgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC5cblxuRmlyc3QsIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgLi4uIGlzIHRoYXQgZXZlbiByZWFjaGFibGU/IEFoLCB5ZXMsIGl04oCZcyBjbGVhcmx5IGFjY2Vzc2libGUgdGhyb3VnaCBgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkYCBhbmQgYGJ0Zl9hZGRfc3RydWN0X29wc2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIEJURiBwYXJzaW5nIGFuZCBzdHJ1Y3Rfb3BzIHJlZ2lzdHJhdGlvbi4gXG5cbk5vdywgb24gdG8gYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YC4gSSByZW1lbWJlciB0aGlzIG9uZTsgaXQgZ2V0cyBpbnZva2VkIGR1cmluZyBib3RoIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiAqYW5kKiBkdXJpbmcgdGhlIGF0dGFjaCBwcm9jZXNzLiBTYW1lIHdpdGggYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYDsgdGhhdCdzIGFub3RoZXIgY3JpdGljYWwgY2hlY2sgZHVyaW5nIHZlcmlmaWNhdGlvbi4gU28gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGlzIHByZXR0eSB0aG9yb3VnaC5cblxuSG1tLCB3aGF0IGVsc2UgbWlnaHQgYmUgaW1wb3J0YW50IGNvbmZpZy13aXNlPyBXYWl0Li4uIGBGVFJBQ0VgISBUaGF0J3MgYWxtb3N0IGFsd2F5cyBhIGtleSBkZXBlbmRlbmN5IHdoZW4gd29ya2luZyB3aXRoIEJQRiB0cmFtcG9saW5lcy4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZCByZWNlbnRseS4gVGhlc2UgY2FuIGJlIHRyaWNreSBhbmQgZWFzeSB0byBtaXNzIG9uIHF1aWNrIHJldmlld3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODAyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjUxLjc4NjcyMzY2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDgxNDUxNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9UUkFNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6NTMuNTA3NTQ1MDExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjI1Mjc2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipMb2NhdGluZyB0aGUgVHJhbXBvbGluZSBPYmplY3QgRmlsZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgdHJhbXBvbGluZS5vYCBvYmplY3QgZmlsZSBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgQlBGIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBCUEYtcmVsYXRlZCBjb21waWxhdGlvbiBpcyBsaWtlbHkgY29udHJvbGxlZCwgc28gdGhhdCdzIHdoZXJlIEkgc2hvdWxkIGJlIGFibGUgdG8gcGlucG9pbnQgaXRzIGNyZWF0aW9uLiBJIHdpbGwgY2hlY2sgZm9yIHRoaXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjU4LjUzMDA3NTI1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjY0ODI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFtcG9saW5lLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9saXZlcGF0Y2gvcmVsaWFibGUtc3RhY2t0cmFjZS5yc3Q9MTc5PWluZm9ybWF0aW9uIGlzIG5vdCBpbiBhIGNvbnNpc3RlbnQgbG9jYXRpb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZW50cnlcXG5Eb2N1bWVudGF0aW9uL2xpdmVwYXRjaC9yZWxpYWJsZS1zdGFja3RyYWNlLnJzdDoxODA6dHJhbXBvbGluZSBvciByZXR1cm4gdHJhbXBvbGluZS4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyaW5nIHRoZSB4ODZfNjRcXG5Eb2N1bWVudGF0aW9uL2xpdmVwYXRjaC9yZWxpYWJsZS1zdGFja3RyYWNlLnJzdC0xODEtJ3JldHVybl90b19oYW5kbGVyJyByZXR1cm4gdHJhbXBvbGluZTpcXG4tLVxcbmFyY2gvYXJjL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmgtMTgtICogd2hpY2ggYWxsb3dzIHNpZ3JldHVybiBiYXNlZCByZS1lbnRyeSBpbnRvIGtlcm5lbCBhZnRlciBoYW5kbGluZyBzaWduYWwuXFxuYXJjaC9hcmMvaW5jbHVkZS91YXBpL2FzbS9zaWduYWwuaDoxOTogKiBXL28gdGhpcyBrZXJuZWwgbmVlZHMgdG8gXFxcInN5bnRoZXNpemVcXFwiIHRoZSBzaWdyZXR1cm4gdHJhbXBvbGluZSBvbiB1c2VyXFxuYXJjaC9hcmMvaW5jbHVkZS91YXBpL2FzbS9zaWduYWwuaC0yMC0gKiBtb2RlIHN0YWNrIHdoaWNoIGluIHR1cm4gZm9yY2VzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfS1BST0JFUylcXHRcXHQrPSBrcHJvYmVzLm8gZGVjb2RlLWluc24ub1xcdFxcXFxcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU6MzpcXHRcXHRcXHRcXHQgICBrcHJvYmVzX3RyYW1wb2xpbmUub1xcdFxcdFxcXFxcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGUtNC1cXHRcXHRcXHRcXHQgICBzaW11bGF0ZS1pbnNuLm9cXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jPTE0MzQ9c3RhdGljIGludCBnY3Nfc2lnbmFsX2VudHJ5KF9fc2lncmVzdG9yZV90IHNpZ3RyYW1wLCBzdHJ1Y3Qga3NpZ25hbCAqa3NpZylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jLTE0NTEtXFx0LypcXG5hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYzoxNDUyOlxcdCAqIFB1c2ggYSBjYXAgYW5kIHRoZSBHQ1MgZW50cnkgZm9yIHRoZSB0cmFtcG9saW5lIG9udG8gdGhlIEdDUy5cXG5hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYy0xNDUzLVxcdCAqL1xcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjU1Mz1zdGF0aWMgdm9pZCBzdG9yZV9mdW5jX21ldGEoc3RydWN0IGppdF9jdHggKmN0eCwgdTY0IGZ1bmNfbWV0YSwgaW50IGZ1bmNfbWV0YV9vZmYpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNTY2LSAqICAgbW92IHg5LCBsclxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjI1Njc6ICogICBibCAgXFx1MDAzY2JwZl90cmFtcG9saW5lIG9yIHBsdFxcdTAwM2VcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNTY4LSAqXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Byb2Jlcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19LUFJPQkVTKVxcdFxcdCs9IGtwcm9iZXMubyBkZWNvZGUtaW5zbi5vIHNpbXVsYXRlLWluc24ub1xcbmFyY2gvY3NreS9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0tQUk9CRVMpXFx0XFx0Kz0ga3Byb2Jlc190cmFtcG9saW5lLm9cXG5hcmNoL2Nza3kva2VybmVsL3Byb2Jlcy9NYWtlZmlsZS00LW9iai0kKENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSlcXHQrPSBmdHJhY2Uub1xcbi0tXFxuYXJjaC9oZXhhZ29uL2tlcm5lbC9NYWtlZmlsZT03PW9iai15ICs9IHNldHVwLm8gaXJxX2NwdS5vIHRyYXBzLm8gc3lzY2FsbHRhYi5vIHNpZ25hbC5vIHRpbWUub1xcbmFyY2gvaGV4YWdvbi9rZXJuZWwvTWFrZWZpbGU6ODpvYmoteSArPSBwcm9jZXNzLm8gdHJhbXBvbGluZS5vIHJlc2V0Lm8gcHRyYWNlLm8gdmRzby5vXFxuYXJjaC9oZXhhZ29uL2tlcm5lbC9NYWtlZmlsZS05LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTI5PWlmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZS00MC0gIENGTEFHU19SRU1PVkVfcmV0aG9vay5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjQxOiAgQ0ZMQUdTX1JFTU9WRV9yZXRob29rX3RyYW1wb2xpbmUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZS00Mi1lbmRpZlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTc2PW9iai0kKENPTkZJR19LUFJPQkVTKVxcdFxcdCs9IGtwcm9iZXMub1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZTo3NzpvYmotJChDT05GSUdfUkVUSE9PSylcXHRcXHQrPSByZXRob29rLm8gcmV0aG9va190cmFtcG9saW5lLm9cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGUtNzgtb2JqLSQoQ09ORklHX1VQUk9CRVMpXFx0XFx0Kz0gdXByb2Jlcy5vXFxuLS1cXG5hcmNoL25pb3MyL2tlcm5lbC9zaWduYWwuYz0xODI9c3RhdGljIGludCBzZXR1cF9ydF9mcmFtZShzdHJ1Y3Qga3NpZ25hbCAqa3NpZywgc2lnc2V0X3QgKnNldCxcXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jLTIwMy1cXHQvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlOyBqdW1wIHRvIGZpeGVkIGFkZHJlc3Mgc2lncmV0dXJuXFxuYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmM6MjA0OlxcdCAgIHRyYW1wb2xpbmUgb24ga3VzZXIgcGFnZS4gICovXFxuYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMtMjA1LVxcdHJlZ3MtXFx1MDAzZXJhID0gKHVuc2lnbmVkIGxvbmcpICgweDEwNDQpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz01MzU9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTUzOC1cXHQgKiBUT0RPOiBSZW1vdmUgYWZ0ZXIgdmFsaWRhdGluZyBzdXBwb3J0XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo1Mzk6XFx0ICogZm9yIGZzZXNzaW9uIGFuZCB0cmFtcG9saW5lIG9uIHBwYzMyLlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTQwLVxcdCAqL1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX0tQUk9CRVMpXFx0XFx0Kz0ga3Byb2Jlcy5vIGRlY29kZS1pbnNuLm8gc2ltdWxhdGUtaW5zbi5vXFxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1JFVEhPT0spXFx0XFx0Kz0gcmV0aG9vay5vIHJldGhvb2tfdHJhbXBvbGluZS5vXFxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX1VQUk9CRVMpXFx0XFx0Kz0gdXByb2Jlcy5vIGRlY29kZS1pbnNuLm8gc2ltdWxhdGUtaW5zbi5vXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU9Nj1DRkxBR1NfUkVNT1ZFX3JldGhvb2subyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbmFyY2gvcmlzY3Yva2VybmVsL3Byb2Jlcy9NYWtlZmlsZTo3OkNGTEFHU19SRU1PVkVfcmV0aG9va190cmFtcG9saW5lLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4tLVxcbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTM1PW9iai15XFx0Kz0gdmVyc2lvbi5vIHBnbV9jaGVjay5vIGN0eXBlLm8gaXBsX2RhdGEubyByZWxvY3MubyBhbHRlcm5hdGl2ZS5vXFxuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGU6MzY6b2JqLXlcXHQrPSB1di5vIHByaW50ay5vIHRyYW1wb2xpbmUub1xcbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTM3LW9iai0kKENPTkZJR19SQU5ET01JWkVfQkFTRSlcXHQrPSBrYXNsci5vXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUylcXHQrPSBodl9zcGlubG9jay5vXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGUtMTQtIGlmZGVmIENPTkZJR19NU0hWX1JPT1RcXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGU6MTU6ICBDRkxBR1NfUkVNT1ZFX2h2X3RyYW1wb2xpbmUubyArPSAtcGdcXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGU6MTY6ICBDRkxBR1NfaHZfdHJhbXBvbGluZS5vICAgICAgICArPSAtZm5vLXN0YWNrLXByb3RlY3RvclxcbmFyY2gveDg2L2h5cGVydi9NYWtlZmlsZToxNzogIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKSAgICAgICs9IGh2X2NyYXNoLm8gaHZfdHJhbXBvbGluZS5vXFxuYXJjaC94ODYvaHlwZXJ2L01ha2VmaWxlLTE4LSBlbmRpZlxcbi0tXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jPTI4Mz1leHRlcm4gdm9pZCBmdHJhY2VfcmVnc19jYWxsZXJfam1wKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTI5MC0gKiBUaGUgZnRyYWNlX29wcyBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGxiYWNrLiBTaW5jZSB0aGVcXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6MjkxOiAqIHRyYW1wb2xpbmUgb25seSBzZXJ2aWNlcyBhIHNpbmdsZSBmdHJhY2Vfb3BzLCB3ZSBjYW4gcGFzcyBpblxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy0yOTItICogdGhhdCBvcHMgZGlyZWN0bHkuXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9NDc3PXZvaWQgYXJjaF9mdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00ODUtXFx0aWYgKCFvcHMtXFx1MDAzZXRyYW1wb2xpbmUpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6NDg2OlxcdFxcdG9wcy1cXHUwMDNldHJhbXBvbGluZSA9IGNyZWF0ZV90cmFtcG9saW5lKG9wcywgXFx1MDAyNnNpemUpO1xcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00ODctXFx0XFx0aWYgKCFvcHMtXFx1MDAzZXRyYW1wb2xpbmUpXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NTc9c3RhdGljIHZvaWQgdHJhbXBvbGluZV91bmxvY2soc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTYxLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjYyOnN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTYzLVxcdGludCAoKnJlZ2lzdGVyX2ZlbnRyeSkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmRhdGEpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzA9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03My1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4PXN0YXRpYyBpbnQgYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU3LVxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OS1cXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NC1cXHRcXHRcXHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjYtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NzM9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MDAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NTAxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfb3BzID0ge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUwMi1cXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnksXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02NzM9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2NzQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02NzUte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTA1PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTA3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTA4OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MDktXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk0Nj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk1Mi1cXHR0cmFtcG9saW5lX2xvY2sodHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk1MzpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTU0LVxcdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk1OD1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTYwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTYxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjItXFx0XFx0XFx0XFx0XFx0dm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4Mz1pbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg5LVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTkwOlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5MS1cXHR0cmFtcG9saW5lX3VubG9jayh0cik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDc2PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMTgtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTExOTpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcXHUwMDI2c2hpbV9saW5rLVxcdTAwM2VsaW5rLm5vZGUsIHRyLCBOVUxMLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMjAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NTg9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTc0LVxcdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTI2MzU9dm9pZCB1cHJvYmVfaGFuZGxlX3RyYW1wb2xpbmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy0yNjU1LVxcdFxcdCAqIG9yIE5VTEw7IHRoZSBsYXR0ZXIgY2FzZSBtZWFucyB0aGF0IG5vYm9keSBidXQgcmktXFx1MDAzZWZ1bmNcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzoyNjU2OlxcdFxcdCAqIGNvdWxkIGhpdCB0aGlzIHRyYW1wb2xpbmUgb24gcmV0dXJuLiBUT0RPOiBzaWdhbHRzdGFjaygpLlxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTI2NTctXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9MzMwPWludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTM2NC1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6MzY1OlxcdGZ0cmFjZV91cGRhdGVfdHJhbXBvbGluZShvcHMpO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy0zNjYtXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9MzkzPXN0YXRpYyB2b2lkIGZ0cmFjZV91cGRhdGVfcGlkX2Z1bmModm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00MDQtXFx0XFx0XFx0XFx0ZnRyYWNlX3BpZF9mdW5jIDogb3AtXFx1MDAzZXNhdmVkX2Z1bmM7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQwNTpcXHRcXHRcXHRmdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUob3ApO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00MDYtXFx0XFx0fVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTg0MTQ9c3RhdGljIHZvaWQgZnRyYWNlX3VwZGF0ZV90cmFtcG9saW5lKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODQxNy1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODQxODpcXHRhcmNoX2Z0cmFjZV91cGRhdGVfdHJhbXBvbGluZShvcHMpO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NDE5LVxcdGlmIChvcHMtXFx1MDAzZXRyYW1wb2xpbmUgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2V0cmFtcG9saW5lICE9IHRyYW1wb2xpbmUgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbnRvb2xzL3BlcmYvdXRpbC9kc28uaD0yOD1lbnVtIGRzb19iaW5hcnlfdHlwZSB7XFxuLS1cXG50b29scy9wZXJmL3V0aWwvZHNvLmgtOTctXFx0RFNPX0JJTkFSWV9UWVBFX19CUEZfUFJPR19JTkZPLFxcbnRvb2xzL3BlcmYvdXRpbC9kc28uaDo5ODpcXHQvKiogQERTT19CSU5BUllfVFlQRV9fQlBGX0lNQUdFOiBqaXR0ZWQgQlBGIHRyYW1wb2xpbmUgb3IgZGlzcGF0Y2hlciBjb2RlLiAqL1xcbnRvb2xzL3BlcmYvdXRpbC9kc28uaC05OS1cXHREU09fQklOQVJZX1RZUEVfX0JQRl9JTUFHRSxcXG4tLVxcbnRvb2xzL3BlcmYvdXRpbC9tYXAuYz01Mjk9dTY0IG1hcF9fcmlwXzJvYmpkdW1wKGNvbnN0IHN0cnVjdCBtYXAgKm1hcCwgdTY0IHJpcClcXG4tLVxcbnRvb2xzL3BlcmYvdXRpbC9tYXAuYy01MzUtXFx0ICogdm1saW51eCBkb2VzIG5vdCBoYXZlIHByb2dyYW0gaGVhZGVycyBmb3IgUFRJIGVudHJ5IHRyYW1wb2xpbmVzIGFuZFxcbnRvb2xzL3BlcmYvdXRpbC9tYXAuYzo1MzY6XFx0ICoga2NvcmUgbWF5IG5vdCBlaXRoZXIuIEhvd2V2ZXIgdGhlIHRyYW1wb2xpbmUgb2JqZWN0IGNvZGUgaXMgb24gdGhlXFxudG9vbHMvcGVyZi91dGlsL21hcC5jLTUzNy1cXHQgKiBtYWluIGtlcm5lbCBtYXAsIHNvIGp1c3QgdXNlIHRoYXQgaW5zdGVhZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzM6MDEuMTg2NzI4NjA5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTIyNDc0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIEJQRiBKSVQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19CUEZfSklUYCBvcHRpb24gaXMgY2xlYXJseSB0aGUgbHluY2hwaW4gaGVyZSwgdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIG1ha2Ugc3VyZSBJJ20gZm9jdXNpbmcgb24gdGhlIHJpZ2h0IHN5bWJvbHMgZm9yIHRoaXMgZGVlcCBkaXZlLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCBpcyBpbmRlZWQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJdCBzZWVtcyByaWdodCAtIGl0J3MgY2FsbGVkIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZm9yIGEgc3RydWN0X29wcywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgQlBGIGludGVyYWN0cyB3aXRoIGtlcm5lbCBzdHJ1Y3R1cmVzLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiBpdC4gQW5kIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGAgaXMgcmVsZXZhbnQgYmVjYXVzZSBpdCdzIHdoZXJlIHRoZSBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGl0c2VsZiBpcyB2ZXJpZmllZCwgd2hpY2ggaXMgY2xlYXJseSBpbXBvcnRhbnQgdG8gdGhlIHByb2Nlc3MuIEJvdGggb2YgdGhvc2UgbG9vayBsaWtlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIHRoZSBhbmFseXNpcy5cblxuQWxyaWdodCwgbGV0IG1lIG5vdyB0YWtlIGEgbG9vayBhdCBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgLCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBjYW4gcHJvdmlkZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMzOjA2LjgzODk3OTA3OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NDg5OTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE1OTI9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTU5NS0vKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IHRyYW1wb2xpbmUuYyAqL1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTU5NjppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNTk3LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MTE9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYyNC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjI1OlxcdFxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKGJ0ZiwgcHJvZywgaWRzW2ldLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MjYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MDM6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQwNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzM6MDguNTgzODg2NTI1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0ODk2MTA4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVHJhbXBvbGluZSBhbmQgTGFyZ2UgQXJndW1lbnQgRml4KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiB0cmFtcG9saW5lIGlzc3VlLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBsZXQncyB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvcmUgZml4LCB3aGljaCBzZWVtcyB0byByZXNpZGUgaW4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhhdCdzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQncyBzdGF0aWMsIGJ1dCB0aGF0J3MgZmluZTsgaXQgZG9lc24ndCBwcmV2ZW50IGluY2x1c2lvbi4gQWN0dWFsbHksIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYmVjYXVzZSBpdCBjYWxscyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgc28gSSBzaG91bGQgaW5jbHVkZSBpdCBmb3IgY29tcGxldGVuZXNzLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBjb3JyZWN0bHkgaGFuZGxpbmcgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIHRoYXQgYXJlIGxhcmdlciB0aGFuIDggYnl0ZXMsIGxpa2UgYF9faW50MTI4YC4gVGhlIGJ1ZyB3YXMgdGhhdCB0aGUgdHJhbXBvbGluZSB3YXNuJ3QgYWxsb2NhdGluZyBlbm91Z2ggcmVnaXN0ZXJzLiBUaGlzIHdhcyBjYXVzaW5nIGlzc3VlcyBhdHRhY2hpbmcgdG8gZnVuY3Rpb25zIHRoYXQgaGF2ZSByZXR1cm4gdmFsdWVzIFx1MDAzZSA4IGJ5dGVzLiBUaGUgZml4IGFkZHJlc3NlcyB0aGlzIHByb2JsZW0uXG5cbkkndmUgZ290IHRocmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGltcG9ydGFudCB0byBub3RlOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBzdGFuZHBvaW50LCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudC4gU28sIHRoaXMgaXMgYSByZWFsLXdvcmxkIGZpeCwgbm90IGp1c3QgYW4gYWNhZGVtaWMgb25lLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZTpcbiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YFxuKiAgIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGBcbiogICBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgXG4qICAgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWBcblxuYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgc2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0IGJlY2F1c2UgaXQncyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSBCUEYgdHJhbXBvbGluZSBpcyBjcmVhdGVkLCBzbyBpdCdzIGEgZ29vZCBlbnRyeSBwb2ludCBmb3IgdGhlIGNoYW5nZXMuIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgIGlzIGFsc28gcmVsZXZhbnQgc2luY2UgaXQgaXMgY2FsbGVkIGZyb20gYGJ0Zl9hZGRfc3RydWN0X29wc2AsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIEJURiBpcyBsb2FkZWQuIEl0IGlzIGFsc28gYW4gaW1wb3J0YW50IHN5bWJvbC5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDY5LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMzoxNy4wNzM0OTk4MDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk4NjU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFxcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlcyBmb3IgY2VydGFpbiBhdHRhY2ggdHlwZXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFxcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlcyBmb3IgY2VydGFpbiBhdHRhY2ggdHlwZXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 19:16:14 +0000 UTC FinishedAt: 2026-07-11 19:33:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "DEBUG_INFO_BTF" ], "series_id": "db9a01c9-e278-40bd-9d68-db837f683d2b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_struct_ops_desc_init", "bpf_check_attach_target", "bpf_check_attach_btf_id_multi", "arch_prepare_bpf_trampoline" ], "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+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWVzIGZvciBjZXJ0YWluIGF0dGFjaCB0eXBlcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRiNjA3ZDI1NjdlYzQ0M2I1ZjU3MWZhYjE1YTk1ZDMxNDJiNGM5MzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOTozMjowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGRlNzUxNWVhMWJlYWU4Li4wYjhiZDMwZjdjODcwMCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMzM2OSwxMSAmIzQzOzMzNjksOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxuIFx0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuIFxuLVx0LyogZXh0cmEgcmVnaXN0ZXJzIGZvciBzdHJ1Y3QgYXJndW1lbnRzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9TVFJVQ1RfQVJHKVxuLVx0XHRcdG5yX3JlZ3MgJiM0Mzs9IChtLVx1MDAzZWFyZ19zaXplW2ldICYjNDM7IDcpIC8gOCAtIDE7XG4tXHR9XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5yX3JlZ3MgJiM0Mzs9IChtLVx1MDAzZWFyZ19zaXplW2ldICYjNDM7IDcpIC8gOCAtIDE7XG4gXG4gXHQvKiB4ODYtNjQgc3VwcG9ydHMgdXAgdG8gTUFYX0JQRl9GVU5DX0FSR1MgYXJndW1lbnRzLiAxLTZcbiBcdCAqIGFyZSBwYXNzZWQgdGhyb3VnaCByZWdzLCB0aGUgcmVtYWlucyBhcmUgdGhyb3VnaCBzdGFjay5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcbmluZGV4IDUxYjE2ZTVmNTUzNGUwLi40ZTdhNDhjMDJiZTVjZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5AQCAtNDQ1LDYgJiM0Mzs0NDUsMTggQEAgaW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXG4gXHRcdFx0Z290byBlcnJvdXQ7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgaW4gYSByZWdpc3RlciBwYWlyLFxuJiM0MztcdFx0ICogd2hpY2ggdGhlIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBkb2VzIG5vdCBwcmVzZXJ2ZSAob25seVxuJiM0MztcdFx0ICogOCBieXRlcyBvZiB0aGUgcmV0dXJuIHZhbHVlIGFyZSBzYXZlZCBhbmQgcmVzdG9yZWQpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc3Rfb3BzLVx1MDAzZWZ1bmNfbW9kZWxzW2ldLnJldF9zaXplIFx1MDAzZSA4KSB7XG4mIzQzO1x0XHRcdHByX3dhcm4oXCYjMzQ7ZnVuYyBwdHIgJXMgaW4gc3RydWN0ICVzIGhhcyBhIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0bW5hbWUsIHN0X29wcy1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRcdGdvdG8gZXJyb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3R1Yl9mdW5jX2FkZHIgPSAqKHZvaWQgKiopKHN0X29wcy1cdTAwM2VjZmlfc3R1YnMgJiM0MzsgbW9mZik7XG4gXHRcdGVyciA9IHByZXBhcmVfYXJnX2luZm8oYnRmLCBzdF9vcHMtXHUwMDNlbmFtZSwgbW5hbWUsXG4gXHRcdFx0XHQgICAgICAgZnVuY19wcm90bywgc3R1Yl9mdW5jX2FkZHIsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA2NTE1ZDRkM2MwMDMyZi4uMjZkMjgxYjc3YTZlNzIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTE4ODczLDYgJiM0MzsxODg3MywyMCBAQCBzdGF0aWMgaW50IGJ0Zl9pZF9hbGxvd19zbGVlcGFibGUodTMyIGJ0Zl9pZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCBzdHJ1Y3QgYlxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0eXBlKSB7XG4mIzQzO1x0Y2FzZSBCUEZfTU9ESUZZX1JFVFVSTjpcbiYjNDM7XHRjYXNlIEJQRl9UUkFDRV9GRVhJVDpcbiYjNDM7XHRjYXNlIEJQRl9UUkFDRV9GRVhJVF9NVUxUSTpcbiYjNDM7XHRjYXNlIEJQRl9UUkFDRV9GU0VTU0lPTjpcbiYjNDM7XHRjYXNlIEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSTpcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5AQCAtMTkxMzcsNiAmIzQzOzE5MTUxLDE0IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXG4mIzQzO1x0XHRpZiAodGd0X2luZm8tXHUwMDNlZm1vZGVsLnJldF9zaXplIFx1MDAzZSA4IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKSB7XG4mIzQzO1x0XHRcdGJwZl9sb2cobG9nLFxuJiM0MztcdFx0XHRcdFwmIzM0O0F0dGFjaCB0byBmdW5jdGlvbiAlcyB3aXRoIGEgXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGF0dGFjaCB0eXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHRuYW1lKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogKi5tdWx0aSBwcm9ncmFtcyBkb24mIzM5O3QgbmVlZCBhbiBhZGRyZXNzIGR1cmluZyBwcm9ncmFtXG4gXHRcdCAqIHZlcmlmaWNhdGlvbiwgd2UganVzdCB0YWtlIHRoZSBtb2R1bGUgcmVmIGlmIG5lZWRlZC5cbkBAIC0xOTQxMyw2ICYjNDM7MTk0MzUsOSBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidFxuIFx0ZXJyID0gYnRmX2Rpc3RpbGxfZnVuY19wcm90byhOVUxMLCBidGYsIHQsIHRuYW1lLCBcdTAwMjZ0Z3RfaW5mby1cdTAwM2VmbW9kZWwpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAodGd0X2luZm8tXHUwMDNlZm1vZGVsLnJldF9zaXplIFx1MDAzZSA4IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChwcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdGlmIChidGZfaXNfbW9kdWxlKGJ0ZikpIHtcbiBcdFx0LyogVGhlIGJwZiBwcm9ncmFtIGFscmVhZHkgaG9sZHMgcmVmZXJlbmNlIHRvIG1vZHVsZS4gKi9cbiBcdFx0aWYgKFdBUk5fT05fT05DRSghcHJvZy1cdTAwM2VhdXgtXHUwMDNlbW9kKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfZmFpbHVyZS5jXG5pbmRleCBmOWY5ZTFjYjg3YmYxYy4uMzQ1ZGQyMWFkNjIxNzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmNcbkBAIC03Niw2ICYjNDM7NzYsMTYgQEAgc3RhdGljIHZvaWQgdGVzdF9mZXhpdF9ub3JldHVybnModm9pZClcbiBcdFx0XHQgICAgICAgXCYjMzQ7QXR0YWNoaW5nIGZleGl0L2ZzZXNzaW9uL2Ztb2RfcmV0IHRvIF9fbm9yZXR1cm4gZnVuY3Rpb24gJiMzOTtkb19leGl0JiMzOTsgaXMgcmVqZWN0ZWQuXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfZmV4aXRfaW50MTI4X3JldCh2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBfX1NJWkVPRl9JTlQxMjhfX1xuJiM0MztcdHRlc3RfdHJhY2luZ19mYWlsX3Byb2coXCYjMzQ7ZmV4aXRfaW50MTI4X3JldFwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3dpdGggYSBcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXR0YWNoIHR5cGVcJiMzNDspO1xuJiM0MzsjZWxzZVxuJiM0MztcdHRlc3RfX3NraXAoKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4gdm9pZCB0ZXN0X3RyYWNpbmdfZmFpbHVyZSh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2JwZl9zcGluX2xvY2tcJiMzNDspKVxuQEAgLTg2LDQgJiM0Mzs5Niw2IEBAIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZClcbiBcdFx0dGVzdF90cmFjaW5nX2RlbnkoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2ZleGl0X25vcmV0dXJuc1wmIzM0OykpXG4gXHRcdHRlc3RfZmV4aXRfbm9yZXR1cm5zKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7ZmV4aXRfaW50MTI4X3JldFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X2ZleGl0X2ludDEyOF9yZXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbmluZGV4IDZmOGMwYmZiMDQxNTU5Li4xNWI5NWQwMjM1YjUyMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDt0cmFjaW5nX3N0cnVjdC5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cmFjaW5nX3N0cnVjdF9tYW55X2FyZ3Muc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3RyYWNpbmdfc3RydWN0X2ludDEyOC5za2VsLmhcJiMzNDtcbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9hcmdzKHZvaWQpXG4ge1xuQEAgLTExMiw2ICYjNDM7MTEzLDM5IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X21hbnlfYXJncyh2b2lkKVxuIFx0dHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbnQxMjhfYXJncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBfX2ludDEyOCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiBhIHJlZ2lzdGVyIHBhaXIgb24geDg2XzY0IGFuZFxuJiM0MztcdCAqIGFybTY0LCB3aGljaCB0aGUgdHJhbXBvbGluZSBwYWNrcyBpbnRvIHR3byBjb250ZXh0IHNsb3RzLiBPdGhlclxuJiM0MztcdCAqIGFyY2hpdGVjdHVyZXMgcGFzcyBhIF9faW50MTI4IGRpZmZlcmVudGx5IChlLmcuIHMzOTB4IHBhc3NlcyBsYXJnZXJcbiYjNDM7XHQgKiBhcmd1bWVudHMgYnkgcmVmZXJlbmNlKSwgc28gb25seSBleGVyY2lzZSB0aGlzIG9uIHg4Nl82NCBhbmQgYXJtNjQuXG4mIzQzO1x0ICovXG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4mIzQzO1x0c3RydWN0IHRyYWNpbmdfc3RydWN0X2ludDEyOCAqc2tlbDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3RyYWNpbmdfc3RydWN0X2ludDEyOF9fb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IHRyYWNpbmdfc3RydWN0X2ludDEyOF9fYXR0YWNoKHNrZWwpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7dHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBkZXN0cm95X3NrZWw7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9PSyh0cmlnZ2VyX21vZHVsZV90ZXN0X3JlYWQoMjU2KSwgXCYjMzQ7dHJpZ2dlcl9yZWFkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRfYiwgMiwgXCYjMzQ7dDpiXCYjMzQ7KTtcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldF9jLCAzLCBcJiMzNDt0OmNcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0X3JldCwgNiwgXCYjMzQ7dCByZXRcJiMzNDspO1xuJiM0MztcbiYjNDM7ZGVzdHJveV9za2VsOlxuJiM0MztcdHRyYWNpbmdfc3RydWN0X2ludDEyOF9fZGVzdHJveShza2VsKTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHR0ZXN0X19za2lwKCk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRlc3RfdW5pb25fYXJncyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0cmFjaW5nX3N0cnVjdCAqc2tlbDtcbkBAIC0xNDUsNiAmIzQzOzE3OSw4IEBAIHZvaWQgdGVzdF90cmFjaW5nX3N0cnVjdCh2b2lkKVxuIFx0XHR0ZXN0X3N0cnVjdF9hcmdzKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtzdHJ1Y3RfbWFueV9hcmdzXCYjMzQ7KSlcbiBcdFx0dGVzdF9zdHJ1Y3RfbWFueV9hcmdzKCk7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7aW50MTI4X2FyZ3NcJiMzNDspKVxuJiM0MztcdFx0dGVzdF9pbnQxMjhfYXJncygpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7dW5pb25fYXJnc1wmIzM0OykpXG4gXHRcdHRlc3RfdW5pb25fYXJncygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmNcbmluZGV4IDY1ZTQ4NWM0NDY4YzYyLi5mN2EwOTU3Njc2Nzk1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfZmFpbHVyZS5jXG5AQCAtMzAsMyAmIzQzOzMwLDkgQEAgaW50IEJQRl9QUk9HKGZleGl0X25vcmV0dXJucylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7P2ZleGl0L2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKGZleGl0X2ludDEyOF9yZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NjM4ZGZlYzFmMzhlZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfc3RydWN0X2ludDEyOC5jXG5AQCAtMCwwICYjNDM7MSwxOCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MztcbiYjNDM7bG9uZyB0X2IsIHRfYywgdF9yZXQ7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmV4aXQvYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnXCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9pbnQxMjhfYXJnX2ZleGl0KHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dF9iID0gKGludCljdHhbMl07XG4mIzQzO1x0dF9jID0gKGxvbmcpY3R4WzNdO1xuJiM0MztcdHRfcmV0ID0gKGxvbmcpY3R4WzRdO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCAzMGYxY2QyMzA5M2NiZS4uZWIwZjliNWUxOGQ4NWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5AQCAtMTYxLDYgJiM0MzsxNjEsMzMgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9hcmdfcHRyX3RvX3N0cnVjdChzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfc3RydWN0X2FyZ18xICphKSB7XG4gXHRyZXR1cm4gYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdDtcbiB9XG4gXG4mIzQzOyNpZmRlZiBfX1NJWkVPRl9JTlQxMjhfX1xuJiM0Mztub2lubGluZSBfX2ludDEyOFxuJiM0MzticGZfdGVzdG1vZF90ZXN0X2ludDEyOF9yZXQoaW50IGEpXG4mIzQzO3tcbiYjNDM7XHRicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9hcmdfcmVzdWx0ID0gYTtcbiYjNDM7XHRyZXR1cm4gKF9faW50MTI4KWE7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBfX2ludDEyOCAmIzM5O2EmIzM5OyBpcyB0aGUgZmlyc3QgYXJndW1lbnQgb24gcHVycG9zZS4gT24gYXJtNjQgYSAxNi1ieXRlXG4mIzQzOyAqIGFyZ3VtZW50IG11c3Qgc3RhcnQgaW4gYW4gZXZlbi1udW1iZXJlZCByZWdpc3RlciBwYWlyLCBzbyBwbGFjaW5nIGl0XG4mIzQzOyAqIGFmdGVyIGEgc2luZ2xlLXJlZ2lzdGVyIHNjYWxhciB3b3VsZCBsZWF2ZSBhIHBhZGRpbmcgcmVnaXN0ZXIgKHgxKVxuJiM0MzsgKiB1bnVzZWQuIHBhaG9sZSBtYXBzIHBhcmFtZXRlcnMgdG8gcmVnaXN0ZXJzIHBvc2l0aW9uYWxseSBhbmQgd291bGQgdGhlblxuJiM0MzsgKiBzZWUgdGhlIGZvbGxvd2luZyBhcmd1bWVudCBpbiBhbiBcJiMzNDt1bmV4cGVjdGVkXCYjMzQ7IHJlZ2lzdGVyIGFuZCBza2lwIEJURlxuJiM0MzsgKiBlbmNvZGluZyBvZiB0aGUgd2hvbGUgZnVuY3Rpb24sIG1ha2luZyBpdCB1bmF0dGFjaGFibGUuIEtlZXBpbmcgdGhlXG4mIzQzOyAqIF9faW50MTI4IGZpcnN0ICh4MDp4MSkgYXZvaWRzIHRoZSBwYWRkaW5nIHdoaWxlIHN0aWxsIGV4ZXJjaXNpbmcgdGhlXG4mIzQzOyAqIHRyYW1wb2xpbmUgcGFja2luZyBvZiBhIDEyOC1iaXQgYXJndW1lbnQgdG9nZXRoZXIgd2l0aCB0aGUgdHJhaWxpbmdcbiYjNDM7ICogaW50IGFuZCBsb25nIGFyZ3VtZW50cy5cbiYjNDM7ICovXG4mIzQzO25vaW5saW5lIGxvbmdcbiYjNDM7YnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnKF9faW50MTI4IGEsIGludCBiLCBsb25nIGMpXG4mIzQzO3tcbiYjNDM7XHRicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9hcmdfcmVzdWx0ID0gKGxvbmcpYSAmIzQzOyBiICYjNDM7IGM7XG4mIzQzO1x0cmV0dXJuIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQ7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIF9fd2VhayBub2lubGluZSB2b2lkIGJwZl90ZXN0bW9kX2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbmdfbmFtZSh2b2lkKVxuIHtcbiB9XG5AQCAtNTE0LDYgJiM0Mzs1NDEsMTEgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcbiBcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfYXJnX3B0cl90b19zdHJ1Y3QoXHUwMDI2c3RydWN0X2FyZzFfMik7XG4gXG4mIzQzOyNpZmRlZiBfX1NJWkVPRl9JTlQxMjhfX1xuJiM0MztcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldChpKTtcbiYjNDM7XHQodm9pZClicGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmcoKF9faW50MTI4KTEsIDIsIDMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHQodm9pZCl0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX3RwKE5VTEwpO1xuIFxuIFx0YnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWVzIGZvciBjZXJ0YWluIGF0dGFjaCB0eXBlcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGI2MDdkMjU2N2VjNDQzYjVmNTcxZmFiMTVhOTVkMzE0MmI0YzkzMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDExIDE5OjMyOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGRlNzUxNWVhMWJlYWU4Li4wYjhiZDMwZjdjODcwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMzM2OSwxMSAmIzQzOzMzNjksOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbQogCVdBUk5fT05fT05DRSgoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpICZhbXA7JmFtcDsKIAkJICAgICAoZmxhZ3MgJmFtcDsgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpOwogCi0JLyogZXh0cmEgcmVnaXN0ZXJzIGZvciBzdHJ1Y3QgYXJndW1lbnRzICovCi0JZm9yIChpID0gMDsgaSAmbHQ7IG0tJmd0O25yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9TVFJVQ1RfQVJHKQotCQkJbnJfcmVncyAmIzQzOz0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gOCAtIDE7Ci0JfQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbS0mZ3Q7bnJfYXJnczsgaSYjNDM7JiM0MzspCiYjNDM7CQlucl9yZWdzICYjNDM7PSAobS0mZ3Q7YXJnX3NpemVbaV0gJiM0MzsgNykgLyA4IC0gMTsKIAogCS8qIHg4Ni02NCBzdXBwb3J0cyB1cCB0byBNQVhfQlBGX0ZVTkNfQVJHUyBhcmd1bWVudHMuIDEtNgogCSAqIGFyZSBwYXNzZWQgdGhyb3VnaCByZWdzLCB0aGUgcmVtYWlucyBhcmUgdGhyb3VnaCBzdGFjay4KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYwppbmRleCA1MWIxNmU1ZjU1MzRlMC4uNGU3YTQ4YzAyYmU1Y2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMKQEAgLTQ0NSw2ICYjNDM7NDQ1LDE4IEBAIGludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLAogCQkJZ290byBlcnJvdXQ7CiAJCX0KIAomIzQzOwkJLyoKJiM0MzsJCSAqIEEgJmd0OzggYnl0ZSByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgaW4gYSByZWdpc3RlciBwYWlyLAomIzQzOwkJICogd2hpY2ggdGhlIHN0cnVjdF9vcHMgdHJhbXBvbGluZSBkb2VzIG5vdCBwcmVzZXJ2ZSAob25seQomIzQzOwkJICogOCBieXRlcyBvZiB0aGUgcmV0dXJuIHZhbHVlIGFyZSBzYXZlZCBhbmQgcmVzdG9yZWQpLgomIzQzOwkJICovCiYjNDM7CQlpZiAoc3Rfb3BzLSZndDtmdW5jX21vZGVsc1tpXS5yZXRfc2l6ZSAmZ3Q7IDgpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7ZnVuYyBwdHIgJXMgaW4gc3RydWN0ICVzIGhhcyBhICZndDs4IGJ5dGUgcmV0dXJuIHZhbHVlLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkXG4mIzM0OywKJiM0MzsJCQkJbW5hbWUsIHN0X29wcy0mZ3Q7bmFtZSk7CiYjNDM7CQkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQkJZ290byBlcnJvdXQ7CiYjNDM7CQl9CiYjNDM7CiAJCXN0dWJfZnVuY19hZGRyID0gKih2b2lkICoqKShzdF9vcHMtJmd0O2NmaV9zdHVicyAmIzQzOyBtb2ZmKTsKIAkJZXJyID0gcHJlcGFyZV9hcmdfaW5mbyhidGYsIHN0X29wcy0mZ3Q7bmFtZSwgbW5hbWUsCiAJCQkJICAgICAgIGZ1bmNfcHJvdG8sIHN0dWJfZnVuY19hZGRyLApkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDY1MTVkNGQzYzAwMzJmLi4yNmQyODFiNzdhNmU3MiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMTg4NzMsNiAmIzQzOzE4ODczLDIwIEBAIHN0YXRpYyBpbnQgYnRmX2lkX2FsbG93X3NsZWVwYWJsZSh1MzIgYnRmX2lkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHN0cnVjdCBiCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgQlBGX01PRElGWV9SRVRVUk46CiYjNDM7CWNhc2UgQlBGX1RSQUNFX0ZFWElUOgomIzQzOwljYXNlIEJQRl9UUkFDRV9GRVhJVF9NVUxUSToKJiM0MzsJY2FzZSBCUEZfVFJBQ0VfRlNFU1NJT046CiYjNDM7CWNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJOgomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCiAJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZywKQEAgLTE5MTM3LDYgJiM0MzsxOTE1MSwxNCBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwogCiYjNDM7CQlpZiAodGd0X2luZm8tJmd0O2Ztb2RlbC5yZXRfc2l6ZSAmZ3Q7IDggJmFtcDsmYW1wOwomIzQzOwkJICAgIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKHByb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlKSkgewomIzQzOwkJCWJwZl9sb2cobG9nLAomIzQzOwkJCQkmIzM0O0F0dGFjaCB0byBmdW5jdGlvbiAlcyB3aXRoIGEgJmd0OzggYnl0ZSByZXR1cm4gdmFsdWUgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhdHRhY2ggdHlwZVxuJiMzNDssCiYjNDM7CQkJCXRuYW1lKTsKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCiAJCSAqICoubXVsdGkgcHJvZ3JhbXMgZG9uJiMzOTt0IG5lZWQgYW4gYWRkcmVzcyBkdXJpbmcgcHJvZ3JhbQogCQkgKiB2ZXJpZmljYXRpb24sIHdlIGp1c3QgdGFrZSB0aGUgbW9kdWxlIHJlZiBpZiBuZWVkZWQuCkBAIC0xOTQxMyw2ICYjNDM7MTk0MzUsOSBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidAogCWVyciA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oTlVMTCwgYnRmLCB0LCB0bmFtZSwgJmFtcDt0Z3RfaW5mby0mZ3Q7Zm1vZGVsKTsKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKJiM0MzsJaWYgKHRndF9pbmZvLSZndDtmbW9kZWwucmV0X3NpemUgJmd0OyA4ICZhbXA7JmFtcDsKJiM0MzsJICAgIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKHByb2ctJmd0O2V4cGVjdGVkX2F0dGFjaF90eXBlKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpZiAoYnRmX2lzX21vZHVsZShidGYpKSB7CiAJCS8qIFRoZSBicGYgcHJvZ3JhbSBhbHJlYWR5IGhvbGRzIHJlZmVyZW5jZSB0byBtb2R1bGUuICovCiAJCWlmIChXQVJOX09OX09OQ0UoIXByb2ctJmd0O2F1eC0mZ3Q7bW9kKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmMKaW5kZXggZjlmOWUxY2I4N2JmMWMuLjM0NWRkMjFhZDYyMTcwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuYwpAQCAtNzYsNiAmIzQzOzc2LDE2IEBAIHN0YXRpYyB2b2lkIHRlc3RfZmV4aXRfbm9yZXR1cm5zKHZvaWQpCiAJCQkgICAgICAgJiMzNDtBdHRhY2hpbmcgZmV4aXQvZnNlc3Npb24vZm1vZF9yZXQgdG8gX19ub3JldHVybiBmdW5jdGlvbiAmIzM5O2RvX2V4aXQmIzM5OyBpcyByZWplY3RlZC4mIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2ZleGl0X2ludDEyOF9yZXQodm9pZCkKJiM0Mzt7CiYjNDM7I2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fCiYjNDM7CXRlc3RfdHJhY2luZ19mYWlsX3Byb2coJiMzNDtmZXhpdF9pbnQxMjhfcmV0JiMzNDssCiYjNDM7CQkJICAgICAgICYjMzQ7d2l0aCBhICZndDs4IGJ5dGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXR0YWNoIHR5cGUmIzM0Oyk7CiYjNDM7I2Vsc2UKJiM0MzsJdGVzdF9fc2tpcCgpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZCkKIHsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2JwZl9zcGluX2xvY2smIzM0OykpCkBAIC04Niw0ICYjNDM7OTYsNiBAQCB2b2lkIHRlc3RfdHJhY2luZ19mYWlsdXJlKHZvaWQpCiAJCXRlc3RfdHJhY2luZ19kZW55KCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtmZXhpdF9ub3JldHVybnMmIzM0OykpCiAJCXRlc3RfZmV4aXRfbm9yZXR1cm5zKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7ZmV4aXRfaW50MTI4X3JldCYjMzQ7KSkKJiM0MzsJCXRlc3RfZmV4aXRfaW50MTI4X3JldCgpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmMKaW5kZXggNmY4YzBiZmIwNDE1NTkuLjE1Yjk1ZDAyMzViNTIyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX3N0cnVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmMKQEAgLTQsNiAmIzQzOzQsNyBAQAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKICNpbmNsdWRlICYjMzQ7dHJhY2luZ19zdHJ1Y3Quc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0cmFjaW5nX3N0cnVjdF9pbnQxMjguc2tlbC5oJiMzNDsKIAogc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3RfYXJncyh2b2lkKQogewpAQCAtMTEyLDYgJiM0MzsxMTMsMzkgQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3RfbWFueV9hcmdzKHZvaWQpCiAJdHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzX19kZXN0cm95KHNrZWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGVzdF9pbnQxMjhfYXJncyh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogX19pbnQxMjggYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYSByZWdpc3RlciBwYWlyIG9uIHg4Nl82NCBhbmQKJiM0MzsJICogYXJtNjQsIHdoaWNoIHRoZSB0cmFtcG9saW5lIHBhY2tzIGludG8gdHdvIGNvbnRleHQgc2xvdHMuIE90aGVyCiYjNDM7CSAqIGFyY2hpdGVjdHVyZXMgcGFzcyBhIF9faW50MTI4IGRpZmZlcmVudGx5IChlLmcuIHMzOTB4IHBhc3NlcyBsYXJnZXIKJiM0MzsJICogYXJndW1lbnRzIGJ5IHJlZmVyZW5jZSksIHNvIG9ubHkgZXhlcmNpc2UgdGhpcyBvbiB4ODZfNjQgYW5kIGFybTY0LgomIzQzOwkgKi8KJiM0MzsjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQomIzQzOwlzdHJ1Y3QgdHJhY2luZ19zdHJ1Y3RfaW50MTI4ICpza2VsOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlza2VsID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O3RyYWNpbmdfc3RydWN0X2ludDEyOF9fb3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2goc2tlbCk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDt0cmFjaW5nX3N0cnVjdF9pbnQxMjhfX2F0dGFjaCYjMzQ7KSkKJiM0MzsJCWdvdG8gZGVzdHJveV9za2VsOwomIzQzOwomIzQzOwlBU1NFUlRfT0sodHJpZ2dlcl9tb2R1bGVfdGVzdF9yZWFkKDI1NiksICYjMzQ7dHJpZ2dlcl9yZWFkJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0X2IsIDIsICYjMzQ7dDpiJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0X2MsIDMsICYjMzQ7dDpjJiMzNDspOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDt0X3JldCwgNiwgJiMzNDt0IHJldCYjMzQ7KTsKJiM0MzsKJiM0MztkZXN0cm95X3NrZWw6CiYjNDM7CXRyYWNpbmdfc3RydWN0X2ludDEyOF9fZGVzdHJveShza2VsKTsKJiM0MzsjZWxzZQomIzQzOwl0ZXN0X19za2lwKCk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF91bmlvbl9hcmdzKHZvaWQpCiB7CiAJc3RydWN0IHRyYWNpbmdfc3RydWN0ICpza2VsOwpAQCAtMTQ1LDYgJiM0MzsxNzksOCBAQCB2b2lkIHRlc3RfdHJhY2luZ19zdHJ1Y3Qodm9pZCkKIAkJdGVzdF9zdHJ1Y3RfYXJncygpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c3RydWN0X21hbnlfYXJncyYjMzQ7KSkKIAkJdGVzdF9zdHJ1Y3RfbWFueV9hcmdzKCk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7aW50MTI4X2FyZ3MmIzM0OykpCiYjNDM7CQl0ZXN0X2ludDEyOF9hcmdzKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDt1bmlvbl9hcmdzJiMzNDspKQogCQl0ZXN0X3VuaW9uX2FyZ3MoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuYwppbmRleCA2NWU0ODVjNDQ2OGM2Mi4uZjdhMDk1NzY3Njc5NTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmMKQEAgLTMwLDMgJiM0MzszMCw5IEBAIGludCBCUEZfUFJPRyhmZXhpdF9ub3JldHVybnMpCiB7CiAJcmV0dXJuIDA7CiB9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7P2ZleGl0L2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyhmZXhpdF9pbnQxMjhfcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfc3RydWN0X2ludDEyOC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfc3RydWN0X2ludDEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NjM4ZGZlYzFmMzhlZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguYwpAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsKJiM0Mztsb25nIHRfYiwgdF9jLCB0X3JldDsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZXhpdC9icGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmcmIzM0OykKJiM0MztpbnQgdGVzdF9pbnQxMjhfYXJnX2ZleGl0KHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJdF9iID0gKGludCljdHhbMl07CiYjNDM7CXRfYyA9IChsb25nKWN0eFszXTsKJiM0MzsJdF9yZXQgPSAobG9uZyljdHhbNF07CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwppbmRleCAzMGYxY2QyMzA5M2NiZS4uZWIwZjliNWUxOGQ4NWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwpAQCAtMTYxLDYgJiM0MzsxNjEsMzMgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9hcmdfcHRyX3RvX3N0cnVjdChzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfc3RydWN0X2FyZ18xICphKSB7CiAJcmV0dXJuIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQ7CiB9CiAKJiM0MzsjaWZkZWYgX19TSVpFT0ZfSU5UMTI4X18KJiM0Mztub2lubGluZSBfX2ludDEyOAomIzQzO2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldChpbnQgYSkKJiM0Mzt7CiYjNDM7CWJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQgPSBhOwomIzQzOwlyZXR1cm4gKF9faW50MTI4KWE7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIF9faW50MTI4ICYjMzk7YSYjMzk7IGlzIHRoZSBmaXJzdCBhcmd1bWVudCBvbiBwdXJwb3NlLiBPbiBhcm02NCBhIDE2LWJ5dGUKJiM0MzsgKiBhcmd1bWVudCBtdXN0IHN0YXJ0IGluIGFuIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgcGFpciwgc28gcGxhY2luZyBpdAomIzQzOyAqIGFmdGVyIGEgc2luZ2xlLXJlZ2lzdGVyIHNjYWxhciB3b3VsZCBsZWF2ZSBhIHBhZGRpbmcgcmVnaXN0ZXIgKHgxKQomIzQzOyAqIHVudXNlZC4gcGFob2xlIG1hcHMgcGFyYW1ldGVycyB0byByZWdpc3RlcnMgcG9zaXRpb25hbGx5IGFuZCB3b3VsZCB0aGVuCiYjNDM7ICogc2VlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQgaW4gYW4gJiMzNDt1bmV4cGVjdGVkJiMzNDsgcmVnaXN0ZXIgYW5kIHNraXAgQlRGCiYjNDM7ICogZW5jb2Rpbmcgb2YgdGhlIHdob2xlIGZ1bmN0aW9uLCBtYWtpbmcgaXQgdW5hdHRhY2hhYmxlLiBLZWVwaW5nIHRoZQomIzQzOyAqIF9faW50MTI4IGZpcnN0ICh4MDp4MSkgYXZvaWRzIHRoZSBwYWRkaW5nIHdoaWxlIHN0aWxsIGV4ZXJjaXNpbmcgdGhlCiYjNDM7ICogdHJhbXBvbGluZSBwYWNraW5nIG9mIGEgMTI4LWJpdCBhcmd1bWVudCB0b2dldGhlciB3aXRoIHRoZSB0cmFpbGluZwomIzQzOyAqIGludCBhbmQgbG9uZyBhcmd1bWVudHMuCiYjNDM7ICovCiYjNDM7bm9pbmxpbmUgbG9uZwomIzQzO2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X2FyZyhfX2ludDEyOCBhLCBpbnQgYiwgbG9uZyBjKQomIzQzO3sKJiM0MzsJYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdCA9IChsb25nKWEgJiM0MzsgYiAmIzQzOyBjOwomIzQzOwlyZXR1cm4gYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiBfX3dlYWsgbm9pbmxpbmUgdm9pZCBicGZfdGVzdG1vZF9sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nX25hbWUodm9pZCkKIHsKIH0KQEAgLTUxNCw2ICYjNDM7NTQxLDExIEBAIGJwZl90ZXN0bW9kX3Rlc3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAKIAkodm9pZClicGZfdGVzdG1vZF90ZXN0X2FyZ19wdHJfdG9fc3RydWN0KCZhbXA7c3RydWN0X2FyZzFfMik7CiAKJiM0MzsjaWZkZWYgX19TSVpFT0ZfSU5UMTI4X18KJiM0MzsJKHZvaWQpYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfcmV0KGkpOwomIzQzOwkodm9pZClicGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmcoKF9faW50MTI4KTEsIDIsIDMpOwomIzQzOyNlbmRpZgomIzQzOwogCSh2b2lkKXRyYWNlX2JwZl90ZXN0bW9kX3Rlc3RfcmF3X3RwX251bGxfdHAoTlVMTCk7CiAKIAlicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NzEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA5NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU3Vic3lzdGVtIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBCUEYgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGxhcmdlIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcyBpbiBCUEYgdHJhbXBvbGluZXMgYW5kIHN0cnVjdCBvcHMuIFRoZSBrZXkgaWRlYSBoZXJlIGlzIHRvIGNvcnJlY3RseSBoYW5kbGUgdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMsIGxpa2UgYF9faW50MTI4YCBvciBzaXphYmxlIHN0cnVjdHMsIHdoaWNoIGFyZSBub3cgYmVpbmcgYWRkcmVzc2VkLiBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bjoKCkZpcnN0LCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgdGhlIGNoYW5nZSBpbiBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIHNpZ25pZmljYW50LiBUaGUgY29kZSBub3cgdW5jb25kaXRpb25hbGx5IGFsbG9jYXRlcyBleHRyYSByZWdpc3RlcnMgZm9yIGFueSBhcmd1bWVudCBsYXJnZXIgdGhhbiA4IGJ5dGVzLCBhcyBvcHBvc2VkIHRvIG9ubHkgZm9yIHN0cnVjdCBhcmd1bWVudHMuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBmaXggZm9yIHRoZSBvcmlnaW5hbCBsb2dpYy4KClRoZW4sIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHRoZXJlJiMzOTtzIGEgbmV3IGBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbGAgZnVuY3Rpb24gdGhhdCBlc3NlbnRpYWxseSBnYXRlcyB0aGUgYXR0YWNobWVudCB0byBmdW5jdGlvbnMgYmFzZWQgb24gcmV0dXJuIHNpemUgZm9yIGNlcnRhaW4gYXR0YWNoIHR5cGVzIGxpa2UgYEJQRl9NT0RJRllfUkVUVVJOYCBhbmQgYEJQRl9UUkFDRV9GRVhJVGAuIFRoaXMgcHJldmVudHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGdlbmVyYXRlIGluY29ycmVjdCByZXR1cm4gc2l6ZXMgaWYgdGhlIHNpemUgZXhjZWVkcyA4IGJ5dGVzLgoKVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSBpdCBoYW5kbGVzIHRoZXNlIGVkZ2UgY2FzZXMgY29ycmVjdGx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IGhvbGVzLgoKSSYjMzk7bSB0aGlua2luZyB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyBzaG91bGQgYmU6CiogICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBJIGJlbGlldmUgdGhpcyBpcyBnb29kIGJlY2F1c2UgaXTigJlzIGNhbGxlZCBkdXJpbmcgdGhlIGxvYWRpbmcgYW5kIGF0dGFjaGluZyBvZiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIG5vdCBhbiBleGVjdXRpb24gYm90dGxlbmVjay4KKiAgIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgIOKAkyBmb3IgQlBGIHN0cnVjdF9vcHMgcmVnaXN0cmF0aW9uLgoqICAgYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YCBhbmQgYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYCDigJMgYmVjYXVzZSB0aGVzZSBhcmUgY2FsbGVkIGR1cmluZyBCUEYgcHJvZ3JhbSB2ZXJpZmljYXRpb24uCgpJIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgQlBGIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19CUEZfSklUYCwgYW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLgoKRmluYWxseSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBrZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYCB0byBzZWUgaWYgdGhvc2UgZGVwZW5kIG9uIHRoZSBCUEYgY29uZmlndXJhdGlvbnMsIGJ5IHVzaW5nIGBncmVwcGVyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD0yMjYyPWludCBicGZfc3RydWN0X29wc190ZXN0X3J1bihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIyNjQtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjIyNjU6aW50IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChzdHJ1Y3QgYnBmX3N0cnVjdF9vcHNfZGVzYyAqc3Rfb3BzX2Rlc2MsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIyNjYtXHRcdFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jPTMyND1pbnQgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLCB1MzIgbW9mZilcbi0tXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMtMzMwLVxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jOjMzMTppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zMzItXHRcdFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYz05ODM1PWJ0Zl9hZGRfc3RydWN0X29wcyhzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfc3RydWN0X29wcyAqc3Rfb3BzLFxuLS1cbmtlcm5lbC9icGYvYnRmLmMtOTg2Ni1cbmtlcm5lbC9icGYvYnRmLmM6OTg2NzpcdGVyciA9IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChcdTAwMjZ0YWItXHUwMDNlb3BzW2J0Zi1cdTAwM2VzdHJ1Y3Rfb3BzX3RhYi1cdTAwM2VjbnRdLCBidGYsIGxvZyk7XG5rZXJuZWwvYnBmL2J0Zi5jLTk4NjgtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEJQRiBWZXJpZmljYXRpb24gYW5kIEpJVCBDb21waWxhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBCUEYgYnl0ZWNvZGUgZ2V0cyB2ZXJpZmllZCBhbmQgdGhlbiBwb3RlbnRpYWxseSBKdXN0LUluLVRpbWUgY29tcGlsZWQuIFRoZSBjb3JlIG9mIHRoaXMgcHJvY2VzcywgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBuZWVkIHRvIGV4YW1pbmUgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGFuZCB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHR3byBzcGVjaWZpYyBmaWxlczogYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJIGtub3cgdGhhdCBgdmVyaWZpZXIuY2Agc2hvdWxkIGNvbnRhaW4gdGhlIGxvZ2ljIHRvIGFuYWx5emUgdGhlIEJQRiBieXRlY29kZSBmb3Igc2FmZXR5IGFuZCBhZGhlcmVuY2UgdG8gcnVsZXMgYmVmb3JlIGl0JiMzOTtzIGV4ZWN1dGVkIGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgY3Jhc2hlcyBhbmQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGJwZl9qaXRfY29tcC5jYCBpcyBsaWtlbHkgd2hlcmUgdGhlIGFjdHVhbCBKSVQgY29tcGlsYXRpb24gaGFwcGVucywgc3BlY2lmaWNhbGx5IGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgdHJhbnNsYXRpbmcgdGhlIEJQRiBpbnN0cnVjdGlvbnMgaW50byBuYXRpdmUgeDg2IG1hY2hpbmUgY29kZSBmb3IgZmFzdGVyIGV4ZWN1dGlvbi4gU28sIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZpbGVzIGlzIGtleS4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgdmVyaWZpZXIsIGJ1dCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgdGhlIEpJVCBjb21waWxlciB3aWxsIGhhdmUgaXRzIG93biBleHBlY3RhdGlvbnMgYW5kIGFzc3VtcHRpb25zIGJhc2VkIG9uIHdoYXQgdGhlIHZlcmlmaWVyIGFsbG93cy4gVGhlIGNvbXBpbGF0aW9uIG1pZ2h0IGZhaWwgb3IgYmUgc3Vib3B0aW1hbCBpZiB0aGUgdmVyaWZpZXIgZG9lc24mIzM5O3QgZW5mb3JjZSB0aGUgcmlnaHQgY29uc3RyYWludHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE4MDk9c3RhdGljIHZvaWQgc2lnbl9leHRlbmQoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJkLCBpbnQgcmosIHU4IHNpemUsIGJvb2wgc2lnbilcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE4MzYtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE4Mzc6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTgzOC1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLFxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjE0ND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNjEtXHRqaXRfZmlsbF9ob2xlKGltYWdlLCAodW5zaWduZWQgaW50KShyb19pbWFnZV9lbmQgLSByb19pbWFnZSkpO1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTYyOlx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2Y3R4LCBpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE2My1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yMTgyPWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0yMTkxLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMTkyOlx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2Y3R4LCBcdTAwMjZpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE5My1cbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTY4Nj1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldCh1MzIgKmltYWdlLCB1MzIgKnJvX2ltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy03MjMtLypcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6NzI0OiAqIFJlZmVyIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkgZm9yIHN0YWNrIGNvbXBvbmVudCBkZXRhaWxzLlxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy03MjUtICpcbi0tXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTc5Nz1zdGF0aWMgdm9pZCBicGZfdHJhbXBvbGluZV9yZXN0b3JlX2FyZ3Nfc3RhY2sodTMyICppbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtODExLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo4MTI6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTgxMy1cdFx0XHRcdFx0IHZvaWQgKnJ3X2ltYWdlX2VuZCwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz0xMTkyPWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTk3LVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzoxMTk4Olx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIE5VTEwsIE5VTEwsIE5VTEwsIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTExOTktXHRyZXR1cm4gcmV0O1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9MTIwMj1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTIxOC1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTIxOTpcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCByd19pbWFnZSwgcndfaW1hZ2UgJiM0Mzsgc2l6ZSwgaW1hZ2UsIG0sXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTEyMjAtXHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTk5PXN0YXRpYyBpbnQgaW52b2tlX2JwZihzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0biwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMjEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEwMjI6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTAyMy1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMDc9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTYtXHRjdHgucm9faW5zbnMgPSBOVUxMO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzE3Olx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXHUwMDI2aW0sIG0sIHRub2RlcywgZnVuY19hZGRyLCBmbGFncywgXHUwMDI2Y3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTMxOC1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzQ4LVx0Y3R4LnJvX2luc25zID0gcm9faW1hZ2U7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEzNDk6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzLCBcdTAwMjZjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzUwLVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2MzI9c3RhdGljIGludCBhbGxvY19zdGFjayhzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCwgc2l6ZV90IHNpemUpXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjQ5LVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjUwOnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2NTEtXHRcdFx0XHRcdCBzdHJ1Y3QgYnBmX3RyYW1wX2ppdCAqdGppdCxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI5NjY9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NzQtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5NzU6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgXHUwMDI2dGppdCwgbSwgZmxhZ3MsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NzYtXHRcdFx0XHRcdCAgICB0bm9kZXMsIG9yaWdfY2FsbCk7XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yOTgxPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjk5MC1cdG1lbXNldChcdTAwMjZ0aml0LCAwLCBzaXplb2YodGppdCkpO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyOTkxOlx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIFx1MDAyNnRqaXQsIG0sIGZsYWdzLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTkyLVx0XHRcdFx0XHQgICAgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwNC1cdHRqaXQuY29tbW9uLnByZ19idWYgPSBpbWFnZTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MzAwNTpcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBcdTAwMjZ0aml0LCBtLCBmbGFncyxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwNi1cdFx0XHRcdFx0ICAgIHRub2RlcywgZnVuY19hZGRyKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzI0ND1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzNDUtICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzM0NjpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMzQ3LVx0XHRcdFx0XHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY2Nj1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICppbWFnZSwgdm9pZCAqaW1hZ2VfZW5kLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjgxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2ODI6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICYjNDM7IHNpemUsIGltYWdlLCBtLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2ODMtXHRcdFx0XHRcdCAgICBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjk1PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MDEtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzcwMjpcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzAzLVx0ICogVGhpcyB3aWxsIE5PVCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIGRpcmVjdCBtYXAsIGFzIHdlIGRvIG5vdFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEyLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3MTM6XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICYjNDM7IFBBR0VfU0laRSwgaW1hZ2UsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxNC1cdFx0XHRcdFx0ICAgIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGdldCB0aGlzIEJQRiB0cmFtcG9saW5lIHNldHVwIHJpZ2h0LiBJJiMzOTttIGdvaW5nIHRvIG5lZWQgdG8gZW5hYmxlIGEgZmV3IGtleSBjb25maWd1cmF0aW9ucyBpbiB0aGUga2VybmVsLiBGaXJzdCwgb2J2aW91c2x5LCBJIG5lZWQgYEJQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbC4gVGhlbiwgYEJQRl9KSVRgIGZvciBKdXN0LUluLVRpbWUgY29tcGlsYXRpb24sIGNhbiYjMzk7dCByZWFsbHkgZG8gbXVjaCB3aXRob3V0IHRoYXQuIFRoZSBgREVCVUdfSU5GT19CVEZgIG9wdGlvbiBpcyBhbHNvIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBhbmQgaW50cm9zcGVjdGlvbiB3aXRoIEJURiAoQlBGIFR5cGUgRm9ybWF0KS4gQW5kIHNpbmNlIHRoaXMgKmlzKiBhYm91dCBCUEYgdHJhbXBvbGluZXMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCBgRlRSQUNFYC4gRmluYWxseSwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIHdpbGwgbmVlZCBgRFlOQU1JQ19GVFJBQ0VfV0lUSF9ESVJFQ1RfQ0FMTFNgIHNvIHRoYXQgdGhlIEJQRiB0cmFtcG9saW5lcyBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1RSQU1QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZzogV2hlcmUgdG8gRmluZCB0aGUgVHJhbXBvbGluZT8qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYSB0cmFtcG9saW5lLCBwcmVzdW1hYmx5IHNvbWV0aGluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIEJQRiBvciBwb3NzaWJseSBldmVuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBsaWtlbHkgaW52b2x2ZW1lbnQgb2YgQlBGLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGh1YiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHNvbWV0aGluZyB0aGVyZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBlbmFibGluZyBvciBkaXNhYmxpbmcgdHJhbXBvbGluZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4KCkhvd2V2ZXIsIGEgdHJhbXBvbGluZSBjb3VsZCBhbHNvIGJlIGEgdmVyeSBzcGVjaWZpYyBhcmNoaXRlY3R1cmFsIGZlYXR1cmUuIElmIGl0JiMzOTtzIHg4Ni1zcGVjaWZpYywgb3IgdXNlcyB4ODYgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB0aGVuIEkmIzM5O2xsIGltbWVkaWF0ZWx5IHNoaWZ0IG15IGF0dGVudGlvbiB0byBgYXJjaC94ODYvS2NvbmZpZ2AuIFRoYXQgd291bGQgYmUgd2hlcmUgSSYjMzk7ZCBhbnRpY2lwYXRlIGZpbmRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gaXQsIHBhcnRpY3VsYXJseSBpZiBpdCYjMzk7cyB0aWVkIHRvIHRoaW5ncyBsaWtlIENQVSBmZWF0dXJlcywgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLCBvciBtZW1vcnkgbWFuYWdlbWVudC4KCkJhc2ljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0d28gZGlzdGluY3QgcGF0aHMgaGVyZS4gQlBGIGlzIG15IGZpcnN0IGd1ZXNzLCBidXQgeDg2IGlzIGEgdmVyeSBzdHJvbmcgY29udGVuZGVyLCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgY29udGV4dCBvZiB0aGlzICYjMzQ7dHJhbXBvbGluZSYjMzQ7IGltcGxlbWVudGF0aW9uLiBCb3RoIG9mIHRob3NlIGxvY2F0aW9ucyBhcmUgbXkgZ28tdG8gc3RhcnRpbmcgcG9pbnRzIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHRob3NlIGNvbmNlcm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjUzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFZlcmlmaWVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMgcmVsYXRlZCB0byB0aGUgQlBGIHZlcmlmaWVyLiBJJiMzOTttIG5vdCBsb29raW5nIGZvciBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXc7IEkgbmVlZCB0byBkaWcgZGVlcCBpbnRvIHRoZSBrbm9icyBhbmQgbGV2ZXJzIGF2YWlsYWJsZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMsIHJ1bnRpbWUgcGFyYW1ldGVycywgYW5kIGFueSBkZWJ1ZyBmbGFncyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHkgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgaW1wYWN0IGl0cyBzYWZldHkgZ3VhcmFudGVlcyBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLiBJIHN1c3BlY3QgdGhlcmUgYXJlIHNvbWUgaGlkZGVuIGdlbXMgaW4gdGhlcmUgcmVnYXJkaW5nIHRoZSB0cmFkZS1vZmZzIGl0IG1ha2VzIHRvIGF2b2lkIG92ZXJseSBhZ2dyZXNzaXZlIHZlcmlmaWNhdGlvbiB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZS4gVGltZSB0byBjaGVjayB0aGUgaW5jbHVkZXMsIG1hY3JvIGRlZmluaXRpb25zLCBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIHdpdGhpbiB0aGUgZmlsZSDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHJlbGF0ZWQgdG8gZmVhdHVyZSBnYXRpbmcgb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHNwZWNpZmljIHZlcmlmaWNhdGlvbiBjaGVja3MuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgb3B0aW1pemluZyBCUEYgcHJvZ3JhbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jaGVja19hdHRhY2hfdGFyZ2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg9MTE2MT1pbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTYzLVxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaDoxMTY0OmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTY1LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9idGYuYz02ODQ4PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDI1LVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAyNjpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDI3LVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjg5PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM4MjEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozODIyOlx0XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzgyMy1cdFx0XHRcdFx0ICAgICAgXHUwMDI2dGd0X2luZm8pO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTEwNzY9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwODYtXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMDg3Olx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTEwODgtXHRcdFx0XHQgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg4OD1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTg5OS0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MDA6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTAxLSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NzY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4ODktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4OTA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4OTEtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzMzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzM0Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzM1LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4MDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQlBGIEltcGxlbWVudGF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIEJQRiBzdHVmZiwgZm9jdXNpbmcgb24gc29tZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgLCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLCBhbmQgYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYCwgYXMgd2VsbCBhcyB0aG9zZSBrZXkgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC4KCkZpcnN0LCBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YC4uLiBpcyB0aGF0IGV2ZW4gcmVhY2hhYmxlPyBBaCwgeWVzLCBpdOKAmXMgY2xlYXJseSBhY2Nlc3NpYmxlIHRocm91Z2ggYGJwZl9zdHJ1Y3Rfb3BzX3N1cHBvcnRlZGAgYW5kIGBidGZfYWRkX3N0cnVjdF9vcHNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyByaWdodCBpbiB0aGUgaGVhcnQgb2YgQlRGIHBhcnNpbmcgYW5kIHN0cnVjdF9vcHMgcmVnaXN0cmF0aW9uLiAKCk5vdywgb24gdG8gYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YC4gSSByZW1lbWJlciB0aGlzIG9uZTsgaXQgZ2V0cyBpbnZva2VkIGR1cmluZyBib3RoIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiAqYW5kKiBkdXJpbmcgdGhlIGF0dGFjaCBwcm9jZXNzLiBTYW1lIHdpdGggYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYDsgdGhhdCYjMzk7cyBhbm90aGVyIGNyaXRpY2FsIGNoZWNrIGR1cmluZyB2ZXJpZmljYXRpb24uIFNvIHRoZSB2ZXJpZmljYXRpb24gcHJvY2VzcyBpcyBwcmV0dHkgdGhvcm91Z2guCgpIbW0sIHdoYXQgZWxzZSBtaWdodCBiZSBpbXBvcnRhbnQgY29uZmlnLXdpc2U/IFdhaXQuLi4gYEZUUkFDRWAhIFRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyBhIGtleSBkZXBlbmRlbmN5IHdoZW4gd29ya2luZyB3aXRoIEJQRiB0cmFtcG9saW5lcy4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZCByZWNlbnRseS4gVGhlc2UgY2FuIGJlIHRyaWNreSBhbmQgZWFzeSB0byBtaXNzIG9uIHF1aWNrIHJldmlld3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9UUkFNUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzg2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipMb2NhdGluZyB0aGUgVHJhbXBvbGluZSBPYmplY3QgRmlsZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYHRyYW1wb2xpbmUub2Agb2JqZWN0IGZpbGUgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIEJQRiBrZXJuZWwgYnVpbGQgcHJvY2Vzcy4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBga2VybmVsL2JwZi9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgQlBGLXJlbGF0ZWQgY29tcGlsYXRpb24gaXMgbGlrZWx5IGNvbnRyb2xsZWQsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgYmUgYWJsZSB0byBwaW5wb2ludCBpdHMgY3JlYXRpb24uIEkgd2lsbCBjaGVjayBmb3IgdGhpcyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyYW1wb2xpbmUubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2xpdmVwYXRjaC9yZWxpYWJsZS1zdGFja3RyYWNlLnJzdD0xNzk9aW5mb3JtYXRpb24gaXMgbm90IGluIGEgY29uc2lzdGVudCBsb2NhdGlvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlbnRyeVxuRG9jdW1lbnRhdGlvbi9saXZlcGF0Y2gvcmVsaWFibGUtc3RhY2t0cmFjZS5yc3Q6MTgwOnRyYW1wb2xpbmUgb3IgcmV0dXJuIHRyYW1wb2xpbmUuIEZvciBleGFtcGxlLCBjb25zaWRlcmluZyB0aGUgeDg2XzY0XG5Eb2N1bWVudGF0aW9uL2xpdmVwYXRjaC9yZWxpYWJsZS1zdGFja3RyYWNlLnJzdC0xODEtJiMzOTtyZXR1cm5fdG9faGFuZGxlciYjMzk7IHJldHVybiB0cmFtcG9saW5lOlxuLS1cbmFyY2gvYXJjL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmgtMTgtICogd2hpY2ggYWxsb3dzIHNpZ3JldHVybiBiYXNlZCByZS1lbnRyeSBpbnRvIGtlcm5lbCBhZnRlciBoYW5kbGluZyBzaWduYWwuXG5hcmNoL2FyYy9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oOjE5OiAqIFcvbyB0aGlzIGtlcm5lbCBuZWVkcyB0byBcJiMzNDtzeW50aGVzaXplXCYjMzQ7IHRoZSBzaWdyZXR1cm4gdHJhbXBvbGluZSBvbiB1c2VyXG5hcmNoL2FyYy9pbmNsdWRlL3VhcGkvYXNtL3NpZ25hbC5oLTIwLSAqIG1vZGUgc3RhY2sgd2hpY2ggaW4gdHVybiBmb3JjZXMgdGhlIGZvbGxvd2luZzpcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfS1BST0JFUylcdFx0JiM0Mzs9IGtwcm9iZXMubyBkZWNvZGUtaW5zbi5vXHRcXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjM6XHRcdFx0XHQgICBrcHJvYmVzX3RyYW1wb2xpbmUub1x0XHRcXFxuYXJjaC9hcm02NC9rZXJuZWwvcHJvYmVzL01ha2VmaWxlLTQtXHRcdFx0XHQgICBzaW11bGF0ZS1pbnNuLm9cbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYz0xNDM0PXN0YXRpYyBpbnQgZ2NzX3NpZ25hbF9lbnRyeShfX3NpZ3Jlc3RvcmVfdCBzaWd0cmFtcCwgc3RydWN0IGtzaWduYWwgKmtzaWcpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMtMTQ1MS1cdC8qXG5hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYzoxNDUyOlx0ICogUHVzaCBhIGNhcCBhbmQgdGhlIEdDUyBlbnRyeSBmb3IgdGhlIHRyYW1wb2xpbmUgb250byB0aGUgR0NTLlxuYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsLmMtMTQ1My1cdCAqL1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI1NTM9c3RhdGljIHZvaWQgc3RvcmVfZnVuY19tZXRhKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKVxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTI1NjYtICogICBtb3YgeDksIGxyXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyNTY3OiAqICAgYmwgIFx1MDAzY2JwZl90cmFtcG9saW5lIG9yIHBsdFx1MDAzZVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjU2OC0gKlxuLS1cbmFyY2gvY3NreS9rZXJuZWwvcHJvYmVzL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX0tQUk9CRVMpXHRcdCYjNDM7PSBrcHJvYmVzLm8gZGVjb2RlLWluc24ubyBzaW11bGF0ZS1pbnNuLm9cbmFyY2gvY3NreS9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0tQUk9CRVMpXHRcdCYjNDM7PSBrcHJvYmVzX3RyYW1wb2xpbmUub1xuYXJjaC9jc2t5L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGUtNC1vYmotJChDT05GSUdfS1BST0JFU19PTl9GVFJBQ0UpXHQmIzQzOz0gZnRyYWNlLm9cbi0tXG5hcmNoL2hleGFnb24va2VybmVsL01ha2VmaWxlPTc9b2JqLXkgJiM0Mzs9IHNldHVwLm8gaXJxX2NwdS5vIHRyYXBzLm8gc3lzY2FsbHRhYi5vIHNpZ25hbC5vIHRpbWUub1xuYXJjaC9oZXhhZ29uL2tlcm5lbC9NYWtlZmlsZTo4Om9iai15ICYjNDM7PSBwcm9jZXNzLm8gdHJhbXBvbGluZS5vIHJlc2V0Lm8gcHRyYWNlLm8gdmRzby5vXG5hcmNoL2hleGFnb24va2VybmVsL01ha2VmaWxlLTktXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTI5PWlmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVJcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGUtNDAtICBDRkxBR1NfUkVNT1ZFX3JldGhvb2subyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjQxOiAgQ0ZMQUdTX1JFTU9WRV9yZXRob29rX3RyYW1wb2xpbmUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlLTQyLWVuZGlmXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTc2PW9iai0kKENPTkZJR19LUFJPQkVTKVx0XHQmIzQzOz0ga3Byb2Jlcy5vXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGU6Nzc6b2JqLSQoQ09ORklHX1JFVEhPT0spXHRcdCYjNDM7PSByZXRob29rLm8gcmV0aG9va190cmFtcG9saW5lLm9cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZS03OC1vYmotJChDT05GSUdfVVBST0JFUylcdFx0JiM0Mzs9IHVwcm9iZXMub1xuLS1cbmFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jPTE4Mj1zdGF0aWMgaW50IHNldHVwX3J0X2ZyYW1lKHN0cnVjdCBrc2lnbmFsICprc2lnLCBzaWdzZXRfdCAqc2V0LFxuLS1cbmFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jLTIwMy1cdC8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2U7IGp1bXAgdG8gZml4ZWQgYWRkcmVzcyBzaWdyZXR1cm5cbmFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jOjIwNDpcdCAgIHRyYW1wb2xpbmUgb24ga3VzZXIgcGFnZS4gICovXG5hcmNoL25pb3MyL2tlcm5lbC9zaWduYWwuYy0yMDUtXHRyZWdzLVx1MDAzZXJhID0gKHVuc2lnbmVkIGxvbmcpICgweDEwNDQpO1xuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9NTM1PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19mc2Vzc2lvbih2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTM4LVx0ICogVE9ETzogUmVtb3ZlIGFmdGVyIHZhbGlkYXRpbmcgc3VwcG9ydFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo1Mzk6XHQgKiBmb3IgZnNlc3Npb24gYW5kIHRyYW1wb2xpbmUgb24gcHBjMzIuXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTU0MC1cdCAqL1xuLS1cbmFyY2gvcmlzY3Yva2VybmVsL3Byb2Jlcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19LUFJPQkVTKVx0XHQmIzQzOz0ga3Byb2Jlcy5vIGRlY29kZS1pbnNuLm8gc2ltdWxhdGUtaW5zbi5vXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfUkVUSE9PSylcdFx0JiM0Mzs9IHJldGhvb2subyByZXRob29rX3RyYW1wb2xpbmUub1xuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX1VQUk9CRVMpXHRcdCYjNDM7PSB1cHJvYmVzLm8gZGVjb2RlLWluc24ubyBzaW11bGF0ZS1pbnNuLm9cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU9Nj1DRkxBR1NfUkVNT1ZFX3JldGhvb2subyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjc6Q0ZMQUdTX1JFTU9WRV9yZXRob29rX3RyYW1wb2xpbmUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxuLS1cbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTM1PW9iai15XHQmIzQzOz0gdmVyc2lvbi5vIHBnbV9jaGVjay5vIGN0eXBlLm8gaXBsX2RhdGEubyByZWxvY3MubyBhbHRlcm5hdGl2ZS5vXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZTozNjpvYmoteVx0JiM0Mzs9IHV2Lm8gcHJpbnRrLm8gdHJhbXBvbGluZS5vXG5hcmNoL3MzOTAvYm9vdC9NYWtlZmlsZS0zNy1vYmotJChDT05GSUdfUkFORE9NSVpFX0JBU0UpXHQmIzQzOz0ga2FzbHIub1xuLS1cbmFyY2gveDg2L2h5cGVydi9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTKVx0JiM0Mzs9IGh2X3NwaW5sb2NrLm9cbi0tXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGUtMTQtIGlmZGVmIENPTkZJR19NU0hWX1JPT1RcbmFyY2gveDg2L2h5cGVydi9NYWtlZmlsZToxNTogIENGTEFHU19SRU1PVkVfaHZfdHJhbXBvbGluZS5vICYjNDM7PSAtcGdcbmFyY2gveDg2L2h5cGVydi9NYWtlZmlsZToxNjogIENGTEFHU19odl90cmFtcG9saW5lLm8gICAgICAgICYjNDM7PSAtZm5vLXN0YWNrLXByb3RlY3RvclxuYXJjaC94ODYvaHlwZXJ2L01ha2VmaWxlOjE3OiAgb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApICAgICAgJiM0Mzs9IGh2X2NyYXNoLm8gaHZfdHJhbXBvbGluZS5vXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGUtMTgtIGVuZGlmXG4tLVxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jPTI4Mz1leHRlcm4gdm9pZCBmdHJhY2VfcmVnc19jYWxsZXJfam1wKHZvaWQpO1xuLS1cbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy0yOTAtICogVGhlIGZ0cmFjZV9vcHMgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBjYWxsYmFjay4gU2luY2UgdGhlXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6MjkxOiAqIHRyYW1wb2xpbmUgb25seSBzZXJ2aWNlcyBhIHNpbmdsZSBmdHJhY2Vfb3BzLCB3ZSBjYW4gcGFzcyBpblxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTI5Mi0gKiB0aGF0IG9wcyBkaXJlY3RseS5cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9NDc3PXZvaWQgYXJjaF9mdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtNDg1LVx0aWYgKCFvcHMtXHUwMDNldHJhbXBvbGluZSkge1xuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjQ4NjpcdFx0b3BzLVx1MDAzZXRyYW1wb2xpbmUgPSBjcmVhdGVfdHJhbXBvbGluZShvcHMsIFx1MDAyNnNpemUpO1xuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTQ4Ny1cdFx0aWYgKCFvcHMtXHUwMDNldHJhbXBvbGluZSlcbi0tXG5rZXJuZWwvYnBmL01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnRmLm8gbWVtYWxsb2MubyBycXNwaW5sb2NrLm8gc3RyZWFtLm9cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz01Nz1zdGF0aWMgdm9pZCB0cmFtcG9saW5lX3VubG9jayhzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTYxLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NjI6c3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02My1cdGludCAoKnJlZ2lzdGVyX2ZlbnRyeSkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmRhdGEpO1xuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTcwPXN0YXRpYyBpbnQgYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIGJvb2wgbG9ja19kaXJlY3RfbXV0ZXgsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MTpcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsIHZvaWQgKmRhdGEpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NzI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgdHJhbXBvbGluZV9vcHM7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03My1cbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz05OD1zdGF0aWMgaW50IGJwZl90cmFtcF9mdHJhY2Vfb3BzX2Z1bmMoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTctXHRcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE1ODpcdFx0XHRcdFx0XHQgICAgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU5LVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjQtXHRcdFx0cmV0ID0gYnBmX3RyYW1wb2xpbmVfdXBkYXRlKHRyLCBmYWxzZSAvKiBsb2NrX2RpcmVjdF9tdXRleCAqLyxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NTpcdFx0XHRcdFx0XHQgICAgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY2LVx0XHRicmVhaztcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NzM9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTAwLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NTAxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfb3BzID0ge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtNTAyLVx0LnJlZ2lzdGVyX2ZlbnRyeSAgID0gcmVnaXN0ZXJfZmVudHJ5LFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTY3Mz1zdGF0aWMgaW50IGJwZl90cmFtcG9saW5lX3VwZGF0ZShzdHJ1Y3QgYnBmX3RyYW1wb2xpbmUgKnRyLCBib29sIGxvY2tfZGlyZWN0X211dGV4LFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6Njc0Olx0XHRcdFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSlcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTY3NS17XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTA1PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTkwNy1cdFx0XHRcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo5MDg6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MDktXHRcdFx0XHQgICAgICB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk0Nj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcbi0tXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTItXHR0cmFtcG9saW5lX2xvY2sodHIpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTUzOlx0ZXJyID0gX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NTQtXHR0cmFtcG9saW5lX3VubG9jayh0cik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTU4PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTYwLVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2cgKnRndF9wcm9nLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTYxOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzICpvcHMsXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjItXHRcdFx0XHRcdHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTgzPWludCBicGZfdHJhbXBvbGluZV91bmxpbmtfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg5LVx0dHJhbXBvbGluZV9sb2NrKHRyKTtcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk5MDpcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05OTEtXHR0cmFtcG9saW5lX3VubG9jayh0cik7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA3Nj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTExOC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMTk6XHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcdTAwMjZzaGltX2xpbmstXHUwMDNlbGluay5ub2RlLCB0ciwgTlVMTCwgXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEyMC1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTU1OD1zdGF0aWMgaW50IG1vZGlmeV9mZW50cnlfbXVsdGkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgdTMyIG9yaWdfZmxhZ3MsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzItXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNTczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfbXVsdGlfb3BzID0ge1xua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU3NC1cdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz0yNjM1PXZvaWQgdXByb2JlX2hhbmRsZV90cmFtcG9saW5lKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTI2NTUtXHRcdCAqIG9yIE5VTEw7IHRoZSBsYXR0ZXIgY2FzZSBtZWFucyB0aGF0IG5vYm9keSBidXQgcmktXHUwMDNlZnVuY1xua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6MjY1NjpcdFx0ICogY291bGQgaGl0IHRoaXMgdHJhbXBvbGluZSBvbiByZXR1cm4uIFRPRE86IHNpZ2FsdHN0YWNrKCkuXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy0yNjU3LVx0XHQgKi9cbi0tXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9MzMwPWludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy0zNjQtXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6MzY1Olx0ZnRyYWNlX3VwZGF0ZV90cmFtcG9saW5lKG9wcyk7XG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtMzY2LVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz0zOTM9c3RhdGljIHZvaWQgZnRyYWNlX3VwZGF0ZV9waWRfZnVuYyh2b2lkKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00MDQtXHRcdFx0XHRmdHJhY2VfcGlkX2Z1bmMgOiBvcC1cdTAwM2VzYXZlZF9mdW5jO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQwNTpcdFx0XHRmdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUob3ApO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTQwNi1cdFx0fVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYz04NDE0PXN0YXRpYyB2b2lkIGZ0cmFjZV91cGRhdGVfdHJhbXBvbGluZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxuLS1cbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NDE3LVxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjg0MTg6XHRhcmNoX2Z0cmFjZV91cGRhdGVfdHJhbXBvbGluZShvcHMpO1xua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTg0MTktXHRpZiAob3BzLVx1MDAzZXRyYW1wb2xpbmUgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2V0cmFtcG9saW5lICE9IHRyYW1wb2xpbmUgXHUwMDI2XHUwMDI2XG4tLVxudG9vbHMvcGVyZi91dGlsL2Rzby5oPTI4PWVudW0gZHNvX2JpbmFyeV90eXBlIHtcbi0tXG50b29scy9wZXJmL3V0aWwvZHNvLmgtOTctXHREU09fQklOQVJZX1RZUEVfX0JQRl9QUk9HX0lORk8sXG50b29scy9wZXJmL3V0aWwvZHNvLmg6OTg6XHQvKiogQERTT19CSU5BUllfVFlQRV9fQlBGX0lNQUdFOiBqaXR0ZWQgQlBGIHRyYW1wb2xpbmUgb3IgZGlzcGF0Y2hlciBjb2RlLiAqL1xudG9vbHMvcGVyZi91dGlsL2Rzby5oLTk5LVx0RFNPX0JJTkFSWV9UWVBFX19CUEZfSU1BR0UsXG4tLVxudG9vbHMvcGVyZi91dGlsL21hcC5jPTUyOT11NjQgbWFwX19yaXBfMm9iamR1bXAoY29uc3Qgc3RydWN0IG1hcCAqbWFwLCB1NjQgcmlwKVxuLS1cbnRvb2xzL3BlcmYvdXRpbC9tYXAuYy01MzUtXHQgKiB2bWxpbnV4IGRvZXMgbm90IGhhdmUgcHJvZ3JhbSBoZWFkZXJzIGZvciBQVEkgZW50cnkgdHJhbXBvbGluZXMgYW5kXG50b29scy9wZXJmL3V0aWwvbWFwLmM6NTM2Olx0ICoga2NvcmUgbWF5IG5vdCBlaXRoZXIuIEhvd2V2ZXIgdGhlIHRyYW1wb2xpbmUgb2JqZWN0IGNvZGUgaXMgb24gdGhlXG50b29scy9wZXJmL3V0aWwvbWFwLmMtNTM3LVx0ICogbWFpbiBrZXJuZWwgbWFwLCBzbyBqdXN0IHVzZSB0aGF0IGluc3RlYWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njg1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIEJQRiBKSVQgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIGBDT05GSUdfQlBGX0pJVGAgb3B0aW9uIGlzIGNsZWFybHkgdGhlIGx5bmNocGluIGhlcmUsIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHJpZ2h0IHN5bWJvbHMgZm9yIHRoaXMgZGVlcCBkaXZlLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCBpcyBpbmRlZWQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJdCBzZWVtcyByaWdodCAtIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciBhIHN0cnVjdF9vcHMsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgaG93IEJQRiBpbnRlcmFjdHMgd2l0aCBrZXJuZWwgc3RydWN0dXJlcywgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgb24gaXQuIEFuZCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGlzIHJlbGV2YW50IGJlY2F1c2UgaXQmIzM5O3Mgd2hlcmUgdGhlIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnQgaXRzZWxmIGlzIHZlcmlmaWVkLCB3aGljaCBpcyBjbGVhcmx5IGltcG9ydGFudCB0byB0aGUgcHJvY2Vzcy4gQm90aCBvZiB0aG9zZSBsb29rIGxpa2Ugc29saWQgY2FuZGlkYXRlcyBmb3IgdGhlIGFuYWx5c2lzLgoKQWxyaWdodCwgbGV0IG1lIG5vdyB0YWtlIGEgbG9vayBhdCBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgLCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBjYW4gcHJvdmlkZSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxOTozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE1OTI9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE1OTUtLyogRnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gdmVyaWZpZXIuYywgdXNlZCBieSB0cmFtcG9saW5lLmMgKi9cbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTU5NjppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTE1OTctXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbyk7XG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTYxMT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYyNC1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2MjU6XHRcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKGJ0ZiwgcHJvZywgaWRzW2ldLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjI2LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MDM6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDA0LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDE5OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDY5CgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBUcmFtcG9saW5lIGFuZCBMYXJnZSBBcmd1bWVudCBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgdHJhbXBvbGluZSBpc3N1ZS4gRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gYGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIGxldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvcmUgZml4LCB3aGljaCBzZWVtcyB0byByZXNpZGUgaW4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhhdCYjMzk7cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIEl0JiMzOTtzIHN0YXRpYywgYnV0IHRoYXQmIzM5O3MgZmluZTsgaXQgZG9lc24mIzM5O3QgcHJldmVudCBpbmNsdXNpb24uIEFjdHVhbGx5LCBJIGFsc28gbmVlZCB0byBpbmNsdWRlIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGJlY2F1c2UgaXQgY2FsbHMgYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBhbmQgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIHNvIEkgc2hvdWxkIGluY2x1ZGUgaXQgZm9yIGNvbXBsZXRlbmVzcy4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGFib3V0IGNvcnJlY3RseSBoYW5kbGluZyBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gOCBieXRlcywgbGlrZSBgX19pbnQxMjhgLiBUaGUgYnVnIHdhcyB0aGF0IHRoZSB0cmFtcG9saW5lIHdhc24mIzM5O3QgYWxsb2NhdGluZyBlbm91Z2ggcmVnaXN0ZXJzLiBUaGlzIHdhcyBjYXVzaW5nIGlzc3VlcyBhdHRhY2hpbmcgdG8gZnVuY3Rpb25zIHRoYXQgaGF2ZSByZXR1cm4gdmFsdWVzICZndDsgOCBieXRlcy4gVGhlIGZpeCBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtLgoKSSYjMzk7dmUgZ290IHRocmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGltcG9ydGFudCB0byBub3RlOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLgoKRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQuIFNvLCB0aGlzIGlzIGEgcmVhbC13b3JsZCBmaXgsIG5vdCBqdXN0IGFuIGFjYWRlbWljIG9uZS4KCk15IGZvY3VzIHN5bWJvbHMgYXJlOgoqICAgYGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdGAKKiAgIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGAKKiAgIGBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aWAKKiAgIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgCgpgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgYmVjYXVzZSBpdCYjMzk7cyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSBCUEYgdHJhbXBvbGluZSBpcyBjcmVhdGVkLCBzbyBpdCYjMzk7cyBhIGdvb2QgZW50cnkgcG9pbnQgZm9yIHRoZSBjaGFuZ2VzLiBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCBpcyBhbHNvIHJlbGV2YW50IHNpbmNlIGl0IGlzIGNhbGxlZCBmcm9tIGBidGZfYWRkX3N0cnVjdF9vcHNgLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBCVEYgaXMgbG9hZGVkLiBJdCBpcyBhbHNvIGFuIGltcG9ydGFudCBzeW1ib2wuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTk6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc3RydWN0X29wc19kZXNjX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF90YXJnZXQmIzM0OywKICAgICYjMzQ7YnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWVzIGZvciBjZXJ0YWluIGF0dGFjaCB0eXBlcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2tfYXR0YWNoX3RhcmdldCYjMzQ7LAogICAgJiMzNDticGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aSYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIHRyYW1wb2xpbmUgYW5kIHN0cnVjdF9vcHMgbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAoZS5nLiwgX19pbnQxMjgpLiBJdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgdHJhbXBvbGluZSBkaWQgbm90IGFsbG9jYXRlIGVub3VnaCByZWdpc3RlcnMgZm9yIGxhcmdlIGFyZ3VtZW50cyBhbmQgcmVqZWN0cyBhdHRhY2hpbmcgdG8gZnVuY3Rpb25zIHdpdGggXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZXMgZm9yIGNlcnRhaW4gYXR0YWNoIHR5cGVzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6MTAuMDI4Nzc1ODEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMjU3MjM5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFxcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlcyBmb3IgY2VydGFpbiBhdHRhY2ggdHlwZXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjEwLjAyODc3OTk1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwNjAzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGI2MDdkMjU2N2VjNDQzYjVmNTcxZmFiMTVhOTVkMzE0MmI0YzkzMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOTozMjowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uMGI4YmQzMGY3Yzg3MDAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTMzNjksMTEgKzMzNjksOCBAQCBzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbVxcbiBcXHRXQVJOX09OX09OQ0UoKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgKGZsYWdzIFxcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xcbiBcXG4tXFx0LyogZXh0cmEgcmVnaXN0ZXJzIGZvciBzdHJ1Y3QgYXJndW1lbnRzICovXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtLVxcdTAwM2Vucl9hcmdzOyBpKyspIHtcXG4tXFx0XFx0aWYgKG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfU1RSVUNUX0FSRylcXG4tXFx0XFx0XFx0bnJfcmVncyArPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDggLSAxO1xcbi1cXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtLVxcdTAwM2Vucl9hcmdzOyBpKyspXFxuK1xcdFxcdG5yX3JlZ3MgKz0gKG0tXFx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4IC0gMTtcXG4gXFxuIFxcdC8qIHg4Ni02NCBzdXBwb3J0cyB1cCB0byBNQVhfQlBGX0ZVTkNfQVJHUyBhcmd1bWVudHMuIDEtNlxcbiBcXHQgKiBhcmUgcGFzc2VkIHRocm91Z2ggcmVncywgdGhlIHJlbWFpbnMgYXJlIHRocm91Z2ggc3RhY2suXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYyBiL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xcbmluZGV4IDUxYjE2ZTVmNTUzNGUwLi40ZTdhNDhjMDJiZTVjZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcXG5AQCAtNDQ1LDYgKzQ0NSwxOCBAQCBpbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG4gXFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgXFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgaW4gYSByZWdpc3RlciBwYWlyLFxcbitcXHRcXHQgKiB3aGljaCB0aGUgc3RydWN0X29wcyB0cmFtcG9saW5lIGRvZXMgbm90IHByZXNlcnZlIChvbmx5XFxuK1xcdFxcdCAqIDggYnl0ZXMgb2YgdGhlIHJldHVybiB2YWx1ZSBhcmUgc2F2ZWQgYW5kIHJlc3RvcmVkKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChzdF9vcHMtXFx1MDAzZWZ1bmNfbW9kZWxzW2ldLnJldF9zaXplIFxcdTAwM2UgOCkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJmdW5jIHB0ciAlcyBpbiBzdHJ1Y3QgJXMgaGFzIGEgXFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdG1uYW1lLCBzdF9vcHMtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHN0dWJfZnVuY19hZGRyID0gKih2b2lkICoqKShzdF9vcHMtXFx1MDAzZWNmaV9zdHVicyArIG1vZmYpO1xcbiBcXHRcXHRlcnIgPSBwcmVwYXJlX2FyZ19pbmZvKGJ0Ziwgc3Rfb3BzLVxcdTAwM2VuYW1lLCBtbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGZ1bmNfcHJvdG8sIHN0dWJfZnVuY19hZGRyLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA2NTE1ZDRkM2MwMDMyZi4uMjZkMjgxYjc3YTZlNzIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTE4ODczLDYgKzE4ODczLDIwIEBAIHN0YXRpYyBpbnQgYnRmX2lkX2FsbG93X3NsZWVwYWJsZSh1MzIgYnRmX2lkLCB1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHN0cnVjdCBiXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbit7XFxuK1xcdHN3aXRjaCAodHlwZSkge1xcbitcXHRjYXNlIEJQRl9NT0RJRllfUkVUVVJOOlxcbitcXHRjYXNlIEJQRl9UUkFDRV9GRVhJVDpcXG4rXFx0Y2FzZSBCUEZfVFJBQ0VfRkVYSVRfTVVMVEk6XFxuK1xcdGNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OOlxcbitcXHRjYXNlIEJQRl9UUkFDRV9GU0VTU0lPTl9NVUxUSTpcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbiBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxuQEAgLTE5MTM3LDYgKzE5MTUxLDE0IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdFxcdGlmICh0Z3RfaW5mby1cXHUwMDNlZm1vZGVsLnJldF9zaXplIFxcdTAwM2UgOCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwocHJvZy1cXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKSB7XFxuK1xcdFxcdFxcdGJwZl9sb2cobG9nLFxcbitcXHRcXHRcXHRcXHRcXFwiQXR0YWNoIHRvIGZ1bmN0aW9uICVzIHdpdGggYSBcXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGF0dGFjaCB0eXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHR0bmFtZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogKi5tdWx0aSBwcm9ncmFtcyBkb24ndCBuZWVkIGFuIGFkZHJlc3MgZHVyaW5nIHByb2dyYW1cXG4gXFx0XFx0ICogdmVyaWZpY2F0aW9uLCB3ZSBqdXN0IHRha2UgdGhlIG1vZHVsZSByZWYgaWYgbmVlZGVkLlxcbkBAIC0xOTQxMyw2ICsxOTQzNSw5IEBAIGludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0XFxuIFxcdGVyciA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oTlVMTCwgYnRmLCB0LCB0bmFtZSwgXFx1MDAyNnRndF9pbmZvLVxcdTAwM2VmbW9kZWwpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0aWYgKHRndF9pbmZvLVxcdTAwM2VmbW9kZWwucmV0X3NpemUgXFx1MDAzZSA4IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChwcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0aWYgKGJ0Zl9pc19tb2R1bGUoYnRmKSkge1xcbiBcXHRcXHQvKiBUaGUgYnBmIHByb2dyYW0gYWxyZWFkeSBob2xkcyByZWZlcmVuY2UgdG8gbW9kdWxlLiAqL1xcbiBcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZW1vZCkpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmNcXG5pbmRleCBmOWY5ZTFjYjg3YmYxYy4uMzQ1ZGQyMWFkNjIxNzAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuY1xcbkBAIC03Niw2ICs3NiwxNiBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ZleGl0X25vcmV0dXJucyh2b2lkKVxcbiBcXHRcXHRcXHQgICAgICAgXFxcIkF0dGFjaGluZyBmZXhpdC9mc2Vzc2lvbi9mbW9kX3JldCB0byBfX25vcmV0dXJuIGZ1bmN0aW9uICdkb19leGl0JyBpcyByZWplY3RlZC5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdGVzdF9mZXhpdF9pbnQxMjhfcmV0KHZvaWQpXFxuK3tcXG4rI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fXFxuK1xcdHRlc3RfdHJhY2luZ19mYWlsX3Byb2coXFxcImZleGl0X2ludDEyOF9yZXRcXFwiLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIndpdGggYSBcXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZSBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGF0dGFjaCB0eXBlXFxcIik7XFxuKyNlbHNlXFxuK1xcdHRlc3RfX3NraXAoKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZClcXG4ge1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnBmX3NwaW5fbG9ja1xcXCIpKVxcbkBAIC04Niw0ICs5Niw2IEBAIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZClcXG4gXFx0XFx0dGVzdF90cmFjaW5nX2RlbnkoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImZleGl0X25vcmV0dXJuc1xcXCIpKVxcbiBcXHRcXHR0ZXN0X2ZleGl0X25vcmV0dXJucygpO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiZmV4aXRfaW50MTI4X3JldFxcXCIpKVxcbitcXHRcXHR0ZXN0X2ZleGl0X2ludDEyOF9yZXQoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX3N0cnVjdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuY1xcbmluZGV4IDZmOGMwYmZiMDQxNTU5Li4xNWI5NWQwMjM1YjUyMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX3N0cnVjdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuY1xcbkBAIC00LDYgKzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwidHJhY2luZ19zdHJ1Y3Quc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRyYWNpbmdfc3RydWN0X2ludDEyOC5za2VsLmhcXFwiXFxuIFxcbiBzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9hcmdzKHZvaWQpXFxuIHtcXG5AQCAtMTEyLDYgKzExMywzOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0cnVjdF9tYW55X2FyZ3Modm9pZClcXG4gXFx0dHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0ZXN0X2ludDEyOF9hcmdzKHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogX19pbnQxMjggYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gYSByZWdpc3RlciBwYWlyIG9uIHg4Nl82NCBhbmRcXG4rXFx0ICogYXJtNjQsIHdoaWNoIHRoZSB0cmFtcG9saW5lIHBhY2tzIGludG8gdHdvIGNvbnRleHQgc2xvdHMuIE90aGVyXFxuK1xcdCAqIGFyY2hpdGVjdHVyZXMgcGFzcyBhIF9faW50MTI4IGRpZmZlcmVudGx5IChlLmcuIHMzOTB4IHBhc3NlcyBsYXJnZXJcXG4rXFx0ICogYXJndW1lbnRzIGJ5IHJlZmVyZW5jZSksIHNvIG9ubHkgZXhlcmNpc2UgdGhpcyBvbiB4ODZfNjQgYW5kIGFybTY0LlxcbitcXHQgKi9cXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcXG4rXFx0c3RydWN0IHRyYWNpbmdfc3RydWN0X2ludDEyOCAqc2tlbDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSB0cmFjaW5nX3N0cnVjdF9pbnQxMjhfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJ0cmFjaW5nX3N0cnVjdF9pbnQxMjhfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2goc2tlbCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRyYWNpbmdfc3RydWN0X2ludDEyOF9fYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gZGVzdHJveV9za2VsO1xcbitcXG4rXFx0QVNTRVJUX09LKHRyaWdnZXJfbW9kdWxlX3Rlc3RfcmVhZCgyNTYpLCBcXFwidHJpZ2dlcl9yZWFkXFxcIik7XFxuK1xcbitcXHRBU1NFUlRfRVEoc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2V0X2IsIDIsIFxcXCJ0OmJcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldF9jLCAzLCBcXFwidDpjXFxcIik7XFxuK1xcdEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRfcmV0LCA2LCBcXFwidCByZXRcXFwiKTtcXG4rXFxuK2Rlc3Ryb3lfc2tlbDpcXG4rXFx0dHJhY2luZ19zdHJ1Y3RfaW50MTI4X19kZXN0cm95KHNrZWwpO1xcbisjZWxzZVxcbitcXHR0ZXN0X19za2lwKCk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X3VuaW9uX2FyZ3Modm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdHJhY2luZ19zdHJ1Y3QgKnNrZWw7XFxuQEAgLTE0NSw2ICsxNzksOCBAQCB2b2lkIHRlc3RfdHJhY2luZ19zdHJ1Y3Qodm9pZClcXG4gXFx0XFx0dGVzdF9zdHJ1Y3RfYXJncygpO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic3RydWN0X21hbnlfYXJnc1xcXCIpKVxcbiBcXHRcXHR0ZXN0X3N0cnVjdF9tYW55X2FyZ3MoKTtcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImludDEyOF9hcmdzXFxcIikpXFxuK1xcdFxcdHRlc3RfaW50MTI4X2FyZ3MoKTtcXG4gXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcInVuaW9uX2FyZ3NcXFwiKSlcXG4gXFx0XFx0dGVzdF91bmlvbl9hcmdzKCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfZmFpbHVyZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfZmFpbHVyZS5jXFxuaW5kZXggNjVlNDg1YzQ0NjhjNjIuLmY3YTA5NTc2NzY3OTU0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuY1xcbkBAIC0zMCwzICszMCw5IEBAIGludCBCUEZfUFJPRyhmZXhpdF9ub3JldHVybnMpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rXFxuK1NFQyhcXFwiP2ZleGl0L2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldFxcXCIpXFxuK2ludCBCUEZfUFJPRyhmZXhpdF9pbnQxMjhfcmV0KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2MzhkZmVjMWYzOGVmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguY1xcbkBAIC0wLDAgKzEsMTggQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rXFxuK2xvbmcgdF9iLCB0X2MsIHRfcmV0O1xcbitcXG4rU0VDKFxcXCJmZXhpdC9icGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmdcXFwiKVxcbitpbnQgdGVzdF9pbnQxMjhfYXJnX2ZleGl0KHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxcbit7XFxuK1xcdHRfYiA9IChpbnQpY3R4WzJdO1xcbitcXHR0X2MgPSAobG9uZyljdHhbM107XFxuK1xcdHRfcmV0ID0gKGxvbmcpY3R4WzRdO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuaW5kZXggMzBmMWNkMjMwOTNjYmUuLmViMGY5YjVlMThkODVmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuQEAgLTE2MSw2ICsxNjEsMzMgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9hcmdfcHRyX3RvX3N0cnVjdChzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfc3RydWN0X2FyZ18xICphKSB7XFxuIFxcdHJldHVybiBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9hcmdfcmVzdWx0O1xcbiB9XFxuIFxcbisjaWZkZWYgX19TSVpFT0ZfSU5UMTI4X19cXG4rbm9pbmxpbmUgX19pbnQxMjhcXG4rYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfcmV0KGludCBhKVxcbit7XFxuK1xcdGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQgPSBhO1xcbitcXHRyZXR1cm4gKF9faW50MTI4KWE7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRoZSBfX2ludDEyOCAnYScgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9uIHB1cnBvc2UuIE9uIGFybTY0IGEgMTYtYnl0ZVxcbisgKiBhcmd1bWVudCBtdXN0IHN0YXJ0IGluIGFuIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgcGFpciwgc28gcGxhY2luZyBpdFxcbisgKiBhZnRlciBhIHNpbmdsZS1yZWdpc3RlciBzY2FsYXIgd291bGQgbGVhdmUgYSBwYWRkaW5nIHJlZ2lzdGVyICh4MSlcXG4rICogdW51c2VkLiBwYWhvbGUgbWFwcyBwYXJhbWV0ZXJzIHRvIHJlZ2lzdGVycyBwb3NpdGlvbmFsbHkgYW5kIHdvdWxkIHRoZW5cXG4rICogc2VlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQgaW4gYW4gXFxcInVuZXhwZWN0ZWRcXFwiIHJlZ2lzdGVyIGFuZCBza2lwIEJURlxcbisgKiBlbmNvZGluZyBvZiB0aGUgd2hvbGUgZnVuY3Rpb24sIG1ha2luZyBpdCB1bmF0dGFjaGFibGUuIEtlZXBpbmcgdGhlXFxuKyAqIF9faW50MTI4IGZpcnN0ICh4MDp4MSkgYXZvaWRzIHRoZSBwYWRkaW5nIHdoaWxlIHN0aWxsIGV4ZXJjaXNpbmcgdGhlXFxuKyAqIHRyYW1wb2xpbmUgcGFja2luZyBvZiBhIDEyOC1iaXQgYXJndW1lbnQgdG9nZXRoZXIgd2l0aCB0aGUgdHJhaWxpbmdcXG4rICogaW50IGFuZCBsb25nIGFyZ3VtZW50cy5cXG4rICovXFxuK25vaW5saW5lIGxvbmdcXG4rYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnKF9faW50MTI4IGEsIGludCBiLCBsb25nIGMpXFxuK3tcXG4rXFx0YnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdCA9IChsb25nKWEgKyBiICsgYztcXG4rXFx0cmV0dXJuIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQ7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBfX3dlYWsgbm9pbmxpbmUgdm9pZCBicGZfdGVzdG1vZF9sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nX25hbWUodm9pZClcXG4ge1xcbiB9XFxuQEAgLTUxNCw2ICs1NDEsMTEgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4gXFxuIFxcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfYXJnX3B0cl90b19zdHJ1Y3QoXFx1MDAyNnN0cnVjdF9hcmcxXzIpO1xcbiBcXG4rI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fXFxuK1xcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X3JldChpKTtcXG4rXFx0KHZvaWQpYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnKChfX2ludDEyOCkxLCAyLCAzKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHQodm9pZCl0cmFjZV9icGZfdGVzdG1vZF90ZXN0X3Jhd190cF9udWxsX3RwKE5VTEwpO1xcbiBcXG4gXFx0YnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjoxMC43MTAxNTAyNjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NDQ0MzQwNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdFwiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRcIixcbiAgICBcImJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBCUEYgdHJhbXBvbGluZSBhbmQgc3RydWN0X29wcyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcyBsYXJnZXIgdGhhbiA4IGJ5dGVzIChlLmcuLCBfX2ludDEyOCkuIEl0IGZpeGVzIGEgYnVnIHdoZXJlIHRoZSB0cmFtcG9saW5lIGRpZCBub3QgYWxsb2NhdGUgZW5vdWdoIHJlZ2lzdGVycyBmb3IgbGFyZ2UgYXJndW1lbnRzIGFuZCByZWplY3RzIGF0dGFjaGluZyB0byBmdW5jdGlvbnMgd2l0aCBcXHUwMDNlOCBieXRlIHJldHVybiB2YWx1ZXMgZm9yIGNlcnRhaW4gYXR0YWNoIHR5cGVzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCBhdHRhY2htZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRiNjA3ZDI1NjdlYzQ0M2I1ZjU3MWZhYjE1YTk1ZDMxNDJiNGM5MzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxOTozMjowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZGU3NTE1ZWExYmVhZTguLjBiOGJkMzBmN2M4NzAwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0zMzY5LDExICszMzY5LDggQEAgc3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1cbiBcdFdBUk5fT05fT05DRSgoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAoZmxhZ3MgXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcbiBcbi1cdC8qIGV4dHJhIHJlZ2lzdGVycyBmb3Igc3RydWN0IGFyZ3VtZW50cyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpKyspIHtcbi1cdFx0aWYgKG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX1NUUlVDVF9BUkcpXG4tXHRcdFx0bnJfcmVncyArPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XG4tXHR9XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKylcbitcdFx0bnJfcmVncyArPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gOCAtIDE7XG4gXG4gXHQvKiB4ODYtNjQgc3VwcG9ydHMgdXAgdG8gTUFYX0JQRl9GVU5DX0FSR1MgYXJndW1lbnRzLiAxLTZcbiBcdCAqIGFyZSBwYXNzZWQgdGhyb3VnaCByZWdzLCB0aGUgcmVtYWlucyBhcmUgdGhyb3VnaCBzdGFjay5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmMgYi9rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmNcbmluZGV4IDUxYjE2ZTVmNTUzNGUwLi40ZTdhNDhjMDJiZTVjZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuY1xuKysrIGIva2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jXG5AQCAtNDQ1LDYgKzQ0NSwxOCBAQCBpbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcbiBcdFx0XHRnb3RvIGVycm91dDtcbiBcdFx0fVxuIFxuK1x0XHQvKlxuK1x0XHQgKiBBIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUgaXMgcGFzc2VkIGJhY2sgaW4gYSByZWdpc3RlciBwYWlyLFxuK1x0XHQgKiB3aGljaCB0aGUgc3RydWN0X29wcyB0cmFtcG9saW5lIGRvZXMgbm90IHByZXNlcnZlIChvbmx5XG4rXHRcdCAqIDggYnl0ZXMgb2YgdGhlIHJldHVybiB2YWx1ZSBhcmUgc2F2ZWQgYW5kIHJlc3RvcmVkKS5cbitcdFx0ICovXG4rXHRcdGlmIChzdF9vcHMtXHUwMDNlZnVuY19tb2RlbHNbaV0ucmV0X3NpemUgXHUwMDNlIDgpIHtcbitcdFx0XHRwcl93YXJuKFwiZnVuYyBwdHIgJXMgaW4gc3RydWN0ICVzIGhhcyBhIFx1MDAzZTggYnl0ZSByZXR1cm4gdmFsdWUsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcXG5cIixcbitcdFx0XHRcdG1uYW1lLCBzdF9vcHMtXHUwMDNlbmFtZSk7XG4rXHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdFx0Z290byBlcnJvdXQ7XG4rXHRcdH1cbitcbiBcdFx0c3R1Yl9mdW5jX2FkZHIgPSAqKHZvaWQgKiopKHN0X29wcy1cdTAwM2VjZmlfc3R1YnMgKyBtb2ZmKTtcbiBcdFx0ZXJyID0gcHJlcGFyZV9hcmdfaW5mbyhidGYsIHN0X29wcy1cdTAwM2VuYW1lLCBtbmFtZSxcbiBcdFx0XHRcdCAgICAgICBmdW5jX3Byb3RvLCBzdHViX2Z1bmNfYWRkcixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDY1MTVkNGQzYzAwMzJmLi4yNmQyODFiNzdhNmU3MiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMTg4NzMsNiArMTg4NzMsMjAgQEAgc3RhdGljIGludCBidGZfaWRfYWxsb3dfc2xlZXBhYmxlKHUzMiBidGZfaWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgc3RydWN0IGJcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuK3tcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBCUEZfTU9ESUZZX1JFVFVSTjpcbitcdGNhc2UgQlBGX1RSQUNFX0ZFWElUOlxuK1x0Y2FzZSBCUEZfVFJBQ0VfRkVYSVRfTVVMVEk6XG4rXHRjYXNlIEJQRl9UUkFDRV9GU0VTU0lPTjpcbitcdGNhc2UgQlBGX1RSQUNFX0ZTRVNTSU9OX01VTFRJOlxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4gaW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4gXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICp0Z3RfcHJvZyxcbkBAIC0xOTEzNyw2ICsxOTE1MSwxNCBAQCBpbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFxuK1x0XHRpZiAodGd0X2luZm8tXHUwMDNlZm1vZGVsLnJldF9zaXplIFx1MDAzZSA4IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwocHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSkpIHtcbitcdFx0XHRicGZfbG9nKGxvZyxcbitcdFx0XHRcdFwiQXR0YWNoIHRvIGZ1bmN0aW9uICVzIHdpdGggYSBcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXR0YWNoIHR5cGVcXG5cIixcbitcdFx0XHRcdHRuYW1lKTtcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcbiBcdFx0LypcbiBcdFx0ICogKi5tdWx0aSBwcm9ncmFtcyBkb24ndCBuZWVkIGFuIGFkZHJlc3MgZHVyaW5nIHByb2dyYW1cbiBcdFx0ICogdmVyaWZpY2F0aW9uLCB3ZSBqdXN0IHRha2UgdGhlIG1vZHVsZSByZWYgaWYgbmVlZGVkLlxuQEAgLTE5NDEzLDYgKzE5NDM1LDkgQEAgaW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRcbiBcdGVyciA9IGJ0Zl9kaXN0aWxsX2Z1bmNfcHJvdG8oTlVMTCwgYnRmLCB0LCB0bmFtZSwgXHUwMDI2dGd0X2luZm8tXHUwMDNlZm1vZGVsKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4rXHRpZiAodGd0X2luZm8tXHUwMDNlZm1vZGVsLnJldF9zaXplIFx1MDAzZSA4IFx1MDAyNlx1MDAyNlxuK1x0ICAgIGF0dGFjaF91c2VzX3RyYW1wb2xpbmVfcmV0dmFsKHByb2ctXHUwMDNlZXhwZWN0ZWRfYXR0YWNoX3R5cGUpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHRpZiAoYnRmX2lzX21vZHVsZShidGYpKSB7XG4gXHRcdC8qIFRoZSBicGYgcHJvZ3JhbSBhbHJlYWR5IGhvbGRzIHJlZmVyZW5jZSB0byBtb2R1bGUuICovXG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIXByb2ctXHUwMDNlYXV4LVx1MDAzZW1vZCkpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90cmFjaW5nX2ZhaWx1cmUuY1xuaW5kZXggZjlmOWUxY2I4N2JmMWMuLjM0NWRkMjFhZDYyMTcwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19mYWlsdXJlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfZmFpbHVyZS5jXG5AQCAtNzYsNiArNzYsMTYgQEAgc3RhdGljIHZvaWQgdGVzdF9mZXhpdF9ub3JldHVybnModm9pZClcbiBcdFx0XHQgICAgICAgXCJBdHRhY2hpbmcgZmV4aXQvZnNlc3Npb24vZm1vZF9yZXQgdG8gX19ub3JldHVybiBmdW5jdGlvbiAnZG9fZXhpdCcgaXMgcmVqZWN0ZWQuXCIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X2ZleGl0X2ludDEyOF9yZXQodm9pZClcbit7XG4rI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fXG4rXHR0ZXN0X3RyYWNpbmdfZmFpbF9wcm9nKFwiZmV4aXRfaW50MTI4X3JldFwiLFxuK1x0XHRcdCAgICAgICBcIndpdGggYSBcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYXR0YWNoIHR5cGVcIik7XG4rI2Vsc2VcbitcdHRlc3RfX3NraXAoKTtcbisjZW5kaWZcbit9XG4rXG4gdm9pZCB0ZXN0X3RyYWNpbmdfZmFpbHVyZSh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnBmX3NwaW5fbG9ja1wiKSlcbkBAIC04Niw0ICs5Niw2IEBAIHZvaWQgdGVzdF90cmFjaW5nX2ZhaWx1cmUodm9pZClcbiBcdFx0dGVzdF90cmFjaW5nX2RlbnkoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiZmV4aXRfbm9yZXR1cm5zXCIpKVxuIFx0XHR0ZXN0X2ZleGl0X25vcmV0dXJucygpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJmZXhpdF9pbnQxMjhfcmV0XCIpKVxuK1x0XHR0ZXN0X2ZleGl0X2ludDEyOF9yZXQoKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdHJhY2luZ19zdHJ1Y3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbmluZGV4IDZmOGMwYmZiMDQxNTU5Li4xNWI5NWQwMjM1YjUyMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3RyYWNpbmdfc3RydWN0LmNcbkBAIC00LDYgKzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFwidHJhY2luZ19zdHJ1Y3Quc2tlbC5oXCJcbiAjaW5jbHVkZSBcInRyYWNpbmdfc3RydWN0X21hbnlfYXJncy5za2VsLmhcIlxuKyNpbmNsdWRlIFwidHJhY2luZ19zdHJ1Y3RfaW50MTI4LnNrZWwuaFwiXG4gXG4gc3RhdGljIHZvaWQgdGVzdF9zdHJ1Y3RfYXJncyh2b2lkKVxuIHtcbkBAIC0xMTIsNiArMTEzLDM5IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc3RydWN0X21hbnlfYXJncyh2b2lkKVxuIFx0dHJhY2luZ19zdHJ1Y3RfbWFueV9hcmdzX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0ZXN0X2ludDEyOF9hcmdzKHZvaWQpXG4re1xuK1x0LypcbitcdCAqIF9faW50MTI4IGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluIGEgcmVnaXN0ZXIgcGFpciBvbiB4ODZfNjQgYW5kXG4rXHQgKiBhcm02NCwgd2hpY2ggdGhlIHRyYW1wb2xpbmUgcGFja3MgaW50byB0d28gY29udGV4dCBzbG90cy4gT3RoZXJcbitcdCAqIGFyY2hpdGVjdHVyZXMgcGFzcyBhIF9faW50MTI4IGRpZmZlcmVudGx5IChlLmcuIHMzOTB4IHBhc3NlcyBsYXJnZXJcbitcdCAqIGFyZ3VtZW50cyBieSByZWZlcmVuY2UpLCBzbyBvbmx5IGV4ZXJjaXNlIHRoaXMgb24geDg2XzY0IGFuZCBhcm02NC5cbitcdCAqL1xuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4rXHRzdHJ1Y3QgdHJhY2luZ19zdHJ1Y3RfaW50MTI4ICpza2VsO1xuK1x0aW50IGVycjtcbitcbitcdHNrZWwgPSB0cmFjaW5nX3N0cnVjdF9pbnQxMjhfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcInRyYWNpbmdfc3RydWN0X2ludDEyOF9fb3Blbl9hbmRfbG9hZFwiKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gdHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2goc2tlbCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwidHJhY2luZ19zdHJ1Y3RfaW50MTI4X19hdHRhY2hcIikpXG4rXHRcdGdvdG8gZGVzdHJveV9za2VsO1xuK1xuK1x0QVNTRVJUX09LKHRyaWdnZXJfbW9kdWxlX3Rlc3RfcmVhZCgyNTYpLCBcInRyaWdnZXJfcmVhZFwiKTtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2V0X2IsIDIsIFwidDpiXCIpO1xuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRfYywgMywgXCJ0OmNcIik7XG4rXHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNldF9yZXQsIDYsIFwidCByZXRcIik7XG4rXG4rZGVzdHJveV9za2VsOlxuK1x0dHJhY2luZ19zdHJ1Y3RfaW50MTI4X19kZXN0cm95KHNrZWwpO1xuKyNlbHNlXG4rXHR0ZXN0X19za2lwKCk7XG4rI2VuZGlmXG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRlc3RfdW5pb25fYXJncyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0cmFjaW5nX3N0cnVjdCAqc2tlbDtcbkBAIC0xNDUsNiArMTc5LDggQEAgdm9pZCB0ZXN0X3RyYWNpbmdfc3RydWN0KHZvaWQpXG4gXHRcdHRlc3Rfc3RydWN0X2FyZ3MoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic3RydWN0X21hbnlfYXJnc1wiKSlcbiBcdFx0dGVzdF9zdHJ1Y3RfbWFueV9hcmdzKCk7XG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImludDEyOF9hcmdzXCIpKVxuK1x0XHR0ZXN0X2ludDEyOF9hcmdzKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcInVuaW9uX2FyZ3NcIikpXG4gXHRcdHRlc3RfdW5pb25fYXJncygpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdHJhY2luZ19mYWlsdXJlLmNcbmluZGV4IDY1ZTQ4NWM0NDY4YzYyLi5mN2EwOTU3Njc2Nzk1NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX2ZhaWx1cmUuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfZmFpbHVyZS5jXG5AQCAtMzAsMyArMzAsOSBAQCBpbnQgQlBGX1BST0coZmV4aXRfbm9yZXR1cm5zKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitTRUMoXCI/ZmV4aXQvYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfcmV0XCIpXG4raW50IEJQRl9QUk9HKGZleGl0X2ludDEyOF9yZXQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90cmFjaW5nX3N0cnVjdF9pbnQxMjguY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40NjM4ZGZlYzFmMzhlZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3RyYWNpbmdfc3RydWN0X2ludDEyOC5jXG5AQCAtMCwwICsxLDE4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuK1xuK2xvbmcgdF9iLCB0X2MsIHRfcmV0O1xuK1xuK1NFQyhcImZleGl0L2JwZl90ZXN0bW9kX3Rlc3RfaW50MTI4X2FyZ1wiKVxuK2ludCB0ZXN0X2ludDEyOF9hcmdfZmV4aXQodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4re1xuK1x0dF9iID0gKGludCljdHhbMl07XG4rXHR0X2MgPSAobG9uZyljdHhbM107XG4rXHR0X3JldCA9IChsb25nKWN0eFs0XTtcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IDMwZjFjZDIzMDkzY2JlLi5lYjBmOWI1ZTE4ZDg1ZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC0xNjEsNiArMTYxLDMzIEBAIGJwZl90ZXN0bW9kX3Rlc3RfYXJnX3B0cl90b19zdHJ1Y3Qoc3RydWN0IGJwZl90ZXN0bW9kX3N0cnVjdF9hcmdfMSAqYSkge1xuIFx0cmV0dXJuIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQ7XG4gfVxuIFxuKyNpZmRlZiBfX1NJWkVPRl9JTlQxMjhfX1xuK25vaW5saW5lIF9faW50MTI4XG4rYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfcmV0KGludCBhKVxuK3tcbitcdGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X2FyZ19yZXN1bHQgPSBhO1xuK1x0cmV0dXJuIChfX2ludDEyOClhO1xuK31cbitcbisvKlxuKyAqIFRoZSBfX2ludDEyOCAnYScgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9uIHB1cnBvc2UuIE9uIGFybTY0IGEgMTYtYnl0ZVxuKyAqIGFyZ3VtZW50IG11c3Qgc3RhcnQgaW4gYW4gZXZlbi1udW1iZXJlZCByZWdpc3RlciBwYWlyLCBzbyBwbGFjaW5nIGl0XG4rICogYWZ0ZXIgYSBzaW5nbGUtcmVnaXN0ZXIgc2NhbGFyIHdvdWxkIGxlYXZlIGEgcGFkZGluZyByZWdpc3RlciAoeDEpXG4rICogdW51c2VkLiBwYWhvbGUgbWFwcyBwYXJhbWV0ZXJzIHRvIHJlZ2lzdGVycyBwb3NpdGlvbmFsbHkgYW5kIHdvdWxkIHRoZW5cbisgKiBzZWUgdGhlIGZvbGxvd2luZyBhcmd1bWVudCBpbiBhbiBcInVuZXhwZWN0ZWRcIiByZWdpc3RlciBhbmQgc2tpcCBCVEZcbisgKiBlbmNvZGluZyBvZiB0aGUgd2hvbGUgZnVuY3Rpb24sIG1ha2luZyBpdCB1bmF0dGFjaGFibGUuIEtlZXBpbmcgdGhlXG4rICogX19pbnQxMjggZmlyc3QgKHgwOngxKSBhdm9pZHMgdGhlIHBhZGRpbmcgd2hpbGUgc3RpbGwgZXhlcmNpc2luZyB0aGVcbisgKiB0cmFtcG9saW5lIHBhY2tpbmcgb2YgYSAxMjgtYml0IGFyZ3VtZW50IHRvZ2V0aGVyIHdpdGggdGhlIHRyYWlsaW5nXG4rICogaW50IGFuZCBsb25nIGFyZ3VtZW50cy5cbisgKi9cbitub2lubGluZSBsb25nXG4rYnBmX3Rlc3Rtb2RfdGVzdF9pbnQxMjhfYXJnKF9faW50MTI4IGEsIGludCBiLCBsb25nIGMpXG4re1xuK1x0YnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3RfYXJnX3Jlc3VsdCA9IChsb25nKWEgKyBiICsgYztcbitcdHJldHVybiBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9hcmdfcmVzdWx0O1xuK31cbisjZW5kaWZcbitcbiBfX3dlYWsgbm9pbmxpbmUgdm9pZCBicGZfdGVzdG1vZF9sb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb25nX25hbWUodm9pZClcbiB7XG4gfVxuQEAgLTUxNCw2ICs1NDEsMTEgQEAgYnBmX3Rlc3Rtb2RfdGVzdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcbiBcdCh2b2lkKWJwZl90ZXN0bW9kX3Rlc3RfYXJnX3B0cl90b19zdHJ1Y3QoXHUwMDI2c3RydWN0X2FyZzFfMik7XG4gXG4rI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fXG4rXHQodm9pZClicGZfdGVzdG1vZF90ZXN0X2ludDEyOF9yZXQoaSk7XG4rXHQodm9pZClicGZfdGVzdG1vZF90ZXN0X2ludDEyOF9hcmcoKF9faW50MTI4KTEsIDIsIDMpO1xuKyNlbmRpZlxuK1xuIFx0KHZvaWQpdHJhY2VfYnBmX3Rlc3Rtb2RfdGVzdF9yYXdfdHBfbnVsbF90cChOVUxMKTtcbiBcbiBcdGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczMoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjEwLjcxMDE1MjE4MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjk5MTcwMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFN1YnN5c3RlbSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgaXQncyB0b3VjaGluZyB0aGUgQlBGIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBsYXJnZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgaW4gQlBGIHRyYW1wb2xpbmVzIGFuZCBzdHJ1Y3Qgb3BzLiBUaGUga2V5IGlkZWEgaGVyZSBpcyB0byBjb3JyZWN0bHkgaGFuZGxlIHZhbHVlcyBsYXJnZXIgdGhhbiA4IGJ5dGVzLCBsaWtlIGBfX2ludDEyOGAgb3Igc2l6YWJsZSBzdHJ1Y3RzLCB3aGljaCBhcmUgbm93IGJlaW5nIGFkZHJlc3NlZC4gTGV0J3MgYnJlYWsgaXQgZG93bjpcblxuRmlyc3QsIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCB0aGUgY2hhbmdlIGluIGBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgc2lnbmlmaWNhbnQuIFRoZSBjb2RlIG5vdyB1bmNvbmRpdGlvbmFsbHkgYWxsb2NhdGVzIGV4dHJhIHJlZ2lzdGVycyBmb3IgYW55IGFyZ3VtZW50IGxhcmdlciB0aGFuIDggYnl0ZXMsIGFzIG9wcG9zZWQgdG8gb25seSBmb3Igc3RydWN0IGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmRhbWVudGFsIGZpeCBmb3IgdGhlIG9yaWdpbmFsIGxvZ2ljLlxuXG5UaGVuLCBsb29raW5nIGF0IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB0aGVyZSdzIGEgbmV3IGBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbGAgZnVuY3Rpb24gdGhhdCBlc3NlbnRpYWxseSBnYXRlcyB0aGUgYXR0YWNobWVudCB0byBmdW5jdGlvbnMgYmFzZWQgb24gcmV0dXJuIHNpemUgZm9yIGNlcnRhaW4gYXR0YWNoIHR5cGVzIGxpa2UgYEJQRl9NT0RJRllfUkVUVVJOYCBhbmQgYEJQRl9UUkFDRV9GRVhJVGAuIFRoaXMgcHJldmVudHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGdlbmVyYXRlIGluY29ycmVjdCByZXR1cm4gc2l6ZXMgaWYgdGhlIHNpemUgZXhjZWVkcyA4IGJ5dGVzLlxuXG5UaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gZW5zdXJlIGl0IGhhbmRsZXMgdGhlc2UgZWRnZSBjYXNlcyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBzZWN1cml0eSBob2xlcy5cblxuSSdtIHRoaW5raW5nIHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHNob3VsZCBiZTpcbiogICBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBJIGJlbGlldmUgdGhpcyBpcyBnb29kIGJlY2F1c2UgaXTigJlzIGNhbGxlZCBkdXJpbmcgdGhlIGxvYWRpbmcgYW5kIGF0dGFjaGluZyBvZiBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIG5vdCBhbiBleGVjdXRpb24gYm90dGxlbmVjay5cbiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCDigJMgZm9yIEJQRiBzdHJ1Y3Rfb3BzIHJlZ2lzdHJhdGlvbi5cbiogICBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgIGFuZCBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgIOKAkyBiZWNhdXNlIHRoZXNlIGFyZSBjYWxsZWQgZHVyaW5nIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbi5cblxuSSBzaG91bGQgYWxzbyBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IEJQRiBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gV2UncmUgbG9va2luZyBhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19CUEZfSklUYCwgYW5kIGBDT05GSUdfREVCVUdfSU5GT19CVEZgLlxuXG5GaW5hbGx5LCBJJ2xsIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgdG8gc2VlIGlmIHRob3NlIGRlcGVuZCBvbiB0aGUgQlBGIGNvbmZpZ3VyYXRpb25zLCBieSB1c2luZyBgZ3JlcHBlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NzEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjoyMS40MDkzMjQ1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM0Nzc2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oPTIyNjI9aW50IGJwZl9zdHJ1Y3Rfb3BzX3Rlc3RfcnVuKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0yMjY0LSNlbmRpZlxcbmluY2x1ZGUvbGludXgvYnBmLmg6MjI2NTppbnQgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0KHN0cnVjdCBicGZfc3RydWN0X29wc19kZXNjICpzdF9vcHNfZGVzYyxcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTIyNjYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM9MzI0PWludCBicGZfc3RydWN0X29wc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHMsIHUzMiBtb2ZmKVxcbi0tXFxua2VybmVsL2JwZi9icGZfc3RydWN0X29wcy5jLTMzMC1cXG5rZXJuZWwvYnBmL2JwZl9zdHJ1Y3Rfb3BzLmM6MzMxOmludCBicGZfc3RydWN0X29wc19kZXNjX2luaXQoc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2MgKnN0X29wc19kZXNjLFxcbmtlcm5lbC9icGYvYnBmX3N0cnVjdF9vcHMuYy0zMzItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTk4MzU9YnRmX2FkZF9zdHJ1Y3Rfb3BzKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzICpzdF9vcHMsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTk4NjYtXFxua2VybmVsL2JwZi9idGYuYzo5ODY3OlxcdGVyciA9IGJwZl9zdHJ1Y3Rfb3BzX2Rlc2NfaW5pdChcXHUwMDI2dGFiLVxcdTAwM2VvcHNbYnRmLVxcdTAwM2VzdHJ1Y3Rfb3BzX3RhYi1cXHUwMDNlY250XSwgYnRmLCBsb2cpO1xcbmtlcm5lbC9icGYvYnRmLmMtOTg2OC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjoyNC43NDQxMDg5NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3OTA4NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBCUEYgVmVyaWZpY2F0aW9uIGFuZCBKSVQgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBCUEYgYnl0ZWNvZGUgZ2V0cyB2ZXJpZmllZCBhbmQgdGhlbiBwb3RlbnRpYWxseSBKdXN0LUluLVRpbWUgY29tcGlsZWQuIFRoZSBjb3JlIG9mIHRoaXMgcHJvY2VzcywgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBuZWVkIHRvIGV4YW1pbmUgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGFuZCB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHR3byBzcGVjaWZpYyBmaWxlczogYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgYW5kIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBJIGtub3cgdGhhdCBgdmVyaWZpZXIuY2Agc2hvdWxkIGNvbnRhaW4gdGhlIGxvZ2ljIHRvIGFuYWx5emUgdGhlIEJQRiBieXRlY29kZSBmb3Igc2FmZXR5IGFuZCBhZGhlcmVuY2UgdG8gcnVsZXMgYmVmb3JlIGl0J3MgZXhlY3V0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBjcmFzaGVzIGFuZCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBgYnBmX2ppdF9jb21wLmNgIGlzIGxpa2VseSB3aGVyZSB0aGUgYWN0dWFsIEpJVCBjb21waWxhdGlvbiBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCB0cmFuc2xhdGluZyB0aGUgQlBGIGluc3RydWN0aW9ucyBpbnRvIG5hdGl2ZSB4ODYgbWFjaGluZSBjb2RlIGZvciBmYXN0ZXIgZXhlY3V0aW9uLiBTbywgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZmlsZXMgaXMga2V5LiBJJ2xsIHN0YXJ0IHdpdGggdGhlIHZlcmlmaWVyLCBidXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBKSVQgY29tcGlsZXIgd2lsbCBoYXZlIGl0cyBvd24gZXhwZWN0YXRpb25zIGFuZCBhc3N1bXB0aW9ucyBiYXNlZCBvbiB3aGF0IHRoZSB2ZXJpZmllciBhbGxvd3MuIFRoZSBjb21waWxhdGlvbiBtaWdodCBmYWlsIG9yIGJlIHN1Ym9wdGltYWwgaWYgdGhlIHZlcmlmaWVyIGRvZXNuJ3QgZW5mb3JjZSB0aGUgcmlnaHQgY29uc3RyYWludHMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6MjguMDAyMDE5MzgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTQwNzk2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xODA5PXN0YXRpYyB2b2lkIHNpZ25fZXh0ZW5kKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZCwgaW50IHJqLCB1OCBzaXplLCBib29sIHNpZ24pXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE4MzYtXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxODM3OnN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xODM4LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2RlcyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MjE0ND1pbnQgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE2MS1cXHRqaXRfZmlsbF9ob2xlKGltYWdlLCAodW5zaWduZWQgaW50KShyb19pbWFnZV9lbmQgLSByb19pbWFnZSkpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MjE2MjpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2Y3R4LCBpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzKTtcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIxNjMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTIxODI9aW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE5MS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIxOTI6XFx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoXFx1MDAyNmN0eCwgXFx1MDAyNmltLCBtLCB0bm9kZXMsIGZ1bmNfYWRkciwgZmxhZ3MpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjE5My1cXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9Njg2PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9tb2RfcmV0KHUzMiAqaW1hZ2UsIHUzMiAqcm9faW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNzIzLS8qXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo3MjQ6ICogUmVmZXIgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKSBmb3Igc3RhY2sgY29tcG9uZW50IGRldGFpbHMuXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy03MjUtICpcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9Nzk3PXN0YXRpYyB2b2lkIGJwZl90cmFtcG9saW5lX3Jlc3RvcmVfYXJnc19zdGFjayh1MzIgKmltYWdlLCBzdHJ1Y3QgY29kZWdlbl9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTgxMS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjgxMjpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTgxMy1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICpyb19pbWFnZSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM9MTE5Mj1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTk3LVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmM6MTE5ODpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcXHUwMDI2aW0sIE5VTEwsIE5VTEwsIE5VTEwsIG0sIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYy0xMTk5LVxcdHJldHVybiByZXQ7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jPTEyMDI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqaW1hZ2UsIHZvaWQgKmltYWdlX2VuZCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTIxOC1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jOjEyMTk6XFx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIHJ3X2ltYWdlLCByd19pbWFnZSArIHNpemUsIGltYWdlLCBtLFxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtMTIyMC1cXHRcXHRcXHRcXHRcXHQgICAgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTk5PXN0YXRpYyBpbnQgaW52b2tlX2JwZihzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0biwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTAyMS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEwMjI6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMjMtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTMwNz1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzE2LVxcdGN0eC5yb19pbnNucyA9IE5VTEw7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzE3OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgbSwgdG5vZGVzLCBmdW5jX2FkZHIsIGZsYWdzLCBcXHUwMDI2Y3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzMTgtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzMzI9aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEzNDgtXFx0Y3R4LnJvX2luc25zID0gcm9faW1hZ2U7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMzQ5OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBtLCB0bm9kZXMsIGZ1bmNfYWRkciwgZmxhZ3MsIFxcdTAwMjZjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM1MC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjYzMj1zdGF0aWMgaW50IGFsbG9jX3N0YWNrKHN0cnVjdCBicGZfdHJhbXBfaml0ICp0aml0LCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjY0OS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI2NTA6c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2NTEtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfdHJhbXBfaml0ICp0aml0LFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yOTY2PWludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5NzQtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyOTc1OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgXFx1MDAyNnRqaXQsIG0sIGZsYWdzLFxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjk3Ni1cXHRcXHRcXHRcXHRcXHQgICAgdG5vZGVzLCBvcmlnX2NhbGwpO1xcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yOTgxPWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTkwLVxcdG1lbXNldChcXHUwMDI2dGppdCwgMCwgc2l6ZW9mKHRqaXQpKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI5OTE6XFx0cmV0ID0gX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoaW0sIFxcdTAwMjZ0aml0LCBtLCBmbGFncyxcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5OTItXFx0XFx0XFx0XFx0XFx0ICAgIHRub2RlcywgZnVuY19hZGRyKTtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwNC1cXHR0aml0LmNvbW1vbi5wcmdfYnVmID0gaW1hZ2U7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzozMDA1OlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKGltLCBcXHUwMDI2dGppdCwgbSwgZmxhZ3MsXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0zMDA2LVxcdFxcdFxcdFxcdFxcdCAgICB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzI0ND1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzM0NS0gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzM0NjpzdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzM0Ny1cXHRcXHRcXHRcXHRcXHQgdm9pZCAqcndfaW1hZ2VfZW5kLCB2b2lkICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNjY2PWludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmltYWdlLCB2b2lkICppbWFnZV9lbmQsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY4MS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY4MjpcXHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShpbSwgcndfaW1hZ2UsIHJ3X2ltYWdlICsgc2l6ZSwgaW1hZ2UsIG0sXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2ODMtXFx0XFx0XFx0XFx0XFx0ICAgIGZsYWdzLCB0bm9kZXMsIGZ1bmNfYWRkcik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzY5NT1pbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MDEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3MDI6XFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzAzLVxcdCAqIFRoaXMgd2lsbCBOT1QgY2F1c2UgZnJhZ21lbnRhdGlvbiBpbiBkaXJlY3QgbWFwLCBhcyB3ZSBkbyBub3RcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzEyLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzEzOlxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICsgUEFHRV9TSVpFLCBpbWFnZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzcxNC1cXHRcXHRcXHRcXHRcXHQgICAgbSwgZmxhZ3MsIHRub2RlcywgZnVuY19hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6MzAuMTU2MTA0MzI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0Njg5NjIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IHRoaXMgQlBGIHRyYW1wb2xpbmUgc2V0dXAgcmlnaHQuIEknbSBnb2luZyB0byBuZWVkIHRvIGVuYWJsZSBhIGZldyBrZXkgY29uZmlndXJhdGlvbnMgaW4gdGhlIGtlcm5lbC4gRmlyc3QsIG9idmlvdXNseSwgSSBuZWVkIGBCUEZfU1lTQ0FMTGAg4oCTIHRoYXQncyBmdW5kYW1lbnRhbC4gVGhlbiwgYEJQRl9KSVRgIGZvciBKdXN0LUluLVRpbWUgY29tcGlsYXRpb24sIGNhbid0IHJlYWxseSBkbyBtdWNoIHdpdGhvdXQgdGhhdC4gVGhlIGBERUJVR19JTkZPX0JURmAgb3B0aW9uIGlzIGFsc28gY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCBpbnRyb3NwZWN0aW9uIHdpdGggQlRGIChCUEYgVHlwZSBGb3JtYXQpLiBBbmQgc2luY2UgdGhpcyAqaXMqIGFib3V0IEJQRiB0cmFtcG9saW5lcywgSSdtIGdvaW5nIHRvIG5lZWQgYEZUUkFDRWAuIEZpbmFsbHksIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgSSB3aWxsIG5lZWQgYERZTkFNSUNfRlRSQUNFX1dJVEhfRElSRUNUX0NBTExTYCBzbyB0aGF0IHRoZSBCUEYgdHJhbXBvbGluZXMgZnVuY3Rpb24gY29ycmVjdGx5LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjMzLjcwMzAwMjY4MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgzNDcyMTkzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1RSQU1QXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjozNS40ODY0ODI3ODNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA2MzcyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEh1bnRpbmc6IFdoZXJlIHRvIEZpbmQgdGhlIFRyYW1wb2xpbmU/KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBhIHRyYW1wb2xpbmUsIHByZXN1bWFibHkgc29tZXRoaW5nIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgQlBGIG9yIHBvc3NpYmx5IGV2ZW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZlYXR1cmVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGxpa2VseSBpbnZvbHZlbWVudCBvZiBCUEYsIGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBCZXJrZWxleSBQYWNrZXQgRmlsdGVyIHdpdGhpbiB0aGUga2VybmVsLiBJJ2QgZXhwZWN0IHRvIGZpbmQgc29tZXRoaW5nIHRoZXJlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0cmFtcG9saW5lIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLlxuXG5Ib3dldmVyLCBhIHRyYW1wb2xpbmUgY291bGQgYWxzbyBiZSBhIHZlcnkgc3BlY2lmaWMgYXJjaGl0ZWN0dXJhbCBmZWF0dXJlLiBJZiBpdCdzIHg4Ni1zcGVjaWZpYywgb3IgdXNlcyB4ODYgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCB0aGVuIEknbGwgaW1tZWRpYXRlbHkgc2hpZnQgbXkgYXR0ZW50aW9uIHRvIGBhcmNoL3g4Ni9LY29uZmlnYC4gVGhhdCB3b3VsZCBiZSB3aGVyZSBJJ2QgYW50aWNpcGF0ZSBmaW5kaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGl0LCBwYXJ0aWN1bGFybHkgaWYgaXQncyB0aWVkIHRvIHRoaW5ncyBsaWtlIENQVSBmZWF0dXJlcywgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLCBvciBtZW1vcnkgbWFuYWdlbWVudC5cblxuQmFzaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdHdvIGRpc3RpbmN0IHBhdGhzIGhlcmUuIEJQRiBpcyBteSBmaXJzdCBndWVzcywgYnV0IHg4NiBpcyBhIHZlcnkgc3Ryb25nIGNvbnRlbmRlciwgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIGNvbnRleHQgb2YgdGhpcyBcInRyYW1wb2xpbmVcIiBpbXBsZW1lbnRhdGlvbi4gQm90aCBvZiB0aG9zZSBsb2NhdGlvbnMgYXJlIG15IGdvLXRvIHN0YXJ0aW5nIHBvaW50cyBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0aG9zZSBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMjozOS4xOTI4NTc2MDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTg2MTc0ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6NDAuOTkxNDgwMzIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3ODMyMTU2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyByZWxhdGVkIHRvIHRoZSBCUEYgdmVyaWZpZXIuIEknbSBub3QgbG9va2luZyBmb3IgYSBoaWdoLWxldmVsIG92ZXJ2aWV3OyBJIG5lZWQgdG8gZGlnIGRlZXAgaW50byB0aGUga25vYnMgYW5kIGxldmVycyBhdmFpbGFibGUuIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMsIHJ1bnRpbWUgcGFyYW1ldGVycywgYW5kIGFueSBkZWJ1ZyBmbGFncyB0aGF0IGNvbnRyb2wgaXRzIGJlaGF2aW9yLiBTcGVjaWZpY2FsbHkgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgaW1wYWN0IGl0cyBzYWZldHkgZ3VhcmFudGVlcyBhbmQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLiBJIHN1c3BlY3QgdGhlcmUgYXJlIHNvbWUgaGlkZGVuIGdlbXMgaW4gdGhlcmUgcmVnYXJkaW5nIHRoZSB0cmFkZS1vZmZzIGl0IG1ha2VzIHRvIGF2b2lkIG92ZXJseSBhZ2dyZXNzaXZlIHZlcmlmaWNhdGlvbiB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZS4gVGltZSB0byBjaGVjayB0aGUgaW5jbHVkZXMsIG1hY3JvIGRlZmluaXRpb25zLCBhbmQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIHdpdGhpbiB0aGUgZmlsZSDigJMgdGhhdCdzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBhbnl0aGluZyByZWxhdGVkIHRvIGZlYXR1cmUgZ2F0aW5nIG9yIGVuYWJsaW5nL2Rpc2FibGluZyBzcGVjaWZpYyB2ZXJpZmljYXRpb24gY2hlY2tzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVhbGx5IG9wdGltaXppbmcgQlBGIHByb2dyYW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY1MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjQ0Ljc3NDY5ODQwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwOTExNDMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTExNjE9aW50IGJwZl9jaGVja19idGZfaW5mbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xMTYzLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTE2NDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oLTExNjUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9Njg0OD1ib29sIGJ0Zl9jdHhfYWNjZXNzKGludCBvZmYsIGludCBzaXplLCBlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03MDI1LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5rZXJuZWwvYnBmL2J0Zi5jOjcwMjY6XFx0XFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xcbmtlcm5lbC9icGYvYnRmLmMtNzAyNy1cXHRcXHR0bmFtZSArPSBzaXplb2YoXFxcImJ0Zl90cmFjZV9cXFwiKSAtIDE7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNjg5PXN0YXRpYyBpbnQgYnBmX3RyYWNpbmdfcHJvZ19hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzgyMS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozODIyOlxcdFxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIHRndF9wcm9nLCBidGZfaWQsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzgyMy1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2dGd0X2luZm8pO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTA3Nj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDg2LVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjEwODc6XFx0ZXJyID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoTlVMTCwgcHJvZywgTlVMTCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xMDg4LVxcdFxcdFxcdFxcdCAgICAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXR0YWNoX2J0Zl9pZCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg4OD1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExODk5LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MDA6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkwMS0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4NzY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg4OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4OTA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODkxLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzM0OlxcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzMzUtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6NDYuNzgzODQ4MTU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDI4NzI3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQlBGIEltcGxlbWVudGF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBCUEYgc3R1ZmYsIGZvY3VzaW5nIG9uIHNvbWUgc3BlY2lmaWMgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuIEknbSB6ZXJvaW5nIGluIG9uIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgLCBgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXRgLCBhbmQgYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYCwgYXMgd2VsbCBhcyB0aG9zZSBrZXkgY29uZmlnczogYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC5cblxuRmlyc3QsIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgLi4uIGlzIHRoYXQgZXZlbiByZWFjaGFibGU/IEFoLCB5ZXMsIGl04oCZcyBjbGVhcmx5IGFjY2Vzc2libGUgdGhyb3VnaCBgYnBmX3N0cnVjdF9vcHNfc3VwcG9ydGVkYCBhbmQgYGJ0Zl9hZGRfc3RydWN0X29wc2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIEJURiBwYXJzaW5nIGFuZCBzdHJ1Y3Rfb3BzIHJlZ2lzdHJhdGlvbi4gXG5cbk5vdywgb24gdG8gYGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0YC4gSSByZW1lbWJlciB0aGlzIG9uZTsgaXQgZ2V0cyBpbnZva2VkIGR1cmluZyBib3RoIEJQRiBwcm9ncmFtIHZlcmlmaWNhdGlvbiAqYW5kKiBkdXJpbmcgdGhlIGF0dGFjaCBwcm9jZXNzLiBTYW1lIHdpdGggYGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpYDsgdGhhdCdzIGFub3RoZXIgY3JpdGljYWwgY2hlY2sgZHVyaW5nIHZlcmlmaWNhdGlvbi4gU28gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGlzIHByZXR0eSB0aG9yb3VnaC5cblxuSG1tLCB3aGF0IGVsc2UgbWlnaHQgYmUgaW1wb3J0YW50IGNvbmZpZy13aXNlPyBXYWl0Li4uIGBGVFJBQ0VgISBUaGF0J3MgYWxtb3N0IGFsd2F5cyBhIGtleSBkZXBlbmRlbmN5IHdoZW4gd29ya2luZyB3aXRoIEJQRiB0cmFtcG9saW5lcy4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGtlcm5lbC9icGYvdHJhbXBvbGluZS5jYCB0byBtYWtlIHN1cmUgbm90aGluZyBoYXMgY2hhbmdlZCByZWNlbnRseS4gVGhlc2UgY2FuIGJlIHRyaWNreSBhbmQgZWFzeSB0byBtaXNzIG9uIHF1aWNrIHJldmlld3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODAyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjUxLjc4NjcyMzY2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDgxNDUxNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9UUkFNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzI6NTMuNTA3NTQ1MDExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjI1Mjc2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipMb2NhdGluZyB0aGUgVHJhbXBvbGluZSBPYmplY3QgRmlsZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoZSBgdHJhbXBvbGluZS5vYCBvYmplY3QgZmlsZSBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgQlBGIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBCUEYtcmVsYXRlZCBjb21waWxhdGlvbiBpcyBsaWtlbHkgY29udHJvbGxlZCwgc28gdGhhdCdzIHdoZXJlIEkgc2hvdWxkIGJlIGFibGUgdG8gcGlucG9pbnQgaXRzIGNyZWF0aW9uLiBJIHdpbGwgY2hlY2sgZm9yIHRoaXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMyOjU4LjUzMDA3NTI1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1NjY0ODI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cmFtcG9saW5lLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9saXZlcGF0Y2gvcmVsaWFibGUtc3RhY2t0cmFjZS5yc3Q9MTc5PWluZm9ybWF0aW9uIGlzIG5vdCBpbiBhIGNvbnNpc3RlbnQgbG9jYXRpb24gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZW50cnlcXG5Eb2N1bWVudGF0aW9uL2xpdmVwYXRjaC9yZWxpYWJsZS1zdGFja3RyYWNlLnJzdDoxODA6dHJhbXBvbGluZSBvciByZXR1cm4gdHJhbXBvbGluZS4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyaW5nIHRoZSB4ODZfNjRcXG5Eb2N1bWVudGF0aW9uL2xpdmVwYXRjaC9yZWxpYWJsZS1zdGFja3RyYWNlLnJzdC0xODEtJ3JldHVybl90b19oYW5kbGVyJyByZXR1cm4gdHJhbXBvbGluZTpcXG4tLVxcbmFyY2gvYXJjL2luY2x1ZGUvdWFwaS9hc20vc2lnbmFsLmgtMTgtICogd2hpY2ggYWxsb3dzIHNpZ3JldHVybiBiYXNlZCByZS1lbnRyeSBpbnRvIGtlcm5lbCBhZnRlciBoYW5kbGluZyBzaWduYWwuXFxuYXJjaC9hcmMvaW5jbHVkZS91YXBpL2FzbS9zaWduYWwuaDoxOTogKiBXL28gdGhpcyBrZXJuZWwgbmVlZHMgdG8gXFxcInN5bnRoZXNpemVcXFwiIHRoZSBzaWdyZXR1cm4gdHJhbXBvbGluZSBvbiB1c2VyXFxuYXJjaC9hcmMvaW5jbHVkZS91YXBpL2FzbS9zaWduYWwuaC0yMC0gKiBtb2RlIHN0YWNrIHdoaWNoIGluIHR1cm4gZm9yY2VzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfS1BST0JFUylcXHRcXHQrPSBrcHJvYmVzLm8gZGVjb2RlLWluc24ub1xcdFxcXFxcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU6MzpcXHRcXHRcXHRcXHQgICBrcHJvYmVzX3RyYW1wb2xpbmUub1xcdFxcdFxcXFxcXG5hcmNoL2FybTY0L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGUtNC1cXHRcXHRcXHRcXHQgICBzaW11bGF0ZS1pbnNuLm9cXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jPTE0MzQ9c3RhdGljIGludCBnY3Nfc2lnbmFsX2VudHJ5KF9fc2lncmVzdG9yZV90IHNpZ3RyYW1wLCBzdHJ1Y3Qga3NpZ25hbCAqa3NpZylcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL3NpZ25hbC5jLTE0NTEtXFx0LypcXG5hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYzoxNDUyOlxcdCAqIFB1c2ggYSBjYXAgYW5kIHRoZSBHQ1MgZW50cnkgZm9yIHRoZSB0cmFtcG9saW5lIG9udG8gdGhlIEdDUy5cXG5hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwuYy0xNDUzLVxcdCAqL1xcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MjU1Mz1zdGF0aWMgdm9pZCBzdG9yZV9mdW5jX21ldGEoc3RydWN0IGppdF9jdHggKmN0eCwgdTY0IGZ1bmNfbWV0YSwgaW50IGZ1bmNfbWV0YV9vZmYpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNTY2LSAqICAgbW92IHg5LCBsclxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjI1Njc6ICogICBibCAgXFx1MDAzY2JwZl90cmFtcG9saW5lIG9yIHBsdFxcdTAwM2VcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNTY4LSAqXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Byb2Jlcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19LUFJPQkVTKVxcdFxcdCs9IGtwcm9iZXMubyBkZWNvZGUtaW5zbi5vIHNpbXVsYXRlLWluc24ub1xcbmFyY2gvY3NreS9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0tQUk9CRVMpXFx0XFx0Kz0ga3Byb2Jlc190cmFtcG9saW5lLm9cXG5hcmNoL2Nza3kva2VybmVsL3Byb2Jlcy9NYWtlZmlsZS00LW9iai0kKENPTkZJR19LUFJPQkVTX09OX0ZUUkFDRSlcXHQrPSBmdHJhY2Uub1xcbi0tXFxuYXJjaC9oZXhhZ29uL2tlcm5lbC9NYWtlZmlsZT03PW9iai15ICs9IHNldHVwLm8gaXJxX2NwdS5vIHRyYXBzLm8gc3lzY2FsbHRhYi5vIHNpZ25hbC5vIHRpbWUub1xcbmFyY2gvaGV4YWdvbi9rZXJuZWwvTWFrZWZpbGU6ODpvYmoteSArPSBwcm9jZXNzLm8gdHJhbXBvbGluZS5vIHJlc2V0Lm8gcHRyYWNlLm8gdmRzby5vXFxuYXJjaC9oZXhhZ29uL2tlcm5lbC9NYWtlZmlsZS05LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTI5PWlmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVJcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZS00MC0gIENGTEFHU19SRU1PVkVfcmV0aG9vay5vID0gJChDQ19GTEFHU19GVFJBQ0UpXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlOjQxOiAgQ0ZMQUdTX1JFTU9WRV9yZXRob29rX3RyYW1wb2xpbmUubyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZS00Mi1lbmRpZlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL01ha2VmaWxlPTc2PW9iai0kKENPTkZJR19LUFJPQkVTKVxcdFxcdCs9IGtwcm9iZXMub1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9NYWtlZmlsZTo3NzpvYmotJChDT05GSUdfUkVUSE9PSylcXHRcXHQrPSByZXRob29rLm8gcmV0aG9va190cmFtcG9saW5lLm9cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvTWFrZWZpbGUtNzgtb2JqLSQoQ09ORklHX1VQUk9CRVMpXFx0XFx0Kz0gdXByb2Jlcy5vXFxuLS1cXG5hcmNoL25pb3MyL2tlcm5lbC9zaWduYWwuYz0xODI9c3RhdGljIGludCBzZXR1cF9ydF9mcmFtZShzdHJ1Y3Qga3NpZ25hbCAqa3NpZywgc2lnc2V0X3QgKnNldCxcXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL3NpZ25hbC5jLTIwMy1cXHQvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlOyBqdW1wIHRvIGZpeGVkIGFkZHJlc3Mgc2lncmV0dXJuXFxuYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmM6MjA0OlxcdCAgIHRyYW1wb2xpbmUgb24ga3VzZXIgcGFnZS4gICovXFxuYXJjaC9uaW9zMi9rZXJuZWwvc2lnbmFsLmMtMjA1LVxcdHJlZ3MtXFx1MDAzZXJhID0gKHVuc2lnbmVkIGxvbmcpICgweDEwNDQpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYz01MzU9Ym9vbCBicGZfaml0X3N1cHBvcnRzX2ZzZXNzaW9uKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcC5jLTUzOC1cXHQgKiBUT0RPOiBSZW1vdmUgYWZ0ZXIgdmFsaWRhdGluZyBzdXBwb3J0XFxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXAuYzo1Mzk6XFx0ICogZm9yIGZzZXNzaW9uIGFuZCB0cmFtcG9saW5lIG9uIHBwYzMyLlxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wLmMtNTQwLVxcdCAqL1xcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX0tQUk9CRVMpXFx0XFx0Kz0ga3Byb2Jlcy5vIGRlY29kZS1pbnNuLm8gc2ltdWxhdGUtaW5zbi5vXFxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1JFVEhPT0spXFx0XFx0Kz0gcmV0aG9vay5vIHJldGhvb2tfdHJhbXBvbGluZS5vXFxuYXJjaC9yaXNjdi9rZXJuZWwvcHJvYmVzL01ha2VmaWxlLTQtb2JqLSQoQ09ORklHX1VQUk9CRVMpXFx0XFx0Kz0gdXByb2Jlcy5vIGRlY29kZS1pbnNuLm8gc2ltdWxhdGUtaW5zbi5vXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9wcm9iZXMvTWFrZWZpbGU9Nj1DRkxBR1NfUkVNT1ZFX3JldGhvb2subyA9ICQoQ0NfRkxBR1NfRlRSQUNFKVxcbmFyY2gvcmlzY3Yva2VybmVsL3Byb2Jlcy9NYWtlZmlsZTo3OkNGTEFHU19SRU1PVkVfcmV0aG9va190cmFtcG9saW5lLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSlcXG4tLVxcbmFyY2gvczM5MC9ib290L01ha2VmaWxlPTM1PW9iai15XFx0Kz0gdmVyc2lvbi5vIHBnbV9jaGVjay5vIGN0eXBlLm8gaXBsX2RhdGEubyByZWxvY3MubyBhbHRlcm5hdGl2ZS5vXFxuYXJjaC9zMzkwL2Jvb3QvTWFrZWZpbGU6MzY6b2JqLXlcXHQrPSB1di5vIHByaW50ay5vIHRyYW1wb2xpbmUub1xcbmFyY2gvczM5MC9ib290L01ha2VmaWxlLTM3LW9iai0kKENPTkZJR19SQU5ET01JWkVfQkFTRSlcXHQrPSBrYXNsci5vXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUylcXHQrPSBodl9zcGlubG9jay5vXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGUtMTQtIGlmZGVmIENPTkZJR19NU0hWX1JPT1RcXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGU6MTU6ICBDRkxBR1NfUkVNT1ZFX2h2X3RyYW1wb2xpbmUubyArPSAtcGdcXG5hcmNoL3g4Ni9oeXBlcnYvTWFrZWZpbGU6MTY6ICBDRkxBR1NfaHZfdHJhbXBvbGluZS5vICAgICAgICArPSAtZm5vLXN0YWNrLXByb3RlY3RvclxcbmFyY2gveDg2L2h5cGVydi9NYWtlZmlsZToxNzogIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKSAgICAgICs9IGh2X2NyYXNoLm8gaHZfdHJhbXBvbGluZS5vXFxuYXJjaC94ODYvaHlwZXJ2L01ha2VmaWxlLTE4LSBlbmRpZlxcbi0tXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jPTI4Mz1leHRlcm4gdm9pZCBmdHJhY2VfcmVnc19jYWxsZXJfam1wKHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jLTI5MC0gKiBUaGUgZnRyYWNlX29wcyBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGxiYWNrLiBTaW5jZSB0aGVcXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6MjkxOiAqIHRyYW1wb2xpbmUgb25seSBzZXJ2aWNlcyBhIHNpbmdsZSBmdHJhY2Vfb3BzLCB3ZSBjYW4gcGFzcyBpblxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy0yOTItICogdGhhdCBvcHMgZGlyZWN0bHkuXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9NDc3PXZvaWQgYXJjaF9mdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcylcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00ODUtXFx0aWYgKCFvcHMtXFx1MDAzZXRyYW1wb2xpbmUpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM6NDg2OlxcdFxcdG9wcy1cXHUwMDNldHJhbXBvbGluZSA9IGNyZWF0ZV90cmFtcG9saW5lKG9wcywgXFx1MDAyNnNpemUpO1xcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy00ODctXFx0XFx0aWYgKCFvcHMtXFx1MDAzZXRyYW1wb2xpbmUpXFxuLS1cXG5rZXJuZWwvYnBmL01ha2VmaWxlPTE2PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbmtlcm5lbC9icGYvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NTc9c3RhdGljIHZvaWQgdHJhbXBvbGluZV91bmxvY2soc3RydWN0IGJwZl90cmFtcG9saW5lICp0cilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTYxLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjYyOnN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTYzLVxcdGludCAoKnJlZ2lzdGVyX2ZlbnRyeSkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKmRhdGEpO1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9NzA9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MTpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyAqb3BzLCB2b2lkICpkYXRhKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo3MjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX29wcztcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy03My1cXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4PXN0YXRpYyBpbnQgYnBmX3RyYW1wX2Z0cmFjZV9vcHNfZnVuYyhzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTU3LVxcdFxcdFxcdHJldCA9IGJwZl90cmFtcG9saW5lX3VwZGF0ZSh0ciwgZmFsc2UgLyogbG9ja19kaXJlY3RfbXV0ZXggKi8sXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1OS1cXHRcXHRicmVhaztcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2NC1cXHRcXHRcXHRyZXQgPSBicGZfdHJhbXBvbGluZV91cGRhdGUodHIsIGZhbHNlIC8qIGxvY2tfZGlyZWN0X211dGV4ICovLFxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRyYW1wb2xpbmVfb3BzLCBOVUxMKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjYtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz00NzM9c3RhdGljIGludCByZWdpc3Rlcl9mZW50cnkoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy01MDAtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6NTAxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3RyYW1wb2xpbmVfb3BzIHRyYW1wb2xpbmVfb3BzID0ge1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTUwMi1cXHQucmVnaXN0ZXJfZmVudHJ5ICAgPSByZWdpc3Rlcl9mZW50cnksXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz02NzM9c3RhdGljIGludCBicGZfdHJhbXBvbGluZV91cGRhdGUoc3RydWN0IGJwZl90cmFtcG9saW5lICp0ciwgYm9vbCBsb2NrX2RpcmVjdF9tdXRleCxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzo2NzQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcywgdm9pZCAqZGF0YSlcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy02NzUte1xcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9OTA1PXN0YXRpYyBpbnQgX19icGZfdHJhbXBvbGluZV9saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTA3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTA4OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05MDktXFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk0Nj1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk1Mi1cXHR0cmFtcG9saW5lX2xvY2sodHIpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjk1MzpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhub2RlLCB0ciwgdGd0X3Byb2csIFxcdTAwMjZ0cmFtcG9saW5lX29wcywgTlVMTCk7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTU0LVxcdHRyYW1wb2xpbmVfdW5sb2NrKHRyKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk1OD1zdGF0aWMgaW50IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTYwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZyAqdGd0X3Byb2csXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTYxOlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBicGZfdHJhbXBvbGluZV9vcHMgKm9wcyxcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy05NjItXFx0XFx0XFx0XFx0XFx0dm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTk4Mz1pbnQgYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtOTg5LVxcdHRyYW1wb2xpbmVfbG9jayh0cik7XFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6OTkwOlxcdGVyciA9IF9fYnBmX3RyYW1wb2xpbmVfdW5saW5rX3Byb2cobm9kZSwgdHIsIHRndF9wcm9nLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTk5MS1cXHR0cmFtcG9saW5lX3VubG9jayh0cik7XFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xMDc2PWludCBicGZfdHJhbXBvbGluZV9saW5rX2Nncm91cF9zaGltKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMTgtXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTExOTpcXHRlcnIgPSBfX2JwZl90cmFtcG9saW5lX2xpbmtfcHJvZyhcXHUwMDI2c2hpbV9saW5rLVxcdTAwM2VsaW5rLm5vZGUsIHRyLCBOVUxMLCBcXHUwMDI2dHJhbXBvbGluZV9vcHMsIE5VTEwpO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTExMjAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE1NTg9c3RhdGljIGludCBtb2RpZnlfZmVudHJ5X211bHRpKHN0cnVjdCBicGZfdHJhbXBvbGluZSAqdHIsIHUzMiBvcmlnX2ZsYWdzLCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE1NzItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTU3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl90cmFtcG9saW5lX29wcyB0cmFtcG9saW5lX211bHRpX29wcyA9IHtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNTc0LVxcdC5yZWdpc3Rlcl9mZW50cnkgICA9IHJlZ2lzdGVyX2ZlbnRyeV9tdWx0aSxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTI2MzU9dm9pZCB1cHJvYmVfaGFuZGxlX3RyYW1wb2xpbmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy0yNjU1LVxcdFxcdCAqIG9yIE5VTEw7IHRoZSBsYXR0ZXIgY2FzZSBtZWFucyB0aGF0IG5vYm9keSBidXQgcmktXFx1MDAzZWZ1bmNcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzoyNjU2OlxcdFxcdCAqIGNvdWxkIGhpdCB0aGlzIHRyYW1wb2xpbmUgb24gcmV0dXJuLiBUT0RPOiBzaWdhbHRzdGFjaygpLlxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTI2NTctXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9MzMwPWludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jLTM2NC1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6MzY1OlxcdGZ0cmFjZV91cGRhdGVfdHJhbXBvbGluZShvcHMpO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy0zNjYtXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM9MzkzPXN0YXRpYyB2b2lkIGZ0cmFjZV91cGRhdGVfcGlkX2Z1bmModm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00MDQtXFx0XFx0XFx0XFx0ZnRyYWNlX3BpZF9mdW5jIDogb3AtXFx1MDAzZXNhdmVkX2Z1bmM7XFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jOjQwNTpcXHRcXHRcXHRmdHJhY2VfdXBkYXRlX3RyYW1wb2xpbmUob3ApO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy00MDYtXFx0XFx0fVxcbi0tXFxua2VybmVsL3RyYWNlL2Z0cmFjZS5jPTg0MTQ9c3RhdGljIHZvaWQgZnRyYWNlX3VwZGF0ZV90cmFtcG9saW5lKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpXFxuLS1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmMtODQxNy1cXG5rZXJuZWwvdHJhY2UvZnRyYWNlLmM6ODQxODpcXHRhcmNoX2Z0cmFjZV91cGRhdGVfdHJhbXBvbGluZShvcHMpO1xcbmtlcm5lbC90cmFjZS9mdHJhY2UuYy04NDE5LVxcdGlmIChvcHMtXFx1MDAzZXRyYW1wb2xpbmUgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2V0cmFtcG9saW5lICE9IHRyYW1wb2xpbmUgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbnRvb2xzL3BlcmYvdXRpbC9kc28uaD0yOD1lbnVtIGRzb19iaW5hcnlfdHlwZSB7XFxuLS1cXG50b29scy9wZXJmL3V0aWwvZHNvLmgtOTctXFx0RFNPX0JJTkFSWV9UWVBFX19CUEZfUFJPR19JTkZPLFxcbnRvb2xzL3BlcmYvdXRpbC9kc28uaDo5ODpcXHQvKiogQERTT19CSU5BUllfVFlQRV9fQlBGX0lNQUdFOiBqaXR0ZWQgQlBGIHRyYW1wb2xpbmUgb3IgZGlzcGF0Y2hlciBjb2RlLiAqL1xcbnRvb2xzL3BlcmYvdXRpbC9kc28uaC05OS1cXHREU09fQklOQVJZX1RZUEVfX0JQRl9JTUFHRSxcXG4tLVxcbnRvb2xzL3BlcmYvdXRpbC9tYXAuYz01Mjk9dTY0IG1hcF9fcmlwXzJvYmpkdW1wKGNvbnN0IHN0cnVjdCBtYXAgKm1hcCwgdTY0IHJpcClcXG4tLVxcbnRvb2xzL3BlcmYvdXRpbC9tYXAuYy01MzUtXFx0ICogdm1saW51eCBkb2VzIG5vdCBoYXZlIHByb2dyYW0gaGVhZGVycyBmb3IgUFRJIGVudHJ5IHRyYW1wb2xpbmVzIGFuZFxcbnRvb2xzL3BlcmYvdXRpbC9tYXAuYzo1MzY6XFx0ICoga2NvcmUgbWF5IG5vdCBlaXRoZXIuIEhvd2V2ZXIgdGhlIHRyYW1wb2xpbmUgb2JqZWN0IGNvZGUgaXMgb24gdGhlXFxudG9vbHMvcGVyZi91dGlsL21hcC5jLTUzNy1cXHQgKiBtYWluIGtlcm5lbCBtYXAsIHNvIGp1c3QgdXNlIHRoYXQgaW5zdGVhZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzM6MDEuMTg2NzI4NjA5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTIyNDc0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIEJQRiBKSVQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19CUEZfSklUYCBvcHRpb24gaXMgY2xlYXJseSB0aGUgbHluY2hwaW4gaGVyZSwgdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIG1ha2Ugc3VyZSBJJ20gZm9jdXNpbmcgb24gdGhlIHJpZ2h0IHN5bWJvbHMgZm9yIHRoaXMgZGVlcCBkaXZlLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YCBpcyBpbmRlZWQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJdCBzZWVtcyByaWdodCAtIGl0J3MgY2FsbGVkIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZm9yIGEgc3RydWN0X29wcywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiBob3cgQlBGIGludGVyYWN0cyB3aXRoIGtlcm5lbCBzdHJ1Y3R1cmVzLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiBpdC4gQW5kIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGAgaXMgcmVsZXZhbnQgYmVjYXVzZSBpdCdzIHdoZXJlIHRoZSBCUEYgcHJvZ3JhbSBhdHRhY2htZW50IGl0c2VsZiBpcyB2ZXJpZmllZCwgd2hpY2ggaXMgY2xlYXJseSBpbXBvcnRhbnQgdG8gdGhlIHByb2Nlc3MuIEJvdGggb2YgdGhvc2UgbG9vayBsaWtlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIHRoZSBhbmFseXNpcy5cblxuQWxyaWdodCwgbGV0IG1lIG5vdyB0YWtlIGEgbG9vayBhdCBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgLCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBjYW4gcHJvdmlkZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDE5OjMzOjA2LjgzODk3OTA3OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NDg5OTU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oPTE1OTI9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgtMTU5NS0vKiBGdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSB2ZXJpZmllci5jLCB1c2VkIGJ5IHRyYW1wb2xpbmUuYyAqL1xcbmluY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmg6MTU5NjppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxuaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaC0xNTk3LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKTtcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTE2MTE9aW50IGJwZl90cmFtcG9saW5lX211bHRpX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiAqaWRzLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTYyNC1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxNjI1OlxcdFxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKGJ0ZiwgcHJvZywgaWRzW2ldLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2MjYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MDM6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTQwNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTk6MzM6MDguNTgzODg2NTI1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0ODk2MTA4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgVHJhbXBvbGluZSBhbmQgTGFyZ2UgQXJndW1lbnQgRml4KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiB0cmFtcG9saW5lIGlzc3VlLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBsZXQncyB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvcmUgZml4LCB3aGljaCBzZWVtcyB0byByZXNpZGUgaW4gYF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhhdCdzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gSXQncyBzdGF0aWMsIGJ1dCB0aGF0J3MgZmluZTsgaXQgZG9lc24ndCBwcmV2ZW50IGluY2x1c2lvbi4gQWN0dWFsbHksIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYmVjYXVzZSBpdCBjYWxscyBgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGFuZCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgc28gSSBzaG91bGQgaW5jbHVkZSBpdCBmb3IgY29tcGxldGVuZXNzLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhYm91dCBjb3JyZWN0bHkgaGFuZGxpbmcgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIHRoYXQgYXJlIGxhcmdlciB0aGFuIDggYnl0ZXMsIGxpa2UgYF9faW50MTI4YC4gVGhlIGJ1ZyB3YXMgdGhhdCB0aGUgdHJhbXBvbGluZSB3YXNuJ3QgYWxsb2NhdGluZyBlbm91Z2ggcmVnaXN0ZXJzLiBUaGlzIHdhcyBjYXVzaW5nIGlzc3VlcyBhdHRhY2hpbmcgdG8gZnVuY3Rpb25zIHRoYXQgaGF2ZSByZXR1cm4gdmFsdWVzIFx1MDAzZSA4IGJ5dGVzLiBUaGUgZml4IGFkZHJlc3NlcyB0aGlzIHByb2JsZW0uXG5cbkkndmUgZ290IHRocmVlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGltcG9ydGFudCB0byBub3RlOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLlxuXG5Gcm9tIGEgZnVuY3Rpb25hbCBzdGFuZHBvaW50LCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgYXR0YWNobWVudC4gU28sIHRoaXMgaXMgYSByZWFsLXdvcmxkIGZpeCwgbm90IGp1c3QgYW4gYWNhZGVtaWMgb25lLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZTpcbiogICBgYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0YFxuKiAgIGBicGZfY2hlY2tfYXR0YWNoX3RhcmdldGBcbiogICBgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlgXG4qICAgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWBcblxuYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgc2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0IGJlY2F1c2UgaXQncyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSBCUEYgdHJhbXBvbGluZSBpcyBjcmVhdGVkLCBzbyBpdCdzIGEgZ29vZCBlbnRyeSBwb2ludCBmb3IgdGhlIGNoYW5nZXMuIGBicGZfc3RydWN0X29wc19kZXNjX2luaXRgIGlzIGFsc28gcmVsZXZhbnQgc2luY2UgaXQgaXMgY2FsbGVkIGZyb20gYGJ0Zl9hZGRfc3RydWN0X29wc2AsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIEJURiBpcyBsb2FkZWQuIEl0IGlzIGFsc28gYW4gaW1wb3J0YW50IHN5bWJvbC5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDY5LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxOTozMzoxNy4wNzM0OTk4MDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk4NjU1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFxcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlcyBmb3IgY2VydGFpbiBhdHRhY2ggdHlwZXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3N0cnVjdF9vcHNfZGVzY19pbml0XCIsXG4gICAgXCJicGZfY2hlY2tfYXR0YWNoX3RhcmdldFwiLFxuICAgIFwiYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGlcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiB0cmFtcG9saW5lIGFuZCBzdHJ1Y3Rfb3BzIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKGUuZy4sIF9faW50MTI4KS4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHRyYW1wb2xpbmUgZGlkIG5vdCBhbGxvY2F0ZSBlbm91Z2ggcmVnaXN0ZXJzIGZvciBsYXJnZSBhcmd1bWVudHMgYW5kIHJlamVjdHMgYXR0YWNoaW5nIHRvIGZ1bmN0aW9ucyB3aXRoIFxcdTAwM2U4IGJ5dGUgcmV0dXJuIHZhbHVlcyBmb3IgY2VydGFpbiBhdHRhY2ggdHlwZXMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGF0dGFjaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[1] Phase: Succeeded StartedAt: 2026-07-11 19:33:29 +0000 UTC FinishedAt: 2026-07-11 19:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 19:33:29 +0000 UTC FinishedAt: 2026-07-11 19:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2] Phase: Succeeded StartedAt: 2026-07-11 19:33:29 +0000 UTC FinishedAt: 2026-07-11 23:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 19:33:29 +0000 UTC FinishedAt: 2026-07-11 23:59:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 19:33:29 +0000 UTC FinishedAt: 2026-07-11 19:33:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 19:33:29 +0000 UTC FinishedAt: 2026-07-11 19:33:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow2ns7x/series-workflow2ns7x-convert-artifact-1656780528/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 19:33:39 +0000 UTC FinishedAt: 2026-07-11 20:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 19:33:39 +0000 UTC FinishedAt: 2026-07-11 20:10:37 +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:*b61fc495-4d80-4373-8b25-91a89f01b2e3,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-workflow2ns7x/series-workflow2ns7x-convert-artifact-1656780528/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": "10ed0449-f510-41c7-b756-356ec1fb842a", "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-workflow2ns7x/series-workflow2ns7x-build-action-4250501622/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 19:33:39 +0000 UTC FinishedAt: 2026-07-11 20:10:27 +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:*b61fc495-4d80-4373-8b25-91a89f01b2e3,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-workflow2ns7x/series-workflow2ns7x-convert-artifact-1656780528/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": "10ed0449-f510-41c7-b756-356ec1fb842a", "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-workflow2ns7x/series-workflow2ns7x-build-action-4250501622/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 20:10:37 +0000 UTC FinishedAt: 2026-07-11 20:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 20:10:37 +0000 UTC FinishedAt: 2026-07-11 20:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 20:10:37 +0000 UTC FinishedAt: 2026-07-11 20:10:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 20:10:37 +0000 UTC FinishedAt: 2026-07-11 20:10:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow2ns7x/series-workflow2ns7x-convert-artifact-2425735895/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 20:10:47 +0000 UTC FinishedAt: 2026-07-11 20:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 20:10:47 +0000 UTC FinishedAt: 2026-07-11 20:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10ed0449-f510-41c7-b756-356ec1fb842a,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-workflow2ns7x/series-workflow2ns7x-build-action-4250501622/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-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 20:12:48 +0000 UTC FinishedAt: 2026-07-11 20:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 20:12:48 +0000 UTC FinishedAt: 2026-07-11 20:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 20:12:48 +0000 UTC FinishedAt: 2026-07-11 20:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 20:12:48 +0000 UTC FinishedAt: 2026-07-11 20:54:03 +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:*b61fc495-4d80-4373-8b25-91a89f01b2e3,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-workflow2ns7x/series-workflow2ns7x-convert-artifact-2425735895/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": "fc421b59-5d26-48c6-8471-b5126994299f", "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-workflow2ns7x/series-workflow2ns7x-build-action-1366835739/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 20:12:48 +0000 UTC FinishedAt: 2026-07-11 20:53:52 +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:*b61fc495-4d80-4373-8b25-91a89f01b2e3,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-workflow2ns7x/series-workflow2ns7x-convert-artifact-2425735895/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": "fc421b59-5d26-48c6-8471-b5126994299f", "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-workflow2ns7x/series-workflow2ns7x-build-action-1366835739/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 20:54:04 +0000 UTC FinishedAt: 2026-07-11 20:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 20:54:04 +0000 UTC FinishedAt: 2026-07-11 20:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 20:54:04 +0000 UTC FinishedAt: 2026-07-11 20:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 20:54:04 +0000 UTC FinishedAt: 2026-07-11 20:56:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc421b59-5d26-48c6-8471-b5126994299f,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-workflow2ns7x/series-workflow2ns7x-build-action-1366835739/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-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 20:56:13 +0000 UTC FinishedAt: 2026-07-11 23:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 20:56:13 +0000 UTC FinishedAt: 2026-07-11 23:59:05 +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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"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:*10ed0449-f510-41c7-b756-356ec1fb842a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc421b59-5d26-48c6-8471-b5126994299f,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-workflow2ns7x/series-workflow2ns7x-build-action-4250501622/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-workflow2ns7x/series-workflow2ns7x-build-action-1366835739/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 20:56:13 +0000 UTC FinishedAt: 2026-07-11 20:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 20:56:13 +0000 UTC FinishedAt: 2026-07-11 20:56:18 +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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"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-workflow2ns7x/series-workflow2ns7x-convert-artifact-3748735120/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 20:56:13 +0000 UTC FinishedAt: 2026-07-11 20:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 20:56:13 +0000 UTC FinishedAt: 2026-07-11 20:56:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 20:56:14 +0000 UTC FinishedAt: 2026-07-11 20:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 20:56:25 +0000 UTC FinishedAt: 2026-07-11 23:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2ns7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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_struct_ops_desc_init","bpf_check_attach_target","bpf_check_attach_btf_id_multi","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","DEBUG_INFO_BTF"],"series_id":"db9a01c9-e278-40bd-9d68-db837f683d2b","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 20:56:25 +0000 UTC FinishedAt: 2026-07-11 23:58:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10ed0449-f510-41c7-b756-356ec1fb842a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc421b59-5d26-48c6-8471-b5126994299f,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-workflow2ns7x/series-workflow2ns7x-build-action-4250501622/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-workflow2ns7x/series-workflow2ns7x-build-action-1366835739/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-workflow2ns7x/series-workflow2ns7x-convert-artifact-3748735120/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,}