Name: series-workflowg5zz6 Phase: Succeeded StartedAt: 2026-07-29 13:58:18 +0000 UTC FinishedAt: 2026-07-29 18:23:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[0] Phase: Succeeded StartedAt: 2026-07-29 13:58:18 +0000 UTC FinishedAt: 2026-07-29 14:24:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 13:58:18 +0000 UTC FinishedAt: 2026-07-29 14:24:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "764e9c2e-c958-464d-bd2d-8e864e1bc0bd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_blind_constants", "bpf_jit_subprogs", "bpf_fixup_call_args", "bpf_clear_insn_aux_data" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2JsaW5kX2NvbnN0YW50cyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2JwZl9maXh1cF9jYWxsX2FyZ3MmIzM0OywKICAgICYjMzQ7YnBmX2NsZWFyX2luc25fYXV4X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyJiMzOTtzIGhhbmRsaW5nIG9mIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApIGR1cmluZyBjb25zdGFudCBibGluZGluZyBhbmQgc3VicHJvZ3JhbSBKSVRpbmcuIEl0IGNoYW5nZXMgaG93IHRoZSBwcm9ncmFtIGlzIGNsb25lZCBhbmQgaG93IGF1eGlsaWFyeSBkYXRhIGlzIHRyYWNrZWQgKGludHJvZHVjaW5nIGBpbnNuX2F1eF9kYXRhX2xlbmApLCB3aGljaCBhZmZlY3RzIGNvcmUgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjVkYzJjZjM5Y2VkMjE4NTNiODczMTQwNjgyZmI3YmZiODUwNTg3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE0OjIyOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA2ODJjMmNkM2I4NDQzLi5jZGQ1MDA0OWEwYzE0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTk0OCw2ICYjNDM7OTQ4LDcgQEAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYge1xuIFx0Ym9vbCBzZWVuX2RpcmVjdF93cml0ZTtcbiBcdGJvb2wgc2Vlbl9leGNlcHRpb247XG4gXHRib29sIHNpZ25hdHVyZTtcbiYjNDM7XHR1MzIgaW5zbl9hdXhfZGF0YV9sZW47XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4X2RhdGE7IC8qIGFycmF5IG9mIHBlci1pbnNuIHN0YXRlICovXG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqcHJldl9saW5mbztcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nIGxvZztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uMmQxYWEwNjI1NjZjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMjExLDI1ICYjNDM7MTIxMSwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcbiB7XG4gXHRyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApO1xuIH1cbi1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KVxuLXtcbi19XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIGludCBicGZfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGNudCk7XG5AQCAtMTM2OSw3ICYjNDM7MTM1Niw4IEBAIGludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFxuIGNvbnN0IGNoYXIgKmJwZl9qaXRfZ2V0X3Byb2dfbmFtZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIFxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiYjNDM7aW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuJiM0MztcdFx0XHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZCk7XG4gdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5AQCAtMTUyMSw5ICYjNDM7MTUwOSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmVcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7aW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuJiM0MztcdFx0XHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZClcbiB7XG4tXHRyZXR1cm4gcHJvZztcbiYjNDM7XHQqY2xvbmVkID0gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmFiNWRhM2ZmOTQxYWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTY0LDI3ICYjNDM7MTU2NCwzNCBAQCB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpXG4gICogTm93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIGJsaW5kIHRoZSBtYWluIHByb2cgYW5kIG11c3QgYmUgaW52b2tlZCBvbmx5IHdoZW5cbiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLlxuICAqL1xuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXG4mIzQzO1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZywgKnRtcDtcbiBcdGludCBpbnNuX2RlbHRhLCBpbnNuX2NudDtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcbiBcdGludCBpLCByZXdyaXR0ZW47XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gcHJvZykpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcdCpjbG9uZWQgPSBmYWxzZTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gKnBwcm9nKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Y2xvbmUgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUocHJvZywgR0ZQX1VTRVIpO1xuLVx0aWYgKCFjbG9uZSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZztcbiYjNDM7XHQvKiBvbmx5IGNsb25lIHRoZSBwcm9nIHdoZW4gd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgKi9cbiYjNDM7XHRpZiAoY2xvbmVfbmVlZGVkKSB7XG4mIzQzO1x0XHRwcm9nID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKG9yaWdfcHJvZywgR0ZQX1VTRVIpO1xuJiM0MztcdFx0aWYgKCFwcm9nKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXG4tXHRpZiAoZW52KVxuLVx0XHRlbnYtXHUwMDNlcHJvZyA9IGNsb25lO1xuJiM0MztcdFx0KmNsb25lZCA9IHRydWU7XG4mIzQzO1x0XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xuJiM0MztcdFx0aWYgKGVudilcbiYjNDM7XHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nO1xuJiM0MztcdH1cbiBcbi1cdGluc25fY250ID0gY2xvbmUtXHUwMDNlbGVuO1xuLVx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaTtcbiYjNDM7XHRpbnNuX2NudCA9IHByb2ctXHUwMDNlbGVuO1xuJiM0MztcdGluc24gPSBwcm9nLVx1MDAzZWluc25zaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkge1xuQEAgLTE2MDUsNDIgJiM0MzsxNjEyLDQ5IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXG4gXHRcdCAgICBpbnNuWzFdLmNvZGUgPT0gMClcbiBcdFx0XHRtZW1jcHkoYXV4LCBpbnNuLCBzaXplb2YoYXV4KSk7XG4gXG4tXHRcdHJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZixcbi1cdFx0XHRcdFx0XHRjbG9uZS1cdTAwM2VhdXgtXHUwMDNldmVyaWZpZXJfemV4dCk7XG4mIzQzO1x0XHRyZXdyaXR0ZW4gPSBicGZfaml0X2JsaW5kX2luc24oaW5zbiwgYXV4LCBpbnNuX2J1ZmYsIHByb2ctXHUwMDNlYXV4LVx1MDAzZXZlcmlmaWVyX3pleHQpO1xuIFx0XHRpZiAoIXJld3JpdHRlbilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGVudilcbiBcdFx0XHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFx0XHRlbHNlXG4tXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKGNsb25lLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4mIzQzO1x0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG4gXHRcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XG4tXHRcdFx0aWYgKGVudilcbi1cdFx0XHRcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cbi1cdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbi1cdFx0XHQvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LVx1MDAzZXByb2cgZHVyaW5nXG4tXHRcdFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cbi1cdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XG4tXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRcdFx0aWYgKCpjbG9uZWQpIHtcbiYjNDM7XHRcdFx0XHQvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi9cbiYjNDM7XHRcdFx0XHQqcHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHRcdFx0aWYgKGVudilcbiYjNDM7XHRcdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xuJiM0MztcdFx0XHRcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXHUwMDNlcHJvZyBkdXJpbmdcbiYjNDM7XHRcdFx0XHQgKiByZWFsbG9jIGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgc28gd2UgbmVlZCB0b1xuJiM0MztcdFx0XHRcdCAqIGZpeCBpdCB1cCBoZXJlIG9uIGVycm9yLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xuJiM0MztcdFx0XHRcdCpwcHJvZyA9IHByb2c7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcbiBcdFx0fVxuIFxuLVx0XHRjbG9uZSA9IHRtcDtcbiYjNDM7XHRcdHByb2cgPSB0bXA7XG4gXHRcdGluc25fZGVsdGEgPSByZXdyaXR0ZW4gLSAxO1xuIFxuIFx0XHRpZiAoZW52KVxuLVx0XHRcdGVudi1cdTAwM2Vwcm9nID0gY2xvbmU7XG4mIzQzO1x0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbiBcbiBcdFx0LyogV2FsayBuZXcgcHJvZ3JhbSBhbmQgc2tpcCBpbnNucyB3ZSBqdXN0IGluc2VydGVkLiAqL1xuLVx0XHRpbnNuID0gY2xvbmUtXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgaW5zbl9kZWx0YTtcbiYjNDM7XHRcdGluc24gPSBwcm9nLVx1MDAzZWluc25zaSAmIzQzOyBpICYjNDM7IGluc25fZGVsdGE7XG4gXHRcdGluc25fY250ICYjNDM7PSBpbnNuX2RlbHRhO1xuIFx0XHRpICAgICAgICAmIzQzOz0gaW5zbl9kZWx0YTtcbiBcdH1cbiBcbi1cdGNsb25lLVx1MDAzZWJsaW5kZWQgPSAxO1xuLVx0cmV0dXJuIGNsb25lO1xuJiM0MztcdHByb2ctXHUwMDNlYmxpbmRlZCA9IDE7XG4mIzQzO1x0KnBwcm9nID0gcHJvZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIGJvb2wgYnBmX2luc25faXNfaW5kaXJlY3RfdGFyZ2V0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbkBAIC0yNjMwLDQ5ICYjNDM7MjY0NCwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcbiBcdHJldHVybiBzZWxlY3RfaW50ZXJwcmV0ZXI7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIGppdF9uZWVkZWQpXG4ge1xuICNpZmRlZiBDT05GSUdfQlBGX0pJVFxuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuIFxuIFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxuIFx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuIFxuLVx0aWYgKGVudikge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXG4tXHRcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcbi1cdFx0ICogb24gZmFpbHVyZS5cbi1cdFx0ICovXG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KVxuLVx0XHRcdHJldHVybiBwcm9nO1xuLVx0fVxuLVxuIFx0b3JpZ19wcm9nID0gcHJvZztcbi1cdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0Lypcbi1cdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxuLVx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXG4tXHQgKi9cbi1cdGlmIChJU19FUlIocHJvZykpXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4mIzQzO1x0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhaml0X25lZWRlZCwgXHUwMDI2Y2xvbmVkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi1cdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbi1cdFx0aWYgKGVudilcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0cmV0dXJuIHByb2c7XG4mIzQzO1x0aWYgKGNsb25lZCkge1xuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbiYjNDM7XHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4mIzQzO1x0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuLVxuLW91dF9yZXN0b3JlOlxuLVx0cHJvZyA9IG9yaWdfcHJvZztcbi1cdGlmIChlbnYpXG4tXHRcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcbiYjNDM7b3V0OlxuICNlbmRpZlxuIFx0cmV0dXJuIHByb2c7XG4gfVxuQEAgLTI3MDIsNyAmIzQzOzI3MDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XG4gXHRcdGlmICgqZXJyKVxuIFx0XHRcdHJldHVybiBmcDtcbiBcbi1cdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcbiYjNDM7XHRcdGZwID0gYnBmX3Byb2dfaml0X2NvbXBpbGUoZW52LCBmcCwgaml0X25lZWRlZCk7XG4gXHRcdGJwZl9wcm9nX2ppdF9hdHRlbXB0X2RvbmUoZnApO1xuIFx0XHRpZiAoIWZwLVx1MDAzZWppdGVkIFx1MDAyNlx1MDAyNiBqaXRfbmVlZGVkKSB7XG4gXHRcdFx0KmVyciA9IC1FTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggYTBiZGRhZGE3OTY0ZS4uNmRhMGY4ZDBiNzYxYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC0xNzQsNiAmIzQzOzE3NCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoY250ID09IDEpXG4gXHRcdHJldHVybjtcbiBcdHByb2dfbGVuID0gbmV3X3Byb2ctXHUwMDNlbGVuO1xuJiM0MztcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IHByb2dfbGVuO1xuIFxuIFx0bWVtbW92ZShkYXRhICYjNDM7IG9mZiAmIzQzOyBjbnQgLSAxLCBkYXRhICYjNDM7IG9mZixcbiBcdFx0c2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSkgKiAocHJvZ19sZW4gLSBvZmYgLSBjbnQgJiM0MzsgMSkpO1xuQEAgLTQ0MCw3ICYjNDM7NDQxLDYgQEAgc3RhdGljIGludCBicGZfYWRqX2xpbmZvX2FmdGVyX3JlbW92ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4X2RhdGEgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YTtcbi1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRpbnQgZW5kID0gc3RhcnQgJiM0MzsgbGVuO1xuIFx0aW50IGk7XG4gXG5AQCAtNDQ5LDkgJiM0Mzs0NDksNiBAQCB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbilcbiBcdFx0XHRrdmZyZWUoYXV4X2RhdGFbaV0uanQpO1xuIFx0XHRcdGF1eF9kYXRhW2ldLmp0ID0gTlVMTDtcbiBcdFx0fVxuLVxuLVx0XHRpZiAoYnBmX2lzX2xkaW1tNjQoXHUwMDI2aW5zbnNbaV0pKVxuLVx0XHRcdGkmIzQzOyYjNDM7O1xuIFx0fVxuIH1cbiBcbkBAIC00NjQsNyAmIzQzOzQ2MSw2IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4gXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpXG4gXHRcdGJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpO1xuIFxuLVx0LyogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYnBmX3JlbW92ZV9pbnNucywgYXMgaXQgdXNlcyBwcm9nLVx1MDAzZWluc25zaSAqL1xuIFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCBvZmYsIGNudCk7XG4gXG4gXHRlcnIgPSBicGZfcmVtb3ZlX2luc25zKGVudi1cdTAwM2Vwcm9nLCBvZmYsIGNudCk7XG5AQCAtNDgzLDYgJiM0Mzs0NzksNyBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFxuIFx0bWVtbW92ZShhdXhfZGF0YSAmIzQzOyBvZmYsXHRhdXhfZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250LFxuIFx0XHRzaXplb2YoKmF1eF9kYXRhKSAqIChvcmlnX3Byb2dfbGVuIC0gb2ZmIC0gY250KSk7XG4mIzQzO1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuIC09IGNudDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05OTksMzIgJiM0Mzs5OTYsMTQgQEAgc3RhdGljIHUzMiAqYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIHN0YXRpYyB2b2lkIGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiAqb3JpZ19zdGFydHMpXG4ge1xuJiM0MztcdGlmICghb3JpZ19zdGFydHMpXG4mIzQzO1x0XHRyZXR1cm47XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpJiM0MzsmIzQzOylcbiBcdFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydCA9IG9yaWdfc3RhcnRzW2ldO1xuIFx0LyogcmVzdG9yZSB0aGUgc3RhcnQgb2YgZmFrZSAmIzM5O2V4aXQmIzM5OyBzdWJwcm9nIGFzIHdlbGwgKi9cbiBcdGVudi1cdTAwM2VzdWJwcm9nX2luZm9bZW52LVx1MDAzZXN1YnByb2dfY250XS5zdGFydCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiB9XG4gXG4tc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi17XG4tXHRzaXplX3Qgc2l6ZTtcbi1cdHZvaWQgKm5ld19hdXg7XG4tXG4tXHRzaXplID0gYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuKTtcbi1cdG5ld19hdXggPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi1cdGlmIChuZXdfYXV4KVxuLVx0XHRtZW1jcHkobmV3X2F1eCwgZW52LVx1MDAzZWluc25fYXV4X2RhdGEsIHNpemUpO1xuLVx0cmV0dXJuIG5ld19hdXg7XG4tfVxuLVxuLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpXG4te1xuLVx0LyogdGhlIGV4cGFuZGVkIGVsZW1lbnRzIGFyZSB6ZXJvLWZpbGxlZCwgc28gbm8gc3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZCAqL1xuLVx0dmZyZWUoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpO1xuLVx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGEgPSBvcmlnX2luc25fYXV4O1xuLX1cbi1cbiBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cdTAwM2Vwcm9nLCAqKmZ1bmMsICp0bXA7XG5AQCAtMTI5Niw1NyAmIzQzOzEyNzUsNDcgQEAgc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdGludCBlcnIsIGk7XG4tXHRib29sIGJsaW5kZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcbiBcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZztcbi1cdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eDtcbi1cdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cztcbiYjNDM7XHR1MzIgKm9yaWdfc3VicHJvZ19zdGFydHMgPSBOVUxMO1xuJiM0MztcdGJvb2wgY2xvbmVkID0gZmFsc2U7XG4gXG4gXHRpZiAoZW52LVx1MDAzZXN1YnByb2dfY250IFx1MDAzYz0gMSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRwcm9nID0gb3JpZ19wcm9nID0gZW52LVx1MDAzZXByb2c7XG4gXHRpZiAoYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSkge1xuLVx0XHRvcmlnX2luc25fYXV4ID0gYnBmX2R1cF9pbnNuX2F1eF9kYXRhKGVudik7XG4tXHRcdGlmICghb3JpZ19pbnNuX2F1eCkge1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdFx0Z290byBvdXRfY2xlYW51cDtcbi1cdFx0fVxuLVx0XHRvcmlnX3N1YnByb2dfc3RhcnRzID0gYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhlbnYpO1xuLVx0XHRpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHtcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRcdGdvdG8gb3V0X2NsZWFudXA7XG4mIzQzO1x0XHRpZiAoIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4mIzQzO1x0XHRcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XG4mIzQzO1x0XHRcdGlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfY2xlYW51cDtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4tXHRcdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0XHRpZiAoSVNfRVJSKHByb2cpKSB7XG4tXHRcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0XHRwcm9nID0gb3JpZ19wcm9nO1xuJiM0MztcdFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQsIFx1MDAyNmNsb25lZCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHRcdH1cbi1cdFx0YmxpbmRlZCA9IHRydWU7XG4gXHR9XG4gXG4gXHRlcnIgPSBqaXRfc3VicHJvZ3MoZW52KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2ppdF9lcnI7XG4gXG4tXHRpZiAoYmxpbmRlZCkge1xuJiM0MztcdGlmIChjbG9uZWQpIHtcbiBcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbiBcdFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xuLVx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuIFxuIG91dF9qaXRfZXJyOlxuLVx0aWYgKGJsaW5kZWQpIHtcbiYjNDM7XHRpZiAoY2xvbmVkKSB7XG4gXHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4gXHRcdC8qIHJvbGwgYmFjayB0byB0aGUgY2xlYW4gb3JpZ2luYWwgcHJvZyAqL1xuIFx0XHRwcm9nID0gZW52LVx1MDAzZXByb2cgPSBvcmlnX3Byb2c7XG4gXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoZXJyICE9IC1FRkFVTFQpIHtcbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXZSB3aWxsIGZhbGwgYmFjayB0byBpbnRlcnByZXRlciBtb2RlIHdoZW4gZXJyIGlzIG5vdCAtRUZBVUxULCBiZWZvcmVcbiBcdFx0XHQgKiB0aGF0LCBpbnNuLVx1MDAzZW9mZiBhbmQgaW5zbi1cdTAwM2VpbW0gc2hvdWxkIGJlIHJlc3RvcmVkIHRvIHRoZWlyIG9yaWdpbmFsXG5AQCAtMTM2NCw3ICYjNDM7MTMzMyw2IEBAIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gb3V0X3Jlc3RvcmU6XG4gXHRicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9yaWdfc3VicHJvZ19zdGFydHMpO1xuLVx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xuIFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xuIG91dF9jbGVhbnVwOlxuIFx0LyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi9cbkBAIC0xMzc2LDggJiM0MzsxMzQ0LDcgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiAjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxuLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2c7XG4tXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBwcm9nLVx1MDAzZWluc25zaTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2luc24gKmluc247XG4gXHRpbnQgZGVwdGg7XG4gI2VuZGlmXG4gXHRpbnQgaSwgZXJyID0gMDtcbkBAIC0xNDAzLDcgJiM0MzsxMzcwLDcgQEAgaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuICNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXG4tXHRpZiAocHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbiYjNDM7XHRpZiAoZW52LVx1MDAzZXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtwcm9ncmFtIHJlcXVpcmVzIEJQRiBKSVQgY29tcGlsZXIgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC0xNDIwLDcgJiM0MzsxMzg3LDcgQEAgaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RhaWxfY2FsbHMgYXJlIG5vdCBhbGxvd2VkIGluIG5vbi1KSVRlZCBwcm9ncmFtcyB3aXRoIGJwZi10by1icGYgY2FsbHNcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb2ctXHUwMDNlbGVuOyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwLCBpbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpOyBpIFx1MDAzYyBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7LCBpbnNuJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XG4gXHRcdFx0LyogV2hlbiBKSVQgZmFpbHMgdGhlIHByb2dzIHdpdGggY2FsbGJhY2sgY2FsbHNcbiBcdFx0XHQgKiBoYXZlIHRvIGJlIHJlamVjdGVkLCBzaW5jZSBpbnRlcnByZXRlciBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoZW0geWV0LlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTZmMzVmNGU3MTViNi4uZTMxYzQxMjAzYmRhZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjAxMjIsNyAmIzQzOzIwMTIyLDcgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRpZiAoIWlzX3ByaXYpXG4gXHRcdG11dGV4X2xvY2soXHUwMDI2YnBmX3ZlcmlmaWVyX2xvY2spO1xuIFxuLVx0bGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuJiM0MztcdGxlbiA9IGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiBcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhID1cbiBcdFx0X192bWFsbG9jKGFycmF5X3NpemUoc2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSksIGxlbiksXG4gXHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcbkBAIC0yMDM2OCw3ICYjNDM7MjAzNjgsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdHJlbGVhc2VfYnRmcyhlbnYpO1xuIGVycl9mcmVlX2VudjpcbiBcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSlcbi1cdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4pO1xuJiM0MztcdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4pO1xuIFx0dmZyZWUoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpO1xuIFx0a3ZmcmVlKGVudi1cdTAwM2VmZF9hcnJheSk7XG4gXHRicGZfc3RhY2tfbGl2ZW5lc3NfZnJlZShlbnYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ppdF9ibGluZF9jb25zdGFudHMmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdWJwcm9ncyYjMzQ7LAogICAgJiMzNDticGZfZml4dXBfY2FsbF9hcmdzJiMzNDssCiAgICAmIzM0O2JwZl9jbGVhcl9pbnNuX2F1eF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciYjMzk7cyBoYW5kbGluZyBvZiBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKSBkdXJpbmcgY29uc3RhbnQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nLiBJdCBjaGFuZ2VzIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQgYW5kIGhvdyBhdXhpbGlhcnkgZGF0YSBpcyB0cmFja2VkIChpbnRyb2R1Y2luZyBgaW5zbl9hdXhfZGF0YV9sZW5gKSwgd2hpY2ggYWZmZWN0cyBjb3JlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1ZGMyY2YzOWNlZDIxODUzYjg3MzE0MDY4MmZiN2JmYjg1MDU4NzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxNDoyMjo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IDY4MmMyY2QzYjg0NDMuLmNkZDUwMDQ5YTBjMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtOTQ4LDYgJiM0Mzs5NDgsNyBAQCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7CiAJYm9vbCBzZWVuX2RpcmVjdF93cml0ZTsKIAlib29sIHNlZW5fZXhjZXB0aW9uOwogCWJvb2wgc2lnbmF0dXJlOwomIzQzOwl1MzIgaW5zbl9hdXhfZGF0YV9sZW47CiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eF9kYXRhOyAvKiBhcnJheSBvZiBwZXItaW5zbiBzdGF0ZSAqLwogCWNvbnN0IHN0cnVjdCBicGZfbGluZV9pbmZvICpwcmV2X2xpbmZvOwogCXN0cnVjdCBicGZfdmVyaWZpZXJfbG9nIGxvZzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDMyZDUyOTdjNTU3ZTUuLjJkMWFhMDYyNTY2YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTIxMSwyNSAmIzQzOzEyMTEsMTIgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9zaW5nbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAogc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTsKLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwotdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAogCQkJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbikKIHsKIAlyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApOwogfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkJCSAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KQotewotfQogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiBpbnQgYnBmX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBjbnQpOwpAQCAtMTM2OSw3ICYjNDM7MTM1Niw4IEBAIGludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCiBjb25zdCBjaGFyICpicGZfaml0X2dldF9wcm9nX25hbWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKTsKIAotc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpOwomIzQzO2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZywKJiM0MzsJCQkgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZCk7CiB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCkBAIC0xNTIxLDkgJiM0MzsxNTA5LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19uZWVkX2JsaW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIH0KIAogc3RhdGljIGlubGluZQotc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7aW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLAomIzQzOwkJCSAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKQogewotCXJldHVybiBwcm9nOwomIzQzOwkqY2xvbmVkID0gZmFsc2U7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcikKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmMKaW5kZXggZTIwNzY2NjdiMjQ1MS4uYWI1ZGEzZmY5NDFhYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmMKQEAgLTE1NjQsMjcgJiM0MzsxNTY0LDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcikKICAqIE5vdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB0byBibGluZCB0aGUgbWFpbiBwcm9nIGFuZCBtdXN0IGJlIGludm9rZWQgb25seSB3aGVuCiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLgogICovCi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csCiYjNDM7CQkJICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpCiB7CiAJc3RydWN0IGJwZl9pbnNuIGluc25fYnVmZlsxNl0sIGF1eFsyXTsKLQlzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2cgKnByb2csICpvcmlnX3Byb2csICp0bXA7CiAJaW50IGluc25fZGVsdGEsIGluc25fY250OwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbjsKIAlpbnQgaSwgcmV3cml0dGVuOwogCi0JaWYgKFdBUk5fT05fT05DRShlbnYgJmFtcDsmYW1wOyBlbnYtJmd0O3Byb2cgIT0gcHJvZykpCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwkqY2xvbmVkID0gZmFsc2U7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoZW52ICZhbXA7JmFtcDsgZW52LSZndDtwcm9nICE9ICpwcHJvZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAotCWNsb25lID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKHByb2csIEdGUF9VU0VSKTsKLQlpZiAoIWNsb25lKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJcHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZzsKJiM0MzsJLyogb25seSBjbG9uZSB0aGUgcHJvZyB3aGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyICovCiYjNDM7CWlmIChjbG9uZV9uZWVkZWQpIHsKJiM0MzsJCXByb2cgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUob3JpZ19wcm9nLCBHRlBfVVNFUik7CiYjNDM7CQlpZiAoIXByb2cpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqLwotCWlmIChlbnYpCi0JCWVudi0mZ3Q7cHJvZyA9IGNsb25lOwomIzQzOwkJKmNsb25lZCA9IHRydWU7CiYjNDM7CQkvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqLwomIzQzOwkJaWYgKGVudikKJiM0MzsJCQllbnYtJmd0O3Byb2cgPSBwcm9nOwomIzQzOwl9CiAKLQlpbnNuX2NudCA9IGNsb25lLSZndDtsZW47Ci0JaW5zbiA9IGNsb25lLSZndDtpbnNuc2k7CiYjNDM7CWluc25fY250ID0gcHJvZy0mZ3Q7bGVuOwomIzQzOwlpbnNuID0gcHJvZy0mZ3Q7aW5zbnNpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKIAkJaWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkgewpAQCAtMTYwNSw0MiAmIzQzOzE2MTIsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnAKIAkJICAgIGluc25bMV0uY29kZSA9PSAwKQogCQkJbWVtY3B5KGF1eCwgaW5zbiwgc2l6ZW9mKGF1eCkpOwogCi0JCXJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZiwKLQkJCQkJCWNsb25lLSZndDthdXgtJmd0O3ZlcmlmaWVyX3pleHQpOwomIzQzOwkJcmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLCBwcm9nLSZndDthdXgtJmd0O3ZlcmlmaWVyX3pleHQpOwogCQlpZiAoIXJld3JpdHRlbikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChlbnYpCiAJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pOwogCQllbHNlCi0JCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTsKJiM0MzsJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUocHJvZywgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pOwogCiAJCWlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7Ci0JCQlpZiAoZW52KQotCQkJCS8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi8KLQkJCQllbnYtJmd0O3Byb2cgPSBwcm9nOwotCQkJLyogUGF0Y2hpbmcgbWF5IGhhdmUgcmVwb2ludGVkIGF1eC0mZ3Q7cHJvZyBkdXJpbmcKLQkJCSAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvCi0JCQkgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci4KLQkJCSAqLwotCQkJYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgY2xvbmUpOwotCQkJcmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJCQlpZiAoKmNsb25lZCkgewomIzQzOwkJCQkvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi8KJiM0MzsJCQkJKnBwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJCQlpZiAoZW52KQomIzQzOwkJCQkJZW52LSZndDtwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJCQkvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LSZndDtwcm9nIGR1cmluZwomIzQzOwkJCQkgKiByZWFsbG9jIGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgc28gd2UgbmVlZCB0bwomIzQzOwkJCQkgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJLyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqLwomIzQzOwkJCQkqcHByb2cgPSBwcm9nOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gSVNfRVJSKHRtcCkgPyBQVFJfRVJSKHRtcCkgOiAtRU5PTUVNOwogCQl9CiAKLQkJY2xvbmUgPSB0bXA7CiYjNDM7CQlwcm9nID0gdG1wOwogCQlpbnNuX2RlbHRhID0gcmV3cml0dGVuIC0gMTsKIAogCQlpZiAoZW52KQotCQkJZW52LSZndDtwcm9nID0gY2xvbmU7CiYjNDM7CQkJZW52LSZndDtwcm9nID0gcHJvZzsKIAogCQkvKiBXYWxrIG5ldyBwcm9ncmFtIGFuZCBza2lwIGluc25zIHdlIGp1c3QgaW5zZXJ0ZWQuICovCi0JCWluc24gPSBjbG9uZS0mZ3Q7aW5zbnNpICYjNDM7IGkgJiM0MzsgaW5zbl9kZWx0YTsKJiM0MzsJCWluc24gPSBwcm9nLSZndDtpbnNuc2kgJiM0MzsgaSAmIzQzOyBpbnNuX2RlbHRhOwogCQlpbnNuX2NudCAmIzQzOz0gaW5zbl9kZWx0YTsKIAkJaSAgICAgICAgJiM0Mzs9IGluc25fZGVsdGE7CiAJfQogCi0JY2xvbmUtJmd0O2JsaW5kZWQgPSAxOwotCXJldHVybiBjbG9uZTsKJiM0MzsJcHJvZy0mZ3Q7YmxpbmRlZCA9IDE7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBib29sIGJwZl9pbnNuX2lzX2luZGlyZWN0X3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCkBAIC0yNjMwLDQ5ICYjNDM7MjY0NCwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCkKIAlyZXR1cm4gc2VsZWN0X2ludGVycHJldGVyOwogfQogCi1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkJICAgICBib29sIGppdF9uZWVkZWQpCiB7CiAjaWZkZWYgQ09ORklHX0JQRl9KSVQKJiM0MzsJaW50IGVycjsKJiM0MzsJYm9vbCBjbG9uZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZzsKLQlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7CiAKIAlpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpCiAJCXJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7CiAKLQlpZiAoZW52KSB7Ci0JCS8qCi0JCSAqIElmIGVudiBpcyBub3QgTlVMTCwgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBlbmQgb2YgYnBmX2NoZWNrKCksIGF0IHRoaXMKLQkJICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZAotCQkgKiBvbiBmYWlsdXJlLgotCQkgKi8KLQkJb3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpOwotCQlpZiAoIW9yaWdfaW5zbl9hdXgpCi0JCQlyZXR1cm4gcHJvZzsKLQl9Ci0KIAlvcmlnX3Byb2cgPSBwcm9nOwotCXByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpOwotCS8qCi0JICogSWYgYmxpbmRpbmcgd2FzIHJlcXVlc3RlZCBhbmQgd2UgZmFpbGVkIGR1cmluZyBibGluZGluZywgd2UgbXVzdCBmYWxsCi0JICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuCi0JICovCi0JaWYgKElTX0VSUihwcm9nKSkKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCAmYW1wO3Byb2csICFqaXRfbmVlZGVkLCAmYW1wO2Nsb25lZCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAogCXByb2cgPSBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7Ci0JaWYgKHByb2ctJmd0O2ppdGVkKSB7Ci0JCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7Ci0JCWlmIChlbnYpCi0JCQl2ZnJlZShvcmlnX2luc25fYXV4KTsKLQkJcmV0dXJuIHByb2c7CiYjNDM7CWlmIChjbG9uZWQpIHsKJiM0MzsJCWlmIChwcm9nLSZndDtqaXRlZCkgewomIzQzOwkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiYjNDM7CQkJcHJvZyA9IG9yaWdfcHJvZzsKJiM0MzsJCX0KIAl9CiAKLQlicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpOwotCi1vdXRfcmVzdG9yZToKLQlwcm9nID0gb3JpZ19wcm9nOwotCWlmIChlbnYpCi0JCWJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTsKJiM0MztvdXQ6CiAjZW5kaWYKIAlyZXR1cm4gcHJvZzsKIH0KQEAgLTI3MDIsNyAmIzQzOzI3MDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0CiAJCWlmICgqZXJyKQogCQkJcmV0dXJuIGZwOwogCi0JCWZwID0gYnBmX3Byb2dfaml0X2NvbXBpbGUoZW52LCBmcCk7CiYjNDM7CQlmcCA9IGJwZl9wcm9nX2ppdF9jb21waWxlKGVudiwgZnAsIGppdF9uZWVkZWQpOwogCQlicGZfcHJvZ19qaXRfYXR0ZW1wdF9kb25lKGZwKTsKIAkJaWYgKCFmcC0mZ3Q7aml0ZWQgJmFtcDsmYW1wOyBqaXRfbmVlZGVkKSB7CiAJCQkqZXJyID0gLUVOT1RTVVBQOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmMKaW5kZXggYTBiZGRhZGE3OTY0ZS4uNmRhMGY4ZDBiNzYxYiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9maXh1cHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCkBAIC0xNzQsNiAmIzQzOzE3NCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKGNudCA9PSAxKQogCQlyZXR1cm47CiAJcHJvZ19sZW4gPSBuZXdfcHJvZy0mZ3Q7bGVuOwomIzQzOwllbnYtJmd0O2luc25fYXV4X2RhdGFfbGVuID0gcHJvZ19sZW47CiAKIAltZW1tb3ZlKGRhdGEgJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEsIGRhdGEgJiM0Mzsgb2ZmLAogCQlzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSAqIChwcm9nX2xlbiAtIG9mZiAtIGNudCAmIzQzOyAxKSk7CkBAIC00NDAsNyAmIzQzOzQ0MSw2IEBAIHN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKQogewogCXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4X2RhdGEgPSBlbnYtJmd0O2luc25fYXV4X2RhdGE7Ci0Jc3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbnNpOwogCWludCBlbmQgPSBzdGFydCAmIzQzOyBsZW47CiAJaW50IGk7CiAKQEAgLTQ0OSw5ICYjNDM7NDQ5LDYgQEAgdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pCiAJCQlrdmZyZWUoYXV4X2RhdGFbaV0uanQpOwogCQkJYXV4X2RhdGFbaV0uanQgPSBOVUxMOwogCQl9Ci0KLQkJaWYgKGJwZl9pc19sZGltbTY0KCZhbXA7aW5zbnNbaV0pKQotCQkJaSYjNDM7JiM0Mzs7CiAJfQogfQogCkBAIC00NjQsNyAmIzQzOzQ2MSw2IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpCiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCi0JLyogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYnBmX3JlbW92ZV9pbnNucywgYXMgaXQgdXNlcyBwcm9nLSZndDtpbnNuc2kgKi8KIAlicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTsKIAogCWVyciA9IGJwZl9yZW1vdmVfaW5zbnMoZW52LSZndDtwcm9nLCBvZmYsIGNudCk7CkBAIC00ODMsNiAmIzQzOzQ3OSw3IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpCiAKIAltZW1tb3ZlKGF1eF9kYXRhICYjNDM7IG9mZiwJYXV4X2RhdGEgJiM0Mzsgb2ZmICYjNDM7IGNudCwKIAkJc2l6ZW9mKCphdXhfZGF0YSkgKiAob3JpZ19wcm9nX2xlbiAtIG9mZiAtIGNudCkpOwomIzQzOwllbnYtJmd0O2luc25fYXV4X2RhdGFfbGVuIC09IGNudDsKIAogCXJldHVybiAwOwogfQpAQCAtOTk5LDMyICYjNDM7OTk2LDE0IEBAIHN0YXRpYyB1MzIgKmJwZl9kdXBfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAogc3RhdGljIHZvaWQgYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyICpvcmlnX3N0YXJ0cykKIHsKJiM0MzsJaWYgKCFvcmlnX3N0YXJ0cykKJiM0MzsJCXJldHVybjsKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGVudi0mZ3Q7c3VicHJvZ19jbnQ7IGkmIzQzOyYjNDM7KQogCQllbnYtJmd0O3N1YnByb2dfaW5mb1tpXS5zdGFydCA9IG9yaWdfc3RhcnRzW2ldOwogCS8qIHJlc3RvcmUgdGhlIHN0YXJ0IG9mIGZha2UgJiMzOTtleGl0JiMzOTsgc3VicHJvZyBhcyB3ZWxsICovCiAJZW52LSZndDtzdWJwcm9nX2luZm9bZW52LSZndDtzdWJwcm9nX2NudF0uc3RhcnQgPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKIH0KIAotc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKLXsKLQlzaXplX3Qgc2l6ZTsKLQl2b2lkICpuZXdfYXV4OwotCi0Jc2l6ZSA9IGFycmF5X3NpemUoc2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSksIGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuKTsKLQluZXdfYXV4ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7Ci0JaWYgKG5ld19hdXgpCi0JCW1lbWNweShuZXdfYXV4LCBlbnYtJmd0O2luc25fYXV4X2RhdGEsIHNpemUpOwotCXJldHVybiBuZXdfYXV4OwotfQotCi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCSAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpCi17Ci0JLyogdGhlIGV4cGFuZGVkIGVsZW1lbnRzIGFyZSB6ZXJvLWZpbGxlZCwgc28gbm8gc3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZCAqLwotCXZmcmVlKGVudi0mZ3Q7aW5zbl9hdXhfZGF0YSk7Ci0JZW52LSZndDtpbnNuX2F1eF9kYXRhID0gb3JpZ19pbnNuX2F1eDsKLX0KLQogc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtJmd0O3Byb2csICoqZnVuYywgKnRtcDsKQEAgLTEyOTYsNTcgJiM0MzsxMjc1LDQ3IEBAIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCWludCBlcnIsIGk7Ci0JYm9vbCBibGluZGVkID0gZmFsc2U7CiAJc3RydWN0IGJwZl9pbnNuICppbnNuOwogCXN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZzsKLQlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7Ci0JdTMyICpvcmlnX3N1YnByb2dfc3RhcnRzOwomIzQzOwl1MzIgKm9yaWdfc3VicHJvZ19zdGFydHMgPSBOVUxMOwomIzQzOwlib29sIGNsb25lZCA9IGZhbHNlOwogCiAJaWYgKGVudi0mZ3Q7c3VicHJvZ19jbnQgJmx0Oz0gMSkKIAkJcmV0dXJuIDA7CiAKIAlwcm9nID0gb3JpZ19wcm9nID0gZW52LSZndDtwcm9nOwogCWlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7Ci0JCW9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTsKLQkJaWYgKCFvcmlnX2luc25fYXV4KSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfY2xlYW51cDsKLQkJfQotCQlvcmlnX3N1YnByb2dfc3RhcnRzID0gYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhlbnYpOwotCQlpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHsKLQkJCXZmcmVlKG9yaWdfaW5zbl9hdXgpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0X2NsZWFudXA7CiYjNDM7CQlpZiAoIXByb2ctJmd0O2ppdF9yZXF1aXJlZCkgewomIzQzOwkJCW9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7CiYjNDM7CQkJaWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7CiYjNDM7CQkJCWVyciA9IC1FTk9NRU07CiYjNDM7CQkJCWdvdG8gb3V0X2NsZWFudXA7CiYjNDM7CQkJfQogCQl9Ci0JCXByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpOwotCQlpZiAoSVNfRVJSKHByb2cpKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJcHJvZyA9IG9yaWdfcHJvZzsKJiM0MzsJCWVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgJmFtcDtwcm9nLCAhcHJvZy0mZ3Q7aml0X3JlcXVpcmVkLCAmYW1wO2Nsb25lZCk7CiYjNDM7CQlpZiAoZXJyKQogCQkJZ290byBvdXRfcmVzdG9yZTsKLQkJfQotCQlibGluZGVkID0gdHJ1ZTsKIAl9CiAKIAllcnIgPSBqaXRfc3VicHJvZ3MoZW52KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9qaXRfZXJyOwogCi0JaWYgKGJsaW5kZWQpIHsKJiM0MzsJaWYgKGNsb25lZCkgewogCQlicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpOwogCQlrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7Ci0JCXZmcmVlKG9yaWdfaW5zbl9hdXgpOwogCX0KIAogCXJldHVybiAwOwogCiBvdXRfaml0X2VycjoKLQlpZiAoYmxpbmRlZCkgewomIzQzOwlpZiAoY2xvbmVkKSB7CiAJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiAJCS8qIHJvbGwgYmFjayB0byB0aGUgY2xlYW4gb3JpZ2luYWwgcHJvZyAqLwogCQlwcm9nID0gZW52LSZndDtwcm9nID0gb3JpZ19wcm9nOwogCQlnb3RvIG91dF9yZXN0b3JlOwogCX0gZWxzZSB7Ci0JCWlmIChlcnIgIT0gLUVGQVVMVCkgewomIzQzOwkJaWYgKGVyciAhPSAtRUZBVUxUICZhbXA7JmFtcDsgIXByb2ctJmd0O2ppdF9yZXF1aXJlZCkgewogCQkJLyoKIAkJCSAqIFdlIHdpbGwgZmFsbCBiYWNrIHRvIGludGVycHJldGVyIG1vZGUgd2hlbiBlcnIgaXMgbm90IC1FRkFVTFQsIGJlZm9yZQogCQkJICogdGhhdCwgaW5zbi0mZ3Q7b2ZmIGFuZCBpbnNuLSZndDtpbW0gc2hvdWxkIGJlIHJlc3RvcmVkIHRvIHRoZWlyIG9yaWdpbmFsCkBAIC0xMzY0LDcgJiM0MzsxMzMzLDYgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAogb3V0X3Jlc3RvcmU6CiAJYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoZW52LCBvcmlnX3N1YnByb2dfc3RhcnRzKTsKLQlicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKGVudiwgb3JpZ19pbnNuX2F1eCk7CiAJa3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpOwogb3V0X2NsZWFudXA6CiAJLyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi8KQEAgLTEzNzYsOCAmIzQzOzEzNDQsNyBAQCBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKICNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OCi0Jc3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LSZndDtwcm9nOwotCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IHByb2ctJmd0O2luc25zaTsKJiM0MzsJc3RydWN0IGJwZl9pbnNuICppbnNuOwogCWludCBkZXB0aDsKICNlbmRpZgogCWludCBpLCBlcnIgPSAwOwpAQCAtMTQwMyw3ICYjNDM7MTM3MCw3IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlyZXR1cm4gZXJyOwogCX0KICNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OCi0JaWYgKHByb2ctJmd0O2ppdF9yZXF1aXJlZCkgewomIzQzOwlpZiAoZW52LSZndDtwcm9nLSZndDtqaXRfcmVxdWlyZWQpIHsKIAkJdmVyYm9zZShlbnYsICYjMzQ7cHJvZ3JhbSByZXF1aXJlcyBCUEYgSklUIGNvbXBpbGVyIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE0MjAsNyAmIzQzOzEzODcsNyBAQCBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQl2ZXJib3NlKGVudiwgJiMzNDt0YWlsX2NhbGxzIGFyZSBub3QgYWxsb3dlZCBpbiBub24tSklUZWQgcHJvZ3JhbXMgd2l0aCBicGYtdG8tYnBmIGNhbGxzXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlmb3IgKGkgPSAwOyBpICZsdDsgcHJvZy0mZ3Q7bGVuOyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMCwgaW5zbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbnNpOyBpICZsdDsgZW52LSZndDtwcm9nLSZndDtsZW47IGkmIzQzOyYjNDM7LCBpbnNuJiM0MzsmIzQzOykgewogCQlpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7CiAJCQkvKiBXaGVuIEpJVCBmYWlscyB0aGUgcHJvZ3Mgd2l0aCBjYWxsYmFjayBjYWxscwogCQkJICogaGF2ZSB0byBiZSByZWplY3RlZCwgc2luY2UgaW50ZXJwcmV0ZXIgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGVtIHlldC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNmYzNWY0ZTcxNWI2Li5lMzFjNDEyMDNiZGFlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0yMDEyMiw3ICYjNDM7MjAxMjIsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwKIAlpZiAoIWlzX3ByaXYpCiAJCW11dGV4X2xvY2soJmFtcDticGZfdmVyaWZpZXJfbG9jayk7CiAKLQlsZW4gPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKJiM0MzsJbGVuID0gZW52LSZndDtpbnNuX2F1eF9kYXRhX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWVudi0mZ3Q7aW5zbl9hdXhfZGF0YSA9CiAJCV9fdm1hbGxvYyhhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBsZW4pLAogCQkJICBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTsKQEAgLTIwMzY4LDcgJiM0MzsyMDM2OCw3IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCXJlbGVhc2VfYnRmcyhlbnYpOwogZXJyX2ZyZWVfZW52OgogCWlmIChlbnYtJmd0O2luc25fYXV4X2RhdGEpCi0JCWJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgMCwgZW52LSZndDtwcm9nLSZndDtsZW4pOwomIzQzOwkJYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtJmd0O2luc25fYXV4X2RhdGFfbGVuKTsKIAl2ZnJlZShlbnYtJmd0O2luc25fYXV4X2RhdGEpOwogCWt2ZnJlZShlbnYtJmd0O2ZkX2FycmF5KTsKIAlicGZfc3RhY2tfbGl2ZW5lc3NfZnJlZShlbnYpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBhbmQgSklUIEJsaW5kaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGJsaW5kaW5nIGxvZ2ljLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCwgd2hpY2ggbm93IHJldHVybnMgYW4gYGludGAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgYnBmX3Byb2cgKmAuICBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCDigJMgdGhpcyBzdWdnZXN0cyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBibGluZGluZyBpcyBoYW5kbGVkLiBXZSYjMzk7cmUgYWxzbyBzZWVpbmcgbW9kaWZpY2F0aW9ucyBpbiBob3cgYGluc25fYXV4X2RhdGFgIGlzIG1hbmFnZWQgZHVyaW5nIGJsaW5kaW5nIGFuZCBKSVRpbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW5gIHRvIHRyYWNrIHRoZSBsZW5ndGggYW5kIHRoZSByZW1vdmFsIG9mIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbnMgKGBicGZfZHVwX2luc25fYXV4X2RhdGFgLCBgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YWApIHN0cm9uZ2x5IGltcGx5IGEgZm9jdXMgb24gZWZmaWNpZW5jeSBhbmQgcG90ZW50aWFsbHksIGFkZHJlc3NpbmcgYSBzdWJ0bGUgYnVnIG9yIHJhY2UgY29uZGl0aW9uLiBUaGUgY2hhbmdlIGluIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiBza2lwcGluZyBgbGRpbW02NGAgaW5zdHJ1Y3Rpb25zLCBhbHNvIHdhcnJhbnRzIGNsb3NlciBzY3J1dGlueS4KCk15IGZpcnN0IHRob3VnaHQgaXMsIHRoaXMgaXMga2VybmVsIGNvcmUsIGFuZCB0aGlzIGlzIHRvdWNoeS4gU3BlY2lmaWNhbGx5LCB0aGUgYXJlYXMgaXQmIzM5O3MgdG91Y2hpbmcsIGtlcm5lbC9icGYvZml4dXBzLmMgYW5kIGtlcm5lbC9icGYvY29yZS5jLiBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlLCBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoZSBwYXRjaCB0b3VjaGVzLiBJIHNlZSBpdCBtb2RpZmllcyBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgLCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfZml4dXBfY2FsbF9hcmdzYCwgYW5kIGBicGZfY2hlY2tgLiAgQWxyaWdodCwgYSBuaWNlLCBmb2N1c2VkIGxpc3QuCgpOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4gIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgaXMgbm90IHN0YXRpYywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIG1vcmUgd2lkZWx5IGFjY2Vzc2libGUuIE9uIHRoZSBvdGhlciBoYW5kLCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgICppcyogc3RhdGljIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IGludGVyYWN0aW9uIHRvIG90aGVyIHBhcnRzIG9mIGNvcmUuICBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLCBgYnBmX2ppdF9zdWJwcm9nc2AgYW5kIGBicGZfZml4dXBfY2FsbF9hcmdzYCBhcmUgYWxzbyBub3Qgc3RhdGljLiBGaW5hbGx5LCBgYnBmX2NoZWNrYCBpcyB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnQsIHNvIHRoYXQmIzM5O3MgYSBrZXkgdGFyZ2V0LgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiAgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24uIEFuZCwgbmF0dXJhbGx5LCBgQ09ORklHX0JQRl9KSVRgIGlzIGdvaW5nIHRvIGJlIHZpdGFsIGJlY2F1c2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgSklUIGJsaW5kaW5nIGhlcmUuCgpUbyB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZywgSSB0aGluayBJJiMzOTtsbCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGZ1bmN0aW9uIHZpc2liaWxpdHkgYW5kIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBoZWxwIG1lIGdlbmVyYXRlIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9ibGluZF9jb25zdGFudHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0xNTUyPXZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTY2LSAqL1xua2VybmVsL2JwZi9jb3JlLmM6MTU2NzppbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTY4LVx0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2NDc9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2NTgtXHRvcmlnX3Byb2cgPSBwcm9nO1xua2VybmVsL2JwZi9jb3JlLmM6MjY1OTpcdGVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgXHUwMDI2cHJvZywgIWppdF9uZWVkZWQsIFx1MDAyNmNsb25lZCk7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNjYwLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEyNzU9aW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyOTQtXHRcdH1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTI5NTpcdFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQsIFx1MDAyNmNsb25lZCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyOTYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbiBUYXJnZXRzIGluIHRoZSBCUEYgVmVyaWZpZXIvSklUKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gb3B0aW1pemluZyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGlzIHBhdGNoIGFyZSBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfZml4dXBfY2FsbF9hcmdzYCwgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCwgYW5kIGBicGZfY2hlY2tgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4KCkZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgaWYgYGJwZl9jaGVja2AgaXMgdG9vIGJyb2FkIHRvIGJlIGEgd29ydGh3aGlsZSB0YXJnZXQuIEl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBzbyBpdCBtaWdodCBiZSBoZWF2aWx5IHVzZWQsIG1ha2luZyBnYWlucyB0aGVyZSBkaWZmaWN1bHQuIEluc3RlYWQsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIG90aGVycy4KClRoZSBtb3JlIHByb21pc2luZyBmdW5jdGlvbnMgYXJlIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgLCBhbmQgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBpZGVhbCBjYW5kaWRhdGVzIGZvciB0aGlzLgoKRmluYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgdG8gbWFrZSBzdXJlIGBCUEZfSklUYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBhIHByaW9yaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNTktXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBCUEYgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGNoZWNraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgdGhlIHByaW1hcnkgZmxhZ3MgbWVudGlvbmVkLCB3aXRoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRob3NlIGNvbmZpZ3MgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIGFuZCBga2VybmVsL2JwZi9jb3JlLmNgIHJlc3BlY3RpdmVseS4gSSBhbHNvIG5vdGUgdGhhdCBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBpcyB1c2VkIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgLCBhbmQgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYC4gYGJwZl9jaGVja2AsIHRoZSB2ZXJpZmllciBlbnRyeSBwb2ludCwgaXMgYWxzbyB0b3VjaGVkLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgdG9vIGdlbmVyYWwgc2luY2UgaXQmIzM5O3Mgb25seSBtb2RpZmllZCBmb3IgYGVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW5gLiBJIHRoaW5rIEkmIzM5O2xsIGZvY3VzIG9uIHRob3NlIGZpeHVwIGFuZCBKSVQgZnVuY3Rpb25zIGZvciBub3cuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAgaXMgZXhwb3J0ZWQgb3IganVzdCBhIGdsb2JhbC4gVGhhdCYjMzk7bGwgaW5mb3JtIGhvdyBkaXJlY3RseSBpdCYjMzk7cyBiZWluZyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeW1ib2wgdmlzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2xlYXJfaW5zbl9hdXhfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9Mzc0PXN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQ0MC0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6NDQxOnZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxua2VybmVsL2JwZi9maXh1cHMuYy00NDIte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NDU1PXN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy00NjMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ2NDpcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgb2ZmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy00NjUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDYwPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM3MC1cdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM3MTpcdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzcyLVx0dmZyZWUoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjYzCgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgRml4ZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGdsb2JhbCBjaGFuZ2UsIGltcGFjdGluZyBib3RoIGBmaXh1cHMuY2AgYW5kIGB2ZXJpZmllci5jYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgaXQgdG91Y2hlcyBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5LCBzbyBpdCBuZWVkcyBjYXJlZnVsIHJldmlldy4gSSYjMzk7bSBub3RpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpdCYjMzk7cyBtb2RpZnlpbmc6IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgLCBhbmQgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBhcnRzIG9mIGhvdyB3ZSBoYW5kbGUgY29uc3RhbnQgYmxpbmRpbmcsIHN1YnByb2dyYW0gSklUdGluZywgYW5kIG92ZXJhbGwgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIHBhdGNoIGxvb2tzIGZ1bmN0aW9uYWwuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBpbnNuX2F1eF9kYXRhYCBoYW5kbGluZywgcGFydGljdWxhcmx5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGluc25fYXV4X2RhdGFfbGVuYCBhbmQgaG93IHRoZSBwcm9ncmFtIGlzIGNsb25lZCwgc2VlbSB0byBiZSBjb3JyZWN0bHkgYWRkcmVzc2luZyB0aGUgaXNzdWVzLiBUaGlzIG1lYW5zIGl0ICpkZWZpbml0ZWx5KiBuZWVkcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gdG8gdmFsaWRhdGUgaXRzIHN0YWJpbGl0eS4gVGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBmdW5kYW1lbnRhbCBsb2FkaW5nIGFuZCB2ZXJpZmljYXRpb24gbG9naWMgb2YgQlBGIHByb2dyYW1zLCB3aGljaCBpcyB3aHkgSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyBmb3IgdGhpcy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIEkgYnJpZWZseSBjb25zaWRlcmVkIHdoZXRoZXIgYEJQRl9KSVRfQUxXQVlTX09OYCBuZWVkZWQgc3BlY2lhbCBjb25zaWRlcmF0aW9uLCBidXQgc2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgYm90aCB3aXRoaW4gYW5kIG91dHNpZGUgdGhlIGAjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgYmxvY2ssIGl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGVzdGluZy4gSSYjMzk7bSBub3cgY2VydGFpbiB0aGF0IHNldHRpbmcgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGlzIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcuCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGlzLCBzbyBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2JsaW5kX2NvbnN0YW50cyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2JwZl9maXh1cF9jYWxsX2FyZ3MmIzM0OywKICAgICYjMzQ7YnBmX2NsZWFyX2luc25fYXV4X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyJiMzOTtzIGhhbmRsaW5nIG9mIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApIGR1cmluZyBjb25zdGFudCBibGluZGluZyBhbmQgc3VicHJvZ3JhbSBKSVRpbmcuIEl0IGNoYW5nZXMgaG93IHRoZSBwcm9ncmFtIGlzIGNsb25lZCBhbmQgaG93IGF1eGlsaWFyeSBkYXRhIGlzIHRyYWNrZWQgKGludHJvZHVjaW5nIGBpbnNuX2F1eF9kYXRhX2xlbmApLCB3aGljaCBhZmZlY3RzIGNvcmUgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ppdF9ibGluZF9jb25zdGFudHMmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdWJwcm9ncyYjMzQ7LAogICAgJiMzNDticGZfZml4dXBfY2FsbF9hcmdzJiMzNDssCiAgICAmIzM0O2JwZl9jbGVhcl9pbnNuX2F1eF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciYjMzk7cyBoYW5kbGluZyBvZiBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKSBkdXJpbmcgY29uc3RhbnQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nLiBJdCBjaGFuZ2VzIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQgYW5kIGhvdyBhdXhpbGlhcnkgZGF0YSBpcyB0cmFja2VkIChpbnRyb2R1Y2luZyBgaW5zbl9hdXhfZGF0YV9sZW5gKSwgd2hpY2ggYWZmZWN0cyBjb3JlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE0OjIyOjUzLjYzMTA0NzAwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTc4OTA2MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9ibGluZF9jb25zdGFudHNcIixcbiAgICBcImJwZl9qaXRfc3VicHJvZ3NcIixcbiAgICBcImJwZl9maXh1cF9jYWxsX2FyZ3NcIixcbiAgICBcImJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyJ3MgaGFuZGxpbmcgb2YgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEgKGBpbnNuX2F1eF9kYXRhYCkgZHVyaW5nIGNvbnN0YW50IGJsaW5kaW5nIGFuZCBzdWJwcm9ncmFtIEpJVGluZy4gSXQgY2hhbmdlcyBob3cgdGhlIHByb2dyYW0gaXMgY2xvbmVkIGFuZCBob3cgYXV4aWxpYXJ5IGRhdGEgaXMgdHJhY2tlZCAoaW50cm9kdWNpbmcgYGluc25fYXV4X2RhdGFfbGVuYCksIHdoaWNoIGFmZmVjdHMgY29yZSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCB2ZXJpZmljYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE0OjIyOjUzLjYzMTA1NjY0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUwMzQzODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjVkYzJjZjM5Y2VkMjE4NTNiODczMTQwNjgyZmI3YmZiODUwNTg3OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNDoyMjo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDY4MmMyY2QzYjg0NDMuLmNkZDUwMDQ5YTBjMTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtOTQ4LDYgKzk0OCw3IEBAIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcXG4gXFx0Ym9vbCBzZWVuX2RpcmVjdF93cml0ZTtcXG4gXFx0Ym9vbCBzZWVuX2V4Y2VwdGlvbjtcXG4gXFx0Ym9vbCBzaWduYXR1cmU7XFxuK1xcdHUzMiBpbnNuX2F1eF9kYXRhX2xlbjtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eF9kYXRhOyAvKiBhcnJheSBvZiBwZXItaW5zbiBzdGF0ZSAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqcHJldl9saW5mbztcXG4gXFx0c3RydWN0IGJwZl92ZXJpZmllcl9sb2cgbG9nO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbmluZGV4IDMyZDUyOTdjNTU3ZTUuLjJkMWFhMDYyNTY2YzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTIxMSwyNSArMTIxMSwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7XFxuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXFxuIHtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcXG4gfVxcbi1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi17XFxuLVxcdHJldHVybiBOVUxMO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcXG4te1xcbi19XFxuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG4gXFxuIGludCBicGZfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGNudCk7XFxuQEAgLTEzNjksNyArMTM1Niw4IEBAIGludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXG4gY29uc3QgY2hhciAqYnBmX2ppdF9nZXRfcHJvZ19uYW1lKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIFxcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpO1xcbiB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbkBAIC0xNTIxLDkgKzE1MDksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbitpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXFxuK1xcdFxcdFxcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxcbiB7XFxuLVxcdHJldHVybiBwcm9nO1xcbitcXHQqY2xvbmVkID0gZmFsc2U7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmFiNWRhM2ZmOTQxYWEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbkBAIC0xNTY0LDI3ICsxNTY0LDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcXG4gICogTm93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIGJsaW5kIHRoZSBtYWluIHByb2cgYW5kIG11c3QgYmUgaW52b2tlZCBvbmx5IHdoZW5cXG4gICogYnBmX3Byb2dfbmVlZF9ibGluZCgpIHJldHVybnMgdHJ1ZS5cXG4gICovXFxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbitpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXFxuK1xcdFxcdFxcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XFxuLVxcdHN0cnVjdCBicGZfcHJvZyAqY2xvbmUsICp0bXA7XFxuK1xcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZywgKnRtcDtcXG4gXFx0aW50IGluc25fZGVsdGEsIGluc25fY250O1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc247XFxuIFxcdGludCBpLCByZXdyaXR0ZW47XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcXHUwMDI2XFx1MDAyNiBlbnYtXFx1MDAzZXByb2cgIT0gcHJvZykpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHQqY2xvbmVkID0gZmFsc2U7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoZW52IFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlcHJvZyAhPSAqcHByb2cpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGNsb25lID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKHByb2csIEdGUF9VU0VSKTtcXG4tXFx0aWYgKCFjbG9uZSlcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdHByb2cgPSBvcmlnX3Byb2cgPSAqcHByb2c7XFxuK1xcdC8qIG9ubHkgY2xvbmUgdGhlIHByb2cgd2hlbiB3ZSBjYW4gZmFsbCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlciAqL1xcbitcXHRpZiAoY2xvbmVfbmVlZGVkKSB7XFxuK1xcdFxcdHByb2cgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUob3JpZ19wcm9nLCBHRlBfVVNFUik7XFxuK1xcdFxcdGlmICghcHJvZylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xcbi1cXHRpZiAoZW52KVxcbi1cXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBjbG9uZTtcXG4rXFx0XFx0KmNsb25lZCA9IHRydWU7XFxuK1xcdFxcdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXFxuK1xcdFxcdGlmIChlbnYpXFxuK1xcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2c7XFxuK1xcdH1cXG4gXFxuLVxcdGluc25fY250ID0gY2xvbmUtXFx1MDAzZWxlbjtcXG4tXFx0aW5zbiA9IGNsb25lLVxcdTAwM2VpbnNuc2k7XFxuK1xcdGluc25fY250ID0gcHJvZy1cXHUwMDNlbGVuO1xcbitcXHRpbnNuID0gcHJvZy1cXHUwMDNlaW5zbnNpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xcbiBcXHRcXHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XFxuQEAgLTE2MDUsNDIgKzE2MTIsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBcXG4gXFx0XFx0ICAgIGluc25bMV0uY29kZSA9PSAwKVxcbiBcXHRcXHRcXHRtZW1jcHkoYXV4LCBpbnNuLCBzaXplb2YoYXV4KSk7XFxuIFxcbi1cXHRcXHRyZXdyaXR0ZW4gPSBicGZfaml0X2JsaW5kX2luc24oaW5zbiwgYXV4LCBpbnNuX2J1ZmYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGNsb25lLVxcdTAwM2VhdXgtXFx1MDAzZXZlcmlmaWVyX3pleHQpO1xcbitcXHRcXHRyZXdyaXR0ZW4gPSBicGZfaml0X2JsaW5kX2luc24oaW5zbiwgYXV4LCBpbnNuX2J1ZmYsIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNldmVyaWZpZXJfemV4dCk7XFxuIFxcdFxcdGlmICghcmV3cml0dGVuKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChlbnYpXFxuIFxcdFxcdFxcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKGNsb25lLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XFxuK1xcdFxcdFxcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XFxuIFxcbiBcXHRcXHRpZiAoSVNfRVJSX09SX05VTEwodG1wKSkge1xcbi1cXHRcXHRcXHRpZiAoZW52KVxcbi1cXHRcXHRcXHRcXHQvKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9nICovXFxuLVxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2c7XFxuLVxcdFxcdFxcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXFx1MDAzZXByb2cgZHVyaW5nXFxuLVxcdFxcdFxcdCAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvXFxuLVxcdFxcdFxcdCAqIGZpeCBpdCB1cCBoZXJlIG9uIGVycm9yLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgY2xvbmUpO1xcbi1cXHRcXHRcXHRyZXR1cm4gSVNfRVJSKHRtcCkgPyB0bXAgOiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRcXHRcXHRpZiAoKmNsb25lZCkge1xcbitcXHRcXHRcXHRcXHQvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi9cXG4rXFx0XFx0XFx0XFx0KnBwcm9nID0gb3JpZ19wcm9nO1xcbitcXHRcXHRcXHRcXHRpZiAoZW52KVxcbitcXHRcXHRcXHRcXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBvcmlnX3Byb2c7XFxuK1xcdFxcdFxcdFxcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXFx1MDAzZXByb2cgZHVyaW5nXFxuK1xcdFxcdFxcdFxcdCAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvXFxuK1xcdFxcdFxcdFxcdCAqIGZpeCBpdCB1cCBoZXJlIG9uIGVycm9yLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xcbitcXHRcXHRcXHRcXHQqcHByb2cgPSBwcm9nO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJldHVybiBJU19FUlIodG1wKSA/IFBUUl9FUlIodG1wKSA6IC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGNsb25lID0gdG1wO1xcbitcXHRcXHRwcm9nID0gdG1wO1xcbiBcXHRcXHRpbnNuX2RlbHRhID0gcmV3cml0dGVuIC0gMTtcXG4gXFxuIFxcdFxcdGlmIChlbnYpXFxuLVxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IGNsb25lO1xcbitcXHRcXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBwcm9nO1xcbiBcXG4gXFx0XFx0LyogV2FsayBuZXcgcHJvZ3JhbSBhbmQgc2tpcCBpbnNucyB3ZSBqdXN0IGluc2VydGVkLiAqL1xcbi1cXHRcXHRpbnNuID0gY2xvbmUtXFx1MDAzZWluc25zaSArIGkgKyBpbnNuX2RlbHRhO1xcbitcXHRcXHRpbnNuID0gcHJvZy1cXHUwMDNlaW5zbnNpICsgaSArIGluc25fZGVsdGE7XFxuIFxcdFxcdGluc25fY250ICs9IGluc25fZGVsdGE7XFxuIFxcdFxcdGkgICAgICAgICs9IGluc25fZGVsdGE7XFxuIFxcdH1cXG4gXFxuLVxcdGNsb25lLVxcdTAwM2VibGluZGVkID0gMTtcXG4tXFx0cmV0dXJuIGNsb25lO1xcbitcXHRwcm9nLVxcdTAwM2VibGluZGVkID0gMTtcXG4rXFx0KnBwcm9nID0gcHJvZztcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBib29sIGJwZl9pbnNuX2lzX2luZGlyZWN0X3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuQEAgLTI2MzAsNDkgKzI2NDQsMzMgQEAgc3RhdGljIGJvb2wgYnBmX3Byb2dfc2VsZWN0X2ludGVycHJldGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuIFxcdHJldHVybiBzZWxlY3RfaW50ZXJwcmV0ZXI7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4rc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgaml0X25lZWRlZClcXG4ge1xcbiAjaWZkZWYgQ09ORklHX0JQRl9KSVRcXG4rXFx0aW50IGVycjtcXG4rXFx0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvcmlnX3Byb2c7XFxuLVxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eDtcXG4gXFxuIFxcdGlmICghYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSlcXG4gXFx0XFx0cmV0dXJuIGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcXG4gXFxuLVxcdGlmIChlbnYpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgZW52IGlzIG5vdCBOVUxMLCB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIGVuZCBvZiBicGZfY2hlY2soKSwgYXQgdGhpc1xcbi1cXHRcXHQgKiBwb2ludCwgb25seSBpbnNuX2F1eF9kYXRhIGlzIHVzZWQgYWZ0ZXIgZmFpbHVyZSwgc28gaXQgc2hvdWxkIGJlIHJlc3RvcmVkXFxuLVxcdFxcdCAqIG9uIGZhaWx1cmUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRvcmlnX2luc25fYXV4ID0gYnBmX2R1cF9pbnNuX2F1eF9kYXRhKGVudik7XFxuLVxcdFxcdGlmICghb3JpZ19pbnNuX2F1eClcXG4tXFx0XFx0XFx0cmV0dXJuIHByb2c7XFxuLVxcdH1cXG4tXFxuIFxcdG9yaWdfcHJvZyA9IHByb2c7XFxuLVxcdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xcbi1cXHQvKlxcbi1cXHQgKiBJZiBibGluZGluZyB3YXMgcmVxdWVzdGVkIGFuZCB3ZSBmYWlsZWQgZHVyaW5nIGJsaW5kaW5nLCB3ZSBtdXN0IGZhbGxcXG4tXFx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXFxuLVxcdCAqL1xcbi1cXHRpZiAoSVNfRVJSKHByb2cpKVxcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbitcXHRlcnIgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIFxcdTAwMjZwcm9nLCAhaml0X25lZWRlZCwgXFx1MDAyNmNsb25lZCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0cHJvZyA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcXG4tXFx0aWYgKHByb2ctXFx1MDAzZWppdGVkKSB7XFxuLVxcdFxcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7XFxuLVxcdFxcdGlmIChlbnYpXFxuLVxcdFxcdFxcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xcbi1cXHRcXHRyZXR1cm4gcHJvZztcXG4rXFx0aWYgKGNsb25lZCkge1xcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlaml0ZWQpIHtcXG4rXFx0XFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcXG4rXFx0XFx0XFx0cHJvZyA9IG9yaWdfcHJvZztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xcbi1cXG4tb3V0X3Jlc3RvcmU6XFxuLVxcdHByb2cgPSBvcmlnX3Byb2c7XFxuLVxcdGlmIChlbnYpXFxuLVxcdFxcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcXG4rb3V0OlxcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIHByb2c7XFxuIH1cXG5AQCAtMjcwMiw3ICsyNzAwLDcgQEAgc3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdFxcbiBcXHRcXHRpZiAoKmVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGZwO1xcbiBcXG4tXFx0XFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcXG4rXFx0XFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwLCBqaXRfbmVlZGVkKTtcXG4gXFx0XFx0YnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShmcCk7XFxuIFxcdFxcdGlmICghZnAtXFx1MDAzZWppdGVkIFxcdTAwMjZcXHUwMDI2IGppdF9uZWVkZWQpIHtcXG4gXFx0XFx0XFx0KmVyciA9IC1FTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcXG5pbmRleCBhMGJkZGFkYTc5NjRlLi42ZGEwZjhkMGI3NjFiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuQEAgLTE3NCw2ICsxNzQsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpZiAoY250ID09IDEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0cHJvZ19sZW4gPSBuZXdfcHJvZy1cXHUwMDNlbGVuO1xcbitcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gcHJvZ19sZW47XFxuIFxcbiBcXHRtZW1tb3ZlKGRhdGEgKyBvZmYgKyBjbnQgLSAxLCBkYXRhICsgb2ZmLFxcbiBcXHRcXHRzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSAqIChwcm9nX2xlbiAtIG9mZiAtIGNudCArIDEpKTtcXG5AQCAtNDQwLDcgKzQ0MSw2IEBAIHN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXhfZGF0YSA9IGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YTtcXG4tXFx0c3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbiBcXHRpbnQgZW5kID0gc3RhcnQgKyBsZW47XFxuIFxcdGludCBpO1xcbiBcXG5AQCAtNDQ5LDkgKzQ0OSw2IEBAIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxcbiBcXHRcXHRcXHRrdmZyZWUoYXV4X2RhdGFbaV0uanQpO1xcbiBcXHRcXHRcXHRhdXhfZGF0YVtpXS5qdCA9IE5VTEw7XFxuIFxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmIChicGZfaXNfbGRpbW02NChcXHUwMDI2aW5zbnNbaV0pKVxcbi1cXHRcXHRcXHRpKys7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtNDY0LDcgKzQ2MSw2IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXFxuIFxcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgpKVxcbiBcXHRcXHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcXG4gXFxuLVxcdC8qIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGJwZl9yZW1vdmVfaW5zbnMsIGFzIGl0IHVzZXMgcHJvZy1cXHUwMDNlaW5zbnNpICovXFxuIFxcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgb2ZmLCBjbnQpO1xcbiBcXG4gXFx0ZXJyID0gYnBmX3JlbW92ZV9pbnNucyhlbnYtXFx1MDAzZXByb2csIG9mZiwgY250KTtcXG5AQCAtNDgzLDYgKzQ3OSw3IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXFxuIFxcbiBcXHRtZW1tb3ZlKGF1eF9kYXRhICsgb2ZmLFxcdGF1eF9kYXRhICsgb2ZmICsgY250LFxcbiBcXHRcXHRzaXplb2YoKmF1eF9kYXRhKSAqIChvcmlnX3Byb2dfbGVuIC0gb2ZmIC0gY250KSk7XFxuK1xcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4gLT0gY250O1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTk5LDMyICs5OTYsMTQgQEAgc3RhdGljIHUzMiAqYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gc3RhdGljIHZvaWQgYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyICpvcmlnX3N0YXJ0cylcXG4ge1xcbitcXHRpZiAoIW9yaWdfc3RhcnRzKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgZW52LVxcdTAwM2VzdWJwcm9nX2NudDsgaSsrKVxcbiBcXHRcXHRlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydCA9IG9yaWdfc3RhcnRzW2ldO1xcbiBcXHQvKiByZXN0b3JlIHRoZSBzdGFydCBvZiBmYWtlICdleGl0JyBzdWJwcm9nIGFzIHdlbGwgKi9cXG4gXFx0ZW52LVxcdTAwM2VzdWJwcm9nX2luZm9bZW52LVxcdTAwM2VzdWJwcm9nX2NudF0uc3RhcnQgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4gfVxcbiBcXG4tc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4te1xcbi1cXHRzaXplX3Qgc2l6ZTtcXG4tXFx0dm9pZCAqbmV3X2F1eDtcXG4tXFxuLVxcdHNpemUgPSBhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbik7XFxuLVxcdG5ld19hdXggPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tXFx0aWYgKG5ld19hdXgpXFxuLVxcdFxcdG1lbWNweShuZXdfYXV4LCBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEsIHNpemUpO1xcbi1cXHRyZXR1cm4gbmV3X2F1eDtcXG4tfVxcbi1cXG4tdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpXFxuLXtcXG4tXFx0LyogdGhlIGV4cGFuZGVkIGVsZW1lbnRzIGFyZSB6ZXJvLWZpbGxlZCwgc28gbm8gc3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZCAqL1xcbi1cXHR2ZnJlZShlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEpO1xcbi1cXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEgPSBvcmlnX2luc25fYXV4O1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cXHUwMDNlcHJvZywgKipmdW5jLCAqdG1wO1xcbkBAIC0xMjk2LDU3ICsxMjc1LDQ3IEBAIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHtcXG4gXFx0aW50IGVyciwgaTtcXG4tXFx0Ym9vbCBibGluZGVkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nO1xcbi1cXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7XFxuLVxcdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cztcXG4rXFx0dTMyICpvcmlnX3N1YnByb2dfc3RhcnRzID0gTlVMTDtcXG4rXFx0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfY250IFxcdTAwM2M9IDEpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cHJvZyA9IG9yaWdfcHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG4gXFx0aWYgKGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpIHtcXG4tXFx0XFx0b3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpO1xcbi1cXHRcXHRpZiAoIW9yaWdfaW5zbl9hdXgpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0XFx0Z290byBvdXRfY2xlYW51cDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRvcmlnX3N1YnByb2dfc3RhcnRzID0gYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhlbnYpO1xcbi1cXHRcXHRpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHtcXG4tXFx0XFx0XFx0dmZyZWUob3JpZ19pbnNuX2F1eCk7XFxuLVxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuLVxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXA7XFxuK1xcdFxcdGlmICghcHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkKSB7XFxuK1xcdFxcdFxcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XFxuK1xcdFxcdFxcdGlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykge1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFx0XFx0cHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7XFxuLVxcdFxcdGlmIChJU19FUlIocHJvZykpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0XFx0cHJvZyA9IG9yaWdfcHJvZztcXG4rXFx0XFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcXHUwMDI2cHJvZywgIXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCwgXFx1MDAyNmNsb25lZCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuLVxcdFxcdH1cXG4tXFx0XFx0YmxpbmRlZCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGppdF9zdWJwcm9ncyhlbnYpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dF9qaXRfZXJyO1xcbiBcXG4tXFx0aWYgKGJsaW5kZWQpIHtcXG4rXFx0aWYgKGNsb25lZCkge1xcbiBcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpO1xcbiBcXHRcXHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XFxuLVxcdFxcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG91dF9qaXRfZXJyOlxcbi1cXHRpZiAoYmxpbmRlZCkge1xcbitcXHRpZiAoY2xvbmVkKSB7XFxuIFxcdFxcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XFxuIFxcdFxcdC8qIHJvbGwgYmFjayB0byB0aGUgY2xlYW4gb3JpZ2luYWwgcHJvZyAqL1xcbiBcXHRcXHRwcm9nID0gZW52LVxcdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xcbiBcXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAoZXJyICE9IC1FRkFVTFQpIHtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRUZBVUxUIFxcdTAwMjZcXHUwMDI2ICFwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQpIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogV2Ugd2lsbCBmYWxsIGJhY2sgdG8gaW50ZXJwcmV0ZXIgbW9kZSB3aGVuIGVyciBpcyBub3QgLUVGQVVMVCwgYmVmb3JlXFxuIFxcdFxcdFxcdCAqIHRoYXQsIGluc24tXFx1MDAzZW9mZiBhbmQgaW5zbi1cXHUwMDNlaW1tIHNob3VsZCBiZSByZXN0b3JlZCB0byB0aGVpciBvcmlnaW5hbFxcbkBAIC0xMzY0LDcgKzEzMzMsNiBAQCBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gb3V0X3Jlc3RvcmU6XFxuIFxcdGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKGVudiwgb3JpZ19zdWJwcm9nX3N0YXJ0cyk7XFxuLVxcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcXG4gXFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xcbiBvdXRfY2xlYW51cDpcXG4gXFx0LyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi9cXG5AQCAtMTM3Niw4ICsxMzQ0LDcgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiAjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbi1cXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuLVxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IHByb2ctXFx1MDAzZWluc25zaTtcXG4rXFx0c3RydWN0IGJwZl9pbnNuICppbnNuO1xcbiBcXHRpbnQgZGVwdGg7XFxuICNlbmRpZlxcbiBcXHRpbnQgaSwgZXJyID0gMDtcXG5AQCAtMTQwMyw3ICsxMzcwLDcgQEAgaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiAjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbi1cXHRpZiAocHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkKSB7XFxuK1xcdGlmIChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCkge1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcInByb2dyYW0gcmVxdWlyZXMgQlBGIEpJVCBjb21waWxlciBidXQgaXQgaXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuQEAgLTE0MjAsNyArMTM4Nyw3IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwidGFpbF9jYWxscyBhcmUgbm90IGFsbG93ZWQgaW4gbm9uLUpJVGVkIHByb2dyYW1zIHdpdGggYnBmLXRvLWJwZiBjYWxsc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VsZW47IGkrKywgaW5zbisrKSB7XFxuK1xcdGZvciAoaSA9IDAsIGluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTsgaSBcXHUwMDNjIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuOyBpKyssIGluc24rKykge1xcbiBcXHRcXHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XFxuIFxcdFxcdFxcdC8qIFdoZW4gSklUIGZhaWxzIHRoZSBwcm9ncyB3aXRoIGNhbGxiYWNrIGNhbGxzXFxuIFxcdFxcdFxcdCAqIGhhdmUgdG8gYmUgcmVqZWN0ZWQsIHNpbmNlIGludGVycHJldGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIHlldC5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTZmMzVmNGU3MTViNi4uZTMxYzQxMjAzYmRhZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMjAxMjIsNyArMjAxMjIsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4gXFx0aWYgKCFpc19wcml2KVxcbiBcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZicGZfdmVyaWZpZXJfbG9jayk7XFxuIFxcbi1cXHRsZW4gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4rXFx0bGVuID0gZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuO1xcbiBcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEgPVxcbiBcXHRcXHRfX3ZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgbGVuKSxcXG4gXFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcXG5AQCAtMjAzNjgsNyArMjAzNjgsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4gXFx0cmVsZWFzZV9idGZzKGVudik7XFxuIGVycl9mcmVlX2VudjpcXG4gXFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YSlcXG4tXFx0XFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbik7XFxuK1xcdFxcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgMCwgZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhX2xlbik7XFxuIFxcdHZmcmVlKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YSk7XFxuIFxcdGt2ZnJlZShlbnYtXFx1MDAzZWZkX2FycmF5KTtcXG4gXFx0YnBmX3N0YWNrX2xpdmVuZXNzX2ZyZWUoZW52KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTQ6MjI6NTQuMjgyMDU1MzQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzIzMjc4ODU1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICAgIFwiYnBmX2ppdF9zdWJwcm9nc1wiLFxuICAgIFwiYnBmX2ZpeHVwX2NhbGxfYXJnc1wiLFxuICAgIFwiYnBmX2NsZWFyX2luc25fYXV4X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIncyBoYW5kbGluZyBvZiBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKSBkdXJpbmcgY29uc3RhbnQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nLiBJdCBjaGFuZ2VzIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQgYW5kIGhvdyBhdXhpbGlhcnkgZGF0YSBpcyB0cmFja2VkIChpbnRyb2R1Y2luZyBgaW5zbl9hdXhfZGF0YV9sZW5gKSwgd2hpY2ggYWZmZWN0cyBjb3JlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjVkYzJjZjM5Y2VkMjE4NTNiODczMTQwNjgyZmI3YmZiODUwNTg3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE0OjIyOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMuLmNkZDUwMDQ5YTBjMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtOTQ4LDYgKzk0OCw3IEBAIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcbiBcdGJvb2wgc2Vlbl9kaXJlY3Rfd3JpdGU7XG4gXHRib29sIHNlZW5fZXhjZXB0aW9uO1xuIFx0Ym9vbCBzaWduYXR1cmU7XG4rXHR1MzIgaW5zbl9hdXhfZGF0YV9sZW47XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4X2RhdGE7IC8qIGFycmF5IG9mIHBlci1pbnNuIHN0YXRlICovXG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqcHJldl9saW5mbztcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nIGxvZztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uMmQxYWEwNjI1NjZjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMjExLDI1ICsxMjExLDEyIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fc2luZ2xlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZixcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pO1xuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbiBcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuIHtcbiBcdHJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7XG4gfVxuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpXG4te1xuLX1cbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gaW50IGJwZl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgY250KTtcbkBAIC0xMzY5LDcgKzEzNTYsOCBAQCBpbnQgYnBmX2ppdF9nZXRfZnVuY19hZGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcbiBjb25zdCBjaGFyICpicGZfaml0X2dldF9wcm9nX25hbWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiBcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4raW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuK1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKTtcbiB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19uZWVkX2JsaW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbkBAIC0xNTIxLDkgKzE1MDksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4raW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuK1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbi1cdHJldHVybiBwcm9nO1xuK1x0KmNsb25lZCA9IGZhbHNlO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmFiNWRhM2ZmOTQxYWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTY0LDI3ICsxNTY0LDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbiAgKiBOb3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gYmxpbmQgdGhlIG1haW4gcHJvZyBhbmQgbXVzdCBiZSBpbnZva2VkIG9ubHkgd2hlblxuICAqIGJwZl9wcm9nX25lZWRfYmxpbmQoKSByZXR1cm5zIHRydWUuXG4gICovXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4raW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuK1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wO1xuK1x0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nLCAqdG1wO1xuIFx0aW50IGluc25fZGVsdGEsIGluc25fY250O1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuO1xuIFx0aW50IGksIHJld3JpdHRlbjtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoZW52IFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlcHJvZyAhPSBwcm9nKSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHQqY2xvbmVkID0gZmFsc2U7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gKnBwcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRjbG9uZSA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShwcm9nLCBHRlBfVVNFUik7XG4tXHRpZiAoIWNsb25lKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdHByb2cgPSBvcmlnX3Byb2cgPSAqcHByb2c7XG4rXHQvKiBvbmx5IGNsb25lIHRoZSBwcm9nIHdoZW4gd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgKi9cbitcdGlmIChjbG9uZV9uZWVkZWQpIHtcbitcdFx0cHJvZyA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShvcmlnX3Byb2csIEdGUF9VU0VSKTtcbitcdFx0aWYgKCFwcm9nKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cbi1cdGlmIChlbnYpXG4tXHRcdGVudi1cdTAwM2Vwcm9nID0gY2xvbmU7XG4rXHRcdCpjbG9uZWQgPSB0cnVlO1xuK1x0XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xuK1x0XHRpZiAoZW52KVxuK1x0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbitcdH1cbiBcbi1cdGluc25fY250ID0gY2xvbmUtXHUwMDNlbGVuO1xuLVx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaTtcbitcdGluc25fY250ID0gcHJvZy1cdTAwM2VsZW47XG4rXHRpbnNuID0gcHJvZy1cdTAwM2VpbnNuc2k7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgaSsrLCBpbnNuKyspIHtcbiBcdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkge1xuQEAgLTE2MDUsNDIgKzE2MTIsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBcbiBcdFx0ICAgIGluc25bMV0uY29kZSA9PSAwKVxuIFx0XHRcdG1lbWNweShhdXgsIGluc24sIHNpemVvZihhdXgpKTtcbiBcbi1cdFx0cmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLFxuLVx0XHRcdFx0XHRcdGNsb25lLVx1MDAzZWF1eC1cdTAwM2V2ZXJpZmllcl96ZXh0KTtcbitcdFx0cmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLCBwcm9nLVx1MDAzZWF1eC1cdTAwM2V2ZXJpZmllcl96ZXh0KTtcbiBcdFx0aWYgKCFyZXdyaXR0ZW4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChlbnYpXG4gXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcbiBcdFx0ZWxzZVxuLVx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuK1x0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG4gXHRcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XG4tXHRcdFx0aWYgKGVudilcbi1cdFx0XHRcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cbi1cdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbi1cdFx0XHQvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LVx1MDAzZXByb2cgZHVyaW5nXG4tXHRcdFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cbi1cdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XG4tXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTtcbitcdFx0XHRpZiAoKmNsb25lZCkge1xuK1x0XHRcdFx0Lyogcm9sbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwcm9nICovXG4rXHRcdFx0XHQqcHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdFx0XHRpZiAoZW52KVxuK1x0XHRcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcbitcdFx0XHRcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXHUwMDNlcHJvZyBkdXJpbmdcbitcdFx0XHRcdCAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvXG4rXHRcdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xuK1x0XHRcdFx0KnBwcm9nID0gcHJvZztcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcbiBcdFx0fVxuIFxuLVx0XHRjbG9uZSA9IHRtcDtcbitcdFx0cHJvZyA9IHRtcDtcbiBcdFx0aW5zbl9kZWx0YSA9IHJld3JpdHRlbiAtIDE7XG4gXG4gXHRcdGlmIChlbnYpXG4tXHRcdFx0ZW52LVx1MDAzZXByb2cgPSBjbG9uZTtcbitcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2c7XG4gXG4gXHRcdC8qIFdhbGsgbmV3IHByb2dyYW0gYW5kIHNraXAgaW5zbnMgd2UganVzdCBpbnNlcnRlZC4gKi9cbi1cdFx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaSArIGkgKyBpbnNuX2RlbHRhO1xuK1x0XHRpbnNuID0gcHJvZy1cdTAwM2VpbnNuc2kgKyBpICsgaW5zbl9kZWx0YTtcbiBcdFx0aW5zbl9jbnQgKz0gaW5zbl9kZWx0YTtcbiBcdFx0aSAgICAgICAgKz0gaW5zbl9kZWx0YTtcbiBcdH1cbiBcbi1cdGNsb25lLVx1MDAzZWJsaW5kZWQgPSAxO1xuLVx0cmV0dXJuIGNsb25lO1xuK1x0cHJvZy1cdTAwM2VibGluZGVkID0gMTtcbitcdCpwcHJvZyA9IHByb2c7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gYm9vbCBicGZfaW5zbl9pc19pbmRpcmVjdF90YXJnZXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuQEAgLTI2MzAsNDkgKzI2NDQsMzMgQEAgc3RhdGljIGJvb2wgYnBmX3Byb2dfc2VsZWN0X2ludGVycHJldGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXG4gXHRyZXR1cm4gc2VsZWN0X2ludGVycHJldGVyO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4rc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgaml0X25lZWRlZClcbiB7XG4gI2lmZGVmIENPTkZJR19CUEZfSklUXG4rXHRpbnQgZXJyO1xuK1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuIFxuIFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxuIFx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuIFxuLVx0aWYgKGVudikge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXG4tXHRcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcbi1cdFx0ICogb24gZmFpbHVyZS5cbi1cdFx0ICovXG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KVxuLVx0XHRcdHJldHVybiBwcm9nO1xuLVx0fVxuLVxuIFx0b3JpZ19wcm9nID0gcHJvZztcbi1cdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0Lypcbi1cdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxuLVx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXG4tXHQgKi9cbi1cdGlmIChJU19FUlIocHJvZykpXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRlcnIgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIFx1MDAyNnByb2csICFqaXRfbmVlZGVkLCBcdTAwMjZjbG9uZWQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi1cdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbi1cdFx0aWYgKGVudilcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0cmV0dXJuIHByb2c7XG4rXHRpZiAoY2xvbmVkKSB7XG4rXHRcdGlmIChwcm9nLVx1MDAzZWppdGVkKSB7XG4rXHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuK1x0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4tXG4tb3V0X3Jlc3RvcmU6XG4tXHRwcm9nID0gb3JpZ19wcm9nO1xuLVx0aWYgKGVudilcbi1cdFx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xuK291dDpcbiAjZW5kaWZcbiBcdHJldHVybiBwcm9nO1xuIH1cbkBAIC0yNzAyLDcgKzI3MDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XG4gXHRcdGlmICgqZXJyKVxuIFx0XHRcdHJldHVybiBmcDtcbiBcbi1cdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcbitcdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwLCBqaXRfbmVlZGVkKTtcbiBcdFx0YnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShmcCk7XG4gXHRcdGlmICghZnAtXHUwMDNlaml0ZWQgXHUwMDI2XHUwMDI2IGppdF9uZWVkZWQpIHtcbiBcdFx0XHQqZXJyID0gLUVOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi42ZGEwZjhkMGI3NjFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTE3NCw2ICsxNzQsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKGNudCA9PSAxKVxuIFx0XHRyZXR1cm47XG4gXHRwcm9nX2xlbiA9IG5ld19wcm9nLVx1MDAzZWxlbjtcbitcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IHByb2dfbGVuO1xuIFxuIFx0bWVtbW92ZShkYXRhICsgb2ZmICsgY250IC0gMSwgZGF0YSArIG9mZixcbiBcdFx0c2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSkgKiAocHJvZ19sZW4gLSBvZmYgLSBjbnQgKyAxKSk7XG5AQCAtNDQwLDcgKzQ0MSw2IEBAIHN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbiB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbilcbiB7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eF9kYXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGE7XG4tXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0aW50IGVuZCA9IHN0YXJ0ICsgbGVuO1xuIFx0aW50IGk7XG4gXG5AQCAtNDQ5LDkgKzQ0OSw2IEBAIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxuIFx0XHRcdGt2ZnJlZShhdXhfZGF0YVtpXS5qdCk7XG4gXHRcdFx0YXV4X2RhdGFbaV0uanQgPSBOVUxMO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChicGZfaXNfbGRpbW02NChcdTAwMjZpbnNuc1tpXSkpXG4tXHRcdFx0aSsrO1xuIFx0fVxuIH1cbiBcbkBAIC00NjQsNyArNDYxLDYgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSlcbiBcdFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XG4gXG4tXHQvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBicGZfcmVtb3ZlX2luc25zLCBhcyBpdCB1c2VzIHByb2ctXHUwMDNlaW5zbnNpICovXG4gXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTtcbiBcbiBcdGVyciA9IGJwZl9yZW1vdmVfaW5zbnMoZW52LVx1MDAzZXByb2csIG9mZiwgY250KTtcbkBAIC00ODMsNiArNDc5LDcgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcbiBcdG1lbW1vdmUoYXV4X2RhdGEgKyBvZmYsXHRhdXhfZGF0YSArIG9mZiArIGNudCxcbiBcdFx0c2l6ZW9mKCphdXhfZGF0YSkgKiAob3JpZ19wcm9nX2xlbiAtIG9mZiAtIGNudCkpO1xuK1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuIC09IGNudDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05OTksMzIgKzk5NiwxNCBAQCBzdGF0aWMgdTMyICpicGZfZHVwX3N1YnByb2dfc3RhcnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gc3RhdGljIHZvaWQgYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyICpvcmlnX3N0YXJ0cylcbiB7XG4rXHRpZiAoIW9yaWdfc3RhcnRzKVxuK1x0XHRyZXR1cm47XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpKyspXG4gXHRcdGVudi1cdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQgPSBvcmlnX3N0YXJ0c1tpXTtcbiBcdC8qIHJlc3RvcmUgdGhlIHN0YXJ0IG9mIGZha2UgJ2V4aXQnIHN1YnByb2cgYXMgd2VsbCAqL1xuIFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tlbnYtXHUwMDNlc3VicHJvZ19jbnRdLnN0YXJ0ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIH1cbiBcbi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLXtcbi1cdHNpemVfdCBzaXplO1xuLVx0dm9pZCAqbmV3X2F1eDtcbi1cbi1cdHNpemUgPSBhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4pO1xuLVx0bmV3X2F1eCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKG5ld19hdXgpXG4tXHRcdG1lbWNweShuZXdfYXV4LCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSwgc2l6ZSk7XG4tXHRyZXR1cm4gbmV3X2F1eDtcbi19XG4tXG4tdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcbi17XG4tXHQvKiB0aGUgZXhwYW5kZWQgZWxlbWVudHMgYXJlIHplcm8tZmlsbGVkLCBzbyBubyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkICovXG4tXHR2ZnJlZShlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSk7XG4tXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSA9IG9yaWdfaW5zbl9hdXg7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2csICoqZnVuYywgKnRtcDtcbkBAIC0xMjk2LDU3ICsxMjc1LDQ3IEBAIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRpbnQgZXJyLCBpO1xuLVx0Ym9vbCBibGluZGVkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc247XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2csICpvcmlnX3Byb2c7XG4tXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7XG4tXHR1MzIgKm9yaWdfc3VicHJvZ19zdGFydHM7XG4rXHR1MzIgKm9yaWdfc3VicHJvZ19zdGFydHMgPSBOVUxMO1xuK1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChlbnYtXHUwMDNlc3VicHJvZ19jbnQgXHUwMDNjPSAxKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHByb2cgPSBvcmlnX3Byb2cgPSBlbnYtXHUwMDNlcHJvZztcbiBcdGlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7XG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KSB7XG4tXHRcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuLVx0XHR9XG4tXHRcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XG4tXHRcdGlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykge1xuLVx0XHRcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdFx0Z290byBvdXRfY2xlYW51cDtcbitcdFx0aWYgKCFwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xuK1x0XHRcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XG4rXHRcdFx0aWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7XG4rXHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRcdFx0Z290byBvdXRfY2xlYW51cDtcbitcdFx0XHR9XG4gXHRcdH1cbi1cdFx0cHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7XG4tXHRcdGlmIChJU19FUlIocHJvZykpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdGVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgXHUwMDI2cHJvZywgIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkLCBcdTAwMjZjbG9uZWQpO1xuK1x0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHRcdH1cbi1cdFx0YmxpbmRlZCA9IHRydWU7XG4gXHR9XG4gXG4gXHRlcnIgPSBqaXRfc3VicHJvZ3MoZW52KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2ppdF9lcnI7XG4gXG4tXHRpZiAoYmxpbmRlZCkge1xuK1x0aWYgKGNsb25lZCkge1xuIFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpO1xuIFx0XHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4tXHRcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0X2ppdF9lcnI6XG4tXHRpZiAoYmxpbmRlZCkge1xuK1x0aWYgKGNsb25lZCkge1xuIFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuIFx0XHQvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuIG9yaWdpbmFsIHByb2cgKi9cbiBcdFx0cHJvZyA9IGVudi1cdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xuIFx0XHRnb3RvIG91dF9yZXN0b3JlO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGVyciAhPSAtRUZBVUxUKSB7XG4rXHRcdGlmIChlcnIgIT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXZSB3aWxsIGZhbGwgYmFjayB0byBpbnRlcnByZXRlciBtb2RlIHdoZW4gZXJyIGlzIG5vdCAtRUZBVUxULCBiZWZvcmVcbiBcdFx0XHQgKiB0aGF0LCBpbnNuLVx1MDAzZW9mZiBhbmQgaW5zbi1cdTAwM2VpbW0gc2hvdWxkIGJlIHJlc3RvcmVkIHRvIHRoZWlyIG9yaWdpbmFsXG5AQCAtMTM2NCw3ICsxMzMzLDYgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBvdXRfcmVzdG9yZTpcbiBcdGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKGVudiwgb3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4tXHRicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKGVudiwgb3JpZ19pbnNuX2F1eCk7XG4gXHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4gb3V0X2NsZWFudXA6XG4gXHQvKiBjbGVhbnVwIG1haW4gcHJvZyB0byBiZSBpbnRlcnByZXRlZCAqL1xuQEAgLTEzNzYsOCArMTM0NCw3IEBAIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gI2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbi1cdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cdTAwM2Vwcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gcHJvZy1cdTAwM2VpbnNuc2k7XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc247XG4gXHRpbnQgZGVwdGg7XG4gI2VuZGlmXG4gXHRpbnQgaSwgZXJyID0gMDtcbkBAIC0xNDAzLDcgKzEzNzAsNyBAQCBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gI2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbi1cdGlmIChwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xuK1x0aWYgKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJwcm9ncmFtIHJlcXVpcmVzIEJQRiBKSVQgY29tcGlsZXIgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTE0MjAsNyArMTM4Nyw3IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdHZlcmJvc2UoZW52LCBcInRhaWxfY2FsbHMgYXJlIG5vdCBhbGxvd2VkIGluIG5vbi1KSVRlZCBwcm9ncmFtcyB3aXRoIGJwZi10by1icGYgY2FsbHNcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VsZW47IGkrKywgaW5zbisrKSB7XG4rXHRmb3IgKGkgPSAwLCBpbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpOyBpIFx1MDAzYyBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47IGkrKywgaW5zbisrKSB7XG4gXHRcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcbiBcdFx0XHQvKiBXaGVuIEpJVCBmYWlscyB0aGUgcHJvZ3Mgd2l0aCBjYWxsYmFjayBjYWxsc1xuIFx0XHRcdCAqIGhhdmUgdG8gYmUgcmVqZWN0ZWQsIHNpbmNlIGludGVycHJldGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIHlldC5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2ZjM1ZjRlNzE1YjYuLmUzMWM0MTIwM2JkYWUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTIwMTIyLDcgKzIwMTIyLDcgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRpZiAoIWlzX3ByaXYpXG4gXHRcdG11dGV4X2xvY2soXHUwMDI2YnBmX3ZlcmlmaWVyX2xvY2spO1xuIFxuLVx0bGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuK1x0bGVuID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGEgPVxuIFx0XHRfX3ZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgbGVuKSxcbiBcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuQEAgLTIwMzY4LDcgKzIwMzY4LDcgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRyZWxlYXNlX2J0ZnMoZW52KTtcbiBlcnJfZnJlZV9lbnY6XG4gXHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpXG4tXHRcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgMCwgZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuKTtcbitcdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4pO1xuIFx0dmZyZWUoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpO1xuIFx0a3ZmcmVlKGVudi1cdTAwM2VmZF9hcnJheSk7XG4gXHRicGZfc3RhY2tfbGl2ZW5lc3NfZnJlZShlbnYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTQ6MjI6NTQuMjgyMDU2NzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY5NTc3OTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgYW5kIEpJVCBCbGluZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgYmxpbmRpbmcgbG9naWMuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCB3aGljaCBub3cgcmV0dXJucyBhbiBgaW50YCBpbnN0ZWFkIG9mIGEgYHN0cnVjdCBicGZfcHJvZyAqYC4gIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IOKAkyB0aGlzIHN1Z2dlc3RzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IGJsaW5kaW5nIGlzIGhhbmRsZWQuIFdlJ3JlIGFsc28gc2VlaW5nIG1vZGlmaWNhdGlvbnMgaW4gaG93IGBpbnNuX2F1eF9kYXRhYCBpcyBtYW5hZ2VkIGR1cmluZyBibGluZGluZyBhbmQgSklUaW5nLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW5gIHRvIHRyYWNrIHRoZSBsZW5ndGggYW5kIHRoZSByZW1vdmFsIG9mIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbnMgKGBicGZfZHVwX2luc25fYXV4X2RhdGFgLCBgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YWApIHN0cm9uZ2x5IGltcGx5IGEgZm9jdXMgb24gZWZmaWNpZW5jeSBhbmQgcG90ZW50aWFsbHksIGFkZHJlc3NpbmcgYSBzdWJ0bGUgYnVnIG9yIHJhY2UgY29uZGl0aW9uLiBUaGUgY2hhbmdlIGluIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiBza2lwcGluZyBgbGRpbW02NGAgaW5zdHJ1Y3Rpb25zLCBhbHNvIHdhcnJhbnRzIGNsb3NlciBzY3J1dGlueS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgdGhpcyBpcyBrZXJuZWwgY29yZSwgYW5kIHRoaXMgaXMgdG91Y2h5LiBTcGVjaWZpY2FsbHksIHRoZSBhcmVhcyBpdCdzIHRvdWNoaW5nLCBrZXJuZWwvYnBmL2ZpeHVwcy5jIGFuZCBrZXJuZWwvYnBmL2NvcmUuYy4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgYW5kIHRoZXJlZm9yZSwgaGlnaC1wcmlvcml0eSBmb3IgZnV6emluZy5cblxuSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoZSBwYXRjaCB0b3VjaGVzLiBJIHNlZSBpdCBtb2RpZmllcyBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgLCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfZml4dXBfY2FsbF9hcmdzYCwgYW5kIGBicGZfY2hlY2tgLiAgQWxyaWdodCwgYSBuaWNlLCBmb2N1c2VkIGxpc3QuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlLiAgYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCBpcyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIGV4cG9ydGVkIGFuZCBtb3JlIHdpZGVseSBhY2Nlc3NpYmxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGJwZl9wcm9nX2ppdF9jb21waWxlYCAqaXMqIHN0YXRpYyB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCBpbnRlcmFjdGlvbiB0byBvdGhlciBwYXJ0cyBvZiBjb3JlLiAgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCwgYGJwZl9qaXRfc3VicHJvZ3NgIGFuZCBgYnBmX2ZpeHVwX2NhbGxfYXJnc2AgYXJlIGFsc28gbm90IHN0YXRpYy4gRmluYWxseSwgYGJwZl9jaGVja2AgaXMgdGhlIHZlcmlmaWVyIGVudHJ5IHBvaW50LCBzbyB0aGF0J3MgYSBrZXkgdGFyZ2V0LlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuICBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuOyBpdCdzIHRoZSBmb3VuZGF0aW9uLiBBbmQsIG5hdHVyYWxseSwgYENPTkZJR19CUEZfSklUYCBpcyBnb2luZyB0byBiZSB2aXRhbCBiZWNhdXNlIHdlJ3JlIHRhbGtpbmcgYWJvdXQgSklUIGJsaW5kaW5nIGhlcmUuXG5cblRvIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLCBJIHRoaW5rIEknbGwgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBmdW5jdGlvbiB2aXNpYmlsaXR5IGFuZCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhhdCBzaG91bGQgaGVscCBtZSBnZW5lcmF0ZSBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVnaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTQ6MjM6MDMuOTc3ODM5ODM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTgxODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NvcmUuYz0xNTUyPXZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE1NjYtICovXFxua2VybmVsL2JwZi9jb3JlLmM6MTU2NzppbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXFxua2VybmVsL2JwZi9jb3JlLmMtMTU2OC1cXHRcXHRcXHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2NDc9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjY1OC1cXHRvcmlnX3Byb2cgPSBwcm9nO1xcbmtlcm5lbC9icGYvY29yZS5jOjI2NTk6XFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcXHUwMDI2cHJvZywgIWppdF9uZWVkZWQsIFxcdTAwMjZjbG9uZWQpO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2NjAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTI3NT1pbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMjk0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEyOTU6XFx0XFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcXHUwMDI2cHJvZywgIXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCwgXFx1MDAyNmNsb25lZCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xMjk2LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE0OjIzOjA0LjQ5OTY2MzA1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4Njk3ODM5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb24gVGFyZ2V0cyBpbiB0aGUgQlBGIFZlcmlmaWVyL0pJVCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBvcHRpbWl6aW5nIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVC4gVGhlIGNvcmUgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgLCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLCBhbmQgYGJwZl9jaGVja2AuIFRoZXNlIGFyZSB0aGUga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIGBicGZfY2hlY2tgIGlzIHRvbyBicm9hZCB0byBiZSBhIHdvcnRod2hpbGUgdGFyZ2V0LiBJdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBzbyBpdCBtaWdodCBiZSBoZWF2aWx5IHVzZWQsIG1ha2luZyBnYWlucyB0aGVyZSBkaWZmaWN1bHQuIEluc3RlYWQsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIG90aGVycy5cblxuVGhlIG1vcmUgcHJvbWlzaW5nIGZ1bmN0aW9ucyBhcmUgYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCwgYGJwZl9qaXRfc3VicHJvZ3NgLCBgYnBmX2ZpeHVwX2NhbGxfYXJnc2AsIGFuZCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGlkZWFsIGNhbmRpZGF0ZXMgZm9yIHRoaXMuXG5cbkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzIHRvIG1ha2Ugc3VyZSBgQlBGX0pJVGAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgYSBwcmlvcml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNDoyMzoxMS4zNjk0NTIwNDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MzEwODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTQ6MjM6MTMuODMyNTY3NTU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNTM2MDAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQlBGIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGNoZWNraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgdGhlIHByaW1hcnkgZmxhZ3MgbWVudGlvbmVkLCB3aXRoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRob3NlIGNvbmZpZ3MgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIGFuZCBga2VybmVsL2JwZi9jb3JlLmNgIHJlc3BlY3RpdmVseS4gSSBhbHNvIG5vdGUgdGhhdCBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBpcyB1c2VkIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfZml4dXBfY2FsbF9hcmdzYCwgYW5kIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAuIGBicGZfY2hlY2tgLCB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnQsIGlzIGFsc28gdG91Y2hlZCwgYnV0IGl0J3MgcHJvYmFibHkgdG9vIGdlbmVyYWwgc2luY2UgaXQncyBvbmx5IG1vZGlmaWVkIGZvciBgZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuYC4gSSB0aGluayBJJ2xsIGZvY3VzIG9uIHRob3NlIGZpeHVwIGFuZCBKSVQgZnVuY3Rpb25zIGZvciBub3cuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCBpcyBleHBvcnRlZCBvciBqdXN0IGEgZ2xvYmFsLiBUaGF0J2xsIGluZm9ybSBob3cgZGlyZWN0bHkgaXQncyBiZWluZyB1c2VkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNDoyMzoxOS4yNDc5MzE0NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5MTExNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9Mzc0PXN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNDQwLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NDQxOnZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNDQyLXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NDU1PXN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQ2My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ2NDpcXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQ2NS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDA2MD1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM3MC1cXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM3MTpcXHRcXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM3Mi1cXHR2ZnJlZShlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNDoyMzoxOS44MTcwNDk2ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjkyNTY0NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBGaXhlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBnbG9iYWwgY2hhbmdlLCBpbXBhY3RpbmcgYm90aCBgZml4dXBzLmNgIGFuZCBgdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgY29uY2VybiBpcyB0aGF0IGl0IHRvdWNoZXMgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSwgc28gaXQgbmVlZHMgY2FyZWZ1bCByZXZpZXcuIEknbSBub3RpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpdCdzIG1vZGlmeWluZzogYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCwgYGJwZl9qaXRfc3VicHJvZ3NgLCBgYnBmX2ZpeHVwX2NhbGxfYXJnc2AsIGFuZCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgcGFydHMgb2YgaG93IHdlIGhhbmRsZSBjb25zdGFudCBibGluZGluZywgc3VicHJvZ3JhbSBKSVR0aW5nLCBhbmQgb3ZlcmFsbCBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YS5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBwYXRjaCBsb29rcyBmdW5jdGlvbmFsLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgaW5zbl9hdXhfZGF0YWAgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSB0aGUgaW50cm9kdWN0aW9uIG9mIGBpbnNuX2F1eF9kYXRhX2xlbmAgYW5kIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQsIHNlZW0gdG8gYmUgY29ycmVjdGx5IGFkZHJlc3NpbmcgdGhlIGlzc3Vlcy4gVGhpcyBtZWFucyBpdCAqZGVmaW5pdGVseSogbmVlZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduIHRvIHZhbGlkYXRlIGl0cyBzdGFiaWxpdHkuIFRoZSBjaGFuZ2VzIGltcGFjdCB0aGUgZnVuZGFtZW50YWwgbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uIGxvZ2ljIG9mIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgd2h5IEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBmb3IgdGhpcy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLiBJIGJyaWVmbHkgY29uc2lkZXJlZCB3aGV0aGVyIGBCUEZfSklUX0FMV0FZU19PTmAgbmVlZGVkIHNwZWNpYWwgY29uc2lkZXJhdGlvbiwgYnV0IHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBjb2RlIGJvdGggd2l0aGluIGFuZCBvdXRzaWRlIHRoZSBgI2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGJsb2NrLCBpdCBpcyBub3QgcmVxdWlyZWQgZm9yIHRlc3RpbmcuIEknbSBub3cgY2VydGFpbiB0aGF0IHNldHRpbmcgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGlzIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcuXG5cbkknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhpcywgc28gSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjYzLCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNDoyMzoyNi41MDk2MTY3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDMxNzM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICAgIFwiYnBmX2ppdF9zdWJwcm9nc1wiLFxuICAgIFwiYnBmX2ZpeHVwX2NhbGxfYXJnc1wiLFxuICAgIFwiYnBmX2NsZWFyX2luc25fYXV4X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIncyBoYW5kbGluZyBvZiBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKSBkdXJpbmcgY29uc3RhbnQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nLiBJdCBjaGFuZ2VzIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQgYW5kIGhvdyBhdXhpbGlhcnkgZGF0YSBpcyB0cmFja2VkIChpbnRyb2R1Y2luZyBgaW5zbl9hdXhfZGF0YV9sZW5gKSwgd2hpY2ggYWZmZWN0cyBjb3JlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfYmxpbmRfY29uc3RhbnRzXCIsXG4gICAgXCJicGZfaml0X3N1YnByb2dzXCIsXG4gICAgXCJicGZfZml4dXBfY2FsbF9hcmdzXCIsXG4gICAgXCJicGZfY2xlYXJfaW5zbl9hdXhfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlcidzIGhhbmRsaW5nIG9mIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApIGR1cmluZyBjb25zdGFudCBibGluZGluZyBhbmQgc3VicHJvZ3JhbSBKSVRpbmcuIEl0IGNoYW5nZXMgaG93IHRoZSBwcm9ncmFtIGlzIGNsb25lZCBhbmQgaG93IGF1eGlsaWFyeSBkYXRhIGlzIHRyYWNrZWQgKGludHJvZHVjaW5nIGBpbnNuX2F1eF9kYXRhX2xlbmApLCB3aGljaCBhZmZlY3RzIGNvcmUgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 13:58:18 +0000 UTC FinishedAt: 2026-07-29 14:23:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "fdec474c65fd35d5a6e1497ed50a9f98c07192f0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "764e9c2e-c958-464d-bd2d-8e864e1bc0bd" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_blind_constants", "bpf_jit_subprogs", "bpf_fixup_call_args", "bpf_clear_insn_aux_data" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2JsaW5kX2NvbnN0YW50cyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2JwZl9maXh1cF9jYWxsX2FyZ3MmIzM0OywKICAgICYjMzQ7YnBmX2NsZWFyX2luc25fYXV4X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyJiMzOTtzIGhhbmRsaW5nIG9mIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApIGR1cmluZyBjb25zdGFudCBibGluZGluZyBhbmQgc3VicHJvZ3JhbSBKSVRpbmcuIEl0IGNoYW5nZXMgaG93IHRoZSBwcm9ncmFtIGlzIGNsb25lZCBhbmQgaG93IGF1eGlsaWFyeSBkYXRhIGlzIHRyYWNrZWQgKGludHJvZHVjaW5nIGBpbnNuX2F1eF9kYXRhX2xlbmApLCB3aGljaCBhZmZlY3RzIGNvcmUgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjVkYzJjZjM5Y2VkMjE4NTNiODczMTQwNjgyZmI3YmZiODUwNTg3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE0OjIyOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCA2ODJjMmNkM2I4NDQzLi5jZGQ1MDA0OWEwYzE0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTk0OCw2ICYjNDM7OTQ4LDcgQEAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYge1xuIFx0Ym9vbCBzZWVuX2RpcmVjdF93cml0ZTtcbiBcdGJvb2wgc2Vlbl9leGNlcHRpb247XG4gXHRib29sIHNpZ25hdHVyZTtcbiYjNDM7XHR1MzIgaW5zbl9hdXhfZGF0YV9sZW47XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4X2RhdGE7IC8qIGFycmF5IG9mIHBlci1pbnNuIHN0YXRlICovXG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqcHJldl9saW5mbztcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nIGxvZztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uMmQxYWEwNjI1NjZjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMjExLDI1ICYjNDM7MTIxMSwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcbiB7XG4gXHRyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApO1xuIH1cbi1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KVxuLXtcbi19XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIGludCBicGZfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGNudCk7XG5AQCAtMTM2OSw3ICYjNDM7MTM1Niw4IEBAIGludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuIFxuIGNvbnN0IGNoYXIgKmJwZl9qaXRfZ2V0X3Byb2dfbmFtZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuIFxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiYjNDM7aW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuJiM0MztcdFx0XHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZCk7XG4gdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5AQCAtMTUyMSw5ICYjNDM7MTUwOSwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4gfVxuIFxuIHN0YXRpYyBpbmxpbmVcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7aW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuJiM0MztcdFx0XHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZClcbiB7XG4tXHRyZXR1cm4gcHJvZztcbiYjNDM7XHQqY2xvbmVkID0gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmFiNWRhM2ZmOTQxYWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTY0LDI3ICYjNDM7MTU2NCwzNCBAQCB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpXG4gICogTm93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIGJsaW5kIHRoZSBtYWluIHByb2cgYW5kIG11c3QgYmUgaW52b2tlZCBvbmx5IHdoZW5cbiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLlxuICAqL1xuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXG4mIzQzO1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZywgKnRtcDtcbiBcdGludCBpbnNuX2RlbHRhLCBpbnNuX2NudDtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcbiBcdGludCBpLCByZXdyaXR0ZW47XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gcHJvZykpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcdCpjbG9uZWQgPSBmYWxzZTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gKnBwcm9nKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Y2xvbmUgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUocHJvZywgR0ZQX1VTRVIpO1xuLVx0aWYgKCFjbG9uZSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZztcbiYjNDM7XHQvKiBvbmx5IGNsb25lIHRoZSBwcm9nIHdoZW4gd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgKi9cbiYjNDM7XHRpZiAoY2xvbmVfbmVlZGVkKSB7XG4mIzQzO1x0XHRwcm9nID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKG9yaWdfcHJvZywgR0ZQX1VTRVIpO1xuJiM0MztcdFx0aWYgKCFwcm9nKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXG4tXHRpZiAoZW52KVxuLVx0XHRlbnYtXHUwMDNlcHJvZyA9IGNsb25lO1xuJiM0MztcdFx0KmNsb25lZCA9IHRydWU7XG4mIzQzO1x0XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xuJiM0MztcdFx0aWYgKGVudilcbiYjNDM7XHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nO1xuJiM0MztcdH1cbiBcbi1cdGluc25fY250ID0gY2xvbmUtXHUwMDNlbGVuO1xuLVx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaTtcbiYjNDM7XHRpbnNuX2NudCA9IHByb2ctXHUwMDNlbGVuO1xuJiM0MztcdGluc24gPSBwcm9nLVx1MDAzZWluc25zaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkge1xuQEAgLTE2MDUsNDIgJiM0MzsxNjEyLDQ5IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXG4gXHRcdCAgICBpbnNuWzFdLmNvZGUgPT0gMClcbiBcdFx0XHRtZW1jcHkoYXV4LCBpbnNuLCBzaXplb2YoYXV4KSk7XG4gXG4tXHRcdHJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZixcbi1cdFx0XHRcdFx0XHRjbG9uZS1cdTAwM2VhdXgtXHUwMDNldmVyaWZpZXJfemV4dCk7XG4mIzQzO1x0XHRyZXdyaXR0ZW4gPSBicGZfaml0X2JsaW5kX2luc24oaW5zbiwgYXV4LCBpbnNuX2J1ZmYsIHByb2ctXHUwMDNlYXV4LVx1MDAzZXZlcmlmaWVyX3pleHQpO1xuIFx0XHRpZiAoIXJld3JpdHRlbilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGVudilcbiBcdFx0XHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFx0XHRlbHNlXG4tXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKGNsb25lLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4mIzQzO1x0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG4gXHRcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XG4tXHRcdFx0aWYgKGVudilcbi1cdFx0XHRcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cbi1cdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbi1cdFx0XHQvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LVx1MDAzZXByb2cgZHVyaW5nXG4tXHRcdFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cbi1cdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XG4tXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRcdFx0aWYgKCpjbG9uZWQpIHtcbiYjNDM7XHRcdFx0XHQvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi9cbiYjNDM7XHRcdFx0XHQqcHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHRcdFx0aWYgKGVudilcbiYjNDM7XHRcdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xuJiM0MztcdFx0XHRcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXHUwMDNlcHJvZyBkdXJpbmdcbiYjNDM7XHRcdFx0XHQgKiByZWFsbG9jIGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgc28gd2UgbmVlZCB0b1xuJiM0MztcdFx0XHRcdCAqIGZpeCBpdCB1cCBoZXJlIG9uIGVycm9yLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xuJiM0MztcdFx0XHRcdCpwcHJvZyA9IHByb2c7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcbiBcdFx0fVxuIFxuLVx0XHRjbG9uZSA9IHRtcDtcbiYjNDM7XHRcdHByb2cgPSB0bXA7XG4gXHRcdGluc25fZGVsdGEgPSByZXdyaXR0ZW4gLSAxO1xuIFxuIFx0XHRpZiAoZW52KVxuLVx0XHRcdGVudi1cdTAwM2Vwcm9nID0gY2xvbmU7XG4mIzQzO1x0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbiBcbiBcdFx0LyogV2FsayBuZXcgcHJvZ3JhbSBhbmQgc2tpcCBpbnNucyB3ZSBqdXN0IGluc2VydGVkLiAqL1xuLVx0XHRpbnNuID0gY2xvbmUtXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgaW5zbl9kZWx0YTtcbiYjNDM7XHRcdGluc24gPSBwcm9nLVx1MDAzZWluc25zaSAmIzQzOyBpICYjNDM7IGluc25fZGVsdGE7XG4gXHRcdGluc25fY250ICYjNDM7PSBpbnNuX2RlbHRhO1xuIFx0XHRpICAgICAgICAmIzQzOz0gaW5zbl9kZWx0YTtcbiBcdH1cbiBcbi1cdGNsb25lLVx1MDAzZWJsaW5kZWQgPSAxO1xuLVx0cmV0dXJuIGNsb25lO1xuJiM0MztcdHByb2ctXHUwMDNlYmxpbmRlZCA9IDE7XG4mIzQzO1x0KnBwcm9nID0gcHJvZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIGJvb2wgYnBmX2luc25faXNfaW5kaXJlY3RfdGFyZ2V0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbkBAIC0yNjMwLDQ5ICYjNDM7MjY0NCwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcbiBcdHJldHVybiBzZWxlY3RfaW50ZXJwcmV0ZXI7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIGppdF9uZWVkZWQpXG4ge1xuICNpZmRlZiBDT05GSUdfQlBGX0pJVFxuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuIFxuIFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxuIFx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuIFxuLVx0aWYgKGVudikge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXG4tXHRcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcbi1cdFx0ICogb24gZmFpbHVyZS5cbi1cdFx0ICovXG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KVxuLVx0XHRcdHJldHVybiBwcm9nO1xuLVx0fVxuLVxuIFx0b3JpZ19wcm9nID0gcHJvZztcbi1cdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0Lypcbi1cdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxuLVx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXG4tXHQgKi9cbi1cdGlmIChJU19FUlIocHJvZykpXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4mIzQzO1x0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhaml0X25lZWRlZCwgXHUwMDI2Y2xvbmVkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi1cdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbi1cdFx0aWYgKGVudilcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0cmV0dXJuIHByb2c7XG4mIzQzO1x0aWYgKGNsb25lZCkge1xuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbiYjNDM7XHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4mIzQzO1x0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuLVxuLW91dF9yZXN0b3JlOlxuLVx0cHJvZyA9IG9yaWdfcHJvZztcbi1cdGlmIChlbnYpXG4tXHRcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcbiYjNDM7b3V0OlxuICNlbmRpZlxuIFx0cmV0dXJuIHByb2c7XG4gfVxuQEAgLTI3MDIsNyAmIzQzOzI3MDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XG4gXHRcdGlmICgqZXJyKVxuIFx0XHRcdHJldHVybiBmcDtcbiBcbi1cdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcbiYjNDM7XHRcdGZwID0gYnBmX3Byb2dfaml0X2NvbXBpbGUoZW52LCBmcCwgaml0X25lZWRlZCk7XG4gXHRcdGJwZl9wcm9nX2ppdF9hdHRlbXB0X2RvbmUoZnApO1xuIFx0XHRpZiAoIWZwLVx1MDAzZWppdGVkIFx1MDAyNlx1MDAyNiBqaXRfbmVlZGVkKSB7XG4gXHRcdFx0KmVyciA9IC1FTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggYTBiZGRhZGE3OTY0ZS4uNmRhMGY4ZDBiNzYxYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC0xNzQsNiAmIzQzOzE3NCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoY250ID09IDEpXG4gXHRcdHJldHVybjtcbiBcdHByb2dfbGVuID0gbmV3X3Byb2ctXHUwMDNlbGVuO1xuJiM0MztcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IHByb2dfbGVuO1xuIFxuIFx0bWVtbW92ZShkYXRhICYjNDM7IG9mZiAmIzQzOyBjbnQgLSAxLCBkYXRhICYjNDM7IG9mZixcbiBcdFx0c2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSkgKiAocHJvZ19sZW4gLSBvZmYgLSBjbnQgJiM0MzsgMSkpO1xuQEAgLTQ0MCw3ICYjNDM7NDQxLDYgQEAgc3RhdGljIGludCBicGZfYWRqX2xpbmZvX2FmdGVyX3JlbW92ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4X2RhdGEgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YTtcbi1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRpbnQgZW5kID0gc3RhcnQgJiM0MzsgbGVuO1xuIFx0aW50IGk7XG4gXG5AQCAtNDQ5LDkgJiM0Mzs0NDksNiBAQCB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbilcbiBcdFx0XHRrdmZyZWUoYXV4X2RhdGFbaV0uanQpO1xuIFx0XHRcdGF1eF9kYXRhW2ldLmp0ID0gTlVMTDtcbiBcdFx0fVxuLVxuLVx0XHRpZiAoYnBmX2lzX2xkaW1tNjQoXHUwMDI2aW5zbnNbaV0pKVxuLVx0XHRcdGkmIzQzOyYjNDM7O1xuIFx0fVxuIH1cbiBcbkBAIC00NjQsNyAmIzQzOzQ2MSw2IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4gXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWF1eCkpXG4gXHRcdGJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpO1xuIFxuLVx0LyogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYnBmX3JlbW92ZV9pbnNucywgYXMgaXQgdXNlcyBwcm9nLVx1MDAzZWluc25zaSAqL1xuIFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCBvZmYsIGNudCk7XG4gXG4gXHRlcnIgPSBicGZfcmVtb3ZlX2luc25zKGVudi1cdTAwM2Vwcm9nLCBvZmYsIGNudCk7XG5AQCAtNDgzLDYgJiM0Mzs0NzksNyBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFxuIFx0bWVtbW92ZShhdXhfZGF0YSAmIzQzOyBvZmYsXHRhdXhfZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250LFxuIFx0XHRzaXplb2YoKmF1eF9kYXRhKSAqIChvcmlnX3Byb2dfbGVuIC0gb2ZmIC0gY250KSk7XG4mIzQzO1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuIC09IGNudDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05OTksMzIgJiM0Mzs5OTYsMTQgQEAgc3RhdGljIHUzMiAqYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIHN0YXRpYyB2b2lkIGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiAqb3JpZ19zdGFydHMpXG4ge1xuJiM0MztcdGlmICghb3JpZ19zdGFydHMpXG4mIzQzO1x0XHRyZXR1cm47XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpJiM0MzsmIzQzOylcbiBcdFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydCA9IG9yaWdfc3RhcnRzW2ldO1xuIFx0LyogcmVzdG9yZSB0aGUgc3RhcnQgb2YgZmFrZSAmIzM5O2V4aXQmIzM5OyBzdWJwcm9nIGFzIHdlbGwgKi9cbiBcdGVudi1cdTAwM2VzdWJwcm9nX2luZm9bZW52LVx1MDAzZXN1YnByb2dfY250XS5zdGFydCA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiB9XG4gXG4tc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi17XG4tXHRzaXplX3Qgc2l6ZTtcbi1cdHZvaWQgKm5ld19hdXg7XG4tXG4tXHRzaXplID0gYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuKTtcbi1cdG5ld19hdXggPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi1cdGlmIChuZXdfYXV4KVxuLVx0XHRtZW1jcHkobmV3X2F1eCwgZW52LVx1MDAzZWluc25fYXV4X2RhdGEsIHNpemUpO1xuLVx0cmV0dXJuIG5ld19hdXg7XG4tfVxuLVxuLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpXG4te1xuLVx0LyogdGhlIGV4cGFuZGVkIGVsZW1lbnRzIGFyZSB6ZXJvLWZpbGxlZCwgc28gbm8gc3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZCAqL1xuLVx0dmZyZWUoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpO1xuLVx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGEgPSBvcmlnX2luc25fYXV4O1xuLX1cbi1cbiBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cdTAwM2Vwcm9nLCAqKmZ1bmMsICp0bXA7XG5AQCAtMTI5Niw1NyAmIzQzOzEyNzUsNDcgQEAgc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdGludCBlcnIsIGk7XG4tXHRib29sIGJsaW5kZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcbiBcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZztcbi1cdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eDtcbi1cdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cztcbiYjNDM7XHR1MzIgKm9yaWdfc3VicHJvZ19zdGFydHMgPSBOVUxMO1xuJiM0MztcdGJvb2wgY2xvbmVkID0gZmFsc2U7XG4gXG4gXHRpZiAoZW52LVx1MDAzZXN1YnByb2dfY250IFx1MDAzYz0gMSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRwcm9nID0gb3JpZ19wcm9nID0gZW52LVx1MDAzZXByb2c7XG4gXHRpZiAoYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSkge1xuLVx0XHRvcmlnX2luc25fYXV4ID0gYnBmX2R1cF9pbnNuX2F1eF9kYXRhKGVudik7XG4tXHRcdGlmICghb3JpZ19pbnNuX2F1eCkge1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdFx0Z290byBvdXRfY2xlYW51cDtcbi1cdFx0fVxuLVx0XHRvcmlnX3N1YnByb2dfc3RhcnRzID0gYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhlbnYpO1xuLVx0XHRpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHtcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRcdGdvdG8gb3V0X2NsZWFudXA7XG4mIzQzO1x0XHRpZiAoIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4mIzQzO1x0XHRcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XG4mIzQzO1x0XHRcdGlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykge1xuJiM0MztcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdFx0Z290byBvdXRfY2xlYW51cDtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4tXHRcdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0XHRpZiAoSVNfRVJSKHByb2cpKSB7XG4tXHRcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0XHRwcm9nID0gb3JpZ19wcm9nO1xuJiM0MztcdFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQsIFx1MDAyNmNsb25lZCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHRcdH1cbi1cdFx0YmxpbmRlZCA9IHRydWU7XG4gXHR9XG4gXG4gXHRlcnIgPSBqaXRfc3VicHJvZ3MoZW52KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2ppdF9lcnI7XG4gXG4tXHRpZiAoYmxpbmRlZCkge1xuJiM0MztcdGlmIChjbG9uZWQpIHtcbiBcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbiBcdFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xuLVx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuIFxuIG91dF9qaXRfZXJyOlxuLVx0aWYgKGJsaW5kZWQpIHtcbiYjNDM7XHRpZiAoY2xvbmVkKSB7XG4gXHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4gXHRcdC8qIHJvbGwgYmFjayB0byB0aGUgY2xlYW4gb3JpZ2luYWwgcHJvZyAqL1xuIFx0XHRwcm9nID0gZW52LVx1MDAzZXByb2cgPSBvcmlnX3Byb2c7XG4gXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoZXJyICE9IC1FRkFVTFQpIHtcbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXZSB3aWxsIGZhbGwgYmFjayB0byBpbnRlcnByZXRlciBtb2RlIHdoZW4gZXJyIGlzIG5vdCAtRUZBVUxULCBiZWZvcmVcbiBcdFx0XHQgKiB0aGF0LCBpbnNuLVx1MDAzZW9mZiBhbmQgaW5zbi1cdTAwM2VpbW0gc2hvdWxkIGJlIHJlc3RvcmVkIHRvIHRoZWlyIG9yaWdpbmFsXG5AQCAtMTM2NCw3ICYjNDM7MTMzMyw2IEBAIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gb3V0X3Jlc3RvcmU6XG4gXHRicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9yaWdfc3VicHJvZ19zdGFydHMpO1xuLVx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xuIFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xuIG91dF9jbGVhbnVwOlxuIFx0LyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi9cbkBAIC0xMzc2LDggJiM0MzsxMzQ0LDcgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiAjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxuLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2c7XG4tXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBwcm9nLVx1MDAzZWluc25zaTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2luc24gKmluc247XG4gXHRpbnQgZGVwdGg7XG4gI2VuZGlmXG4gXHRpbnQgaSwgZXJyID0gMDtcbkBAIC0xNDAzLDcgJiM0MzsxMzcwLDcgQEAgaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuICNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OXG4tXHRpZiAocHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbiYjNDM7XHRpZiAoZW52LVx1MDAzZXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4gXHRcdHZlcmJvc2UoZW52LCBcJiMzNDtwcm9ncmFtIHJlcXVpcmVzIEJQRiBKSVQgY29tcGlsZXIgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbkBAIC0xNDIwLDcgJiM0MzsxMzg3LDcgQEAgaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3RhaWxfY2FsbHMgYXJlIG5vdCBhbGxvd2VkIGluIG5vbi1KSVRlZCBwcm9ncmFtcyB3aXRoIGJwZi10by1icGYgY2FsbHNcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByb2ctXHUwMDNlbGVuOyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwLCBpbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpOyBpIFx1MDAzYyBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47IGkmIzQzOyYjNDM7LCBpbnNuJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XG4gXHRcdFx0LyogV2hlbiBKSVQgZmFpbHMgdGhlIHByb2dzIHdpdGggY2FsbGJhY2sgY2FsbHNcbiBcdFx0XHQgKiBoYXZlIHRvIGJlIHJlamVjdGVkLCBzaW5jZSBpbnRlcnByZXRlciBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoZW0geWV0LlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZTZmMzVmNGU3MTViNi4uZTMxYzQxMjAzYmRhZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjAxMjIsNyAmIzQzOzIwMTIyLDcgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRpZiAoIWlzX3ByaXYpXG4gXHRcdG11dGV4X2xvY2soXHUwMDI2YnBmX3ZlcmlmaWVyX2xvY2spO1xuIFxuLVx0bGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuJiM0MztcdGxlbiA9IGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbjtcbiBcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhID1cbiBcdFx0X192bWFsbG9jKGFycmF5X3NpemUoc2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSksIGxlbiksXG4gXHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcbkBAIC0yMDM2OCw3ICYjNDM7MjAzNjgsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdHJlbGVhc2VfYnRmcyhlbnYpO1xuIGVycl9mcmVlX2VudjpcbiBcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSlcbi1cdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4pO1xuJiM0MztcdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4pO1xuIFx0dmZyZWUoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpO1xuIFx0a3ZmcmVlKGVudi1cdTAwM2VmZF9hcnJheSk7XG4gXHRicGZfc3RhY2tfbGl2ZW5lc3NfZnJlZShlbnYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ppdF9ibGluZF9jb25zdGFudHMmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdWJwcm9ncyYjMzQ7LAogICAgJiMzNDticGZfZml4dXBfY2FsbF9hcmdzJiMzNDssCiAgICAmIzM0O2JwZl9jbGVhcl9pbnNuX2F1eF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciYjMzk7cyBoYW5kbGluZyBvZiBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKSBkdXJpbmcgY29uc3RhbnQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nLiBJdCBjaGFuZ2VzIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQgYW5kIGhvdyBhdXhpbGlhcnkgZGF0YSBpcyB0cmFja2VkIChpbnRyb2R1Y2luZyBgaW5zbl9hdXhfZGF0YV9sZW5gKSwgd2hpY2ggYWZmZWN0cyBjb3JlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1ZGMyY2YzOWNlZDIxODUzYjg3MzE0MDY4MmZiN2JmYjg1MDU4NzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxNDoyMjo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IDY4MmMyY2QzYjg0NDMuLmNkZDUwMDQ5YTBjMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtOTQ4LDYgJiM0Mzs5NDgsNyBAQCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7CiAJYm9vbCBzZWVuX2RpcmVjdF93cml0ZTsKIAlib29sIHNlZW5fZXhjZXB0aW9uOwogCWJvb2wgc2lnbmF0dXJlOwomIzQzOwl1MzIgaW5zbl9hdXhfZGF0YV9sZW47CiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eF9kYXRhOyAvKiBhcnJheSBvZiBwZXItaW5zbiBzdGF0ZSAqLwogCWNvbnN0IHN0cnVjdCBicGZfbGluZV9pbmZvICpwcmV2X2xpbmZvOwogCXN0cnVjdCBicGZfdmVyaWZpZXJfbG9nIGxvZzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDMyZDUyOTdjNTU3ZTUuLjJkMWFhMDYyNTY2YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTIxMSwyNSAmIzQzOzEyMTEsMTIgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9zaW5nbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAogc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTsKLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwotdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAogCQkJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbikKIHsKIAlyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApOwogfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkJCSAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KQotewotfQogI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqLwogCiBpbnQgYnBmX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBjbnQpOwpAQCAtMTM2OSw3ICYjNDM7MTM1Niw4IEBAIGludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLAogCiBjb25zdCBjaGFyICpicGZfaml0X2dldF9wcm9nX25hbWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKTsKIAotc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpOwomIzQzO2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZywKJiM0MzsJCQkgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZCk7CiB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCkBAIC0xNTIxLDkgJiM0MzsxNTA5LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19uZWVkX2JsaW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKIH0KIAogc3RhdGljIGlubGluZQotc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7aW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLAomIzQzOwkJCSAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKQogewotCXJldHVybiBwcm9nOwomIzQzOwkqY2xvbmVkID0gZmFsc2U7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcikKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmMKaW5kZXggZTIwNzY2NjdiMjQ1MS4uYWI1ZGEzZmY5NDFhYSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmMKQEAgLTE1NjQsMjcgJiM0MzsxNTY0LDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcikKICAqIE5vdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB0byBibGluZCB0aGUgbWFpbiBwcm9nIGFuZCBtdXN0IGJlIGludm9rZWQgb25seSB3aGVuCiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLgogICovCi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csCiYjNDM7CQkJICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpCiB7CiAJc3RydWN0IGJwZl9pbnNuIGluc25fYnVmZlsxNl0sIGF1eFsyXTsKLQlzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2cgKnByb2csICpvcmlnX3Byb2csICp0bXA7CiAJaW50IGluc25fZGVsdGEsIGluc25fY250OwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbjsKIAlpbnQgaSwgcmV3cml0dGVuOwogCi0JaWYgKFdBUk5fT05fT05DRShlbnYgJmFtcDsmYW1wOyBlbnYtJmd0O3Byb2cgIT0gcHJvZykpCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwkqY2xvbmVkID0gZmFsc2U7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoZW52ICZhbXA7JmFtcDsgZW52LSZndDtwcm9nICE9ICpwcHJvZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAotCWNsb25lID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKHByb2csIEdGUF9VU0VSKTsKLQlpZiAoIWNsb25lKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJcHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZzsKJiM0MzsJLyogb25seSBjbG9uZSB0aGUgcHJvZyB3aGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyICovCiYjNDM7CWlmIChjbG9uZV9uZWVkZWQpIHsKJiM0MzsJCXByb2cgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUob3JpZ19wcm9nLCBHRlBfVVNFUik7CiYjNDM7CQlpZiAoIXByb2cpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqLwotCWlmIChlbnYpCi0JCWVudi0mZ3Q7cHJvZyA9IGNsb25lOwomIzQzOwkJKmNsb25lZCA9IHRydWU7CiYjNDM7CQkvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqLwomIzQzOwkJaWYgKGVudikKJiM0MzsJCQllbnYtJmd0O3Byb2cgPSBwcm9nOwomIzQzOwl9CiAKLQlpbnNuX2NudCA9IGNsb25lLSZndDtsZW47Ci0JaW5zbiA9IGNsb25lLSZndDtpbnNuc2k7CiYjNDM7CWluc25fY250ID0gcHJvZy0mZ3Q7bGVuOwomIzQzOwlpbnNuID0gcHJvZy0mZ3Q7aW5zbnNpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKIAkJaWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkgewpAQCAtMTYwNSw0MiAmIzQzOzE2MTIsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnAKIAkJICAgIGluc25bMV0uY29kZSA9PSAwKQogCQkJbWVtY3B5KGF1eCwgaW5zbiwgc2l6ZW9mKGF1eCkpOwogCi0JCXJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZiwKLQkJCQkJCWNsb25lLSZndDthdXgtJmd0O3ZlcmlmaWVyX3pleHQpOwomIzQzOwkJcmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLCBwcm9nLSZndDthdXgtJmd0O3ZlcmlmaWVyX3pleHQpOwogCQlpZiAoIXJld3JpdHRlbikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChlbnYpCiAJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pOwogCQllbHNlCi0JCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTsKJiM0MzsJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUocHJvZywgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pOwogCiAJCWlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7Ci0JCQlpZiAoZW52KQotCQkJCS8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi8KLQkJCQllbnYtJmd0O3Byb2cgPSBwcm9nOwotCQkJLyogUGF0Y2hpbmcgbWF5IGhhdmUgcmVwb2ludGVkIGF1eC0mZ3Q7cHJvZyBkdXJpbmcKLQkJCSAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvCi0JCQkgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci4KLQkJCSAqLwotCQkJYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgY2xvbmUpOwotCQkJcmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJCQlpZiAoKmNsb25lZCkgewomIzQzOwkJCQkvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi8KJiM0MzsJCQkJKnBwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJCQlpZiAoZW52KQomIzQzOwkJCQkJZW52LSZndDtwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJCQkvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LSZndDtwcm9nIGR1cmluZwomIzQzOwkJCQkgKiByZWFsbG9jIGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgc28gd2UgbmVlZCB0bwomIzQzOwkJCQkgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJLyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqLwomIzQzOwkJCQkqcHByb2cgPSBwcm9nOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gSVNfRVJSKHRtcCkgPyBQVFJfRVJSKHRtcCkgOiAtRU5PTUVNOwogCQl9CiAKLQkJY2xvbmUgPSB0bXA7CiYjNDM7CQlwcm9nID0gdG1wOwogCQlpbnNuX2RlbHRhID0gcmV3cml0dGVuIC0gMTsKIAogCQlpZiAoZW52KQotCQkJZW52LSZndDtwcm9nID0gY2xvbmU7CiYjNDM7CQkJZW52LSZndDtwcm9nID0gcHJvZzsKIAogCQkvKiBXYWxrIG5ldyBwcm9ncmFtIGFuZCBza2lwIGluc25zIHdlIGp1c3QgaW5zZXJ0ZWQuICovCi0JCWluc24gPSBjbG9uZS0mZ3Q7aW5zbnNpICYjNDM7IGkgJiM0MzsgaW5zbl9kZWx0YTsKJiM0MzsJCWluc24gPSBwcm9nLSZndDtpbnNuc2kgJiM0MzsgaSAmIzQzOyBpbnNuX2RlbHRhOwogCQlpbnNuX2NudCAmIzQzOz0gaW5zbl9kZWx0YTsKIAkJaSAgICAgICAgJiM0Mzs9IGluc25fZGVsdGE7CiAJfQogCi0JY2xvbmUtJmd0O2JsaW5kZWQgPSAxOwotCXJldHVybiBjbG9uZTsKJiM0MzsJcHJvZy0mZ3Q7YmxpbmRlZCA9IDE7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBib29sIGJwZl9pbnNuX2lzX2luZGlyZWN0X3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCkBAIC0yNjMwLDQ5ICYjNDM7MjY0NCwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCkKIAlyZXR1cm4gc2VsZWN0X2ludGVycHJldGVyOwogfQogCi1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkJICAgICBib29sIGppdF9uZWVkZWQpCiB7CiAjaWZkZWYgQ09ORklHX0JQRl9KSVQKJiM0MzsJaW50IGVycjsKJiM0MzsJYm9vbCBjbG9uZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZzsKLQlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7CiAKIAlpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpCiAJCXJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7CiAKLQlpZiAoZW52KSB7Ci0JCS8qCi0JCSAqIElmIGVudiBpcyBub3QgTlVMTCwgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBlbmQgb2YgYnBmX2NoZWNrKCksIGF0IHRoaXMKLQkJICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZAotCQkgKiBvbiBmYWlsdXJlLgotCQkgKi8KLQkJb3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpOwotCQlpZiAoIW9yaWdfaW5zbl9hdXgpCi0JCQlyZXR1cm4gcHJvZzsKLQl9Ci0KIAlvcmlnX3Byb2cgPSBwcm9nOwotCXByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpOwotCS8qCi0JICogSWYgYmxpbmRpbmcgd2FzIHJlcXVlc3RlZCBhbmQgd2UgZmFpbGVkIGR1cmluZyBibGluZGluZywgd2UgbXVzdCBmYWxsCi0JICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuCi0JICovCi0JaWYgKElTX0VSUihwcm9nKSkKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCAmYW1wO3Byb2csICFqaXRfbmVlZGVkLCAmYW1wO2Nsb25lZCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAogCXByb2cgPSBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7Ci0JaWYgKHByb2ctJmd0O2ppdGVkKSB7Ci0JCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7Ci0JCWlmIChlbnYpCi0JCQl2ZnJlZShvcmlnX2luc25fYXV4KTsKLQkJcmV0dXJuIHByb2c7CiYjNDM7CWlmIChjbG9uZWQpIHsKJiM0MzsJCWlmIChwcm9nLSZndDtqaXRlZCkgewomIzQzOwkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiYjNDM7CQkJcHJvZyA9IG9yaWdfcHJvZzsKJiM0MzsJCX0KIAl9CiAKLQlicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpOwotCi1vdXRfcmVzdG9yZToKLQlwcm9nID0gb3JpZ19wcm9nOwotCWlmIChlbnYpCi0JCWJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTsKJiM0MztvdXQ6CiAjZW5kaWYKIAlyZXR1cm4gcHJvZzsKIH0KQEAgLTI3MDIsNyAmIzQzOzI3MDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0CiAJCWlmICgqZXJyKQogCQkJcmV0dXJuIGZwOwogCi0JCWZwID0gYnBmX3Byb2dfaml0X2NvbXBpbGUoZW52LCBmcCk7CiYjNDM7CQlmcCA9IGJwZl9wcm9nX2ppdF9jb21waWxlKGVudiwgZnAsIGppdF9uZWVkZWQpOwogCQlicGZfcHJvZ19qaXRfYXR0ZW1wdF9kb25lKGZwKTsKIAkJaWYgKCFmcC0mZ3Q7aml0ZWQgJmFtcDsmYW1wOyBqaXRfbmVlZGVkKSB7CiAJCQkqZXJyID0gLUVOT1RTVVBQOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmMKaW5kZXggYTBiZGRhZGE3OTY0ZS4uNmRhMGY4ZDBiNzYxYiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9maXh1cHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCkBAIC0xNzQsNiAmIzQzOzE3NCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKGNudCA9PSAxKQogCQlyZXR1cm47CiAJcHJvZ19sZW4gPSBuZXdfcHJvZy0mZ3Q7bGVuOwomIzQzOwllbnYtJmd0O2luc25fYXV4X2RhdGFfbGVuID0gcHJvZ19sZW47CiAKIAltZW1tb3ZlKGRhdGEgJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEsIGRhdGEgJiM0Mzsgb2ZmLAogCQlzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSAqIChwcm9nX2xlbiAtIG9mZiAtIGNudCAmIzQzOyAxKSk7CkBAIC00NDAsNyAmIzQzOzQ0MSw2IEBAIHN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKQogewogCXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4X2RhdGEgPSBlbnYtJmd0O2luc25fYXV4X2RhdGE7Ci0Jc3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbnNpOwogCWludCBlbmQgPSBzdGFydCAmIzQzOyBsZW47CiAJaW50IGk7CiAKQEAgLTQ0OSw5ICYjNDM7NDQ5LDYgQEAgdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pCiAJCQlrdmZyZWUoYXV4X2RhdGFbaV0uanQpOwogCQkJYXV4X2RhdGFbaV0uanQgPSBOVUxMOwogCQl9Ci0KLQkJaWYgKGJwZl9pc19sZGltbTY0KCZhbXA7aW5zbnNbaV0pKQotCQkJaSYjNDM7JiM0Mzs7CiAJfQogfQogCkBAIC00NjQsNyAmIzQzOzQ2MSw2IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpCiAJaWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtJmd0O3Byb2ctJmd0O2F1eCkpCiAJCWJwZl9wcm9nX29mZmxvYWRfcmVtb3ZlX2luc25zKGVudiwgb2ZmLCBjbnQpOwogCi0JLyogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYnBmX3JlbW92ZV9pbnNucywgYXMgaXQgdXNlcyBwcm9nLSZndDtpbnNuc2kgKi8KIAlicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTsKIAogCWVyciA9IGJwZl9yZW1vdmVfaW5zbnMoZW52LSZndDtwcm9nLCBvZmYsIGNudCk7CkBAIC00ODMsNiAmIzQzOzQ3OSw3IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpCiAKIAltZW1tb3ZlKGF1eF9kYXRhICYjNDM7IG9mZiwJYXV4X2RhdGEgJiM0Mzsgb2ZmICYjNDM7IGNudCwKIAkJc2l6ZW9mKCphdXhfZGF0YSkgKiAob3JpZ19wcm9nX2xlbiAtIG9mZiAtIGNudCkpOwomIzQzOwllbnYtJmd0O2luc25fYXV4X2RhdGFfbGVuIC09IGNudDsKIAogCXJldHVybiAwOwogfQpAQCAtOTk5LDMyICYjNDM7OTk2LDE0IEBAIHN0YXRpYyB1MzIgKmJwZl9kdXBfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAogc3RhdGljIHZvaWQgYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyICpvcmlnX3N0YXJ0cykKIHsKJiM0MzsJaWYgKCFvcmlnX3N0YXJ0cykKJiM0MzsJCXJldHVybjsKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IGVudi0mZ3Q7c3VicHJvZ19jbnQ7IGkmIzQzOyYjNDM7KQogCQllbnYtJmd0O3N1YnByb2dfaW5mb1tpXS5zdGFydCA9IG9yaWdfc3RhcnRzW2ldOwogCS8qIHJlc3RvcmUgdGhlIHN0YXJ0IG9mIGZha2UgJiMzOTtleGl0JiMzOTsgc3VicHJvZyBhcyB3ZWxsICovCiAJZW52LSZndDtzdWJwcm9nX2luZm9bZW52LSZndDtzdWJwcm9nX2NudF0uc3RhcnQgPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKIH0KIAotc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKLXsKLQlzaXplX3Qgc2l6ZTsKLQl2b2lkICpuZXdfYXV4OwotCi0Jc2l6ZSA9IGFycmF5X3NpemUoc2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSksIGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuKTsKLQluZXdfYXV4ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7Ci0JaWYgKG5ld19hdXgpCi0JCW1lbWNweShuZXdfYXV4LCBlbnYtJmd0O2luc25fYXV4X2RhdGEsIHNpemUpOwotCXJldHVybiBuZXdfYXV4OwotfQotCi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCSAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpCi17Ci0JLyogdGhlIGV4cGFuZGVkIGVsZW1lbnRzIGFyZSB6ZXJvLWZpbGxlZCwgc28gbm8gc3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZCAqLwotCXZmcmVlKGVudi0mZ3Q7aW5zbl9hdXhfZGF0YSk7Ci0JZW52LSZndDtpbnNuX2F1eF9kYXRhID0gb3JpZ19pbnNuX2F1eDsKLX0KLQogc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtJmd0O3Byb2csICoqZnVuYywgKnRtcDsKQEAgLTEyOTYsNTcgJiM0MzsxMjc1LDQ3IEBAIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCWludCBlcnIsIGk7Ci0JYm9vbCBibGluZGVkID0gZmFsc2U7CiAJc3RydWN0IGJwZl9pbnNuICppbnNuOwogCXN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZzsKLQlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7Ci0JdTMyICpvcmlnX3N1YnByb2dfc3RhcnRzOwomIzQzOwl1MzIgKm9yaWdfc3VicHJvZ19zdGFydHMgPSBOVUxMOwomIzQzOwlib29sIGNsb25lZCA9IGZhbHNlOwogCiAJaWYgKGVudi0mZ3Q7c3VicHJvZ19jbnQgJmx0Oz0gMSkKIAkJcmV0dXJuIDA7CiAKIAlwcm9nID0gb3JpZ19wcm9nID0gZW52LSZndDtwcm9nOwogCWlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7Ci0JCW9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTsKLQkJaWYgKCFvcmlnX2luc25fYXV4KSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfY2xlYW51cDsKLQkJfQotCQlvcmlnX3N1YnByb2dfc3RhcnRzID0gYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhlbnYpOwotCQlpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHsKLQkJCXZmcmVlKG9yaWdfaW5zbl9hdXgpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0X2NsZWFudXA7CiYjNDM7CQlpZiAoIXByb2ctJmd0O2ppdF9yZXF1aXJlZCkgewomIzQzOwkJCW9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7CiYjNDM7CQkJaWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7CiYjNDM7CQkJCWVyciA9IC1FTk9NRU07CiYjNDM7CQkJCWdvdG8gb3V0X2NsZWFudXA7CiYjNDM7CQkJfQogCQl9Ci0JCXByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpOwotCQlpZiAoSVNfRVJSKHByb2cpKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJcHJvZyA9IG9yaWdfcHJvZzsKJiM0MzsJCWVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgJmFtcDtwcm9nLCAhcHJvZy0mZ3Q7aml0X3JlcXVpcmVkLCAmYW1wO2Nsb25lZCk7CiYjNDM7CQlpZiAoZXJyKQogCQkJZ290byBvdXRfcmVzdG9yZTsKLQkJfQotCQlibGluZGVkID0gdHJ1ZTsKIAl9CiAKIAllcnIgPSBqaXRfc3VicHJvZ3MoZW52KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9qaXRfZXJyOwogCi0JaWYgKGJsaW5kZWQpIHsKJiM0MzsJaWYgKGNsb25lZCkgewogCQlicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpOwogCQlrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7Ci0JCXZmcmVlKG9yaWdfaW5zbl9hdXgpOwogCX0KIAogCXJldHVybiAwOwogCiBvdXRfaml0X2VycjoKLQlpZiAoYmxpbmRlZCkgewomIzQzOwlpZiAoY2xvbmVkKSB7CiAJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiAJCS8qIHJvbGwgYmFjayB0byB0aGUgY2xlYW4gb3JpZ2luYWwgcHJvZyAqLwogCQlwcm9nID0gZW52LSZndDtwcm9nID0gb3JpZ19wcm9nOwogCQlnb3RvIG91dF9yZXN0b3JlOwogCX0gZWxzZSB7Ci0JCWlmIChlcnIgIT0gLUVGQVVMVCkgewomIzQzOwkJaWYgKGVyciAhPSAtRUZBVUxUICZhbXA7JmFtcDsgIXByb2ctJmd0O2ppdF9yZXF1aXJlZCkgewogCQkJLyoKIAkJCSAqIFdlIHdpbGwgZmFsbCBiYWNrIHRvIGludGVycHJldGVyIG1vZGUgd2hlbiBlcnIgaXMgbm90IC1FRkFVTFQsIGJlZm9yZQogCQkJICogdGhhdCwgaW5zbi0mZ3Q7b2ZmIGFuZCBpbnNuLSZndDtpbW0gc2hvdWxkIGJlIHJlc3RvcmVkIHRvIHRoZWlyIG9yaWdpbmFsCkBAIC0xMzY0LDcgJiM0MzsxMzMzLDYgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAogb3V0X3Jlc3RvcmU6CiAJYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoZW52LCBvcmlnX3N1YnByb2dfc3RhcnRzKTsKLQlicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKGVudiwgb3JpZ19pbnNuX2F1eCk7CiAJa3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpOwogb3V0X2NsZWFudXA6CiAJLyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi8KQEAgLTEzNzYsOCAmIzQzOzEzNDQsNyBAQCBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIHsKICNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OCi0Jc3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LSZndDtwcm9nOwotCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IHByb2ctJmd0O2luc25zaTsKJiM0MzsJc3RydWN0IGJwZl9pbnNuICppbnNuOwogCWludCBkZXB0aDsKICNlbmRpZgogCWludCBpLCBlcnIgPSAwOwpAQCAtMTQwMyw3ICYjNDM7MTM3MCw3IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlyZXR1cm4gZXJyOwogCX0KICNpZm5kZWYgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OCi0JaWYgKHByb2ctJmd0O2ppdF9yZXF1aXJlZCkgewomIzQzOwlpZiAoZW52LSZndDtwcm9nLSZndDtqaXRfcmVxdWlyZWQpIHsKIAkJdmVyYm9zZShlbnYsICYjMzQ7cHJvZ3JhbSByZXF1aXJlcyBCUEYgSklUIGNvbXBpbGVyIGJ1dCBpdCBpcyBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE0MjAsNyAmIzQzOzEzODcsNyBAQCBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQl2ZXJib3NlKGVudiwgJiMzNDt0YWlsX2NhbGxzIGFyZSBub3QgYWxsb3dlZCBpbiBub24tSklUZWQgcHJvZ3JhbXMgd2l0aCBicGYtdG8tYnBmIGNhbGxzXG4mIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlmb3IgKGkgPSAwOyBpICZsdDsgcHJvZy0mZ3Q7bGVuOyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMCwgaW5zbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbnNpOyBpICZsdDsgZW52LSZndDtwcm9nLSZndDtsZW47IGkmIzQzOyYjNDM7LCBpbnNuJiM0MzsmIzQzOykgewogCQlpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7CiAJCQkvKiBXaGVuIEpJVCBmYWlscyB0aGUgcHJvZ3Mgd2l0aCBjYWxsYmFjayBjYWxscwogCQkJICogaGF2ZSB0byBiZSByZWplY3RlZCwgc2luY2UgaW50ZXJwcmV0ZXIgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGVtIHlldC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBlNmYzNWY0ZTcxNWI2Li5lMzFjNDEyMDNiZGFlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0yMDEyMiw3ICYjNDM7MjAxMjIsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwKIAlpZiAoIWlzX3ByaXYpCiAJCW11dGV4X2xvY2soJmFtcDticGZfdmVyaWZpZXJfbG9jayk7CiAKLQlsZW4gPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKJiM0MzsJbGVuID0gZW52LSZndDtpbnNuX2F1eF9kYXRhX2xlbiA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogCWVudi0mZ3Q7aW5zbl9hdXhfZGF0YSA9CiAJCV9fdm1hbGxvYyhhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBsZW4pLAogCQkJICBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTsKQEAgLTIwMzY4LDcgJiM0MzsyMDM2OCw3IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLAogCXJlbGVhc2VfYnRmcyhlbnYpOwogZXJyX2ZyZWVfZW52OgogCWlmIChlbnYtJmd0O2luc25fYXV4X2RhdGEpCi0JCWJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgMCwgZW52LSZndDtwcm9nLSZndDtsZW4pOwomIzQzOwkJYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtJmd0O2luc25fYXV4X2RhdGFfbGVuKTsKIAl2ZnJlZShlbnYtJmd0O2luc25fYXV4X2RhdGEpOwogCWt2ZnJlZShlbnYtJmd0O2ZkX2FycmF5KTsKIAlicGZfc3RhY2tfbGl2ZW5lc3NfZnJlZShlbnYpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjc1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBhbmQgSklUIEJsaW5kaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGJsaW5kaW5nIGxvZ2ljLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCwgd2hpY2ggbm93IHJldHVybnMgYW4gYGludGAgaW5zdGVhZCBvZiBhIGBzdHJ1Y3QgYnBmX3Byb2cgKmAuICBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCDigJMgdGhpcyBzdWdnZXN0cyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBibGluZGluZyBpcyBoYW5kbGVkLiBXZSYjMzk7cmUgYWxzbyBzZWVpbmcgbW9kaWZpY2F0aW9ucyBpbiBob3cgYGluc25fYXV4X2RhdGFgIGlzIG1hbmFnZWQgZHVyaW5nIGJsaW5kaW5nIGFuZCBKSVRpbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW5gIHRvIHRyYWNrIHRoZSBsZW5ndGggYW5kIHRoZSByZW1vdmFsIG9mIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbnMgKGBicGZfZHVwX2luc25fYXV4X2RhdGFgLCBgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YWApIHN0cm9uZ2x5IGltcGx5IGEgZm9jdXMgb24gZWZmaWNpZW5jeSBhbmQgcG90ZW50aWFsbHksIGFkZHJlc3NpbmcgYSBzdWJ0bGUgYnVnIG9yIHJhY2UgY29uZGl0aW9uLiBUaGUgY2hhbmdlIGluIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiBza2lwcGluZyBgbGRpbW02NGAgaW5zdHJ1Y3Rpb25zLCBhbHNvIHdhcnJhbnRzIGNsb3NlciBzY3J1dGlueS4KCk15IGZpcnN0IHRob3VnaHQgaXMsIHRoaXMgaXMga2VybmVsIGNvcmUsIGFuZCB0aGlzIGlzIHRvdWNoeS4gU3BlY2lmaWNhbGx5LCB0aGUgYXJlYXMgaXQmIzM5O3MgdG91Y2hpbmcsIGtlcm5lbC9icGYvZml4dXBzLmMgYW5kIGtlcm5lbC9icGYvY29yZS5jLiBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBhbmQgdGhlcmVmb3JlLCBoaWdoLXByaW9yaXR5IGZvciBmdXp6aW5nLgoKSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoZSBwYXRjaCB0b3VjaGVzLiBJIHNlZSBpdCBtb2RpZmllcyBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgLCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfZml4dXBfY2FsbF9hcmdzYCwgYW5kIGBicGZfY2hlY2tgLiAgQWxyaWdodCwgYSBuaWNlLCBmb2N1c2VkIGxpc3QuCgpOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4gIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgaXMgbm90IHN0YXRpYywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIG1vcmUgd2lkZWx5IGFjY2Vzc2libGUuIE9uIHRoZSBvdGhlciBoYW5kLCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgICppcyogc3RhdGljIHdoaWNoIGxpbWl0cyBpdHMgZGlyZWN0IGludGVyYWN0aW9uIHRvIG90aGVyIHBhcnRzIG9mIGNvcmUuICBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLCBgYnBmX2ppdF9zdWJwcm9nc2AgYW5kIGBicGZfZml4dXBfY2FsbF9hcmdzYCBhcmUgYWxzbyBub3Qgc3RhdGljLiBGaW5hbGx5LCBgYnBmX2NoZWNrYCBpcyB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnQsIHNvIHRoYXQmIzM5O3MgYSBrZXkgdGFyZ2V0LgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiAgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24uIEFuZCwgbmF0dXJhbGx5LCBgQ09ORklHX0JQRl9KSVRgIGlzIGdvaW5nIHRvIGJlIHZpdGFsIGJlY2F1c2Ugd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgSklUIGJsaW5kaW5nIGhlcmUuCgpUbyB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZywgSSB0aGluayBJJiMzOTtsbCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGZ1bmN0aW9uIHZpc2liaWxpdHkgYW5kIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBoZWxwIG1lIGdlbmVyYXRlIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ppdF9ibGluZF9jb25zdGFudHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYz0xNTUyPXZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTY2LSAqL1xua2VybmVsL2JwZi9jb3JlLmM6MTU2NzppbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTY4LVx0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI2NDc9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI2NTgtXHRvcmlnX3Byb2cgPSBwcm9nO1xua2VybmVsL2JwZi9jb3JlLmM6MjY1OTpcdGVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgXHUwMDI2cHJvZywgIWppdF9uZWVkZWQsIFx1MDAyNmNsb25lZCk7XG5rZXJuZWwvYnBmL2NvcmUuYy0yNjYwLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTEyNzU9aW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyOTQtXHRcdH1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTI5NTpcdFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQsIFx1MDAyNmNsb25lZCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyOTYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbiBUYXJnZXRzIGluIHRoZSBCUEYgVmVyaWZpZXIvSklUKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gb3B0aW1pemluZyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGlzIHBhdGNoIGFyZSBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfZml4dXBfY2FsbF9hcmdzYCwgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCwgYW5kIGBicGZfY2hlY2tgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB0byBpbnZlc3RpZ2F0ZS4KCkZpcnN0LCBJIG5lZWQgdG8gY29uc2lkZXIgaWYgYGJwZl9jaGVja2AgaXMgdG9vIGJyb2FkIHRvIGJlIGEgd29ydGh3aGlsZSB0YXJnZXQuIEl0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBzbyBpdCBtaWdodCBiZSBoZWF2aWx5IHVzZWQsIG1ha2luZyBnYWlucyB0aGVyZSBkaWZmaWN1bHQuIEluc3RlYWQsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIG90aGVycy4KClRoZSBtb3JlIHByb21pc2luZyBmdW5jdGlvbnMgYXJlIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgLCBhbmQgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBpZGVhbCBjYW5kaWRhdGVzIGZvciB0aGlzLgoKRmluYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgdG8gbWFrZSBzdXJlIGBCUEZfSklUYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBhIHByaW9yaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNTktXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBCUEYgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGNoZWNraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgdGhlIHByaW1hcnkgZmxhZ3MgbWVudGlvbmVkLCB3aXRoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRob3NlIGNvbmZpZ3MgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIGFuZCBga2VybmVsL2JwZi9jb3JlLmNgIHJlc3BlY3RpdmVseS4gSSBhbHNvIG5vdGUgdGhhdCBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBpcyB1c2VkIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC4KCk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IGhlcmU6IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgLCBhbmQgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYC4gYGJwZl9jaGVja2AsIHRoZSB2ZXJpZmllciBlbnRyeSBwb2ludCwgaXMgYWxzbyB0b3VjaGVkLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgdG9vIGdlbmVyYWwgc2luY2UgaXQmIzM5O3Mgb25seSBtb2RpZmllZCBmb3IgYGVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW5gLiBJIHRoaW5rIEkmIzM5O2xsIGZvY3VzIG9uIHRob3NlIGZpeHVwIGFuZCBKSVQgZnVuY3Rpb25zIGZvciBub3cuCgpUaGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAgaXMgZXhwb3J0ZWQgb3IganVzdCBhIGdsb2JhbC4gVGhhdCYjMzk7bGwgaW5mb3JtIGhvdyBkaXJlY3RseSBpdCYjMzk7cyBiZWluZyB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzeW1ib2wgdmlzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2xlYXJfaW5zbl9hdXhfZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9Mzc0PXN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQ0MC0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6NDQxOnZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxua2VybmVsL2JwZi9maXh1cHMuYy00NDIte1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NDU1PXN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy00NjMtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ2NDpcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgb2ZmLCBjbnQpO1xua2VybmVsL2JwZi9maXh1cHMuYy00NjUtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwMDYwPWludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM3MC1cdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM3MTpcdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzcyLVx0dmZyZWUoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjYzCgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgRml4ZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGdsb2JhbCBjaGFuZ2UsIGltcGFjdGluZyBib3RoIGBmaXh1cHMuY2AgYW5kIGB2ZXJpZmllci5jYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgaXQgdG91Y2hlcyBjb3JlIEJQRiBmdW5jdGlvbmFsaXR5LCBzbyBpdCBuZWVkcyBjYXJlZnVsIHJldmlldy4gSSYjMzk7bSBub3RpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpdCYjMzk7cyBtb2RpZnlpbmc6IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgLCBhbmQgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBhcnRzIG9mIGhvdyB3ZSBoYW5kbGUgY29uc3RhbnQgYmxpbmRpbmcsIHN1YnByb2dyYW0gSklUdGluZywgYW5kIG92ZXJhbGwgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIHBhdGNoIGxvb2tzIGZ1bmN0aW9uYWwuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBpbnNuX2F1eF9kYXRhYCBoYW5kbGluZywgcGFydGljdWxhcmx5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGluc25fYXV4X2RhdGFfbGVuYCBhbmQgaG93IHRoZSBwcm9ncmFtIGlzIGNsb25lZCwgc2VlbSB0byBiZSBjb3JyZWN0bHkgYWRkcmVzc2luZyB0aGUgaXNzdWVzLiBUaGlzIG1lYW5zIGl0ICpkZWZpbml0ZWx5KiBuZWVkcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24gdG8gdmFsaWRhdGUgaXRzIHN0YWJpbGl0eS4gVGhlIGNoYW5nZXMgaW1wYWN0IHRoZSBmdW5kYW1lbnRhbCBsb2FkaW5nIGFuZCB2ZXJpZmljYXRpb24gbG9naWMgb2YgQlBGIHByb2dyYW1zLCB3aGljaCBpcyB3aHkgSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyBmb3IgdGhpcy4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSByZWxldmFudCBjb25maWdzIGFyZSBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIEkgYnJpZWZseSBjb25zaWRlcmVkIHdoZXRoZXIgYEJQRl9KSVRfQUxXQVlTX09OYCBuZWVkZWQgc3BlY2lhbCBjb25zaWRlcmF0aW9uLCBidXQgc2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgYm90aCB3aXRoaW4gYW5kIG91dHNpZGUgdGhlIGAjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTmAgYmxvY2ssIGl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGVzdGluZy4gSSYjMzk7bSBub3cgY2VydGFpbiB0aGF0IHNldHRpbmcgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGlzIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcuCgpJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQgd2l0aCB0aGlzLCBzbyBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2JsaW5kX2NvbnN0YW50cyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2JwZl9maXh1cF9jYWxsX2FyZ3MmIzM0OywKICAgICYjMzQ7YnBmX2NsZWFyX2luc25fYXV4X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyJiMzOTtzIGhhbmRsaW5nIG9mIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApIGR1cmluZyBjb25zdGFudCBibGluZGluZyBhbmQgc3VicHJvZ3JhbSBKSVRpbmcuIEl0IGNoYW5nZXMgaG93IHRoZSBwcm9ncmFtIGlzIGNsb25lZCBhbmQgaG93IGF1eGlsaWFyeSBkYXRhIGlzIHRyYWNrZWQgKGludHJvZHVjaW5nIGBpbnNuX2F1eF9kYXRhX2xlbmApLCB3aGljaCBhZmZlY3RzIGNvcmUgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ppdF9ibGluZF9jb25zdGFudHMmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9zdWJwcm9ncyYjMzQ7LAogICAgJiMzNDticGZfZml4dXBfY2FsbF9hcmdzJiMzNDssCiAgICAmIzM0O2JwZl9jbGVhcl9pbnNuX2F1eF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciYjMzk7cyBoYW5kbGluZyBvZiBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKSBkdXJpbmcgY29uc3RhbnQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nLiBJdCBjaGFuZ2VzIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQgYW5kIGhvdyBhdXhpbGlhcnkgZGF0YSBpcyB0cmFja2VkIChpbnRyb2R1Y2luZyBgaW5zbl9hdXhfZGF0YV9sZW5gKSwgd2hpY2ggYWZmZWN0cyBjb3JlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE0OjIyOjUzLjYzMTA0NzAwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyOTc4OTA2MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9ibGluZF9jb25zdGFudHNcIixcbiAgICBcImJwZl9qaXRfc3VicHJvZ3NcIixcbiAgICBcImJwZl9maXh1cF9jYWxsX2FyZ3NcIixcbiAgICBcImJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyJ3MgaGFuZGxpbmcgb2YgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEgKGBpbnNuX2F1eF9kYXRhYCkgZHVyaW5nIGNvbnN0YW50IGJsaW5kaW5nIGFuZCBzdWJwcm9ncmFtIEpJVGluZy4gSXQgY2hhbmdlcyBob3cgdGhlIHByb2dyYW0gaXMgY2xvbmVkIGFuZCBob3cgYXV4aWxpYXJ5IGRhdGEgaXMgdHJhY2tlZCAoaW50cm9kdWNpbmcgYGluc25fYXV4X2RhdGFfbGVuYCksIHdoaWNoIGFmZmVjdHMgY29yZSBCUEYgcHJvZ3JhbSBsb2FkaW5nIGFuZCB2ZXJpZmljYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE0OjIyOjUzLjYzMTA1NjY0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUwMzQzODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjVkYzJjZjM5Y2VkMjE4NTNiODczMTQwNjgyZmI3YmZiODUwNTg3OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyOSAxNDoyMjo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDY4MmMyY2QzYjg0NDMuLmNkZDUwMDQ5YTBjMTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5AQCAtOTQ4LDYgKzk0OCw3IEBAIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcXG4gXFx0Ym9vbCBzZWVuX2RpcmVjdF93cml0ZTtcXG4gXFx0Ym9vbCBzZWVuX2V4Y2VwdGlvbjtcXG4gXFx0Ym9vbCBzaWduYXR1cmU7XFxuK1xcdHUzMiBpbnNuX2F1eF9kYXRhX2xlbjtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eF9kYXRhOyAvKiBhcnJheSBvZiBwZXItaW5zbiBzdGF0ZSAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqcHJldl9saW5mbztcXG4gXFx0c3RydWN0IGJwZl92ZXJpZmllcl9sb2cgbG9nO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbmluZGV4IDMyZDUyOTdjNTU3ZTUuLjJkMWFhMDYyNTY2YzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTIxMSwyNSArMTIxMSwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7XFxuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXFxuIHtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcXG4gfVxcbi1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi17XFxuLVxcdHJldHVybiBOVUxMO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcXG4te1xcbi19XFxuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG4gXFxuIGludCBicGZfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGNudCk7XFxuQEAgLTEzNjksNyArMTM1Niw4IEBAIGludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXG4gY29uc3QgY2hhciAqYnBmX2ppdF9nZXRfcHJvZ19uYW1lKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIFxcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpO1xcbiB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbkBAIC0xNTIxLDkgKzE1MDksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbitpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXFxuK1xcdFxcdFxcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxcbiB7XFxuLVxcdHJldHVybiBwcm9nO1xcbitcXHQqY2xvbmVkID0gZmFsc2U7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmFiNWRhM2ZmOTQxYWEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcXG4rKysgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbkBAIC0xNTY0LDI3ICsxNTY0LDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcXG4gICogTm93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIGJsaW5kIHRoZSBtYWluIHByb2cgYW5kIG11c3QgYmUgaW52b2tlZCBvbmx5IHdoZW5cXG4gICogYnBmX3Byb2dfbmVlZF9ibGluZCgpIHJldHVybnMgdHJ1ZS5cXG4gICovXFxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbitpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXFxuK1xcdFxcdFxcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XFxuLVxcdHN0cnVjdCBicGZfcHJvZyAqY2xvbmUsICp0bXA7XFxuK1xcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZywgKnRtcDtcXG4gXFx0aW50IGluc25fZGVsdGEsIGluc25fY250O1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc247XFxuIFxcdGludCBpLCByZXdyaXR0ZW47XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcXHUwMDI2XFx1MDAyNiBlbnYtXFx1MDAzZXByb2cgIT0gcHJvZykpXFxuLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXHQqY2xvbmVkID0gZmFsc2U7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoZW52IFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlcHJvZyAhPSAqcHByb2cpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGNsb25lID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKHByb2csIEdGUF9VU0VSKTtcXG4tXFx0aWYgKCFjbG9uZSlcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdHByb2cgPSBvcmlnX3Byb2cgPSAqcHByb2c7XFxuK1xcdC8qIG9ubHkgY2xvbmUgdGhlIHByb2cgd2hlbiB3ZSBjYW4gZmFsbCBiYWNrIHRvIHRoZSBpbnRlcnByZXRlciAqL1xcbitcXHRpZiAoY2xvbmVfbmVlZGVkKSB7XFxuK1xcdFxcdHByb2cgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUob3JpZ19wcm9nLCBHRlBfVVNFUik7XFxuK1xcdFxcdGlmICghcHJvZylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xcbi1cXHRpZiAoZW52KVxcbi1cXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBjbG9uZTtcXG4rXFx0XFx0KmNsb25lZCA9IHRydWU7XFxuK1xcdFxcdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXFxuK1xcdFxcdGlmIChlbnYpXFxuK1xcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2c7XFxuK1xcdH1cXG4gXFxuLVxcdGluc25fY250ID0gY2xvbmUtXFx1MDAzZWxlbjtcXG4tXFx0aW5zbiA9IGNsb25lLVxcdTAwM2VpbnNuc2k7XFxuK1xcdGluc25fY250ID0gcHJvZy1cXHUwMDNlbGVuO1xcbitcXHRpbnNuID0gcHJvZy1cXHUwMDNlaW5zbnNpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluc25fY250OyBpKyssIGluc24rKykge1xcbiBcXHRcXHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XFxuQEAgLTE2MDUsNDIgKzE2MTIsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBcXG4gXFx0XFx0ICAgIGluc25bMV0uY29kZSA9PSAwKVxcbiBcXHRcXHRcXHRtZW1jcHkoYXV4LCBpbnNuLCBzaXplb2YoYXV4KSk7XFxuIFxcbi1cXHRcXHRyZXdyaXR0ZW4gPSBicGZfaml0X2JsaW5kX2luc24oaW5zbiwgYXV4LCBpbnNuX2J1ZmYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGNsb25lLVxcdTAwM2VhdXgtXFx1MDAzZXZlcmlmaWVyX3pleHQpO1xcbitcXHRcXHRyZXdyaXR0ZW4gPSBicGZfaml0X2JsaW5kX2luc24oaW5zbiwgYXV4LCBpbnNuX2J1ZmYsIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNldmVyaWZpZXJfemV4dCk7XFxuIFxcdFxcdGlmICghcmV3cml0dGVuKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChlbnYpXFxuIFxcdFxcdFxcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKGNsb25lLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XFxuK1xcdFxcdFxcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XFxuIFxcbiBcXHRcXHRpZiAoSVNfRVJSX09SX05VTEwodG1wKSkge1xcbi1cXHRcXHRcXHRpZiAoZW52KVxcbi1cXHRcXHRcXHRcXHQvKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9nICovXFxuLVxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2c7XFxuLVxcdFxcdFxcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXFx1MDAzZXByb2cgZHVyaW5nXFxuLVxcdFxcdFxcdCAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvXFxuLVxcdFxcdFxcdCAqIGZpeCBpdCB1cCBoZXJlIG9uIGVycm9yLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgY2xvbmUpO1xcbi1cXHRcXHRcXHRyZXR1cm4gSVNfRVJSKHRtcCkgPyB0bXAgOiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRcXHRcXHRpZiAoKmNsb25lZCkge1xcbitcXHRcXHRcXHRcXHQvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi9cXG4rXFx0XFx0XFx0XFx0KnBwcm9nID0gb3JpZ19wcm9nO1xcbitcXHRcXHRcXHRcXHRpZiAoZW52KVxcbitcXHRcXHRcXHRcXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBvcmlnX3Byb2c7XFxuK1xcdFxcdFxcdFxcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXFx1MDAzZXByb2cgZHVyaW5nXFxuK1xcdFxcdFxcdFxcdCAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvXFxuK1xcdFxcdFxcdFxcdCAqIGZpeCBpdCB1cCBoZXJlIG9uIGVycm9yLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xcbitcXHRcXHRcXHRcXHQqcHByb2cgPSBwcm9nO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJldHVybiBJU19FUlIodG1wKSA/IFBUUl9FUlIodG1wKSA6IC1FTk9NRU07XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGNsb25lID0gdG1wO1xcbitcXHRcXHRwcm9nID0gdG1wO1xcbiBcXHRcXHRpbnNuX2RlbHRhID0gcmV3cml0dGVuIC0gMTtcXG4gXFxuIFxcdFxcdGlmIChlbnYpXFxuLVxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IGNsb25lO1xcbitcXHRcXHRcXHRlbnYtXFx1MDAzZXByb2cgPSBwcm9nO1xcbiBcXG4gXFx0XFx0LyogV2FsayBuZXcgcHJvZ3JhbSBhbmQgc2tpcCBpbnNucyB3ZSBqdXN0IGluc2VydGVkLiAqL1xcbi1cXHRcXHRpbnNuID0gY2xvbmUtXFx1MDAzZWluc25zaSArIGkgKyBpbnNuX2RlbHRhO1xcbitcXHRcXHRpbnNuID0gcHJvZy1cXHUwMDNlaW5zbnNpICsgaSArIGluc25fZGVsdGE7XFxuIFxcdFxcdGluc25fY250ICs9IGluc25fZGVsdGE7XFxuIFxcdFxcdGkgICAgICAgICs9IGluc25fZGVsdGE7XFxuIFxcdH1cXG4gXFxuLVxcdGNsb25lLVxcdTAwM2VibGluZGVkID0gMTtcXG4tXFx0cmV0dXJuIGNsb25lO1xcbitcXHRwcm9nLVxcdTAwM2VibGluZGVkID0gMTtcXG4rXFx0KnBwcm9nID0gcHJvZztcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBib29sIGJwZl9pbnNuX2lzX2luZGlyZWN0X3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuQEAgLTI2MzAsNDkgKzI2NDQsMzMgQEAgc3RhdGljIGJvb2wgYnBmX3Byb2dfc2VsZWN0X2ludGVycHJldGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuIFxcdHJldHVybiBzZWxlY3RfaW50ZXJwcmV0ZXI7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4rc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgaml0X25lZWRlZClcXG4ge1xcbiAjaWZkZWYgQ09ORklHX0JQRl9KSVRcXG4rXFx0aW50IGVycjtcXG4rXFx0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpvcmlnX3Byb2c7XFxuLVxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eDtcXG4gXFxuIFxcdGlmICghYnBmX3Byb2dfbmVlZF9ibGluZChwcm9nKSlcXG4gXFx0XFx0cmV0dXJuIGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcXG4gXFxuLVxcdGlmIChlbnYpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgZW52IGlzIG5vdCBOVUxMLCB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIGVuZCBvZiBicGZfY2hlY2soKSwgYXQgdGhpc1xcbi1cXHRcXHQgKiBwb2ludCwgb25seSBpbnNuX2F1eF9kYXRhIGlzIHVzZWQgYWZ0ZXIgZmFpbHVyZSwgc28gaXQgc2hvdWxkIGJlIHJlc3RvcmVkXFxuLVxcdFxcdCAqIG9uIGZhaWx1cmUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRvcmlnX2luc25fYXV4ID0gYnBmX2R1cF9pbnNuX2F1eF9kYXRhKGVudik7XFxuLVxcdFxcdGlmICghb3JpZ19pbnNuX2F1eClcXG4tXFx0XFx0XFx0cmV0dXJuIHByb2c7XFxuLVxcdH1cXG4tXFxuIFxcdG9yaWdfcHJvZyA9IHByb2c7XFxuLVxcdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xcbi1cXHQvKlxcbi1cXHQgKiBJZiBibGluZGluZyB3YXMgcmVxdWVzdGVkIGFuZCB3ZSBmYWlsZWQgZHVyaW5nIGJsaW5kaW5nLCB3ZSBtdXN0IGZhbGxcXG4tXFx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXFxuLVxcdCAqL1xcbi1cXHRpZiAoSVNfRVJSKHByb2cpKVxcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbitcXHRlcnIgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIFxcdTAwMjZwcm9nLCAhaml0X25lZWRlZCwgXFx1MDAyNmNsb25lZCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0cHJvZyA9IGJwZl9pbnRfaml0X2NvbXBpbGUoZW52LCBwcm9nKTtcXG4tXFx0aWYgKHByb2ctXFx1MDAzZWppdGVkKSB7XFxuLVxcdFxcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7XFxuLVxcdFxcdGlmIChlbnYpXFxuLVxcdFxcdFxcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xcbi1cXHRcXHRyZXR1cm4gcHJvZztcXG4rXFx0aWYgKGNsb25lZCkge1xcbitcXHRcXHRpZiAocHJvZy1cXHUwMDNlaml0ZWQpIHtcXG4rXFx0XFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcXG4rXFx0XFx0XFx0cHJvZyA9IG9yaWdfcHJvZztcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xcbi1cXG4tb3V0X3Jlc3RvcmU6XFxuLVxcdHByb2cgPSBvcmlnX3Byb2c7XFxuLVxcdGlmIChlbnYpXFxuLVxcdFxcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcXG4rb3V0OlxcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIHByb2c7XFxuIH1cXG5AQCAtMjcwMiw3ICsyNzAwLDcgQEAgc3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdFxcbiBcXHRcXHRpZiAoKmVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGZwO1xcbiBcXG4tXFx0XFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcXG4rXFx0XFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwLCBqaXRfbmVlZGVkKTtcXG4gXFx0XFx0YnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShmcCk7XFxuIFxcdFxcdGlmICghZnAtXFx1MDAzZWppdGVkIFxcdTAwMjZcXHUwMDI2IGppdF9uZWVkZWQpIHtcXG4gXFx0XFx0XFx0KmVyciA9IC1FTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcXG5pbmRleCBhMGJkZGFkYTc5NjRlLi42ZGEwZjhkMGI3NjFiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuQEAgLTE3NCw2ICsxNzQsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpZiAoY250ID09IDEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0cHJvZ19sZW4gPSBuZXdfcHJvZy1cXHUwMDNlbGVuO1xcbitcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gcHJvZ19sZW47XFxuIFxcbiBcXHRtZW1tb3ZlKGRhdGEgKyBvZmYgKyBjbnQgLSAxLCBkYXRhICsgb2ZmLFxcbiBcXHRcXHRzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSAqIChwcm9nX2xlbiAtIG9mZiAtIGNudCArIDEpKTtcXG5AQCAtNDQwLDcgKzQ0MSw2IEBAIHN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXhfZGF0YSA9IGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YTtcXG4tXFx0c3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpO1xcbiBcXHRpbnQgZW5kID0gc3RhcnQgKyBsZW47XFxuIFxcdGludCBpO1xcbiBcXG5AQCAtNDQ5LDkgKzQ0OSw2IEBAIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxcbiBcXHRcXHRcXHRrdmZyZWUoYXV4X2RhdGFbaV0uanQpO1xcbiBcXHRcXHRcXHRhdXhfZGF0YVtpXS5qdCA9IE5VTEw7XFxuIFxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmIChicGZfaXNfbGRpbW02NChcXHUwMDI2aW5zbnNbaV0pKVxcbi1cXHRcXHRcXHRpKys7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtNDY0LDcgKzQ2MSw2IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXFxuIFxcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgpKVxcbiBcXHRcXHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcXG4gXFxuLVxcdC8qIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGJwZl9yZW1vdmVfaW5zbnMsIGFzIGl0IHVzZXMgcHJvZy1cXHUwMDNlaW5zbnNpICovXFxuIFxcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgb2ZmLCBjbnQpO1xcbiBcXG4gXFx0ZXJyID0gYnBmX3JlbW92ZV9pbnNucyhlbnYtXFx1MDAzZXByb2csIG9mZiwgY250KTtcXG5AQCAtNDgzLDYgKzQ3OSw3IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXFxuIFxcbiBcXHRtZW1tb3ZlKGF1eF9kYXRhICsgb2ZmLFxcdGF1eF9kYXRhICsgb2ZmICsgY250LFxcbiBcXHRcXHRzaXplb2YoKmF1eF9kYXRhKSAqIChvcmlnX3Byb2dfbGVuIC0gb2ZmIC0gY250KSk7XFxuK1xcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4gLT0gY250O1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTk5LDMyICs5OTYsMTQgQEAgc3RhdGljIHUzMiAqYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gc3RhdGljIHZvaWQgYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyICpvcmlnX3N0YXJ0cylcXG4ge1xcbitcXHRpZiAoIW9yaWdfc3RhcnRzKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgZW52LVxcdTAwM2VzdWJwcm9nX2NudDsgaSsrKVxcbiBcXHRcXHRlbnYtXFx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydCA9IG9yaWdfc3RhcnRzW2ldO1xcbiBcXHQvKiByZXN0b3JlIHRoZSBzdGFydCBvZiBmYWtlICdleGl0JyBzdWJwcm9nIGFzIHdlbGwgKi9cXG4gXFx0ZW52LVxcdTAwM2VzdWJwcm9nX2luZm9bZW52LVxcdTAwM2VzdWJwcm9nX2NudF0uc3RhcnQgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4gfVxcbiBcXG4tc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4te1xcbi1cXHRzaXplX3Qgc2l6ZTtcXG4tXFx0dm9pZCAqbmV3X2F1eDtcXG4tXFxuLVxcdHNpemUgPSBhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbik7XFxuLVxcdG5ld19hdXggPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tXFx0aWYgKG5ld19hdXgpXFxuLVxcdFxcdG1lbWNweShuZXdfYXV4LCBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEsIHNpemUpO1xcbi1cXHRyZXR1cm4gbmV3X2F1eDtcXG4tfVxcbi1cXG4tdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpXFxuLXtcXG4tXFx0LyogdGhlIGV4cGFuZGVkIGVsZW1lbnRzIGFyZSB6ZXJvLWZpbGxlZCwgc28gbm8gc3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZCAqL1xcbi1cXHR2ZnJlZShlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEpO1xcbi1cXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEgPSBvcmlnX2luc25fYXV4O1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cXHUwMDNlcHJvZywgKipmdW5jLCAqdG1wO1xcbkBAIC0xMjk2LDU3ICsxMjc1LDQ3IEBAIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIHtcXG4gXFx0aW50IGVyciwgaTtcXG4tXFx0Ym9vbCBibGluZGVkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcXG4gXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nO1xcbi1cXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7XFxuLVxcdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cztcXG4rXFx0dTMyICpvcmlnX3N1YnByb2dfc3RhcnRzID0gTlVMTDtcXG4rXFx0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcXG4gXFxuIFxcdGlmIChlbnYtXFx1MDAzZXN1YnByb2dfY250IFxcdTAwM2M9IDEpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cHJvZyA9IG9yaWdfcHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG4gXFx0aWYgKGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpIHtcXG4tXFx0XFx0b3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpO1xcbi1cXHRcXHRpZiAoIW9yaWdfaW5zbl9hdXgpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0XFx0Z290byBvdXRfY2xlYW51cDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRvcmlnX3N1YnByb2dfc3RhcnRzID0gYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhlbnYpO1xcbi1cXHRcXHRpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHtcXG4tXFx0XFx0XFx0dmZyZWUob3JpZ19pbnNuX2F1eCk7XFxuLVxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuLVxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXA7XFxuK1xcdFxcdGlmICghcHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkKSB7XFxuK1xcdFxcdFxcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XFxuK1xcdFxcdFxcdGlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykge1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4tXFx0XFx0cHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7XFxuLVxcdFxcdGlmIChJU19FUlIocHJvZykpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0XFx0cHJvZyA9IG9yaWdfcHJvZztcXG4rXFx0XFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcXHUwMDI2cHJvZywgIXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCwgXFx1MDAyNmNsb25lZCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuLVxcdFxcdH1cXG4tXFx0XFx0YmxpbmRlZCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IGppdF9zdWJwcm9ncyhlbnYpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dF9qaXRfZXJyO1xcbiBcXG4tXFx0aWYgKGJsaW5kZWQpIHtcXG4rXFx0aWYgKGNsb25lZCkge1xcbiBcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpO1xcbiBcXHRcXHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XFxuLVxcdFxcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIG91dF9qaXRfZXJyOlxcbi1cXHRpZiAoYmxpbmRlZCkge1xcbitcXHRpZiAoY2xvbmVkKSB7XFxuIFxcdFxcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XFxuIFxcdFxcdC8qIHJvbGwgYmFjayB0byB0aGUgY2xlYW4gb3JpZ2luYWwgcHJvZyAqL1xcbiBcXHRcXHRwcm9nID0gZW52LVxcdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xcbiBcXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAoZXJyICE9IC1FRkFVTFQpIHtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRUZBVUxUIFxcdTAwMjZcXHUwMDI2ICFwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQpIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogV2Ugd2lsbCBmYWxsIGJhY2sgdG8gaW50ZXJwcmV0ZXIgbW9kZSB3aGVuIGVyciBpcyBub3QgLUVGQVVMVCwgYmVmb3JlXFxuIFxcdFxcdFxcdCAqIHRoYXQsIGluc24tXFx1MDAzZW9mZiBhbmQgaW5zbi1cXHUwMDNlaW1tIHNob3VsZCBiZSByZXN0b3JlZCB0byB0aGVpciBvcmlnaW5hbFxcbkBAIC0xMzY0LDcgKzEzMzMsNiBAQCBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gb3V0X3Jlc3RvcmU6XFxuIFxcdGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKGVudiwgb3JpZ19zdWJwcm9nX3N0YXJ0cyk7XFxuLVxcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcXG4gXFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xcbiBvdXRfY2xlYW51cDpcXG4gXFx0LyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi9cXG5AQCAtMTM3Niw4ICsxMzQ0LDcgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiAjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbi1cXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuLVxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IHByb2ctXFx1MDAzZWluc25zaTtcXG4rXFx0c3RydWN0IGJwZl9pbnNuICppbnNuO1xcbiBcXHRpbnQgZGVwdGg7XFxuICNlbmRpZlxcbiBcXHRpbnQgaSwgZXJyID0gMDtcXG5AQCAtMTQwMyw3ICsxMzcwLDcgQEAgaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiAjaWZuZGVmIENPTkZJR19CUEZfSklUX0FMV0FZU19PTlxcbi1cXHRpZiAocHJvZy1cXHUwMDNlaml0X3JlcXVpcmVkKSB7XFxuK1xcdGlmIChlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCkge1xcbiBcXHRcXHR2ZXJib3NlKGVudiwgXFxcInByb2dyYW0gcmVxdWlyZXMgQlBGIEpJVCBjb21waWxlciBidXQgaXQgaXMgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuQEAgLTE0MjAsNyArMTM4Nyw3IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdHZlcmJvc2UoZW52LCBcXFwidGFpbF9jYWxscyBhcmUgbm90IGFsbG93ZWQgaW4gbm9uLUpJVGVkIHByb2dyYW1zIHdpdGggYnBmLXRvLWJwZiBjYWxsc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcm9nLVxcdTAwM2VsZW47IGkrKywgaW5zbisrKSB7XFxuK1xcdGZvciAoaSA9IDAsIGluc24gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTsgaSBcXHUwMDNjIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuOyBpKyssIGluc24rKykge1xcbiBcXHRcXHRpZiAoYnBmX3BzZXVkb19mdW5jKGluc24pKSB7XFxuIFxcdFxcdFxcdC8qIFdoZW4gSklUIGZhaWxzIHRoZSBwcm9ncyB3aXRoIGNhbGxiYWNrIGNhbGxzXFxuIFxcdFxcdFxcdCAqIGhhdmUgdG8gYmUgcmVqZWN0ZWQsIHNpbmNlIGludGVycHJldGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIHlldC5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZTZmMzVmNGU3MTViNi4uZTMxYzQxMjAzYmRhZSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMjAxMjIsNyArMjAxMjIsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4gXFx0aWYgKCFpc19wcml2KVxcbiBcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZicGZfdmVyaWZpZXJfbG9jayk7XFxuIFxcbi1cXHRsZW4gPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbjtcXG4rXFx0bGVuID0gZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuO1xcbiBcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEgPVxcbiBcXHRcXHRfX3ZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgbGVuKSxcXG4gXFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQgfCBfX0dGUF9aRVJPKTtcXG5AQCAtMjAzNjgsNyArMjAzNjgsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4gXFx0cmVsZWFzZV9idGZzKGVudik7XFxuIGVycl9mcmVlX2VudjpcXG4gXFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YSlcXG4tXFx0XFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbik7XFxuK1xcdFxcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgMCwgZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhX2xlbik7XFxuIFxcdHZmcmVlKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YSk7XFxuIFxcdGt2ZnJlZShlbnYtXFx1MDAzZWZkX2FycmF5KTtcXG4gXFx0YnBmX3N0YWNrX2xpdmVuZXNzX2ZyZWUoZW52KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTQ6MjI6NTQuMjgyMDU1MzQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzIzMjc4ODU1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICAgIFwiYnBmX2ppdF9zdWJwcm9nc1wiLFxuICAgIFwiYnBmX2ZpeHVwX2NhbGxfYXJnc1wiLFxuICAgIFwiYnBmX2NsZWFyX2luc25fYXV4X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIncyBoYW5kbGluZyBvZiBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKSBkdXJpbmcgY29uc3RhbnQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nLiBJdCBjaGFuZ2VzIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQgYW5kIGhvdyBhdXhpbGlhcnkgZGF0YSBpcyB0cmFja2VkIChpbnRyb2R1Y2luZyBgaW5zbl9hdXhfZGF0YV9sZW5gKSwgd2hpY2ggYWZmZWN0cyBjb3JlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjVkYzJjZjM5Y2VkMjE4NTNiODczMTQwNjgyZmI3YmZiODUwNTg3OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDI5IDE0OjIyOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMuLmNkZDUwMDQ5YTBjMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtOTQ4LDYgKzk0OCw3IEBAIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHtcbiBcdGJvb2wgc2Vlbl9kaXJlY3Rfd3JpdGU7XG4gXHRib29sIHNlZW5fZXhjZXB0aW9uO1xuIFx0Ym9vbCBzaWduYXR1cmU7XG4rXHR1MzIgaW5zbl9hdXhfZGF0YV9sZW47XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4X2RhdGE7IC8qIGFycmF5IG9mIHBlci1pbnNuIHN0YXRlICovXG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmVfaW5mbyAqcHJldl9saW5mbztcbiBcdHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nIGxvZztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMzJkNTI5N2M1NTdlNS4uMmQxYWEwNjI1NjZjNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMjExLDI1ICsxMjExLDEyIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fc2luZ2xlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZixcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pO1xuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbiBcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuIHtcbiBcdHJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7XG4gfVxuLVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi17XG4tXHRyZXR1cm4gTlVMTDtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpXG4te1xuLX1cbiAjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4gXG4gaW50IGJwZl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgY250KTtcbkBAIC0xMzY5LDcgKzEzNTYsOCBAQCBpbnQgYnBmX2ppdF9nZXRfZnVuY19hZGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcbiBjb25zdCBjaGFyICpicGZfaml0X2dldF9wcm9nX25hbWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiBcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4raW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuK1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKTtcbiB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19uZWVkX2JsaW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbkBAIC0xNTIxLDkgKzE1MDksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4raW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuK1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbi1cdHJldHVybiBwcm9nO1xuK1x0KmNsb25lZCA9IGZhbHNlO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IGUyMDc2NjY3YjI0NTEuLmFiNWRhM2ZmOTQxYWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTY0LDI3ICsxNTY0LDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbiAgKiBOb3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gYmxpbmQgdGhlIG1haW4gcHJvZyBhbmQgbXVzdCBiZSBpbnZva2VkIG9ubHkgd2hlblxuICAqIGJwZl9wcm9nX25lZWRfYmxpbmQoKSByZXR1cm5zIHRydWUuXG4gICovXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4raW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuK1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wO1xuK1x0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nLCAqdG1wO1xuIFx0aW50IGluc25fZGVsdGEsIGluc25fY250O1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuO1xuIFx0aW50IGksIHJld3JpdHRlbjtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoZW52IFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlcHJvZyAhPSBwcm9nKSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHQqY2xvbmVkID0gZmFsc2U7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gKnBwcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRjbG9uZSA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShwcm9nLCBHRlBfVVNFUik7XG4tXHRpZiAoIWNsb25lKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdHByb2cgPSBvcmlnX3Byb2cgPSAqcHByb2c7XG4rXHQvKiBvbmx5IGNsb25lIHRoZSBwcm9nIHdoZW4gd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgKi9cbitcdGlmIChjbG9uZV9uZWVkZWQpIHtcbitcdFx0cHJvZyA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShvcmlnX3Byb2csIEdGUF9VU0VSKTtcbitcdFx0aWYgKCFwcm9nKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cbi1cdGlmIChlbnYpXG4tXHRcdGVudi1cdTAwM2Vwcm9nID0gY2xvbmU7XG4rXHRcdCpjbG9uZWQgPSB0cnVlO1xuK1x0XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xuK1x0XHRpZiAoZW52KVxuK1x0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbitcdH1cbiBcbi1cdGluc25fY250ID0gY2xvbmUtXHUwMDNlbGVuO1xuLVx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaTtcbitcdGluc25fY250ID0gcHJvZy1cdTAwM2VsZW47XG4rXHRpbnNuID0gcHJvZy1cdTAwM2VpbnNuc2k7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgaSsrLCBpbnNuKyspIHtcbiBcdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkge1xuQEAgLTE2MDUsNDIgKzE2MTIsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBcbiBcdFx0ICAgIGluc25bMV0uY29kZSA9PSAwKVxuIFx0XHRcdG1lbWNweShhdXgsIGluc24sIHNpemVvZihhdXgpKTtcbiBcbi1cdFx0cmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLFxuLVx0XHRcdFx0XHRcdGNsb25lLVx1MDAzZWF1eC1cdTAwM2V2ZXJpZmllcl96ZXh0KTtcbitcdFx0cmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLCBwcm9nLVx1MDAzZWF1eC1cdTAwM2V2ZXJpZmllcl96ZXh0KTtcbiBcdFx0aWYgKCFyZXdyaXR0ZW4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChlbnYpXG4gXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcbiBcdFx0ZWxzZVxuLVx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuK1x0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG4gXHRcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XG4tXHRcdFx0aWYgKGVudilcbi1cdFx0XHRcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cbi1cdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbi1cdFx0XHQvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LVx1MDAzZXByb2cgZHVyaW5nXG4tXHRcdFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cbi1cdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XG4tXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTtcbitcdFx0XHRpZiAoKmNsb25lZCkge1xuK1x0XHRcdFx0Lyogcm9sbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwcm9nICovXG4rXHRcdFx0XHQqcHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdFx0XHRpZiAoZW52KVxuK1x0XHRcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcbitcdFx0XHRcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXHUwMDNlcHJvZyBkdXJpbmdcbitcdFx0XHRcdCAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvXG4rXHRcdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xuK1x0XHRcdFx0KnBwcm9nID0gcHJvZztcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcbiBcdFx0fVxuIFxuLVx0XHRjbG9uZSA9IHRtcDtcbitcdFx0cHJvZyA9IHRtcDtcbiBcdFx0aW5zbl9kZWx0YSA9IHJld3JpdHRlbiAtIDE7XG4gXG4gXHRcdGlmIChlbnYpXG4tXHRcdFx0ZW52LVx1MDAzZXByb2cgPSBjbG9uZTtcbitcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2c7XG4gXG4gXHRcdC8qIFdhbGsgbmV3IHByb2dyYW0gYW5kIHNraXAgaW5zbnMgd2UganVzdCBpbnNlcnRlZC4gKi9cbi1cdFx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaSArIGkgKyBpbnNuX2RlbHRhO1xuK1x0XHRpbnNuID0gcHJvZy1cdTAwM2VpbnNuc2kgKyBpICsgaW5zbl9kZWx0YTtcbiBcdFx0aW5zbl9jbnQgKz0gaW5zbl9kZWx0YTtcbiBcdFx0aSAgICAgICAgKz0gaW5zbl9kZWx0YTtcbiBcdH1cbiBcbi1cdGNsb25lLVx1MDAzZWJsaW5kZWQgPSAxO1xuLVx0cmV0dXJuIGNsb25lO1xuK1x0cHJvZy1cdTAwM2VibGluZGVkID0gMTtcbitcdCpwcHJvZyA9IHByb2c7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gYm9vbCBicGZfaW5zbl9pc19pbmRpcmVjdF90YXJnZXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuQEAgLTI2MzAsNDkgKzI2NDQsMzMgQEAgc3RhdGljIGJvb2wgYnBmX3Byb2dfc2VsZWN0X2ludGVycHJldGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXG4gXHRyZXR1cm4gc2VsZWN0X2ludGVycHJldGVyO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4rc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgaml0X25lZWRlZClcbiB7XG4gI2lmZGVmIENPTkZJR19CUEZfSklUXG4rXHRpbnQgZXJyO1xuK1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuIFxuIFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxuIFx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuIFxuLVx0aWYgKGVudikge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXG4tXHRcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcbi1cdFx0ICogb24gZmFpbHVyZS5cbi1cdFx0ICovXG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KVxuLVx0XHRcdHJldHVybiBwcm9nO1xuLVx0fVxuLVxuIFx0b3JpZ19wcm9nID0gcHJvZztcbi1cdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0Lypcbi1cdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxuLVx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXG4tXHQgKi9cbi1cdGlmIChJU19FUlIocHJvZykpXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRlcnIgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIFx1MDAyNnByb2csICFqaXRfbmVlZGVkLCBcdTAwMjZjbG9uZWQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi1cdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbi1cdFx0aWYgKGVudilcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0cmV0dXJuIHByb2c7XG4rXHRpZiAoY2xvbmVkKSB7XG4rXHRcdGlmIChwcm9nLVx1MDAzZWppdGVkKSB7XG4rXHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuK1x0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4tXG4tb3V0X3Jlc3RvcmU6XG4tXHRwcm9nID0gb3JpZ19wcm9nO1xuLVx0aWYgKGVudilcbi1cdFx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xuK291dDpcbiAjZW5kaWZcbiBcdHJldHVybiBwcm9nO1xuIH1cbkBAIC0yNzAyLDcgKzI3MDAsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XG4gXHRcdGlmICgqZXJyKVxuIFx0XHRcdHJldHVybiBmcDtcbiBcbi1cdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcbitcdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwLCBqaXRfbmVlZGVkKTtcbiBcdFx0YnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShmcCk7XG4gXHRcdGlmICghZnAtXHUwMDNlaml0ZWQgXHUwMDI2XHUwMDI2IGppdF9uZWVkZWQpIHtcbiBcdFx0XHQqZXJyID0gLUVOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBhMGJkZGFkYTc5NjRlLi42ZGEwZjhkMGI3NjFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTE3NCw2ICsxNzQsNyBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKGNudCA9PSAxKVxuIFx0XHRyZXR1cm47XG4gXHRwcm9nX2xlbiA9IG5ld19wcm9nLVx1MDAzZWxlbjtcbitcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IHByb2dfbGVuO1xuIFxuIFx0bWVtbW92ZShkYXRhICsgb2ZmICsgY250IC0gMSwgZGF0YSArIG9mZixcbiBcdFx0c2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSkgKiAocHJvZ19sZW4gLSBvZmYgLSBjbnQgKyAxKSk7XG5AQCAtNDQwLDcgKzQ0MSw2IEBAIHN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbiB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbilcbiB7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmF1eF9kYXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGE7XG4tXHRzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpO1xuIFx0aW50IGVuZCA9IHN0YXJ0ICsgbGVuO1xuIFx0aW50IGk7XG4gXG5AQCAtNDQ5LDkgKzQ0OSw2IEBAIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxuIFx0XHRcdGt2ZnJlZShhdXhfZGF0YVtpXS5qdCk7XG4gXHRcdFx0YXV4X2RhdGFbaV0uanQgPSBOVUxMO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChicGZfaXNfbGRpbW02NChcdTAwMjZpbnNuc1tpXSkpXG4tXHRcdFx0aSsrO1xuIFx0fVxuIH1cbiBcbkBAIC00NjQsNyArNDYxLDYgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSlcbiBcdFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XG4gXG4tXHQvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBicGZfcmVtb3ZlX2luc25zLCBhcyBpdCB1c2VzIHByb2ctXHUwMDNlaW5zbnNpICovXG4gXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTtcbiBcbiBcdGVyciA9IGJwZl9yZW1vdmVfaW5zbnMoZW52LVx1MDAzZXByb2csIG9mZiwgY250KTtcbkBAIC00ODMsNiArNDc5LDcgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcbiBcdG1lbW1vdmUoYXV4X2RhdGEgKyBvZmYsXHRhdXhfZGF0YSArIG9mZiArIGNudCxcbiBcdFx0c2l6ZW9mKCphdXhfZGF0YSkgKiAob3JpZ19wcm9nX2xlbiAtIG9mZiAtIGNudCkpO1xuK1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuIC09IGNudDtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05OTksMzIgKzk5NiwxNCBAQCBzdGF0aWMgdTMyICpicGZfZHVwX3N1YnByb2dfc3RhcnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gc3RhdGljIHZvaWQgYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyICpvcmlnX3N0YXJ0cylcbiB7XG4rXHRpZiAoIW9yaWdfc3RhcnRzKVxuK1x0XHRyZXR1cm47XG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgZW52LVx1MDAzZXN1YnByb2dfY250OyBpKyspXG4gXHRcdGVudi1cdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQgPSBvcmlnX3N0YXJ0c1tpXTtcbiBcdC8qIHJlc3RvcmUgdGhlIHN0YXJ0IG9mIGZha2UgJ2V4aXQnIHN1YnByb2cgYXMgd2VsbCAqL1xuIFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tlbnYtXHUwMDNlc3VicHJvZ19jbnRdLnN0YXJ0ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIH1cbiBcbi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLXtcbi1cdHNpemVfdCBzaXplO1xuLVx0dm9pZCAqbmV3X2F1eDtcbi1cbi1cdHNpemUgPSBhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4pO1xuLVx0bmV3X2F1eCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKG5ld19hdXgpXG4tXHRcdG1lbWNweShuZXdfYXV4LCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSwgc2l6ZSk7XG4tXHRyZXR1cm4gbmV3X2F1eDtcbi19XG4tXG4tdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcbi17XG4tXHQvKiB0aGUgZXhwYW5kZWQgZWxlbWVudHMgYXJlIHplcm8tZmlsbGVkLCBzbyBubyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkICovXG4tXHR2ZnJlZShlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSk7XG4tXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSA9IG9yaWdfaW5zbl9hdXg7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2csICoqZnVuYywgKnRtcDtcbkBAIC0xMjk2LDU3ICsxMjc1LDQ3IEBAIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRpbnQgZXJyLCBpO1xuLVx0Ym9vbCBibGluZGVkID0gZmFsc2U7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc247XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2csICpvcmlnX3Byb2c7XG4tXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7XG4tXHR1MzIgKm9yaWdfc3VicHJvZ19zdGFydHM7XG4rXHR1MzIgKm9yaWdfc3VicHJvZ19zdGFydHMgPSBOVUxMO1xuK1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChlbnYtXHUwMDNlc3VicHJvZ19jbnQgXHUwMDNjPSAxKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHByb2cgPSBvcmlnX3Byb2cgPSBlbnYtXHUwMDNlcHJvZztcbiBcdGlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7XG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KSB7XG4tXHRcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuLVx0XHR9XG4tXHRcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XG4tXHRcdGlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykge1xuLVx0XHRcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdFx0Z290byBvdXRfY2xlYW51cDtcbitcdFx0aWYgKCFwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xuK1x0XHRcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XG4rXHRcdFx0aWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7XG4rXHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRcdFx0Z290byBvdXRfY2xlYW51cDtcbitcdFx0XHR9XG4gXHRcdH1cbi1cdFx0cHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7XG4tXHRcdGlmIChJU19FUlIocHJvZykpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdGVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgXHUwMDI2cHJvZywgIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkLCBcdTAwMjZjbG9uZWQpO1xuK1x0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHRcdH1cbi1cdFx0YmxpbmRlZCA9IHRydWU7XG4gXHR9XG4gXG4gXHRlcnIgPSBqaXRfc3VicHJvZ3MoZW52KTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2ppdF9lcnI7XG4gXG4tXHRpZiAoYmxpbmRlZCkge1xuK1x0aWYgKGNsb25lZCkge1xuIFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpO1xuIFx0XHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4tXHRcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0X2ppdF9lcnI6XG4tXHRpZiAoYmxpbmRlZCkge1xuK1x0aWYgKGNsb25lZCkge1xuIFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuIFx0XHQvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuIG9yaWdpbmFsIHByb2cgKi9cbiBcdFx0cHJvZyA9IGVudi1cdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xuIFx0XHRnb3RvIG91dF9yZXN0b3JlO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGVyciAhPSAtRUZBVUxUKSB7XG4rXHRcdGlmIChlcnIgIT0gLUVGQVVMVCBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXZSB3aWxsIGZhbGwgYmFjayB0byBpbnRlcnByZXRlciBtb2RlIHdoZW4gZXJyIGlzIG5vdCAtRUZBVUxULCBiZWZvcmVcbiBcdFx0XHQgKiB0aGF0LCBpbnNuLVx1MDAzZW9mZiBhbmQgaW5zbi1cdTAwM2VpbW0gc2hvdWxkIGJlIHJlc3RvcmVkIHRvIHRoZWlyIG9yaWdpbmFsXG5AQCAtMTM2NCw3ICsxMzMzLDYgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBvdXRfcmVzdG9yZTpcbiBcdGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKGVudiwgb3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4tXHRicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKGVudiwgb3JpZ19pbnNuX2F1eCk7XG4gXHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4gb3V0X2NsZWFudXA6XG4gXHQvKiBjbGVhbnVwIG1haW4gcHJvZyB0byBiZSBpbnRlcnByZXRlZCAqL1xuQEAgLTEzNzYsOCArMTM0NCw3IEBAIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gaW50IGJwZl9maXh1cF9jYWxsX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gI2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbi1cdHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi1cdTAwM2Vwcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gcHJvZy1cdTAwM2VpbnNuc2k7XG4rXHRzdHJ1Y3QgYnBmX2luc24gKmluc247XG4gXHRpbnQgZGVwdGg7XG4gI2VuZGlmXG4gXHRpbnQgaSwgZXJyID0gMDtcbkBAIC0xNDAzLDcgKzEzNzAsNyBAQCBpbnQgYnBmX2ZpeHVwX2NhbGxfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gI2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05cbi1cdGlmIChwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xuK1x0aWYgKGVudi1cdTAwM2Vwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xuIFx0XHR2ZXJib3NlKGVudiwgXCJwcm9ncmFtIHJlcXVpcmVzIEJQRiBKSVQgY29tcGlsZXIgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGVcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuQEAgLTE0MjAsNyArMTM4Nyw3IEBAIGludCBicGZfZml4dXBfY2FsbF9hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdHZlcmJvc2UoZW52LCBcInRhaWxfY2FsbHMgYXJlIG5vdCBhbGxvd2VkIGluIG5vbi1KSVRlZCBwcm9ncmFtcyB3aXRoIGJwZi10by1icGYgY2FsbHNcXG5cIik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJvZy1cdTAwM2VsZW47IGkrKywgaW5zbisrKSB7XG4rXHRmb3IgKGkgPSAwLCBpbnNuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpOyBpIFx1MDAzYyBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47IGkrKywgaW5zbisrKSB7XG4gXHRcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcbiBcdFx0XHQvKiBXaGVuIEpJVCBmYWlscyB0aGUgcHJvZ3Mgd2l0aCBjYWxsYmFjayBjYWxsc1xuIFx0XHRcdCAqIGhhdmUgdG8gYmUgcmVqZWN0ZWQsIHNpbmNlIGludGVycHJldGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIHlldC5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGU2ZjM1ZjRlNzE1YjYuLmUzMWM0MTIwM2JkYWUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTIwMTIyLDcgKzIwMTIyLDcgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRpZiAoIWlzX3ByaXYpXG4gXHRcdG11dGV4X2xvY2soXHUwMDI2YnBmX3ZlcmlmaWVyX2xvY2spO1xuIFxuLVx0bGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuK1x0bGVuID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGEgPVxuIFx0XHRfX3ZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgbGVuKSxcbiBcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuQEAgLTIwMzY4LDcgKzIwMzY4LDcgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4gXHRyZWxlYXNlX2J0ZnMoZW52KTtcbiBlcnJfZnJlZV9lbnY6XG4gXHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpXG4tXHRcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgMCwgZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuKTtcbitcdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4pO1xuIFx0dmZyZWUoZW52LVx1MDAzZWluc25fYXV4X2RhdGEpO1xuIFx0a3ZmcmVlKGVudi1cdTAwM2VmZF9hcnJheSk7XG4gXHRicGZfc3RhY2tfbGl2ZW5lc3NfZnJlZShlbnYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTQ6MjI6NTQuMjgyMDU2NzA2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY5NTc3OTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgYW5kIEpJVCBCbGluZGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgYmxpbmRpbmcgbG9naWMuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCB3aGljaCBub3cgcmV0dXJucyBhbiBgaW50YCBpbnN0ZWFkIG9mIGEgYHN0cnVjdCBicGZfcHJvZyAqYC4gIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IOKAkyB0aGlzIHN1Z2dlc3RzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IGJsaW5kaW5nIGlzIGhhbmRsZWQuIFdlJ3JlIGFsc28gc2VlaW5nIG1vZGlmaWNhdGlvbnMgaW4gaG93IGBpbnNuX2F1eF9kYXRhYCBpcyBtYW5hZ2VkIGR1cmluZyBibGluZGluZyBhbmQgSklUaW5nLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW5gIHRvIHRyYWNrIHRoZSBsZW5ndGggYW5kIHRoZSByZW1vdmFsIG9mIHRoZSBkdXBsaWNhdGlvbiBmdW5jdGlvbnMgKGBicGZfZHVwX2luc25fYXV4X2RhdGFgLCBgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YWApIHN0cm9uZ2x5IGltcGx5IGEgZm9jdXMgb24gZWZmaWNpZW5jeSBhbmQgcG90ZW50aWFsbHksIGFkZHJlc3NpbmcgYSBzdWJ0bGUgYnVnIG9yIHJhY2UgY29uZGl0aW9uLiBUaGUgY2hhbmdlIGluIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAsIHNwZWNpZmljYWxseSB0aGUgcmVtb3ZhbCBvZiBza2lwcGluZyBgbGRpbW02NGAgaW5zdHJ1Y3Rpb25zLCBhbHNvIHdhcnJhbnRzIGNsb3NlciBzY3J1dGlueS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgdGhpcyBpcyBrZXJuZWwgY29yZSwgYW5kIHRoaXMgaXMgdG91Y2h5LiBTcGVjaWZpY2FsbHksIHRoZSBhcmVhcyBpdCdzIHRvdWNoaW5nLCBrZXJuZWwvYnBmL2ZpeHVwcy5jIGFuZCBrZXJuZWwvYnBmL2NvcmUuYy4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgYW5kIHRoZXJlZm9yZSwgaGlnaC1wcmlvcml0eSBmb3IgZnV6emluZy5cblxuSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoZSBwYXRjaCB0b3VjaGVzLiBJIHNlZSBpdCBtb2RpZmllcyBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgLCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfZml4dXBfY2FsbF9hcmdzYCwgYW5kIGBicGZfY2hlY2tgLiAgQWxyaWdodCwgYSBuaWNlLCBmb2N1c2VkIGxpc3QuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIHNjb3BlLiAgYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCBpcyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIGV4cG9ydGVkIGFuZCBtb3JlIHdpZGVseSBhY2Nlc3NpYmxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGJwZl9wcm9nX2ppdF9jb21waWxlYCAqaXMqIHN0YXRpYyB3aGljaCBsaW1pdHMgaXRzIGRpcmVjdCBpbnRlcmFjdGlvbiB0byBvdGhlciBwYXJ0cyBvZiBjb3JlLiAgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCwgYGJwZl9qaXRfc3VicHJvZ3NgIGFuZCBgYnBmX2ZpeHVwX2NhbGxfYXJnc2AgYXJlIGFsc28gbm90IHN0YXRpYy4gRmluYWxseSwgYGJwZl9jaGVja2AgaXMgdGhlIHZlcmlmaWVyIGVudHJ5IHBvaW50LCBzbyB0aGF0J3MgYSBrZXkgdGFyZ2V0LlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuICBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuOyBpdCdzIHRoZSBmb3VuZGF0aW9uLiBBbmQsIG5hdHVyYWxseSwgYENPTkZJR19CUEZfSklUYCBpcyBnb2luZyB0byBiZSB2aXRhbCBiZWNhdXNlIHdlJ3JlIHRhbGtpbmcgYWJvdXQgSklUIGJsaW5kaW5nIGhlcmUuXG5cblRvIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLCBJIHRoaW5rIEknbGwgdXNlIGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBmdW5jdGlvbiB2aXNpYmlsaXR5IGFuZCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhhdCBzaG91bGQgaGVscCBtZSBnZW5lcmF0ZSBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVnaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTQ6MjM6MDMuOTc3ODM5ODM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTgxODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2NvcmUuYz0xNTUyPXZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTE1NjYtICovXFxua2VybmVsL2JwZi9jb3JlLmM6MTU2NzppbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXFxua2VybmVsL2JwZi9jb3JlLmMtMTU2OC1cXHRcXHRcXHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2NDc9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMjY1OC1cXHRvcmlnX3Byb2cgPSBwcm9nO1xcbmtlcm5lbC9icGYvY29yZS5jOjI2NTk6XFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcXHUwMDI2cHJvZywgIWppdF9uZWVkZWQsIFxcdTAwMjZjbG9uZWQpO1xcbmtlcm5lbC9icGYvY29yZS5jLTI2NjAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MTI3NT1pbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xMjk0LVxcdFxcdH1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEyOTU6XFx0XFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcXHUwMDI2cHJvZywgIXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCwgXFx1MDAyNmNsb25lZCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xMjk2LVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDE0OjIzOjA0LjQ5OTY2MzA1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4Njk3ODM5NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb24gVGFyZ2V0cyBpbiB0aGUgQlBGIFZlcmlmaWVyL0pJVCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBvcHRpbWl6aW5nIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVC4gVGhlIGNvcmUgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2ggYXJlIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9maXh1cF9jYWxsX2FyZ3NgLCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLCBhbmQgYGJwZl9jaGVja2AuIFRoZXNlIGFyZSB0aGUga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbnNpZGVyIGlmIGBicGZfY2hlY2tgIGlzIHRvbyBicm9hZCB0byBiZSBhIHdvcnRod2hpbGUgdGFyZ2V0LiBJdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50LCBzbyBpdCBtaWdodCBiZSBoZWF2aWx5IHVzZWQsIG1ha2luZyBnYWlucyB0aGVyZSBkaWZmaWN1bHQuIEluc3RlYWQsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIG90aGVycy5cblxuVGhlIG1vcmUgcHJvbWlzaW5nIGZ1bmN0aW9ucyBhcmUgYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCwgYGJwZl9qaXRfc3VicHJvZ3NgLCBgYnBmX2ZpeHVwX2NhbGxfYXJnc2AsIGFuZCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGlkZWFsIGNhbmRpZGF0ZXMgZm9yIHRoaXMuXG5cbkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzIHRvIG1ha2Ugc3VyZSBgQlBGX0pJVGAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgYSBwcmlvcml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNDoyMzoxMS4zNjk0NTIwNDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MzEwODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTQ6MjM6MTMuODMyNTY3NTU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNTM2MDAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgQlBGIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGNoZWNraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBCUEZfU1lTQ0FMTGAgYW5kIGBCUEZfSklUYCBhcmUgdGhlIHByaW1hcnkgZmxhZ3MgbWVudGlvbmVkLCB3aXRoIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRob3NlIGNvbmZpZ3MgaW4gYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgIGFuZCBga2VybmVsL2JwZi9jb3JlLmNgIHJlc3BlY3RpdmVseS4gSSBhbHNvIG5vdGUgdGhhdCBgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OYCBpcyB1c2VkIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC5cblxuTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQuIEkndmUgZ290IGEgbGlzdCBoZXJlOiBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfZml4dXBfY2FsbF9hcmdzYCwgYW5kIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAuIGBicGZfY2hlY2tgLCB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnQsIGlzIGFsc28gdG91Y2hlZCwgYnV0IGl0J3MgcHJvYmFibHkgdG9vIGdlbmVyYWwgc2luY2UgaXQncyBvbmx5IG1vZGlmaWVkIGZvciBgZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuYC4gSSB0aGluayBJJ2xsIGZvY3VzIG9uIHRob3NlIGZpeHVwIGFuZCBKSVQgZnVuY3Rpb25zIGZvciBub3cuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCBpcyBleHBvcnRlZCBvciBqdXN0IGEgZ2xvYmFsLiBUaGF0J2xsIGluZm9ybSBob3cgZGlyZWN0bHkgaXQncyBiZWluZyB1c2VkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY1MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNDoyMzoxOS4yNDc5MzE0NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5MTExNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvZml4dXBzLmM9Mzc0PXN0YXRpYyBpbnQgYnBmX2Fkal9saW5mb19hZnRlcl9yZW1vdmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNDQwLSAqL1xcbmtlcm5lbC9icGYvZml4dXBzLmM6NDQxOnZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNDQyLXtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NDU1PXN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQ2My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjQ2NDpcXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTQ2NS1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDA2MD1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM3MC1cXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM3MTpcXHRcXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDM3Mi1cXHR2ZnJlZShlbnYtXFx1MDAzZWluc25fYXV4X2RhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNDoyMzoxOS44MTcwNDk2ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjkyNTY0NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBGaXhlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBnbG9iYWwgY2hhbmdlLCBpbXBhY3RpbmcgYm90aCBgZml4dXBzLmNgIGFuZCBgdmVyaWZpZXIuY2AuIE15IGluaXRpYWwgY29uY2VybiBpcyB0aGF0IGl0IHRvdWNoZXMgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSwgc28gaXQgbmVlZHMgY2FyZWZ1bCByZXZpZXcuIEknbSBub3RpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBpdCdzIG1vZGlmeWluZzogYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCwgYGJwZl9qaXRfc3VicHJvZ3NgLCBgYnBmX2ZpeHVwX2NhbGxfYXJnc2AsIGFuZCBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgcGFydHMgb2YgaG93IHdlIGhhbmRsZSBjb25zdGFudCBibGluZGluZywgc3VicHJvZ3JhbSBKSVR0aW5nLCBhbmQgb3ZlcmFsbCBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YS5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBwYXRjaCBsb29rcyBmdW5jdGlvbmFsLiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgaW5zbl9hdXhfZGF0YWAgaGFuZGxpbmcsIHBhcnRpY3VsYXJseSB0aGUgaW50cm9kdWN0aW9uIG9mIGBpbnNuX2F1eF9kYXRhX2xlbmAgYW5kIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQsIHNlZW0gdG8gYmUgY29ycmVjdGx5IGFkZHJlc3NpbmcgdGhlIGlzc3Vlcy4gVGhpcyBtZWFucyBpdCAqZGVmaW5pdGVseSogbmVlZHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduIHRvIHZhbGlkYXRlIGl0cyBzdGFiaWxpdHkuIFRoZSBjaGFuZ2VzIGltcGFjdCB0aGUgZnVuZGFtZW50YWwgbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uIGxvZ2ljIG9mIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgd2h5IEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBmb3IgdGhpcy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgLiBJIGJyaWVmbHkgY29uc2lkZXJlZCB3aGV0aGVyIGBCUEZfSklUX0FMV0FZU19PTmAgbmVlZGVkIHNwZWNpYWwgY29uc2lkZXJhdGlvbiwgYnV0IHNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBjb2RlIGJvdGggd2l0aGluIGFuZCBvdXRzaWRlIHRoZSBgI2lmbmRlZiBDT05GSUdfQlBGX0pJVF9BTFdBWVNfT05gIGJsb2NrLCBpdCBpcyBub3QgcmVxdWlyZWQgZm9yIHRlc3RpbmcuIEknbSBub3cgY2VydGFpbiB0aGF0IHNldHRpbmcgYEJQRl9TWVNDQUxMYCBhbmQgYEJQRl9KSVRgIGlzIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcuXG5cbkknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggdGhpcywgc28gSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjYzLCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxNDoyMzoyNi41MDk2MTY3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDMxNzM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICAgIFwiYnBmX2ppdF9zdWJwcm9nc1wiLFxuICAgIFwiYnBmX2ZpeHVwX2NhbGxfYXJnc1wiLFxuICAgIFwiYnBmX2NsZWFyX2luc25fYXV4X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIncyBoYW5kbGluZyBvZiBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKSBkdXJpbmcgY29uc3RhbnQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nLiBJdCBjaGFuZ2VzIGhvdyB0aGUgcHJvZ3JhbSBpcyBjbG9uZWQgYW5kIGhvdyBhdXhpbGlhcnkgZGF0YSBpcyB0cmFja2VkIChpbnRyb2R1Y2luZyBgaW5zbl9hdXhfZGF0YV9sZW5gKSwgd2hpY2ggYWZmZWN0cyBjb3JlIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIHZlcmlmaWNhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfYmxpbmRfY29uc3RhbnRzXCIsXG4gICAgXCJicGZfaml0X3N1YnByb2dzXCIsXG4gICAgXCJicGZfZml4dXBfY2FsbF9hcmdzXCIsXG4gICAgXCJicGZfY2xlYXJfaW5zbl9hdXhfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlcidzIGhhbmRsaW5nIG9mIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApIGR1cmluZyBjb25zdGFudCBibGluZGluZyBhbmQgc3VicHJvZ3JhbSBKSVRpbmcuIEl0IGNoYW5nZXMgaG93IHRoZSBwcm9ncmFtIGlzIGNsb25lZCBhbmQgaG93IGF1eGlsaWFyeSBkYXRhIGlzIHRyYWNrZWQgKGludHJvZHVjaW5nIGBpbnNuX2F1eF9kYXRhX2xlbmApLCB3aGljaCBhZmZlY3RzIGNvcmUgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgdmVyaWZpY2F0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[1] Phase: Succeeded StartedAt: 2026-07-29 14:24:14 +0000 UTC FinishedAt: 2026-07-29 14:24:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 14:24:14 +0000 UTC FinishedAt: 2026-07-29 14:24:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2] Phase: Succeeded StartedAt: 2026-07-29 14:24:14 +0000 UTC FinishedAt: 2026-07-29 18:23:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 14:24:14 +0000 UTC FinishedAt: 2026-07-29 18:23:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 14:24:14 +0000 UTC FinishedAt: 2026-07-29 14:24:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 14:24:14 +0000 UTC FinishedAt: 2026-07-29 14:24:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg5zz6/series-workflowg5zz6-convert-artifact-1994510770/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 14:24:24 +0000 UTC FinishedAt: 2026-07-29 14:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 14:24:24 +0000 UTC FinishedAt: 2026-07-29 14:48:52 +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:*0226d60a-eb12-4ff3-8990-ef8f9f03ed05,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-workflowg5zz6/series-workflowg5zz6-convert-artifact-1994510770/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": "024eb286-3045-4a02-9716-45d304917505", "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-workflowg5zz6/series-workflowg5zz6-build-action-173941552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 14:24:24 +0000 UTC FinishedAt: 2026-07-29 14:48:42 +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:*0226d60a-eb12-4ff3-8990-ef8f9f03ed05,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-workflowg5zz6/series-workflowg5zz6-convert-artifact-1994510770/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": "024eb286-3045-4a02-9716-45d304917505", "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-workflowg5zz6/series-workflowg5zz6-build-action-173941552/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 14:48:52 +0000 UTC FinishedAt: 2026-07-29 14:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 14:48:52 +0000 UTC FinishedAt: 2026-07-29 14:48:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 14:48:52 +0000 UTC FinishedAt: 2026-07-29 14:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 14:48:52 +0000 UTC FinishedAt: 2026-07-29 14:48:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg5zz6/series-workflowg5zz6-convert-artifact-154279629/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 14:49:02 +0000 UTC FinishedAt: 2026-07-29 14:51:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 14:49:02 +0000 UTC FinishedAt: 2026-07-29 14:50:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*024eb286-3045-4a02-9716-45d304917505,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-workflowg5zz6/series-workflowg5zz6-build-action-173941552/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-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 14:51:07 +0000 UTC FinishedAt: 2026-07-29 14:51:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 14:51:07 +0000 UTC FinishedAt: 2026-07-29 14:51:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 14:51:07 +0000 UTC FinishedAt: 2026-07-29 15:11:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 14:51:07 +0000 UTC FinishedAt: 2026-07-29 15:11:22 +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:*0226d60a-eb12-4ff3-8990-ef8f9f03ed05,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-workflowg5zz6/series-workflowg5zz6-convert-artifact-154279629/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": "d0b5ffb7-9ee0-438c-8bfe-224fb348d8bd", "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-workflowg5zz6/series-workflowg5zz6-build-action-306793641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 14:51:07 +0000 UTC FinishedAt: 2026-07-29 15:11:12 +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:*0226d60a-eb12-4ff3-8990-ef8f9f03ed05,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-workflowg5zz6/series-workflowg5zz6-convert-artifact-154279629/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": "d0b5ffb7-9ee0-438c-8bfe-224fb348d8bd", "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-workflowg5zz6/series-workflowg5zz6-build-action-306793641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 15:11:22 +0000 UTC FinishedAt: 2026-07-29 15:11:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 15:11:22 +0000 UTC FinishedAt: 2026-07-29 15:11:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 15:11:22 +0000 UTC FinishedAt: 2026-07-29 15:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 15:11:22 +0000 UTC FinishedAt: 2026-07-29 15:13:12 +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:*d0b5ffb7-9ee0-438c-8bfe-224fb348d8bd,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-workflowg5zz6/series-workflowg5zz6-build-action-306793641/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-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 15:13:22 +0000 UTC FinishedAt: 2026-07-29 18:23:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 15:13:22 +0000 UTC FinishedAt: 2026-07-29 18:23:56 +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_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"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:*024eb286-3045-4a02-9716-45d304917505,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0b5ffb7-9ee0-438c-8bfe-224fb348d8bd,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-workflowg5zz6/series-workflowg5zz6-build-action-173941552/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-workflowg5zz6/series-workflowg5zz6-build-action-306793641/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 15:13:22 +0000 UTC FinishedAt: 2026-07-29 15:13:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 15:13:22 +0000 UTC FinishedAt: 2026-07-29 15:13:27 +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_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"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-workflowg5zz6/series-workflowg5zz6-convert-artifact-3150159282/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 15:13:22 +0000 UTC FinishedAt: 2026-07-29 15:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 15:13:22 +0000 UTC FinishedAt: 2026-07-29 15:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 15:13:22 +0000 UTC FinishedAt: 2026-07-29 15:13:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 15:13:32 +0000 UTC FinishedAt: 2026-07-29 18:23:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5zz6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_jit_subprogs","bpf_fixup_call_args","bpf_clear_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fdec474c65fd35d5a6e1497ed50a9f98c07192f0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"764e9c2e-c958-464d-bd2d-8e864e1bc0bd","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 15:13:32 +0000 UTC FinishedAt: 2026-07-29 18:23:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*024eb286-3045-4a02-9716-45d304917505,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0b5ffb7-9ee0-438c-8bfe-224fb348d8bd,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-workflowg5zz6/series-workflowg5zz6-build-action-173941552/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-workflowg5zz6/series-workflowg5zz6-build-action-306793641/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-workflowg5zz6/series-workflowg5zz6-convert-artifact-3150159282/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,}