Name: series-workfloww4q6j Phase: Running StartedAt: 2026-07-23 13:54:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[0] Phase: Succeeded StartedAt: 2026-07-23 13:54:38 +0000 UTC FinishedAt: 2026-07-23 14:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 13:54:38 +0000 UTC FinishedAt: 2026-07-23 14:16:05 +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": "a23a71823352e2d792dcaae25f1ebb744acbfc0b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a23a71823352e2d792dcaae25f1ebb744acbfc0b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a9eaa282-a008-4d81-b0dd-131344e2667d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_fixup_kfunc_call", "check_kfunc_call", "update_iter_num_new_state", "inline_bpf_iter_num_new", "inline_bpf_iter_num_next", "inline_bpf_iter_num_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpeHVwX2tmdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDt1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlJiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fbmV3JiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fbmV4dCYjMzQ7LAogICAgJiMzNDtpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldywgYnBmX2l0ZXJfbnVtX25leHQsIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSBrZnVuY3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgb3B0aW1pemVzIHRoZSBleGVjdXRpb24gb2YgdGhlc2Uga2Z1bmNzIGFuZCBjYW4gYmUgcmVhY2hlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNDoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2Zjc4MTVjZWIyNWMzNzRmNjBmMDczOGVkZTgyOGYwOGE5NDI1MDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAxNDoxNTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggNjgyYzJjZDNiODQ0MzAuLjhjMDRlMmZkODAxNzBiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTYxMiw2ICYjNDM7NjEyLDE1IEBAIHN0cnVjdCBicGZfbG9vcF9pbmxpbmVfc3RhdGUge1xuIFx0dTMyIGNhbGxiYWNrX3N1YnByb2dubzsgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXG4gfTtcbiBcbiYjNDM7c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUge1xuJiM0MztcdHVuc2lnbmVkIGludCBpbml0aWFsaXplZDoxOyAvKiBzZXQgdG8gdHJ1ZSB1cG9uIGZpcnN0IGVudHJ5ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGZpdF9mb3JfaW5saW5lOjE7IC8qIHRydWUgaWYgc3RhcnQgYW5kIGVuZCBhcmUgY29uc3RhbnRcbiYjNDM7XHRcdFx0XHRcdCogd2l0aCB0aGUgc2FtZSB2YWx1ZSBhdCBlYWNoIGNhbGxcbiYjNDM7XHRcdFx0XHRcdCovXG4mIzQzO1x0czMyIHN0YXJ0OyAvKiB2YWxpZCB3aGVuIGZpdF9mb3JfaW5saW5lIGlzIHRydWUgKi9cbiYjNDM7XHRzMzIgZW5kOyAgIC8qIHZhbGlkIHdoZW4gZml0X2Zvcl9pbmxpbmUgaXMgdHJ1ZSAqL1xuJiM0Mzt9O1xuJiM0MztcbiAvKiBwb2ludGVyIGFuZCBzdGF0ZSBmb3IgbWFwcyAqL1xuIHN0cnVjdCBicGZfbWFwX3B0cl9zdGF0ZSB7XG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbkBAIC02NjEsNiAmIzQzOzY3MCwxMCBAQCBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEge1xuIFx0XHQgKiB0aGUgc3RhdGUgb2YgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyB0byBtYWtlIGRlY2lzaW9uIGFib3V0IGlubGluaW5nXG4gXHRcdCAqL1xuIFx0XHRzdHJ1Y3QgYnBmX2xvb3BfaW5saW5lX3N0YXRlIGxvb3BfaW5saW5lX3N0YXRlO1xuJiM0MztcdFx0LyogaWYgaW5zdHJ1Y3Rpb24gaXMgYSBjYWxsIHRvIGJwZl9pdGVyX251bV9uZXcgdGhpcyBmaWVsZCB0cmFja3MgaXRzIHN0YXJ0L2VuZFxuJiM0MztcdFx0ICogYXJndW1lbnRzIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCBlbGlkaW5nIHRoZSByYW5nZSBjaGVja3Mgd2hlbiBpbmxpbmluZ1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSBpdGVyX251bV9uZXdfc3RhdGU7XG4gXHR9O1xuIFx0dW5pb24ge1xuIFx0XHQvKiByZW1lbWJlciB0aGUgc2l6ZSBvZiB0eXBlIHBhc3NlZCB0byBicGZfb2JqX25ldyB0byByZXdyaXRlIFIxICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA1MmJlMGExMThjY2UwNy4uZDViNzNhZTgwMTk0NDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTEyOTYyLDYgJiM0MzsxMjk2Miw0NyBAQCBzdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ1xuIFxuIHN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIGJwZl9pdGVyX251bV9uZXcoKSBjYW4gYmUgaW5saW5lZCBtb3JlIHRpZ2h0bHkgd2hlbiBpdHMgc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMgYXJlIGNvbnN0YW50LFxuJiM0MzsgKiBhcyB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBjYW4gdGhlbiBiZSByZXNvbHZlZCBhdCByZXdyaXRlIHRpbWUuIFJlY29yZCwgcGVyXG4mIzQzOyAqIGNhbGwgc2l0ZSwgd2hldGhlciBib3RoIGFyZ3VtZW50cyBhcmUgY29uc3RhbnQgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvbiBldmVyeSB2aXNpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgKnN0YXRlID0gXHUwMDI2Y3VyX2F1eChlbnYpLVx1MDAzZWl0ZXJfbnVtX25ld19zdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3RhcnRfcmVnID0gXHUwMDI2Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzJdO1xuJiM0MztcdHN0cnVjdCBicGZfcmVnX3N0YXRlICplbmRfcmVnID0gXHUwMDI2Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzNdO1xuJiM0MztcdGJvb2wga25vd24gPSB0bnVtX2lzX2NvbnN0KHN0YXJ0X3JlZy1cdTAwM2V2YXJfb2ZmKSBcdTAwMjZcdTAwMjYgdG51bV9pc19jb25zdChlbmRfcmVnLVx1MDAzZXZhcl9vZmYpO1xuJiM0MztcdHMzMiBzdGFydCA9IHN0YXJ0X3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuJiM0MztcdHMzMiBlbmQgPSBlbmRfcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdGF0ZS1cdTAwM2Vpbml0aWFsaXplZCkge1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlaW5pdGlhbGl6ZWQgPSAxO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlZml0X2Zvcl9pbmxpbmUgPSBrbm93bjtcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZXN0YXJ0ID0gc3RhcnQ7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VlbmQgPSBlbmQ7XG4mIzQzO1x0fSBlbHNlIGlmIChzdGF0ZS1cdTAwM2VmaXRfZm9yX2lubGluZSkge1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlZml0X2Zvcl9pbmxpbmUgPSBrbm93biBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlc3RhcnQgPT0gc3RhcnQgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWVuZCA9PSBlbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoaWxlIGZvbGRpbmcgaXMgc3RpbGwgdmlhYmxlIHRoZSBkZWNpc2lvbiByZWxpZXMgb24gdGhlIGV4YWN0IGNvbnN0YW50IHZhbHVlcywgc28gbWFya1xuJiM0MztcdCAqIHRoZSByZWdpc3RlcnMgcHJlY2lzZTsgb3RoZXJ3aXNlIHRoZSB2ZXJpZmllciBjb3VsZCBwcnVuZSBhIHBhdGggdGhhdCByZWFjaGVzIHRoaXMgY2FsbFxuJiM0MztcdCAqIHdpdGggZGlmZmVyZW50IGNvbnN0YW50cyBhbmQgdGhlIGZvbGRlZCBjb2RlIHdvdWxkIHJ1biB3aXRoIGEgc3RhbGUgdmFsdWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHN0YXRlLVx1MDAzZWZpdF9mb3JfaW5saW5lKSB7XG4mIzQzO1x0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIEJQRl9SRUdfMik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBCUEZfUkVHXzMpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0ICAgIGludCAqaW5zbl9pZHhfcClcbiB7XG5AQCAtMTMxNjMsNiAmIzQzOzEzMjA0LDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xuJiM0MztcdFx0ZXJyID0gdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZShlbnYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHUzMiByZWdubyA9IGNhbGxlcl9zYXZlZFtpXTtcbiBcbkBAIC0xOTc3MCw2ICYjNDM7MTk4MTcsMTA5IEBAIHN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcbiBcdCpjbnQgPSA0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogSW5saW5lIGJwZl9pdGVyX251bV9uZXcoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLCBSMiBhbmQgUjMgaG9sZCB0aGUgKGludClcbiYjNDM7ICogc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMuIEtlZXAgaW4gc3luYyB3aXRoIHRoZSBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGlubGluZV9icGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsIHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGludCBpID0gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIHN0YXJ0IGFuZCBlbmQgYXJlIGNvbnN0YW50IHRoZSByYW5nZSBjaGVja3MgYW5kIHRoZWlyIGVycm9yIHBhdGhzIGZvbGQgYXdheSxcbiYjNDM7XHQgKiBsZWF2aW5nIGp1c3QgdGhlIHN0YXRlIGluaXQgb3IgdGhlIGVycm9yIHJlc3VsdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3RhdGUtXHUwMDNlZml0X2Zvcl9pbmxpbmUpIHtcbiYjNDM7XHRcdHMzMiBzdGFydCA9IHN0YXRlLVx1MDAzZXN0YXJ0LCBlbmQgPSBzdGF0ZS1cdTAwM2VlbmQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXJ0IFx1MDAzZSBlbmQpIHtcbiYjNDM7XHRcdFx0Lyogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRUlOVkFMOyAqL1xuJiM0MztcdFx0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcbiYjNDM7XHRcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xuJiM0MztcdFx0fSBlbHNlIGlmICgoczY0KWVuZCAtIChzNjQpc3RhcnQgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIHtcbiYjNDM7XHRcdFx0Lyogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXG4mIzQzO1x0XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuJiM0MztcdFx0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qIHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxOyBzLVx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXG4mIzQzO1x0XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgMCwgc3RhcnQgLSAxKTtcbiYjNDM7XHRcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfVywgQlBGX1JFR18xLCA0LCBlbmQpO1xuJiM0MztcdFx0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gaTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGlmIChzdGFydCBcdTAwM2UgZW5kKSBnb3RvIGVpbnZhbDsgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dULCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgOCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzdGFydCBcdTAwM2M9IGVuZCBoZXJlLCBzbyB0aGUgcmFuZ2UgZW5kIC0gc3RhcnQgZml0cyBpbiBhIHUzMjsgY29tcHV0ZSBpdCBhcyBhIDMyLWJpdFxuJiM0MztcdCAqIHN1YnRyYWN0aW9uIHRoYXQgemVyby1leHRlbmRzIGludG8gcjAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjMyX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMyk7XG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0FMVTMyX1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMik7XG4mIzQzO1x0LyogaWYgKHIwIFx1MDAzZSBCUEZfTUFYX0xPT1BTKSBnb3RvIGUyYmlnOyAqL1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfSU1NKEJQRl9KU0dULCBCUEZfUkVHXzAsIEJQRl9NQVhfTE9PUFMsIDgpO1xuJiM0MztcdC8qIHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxOyAqL1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtMSk7XG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18yLCAwKTtcbiYjNDM7XHQvKiBzLVx1MDAzZWVuZCA9IGVuZDsgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzMsIDQpO1xuJiM0MztcdC8qIHJldHVybiAwOyAqL1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoNSk7XG4mIzQzO1x0LyogZWludmFsOiBzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovXG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSgyKTtcbiYjNDM7XHQvKiBlMmJpZzogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FMkJJRyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX25leHQoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aCB0aGVcbiYjNDM7ICoga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiYjNDM7e1xuJiM0MztcdGludCBpID0gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzLVx1MDAzZWN1ciBhbmQgcy1cdTAwM2VlbmQgYXJlIGludCwgc28gdGhlIChzNjQpKHMtXHUwMDNlY3VyICYjNDM7IDEpIFx1MDAzZT0gcy1cdTAwM2VlbmQgY2hlY2sgaXMgZXF1aXZhbGVudCB0byBhXG4mIzQzO1x0ICogc2lnbmVkIDMyLWJpdCBjb21wYXJpc29uIG9mIChzLVx1MDAzZWN1ciAmIzQzOyAxKSBhZ2FpbnN0IHMtXHUwMDNlZW5kIGFuZCBuZWVkcyBubyBzaWduIGV4dGVuc2lvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApO1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18wLCAxKTtcbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18yLCBCUEZfUkVHXzEsIDQpO1xuJiM0MztcdC8qIGlmICgoczMyKShzLVx1MDAzZWN1ciAmIzQzOyAxKSBcdTAwM2U9IChzMzIpcy1cdTAwM2VlbmQpIGdvdG8gZG9uZTsgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dFLCBCUEZfUkVHXzAsIEJQRl9SRUdfMiwgMyk7XG4mIzQzO1x0Lyogcy1cdTAwM2VjdXImIzQzOyYjNDM7OyByZXR1cm4gXHUwMDI2cy1cdTAwM2VjdXI7ICovXG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTtcbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoMik7XG4mIzQzO1x0LyogZG9uZTogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIElubGluZSBicGZfaXRlcl9udW1fZGVzdHJveSgpLiBSMSBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgaXRlcmF0b3IuIEtlZXAgaW4gc3luYyB3aXRoXG4mIzQzOyAqIHRoZSBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDsgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBpbnQgaW5zbl9pZHgsIGludCAqY250KVxuIHtcbkBAIC0xOTg5OSw2ICYjNDM7MjAwNDksMTMgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiBcdFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdCpjbnQgPSA2O1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xuJiM0MztcdFx0KmNudCA9IGlubGluZV9icGZfaXRlcl9udW1fbmV3KGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5pdGVyX251bV9uZXdfc3RhdGUpO1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHtcbiYjNDM7XHRcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoaW5zbl9idWYpO1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcbiYjNDM7XHRcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koaW5zbl9idWYpO1xuIFx0fVxuIFxuIFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5hcmdfcHJvZykge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggNTVkMzk0NDM4NzA1YTYuLjMxNzRjMmYxOGU3MTUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC05NjUsNiAmIzQzOzk2NSw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXFxcbiBcdFx0XHQgICAgJChPVVRQVVQpL3BlcmZidWZfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2xvb3AubzogJChPVVRQVVQpL2JwZl9sb29wX2JlbmNoLnNrZWwuaFxuJiM0MzskKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vOiAkKE9VVFBVVCkvYnBmX2Zvcl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubzogJChPVVRQVVQpL2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX2JlbmNoLnNrZWwuaFxuQEAgLTk5MCw2ICYjNDM7OTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vIFxcXG4mIzQzO1x0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9mb3IubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm8gXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkMy4uYjg2YjczNDU2ZDNjYTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yNzYsNiAmIzQzOzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9ibG9vbV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zdHJuY21wX2FyZ3A7XG5AQCAtMjkyLDYgJiM0MzsyOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xuIFx0eyBcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcJiMzNDtSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2Jsb29tX21hcF9hcmdwLCAwLCBcJiMzNDtCbG9vbSBmaWx0ZXIgbWFwIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCBcJiMzNDticGZfbG9vcCBoZWxwZXIgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4mIzQzO1x0eyBcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsIDAsIFwmIzM0O2JwZl9mb3IgbG9vcCBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCBcJiMzNDtsb2NhbF9zdG9yYWdlIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9zdHJuY21wX2FyZ3AsIDAsIFwmIzM0O2JwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncCwgMCxcbkBAIC01NTcsNiAmIzQzOzU1OSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYmxvb21fZmFsc2VfcG9zaXRpdmU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb207XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhfYmxvb207XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbG9vcDtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9ub19oZWxwZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlO1xuQEAgLTY0MCw2ICYjNDM7NjQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9icGZfbG9vcCxcbiYjNDM7XHRcdTAwMjZiZW5jaF9icGZfZm9yLFxuIFx0XHUwMDI2YmVuY2hfc3RybmNtcF9ub19oZWxwZXIsXG4gXHRcdTAwMjZiZW5jaF9zdHJuY21wX2hlbHBlcixcbiBcdFx1MDAyNmJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzMwYzUxYWQyZGVjMzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXG5AQCAtMCwwICYjNDM7MSwxMDQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JlbmNoLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2Zvcl9iZW5jaC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIEJQRiB0cmlnZ2VyaW5nIGJlbmNobWFya3MgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBjdHgge1xuJiM0MztcdHN0cnVjdCBicGZfZm9yX2JlbmNoICpza2VsO1xuJiM0Mzt9IGN0eDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qge1xuJiM0MztcdF9fdTMyIG5yX2xvb3BzO1xuJiM0Mzt9IGFyZ3MgPSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEZWZhdWx0IHRvIGEgbGFyZ2UgbG9vcCBjb3VudCBzbyB0aGUgcGVyLWl0ZXJhdGlvbiBicGZfaXRlcl9udW1fbmV4dCgpIGNvc3QgZG9taW5hdGVzXG4mIzQzO1x0ICogdGhlIG9uZS10aW1lIGJwZl9pdGVyX251bV9uZXcoKS9kZXN0cm95KCkgc2V0dXAgYW5kIHRlYXJkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdC5ucl9sb29wcyA9IDEwMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRBUkdfTlJfTE9PUFMgPSA0MDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4mIzQzO1x0eyBcJiMzNDtucl9sb29wc1wmIzM0OywgQVJHX05SX0xPT1BTLCBcJiMzNDtucl9sb29wc1wmIzM0OywgMCxcbiYjNDM7XHRcdFwmIzM0O1NldCBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgdGhlIGJwZl9mb3IoKSBsb29wXCYjMzQ7fSxcbiYjNDM7XHR7fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoa2V5KSB7XG4mIzQzO1x0Y2FzZSBBUkdfTlJfTE9PUFM6XG4mIzQzO1x0XHRhcmdzLm5yX2xvb3BzID0gc3RydG9sKGFyZywgTlVMTCwgMTApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGV4cG9ydGVkIGludG8gYmVuY2htYXJrIHJ1bm5lciAqL1xuJiM0Mztjb25zdCBzdHJ1Y3QgYXJncCBiZW5jaF9icGZfZm9yX2FyZ3AgPSB7XG4mIzQzO1x0Lm9wdGlvbnMgPSBvcHRzLFxuJiM0MztcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKHRydWUpXG4mIzQzO1x0XHQvKiB0cmlnZ2VyIHRoZSBicGYgcHJvZ3JhbSAqL1xuJiM0MztcdFx0c3lzY2FsbChfX05SX2dldHBnaWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXMtXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFx1MDAyNmN0eC5za2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0dXAodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiYjNDM7XG4mIzQzO1x0c2V0dXBfbGliYnBmKCk7XG4mIzQzO1xuJiM0MztcdGN0eC5za2VsID0gYnBmX2Zvcl9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghY3R4LnNrZWwpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiBza2VsZXRvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYmVuY2htYXJrKTtcbiYjNDM7XHRpZiAoIWxpbmspIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gYXR0YWNoIHByb2dyYW0hXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlbnJfbG9vcHMgPSBhcmdzLm5yX2xvb3BzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvciA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2JwZi1mb3JcJiMzNDssXG4mIzQzO1x0LmFyZ3AgPSBcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsXG4mIzQzO1x0LnZhbGlkYXRlID0gdmFsaWRhdGUsXG4mIzQzO1x0LnNldHVwID0gc2V0dXAsXG4mIzQzO1x0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxuJiM0MztcdC5tZWFzdXJlID0gbWVhc3VyZSxcbiYjNDM7XHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcbiYjNDM7XHQucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaFxuQEAgLTAsMCAmIzQzOzEsMTUgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7c291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcbiYjNDM7XG4mIzQzO3NldCAtZXVmbyBwaXBlZmFpbFxuJiM0MztcbiYjNDM7Zm9yIHQgaW4gMSA0IDggMTIgMTY7IGRvXG4mIzQzO2ZvciBpIGluIDEwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwIDUwMDAwIDEwMDAwMCA1MDAwMDAgMTAwMDAwMDsgZG9cbiYjNDM7c3VidGl0bGUgXCYjMzQ7bnJfbG9vcHM6ICRpLCBucl90aHJlYWRzOiAkdFwmIzM0O1xuJiM0MztcdHN1bW1hcml6ZV9vcHMgXCYjMzQ7YnBmX2ZvcjogXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIFwmIzM0OyQoJFJVTl9CRU5DSCAtcCAkdCAtLW5yX2xvb3BzICRpIGJwZi1mb3IpXCYjMzQ7XG4mIzQzO1x0cHJpbnRmIFwmIzM0O1xcblwmIzM0O1xuJiM0Mztkb25lXG4mIzQzO2RvbmVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNzUyZGU1YzQ0ZjU3YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xuQEAgLTAsMCAmIzQzOzEsMzIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0Mzt1MzIgbnJfbG9vcHM7XG4mIzQzO2xvbmcgaGl0cztcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3V0ZXJfbG9vcChfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVtcHR5IGJvZHk6IHRoZSB3b3JrIGJlaW5nIG1lYXN1cmVkIGlzIHRoZSBvcGVuLWNvZGVkIG51bWVyaWMgaXRlcmF0b3IgaXRzZWxmXG4mIzQzO1x0ICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLlxuJiM0MztcdCAqL1xuJiM0MztcdGJwZl9mb3IoaSwgMCwgbnJfbG9vcHMpXG4mIzQzO1x0XHQ7XG4mIzQzO1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2aGl0cywgbnJfbG9vcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L1wmIzM0OyBTWVNfUFJFRklYIFwmIzM0O3N5c19nZXRwZ2lkXCYjMzQ7KVxuJiM0MztpbnQgYmVuY2htYXJrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuaW5kZXggMGZhNzBiMTMzZDkzMjIuLmM0ZGY1ODllY2Q3YWU0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXG5AQCAtODgsNiAmIzQzOzg4LDE1MSBAQCBpbnQgaXRlcl9lcnJfdW5zYWZlX2FzbV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTmFrZWQgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBjb21waWxlci1nZW5lcmF0ZWQgZ2x1ZSBhbmQgdGhlIHdob2xlIGlubGluZWQgcHJvZ3JhbSBjYW4gYmVcbiYjNDM7ICogbWF0Y2hlZC4gUGlubmVkIHRvIGFyY2hlcyB3aG9zZSBKSVRzIHplcm8tZXh0ZW5kIDMyLWJpdCB3cml0ZXMgaW1wbGljaXRseVxuJiM0MzsgKiAoYnBmX2ppdF9uZWVkc196ZXh0KCkgPT0gZmFsc2UpOyBvbiBhcmNoZXMgdGhhdCBuZWVkIGV4cGxpY2l0IHplcm8tZXh0ZW5zaW9uIHRoZSB2ZXJpZmllclxuJiM0MzsgKiBpbnRlcmxlYXZlcyBcJiMzNDt3TiA9IHdOXCYjMzQ7IGluc25zIGFuZCB0aGUgZml4ZWQgc2hhcGUgYmVsb3cgd291bGQgbm90IG1hdGNoLiBUaGUgaW5saW5pbmcgaXRzZWxmIGlzXG4mIzQzOyAqIGFyY2ggaW5kZXBlbmRlbnQsIHNvIGNoZWNraW5nIGl0IG9uIHRoZXNlIGFyY2hlcyBpcyBzdWZmaWNpZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBXaXRoIGNvbnN0YW50IGJvdW5kcyBicGZfaXRlcl9udW1fbmV3KCkgaXMgaW5saW5lZCB3aXRoIHRoZSByYW5nZSBjaGVja3MgZm9sZGVkIGF3YXksIGp1c3RcbiYjNDM7ICogc3RvcmluZyB0aGUgaW5pdGlhbCBzdGF0ZSAocy1cdTAwM2VjdXIgPSBzdGFydCAtIDEsIHMtXHUwMDNlZW5kID0gZW5kKTsgYnBmX2l0ZXJfbnVtX25leHQoKSBhbmRcbiYjNDM7ICogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28sIGxlYXZpbmcgYSBjYWxsLWZyZWUgbG9vcC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX3hsYXRlZChcJiMzNDtyNiA9IHIxMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjYgJiM0Mzs9IC04XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMSA9IHI2XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMiA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IzID0gMTBcJiMzNDspXG4mIzQzOy8qIGJwZl9pdGVyX251bV9uZXcoXHUwMDI2aXQsIDAsIDEwKSBmb2xkZWQgdG8gdGhlIHN0YXRlIGluaXQgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IC0xXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHUzMiAqKShyMSAmIzQzOzQpID0gMTBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpICovXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gKih1MzIgKikocjEgJiM0MzswKVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzAgJiM0Mzs9IDFcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IyID0gKih1MzIgKikocjEgJiM0Mzs0KVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7aWYgdzAgc1x1MDAzZT0gdzIgZ290byBwYyYjNDM7M1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IHIxXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtnb3RvIHBjJiM0MzsyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtpZiByMCAhPSAweDAgZ290byBwYy0xMVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXHUwMDI2aXQpICovXG4mIzQzO19feGxhdGVkKFwmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2V4aXRcJiMzNDspXG4mIzQzO2ludCBfX25ha2VkIGl0ZXJfbnVtX25ld19jb25zdF9mb2xkZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cbiYjNDM7XHRcdFwmIzM0O3I2ID0gcjEwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjYgJiM0Mzs9IC04O1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjEgPSByNjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IyID0gMDtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IzID0gMTA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MTpcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7aWYgcjAgIT0gMCBnb3RvIDFiO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjEgPSByNjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdFx0OlxuJiM0MztcdFx0OiBfX2ltbShicGZfaXRlcl9udW1fbmV3KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25leHQpLFxuJiM0MztcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fZGVzdHJveSlcbiYjNDM7XHRcdDogX19jbG9iYmVyX2NvbW1vbiwgXCYjMzQ7cjZcJiMzNDtcbiYjNDM7XHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTYW1lIGFyY2ggcGlubmluZyBhbmQgbmFrZWQtZnVuY3Rpb24gcmF0aW9uYWxlIGFzIGFib3ZlLiBXaXRoIGEgbm9uLWNvbnN0YW50IGJvdW5kXG4mIzQzOyAqIGJwZl9pdGVyX251bV9uZXcoKSBrZWVwcyB0aGUgZnVsbCByYW5nZSBjaGVjazogdGhlIGRpc3RhbmNlIGlzIGNvbXB1dGVkIGFuZCBib3RoIHRoZSAtRUlOVkFMXG4mIzQzOyAqIGFuZCAtRTJCSUcgZXJyb3IgcGF0aHMgcmVtYWluLiBicGZfaXRlcl9udW1fbmV4dCgpIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSgpIGFyZSBpbmxpbmVkIHRvby5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX3hsYXRlZChcJiMzNDtyNiA9IHIxMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjYgJiM0Mzs9IC04XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtjYWxsIHVua25vd25cJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IzID0gcjBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IzIFx1MDAyNj0gNjU1MzVcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IxID0gcjZcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IyID0gMFwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX25ldyhcdTAwMjZpdCwgMCwgXHUwMDNjbm9uLWNvbnN0XHUwMDNlKSB3aXRoIHRoZSByYW5nZSBjaGVjayBrZXB0ICovXG4mIzQzO19feGxhdGVkKFwmIzM0O2lmIHcyIHNcdTAwM2UgdzMgZ290byBwYyYjNDM7OFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzAgPSB3M1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzAgLT0gdzJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2lmIHIwIHNcdTAwM2UgMHg4MDAwMDAgZ290byBwYyYjNDM7OFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzIgJiM0Mzs9IC0xXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHUzMiAqKShyMSAmIzQzOzApID0gcjJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OyoodTMyICopKHIxICYjNDM7NCkgPSByM1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtnb3RvIHBjJiM0Mzs1XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAtMjJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2dvdG8gcGMmIzQzOzJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IC03XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMSA9IHI2XCYjMzQ7KVxuJiM0MzsvKiBicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCkgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAqKHUzMiAqKShyMSAmIzQzOzApXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDt3MCAmIzQzOz0gMVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjIgPSAqKHUzMiAqKShyMSAmIzQzOzQpXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtpZiB3MCBzXHUwMDNlPSB3MiBnb3RvIHBjJiM0MzszXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHUzMiAqKShyMSAmIzQzOzApID0gcjBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gcjFcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2dvdG8gcGMmIzQzOzJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2lmIHIwICE9IDB4MCBnb3RvIHBjLTExXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMSA9IHI2XCYjMzQ7KVxuJiM0MzsvKiBicGZfaXRlcl9udW1fZGVzdHJveShcdTAwMjZpdCkgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1NjQgKikocjEgJiM0MzswKSA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7ZXhpdFwmIzM0OylcbiYjNDM7aW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cbiYjNDM7XHRcdFwmIzM0O3I2ID0gcjEwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjYgJiM0Mzs9IC04O1wmIzM0O1xuJiM0MztcdFx0Lyogbm9uLWNvbnN0YW50IGVuZCBzbyB0aGUgcmFuZ2UgY2hlY2tzIGFyZSBrZXB0ICovXG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMyA9IHIwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjMgXHUwMDI2PSAweGZmZmY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMSA9IHI2O1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjIgPSAwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1wmIzM0O1xuJiM0MztcdFwmIzM0OzE6XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMSA9IHI2O1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXh0XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2lmIHIwICE9IDAgZ290byAxYjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHRcdDpcbiYjNDM7XHRcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXG4mIzQzO1x0XHQgIF9faW1tKGJwZl9pdGVyX251bV9uZXcpLFxuJiM0MztcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksXG4mIzQzO1x0XHQgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KVxuJiM0MztcdFx0OiBfX2Nsb2JiZXJfY29tbW9uLCBcJiMzNDtyNlwmIzM0O1xuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgaXRlcl93aGlsZV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZml4dXBfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUmIzM0OywKICAgICYjMzQ7aW5saW5lX2JwZl9pdGVyX251bV9uZXcmIzM0OywKICAgICYjMzQ7aW5saW5lX2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGlubGluZSBicGZfaXRlcl9udW1fbmV3LCBicGZfaXRlcl9udW1fbmV4dCwgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95IGtmdW5jcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBvcHRpbWl6ZXMgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBrZnVuY3MgYW5kIGNhbiBiZSByZWFjaGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NmY3ODE1Y2ViMjVjMzc0ZjYwZjA3MzhlZGU4MjhmMDhhOTQyNTAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMTQ6MTU6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA2ODJjMmNkM2I4NDQzMC4uOGMwNGUyZmQ4MDE3MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtNjEyLDYgJiM0Mzs2MTIsMTUgQEAgc3RydWN0IGJwZl9sb29wX2lubGluZV9zdGF0ZSB7CiAJdTMyIGNhbGxiYWNrX3N1YnByb2dubzsgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovCiB9OwogCiYjNDM7c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgewomIzQzOwl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ6MTsgLyogc2V0IHRvIHRydWUgdXBvbiBmaXJzdCBlbnRyeSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZml0X2Zvcl9pbmxpbmU6MTsgLyogdHJ1ZSBpZiBzdGFydCBhbmQgZW5kIGFyZSBjb25zdGFudAomIzQzOwkJCQkJKiB3aXRoIHRoZSBzYW1lIHZhbHVlIGF0IGVhY2ggY2FsbAomIzQzOwkJCQkJKi8KJiM0MzsJczMyIHN0YXJ0OyAvKiB2YWxpZCB3aGVuIGZpdF9mb3JfaW5saW5lIGlzIHRydWUgKi8KJiM0MzsJczMyIGVuZDsgICAvKiB2YWxpZCB3aGVuIGZpdF9mb3JfaW5saW5lIGlzIHRydWUgKi8KJiM0Mzt9OwomIzQzOwogLyogcG9pbnRlciBhbmQgc3RhdGUgZm9yIG1hcHMgKi8KIHN0cnVjdCBicGZfbWFwX3B0cl9zdGF0ZSB7CiAJc3RydWN0IGJwZl9tYXAgKm1hcF9wdHI7CkBAIC02NjEsNiAmIzQzOzY3MCwxMCBAQCBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgewogCQkgKiB0aGUgc3RhdGUgb2YgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyB0byBtYWtlIGRlY2lzaW9uIGFib3V0IGlubGluaW5nCiAJCSAqLwogCQlzdHJ1Y3QgYnBmX2xvb3BfaW5saW5lX3N0YXRlIGxvb3BfaW5saW5lX3N0YXRlOwomIzQzOwkJLyogaWYgaW5zdHJ1Y3Rpb24gaXMgYSBjYWxsIHRvIGJwZl9pdGVyX251bV9uZXcgdGhpcyBmaWVsZCB0cmFja3MgaXRzIHN0YXJ0L2VuZAomIzQzOwkJICogYXJndW1lbnRzIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCBlbGlkaW5nIHRoZSByYW5nZSBjaGVja3Mgd2hlbiBpbmxpbmluZwomIzQzOwkJICovCiYjNDM7CQlzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSBpdGVyX251bV9uZXdfc3RhdGU7CiAJfTsKIAl1bmlvbiB7CiAJCS8qIHJlbWVtYmVyIHRoZSBzaXplIG9mIHR5cGUgcGFzc2VkIHRvIGJwZl9vYmpfbmV3IHRvIHJld3JpdGUgUjEgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA1MmJlMGExMThjY2UwNy4uZDViNzNhZTgwMTk0NDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTEyOTYyLDYgJiM0MzsxMjk2Miw0NyBAQCBzdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZwogCiBzdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpOwogCiYjNDM7LyoKJiM0MzsgKiBicGZfaXRlcl9udW1fbmV3KCkgY2FuIGJlIGlubGluZWQgbW9yZSB0aWdodGx5IHdoZW4gaXRzIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzIGFyZSBjb25zdGFudCwKJiM0MzsgKiBhcyB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBjYW4gdGhlbiBiZSByZXNvbHZlZCBhdCByZXdyaXRlIHRpbWUuIFJlY29yZCwgcGVyCiYjNDM7ICogY2FsbCBzaXRlLCB3aGV0aGVyIGJvdGggYXJndW1lbnRzIGFyZSBjb25zdGFudCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9uIGV2ZXJ5IHZpc2l0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgKnN0YXRlID0gJmFtcDtjdXJfYXV4KGVudiktJmd0O2l0ZXJfbnVtX25ld19zdGF0ZTsKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0YXJ0X3JlZyA9ICZhbXA7Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzJdOwomIzQzOwlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZW5kX3JlZyA9ICZhbXA7Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzNdOwomIzQzOwlib29sIGtub3duID0gdG51bV9pc19jb25zdChzdGFydF9yZWctJmd0O3Zhcl9vZmYpICZhbXA7JmFtcDsgdG51bV9pc19jb25zdChlbmRfcmVnLSZndDt2YXJfb2ZmKTsKJiM0MzsJczMyIHN0YXJ0ID0gc3RhcnRfcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwomIzQzOwlzMzIgZW5kID0gZW5kX3JlZy0mZ3Q7dmFyX29mZi52YWx1ZTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFzdGF0ZS0mZ3Q7aW5pdGlhbGl6ZWQpIHsKJiM0MzsJCXN0YXRlLSZndDtpbml0aWFsaXplZCA9IDE7CiYjNDM7CQlzdGF0ZS0mZ3Q7Zml0X2Zvcl9pbmxpbmUgPSBrbm93bjsKJiM0MzsJCXN0YXRlLSZndDtzdGFydCA9IHN0YXJ0OwomIzQzOwkJc3RhdGUtJmd0O2VuZCA9IGVuZDsKJiM0MzsJfSBlbHNlIGlmIChzdGF0ZS0mZ3Q7Zml0X2Zvcl9pbmxpbmUpIHsKJiM0MzsJCXN0YXRlLSZndDtmaXRfZm9yX2lubGluZSA9IGtub3duICZhbXA7JmFtcDsgc3RhdGUtJmd0O3N0YXJ0ID09IHN0YXJ0ICZhbXA7JmFtcDsgc3RhdGUtJmd0O2VuZCA9PSBlbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2hpbGUgZm9sZGluZyBpcyBzdGlsbCB2aWFibGUgdGhlIGRlY2lzaW9uIHJlbGllcyBvbiB0aGUgZXhhY3QgY29uc3RhbnQgdmFsdWVzLCBzbyBtYXJrCiYjNDM7CSAqIHRoZSByZWdpc3RlcnMgcHJlY2lzZTsgb3RoZXJ3aXNlIHRoZSB2ZXJpZmllciBjb3VsZCBwcnVuZSBhIHBhdGggdGhhdCByZWFjaGVzIHRoaXMgY2FsbAomIzQzOwkgKiB3aXRoIGRpZmZlcmVudCBjb25zdGFudHMgYW5kIHRoZSBmb2xkZWQgY29kZSB3b3VsZCBydW4gd2l0aCBhIHN0YWxlIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YXRlLSZndDtmaXRfZm9yX2lubGluZSkgewomIzQzOwkJZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBCUEZfUkVHXzIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBCUEZfUkVHXzMpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkgICAgaW50ICppbnNuX2lkeF9wKQogewpAQCAtMTMxNjMsNiAmIzQzOzEzMjA0LDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCX0KIAl9CiAKJiM0MzsJaWYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25ld10pIHsKJiM0MzsJCWVyciA9IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoZW52KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDQUxMRVJfU0FWRURfUkVHUzsgaSYjNDM7JiM0MzspIHsKIAkJdTMyIHJlZ25vID0gY2FsbGVyX3NhdmVkW2ldOwogCkBAIC0xOTc3MCw2ICYjNDM7MTk4MTcsMTA5IEBAIHN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCwKIAkqY250ID0gNDsKIH0KIAomIzQzOy8qCiYjNDM7ICogSW5saW5lIGJwZl9pdGVyX251bV9uZXcoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLCBSMiBhbmQgUjMgaG9sZCB0aGUgKGludCkKJiM0MzsgKiBzdGFydCBhbmQgZW5kIGFyZ3VtZW50cy4gS2VlcCBpbiBzeW5jIHdpdGggdGhlIGtmdW5jIGluIGtlcm5lbC9icGYvYnBmX2l0ZXIuYy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGlubGluZV9icGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsIHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBzdGFydCBhbmQgZW5kIGFyZSBjb25zdGFudCB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBmb2xkIGF3YXksCiYjNDM7CSAqIGxlYXZpbmcganVzdCB0aGUgc3RhdGUgaW5pdCBvciB0aGUgZXJyb3IgcmVzdWx0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YXRlLSZndDtmaXRfZm9yX2lubGluZSkgewomIzQzOwkJczMyIHN0YXJ0ID0gc3RhdGUtJmd0O3N0YXJ0LCBlbmQgPSBzdGF0ZS0mZ3Q7ZW5kOwomIzQzOwomIzQzOwkJaWYgKHN0YXJ0ICZndDsgZW5kKSB7CiYjNDM7CQkJLyogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovCiYjNDM7CQkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7CiYjNDM7CQkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpOwomIzQzOwkJfSBlbHNlIGlmICgoczY0KWVuZCAtIChzNjQpc3RhcnQgJmd0OyBCUEZfTUFYX0xPT1BTKSB7CiYjNDM7CQkJLyogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIC1FMkJJRzsgKi8KJiM0MzsJCQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTsKJiM0MzsJCQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogcy0mZ3Q7Y3VyID0gc3RhcnQgLSAxOyBzLSZndDtlbmQgPSBlbmQ7IHJldHVybiAwOyAqLwomIzQzOwkJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgMCwgc3RhcnQgLSAxKTsKJiM0MzsJCQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIDQsIGVuZCk7CiYjNDM7CQkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIGk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogaWYgKHN0YXJ0ICZndDsgZW5kKSBnb3RvIGVpbnZhbDsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHVCwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIDgpOwomIzQzOwkvKgomIzQzOwkgKiBzdGFydCAmbHQ7PSBlbmQgaGVyZSwgc28gdGhlIHJhbmdlIGVuZCAtIHN0YXJ0IGZpdHMgaW4gYSB1MzI7IGNvbXB1dGUgaXQgYXMgYSAzMi1iaXQKJiM0MzsJICogc3VidHJhY3Rpb24gdGhhdCB6ZXJvLWV4dGVuZHMgaW50byByMC4KJiM0MzsJICovCiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1YzMl9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzMpOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfQUxVMzJfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18yKTsKJiM0MzsJLyogaWYgKHIwICZndDsgQlBGX01BWF9MT09QUykgZ290byBlMmJpZzsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9JTU0oQlBGX0pTR1QsIEJQRl9SRUdfMCwgQlBGX01BWF9MT09QUywgOCk7CiYjNDM7CS8qIHMtJmd0O2N1ciA9IHN0YXJ0IC0gMTsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0FMVTMyX0lNTShCUEZfQURELCBCUEZfUkVHXzIsIC0xKTsKJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18yLCAwKTsKJiM0MzsJLyogcy0mZ3Q7ZW5kID0gZW5kOyAqLwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzMsIDQpOwomIzQzOwkvKiByZXR1cm4gMDsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoNSk7CiYjNDM7CS8qIGVpbnZhbDogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovCiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVJTlZBTCk7CiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSgyKTsKJiM0MzsJLyogZTJiaWc6IHMtJmd0O2N1ciA9IHMtJmd0O2VuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovCiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogSW5saW5lIGJwZl9pdGVyX251bV9uZXh0KCkuIFIxIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBpdGVyYXRvci4gS2VlcCBpbiBzeW5jIHdpdGggdGhlCiYjNDM7ICoga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaW5saW5lX2JwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiYjNDM7ewomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHMtJmd0O2N1ciBhbmQgcy0mZ3Q7ZW5kIGFyZSBpbnQsIHNvIHRoZSAoczY0KShzLSZndDtjdXIgJiM0MzsgMSkgJmd0Oz0gcy0mZ3Q7ZW5kIGNoZWNrIGlzIGVxdWl2YWxlbnQgdG8gYQomIzQzOwkgKiBzaWduZWQgMzItYml0IGNvbXBhcmlzb24gb2YgKHMtJmd0O2N1ciAmIzQzOyAxKSBhZ2FpbnN0IHMtJmd0O2VuZCBhbmQgbmVlZHMgbm8gc2lnbiBleHRlbnNpb24uCiYjNDM7CSAqLwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMCwgMSk7CiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSwgNCk7CiYjNDM7CS8qIGlmICgoczMyKShzLSZndDtjdXIgJiM0MzsgMSkgJmd0Oz0gKHMzMilzLSZndDtlbmQpIGdvdG8gZG9uZTsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHRSwgQlBGX1JFR18wLCBCUEZfUkVHXzIsIDMpOwomIzQzOwkvKiBzLSZndDtjdXImIzQzOyYjNDM7OyByZXR1cm4gJmFtcDtzLSZndDtjdXI7ICovCiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7CiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzEpOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoMik7CiYjNDM7CS8qIGRvbmU6IHMtJmd0O2N1ciA9IHMtJmd0O2VuZCA9IDA7IHJldHVybiBOVUxMOyAqLwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTsKJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gaTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aAomIzQzOyAqIHRoZSBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKJiM0Mzt7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJLyogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiBpOwomIzQzO30KJiM0MzsKIGludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCSAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZiwgaW50IGluc25faWR4LCBpbnQgKmNudCkKIHsKQEAgLTE5ODk5LDYgJiM0MzsyMDA0OSwxMyBAQCBpbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQlpbnNuX2J1Zls0XSA9IEJQRl9BTFU2NF9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzEpOwogCQlpbnNuX2J1Zls1XSA9IEJQRl9BTFU2NF9JTU0oQlBGX05FRywgQlBGX1JFR18wLCAwKTsKIAkJKmNudCA9IDY7CiYjNDM7CX0gZWxzZSBpZiAoZGVzYy0mZ3Q7ZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25ld10pIHsKJiM0MzsJCSpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhpbnNuX2J1ZiwKJiM0MzsJCQkJCSAgICAgICAmYW1wO2Vudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uaXRlcl9udW1fbmV3X3N0YXRlKTsKJiM0MzsJfSBlbHNlIGlmIChkZXNjLSZndDtmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHsKJiM0MzsJCSpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoaW5zbl9idWYpOwomIzQzOwl9IGVsc2UgaWYgKGRlc2MtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9kZXN0cm95XSkgewomIzQzOwkJKmNudCA9IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShpbnNuX2J1Zik7CiAJfQogCiAJaWYgKGVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uYXJnX3Byb2cpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1NWQzOTQ0Mzg3MDVhNi4uMzE3NGMyZjE4ZTcxNTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKQEAgLTk2NSw2ICYjNDM7OTY1LDcgQEAgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm86ICQoT1VUUFVUKS9yaW5nYnVmX2JlbmNoLnNrZWwuaCBcCiAJCQkgICAgJChPVVRQVVQpL3BlcmZidWZfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaAogJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm86ICQoT1VUUFVUKS9icGZfbG9vcF9iZW5jaC5za2VsLmgKJiM0MzskKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vOiAkKE9VVFBVVCkvYnBmX2Zvcl9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm86ICQoT1VUUFVUKS9zdHJuY21wX2JlbmNoLnNrZWwuaAogJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX2JlbmNoLnNrZWwuaApAQCAtOTkwLDYgJiM0Mzs5OTEsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXAomIzQzOwkJICQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKaW5kZXggM2Q5ZDJjZDc3NjRiZDMuLmI4NmI3MzQ1NmQzY2E4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwpAQCAtMjc2LDYgJiM0MzsyNzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2Jsb29tX21hcF9hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9sb29wX2FyZ3A7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX2FyZ3A7CiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zdHJuY21wX2FyZ3A7CkBAIC0yOTIsNiAmIzQzOzI5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7CiAJeyAmYW1wO2JlbmNoX3JpbmdidWZzX2FyZ3AsIDAsICYjMzQ7UmluZyBidWZmZXJzIGJlbmNobWFyayYjMzQ7LCAwIH0sCiAJeyAmYW1wO2JlbmNoX2Jsb29tX21hcF9hcmdwLCAwLCAmIzM0O0Jsb29tIGZpbHRlciBtYXAgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfYnBmX2xvb3BfYXJncCwgMCwgJiMzNDticGZfbG9vcCBoZWxwZXIgYmVuY2htYXJrJiMzNDssIDAgfSwKJiM0MzsJeyAmYW1wO2JlbmNoX2JwZl9mb3JfYXJncCwgMCwgJiMzNDticGZfZm9yIGxvb3AgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCAmIzM0O2xvY2FsX3N0b3JhZ2UgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfc3RybmNtcF9hcmdwLCAwLCAmIzM0O2JwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwLCAwLApAQCAtNTU3LDYgJiM0Mzs1NTksNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2Jsb29tX2ZhbHNlX3Bvc2l0aXZlOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb207CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aF9ibG9vbTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2xvb3A7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX25vX2hlbHBlcjsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9oZWxwZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlOwpAQCAtNjQwLDYgJiM0Mzs2NDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHsKIAkmYW1wO2JlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbSwKIAkmYW1wO2JlbmNoX2hhc2htYXBfd2l0aF9ibG9vbSwKIAkmYW1wO2JlbmNoX2JwZl9sb29wLAomIzQzOwkmYW1wO2JlbmNoX2JwZl9mb3IsCiAJJmFtcDtiZW5jaF9zdHJuY21wX25vX2hlbHBlciwKIAkmYW1wO2JlbmNoX3N0cm5jbXBfaGVscGVyLAogCSZhbXA7YmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUsCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MzBjNTFhZDJkZWMzNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jCkBAIC0wLDAgJiM0MzsxLDEwNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcmdwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtiZW5jaC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9mb3JfYmVuY2guc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovCiYjNDM7c3RhdGljIHN0cnVjdCBjdHggewomIzQzOwlzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDsKJiM0Mzt9IGN0eDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHsKJiM0MzsJX191MzIgbnJfbG9vcHM7CiYjNDM7fSBhcmdzID0gewomIzQzOwkvKgomIzQzOwkgKiBEZWZhdWx0IHRvIGEgbGFyZ2UgbG9vcCBjb3VudCBzbyB0aGUgcGVyLWl0ZXJhdGlvbiBicGZfaXRlcl9udW1fbmV4dCgpIGNvc3QgZG9taW5hdGVzCiYjNDM7CSAqIHRoZSBvbmUtdGltZSBicGZfaXRlcl9udW1fbmV3KCkvZGVzdHJveSgpIHNldHVwIGFuZCB0ZWFyZG93bi4KJiM0MzsJICovCiYjNDM7CS5ucl9sb29wcyA9IDEwMDAsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJQVJHX05SX0xPT1BTID0gNDAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0gewomIzQzOwl7ICYjMzQ7bnJfbG9vcHMmIzM0OywgQVJHX05SX0xPT1BTLCAmIzM0O25yX2xvb3BzJiMzNDssIDAsCiYjNDM7CQkmIzM0O1NldCBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgdGhlIGJwZl9mb3IoKSBsb29wJiMzNDt9LAomIzQzOwl7fSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoa2V5KSB7CiYjNDM7CWNhc2UgQVJHX05SX0xPT1BTOgomIzQzOwkJYXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIGV4cG9ydGVkIGludG8gYmVuY2htYXJrIHJ1bm5lciAqLwomIzQzO2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncCA9IHsKJiM0MzsJLm9wdGlvbnMgPSBvcHRzLAomIzQzOwkucGFyc2VyID0gcGFyc2VfYXJnLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpCiYjNDM7ewomIzQzOwl3aGlsZSAodHJ1ZSkKJiM0MzsJCS8qIHRyaWdnZXIgdGhlIGJwZiBwcm9ncmFtICovCiYjNDM7CQlzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcykKJiM0Mzt7CiYjNDM7CXJlcy0mZ3Q7aGl0cyA9IGF0b21pY19zd2FwKCZhbXA7Y3R4LnNrZWwtJmd0O2Jzcy0mZ3Q7aGl0cywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CiYjNDM7CXNldHVwX2xpYmJwZigpOwomIzQzOwomIzQzOwljdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFjdHguc2tlbCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cbiYjMzQ7KTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goY3R4LnNrZWwtJmd0O3Byb2dzLmJlbmNobWFyayk7CiYjNDM7CWlmICghbGluaykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwomIzQzOwljdHguc2tlbC0mZ3Q7YnNzLSZndDtucl9sb29wcyA9IGFyZ3MubnJfbG9vcHM7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yID0gewomIzQzOwkubmFtZSA9ICYjMzQ7YnBmLWZvciYjMzQ7LAomIzQzOwkuYXJncCA9ICZhbXA7YmVuY2hfYnBmX2Zvcl9hcmdwLAomIzQzOwkudmFsaWRhdGUgPSB2YWxpZGF0ZSwKJiM0MzsJLnNldHVwID0gc2V0dXAsCiYjNDM7CS5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlciwKJiM0MzsJLm1lYXN1cmUgPSBtZWFzdXJlLAomIzQzOwkucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcywKJiM0MzsJLnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2gKQEAgLTAsMCAmIzQzOzEsMTUgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0Mztzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaAomIzQzOwomIzQzO3NldCAtZXVmbyBwaXBlZmFpbAomIzQzOwomIzQzO2ZvciB0IGluIDEgNCA4IDEyIDE2OyBkbwomIzQzO2ZvciBpIGluIDEwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwIDUwMDAwIDEwMDAwMCA1MDAwMDAgMTAwMDAwMDsgZG8KJiM0MztzdWJ0aXRsZSAmIzM0O25yX2xvb3BzOiAkaSwgbnJfdGhyZWFkczogJHQmIzM0OwomIzQzOwlzdW1tYXJpemVfb3BzICYjMzQ7YnBmX2ZvcjogJiMzNDsgXAomIzQzOwkgICAgJiMzNDskKCRSVU5fQkVOQ0ggLXAgJHQgLS1ucl9sb29wcyAkaSBicGYtZm9yKSYjMzQ7CiYjNDM7CXByaW50ZiAmIzM0O1xuJiMzNDsKJiM0Mztkb25lCiYjNDM7ZG9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI3NTJkZTVjNDRmNTdhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guYwpAQCAtMCwwICYjNDM7MSwzMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7dTMyIG5yX2xvb3BzOwomIzQzO2xvbmcgaGl0czsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG91dGVyX2xvb3AoX191MzIgaW5kZXgsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW1wdHkgYm9keTogdGhlIHdvcmsgYmVpbmcgbWVhc3VyZWQgaXMgdGhlIG9wZW4tY29kZWQgbnVtZXJpYyBpdGVyYXRvciBpdHNlbGYKJiM0MzsJICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLgomIzQzOwkgKi8KJiM0MzsJYnBmX2ZvcihpLCAwLCBucl9sb29wcykKJiM0MzsJCTsKJiM0MzsJX19zeW5jX2FkZF9hbmRfZmV0Y2goJmFtcDtoaXRzLCBucl9sb29wcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiYjNDM7aW50IGJlbmNobWFyayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlicGZfbG9vcCgxMDAwLCBvdXRlcl9sb29wLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuYwppbmRleCAwZmE3MGIxMzNkOTMyMi4uYzRkZjU4OWVjZDdhZTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCkBAIC04OCw2ICYjNDM7ODgsMTUxIEBAIGludCBpdGVyX2Vycl91bnNhZmVfYXNtX2xvb3AoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBOYWtlZCBmdW5jdGlvbnMsIHNvIHRoZXJlIGlzIG5vIGNvbXBpbGVyLWdlbmVyYXRlZCBnbHVlIGFuZCB0aGUgd2hvbGUgaW5saW5lZCBwcm9ncmFtIGNhbiBiZQomIzQzOyAqIG1hdGNoZWQuIFBpbm5lZCB0byBhcmNoZXMgd2hvc2UgSklUcyB6ZXJvLWV4dGVuZCAzMi1iaXQgd3JpdGVzIGltcGxpY2l0bHkKJiM0MzsgKiAoYnBmX2ppdF9uZWVkc196ZXh0KCkgPT0gZmFsc2UpOyBvbiBhcmNoZXMgdGhhdCBuZWVkIGV4cGxpY2l0IHplcm8tZXh0ZW5zaW9uIHRoZSB2ZXJpZmllcgomIzQzOyAqIGludGVybGVhdmVzICYjMzQ7d04gPSB3TiYjMzQ7IGluc25zIGFuZCB0aGUgZml4ZWQgc2hhcGUgYmVsb3cgd291bGQgbm90IG1hdGNoLiBUaGUgaW5saW5pbmcgaXRzZWxmIGlzCiYjNDM7ICogYXJjaCBpbmRlcGVuZGVudCwgc28gY2hlY2tpbmcgaXQgb24gdGhlc2UgYXJjaGVzIGlzIHN1ZmZpY2llbnQuCiYjNDM7ICoKJiM0MzsgKiBXaXRoIGNvbnN0YW50IGJvdW5kcyBicGZfaXRlcl9udW1fbmV3KCkgaXMgaW5saW5lZCB3aXRoIHRoZSByYW5nZSBjaGVja3MgZm9sZGVkIGF3YXksIGp1c3QKJiM0MzsgKiBzdG9yaW5nIHRoZSBpbml0aWFsIHN0YXRlIChzLSZndDtjdXIgPSBzdGFydCAtIDEsIHMtJmd0O2VuZCA9IGVuZCk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kCiYjNDM7ICogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28sIGxlYXZpbmcgYSBjYWxsLWZyZWUgbG9vcC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19zdWNjZXNzCiYjNDM7X194bGF0ZWQoJiMzNDtyNiA9IHIxMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjYgJiM0Mzs9IC04JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMSA9IHI2JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMiA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IzID0gMTAmIzM0OykKJiM0MzsvKiBicGZfaXRlcl9udW1fbmV3KCZhbXA7aXQsIDAsIDEwKSBmb2xkZWQgdG8gdGhlIHN0YXRlIGluaXQgKi8KJiM0MztfX3hsYXRlZCgmIzM0OyoodTMyICopKHIxICYjNDM7MCkgPSAtMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1MzIgKikocjEgJiM0Mzs0KSA9IDEwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IxID0gcjYmIzM0OykKJiM0MzsvKiBicGZfaXRlcl9udW1fbmV4dCgmYW1wO2l0KSAqLwomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAqKHUzMiAqKShyMSAmIzQzOzApJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDt3MCAmIzQzOz0gMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjIgPSAqKHUzMiAqKShyMSAmIzQzOzQpJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiB3MCBzJmd0Oz0gdzIgZ290byBwYyYjNDM7MyYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IHIxJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtnb3RvIHBjJiM0MzsyJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiByMCAhPSAweDAgZ290byBwYy0xMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjEgPSByNiYjMzQ7KQomIzQzOy8qIGJwZl9pdGVyX251bV9kZXN0cm95KCZhbXA7aXQpICovCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtleGl0JiMzNDspCiYjNDM7aW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2NvbnN0X2ZvbGRlZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJCS8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqLwomIzQzOwkJJiMzNDtyNiA9IHIxMDsmIzM0OwomIzQzOwkJJiMzNDtyNiAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByNjsmIzM0OwomIzQzOwkJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJCSYjMzQ7cjMgPSAxMDsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107JiMzNDsKJiM0MzsJJiMzNDsxOiYjMzQ7CiYjNDM7CQkmIzM0O3IxID0gcjY7JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXh0XTsmIzM0OwomIzQzOwkJJiMzNDtpZiByMCAhPSAwIGdvdG8gMWI7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByNjsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldOyYjMzQ7CiYjNDM7CQkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CQk6CiYjNDM7CQk6IF9faW1tKGJwZl9pdGVyX251bV9uZXcpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksCiYjNDM7CQkgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KQomIzQzOwkJOiBfX2Nsb2JiZXJfY29tbW9uLCAmIzM0O3I2JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTYW1lIGFyY2ggcGlubmluZyBhbmQgbmFrZWQtZnVuY3Rpb24gcmF0aW9uYWxlIGFzIGFib3ZlLiBXaXRoIGEgbm9uLWNvbnN0YW50IGJvdW5kCiYjNDM7ICogYnBmX2l0ZXJfbnVtX25ldygpIGtlZXBzIHRoZSBmdWxsIHJhbmdlIGNoZWNrOiB0aGUgZGlzdGFuY2UgaXMgY29tcHV0ZWQgYW5kIGJvdGggdGhlIC1FSU5WQUwKJiM0MzsgKiBhbmQgLUUyQklHIGVycm9yIHBhdGhzIHJlbWFpbi4gYnBmX2l0ZXJfbnVtX25leHQoKSBhbmQgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28uCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAomIzQzO19fc3VjY2VzcwomIzQzO19feGxhdGVkKCYjMzQ7cjYgPSByMTAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3I2ICYjNDM7PSAtOCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Y2FsbCB1bmtub3duJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMyA9IHIwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMyAmYW1wOz0gNjU1MzUmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IxID0gcjYmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IyID0gMCYjMzQ7KQomIzQzOy8qIGJwZl9pdGVyX251bV9uZXcoJmFtcDtpdCwgMCwgJmx0O25vbi1jb25zdCZndDspIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi8KJiM0MztfX3hsYXRlZCgmIzM0O2lmIHcyIHMmZ3Q7IHczIGdvdG8gcGMmIzQzOzgmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3cwID0gdzMmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3cwIC09IHcyJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiByMCBzJmd0OyAweDgwMDAwMCBnb3RvIHBjJiM0Mzs4JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDt3MiAmIzQzOz0gLTEmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTMyICopKHIxICYjNDM7MCkgPSByMiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1MzIgKikocjEgJiM0Mzs0KSA9IHIzJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O2dvdG8gcGMmIzQzOzUmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IC0yMiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Z290byBwYyYjNDM7MiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1NjQgKikocjEgJiM0MzswKSA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IwID0gLTcmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IxID0gcjYmIzM0OykKJiM0MzsvKiBicGZfaXRlcl9udW1fbmV4dCgmYW1wO2l0KSAqLwomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAqKHUzMiAqKShyMSAmIzQzOzApJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDt3MCAmIzQzOz0gMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjIgPSAqKHUzMiAqKShyMSAmIzQzOzQpJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiB3MCBzJmd0Oz0gdzIgZ290byBwYyYjNDM7MyYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IHIxJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtnb3RvIHBjJiM0MzsyJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiByMCAhPSAweDAgZ290byBwYy0xMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjEgPSByNiYjMzQ7KQomIzQzOy8qIGJwZl9pdGVyX251bV9kZXN0cm95KCZhbXA7aXQpICovCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtleGl0JiMzNDspCiYjNDM7aW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi8KJiM0MzsJCSYjMzQ7cjYgPSByMTA7JiMzNDsKJiM0MzsJCSYjMzQ7cjYgJiM0Mzs9IC04OyYjMzQ7CiYjNDM7CQkvKiBub24tY29uc3RhbnQgZW5kIHNvIHRoZSByYW5nZSBjaGVja3MgYXJlIGtlcHQgKi8KJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOyYjMzQ7CiYjNDM7CQkmIzM0O3IzID0gcjA7JiMzNDsKJiM0MzsJCSYjMzQ7cjMgJmFtcDs9IDB4ZmZmZjsmIzM0OwomIzQzOwkJJiMzNDtyMSA9IHI2OyYjMzQ7CiYjNDM7CQkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107JiMzNDsKJiM0MzsJJiMzNDsxOiYjMzQ7CiYjNDM7CQkmIzM0O3IxID0gcjY7JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXh0XTsmIzM0OwomIzQzOwkJJiMzNDtpZiByMCAhPSAwIGdvdG8gMWI7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByNjsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldOyYjMzQ7CiYjNDM7CQkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CQk6CiYjNDM7CQk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl9udW1fbmV3KSwKJiM0MzsJCSAgX19pbW0oYnBmX2l0ZXJfbnVtX25leHQpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl9udW1fZGVzdHJveSkKJiM0MzsJCTogX19jbG9iYmVyX2NvbW1vbiwgJiMzNDtyNiYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7cmF3X3RwJiMzNDspCiBfX3N1Y2Nlc3MKIGludCBpdGVyX3doaWxlX2xvb3AoY29uc3Qgdm9pZCAqY3R4KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgT3B0aW1pemF0aW9uOiBJdGVyYXRpb24gSW5saW5pbmcqKgoKT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIHRoYXQmIzM5O3MgZG9pbmcgc29tZSBjbGV2ZXIgaW5saW5pbmcgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEl0JiMzOTtzIHRhcmdldGluZyBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgIGtmdW5jcywgd2hpY2ggaXMgYSBnb29kIG9wdGltaXphdGlvbiB0YXJnZXQuIEkgY2FuIHNlZSB0aGUgY2hhbmdlczsgdGhleSYjMzk7dmUgYWRkZWQgYSBgc3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGVgIHRvIHRoZSBgYnBmX2luc25fYXV4X2RhdGFgIHRvIHRyYWNrIHRoZSBhcmd1bWVudHMmIzM5OyBjb25zdGFudC1uZXNzIGFuZCB0aGVyZWZvcmUgdGhlaXIgc3VpdGFiaWxpdHkgZm9yIGlubGluaW5nLiBUaGUgbWFpbiBsb2dpYyBpcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2hlcmUgdGhleSYjMzk7cmUgdXBkYXRpbmcgdGhpcyBzdGF0ZSBhbmQgcGVyZm9ybWluZyB0aGUgYWN0dWFsIGlubGluaW5nIGluIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSBiZW5jaG1hcmsgKGBiZW5jaF9icGZfZm9yLmNgKSBhbmQgc29tZSB0ZXN0cyBpbiBgaXRlcnMuY2AsIHdoaWNoIGlzIHRoZSByaWdodCBhcHByb2FjaC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIGZvciBhbnlvbmUgdXNpbmcgYGJwZl9mb3JgIG9yIGNhbGxpbmcgYGJwZl9pdGVyX251bV9uZXdgIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlIHZpYSBsb2FkZWQgQlBGIHByb2dyYW1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGFjdCBmcm9tIHRoZSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4KCkxldCYjMzk7cyBzZWUsIHRoZSBjb3JlIGZ1bmN0aW9ucyBtb2RpZmllZC9hZGRlZCBhcmU6IGB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlYCwgYGlubGluZV9icGZfaXRlcl9udW1fbmV3YCwgYGlubGluZV9icGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgaW5saW5lX2JwZl9pdGVyX251bV9kZXN0cm95YC4gQWxsIG9mIHRoZXNlLCBpbnRlcmVzdGluZ2x5LCBhcmUgc3RhdGljIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhlIGVudHJ5IHBvaW50cyBhcmUgYGNoZWNrX2tmdW5jX2NhbGxgIGFuZCBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgLgoKTXkgcHJpbWFyeSBmdXp6aW5nIGZvY3VzIHNob3VsZCBub3cgZGVmaW5pdGVseSBiZSB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGtmdW5jIGNhbGxzIGFuZCBpbmxpbmluZy4gSSBzaG91bGQgemVybyBpbiBvbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgdGhvdWdoIEkgd2lsbCBiZSBsaW1pdGVkIHNpbmNlIHRoZXkgYXJlIHN0YXRpYzoKCiogICBgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZWAgKHN0YXRpYywgYnV0IHN0aWxsIGEgY29kZSBwYXRoIHRvIGNvbnNpZGVyKQoqICAgYGlubGluZV9icGZfaXRlcl9udW1fbmV3YAoqICAgYGlubGluZV9icGZfaXRlcl9udW1fbmV4dGAKKiAgIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgCiogICBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIChhbiBleGlzdGluZyBmdW5jdGlvbiB0aGV5IGFyZSB1c2luZywgd2hpY2ggaXMgZ29vZCB0byBhZGQgaXQgdG8gdGhlIGxpc3QpCiogICBgY2hlY2tfa2Z1bmNfY2FsbGAgKGFuIGV4aXN0aW5nIGZ1bmN0aW9uIHRoYXQgaXMga2V5IHRvIHRhcmdldCkuCgpgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZWAgYW5kIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ld2AgYXJlIHN0YXRpYywgSSBhbHJlYWR5IHNlZS4gR29vZC4KCkNvbmZpZ3MgcmVxdWlyZWQgYXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9KSVRgLiBFYXN5IHRvIHZlcmlmeS4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFzIGV4cGVjdGVkLgoKSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3MgcmVsYXRpbmcgdG8gQlBGIGl0ZXJhdG9yczsgbGV0IG1lIGdyZXAgZm9yIGBicGZfaXRlcl9udW1fbmV3YCB0byBjaGVjayBpZiBpdCBkZXBlbmRzIG9uIGFueXRoaW5nLiBUaGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBga2VybmVsL2JwZi9icGZfaXRlci5jYCwgc28gSSBzaG91bGQgY2hlY2sgdGhlIE1ha2VmaWxlIG9yIEtjb25maWcgZm9yIHRoYXQgZGlyZWN0b3J5LiBHb29kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBjb25maWdzIHJpZ2h0LgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgdmFsdWVzLiBJIGNhbiBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX251bV9uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9pdGVyLmM9NzY4PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03NjktXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzcwOl9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzcxLXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODg2PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZHlucHRyX3NsaWNlX3Jkd3IsIEtGX1JFVF9OVUxMKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg4NzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfbnVtX25ldywgS0ZfSVRFUl9ORVcpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODg4LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9udW1fbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTEzPXN0YXRpYyBib29sIHN0YXRlc19tYXliZV9sb29waW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExODEtICpcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE4MjogKiAgIGJwZl9pdGVyX251bV9uZXcoXHUwMDI2aXQsIDAsIDEwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE4My0gKiAgIHdoaWxlICgocCA9IGJwZl9pdGVyX251bV9uZXh0KFx1MDAyNnQpKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NTk3PXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZ2V0X2l0ZXJfZnJvbV9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXJfc3QsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2NzEtICogICAgIGludCBpID0gMCwgYSA9IDA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY3MjogKiAgICAgYnBmX2l0ZXJfbnVtX25ldyhcdTAwMjZpdCwgMCwgMTApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTc2NzMtICogICAgIHdoaWxlIChicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwNjg9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTExOC1cdEtGX2JwZl9sb2NhbF9pcnFfcmVzdG9yZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTExOTpcdEtGX2JwZl9pdGVyX251bV9uZXcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjAtXHRLRl9icGZfaXRlcl9udW1fbmV4dCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyMDY9QlRGX0lEKGZ1bmMsIGJwZl9sb2NhbF9pcnFfcmVzdG9yZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwNzpCVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX25ldylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwOC1CVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX25leHQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjkwPXN0YXRpYyBib29sIGlzX2JwZl9pdGVyX251bV9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY5MS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2OTI6XHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjkzLVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25leHRdIHx8XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTYzPXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTY1LS8qXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NjY6ICogYnBmX2l0ZXJfbnVtX25ldygpIGNhbiBiZSBpbmxpbmVkIG1vcmUgdGlnaHRseSB3aGVuIGl0cyBzdGFydCBhbmQgZW5kIGFyZ3VtZW50cyBhcmUgY29uc3RhbnQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5NjctICogYXMgdGhlIHJhbmdlIGNoZWNrcyBhbmQgdGhlaXIgZXJyb3IgcGF0aHMgY2FuIHRoZW4gYmUgcmVzb2x2ZWQgYXQgcmV3cml0ZSB0aW1lLiBSZWNvcmQsIHBlclxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjk3MD1zdGF0aWMgaW50IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk3MS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NzI6XHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUgPSBcdTAwMjZjdXJfYXV4KGVudiktXHUwMDNlaXRlcl9udW1fbmV3X3N0YXRlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTczLVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0YXJ0X3JlZyA9IFx1MDAyNmN1cl9yZWdzKGVudilbQlBGX1JFR18yXTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTMwMDY9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyMDYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyMDc6XHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjA4LVx0XHRlcnIgPSB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlKGVudik7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5ODAzPXN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4MjAtLypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTgyMTogKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX25ldygpLiBSMSBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgaXRlcmF0b3IsIFIyIGFuZCBSMyBob2xkIHRoZSAoaW50KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODIyLSAqIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODIzLSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODI0OnN0YXRpYyBpbnQgaW5saW5lX2JwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Ziwgc3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgKnN0YXRlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODI1LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5MjM9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNTEtXHRcdCpjbnQgPSA2O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDUyOlx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwNTM6XHRcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhpbnNuX2J1Zixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA1NC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5pdGVyX251bV9uZXdfc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzQ1CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbiBvcHRpbWl6YXRpb24gdG8gdGhlIEJQRiB2ZXJpZmllci4gSXQmIzM5O3MgaW5saW5pbmcgYGJwZl9pdGVyX251bV9uZXdgLCBgYnBmX2l0ZXJfbnVtX25leHRgLCBhbmQgYGJwZl9pdGVyX251bV9kZXN0cm95YC4gVGhhdCBzZWVtcyBwcmV0dHkgc29saWQgZnJvbSBhIGZ1bmN0aW9uYWxpdHkgc3RhbmRwb2ludC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7WWVwLCB0aGlzIGFic29sdXRlbHkgbmVlZHMgZnV6emluZy4mIzM0OyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW5saW5pbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgaXNzdWVzLCBlc3BlY2lhbGx5IGFyb3VuZCBlZGdlIGNhc2VzLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAgZnVuY3Rpb25zLiBUaG9zZSBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIFNpbmNlIHRoZSBpbmxpbmluZyBmdW5jdGlvbnMsIGxpa2UgYHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGVgLCBgaW5saW5lX2JwZl9pdGVyX251bV9uZXdgLCBgaW5saW5lX2JwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgLCBhcmUgc3RhdGljLCBJIHNob3VsZCBwcm9iYWJseSBrZWVwIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAgYW5kIGBjaGVja19rZnVuY19jYWxsYCBvbiB0aGUgbGlzdCBhcyB3ZWxsLgoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgaXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGlzIHRoZSBrZXkgcmVxdWlyZW1lbnQgaGVyZS4gSeKAmWxsIG1ha2Ugc3VyZSB0aGF0IGlzIGVuYWJsZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSBrbm93IGBCUEZfSklUYCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIEJQRiwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQsIGJ1dCBgQlBGX1NZU0NBTExgIHNlZW1zIHRvIGJlIHRoZSBjb3JlIHJlcXVpcmVtZW50LgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpeHVwX2tmdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDt1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlJiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fbmV3JiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fbmV4dCYjMzQ7LAogICAgJiMzNDtpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldywgYnBmX2l0ZXJfbnVtX25leHQsIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSBrZnVuY3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgb3B0aW1pemVzIHRoZSBleGVjdXRpb24gb2YgdGhlc2Uga2Z1bmNzIGFuZCBjYW4gYmUgcmVhY2hlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZml4dXBfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUmIzM0OywKICAgICYjMzQ7aW5saW5lX2JwZl9pdGVyX251bV9uZXcmIzM0OywKICAgICYjMzQ7aW5saW5lX2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGlubGluZSBicGZfaXRlcl9udW1fbmV3LCBicGZfaXRlcl9udW1fbmV4dCwgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95IGtmdW5jcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBvcHRpbWl6ZXMgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBrZnVuY3MgYW5kIGNhbiBiZSByZWFjaGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMTQ6MTU6MzYuMTUxMjYyMzA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MzAwOTAzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZml4dXBfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwidXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZVwiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9uZXdcIixcbiAgICBcImlubGluZV9icGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldywgYnBmX2l0ZXJfbnVtX25leHQsIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSBrZnVuY3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgb3B0aW1pemVzIHRoZSBleGVjdXRpb24gb2YgdGhlc2Uga2Z1bmNzIGFuZCBjYW4gYmUgcmVhY2hlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBmcm9tIHVzZXJzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTQ6MTU6MzYuMTUxMjY2Mjk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc1NTEwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NmY3ODE1Y2ViMjVjMzc0ZjYwZjA3MzhlZGU4MjhmMDhhOTQyNTAxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDE0OjE1OjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggNjgyYzJjZDNiODQ0MzAuLjhjMDRlMmZkODAxNzBiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTYxMiw2ICs2MTIsMTUgQEAgc3RydWN0IGJwZl9sb29wX2lubGluZV9zdGF0ZSB7XFxuIFxcdHUzMiBjYWxsYmFja19zdWJwcm9nbm87IC8qIHZhbGlkIHdoZW4gZml0X2Zvcl9pbmxpbmUgaXMgdHJ1ZSAqL1xcbiB9O1xcbiBcXG4rc3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUge1xcbitcXHR1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ6MTsgLyogc2V0IHRvIHRydWUgdXBvbiBmaXJzdCBlbnRyeSAqL1xcbitcXHR1bnNpZ25lZCBpbnQgZml0X2Zvcl9pbmxpbmU6MTsgLyogdHJ1ZSBpZiBzdGFydCBhbmQgZW5kIGFyZSBjb25zdGFudFxcbitcXHRcXHRcXHRcXHRcXHQqIHdpdGggdGhlIHNhbWUgdmFsdWUgYXQgZWFjaCBjYWxsXFxuK1xcdFxcdFxcdFxcdFxcdCovXFxuK1xcdHMzMiBzdGFydDsgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXFxuK1xcdHMzMiBlbmQ7ICAgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXFxuK307XFxuK1xcbiAvKiBwb2ludGVyIGFuZCBzdGF0ZSBmb3IgbWFwcyAqL1xcbiBzdHJ1Y3QgYnBmX21hcF9wdHJfc3RhdGUge1xcbiBcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcXG5AQCAtNjYxLDYgKzY3MCwxMCBAQCBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEge1xcbiBcXHRcXHQgKiB0aGUgc3RhdGUgb2YgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyB0byBtYWtlIGRlY2lzaW9uIGFib3V0IGlubGluaW5nXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRzdHJ1Y3QgYnBmX2xvb3BfaW5saW5lX3N0YXRlIGxvb3BfaW5saW5lX3N0YXRlO1xcbitcXHRcXHQvKiBpZiBpbnN0cnVjdGlvbiBpcyBhIGNhbGwgdG8gYnBmX2l0ZXJfbnVtX25ldyB0aGlzIGZpZWxkIHRyYWNrcyBpdHMgc3RhcnQvZW5kXFxuK1xcdFxcdCAqIGFyZ3VtZW50cyB0byBtYWtlIGEgZGVjaXNpb24gYWJvdXQgZWxpZGluZyB0aGUgcmFuZ2UgY2hlY2tzIHdoZW4gaW5saW5pbmdcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlIGl0ZXJfbnVtX25ld19zdGF0ZTtcXG4gXFx0fTtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHQvKiByZW1lbWJlciB0aGUgc2l6ZSBvZiB0eXBlIHBhc3NlZCB0byBicGZfb2JqX25ldyB0byByZXdyaXRlIFIxICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDUyYmUwYTExOGNjZTA3Li5kNWI3M2FlODAxOTQ0MyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTI5NjIsNiArMTI5NjIsNDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdcXG4gXFxuIHN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XFxuIFxcbisvKlxcbisgKiBicGZfaXRlcl9udW1fbmV3KCkgY2FuIGJlIGlubGluZWQgbW9yZSB0aWdodGx5IHdoZW4gaXRzIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzIGFyZSBjb25zdGFudCxcXG4rICogYXMgdGhlIHJhbmdlIGNoZWNrcyBhbmQgdGhlaXIgZXJyb3IgcGF0aHMgY2FuIHRoZW4gYmUgcmVzb2x2ZWQgYXQgcmV3cml0ZSB0aW1lLiBSZWNvcmQsIHBlclxcbisgKiBjYWxsIHNpdGUsIHdoZXRoZXIgYm90aCBhcmd1bWVudHMgYXJlIGNvbnN0YW50IHdpdGggdGhlIHNhbWUgdmFsdWUgb24gZXZlcnkgdmlzaXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUgPSBcXHUwMDI2Y3VyX2F1eChlbnYpLVxcdTAwM2VpdGVyX251bV9uZXdfc3RhdGU7XFxuK1xcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdGFydF9yZWcgPSBcXHUwMDI2Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzJdO1xcbitcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZW5kX3JlZyA9IFxcdTAwMjZjdXJfcmVncyhlbnYpW0JQRl9SRUdfM107XFxuK1xcdGJvb2wga25vd24gPSB0bnVtX2lzX2NvbnN0KHN0YXJ0X3JlZy1cXHUwMDNldmFyX29mZikgXFx1MDAyNlxcdTAwMjYgdG51bV9pc19jb25zdChlbmRfcmVnLVxcdTAwM2V2YXJfb2ZmKTtcXG4rXFx0czMyIHN0YXJ0ID0gc3RhcnRfcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbitcXHRzMzIgZW5kID0gZW5kX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghc3RhdGUtXFx1MDAzZWluaXRpYWxpemVkKSB7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2Vpbml0aWFsaXplZCA9IDE7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VmaXRfZm9yX2lubGluZSA9IGtub3duO1xcbitcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhcnQgPSBzdGFydDtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWVuZCA9IGVuZDtcXG4rXFx0fSBlbHNlIGlmIChzdGF0ZS1cXHUwMDNlZml0X2Zvcl9pbmxpbmUpIHtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWZpdF9mb3JfaW5saW5lID0ga25vd24gXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZXN0YXJ0ID09IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IHN0YXRlLVxcdTAwM2VlbmQgPT0gZW5kO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXaGlsZSBmb2xkaW5nIGlzIHN0aWxsIHZpYWJsZSB0aGUgZGVjaXNpb24gcmVsaWVzIG9uIHRoZSBleGFjdCBjb25zdGFudCB2YWx1ZXMsIHNvIG1hcmtcXG4rXFx0ICogdGhlIHJlZ2lzdGVycyBwcmVjaXNlOyBvdGhlcndpc2UgdGhlIHZlcmlmaWVyIGNvdWxkIHBydW5lIGEgcGF0aCB0aGF0IHJlYWNoZXMgdGhpcyBjYWxsXFxuK1xcdCAqIHdpdGggZGlmZmVyZW50IGNvbnN0YW50cyBhbmQgdGhlIGZvbGRlZCBjb2RlIHdvdWxkIHJ1biB3aXRoIGEgc3RhbGUgdmFsdWUuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3RhdGUtXFx1MDAzZWZpdF9mb3JfaW5saW5lKSB7XFxuK1xcdFxcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgQlBGX1JFR18yKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBCUEZfUkVHXzMpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0ICAgIGludCAqaW5zbl9pZHhfcClcXG4ge1xcbkBAIC0xMzE2Myw2ICsxMzIwNCwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XFxuK1xcdFxcdGVyciA9IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoZW52KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcXG4gXFx0XFx0dTMyIHJlZ25vID0gY2FsbGVyX3NhdmVkW2ldO1xcbiBcXG5AQCAtMTk3NzAsNiArMTk4MTcsMTA5IEBAIHN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcXG4gXFx0KmNudCA9IDQ7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIElubGluZSBicGZfaXRlcl9udW1fbmV3KCkuIFIxIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBpdGVyYXRvciwgUjIgYW5kIFIzIGhvbGQgdGhlIChpbnQpXFxuKyAqIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxcbisgKi9cXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0aW50IGkgPSAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBzdGFydCBhbmQgZW5kIGFyZSBjb25zdGFudCB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBmb2xkIGF3YXksXFxuK1xcdCAqIGxlYXZpbmcganVzdCB0aGUgc3RhdGUgaW5pdCBvciB0aGUgZXJyb3IgcmVzdWx0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHN0YXRlLVxcdTAwM2VmaXRfZm9yX2lubGluZSkge1xcbitcXHRcXHRzMzIgc3RhcnQgPSBzdGF0ZS1cXHUwMDNlc3RhcnQsIGVuZCA9IHN0YXRlLVxcdTAwM2VlbmQ7XFxuK1xcbitcXHRcXHRpZiAoc3RhcnQgXFx1MDAzZSBlbmQpIHtcXG4rXFx0XFx0XFx0Lyogcy1cXHUwMDNlY3VyID0gcy1cXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovXFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0XFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcXG4rXFx0XFx0fSBlbHNlIGlmICgoczY0KWVuZCAtIChzNjQpc3RhcnQgXFx1MDAzZSBCUEZfTUFYX0xPT1BTKSB7XFxuK1xcdFxcdFxcdC8qIHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0XFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRTJCSUcpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKiBzLVxcdTAwM2VjdXIgPSBzdGFydCAtIDE7IHMtXFx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIDAsIHN0YXJ0IC0gMSk7XFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIDQsIGVuZCk7XFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGlmIChzdGFydCBcXHUwMDNlIGVuZCkgZ290byBlaW52YWw7ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dULCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgOCk7XFxuK1xcdC8qXFxuK1xcdCAqIHN0YXJ0IFxcdTAwM2M9IGVuZCBoZXJlLCBzbyB0aGUgcmFuZ2UgZW5kIC0gc3RhcnQgZml0cyBpbiBhIHUzMjsgY29tcHV0ZSBpdCBhcyBhIDMyLWJpdFxcbitcXHQgKiBzdWJ0cmFjdGlvbiB0aGF0IHplcm8tZXh0ZW5kcyBpbnRvIHIwLlxcbitcXHQgKi9cXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1YzMl9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzMpO1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMik7XFxuK1xcdC8qIGlmIChyMCBcXHUwMDNlIEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0lNTShCUEZfSlNHVCwgQlBGX1JFR18wLCBCUEZfTUFYX0xPT1BTLCA4KTtcXG4rXFx0Lyogcy1cXHUwMDNlY3VyID0gc3RhcnQgLSAxOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX0lNTShCUEZfQURELCBCUEZfUkVHXzIsIC0xKTtcXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMiwgMCk7XFxuK1xcdC8qIHMtXFx1MDAzZWVuZCA9IGVuZDsgKi9cXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMywgNCk7XFxuK1xcdC8qIHJldHVybiAwOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApO1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUF9BKDUpO1xcbitcXHQvKiBlaW52YWw6IHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7IHJldHVybiAtRUlOVkFMOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVJTlZBTCk7XFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0EoMik7XFxuK1xcdC8qIGUyYmlnOiBzLVxcdTAwM2VjdXIgPSBzLVxcdTAwM2VlbmQgPSAwOyByZXR1cm4gLUUyQklHOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTtcXG4rXFxuK1xcdHJldHVybiBpO1xcbit9XFxuK1xcbisvKlxcbisgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX25leHQoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aCB0aGVcXG4rICoga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxcbisgKi9cXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4re1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBzLVxcdTAwM2VjdXIgYW5kIHMtXFx1MDAzZWVuZCBhcmUgaW50LCBzbyB0aGUgKHM2NCkocy1cXHUwMDNlY3VyICsgMSkgXFx1MDAzZT0gcy1cXHUwMDNlZW5kIGNoZWNrIGlzIGVxdWl2YWxlbnQgdG8gYVxcbitcXHQgKiBzaWduZWQgMzItYml0IGNvbXBhcmlzb24gb2YgKHMtXFx1MDAzZWN1ciArIDEpIGFnYWluc3Qgcy1cXHUwMDNlZW5kIGFuZCBuZWVkcyBubyBzaWduIGV4dGVuc2lvbi5cXG4rXFx0ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApO1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX0lNTShCUEZfQURELCBCUEZfUkVHXzAsIDEpO1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMiwgQlBGX1JFR18xLCA0KTtcXG4rXFx0LyogaWYgKChzMzIpKHMtXFx1MDAzZWN1ciArIDEpIFxcdTAwM2U9IChzMzIpcy1cXHUwMDNlZW5kKSBnb3RvIGRvbmU7ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dFLCBCUEZfUkVHXzAsIEJQRl9SRUdfMiwgMyk7XFxuK1xcdC8qIHMtXFx1MDAzZWN1cisrOyByZXR1cm4gXFx1MDAyNnMtXFx1MDAzZWN1cjsgKi9cXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7XFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSgyKTtcXG4rXFx0LyogZG9uZTogcy1cXHUwMDNlY3VyID0gcy1cXHUwMDNlZW5kID0gMDsgcmV0dXJuIE5VTEw7ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcXG4rXFxuK1xcdHJldHVybiBpO1xcbit9XFxuK1xcbisvKlxcbisgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aFxcbisgKiB0aGUga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxcbisgKi9cXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4re1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHQvKiBzLVxcdTAwM2VjdXIgPSBzLVxcdTAwM2VlbmQgPSAwOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XFxuK1xcbitcXHRyZXR1cm4gaTtcXG4rfVxcbitcXG4gaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBpbnQgaW5zbl9pZHgsIGludCAqY250KVxcbiB7XFxuQEAgLTE5ODk5LDYgKzIwMDQ5LDEzIEBAIGludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdGluc25fYnVmWzRdID0gQlBGX0FMVTY0X1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XFxuIFxcdFxcdGluc25fYnVmWzVdID0gQlBGX0FMVTY0X0lNTShCUEZfTkVHLCBCUEZfUkVHXzAsIDApO1xcbiBcXHRcXHQqY250ID0gNjtcXG4rXFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xcbitcXHRcXHQqY250ID0gaW5saW5lX2JwZl9pdGVyX251bV9uZXcoaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5pdGVyX251bV9uZXdfc3RhdGUpO1xcbitcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXh0XSkge1xcbitcXHRcXHQqY250ID0gaW5saW5lX2JwZl9pdGVyX251bV9uZXh0KGluc25fYnVmKTtcXG4rXFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcXG4rXFx0XFx0KmNudCA9IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShpbnNuX2J1Zik7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmFyZ19wcm9nKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDU1ZDM5NDQzODcwNWE2Li4zMTc0YzJmMThlNzE1MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5AQCAtOTY1LDYgKzk2NSw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXFxcXFxcbiBcXHRcXHRcXHQgICAgJChPVVRQVVQpL3BlcmZidWZfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm86ICQoT1VUUFVUKS9ibG9vbV9maWx0ZXJfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oXFxuKyQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm86ICQoT1VUUFVUKS9icGZfZm9yX2JlbmNoLnNrZWwuaFxcbiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oXFxuQEAgLTk5MCw2ICs5OTEsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcXFxcbitcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl9mb3IubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm8gXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXFxuaW5kZXggM2Q5ZDJjZDc3NjRiZDMuLmI4NmI3MzQ1NmQzY2E4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG5AQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfcmluZ2J1ZnNfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2Jsb29tX21hcF9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDtcXG4rZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2FyZ3A7XFxuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zdHJuY21wX2FyZ3A7XFxuQEAgLTI5Miw2ICsyOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xcbiBcXHR7IFxcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcXFwiUmluZyBidWZmZXJzIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfYmxvb21fbWFwX2FyZ3AsIDAsIFxcXCJCbG9vbSBmaWx0ZXIgbWFwIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfYnBmX2xvb3BfYXJncCwgMCwgXFxcImJwZl9sb29wIGhlbHBlciBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuK1xcdHsgXFx1MDAyNmJlbmNoX2JwZl9mb3JfYXJncCwgMCwgXFxcImJwZl9mb3IgbG9vcCBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHsgXFx1MDAyNmJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncCwgMCwgXFxcImxvY2FsX3N0b3JhZ2UgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF9zdHJuY21wX2FyZ3AsIDAsIFxcXCJicGZfc3RybmNtcCBoZWxwZXIgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwLCAwLFxcbkBAIC01NTcsNiArNTU5LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9ibG9vbV9mYWxzZV9wb3NpdGl2ZTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb207XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9sb29wO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3I7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9ub19oZWxwZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9oZWxwZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGU7XFxuQEAgLTY0MCw2ICs2NDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcXG4gXFx0XFx1MDAyNmJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbSxcXG4gXFx0XFx1MDAyNmJlbmNoX2hhc2htYXBfd2l0aF9ibG9vbSxcXG4gXFx0XFx1MDAyNmJlbmNoX2JwZl9sb29wLFxcbitcXHRcXHUwMDI2YmVuY2hfYnBmX2ZvcixcXG4gXFx0XFx1MDAyNmJlbmNoX3N0cm5jbXBfbm9faGVscGVyLFxcbiBcXHRcXHUwMDI2YmVuY2hfc3RybmNtcF9oZWxwZXIsXFxuIFxcdFxcdTAwMjZiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczMGM1MWFkMmRlYzM0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXFxuQEAgLTAsMCArMSwxMDQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FyZ3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJlbmNoLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfZm9yX2JlbmNoLnNrZWwuaFxcXCJcXG4rXFxuKy8qIEJQRiB0cmlnZ2VyaW5nIGJlbmNobWFya3MgKi9cXG4rc3RhdGljIHN0cnVjdCBjdHgge1xcbitcXHRzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDtcXG4rfSBjdHg7XFxuK1xcbitzdGF0aWMgc3RydWN0IHtcXG4rXFx0X191MzIgbnJfbG9vcHM7XFxuK30gYXJncyA9IHtcXG4rXFx0LypcXG4rXFx0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xcbitcXHQgKiB0aGUgb25lLXRpbWUgYnBmX2l0ZXJfbnVtX25ldygpL2Rlc3Ryb3koKSBzZXR1cCBhbmQgdGVhcmRvd24uXFxuK1xcdCAqL1xcbitcXHQubnJfbG9vcHMgPSAxMDAwLFxcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdEFSR19OUl9MT09QUyA9IDQwMDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcXG4rXFx0eyBcXFwibnJfbG9vcHNcXFwiLCBBUkdfTlJfTE9PUFMsIFxcXCJucl9sb29wc1xcXCIsIDAsXFxuK1xcdFxcdFxcXCJTZXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIHRoZSBicGZfZm9yKCkgbG9vcFxcXCJ9LFxcbitcXHR7fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKGtleSkge1xcbitcXHRjYXNlIEFSR19OUl9MT09QUzpcXG4rXFx0XFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXFxuK2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncCA9IHtcXG4rXFx0Lm9wdGlvbnMgPSBvcHRzLFxcbitcXHQucGFyc2VyID0gcGFyc2VfYXJnLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcXG4re1xcbitcXHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiYmVuY2htYXJrIGRvZXNuJ3Qgc3VwcG9ydCBjb25zdW1lciFcXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcXG4re1xcbitcXHR3aGlsZSAodHJ1ZSlcXG4rXFx0XFx0LyogdHJpZ2dlciB0aGUgYnBmIHByb2dyYW0gKi9cXG4rXFx0XFx0c3lzY2FsbChfX05SX2dldHBnaWQpO1xcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxcbit7XFxuK1xcdHJlcy1cXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFxcdTAwMjZjdHguc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VoaXRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0dXAodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuK1xcbitcXHRzZXR1cF9saWJicGYoKTtcXG4rXFxuK1xcdGN0eC5za2VsID0gYnBmX2Zvcl9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIWN0eC5za2VsKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cXHUwMDNlcHJvZ3MuYmVuY2htYXJrKTtcXG4rXFx0aWYgKCFsaW5rKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eC5za2VsLVxcdTAwM2Vic3MtXFx1MDAzZW5yX2xvb3BzID0gYXJncy5ucl9sb29wcztcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3IgPSB7XFxuK1xcdC5uYW1lID0gXFxcImJwZi1mb3JcXFwiLFxcbitcXHQuYXJncCA9IFxcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsXFxuK1xcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxcbitcXHQuc2V0dXAgPSBzZXR1cCxcXG4rXFx0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxcbitcXHQubWVhc3VyZSA9IG1lYXN1cmUsXFxuK1xcdC5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLFxcbitcXHQucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoXFxuQEAgLTAsMCArMSwxNSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbitzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxcbitcXG4rc2V0IC1ldWZvIHBpcGVmYWlsXFxuK1xcbitmb3IgdCBpbiAxIDQgOCAxMiAxNjsgZG9cXG4rZm9yIGkgaW4gMTAgMTAwIDUwMCAxMDAwIDUwMDAgMTAwMDAgNTAwMDAgMTAwMDAwIDUwMDAwMCAxMDAwMDAwOyBkb1xcbitzdWJ0aXRsZSBcXFwibnJfbG9vcHM6ICRpLCBucl90aHJlYWRzOiAkdFxcXCJcXG4rXFx0c3VtbWFyaXplX29wcyBcXFwiYnBmX2ZvcjogXFxcIiBcXFxcXFxuK1xcdCAgICBcXFwiJCgkUlVOX0JFTkNIIC1wICR0IC0tbnJfbG9vcHMgJGkgYnBmLWZvcilcXFwiXFxuK1xcdHByaW50ZiBcXFwiXFxcXG5cXFwiXFxuK2RvbmVcXG4rZG9uZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI3NTJkZTVjNDRmNTdhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmNcXG5AQCAtMCwwICsxLDMyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK3UzMiBucl9sb29wcztcXG4rbG9uZyBoaXRzO1xcbitcXG4rc3RhdGljIGludCBvdXRlcl9sb29wKF9fdTMyIGluZGV4LCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW1wdHkgYm9keTogdGhlIHdvcmsgYmVpbmcgbWVhc3VyZWQgaXMgdGhlIG9wZW4tY29kZWQgbnVtZXJpYyBpdGVyYXRvciBpdHNlbGZcXG4rXFx0ICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLlxcbitcXHQgKi9cXG4rXFx0YnBmX2ZvcihpLCAwLCBucl9sb29wcylcXG4rXFx0XFx0O1xcbitcXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcXHUwMDI2aGl0cywgbnJfbG9vcHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJmZW50cnkvXFxcIiBTWVNfUFJFRklYIFxcXCJzeXNfZ2V0cGdpZFxcXCIpXFxuK2ludCBiZW5jaG1hcmsodm9pZCAqY3R4KVxcbit7XFxuK1xcdGJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXFxuaW5kZXggMGZhNzBiMTMzZDkzMjIuLmM0ZGY1ODllY2Q3YWU0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcXG5AQCAtODgsNiArODgsMTUxIEBAIGludCBpdGVyX2Vycl91bnNhZmVfYXNtX2xvb3AoY29uc3Qgdm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogTmFrZWQgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBjb21waWxlci1nZW5lcmF0ZWQgZ2x1ZSBhbmQgdGhlIHdob2xlIGlubGluZWQgcHJvZ3JhbSBjYW4gYmVcXG4rICogbWF0Y2hlZC4gUGlubmVkIHRvIGFyY2hlcyB3aG9zZSBKSVRzIHplcm8tZXh0ZW5kIDMyLWJpdCB3cml0ZXMgaW1wbGljaXRseVxcbisgKiAoYnBmX2ppdF9uZWVkc196ZXh0KCkgPT0gZmFsc2UpOyBvbiBhcmNoZXMgdGhhdCBuZWVkIGV4cGxpY2l0IHplcm8tZXh0ZW5zaW9uIHRoZSB2ZXJpZmllclxcbisgKiBpbnRlcmxlYXZlcyBcXFwid04gPSB3TlxcXCIgaW5zbnMgYW5kIHRoZSBmaXhlZCBzaGFwZSBiZWxvdyB3b3VsZCBub3QgbWF0Y2guIFRoZSBpbmxpbmluZyBpdHNlbGYgaXNcXG4rICogYXJjaCBpbmRlcGVuZGVudCwgc28gY2hlY2tpbmcgaXQgb24gdGhlc2UgYXJjaGVzIGlzIHN1ZmZpY2llbnQuXFxuKyAqXFxuKyAqIFdpdGggY29uc3RhbnQgYm91bmRzIGJwZl9pdGVyX251bV9uZXcoKSBpcyBpbmxpbmVkIHdpdGggdGhlIHJhbmdlIGNoZWNrcyBmb2xkZWQgYXdheSwganVzdFxcbisgKiBzdG9yaW5nIHRoZSBpbml0aWFsIHN0YXRlIChzLVxcdTAwM2VjdXIgPSBzdGFydCAtIDEsIHMtXFx1MDAzZWVuZCA9IGVuZCk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kXFxuKyAqIGJwZl9pdGVyX251bV9kZXN0cm95KCkgYXJlIGlubGluZWQgdG9vLCBsZWF2aW5nIGEgY2FsbC1mcmVlIGxvb3AuXFxuKyAqL1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2Vzc1xcbitfX3hsYXRlZChcXFwicjYgPSByMTBcXFwiKVxcbitfX3hsYXRlZChcXFwicjYgKz0gLThcXFwiKVxcbitfX3hsYXRlZChcXFwicjEgPSByNlxcXCIpXFxuK19feGxhdGVkKFxcXCJyMiA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjMgPSAxMFxcXCIpXFxuKy8qIGJwZl9pdGVyX251bV9uZXcoXFx1MDAyNml0LCAwLCAxMCkgZm9sZGVkIHRvIHRoZSBzdGF0ZSBpbml0ICovXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArMCkgPSAtMVxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArNCkgPSAxMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjEgPSByNlxcXCIpXFxuKy8qIGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCkgKi9cXG4rX194bGF0ZWQoXFxcInIwID0gKih1MzIgKikocjEgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIncwICs9IDFcXFwiKVxcbitfX3hsYXRlZChcXFwicjIgPSAqKHUzMiAqKShyMSArNClcXFwiKVxcbitfX3hsYXRlZChcXFwiaWYgdzAgc1xcdTAwM2U9IHcyIGdvdG8gcGMrM1xcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArMCkgPSByMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IHIxXFxcIilcXG4rX194bGF0ZWQoXFxcImdvdG8gcGMrMlxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gMFxcXCIpXFxuK19feGxhdGVkKFxcXCJpZiByMCAhPSAweDAgZ290byBwYy0xMVxcXCIpXFxuK19feGxhdGVkKFxcXCJyMSA9IHI2XFxcIilcXG4rLyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXFx1MDAyNml0KSAqL1xcbitfX3hsYXRlZChcXFwiKih1NjQgKikocjEgKzApID0gMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwiZXhpdFxcXCIpXFxuK2ludCBfX25ha2VkIGl0ZXJfbnVtX25ld19jb25zdF9mb2xkZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cXG4rXFx0XFx0XFxcInI2ID0gcjEwO1xcXCJcXG4rXFx0XFx0XFxcInI2ICs9IC04O1xcXCJcXG4rXFx0XFx0XFxcInIxID0gcjY7XFxcIlxcbitcXHRcXHRcXFwicjIgPSAwO1xcXCJcXG4rXFx0XFx0XFxcInIzID0gMTA7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1xcXCJcXG4rXFx0XFxcIjE6XFxcIlxcbitcXHRcXHRcXFwicjEgPSByNjtcXFwiXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1xcXCJcXG4rXFx0XFx0XFxcImlmIHIwICE9IDAgZ290byAxYjtcXFwiXFxuK1xcdFxcdFxcXCJyMSA9IHI2O1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XFxcIlxcbitcXHRcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFx0XFxcImV4aXQ7XFxcIlxcbitcXHRcXHQ6XFxuK1xcdFxcdDogX19pbW0oYnBmX2l0ZXJfbnVtX25ldyksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25leHQpLFxcbitcXHRcXHQgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KVxcbitcXHRcXHQ6IF9fY2xvYmJlcl9jb21tb24sIFxcXCJyNlxcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4rLypcXG4rICogU2FtZSBhcmNoIHBpbm5pbmcgYW5kIG5ha2VkLWZ1bmN0aW9uIHJhdGlvbmFsZSBhcyBhYm92ZS4gV2l0aCBhIG5vbi1jb25zdGFudCBib3VuZFxcbisgKiBicGZfaXRlcl9udW1fbmV3KCkga2VlcHMgdGhlIGZ1bGwgcmFuZ2UgY2hlY2s6IHRoZSBkaXN0YW5jZSBpcyBjb21wdXRlZCBhbmQgYm90aCB0aGUgLUVJTlZBTFxcbisgKiBhbmQgLUUyQklHIGVycm9yIHBhdGhzIHJlbWFpbi4gYnBmX2l0ZXJfbnVtX25leHQoKSBhbmQgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28uXFxuKyAqL1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2Vzc1xcbitfX3hsYXRlZChcXFwicjYgPSByMTBcXFwiKVxcbitfX3hsYXRlZChcXFwicjYgKz0gLThcXFwiKVxcbitfX3hsYXRlZChcXFwiY2FsbCB1bmtub3duXFxcIilcXG4rX194bGF0ZWQoXFxcInIzID0gcjBcXFwiKVxcbitfX3hsYXRlZChcXFwicjMgXFx1MDAyNj0gNjU1MzVcXFwiKVxcbitfX3hsYXRlZChcXFwicjEgPSByNlxcXCIpXFxuK19feGxhdGVkKFxcXCJyMiA9IDBcXFwiKVxcbisvKiBicGZfaXRlcl9udW1fbmV3KFxcdTAwMjZpdCwgMCwgXFx1MDAzY25vbi1jb25zdFxcdTAwM2UpIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi9cXG4rX194bGF0ZWQoXFxcImlmIHcyIHNcXHUwMDNlIHczIGdvdG8gcGMrOFxcXCIpXFxuK19feGxhdGVkKFxcXCJ3MCA9IHczXFxcIilcXG4rX194bGF0ZWQoXFxcIncwIC09IHcyXFxcIilcXG4rX194bGF0ZWQoXFxcImlmIHIwIHNcXHUwMDNlIDB4ODAwMDAwIGdvdG8gcGMrOFxcXCIpXFxuK19feGxhdGVkKFxcXCJ3MiArPSAtMVxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArMCkgPSByMlxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArNCkgPSByM1xcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwiZ290byBwYys1XFxcIilcXG4rX194bGF0ZWQoXFxcIioodTY0ICopKHIxICswKSA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAtMjJcXFwiKVxcbitfX3hsYXRlZChcXFwiZ290byBwYysyXFxcIilcXG4rX194bGF0ZWQoXFxcIioodTY0ICopKHIxICswKSA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAtN1xcXCIpXFxuK19feGxhdGVkKFxcXCJyMSA9IHI2XFxcIilcXG4rLyogYnBmX2l0ZXJfbnVtX25leHQoXFx1MDAyNml0KSAqL1xcbitfX3hsYXRlZChcXFwicjAgPSAqKHUzMiAqKShyMSArMClcXFwiKVxcbitfX3hsYXRlZChcXFwidzAgKz0gMVxcXCIpXFxuK19feGxhdGVkKFxcXCJyMiA9ICoodTMyICopKHIxICs0KVxcXCIpXFxuK19feGxhdGVkKFxcXCJpZiB3MCBzXFx1MDAzZT0gdzIgZ290byBwYyszXFxcIilcXG4rX194bGF0ZWQoXFxcIioodTMyICopKHIxICswKSA9IHIwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gcjFcXFwiKVxcbitfX3hsYXRlZChcXFwiZ290byBwYysyXFxcIilcXG4rX194bGF0ZWQoXFxcIioodTY0ICopKHIxICswKSA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcImlmIHIwICE9IDB4MCBnb3RvIHBjLTExXFxcIilcXG4rX194bGF0ZWQoXFxcInIxID0gcjZcXFwiKVxcbisvKiBicGZfaXRlcl9udW1fZGVzdHJveShcXHUwMDI2aXQpICovXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gMFxcXCIpXFxuK19feGxhdGVkKFxcXCJleGl0XFxcIilcXG4raW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cXG4rXFx0XFx0XFxcInI2ID0gcjEwO1xcXCJcXG4rXFx0XFx0XFxcInI2ICs9IC04O1xcXCJcXG4rXFx0XFx0Lyogbm9uLWNvbnN0YW50IGVuZCBzbyB0aGUgcmFuZ2UgY2hlY2tzIGFyZSBrZXB0ICovXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFxcIlxcbitcXHRcXHRcXFwicjMgPSByMDtcXFwiXFxuK1xcdFxcdFxcXCJyMyBcXHUwMDI2PSAweGZmZmY7XFxcIlxcbitcXHRcXHRcXFwicjEgPSByNjtcXFwiXFxuK1xcdFxcdFxcXCJyMiA9IDA7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1xcXCJcXG4rXFx0XFxcIjE6XFxcIlxcbitcXHRcXHRcXFwicjEgPSByNjtcXFwiXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1xcXCJcXG4rXFx0XFx0XFxcImlmIHIwICE9IDAgZ290byAxYjtcXFwiXFxuK1xcdFxcdFxcXCJyMSA9IHI2O1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XFxcIlxcbitcXHRcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFx0XFxcImV4aXQ7XFxcIlxcbitcXHRcXHQ6XFxuK1xcdFxcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25ldyksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25leHQpLFxcbitcXHRcXHQgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KVxcbitcXHRcXHQ6IF9fY2xvYmJlcl9jb21tb24sIFxcXCJyNlxcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4gU0VDKFxcXCJyYXdfdHBcXFwiKVxcbiBfX3N1Y2Nlc3NcXG4gaW50IGl0ZXJfd2hpbGVfbG9vcChjb25zdCB2b2lkICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE0OjE1OjM2LjYwOTQwMjA0NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3OTcxOTQxOTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpeHVwX2tmdW5jX2NhbGxcIixcbiAgICBcImNoZWNrX2tmdW5jX2NhbGxcIixcbiAgICBcInVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGVcIixcbiAgICBcImlubGluZV9icGZfaXRlcl9udW1fbmV3XCIsXG4gICAgXCJpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHRcIixcbiAgICBcImlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaW5saW5lIGJwZl9pdGVyX251bV9uZXcsIGJwZl9pdGVyX251bV9uZXh0LCBhbmQgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kga2Z1bmNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEJQRiB2ZXJpZmllciB0aGF0IG9wdGltaXplcyB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlIGtmdW5jcyBhbmQgY2FuIGJlIHJlYWNoZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDZmNzgxNWNlYjI1YzM3NGY2MGYwNzM4ZWRlODI4ZjA4YTk0MjUwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE0OjE1OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMwLi44YzA0ZTJmZDgwMTcwYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC02MTIsNiArNjEyLDE1IEBAIHN0cnVjdCBicGZfbG9vcF9pbmxpbmVfc3RhdGUge1xuIFx0dTMyIGNhbGxiYWNrX3N1YnByb2dubzsgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXG4gfTtcbiBcbitzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSB7XG4rXHR1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ6MTsgLyogc2V0IHRvIHRydWUgdXBvbiBmaXJzdCBlbnRyeSAqL1xuK1x0dW5zaWduZWQgaW50IGZpdF9mb3JfaW5saW5lOjE7IC8qIHRydWUgaWYgc3RhcnQgYW5kIGVuZCBhcmUgY29uc3RhbnRcbitcdFx0XHRcdFx0KiB3aXRoIHRoZSBzYW1lIHZhbHVlIGF0IGVhY2ggY2FsbFxuK1x0XHRcdFx0XHQqL1xuK1x0czMyIHN0YXJ0OyAvKiB2YWxpZCB3aGVuIGZpdF9mb3JfaW5saW5lIGlzIHRydWUgKi9cbitcdHMzMiBlbmQ7ICAgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXG4rfTtcbitcbiAvKiBwb2ludGVyIGFuZCBzdGF0ZSBmb3IgbWFwcyAqL1xuIHN0cnVjdCBicGZfbWFwX3B0cl9zdGF0ZSB7XG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbkBAIC02NjEsNiArNjcwLDEwIEBAIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSB7XG4gXHRcdCAqIHRoZSBzdGF0ZSBvZiB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzIHRvIG1ha2UgZGVjaXNpb24gYWJvdXQgaW5saW5pbmdcbiBcdFx0ICovXG4gXHRcdHN0cnVjdCBicGZfbG9vcF9pbmxpbmVfc3RhdGUgbG9vcF9pbmxpbmVfc3RhdGU7XG4rXHRcdC8qIGlmIGluc3RydWN0aW9uIGlzIGEgY2FsbCB0byBicGZfaXRlcl9udW1fbmV3IHRoaXMgZmllbGQgdHJhY2tzIGl0cyBzdGFydC9lbmRcbitcdFx0ICogYXJndW1lbnRzIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCBlbGlkaW5nIHRoZSByYW5nZSBjaGVja3Mgd2hlbiBpbmxpbmluZ1xuK1x0XHQgKi9cbitcdFx0c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgaXRlcl9udW1fbmV3X3N0YXRlO1xuIFx0fTtcbiBcdHVuaW9uIHtcbiBcdFx0LyogcmVtZW1iZXIgdGhlIHNpemUgb2YgdHlwZSBwYXNzZWQgdG8gYnBmX29ial9uZXcgdG8gcmV3cml0ZSBSMSAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNTJiZTBhMTE4Y2NlMDcuLmQ1YjczYWU4MDE5NDQzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMjk2Miw2ICsxMjk2Miw0NyBAQCBzdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ1xuIFxuIHN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG4gXG4rLypcbisgKiBicGZfaXRlcl9udW1fbmV3KCkgY2FuIGJlIGlubGluZWQgbW9yZSB0aWdodGx5IHdoZW4gaXRzIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzIGFyZSBjb25zdGFudCxcbisgKiBhcyB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBjYW4gdGhlbiBiZSByZXNvbHZlZCBhdCByZXdyaXRlIHRpbWUuIFJlY29yZCwgcGVyXG4rICogY2FsbCBzaXRlLCB3aGV0aGVyIGJvdGggYXJndW1lbnRzIGFyZSBjb25zdGFudCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9uIGV2ZXJ5IHZpc2l0LlxuKyAqL1xuK3N0YXRpYyBpbnQgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuK3tcbitcdHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlICpzdGF0ZSA9IFx1MDAyNmN1cl9hdXgoZW52KS1cdTAwM2VpdGVyX251bV9uZXdfc3RhdGU7XG4rXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3RhcnRfcmVnID0gXHUwMDI2Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzJdO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmVuZF9yZWcgPSBcdTAwMjZjdXJfcmVncyhlbnYpW0JQRl9SRUdfM107XG4rXHRib29sIGtub3duID0gdG51bV9pc19jb25zdChzdGFydF9yZWctXHUwMDNldmFyX29mZikgXHUwMDI2XHUwMDI2IHRudW1faXNfY29uc3QoZW5kX3JlZy1cdTAwM2V2YXJfb2ZmKTtcbitcdHMzMiBzdGFydCA9IHN0YXJ0X3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuK1x0czMyIGVuZCA9IGVuZF9yZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIXN0YXRlLVx1MDAzZWluaXRpYWxpemVkKSB7XG4rXHRcdHN0YXRlLVx1MDAzZWluaXRpYWxpemVkID0gMTtcbitcdFx0c3RhdGUtXHUwMDNlZml0X2Zvcl9pbmxpbmUgPSBrbm93bjtcbitcdFx0c3RhdGUtXHUwMDNlc3RhcnQgPSBzdGFydDtcbitcdFx0c3RhdGUtXHUwMDNlZW5kID0gZW5kO1xuK1x0fSBlbHNlIGlmIChzdGF0ZS1cdTAwM2VmaXRfZm9yX2lubGluZSkge1xuK1x0XHRzdGF0ZS1cdTAwM2VmaXRfZm9yX2lubGluZSA9IGtub3duIFx1MDAyNlx1MDAyNiBzdGF0ZS1cdTAwM2VzdGFydCA9PSBzdGFydCBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZW5kID09IGVuZDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBXaGlsZSBmb2xkaW5nIGlzIHN0aWxsIHZpYWJsZSB0aGUgZGVjaXNpb24gcmVsaWVzIG9uIHRoZSBleGFjdCBjb25zdGFudCB2YWx1ZXMsIHNvIG1hcmtcbitcdCAqIHRoZSByZWdpc3RlcnMgcHJlY2lzZTsgb3RoZXJ3aXNlIHRoZSB2ZXJpZmllciBjb3VsZCBwcnVuZSBhIHBhdGggdGhhdCByZWFjaGVzIHRoaXMgY2FsbFxuK1x0ICogd2l0aCBkaWZmZXJlbnQgY29uc3RhbnRzIGFuZCB0aGUgZm9sZGVkIGNvZGUgd291bGQgcnVuIHdpdGggYSBzdGFsZSB2YWx1ZS5cbitcdCAqL1xuK1x0aWYgKHN0YXRlLVx1MDAzZWZpdF9mb3JfaW5saW5lKSB7XG4rXHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgQlBGX1JFR18yKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIEJQRl9SRUdfMyk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdCAgICBpbnQgKmluc25faWR4X3ApXG4ge1xuQEAgLTEzMTYzLDYgKzEzMjA0LDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG4rXHRcdGVyciA9IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoZW52KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkrKykge1xuIFx0XHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XG4gXG5AQCAtMTk3NzAsNiArMTk4MTcsMTA5IEBAIHN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcbiBcdCpjbnQgPSA0O1xuIH1cbiBcbisvKlxuKyAqIElubGluZSBicGZfaXRlcl9udW1fbmV3KCkuIFIxIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBpdGVyYXRvciwgUjIgYW5kIFIzIGhvbGQgdGhlIChpbnQpXG4rICogc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMuIEtlZXAgaW4gc3luYyB3aXRoIHRoZSBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuXG4rICovXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUpXG4re1xuK1x0aW50IGkgPSAwO1xuK1xuK1x0LypcbitcdCAqIFdoZW4gc3RhcnQgYW5kIGVuZCBhcmUgY29uc3RhbnQgdGhlIHJhbmdlIGNoZWNrcyBhbmQgdGhlaXIgZXJyb3IgcGF0aHMgZm9sZCBhd2F5LFxuK1x0ICogbGVhdmluZyBqdXN0IHRoZSBzdGF0ZSBpbml0IG9yIHRoZSBlcnJvciByZXN1bHQuXG4rXHQgKi9cbitcdGlmIChzdGF0ZS1cdTAwM2VmaXRfZm9yX2lubGluZSkge1xuK1x0XHRzMzIgc3RhcnQgPSBzdGF0ZS1cdTAwM2VzdGFydCwgZW5kID0gc3RhdGUtXHUwMDNlZW5kO1xuK1xuK1x0XHRpZiAoc3RhcnQgXHUwMDNlIGVuZCkge1xuK1x0XHRcdC8qIHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyByZXR1cm4gLUVJTlZBTDsgKi9cbitcdFx0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbitcdFx0fSBlbHNlIGlmICgoczY0KWVuZCAtIChzNjQpc3RhcnQgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIHtcbitcdFx0XHQvKiBzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FMkJJRzsgKi9cbitcdFx0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRTJCSUcpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxOyBzLVx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXG4rXHRcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgMCwgc3RhcnQgLSAxKTtcbitcdFx0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfVywgQlBGX1JFR18xLCA0LCBlbmQpO1xuK1x0XHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuIGk7XG4rXHR9XG4rXG4rXHQvKiBpZiAoc3RhcnQgXHUwMDNlIGVuZCkgZ290byBlaW52YWw7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHVCwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIDgpO1xuK1x0LypcbitcdCAqIHN0YXJ0IFx1MDAzYz0gZW5kIGhlcmUsIHNvIHRoZSByYW5nZSBlbmQgLSBzdGFydCBmaXRzIGluIGEgdTMyOyBjb21wdXRlIGl0IGFzIGEgMzItYml0XG4rXHQgKiBzdWJ0cmFjdGlvbiB0aGF0IHplcm8tZXh0ZW5kcyBpbnRvIHIwLlxuK1x0ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjMyX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMyk7XG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMik7XG4rXHQvKiBpZiAocjAgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUF9JTU0oQlBGX0pTR1QsIEJQRl9SRUdfMCwgQlBGX01BWF9MT09QUywgOCk7XG4rXHQvKiBzLVx1MDAzZWN1ciA9IHN0YXJ0IC0gMTsgKi9cbitcdGluc25fYnVmW2krK10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTEpO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMiwgMCk7XG4rXHQvKiBzLVx1MDAzZWVuZCA9IGVuZDsgKi9cbitcdGluc25fYnVmW2krK10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzMsIDQpO1xuK1x0LyogcmV0dXJuIDA7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSg1KTtcbitcdC8qIGVpbnZhbDogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRUlOVkFMOyAqL1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbitcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0EoMik7XG4rXHQvKiBlMmJpZzogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FMkJJRyk7XG4rXG4rXHRyZXR1cm4gaTtcbit9XG4rXG4rLypcbisgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX25leHQoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aCB0aGVcbisgKiBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuXG4rICovXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbit7XG4rXHRpbnQgaSA9IDA7XG4rXG4rXHQvKlxuK1x0ICogcy1cdTAwM2VjdXIgYW5kIHMtXHUwMDNlZW5kIGFyZSBpbnQsIHNvIHRoZSAoczY0KShzLVx1MDAzZWN1ciArIDEpIFx1MDAzZT0gcy1cdTAwM2VlbmQgY2hlY2sgaXMgZXF1aXZhbGVudCB0byBhXG4rXHQgKiBzaWduZWQgMzItYml0IGNvbXBhcmlzb24gb2YgKHMtXHUwMDNlY3VyICsgMSkgYWdhaW5zdCBzLVx1MDAzZWVuZCBhbmQgbmVlZHMgbm8gc2lnbiBleHRlbnNpb24uXG4rXHQgKi9cbitcdGluc25fYnVmW2krK10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18wLCAxKTtcbitcdGluc25fYnVmW2krK10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18yLCBCUEZfUkVHXzEsIDQpO1xuK1x0LyogaWYgKChzMzIpKHMtXHUwMDNlY3VyICsgMSkgXHUwMDNlPSAoczMyKXMtXHUwMDNlZW5kKSBnb3RvIGRvbmU7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHRSwgQlBGX1JFR18wLCBCUEZfUkVHXzIsIDMpO1xuK1x0Lyogcy1cdTAwM2VjdXIrKzsgcmV0dXJuIFx1MDAyNnMtXHUwMDNlY3VyOyAqL1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7XG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUF9BKDIpO1xuK1x0LyogZG9uZTogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcbitcbitcdHJldHVybiBpO1xuK31cbitcbisvKlxuKyAqIElubGluZSBicGZfaXRlcl9udW1fZGVzdHJveSgpLiBSMSBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgaXRlcmF0b3IuIEtlZXAgaW4gc3luYyB3aXRoXG4rICogdGhlIGtmdW5jIGluIGtlcm5lbC9icGYvYnBmX2l0ZXIuYy5cbisgKi9cbitzdGF0aWMgaW50IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuK3tcbitcdGludCBpID0gMDtcbitcbitcdC8qIHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyAqL1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuK1xuK1x0cmV0dXJuIGk7XG4rfVxuK1xuIGludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZiwgaW50IGluc25faWR4LCBpbnQgKmNudClcbiB7XG5AQCAtMTk4OTksNiArMjAwNDksMTMgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiBcdFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdCpjbnQgPSA2O1xuK1x0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG4rXHRcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhpbnNuX2J1ZixcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5pdGVyX251bV9uZXdfc3RhdGUpO1xuK1x0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXh0XSkge1xuK1x0XHQqY250ID0gaW5saW5lX2JwZl9pdGVyX251bV9uZXh0KGluc25fYnVmKTtcbitcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcbitcdFx0KmNudCA9IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShpbnNuX2J1Zik7XG4gXHR9XG4gXG4gXHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmFyZ19wcm9nKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCA1NWQzOTQ0Mzg3MDVhNi4uMzE3NGMyZjE4ZTcxNTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTk2NSw2ICs5NjUsNyBAQCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubzogJChPVVRQVVQpL3JpbmdidWZfYmVuY2guc2tlbC5oIFxcXG4gXHRcdFx0ICAgICQoT1VUUFVUKS9wZXJmYnVmX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm86ICQoT1VUUFVUKS9ibG9vbV9maWx0ZXJfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm86ICQoT1VUUFVUKS9icGZfbG9vcF9iZW5jaC5za2VsLmhcbiskKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vOiAkKE9VVFBVVCkvYnBmX2Zvcl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubzogJChPVVRQVVQpL2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX2JlbmNoLnNrZWwuaFxuQEAgLTk5MCw2ICs5OTEsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcbitcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuaW5kZXggM2Q5ZDJjZDc3NjRiZDMuLmI4NmI3MzQ1NmQzY2E4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5AQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9ibG9vbV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDtcbitleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3N0cm5jbXBfYXJncDtcbkBAIC0yOTIsNiArMjkzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHtcbiBcdHsgXHUwMDI2YmVuY2hfcmluZ2J1ZnNfYXJncCwgMCwgXCJSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfYmxvb21fbWFwX2FyZ3AsIDAsIFwiQmxvb20gZmlsdGVyIG1hcCBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCBcImJwZl9sb29wIGhlbHBlciBiZW5jaG1hcmtcIiwgMCB9LFxuK1x0eyBcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsIDAsIFwiYnBmX2ZvciBsb29wIGJlbmNobWFya1wiLCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncCwgMCwgXCJsb2NhbF9zdG9yYWdlIGJlbmNobWFya1wiLCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX3N0cm5jbXBfYXJncCwgMCwgXCJicGZfc3RybmNtcCBoZWxwZXIgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncCwgMCxcbkBAIC01NTcsNiArNTU5LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9ibG9vbV9mYWxzZV9wb3NpdGl2ZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aF9ibG9vbTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9sb29wO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3N0cm5jbXBfbm9faGVscGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9oZWxwZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZTtcbkBAIC02NDAsNiArNjQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9icGZfbG9vcCxcbitcdFx1MDAyNmJlbmNoX2JwZl9mb3IsXG4gXHRcdTAwMjZiZW5jaF9zdHJuY21wX25vX2hlbHBlcixcbiBcdFx1MDAyNmJlbmNoX3N0cm5jbXBfaGVscGVyLFxuIFx0XHUwMDI2YmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MzBjNTFhZDJkZWMzNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmNcbkBAIC0wLDAgKzEsMTA0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbisjaW5jbHVkZSBcImJwZl9mb3JfYmVuY2guc2tlbC5oXCJcbitcbisvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovXG4rc3RhdGljIHN0cnVjdCBjdHgge1xuK1x0c3RydWN0IGJwZl9mb3JfYmVuY2ggKnNrZWw7XG4rfSBjdHg7XG4rXG4rc3RhdGljIHN0cnVjdCB7XG4rXHRfX3UzMiBucl9sb29wcztcbit9IGFyZ3MgPSB7XG4rXHQvKlxuK1x0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xuK1x0ICogdGhlIG9uZS10aW1lIGJwZl9pdGVyX251bV9uZXcoKS9kZXN0cm95KCkgc2V0dXAgYW5kIHRlYXJkb3duLlxuK1x0ICovXG4rXHQubnJfbG9vcHMgPSAxMDAwLFxuK307XG4rXG4rZW51bSB7XG4rXHRBUkdfTlJfTE9PUFMgPSA0MDAwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4rXHR7IFwibnJfbG9vcHNcIiwgQVJHX05SX0xPT1BTLCBcIm5yX2xvb3BzXCIsIDAsXG4rXHRcdFwiU2V0IG51bWJlciBvZiBpdGVyYXRpb25zIGZvciB0aGUgYnBmX2ZvcigpIGxvb3BcIn0sXG4rXHR7fSxcbit9O1xuK1xuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzd2l0Y2ggKGtleSkge1xuK1x0Y2FzZSBBUkdfTlJfTE9PUFM6XG4rXHRcdGFyZ3MubnJfbG9vcHMgPSBzdHJ0b2woYXJnLCBOVUxMLCAxMCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwID0ge1xuK1x0Lm9wdGlvbnMgPSBvcHRzLFxuK1x0LnBhcnNlciA9IHBhcnNlX2FyZyxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHZhbGlkYXRlKHZvaWQpXG4re1xuK1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuK3tcbitcdHdoaWxlICh0cnVlKVxuK1x0XHQvKiB0cmlnZ2VyIHRoZSBicGYgcHJvZ3JhbSAqL1xuK1x0XHRzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXG4re1xuK1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlaGl0cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuK1xuK1x0c2V0dXBfbGliYnBmKCk7XG4rXG4rXHRjdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghY3R4LnNrZWwpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xuK1x0aWYgKCFsaW5rKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlbnJfbG9vcHMgPSBhcmdzLm5yX2xvb3BzO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvciA9IHtcbitcdC5uYW1lID0gXCJicGYtZm9yXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2JwZl9mb3JfYXJncCxcbitcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuK1x0LnNldHVwID0gc2V0dXAsXG4rXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4rXHQubWVhc3VyZSA9IG1lYXN1cmUsXG4rXHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcbitcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2RhNjQ1MzkyMGRhYjNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcbkBAIC0wLDAgKzEsMTUgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbitzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxuK1xuK3NldCAtZXVmbyBwaXBlZmFpbFxuK1xuK2ZvciB0IGluIDEgNCA4IDEyIDE2OyBkb1xuK2ZvciBpIGluIDEwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwIDUwMDAwIDEwMDAwMCA1MDAwMDAgMTAwMDAwMDsgZG9cbitzdWJ0aXRsZSBcIm5yX2xvb3BzOiAkaSwgbnJfdGhyZWFkczogJHRcIlxuK1x0c3VtbWFyaXplX29wcyBcImJwZl9mb3I6IFwiIFxcXG4rXHQgICAgXCIkKCRSVU5fQkVOQ0ggLXAgJHQgLS1ucl9sb29wcyAkaSBicGYtZm9yKVwiXG4rXHRwcmludGYgXCJcXG5cIlxuK2RvbmVcbitkb25lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjc1MmRlNWM0NGY1N2Fcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmNcbkBAIC0wLDAgKzEsMzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbit1MzIgbnJfbG9vcHM7XG4rbG9uZyBoaXRzO1xuK1xuK3N0YXRpYyBpbnQgb3V0ZXJfbG9vcChfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qXG4rXHQgKiBFbXB0eSBib2R5OiB0aGUgd29yayBiZWluZyBtZWFzdXJlZCBpcyB0aGUgb3Blbi1jb2RlZCBudW1lcmljIGl0ZXJhdG9yIGl0c2VsZlxuK1x0ICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLlxuK1x0ICovXG4rXHRicGZfZm9yKGksIDAsIG5yX2xvb3BzKVxuK1x0XHQ7XG4rXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcdTAwMjZoaXRzLCBucl9sb29wcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiZmVudHJ5L1wiIFNZU19QUkVGSVggXCJzeXNfZ2V0cGdpZFwiKVxuK2ludCBiZW5jaG1hcmsodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcbmluZGV4IDBmYTcwYjEzM2Q5MzIyLi5jNGRmNTg5ZWNkN2FlNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuQEAgLTg4LDYgKzg4LDE1MSBAQCBpbnQgaXRlcl9lcnJfdW5zYWZlX2FzbV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIE5ha2VkIGZ1bmN0aW9ucywgc28gdGhlcmUgaXMgbm8gY29tcGlsZXItZ2VuZXJhdGVkIGdsdWUgYW5kIHRoZSB3aG9sZSBpbmxpbmVkIHByb2dyYW0gY2FuIGJlXG4rICogbWF0Y2hlZC4gUGlubmVkIHRvIGFyY2hlcyB3aG9zZSBKSVRzIHplcm8tZXh0ZW5kIDMyLWJpdCB3cml0ZXMgaW1wbGljaXRseVxuKyAqIChicGZfaml0X25lZWRzX3pleHQoKSA9PSBmYWxzZSk7IG9uIGFyY2hlcyB0aGF0IG5lZWQgZXhwbGljaXQgemVyby1leHRlbnNpb24gdGhlIHZlcmlmaWVyXG4rICogaW50ZXJsZWF2ZXMgXCJ3TiA9IHdOXCIgaW5zbnMgYW5kIHRoZSBmaXhlZCBzaGFwZSBiZWxvdyB3b3VsZCBub3QgbWF0Y2guIFRoZSBpbmxpbmluZyBpdHNlbGYgaXNcbisgKiBhcmNoIGluZGVwZW5kZW50LCBzbyBjaGVja2luZyBpdCBvbiB0aGVzZSBhcmNoZXMgaXMgc3VmZmljaWVudC5cbisgKlxuKyAqIFdpdGggY29uc3RhbnQgYm91bmRzIGJwZl9pdGVyX251bV9uZXcoKSBpcyBpbmxpbmVkIHdpdGggdGhlIHJhbmdlIGNoZWNrcyBmb2xkZWQgYXdheSwganVzdFxuKyAqIHN0b3JpbmcgdGhlIGluaXRpYWwgc3RhdGUgKHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxLCBzLVx1MDAzZWVuZCA9IGVuZCk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kXG4rICogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28sIGxlYXZpbmcgYSBjYWxsLWZyZWUgbG9vcC5cbisgKi9cbitTRUMoXCJyYXdfdHBcIilcbitfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4rX19zdWNjZXNzXG4rX194bGF0ZWQoXCJyNiA9IHIxMFwiKVxuK19feGxhdGVkKFwicjYgKz0gLThcIilcbitfX3hsYXRlZChcInIxID0gcjZcIilcbitfX3hsYXRlZChcInIyID0gMFwiKVxuK19feGxhdGVkKFwicjMgPSAxMFwiKVxuKy8qIGJwZl9pdGVyX251bV9uZXcoXHUwMDI2aXQsIDAsIDEwKSBmb2xkZWQgdG8gdGhlIHN0YXRlIGluaXQgKi9cbitfX3hsYXRlZChcIioodTMyICopKHIxICswKSA9IC0xXCIpXG4rX194bGF0ZWQoXCIqKHUzMiAqKShyMSArNCkgPSAxMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rLyogYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpICovXG4rX194bGF0ZWQoXCJyMCA9ICoodTMyICopKHIxICswKVwiKVxuK19feGxhdGVkKFwidzAgKz0gMVwiKVxuK19feGxhdGVkKFwicjIgPSAqKHUzMiAqKShyMSArNClcIilcbitfX3hsYXRlZChcImlmIHcwIHNcdTAwM2U9IHcyIGdvdG8gcGMrM1wiKVxuK19feGxhdGVkKFwiKih1MzIgKikocjEgKzApID0gcjBcIilcbitfX3hsYXRlZChcInIwID0gcjFcIilcbitfX3hsYXRlZChcImdvdG8gcGMrMlwiKVxuK19feGxhdGVkKFwiKih1NjQgKikocjEgKzApID0gMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJpZiByMCAhPSAweDAgZ290byBwYy0xMVwiKVxuK19feGxhdGVkKFwicjEgPSByNlwiKVxuKy8qIGJwZl9pdGVyX251bV9kZXN0cm95KFx1MDAyNml0KSAqL1xuK19feGxhdGVkKFwiKih1NjQgKikocjEgKzApID0gMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJleGl0XCIpXG4raW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2NvbnN0X2ZvbGRlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdC8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqL1xuK1x0XHRcInI2ID0gcjEwO1wiXG4rXHRcdFwicjYgKz0gLTg7XCJcbitcdFx0XCJyMSA9IHI2O1wiXG4rXHRcdFwicjIgPSAwO1wiXG4rXHRcdFwicjMgPSAxMDtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fbmV3XTtcIlxuK1x0XCIxOlwiXG4rXHRcdFwicjEgPSByNjtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fbmV4dF07XCJcbitcdFx0XCJpZiByMCAhPSAwIGdvdG8gMWI7XCJcbitcdFx0XCJyMSA9IHI2O1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9pdGVyX251bV9kZXN0cm95XTtcIlxuK1x0XHRcInIwID0gMDtcIlxuK1x0XHRcImV4aXQ7XCJcbitcdFx0OlxuK1x0XHQ6IF9faW1tKGJwZl9pdGVyX251bV9uZXcpLFxuK1x0XHQgIF9faW1tKGJwZl9pdGVyX251bV9uZXh0KSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fZGVzdHJveSlcbitcdFx0OiBfX2Nsb2JiZXJfY29tbW9uLCBcInI2XCJcbitcdCk7XG4rfVxuK1xuKy8qXG4rICogU2FtZSBhcmNoIHBpbm5pbmcgYW5kIG5ha2VkLWZ1bmN0aW9uIHJhdGlvbmFsZSBhcyBhYm92ZS4gV2l0aCBhIG5vbi1jb25zdGFudCBib3VuZFxuKyAqIGJwZl9pdGVyX251bV9uZXcoKSBrZWVwcyB0aGUgZnVsbCByYW5nZSBjaGVjazogdGhlIGRpc3RhbmNlIGlzIGNvbXB1dGVkIGFuZCBib3RoIHRoZSAtRUlOVkFMXG4rICogYW5kIC1FMkJJRyBlcnJvciBwYXRocyByZW1haW4uIGJwZl9pdGVyX251bV9uZXh0KCkgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95KCkgYXJlIGlubGluZWQgdG9vLlxuKyAqL1xuK1NFQyhcInJhd190cFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbitfX3N1Y2Nlc3NcbitfX3hsYXRlZChcInI2ID0gcjEwXCIpXG4rX194bGF0ZWQoXCJyNiArPSAtOFwiKVxuK19feGxhdGVkKFwiY2FsbCB1bmtub3duXCIpXG4rX194bGF0ZWQoXCJyMyA9IHIwXCIpXG4rX194bGF0ZWQoXCJyMyBcdTAwMjY9IDY1NTM1XCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rX194bGF0ZWQoXCJyMiA9IDBcIilcbisvKiBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCAwLCBcdTAwM2Nub24tY29uc3RcdTAwM2UpIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi9cbitfX3hsYXRlZChcImlmIHcyIHNcdTAwM2UgdzMgZ290byBwYys4XCIpXG4rX194bGF0ZWQoXCJ3MCA9IHczXCIpXG4rX194bGF0ZWQoXCJ3MCAtPSB3MlwiKVxuK19feGxhdGVkKFwiaWYgcjAgc1x1MDAzZSAweDgwMDAwMCBnb3RvIHBjKzhcIilcbitfX3hsYXRlZChcIncyICs9IC0xXCIpXG4rX194bGF0ZWQoXCIqKHUzMiAqKShyMSArMCkgPSByMlwiKVxuK19feGxhdGVkKFwiKih1MzIgKikocjEgKzQpID0gcjNcIilcbitfX3hsYXRlZChcInIwID0gMFwiKVxuK19feGxhdGVkKFwiZ290byBwYys1XCIpXG4rX194bGF0ZWQoXCIqKHU2NCAqKShyMSArMCkgPSAwXCIpXG4rX194bGF0ZWQoXCJyMCA9IC0yMlwiKVxuK19feGxhdGVkKFwiZ290byBwYysyXCIpXG4rX194bGF0ZWQoXCIqKHU2NCAqKShyMSArMCkgPSAwXCIpXG4rX194bGF0ZWQoXCJyMCA9IC03XCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rLyogYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpICovXG4rX194bGF0ZWQoXCJyMCA9ICoodTMyICopKHIxICswKVwiKVxuK19feGxhdGVkKFwidzAgKz0gMVwiKVxuK19feGxhdGVkKFwicjIgPSAqKHUzMiAqKShyMSArNClcIilcbitfX3hsYXRlZChcImlmIHcwIHNcdTAwM2U9IHcyIGdvdG8gcGMrM1wiKVxuK19feGxhdGVkKFwiKih1MzIgKikocjEgKzApID0gcjBcIilcbitfX3hsYXRlZChcInIwID0gcjFcIilcbitfX3hsYXRlZChcImdvdG8gcGMrMlwiKVxuK19feGxhdGVkKFwiKih1NjQgKikocjEgKzApID0gMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJpZiByMCAhPSAweDAgZ290byBwYy0xMVwiKVxuK19feGxhdGVkKFwicjEgPSByNlwiKVxuKy8qIGJwZl9pdGVyX251bV9kZXN0cm95KFx1MDAyNml0KSAqL1xuK19feGxhdGVkKFwiKih1NjQgKikocjEgKzApID0gMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJleGl0XCIpXG4raW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cbitcdFx0XCJyNiA9IHIxMDtcIlxuK1x0XHRcInI2ICs9IC04O1wiXG4rXHRcdC8qIG5vbi1jb25zdGFudCBlbmQgc28gdGhlIHJhbmdlIGNoZWNrcyBhcmUga2VwdCAqL1xuK1x0XHRcImNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcIlxuK1x0XHRcInIzID0gcjA7XCJcbitcdFx0XCJyMyBcdTAwMjY9IDB4ZmZmZjtcIlxuK1x0XHRcInIxID0gcjY7XCJcbitcdFx0XCJyMiA9IDA7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCJcbitcdFwiMTpcIlxuK1x0XHRcInIxID0gcjY7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1wiXG4rXHRcdFwiaWYgcjAgIT0gMCBnb3RvIDFiO1wiXG4rXHRcdFwicjEgPSByNjtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCJcbitcdFx0XCJyMCA9IDA7XCJcbitcdFx0XCJleGl0O1wiXG4rXHRcdDpcbitcdFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV3KSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksXG4rXHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXG4rXHRcdDogX19jbG9iYmVyX2NvbW1vbiwgXCJyNlwiXG4rXHQpO1xuK31cbitcbiBTRUMoXCJyYXdfdHBcIilcbiBfX3N1Y2Nlc3NcbiBpbnQgaXRlcl93aGlsZV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE0OjE1OjM2LjYwOTQwMzExNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjU3NDQ1MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBPcHRpbWl6YXRpb246IEl0ZXJhdGlvbiBJbmxpbmluZyoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgZG9pbmcgc29tZSBjbGV2ZXIgaW5saW5pbmcgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEl0J3MgdGFyZ2V0aW5nIGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBicGZfaXRlcl9udW1fZGVzdHJveWAga2Z1bmNzLCB3aGljaCBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uIHRhcmdldC4gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzOyB0aGV5J3ZlIGFkZGVkIGEgYHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlYCB0byB0aGUgYGJwZl9pbnNuX2F1eF9kYXRhYCB0byB0cmFjayB0aGUgYXJndW1lbnRzJyBjb25zdGFudC1uZXNzIGFuZCB0aGVyZWZvcmUgdGhlaXIgc3VpdGFiaWxpdHkgZm9yIGlubGluaW5nLiBUaGUgbWFpbiBsb2dpYyBpcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2hlcmUgdGhleSdyZSB1cGRhdGluZyB0aGlzIHN0YXRlIGFuZCBwZXJmb3JtaW5nIHRoZSBhY3R1YWwgaW5saW5pbmcgaW4gYGJwZl9maXh1cF9rZnVuY19jYWxsYC4gVGhleSd2ZSBhbHNvIGFkZGVkIGEgYmVuY2htYXJrIChgYmVuY2hfYnBmX2Zvci5jYCkgYW5kIHNvbWUgdGVzdHMgaW4gYGl0ZXJzLmNgLCB3aGljaCBpcyB0aGUgcmlnaHQgYXBwcm9hY2guXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIGZvciBhbnlvbmUgdXNpbmcgYGJwZl9mb3JgIG9yIGNhbGxpbmcgYGJwZl9pdGVyX251bV9uZXdgIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlIHZpYSBsb2FkZWQgQlBGIHByb2dyYW1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGFjdCBmcm9tIHRoZSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuTGV0J3Mgc2VlLCB0aGUgY29yZSBmdW5jdGlvbnMgbW9kaWZpZWQvYWRkZWQgYXJlOiBgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZWAsIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ld2AsIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHRgLCBhbmQgYGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveWAuIEFsbCBvZiB0aGVzZSwgaW50ZXJlc3RpbmdseSwgYXJlIHN0YXRpYyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBlbnRyeSBwb2ludHMgYXJlIGBjaGVja19rZnVuY19jYWxsYCBhbmQgYGJwZl9maXh1cF9rZnVuY19jYWxsYC5cblxuTXkgcHJpbWFyeSBmdXp6aW5nIGZvY3VzIHNob3VsZCBub3cgZGVmaW5pdGVseSBiZSB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGtmdW5jIGNhbGxzIGFuZCBpbmxpbmluZy4gSSBzaG91bGQgemVybyBpbiBvbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgdGhvdWdoIEkgd2lsbCBiZSBsaW1pdGVkIHNpbmNlIHRoZXkgYXJlIHN0YXRpYzpcblxuKiAgIGB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlYCAoc3RhdGljLCBidXQgc3RpbGwgYSBjb2RlIHBhdGggdG8gY29uc2lkZXIpXG4qICAgYGlubGluZV9icGZfaXRlcl9udW1fbmV3YFxuKiAgIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHRgXG4qICAgYGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveWBcbiogICBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIChhbiBleGlzdGluZyBmdW5jdGlvbiB0aGV5IGFyZSB1c2luZywgd2hpY2ggaXMgZ29vZCB0byBhZGQgaXQgdG8gdGhlIGxpc3QpXG4qICAgYGNoZWNrX2tmdW5jX2NhbGxgIChhbiBleGlzdGluZyBmdW5jdGlvbiB0aGF0IGlzIGtleSB0byB0YXJnZXQpLlxuXG5gdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZWAgYW5kIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ld2AgYXJlIHN0YXRpYywgSSBhbHJlYWR5IHNlZS4gR29vZC5cblxuQ29uZmlncyByZXF1aXJlZCBhcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAuIEVhc3kgdG8gdmVyaWZ5LiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYXMgZXhwZWN0ZWQuXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWdzIHJlbGF0aW5nIHRvIEJQRiBpdGVyYXRvcnM7IGxldCBtZSBncmVwIGZvciBgYnBmX2l0ZXJfbnVtX25ld2AgdG8gY2hlY2sgaWYgaXQgZGVwZW5kcyBvbiBhbnl0aGluZy4gVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYGtlcm5lbC9icGYvYnBmX2l0ZXIuY2AsIHNvIEkgc2hvdWxkIGNoZWNrIHRoZSBNYWtlZmlsZSBvciBLY29uZmlnIGZvciB0aGF0IGRpcmVjdG9yeS4gR29vZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlncyByaWdodC5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMuIEkgY2FuIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTQ6MTU6NDcuMjY2ODUwNzc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDAwMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX251bV9uZXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jPTc2OD1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc2OS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzcwOl9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc3MS17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODg2PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZHlucHRyX3NsaWNlX3Jkd3IsIEtGX1JFVF9OVUxMKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4ODc6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX251bV9uZXcsIEtGX0lURVJfTkVXKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4ODgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX251bV9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTExMz1zdGF0aWMgYm9vbCBzdGF0ZXNfbWF5YmVfbG9vcGluZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExODEtICpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExODI6ICogICBicGZfaXRlcl9udW1fbmV3KFxcdTAwMjZpdCwgMCwgMTApO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE4My0gKiAgIHdoaWxlICgocCA9IGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZ0KSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NTk3PXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZ2V0X2l0ZXJfZnJvbV9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXJfc3QsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY3MS0gKiAgICAgaW50IGkgPSAwLCBhID0gMDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY3MjogKiAgICAgYnBmX2l0ZXJfbnVtX25ldyhcXHUwMDI2aXQsIDAsIDEwKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY3My0gKiAgICAgd2hpbGUgKGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTA2OD1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMTgtXFx0S0ZfYnBmX2xvY2FsX2lycV9yZXN0b3JlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTExOTpcXHRLRl9icGZfaXRlcl9udW1fbmV3LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEyMC1cXHRLRl9icGZfaXRlcl9udW1fbmV4dCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIwNj1CVEZfSUQoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwNzpCVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX25ldylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDgtQlRGX0lEKGZ1bmMsIGJwZl9pdGVyX251bV9uZXh0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjkwPXN0YXRpYyBib29sIGlzX2JwZl9pdGVyX251bV9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2OTEte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY5MjpcXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY5My1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0gfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjk2Mz1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTY1LS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTY2OiAqIGJwZl9pdGVyX251bV9uZXcoKSBjYW4gYmUgaW5saW5lZCBtb3JlIHRpZ2h0bHkgd2hlbiBpdHMgc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMgYXJlIGNvbnN0YW50LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk2Ny0gKiBhcyB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBjYW4gdGhlbiBiZSByZXNvbHZlZCBhdCByZXdyaXRlIHRpbWUuIFJlY29yZCwgcGVyXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5NzA9c3RhdGljIGludCB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTcxLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NzI6XFx0c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgKnN0YXRlID0gXFx1MDAyNmN1cl9hdXgoZW52KS1cXHUwMDNlaXRlcl9udW1fbmV3X3N0YXRlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk3My1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3RhcnRfcmVnID0gXFx1MDAyNmN1cl9yZWdzKGVudilbQlBGX1JFR18yXTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzAwNj1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjA2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzIwNzpcXHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzIwOC1cXHRcXHRlcnIgPSB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlKGVudik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4MDM9c3RhdGljIHZvaWQgX19maXh1cF9jb2xsZWN0aW9uX2luc2VydF9rZnVuYyhzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODIwLS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODIxOiAqIElubGluZSBicGZfaXRlcl9udW1fbmV3KCkuIFIxIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBpdGVyYXRvciwgUjIgYW5kIFIzIGhvbGQgdGhlIChpbnQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODIyLSAqIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTgyMy0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4MjQ6c3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODI1LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTkyMz1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDUxLVxcdFxcdCpjbnQgPSA2O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA1MjpcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDUzOlxcdFxcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNTQtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLml0ZXJfbnVtX25ld19zdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE0OjE1OjQ3LjMzMzg1NjA5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjc2ODgxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbiBvcHRpbWl6YXRpb24gdG8gdGhlIEJQRiB2ZXJpZmllci4gSXQncyBpbmxpbmluZyBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgLiBUaGF0IHNlZW1zIHByZXR0eSBzb2xpZCBmcm9tIGEgZnVuY3Rpb25hbGl0eSBzdGFuZHBvaW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJZZXAsIHRoaXMgYWJzb2x1dGVseSBuZWVkcyBmdXp6aW5nLlwiIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbmxpbmluZyBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIGlzc3VlcywgZXNwZWNpYWxseSBhcm91bmQgZWRnZSBjYXNlcy5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAgZnVuY3Rpb25zLiBUaG9zZSBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIFNpbmNlIHRoZSBpbmxpbmluZyBmdW5jdGlvbnMsIGxpa2UgYHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGVgLCBgaW5saW5lX2JwZl9pdGVyX251bV9uZXdgLCBgaW5saW5lX2JwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgLCBhcmUgc3RhdGljLCBJIHNob3VsZCBwcm9iYWJseSBrZWVwIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAgYW5kIGBjaGVja19rZnVuY19jYWxsYCBvbiB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGtleSByZXF1aXJlbWVudCBoZXJlLiBJ4oCZbGwgbWFrZSBzdXJlIHRoYXQgaXMgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJIGtub3cgYEJQRl9KSVRgIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgQlBGLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLCBidXQgYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUgY29yZSByZXF1aXJlbWVudC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIHByb2NlZWQuIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc0NSwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTQ6MTU6NTQuNTAxNTQ2NTkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTc5MzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZml4dXBfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwidXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZVwiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9uZXdcIixcbiAgICBcImlubGluZV9icGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldywgYnBmX2l0ZXJfbnVtX25leHQsIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSBrZnVuY3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgb3B0aW1pemVzIHRoZSBleGVjdXRpb24gb2YgdGhlc2Uga2Z1bmNzIGFuZCBjYW4gYmUgcmVhY2hlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBmcm9tIHVzZXJzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maXh1cF9rZnVuY19jYWxsXCIsXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJ1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlXCIsXG4gICAgXCJpbmxpbmVfYnBmX2l0ZXJfbnVtX25ld1wiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9uZXh0XCIsXG4gICAgXCJpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGlubGluZSBicGZfaXRlcl9udW1fbmV3LCBicGZfaXRlcl9udW1fbmV4dCwgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95IGtmdW5jcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBvcHRpbWl6ZXMgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBrZnVuY3MgYW5kIGNhbiBiZSByZWFjaGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workfloww4q6j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 13:54:38 +0000 UTC FinishedAt: 2026-07-23 14:15:55 +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": "a23a71823352e2d792dcaae25f1ebb744acbfc0b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a23a71823352e2d792dcaae25f1ebb744acbfc0b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a9eaa282-a008-4d81-b0dd-131344e2667d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_fixup_kfunc_call", "check_kfunc_call", "update_iter_num_new_state", "inline_bpf_iter_num_new", "inline_bpf_iter_num_next", "inline_bpf_iter_num_destroy" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpeHVwX2tmdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDt1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlJiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fbmV3JiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fbmV4dCYjMzQ7LAogICAgJiMzNDtpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldywgYnBmX2l0ZXJfbnVtX25leHQsIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSBrZnVuY3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgb3B0aW1pemVzIHRoZSBleGVjdXRpb24gb2YgdGhlc2Uga2Z1bmNzIGFuZCBjYW4gYmUgcmVhY2hlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNDoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2Zjc4MTVjZWIyNWMzNzRmNjBmMDczOGVkZTgyOGYwOGE5NDI1MDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAxNDoxNTozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggNjgyYzJjZDNiODQ0MzAuLjhjMDRlMmZkODAxNzBiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTYxMiw2ICYjNDM7NjEyLDE1IEBAIHN0cnVjdCBicGZfbG9vcF9pbmxpbmVfc3RhdGUge1xuIFx0dTMyIGNhbGxiYWNrX3N1YnByb2dubzsgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXG4gfTtcbiBcbiYjNDM7c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUge1xuJiM0MztcdHVuc2lnbmVkIGludCBpbml0aWFsaXplZDoxOyAvKiBzZXQgdG8gdHJ1ZSB1cG9uIGZpcnN0IGVudHJ5ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGZpdF9mb3JfaW5saW5lOjE7IC8qIHRydWUgaWYgc3RhcnQgYW5kIGVuZCBhcmUgY29uc3RhbnRcbiYjNDM7XHRcdFx0XHRcdCogd2l0aCB0aGUgc2FtZSB2YWx1ZSBhdCBlYWNoIGNhbGxcbiYjNDM7XHRcdFx0XHRcdCovXG4mIzQzO1x0czMyIHN0YXJ0OyAvKiB2YWxpZCB3aGVuIGZpdF9mb3JfaW5saW5lIGlzIHRydWUgKi9cbiYjNDM7XHRzMzIgZW5kOyAgIC8qIHZhbGlkIHdoZW4gZml0X2Zvcl9pbmxpbmUgaXMgdHJ1ZSAqL1xuJiM0Mzt9O1xuJiM0MztcbiAvKiBwb2ludGVyIGFuZCBzdGF0ZSBmb3IgbWFwcyAqL1xuIHN0cnVjdCBicGZfbWFwX3B0cl9zdGF0ZSB7XG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbkBAIC02NjEsNiAmIzQzOzY3MCwxMCBAQCBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEge1xuIFx0XHQgKiB0aGUgc3RhdGUgb2YgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyB0byBtYWtlIGRlY2lzaW9uIGFib3V0IGlubGluaW5nXG4gXHRcdCAqL1xuIFx0XHRzdHJ1Y3QgYnBmX2xvb3BfaW5saW5lX3N0YXRlIGxvb3BfaW5saW5lX3N0YXRlO1xuJiM0MztcdFx0LyogaWYgaW5zdHJ1Y3Rpb24gaXMgYSBjYWxsIHRvIGJwZl9pdGVyX251bV9uZXcgdGhpcyBmaWVsZCB0cmFja3MgaXRzIHN0YXJ0L2VuZFxuJiM0MztcdFx0ICogYXJndW1lbnRzIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCBlbGlkaW5nIHRoZSByYW5nZSBjaGVja3Mgd2hlbiBpbmxpbmluZ1xuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSBpdGVyX251bV9uZXdfc3RhdGU7XG4gXHR9O1xuIFx0dW5pb24ge1xuIFx0XHQvKiByZW1lbWJlciB0aGUgc2l6ZSBvZiB0eXBlIHBhc3NlZCB0byBicGZfb2JqX25ldyB0byByZXdyaXRlIFIxICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCA1MmJlMGExMThjY2UwNy4uZDViNzNhZTgwMTk0NDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTEyOTYyLDYgJiM0MzsxMjk2Miw0NyBAQCBzdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ1xuIFxuIHN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIGJwZl9pdGVyX251bV9uZXcoKSBjYW4gYmUgaW5saW5lZCBtb3JlIHRpZ2h0bHkgd2hlbiBpdHMgc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMgYXJlIGNvbnN0YW50LFxuJiM0MzsgKiBhcyB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBjYW4gdGhlbiBiZSByZXNvbHZlZCBhdCByZXdyaXRlIHRpbWUuIFJlY29yZCwgcGVyXG4mIzQzOyAqIGNhbGwgc2l0ZSwgd2hldGhlciBib3RoIGFyZ3VtZW50cyBhcmUgY29uc3RhbnQgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvbiBldmVyeSB2aXNpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgKnN0YXRlID0gXHUwMDI2Y3VyX2F1eChlbnYpLVx1MDAzZWl0ZXJfbnVtX25ld19zdGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3RhcnRfcmVnID0gXHUwMDI2Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzJdO1xuJiM0MztcdHN0cnVjdCBicGZfcmVnX3N0YXRlICplbmRfcmVnID0gXHUwMDI2Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzNdO1xuJiM0MztcdGJvb2wga25vd24gPSB0bnVtX2lzX2NvbnN0KHN0YXJ0X3JlZy1cdTAwM2V2YXJfb2ZmKSBcdTAwMjZcdTAwMjYgdG51bV9pc19jb25zdChlbmRfcmVnLVx1MDAzZXZhcl9vZmYpO1xuJiM0MztcdHMzMiBzdGFydCA9IHN0YXJ0X3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuJiM0MztcdHMzMiBlbmQgPSBlbmRfcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzdGF0ZS1cdTAwM2Vpbml0aWFsaXplZCkge1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlaW5pdGlhbGl6ZWQgPSAxO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlZml0X2Zvcl9pbmxpbmUgPSBrbm93bjtcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZXN0YXJ0ID0gc3RhcnQ7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VlbmQgPSBlbmQ7XG4mIzQzO1x0fSBlbHNlIGlmIChzdGF0ZS1cdTAwM2VmaXRfZm9yX2lubGluZSkge1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlZml0X2Zvcl9pbmxpbmUgPSBrbm93biBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlc3RhcnQgPT0gc3RhcnQgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWVuZCA9PSBlbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdoaWxlIGZvbGRpbmcgaXMgc3RpbGwgdmlhYmxlIHRoZSBkZWNpc2lvbiByZWxpZXMgb24gdGhlIGV4YWN0IGNvbnN0YW50IHZhbHVlcywgc28gbWFya1xuJiM0MztcdCAqIHRoZSByZWdpc3RlcnMgcHJlY2lzZTsgb3RoZXJ3aXNlIHRoZSB2ZXJpZmllciBjb3VsZCBwcnVuZSBhIHBhdGggdGhhdCByZWFjaGVzIHRoaXMgY2FsbFxuJiM0MztcdCAqIHdpdGggZGlmZmVyZW50IGNvbnN0YW50cyBhbmQgdGhlIGZvbGRlZCBjb2RlIHdvdWxkIHJ1biB3aXRoIGEgc3RhbGUgdmFsdWUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHN0YXRlLVx1MDAzZWZpdF9mb3JfaW5saW5lKSB7XG4mIzQzO1x0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIEJQRl9SRUdfMik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBCUEZfUkVHXzMpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdFx0ICAgIGludCAqaW5zbl9pZHhfcClcbiB7XG5AQCAtMTMxNjMsNiAmIzQzOzEzMjA0LDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xuJiM0MztcdFx0ZXJyID0gdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZShlbnYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHUzMiByZWdubyA9IGNhbGxlcl9zYXZlZFtpXTtcbiBcbkBAIC0xOTc3MCw2ICYjNDM7MTk4MTcsMTA5IEBAIHN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcbiBcdCpjbnQgPSA0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogSW5saW5lIGJwZl9pdGVyX251bV9uZXcoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLCBSMiBhbmQgUjMgaG9sZCB0aGUgKGludClcbiYjNDM7ICogc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMuIEtlZXAgaW4gc3luYyB3aXRoIHRoZSBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGlubGluZV9icGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsIHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdGludCBpID0gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIHN0YXJ0IGFuZCBlbmQgYXJlIGNvbnN0YW50IHRoZSByYW5nZSBjaGVja3MgYW5kIHRoZWlyIGVycm9yIHBhdGhzIGZvbGQgYXdheSxcbiYjNDM7XHQgKiBsZWF2aW5nIGp1c3QgdGhlIHN0YXRlIGluaXQgb3IgdGhlIGVycm9yIHJlc3VsdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3RhdGUtXHUwMDNlZml0X2Zvcl9pbmxpbmUpIHtcbiYjNDM7XHRcdHMzMiBzdGFydCA9IHN0YXRlLVx1MDAzZXN0YXJ0LCBlbmQgPSBzdGF0ZS1cdTAwM2VlbmQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXJ0IFx1MDAzZSBlbmQpIHtcbiYjNDM7XHRcdFx0Lyogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRUlOVkFMOyAqL1xuJiM0MztcdFx0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcbiYjNDM7XHRcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xuJiM0MztcdFx0fSBlbHNlIGlmICgoczY0KWVuZCAtIChzNjQpc3RhcnQgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIHtcbiYjNDM7XHRcdFx0Lyogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXG4mIzQzO1x0XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuJiM0MztcdFx0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qIHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxOyBzLVx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXG4mIzQzO1x0XHRcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgMCwgc3RhcnQgLSAxKTtcbiYjNDM7XHRcdFx0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfVywgQlBGX1JFR18xLCA0LCBlbmQpO1xuJiM0MztcdFx0XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gaTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGlmIChzdGFydCBcdTAwM2UgZW5kKSBnb3RvIGVpbnZhbDsgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dULCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgOCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzdGFydCBcdTAwM2M9IGVuZCBoZXJlLCBzbyB0aGUgcmFuZ2UgZW5kIC0gc3RhcnQgZml0cyBpbiBhIHUzMjsgY29tcHV0ZSBpdCBhcyBhIDMyLWJpdFxuJiM0MztcdCAqIHN1YnRyYWN0aW9uIHRoYXQgemVyby1leHRlbmRzIGludG8gcjAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjMyX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMyk7XG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0FMVTMyX1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMik7XG4mIzQzO1x0LyogaWYgKHIwIFx1MDAzZSBCUEZfTUFYX0xPT1BTKSBnb3RvIGUyYmlnOyAqL1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfSU1NKEJQRl9KU0dULCBCUEZfUkVHXzAsIEJQRl9NQVhfTE9PUFMsIDgpO1xuJiM0MztcdC8qIHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxOyAqL1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18yLCAtMSk7XG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18yLCAwKTtcbiYjNDM7XHQvKiBzLVx1MDAzZWVuZCA9IGVuZDsgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzMsIDQpO1xuJiM0MztcdC8qIHJldHVybiAwOyAqL1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoNSk7XG4mIzQzO1x0LyogZWludmFsOiBzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovXG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSgyKTtcbiYjNDM7XHQvKiBlMmJpZzogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FMkJJRyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX25leHQoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aCB0aGVcbiYjNDM7ICoga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiYjNDM7e1xuJiM0MztcdGludCBpID0gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBzLVx1MDAzZWN1ciBhbmQgcy1cdTAwM2VlbmQgYXJlIGludCwgc28gdGhlIChzNjQpKHMtXHUwMDNlY3VyICYjNDM7IDEpIFx1MDAzZT0gcy1cdTAwM2VlbmQgY2hlY2sgaXMgZXF1aXZhbGVudCB0byBhXG4mIzQzO1x0ICogc2lnbmVkIDMyLWJpdCBjb21wYXJpc29uIG9mIChzLVx1MDAzZWN1ciAmIzQzOyAxKSBhZ2FpbnN0IHMtXHUwMDNlZW5kIGFuZCBuZWVkcyBubyBzaWduIGV4dGVuc2lvbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApO1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18wLCAxKTtcbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18yLCBCUEZfUkVHXzEsIDQpO1xuJiM0MztcdC8qIGlmICgoczMyKShzLVx1MDAzZWN1ciAmIzQzOyAxKSBcdTAwM2U9IChzMzIpcy1cdTAwM2VlbmQpIGdvdG8gZG9uZTsgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dFLCBCUEZfUkVHXzAsIEJQRl9SRUdfMiwgMyk7XG4mIzQzO1x0Lyogcy1cdTAwM2VjdXImIzQzOyYjNDM7OyByZXR1cm4gXHUwMDI2cy1cdTAwM2VjdXI7ICovXG4mIzQzO1x0aW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18wLCAwKTtcbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoMik7XG4mIzQzO1x0LyogZG9uZTogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuJiM0MztcdGluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIElubGluZSBicGZfaXRlcl9udW1fZGVzdHJveSgpLiBSMSBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgaXRlcmF0b3IuIEtlZXAgaW4gc3luYyB3aXRoXG4mIzQzOyAqIHRoZSBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGkgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDsgKi9cbiYjNDM7XHRpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBpbnQgaW5zbl9pZHgsIGludCAqY250KVxuIHtcbkBAIC0xOTg5OSw2ICYjNDM7MjAwNDksMTMgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiBcdFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdCpjbnQgPSA2O1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xuJiM0MztcdFx0KmNudCA9IGlubGluZV9icGZfaXRlcl9udW1fbmV3KGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5pdGVyX251bV9uZXdfc3RhdGUpO1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHtcbiYjNDM7XHRcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoaW5zbl9idWYpO1xuJiM0MztcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcbiYjNDM7XHRcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koaW5zbl9idWYpO1xuIFx0fVxuIFxuIFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5hcmdfcHJvZykge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggNTVkMzk0NDM4NzA1YTYuLjMxNzRjMmYxOGU3MTUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbkBAIC05NjUsNiAmIzQzOzk2NSw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXFxcbiBcdFx0XHQgICAgJChPVVRQVVQpL3BlcmZidWZfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubzogJChPVVRQVVQpL2Jsb29tX2ZpbHRlcl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2xvb3AubzogJChPVVRQVVQpL2JwZl9sb29wX2JlbmNoLnNrZWwuaFxuJiM0MzskKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vOiAkKE9VVFBVVCkvYnBmX2Zvcl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubzogJChPVVRQVVQpL2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX2JlbmNoLnNrZWwuaFxuQEAgLTk5MCw2ICYjNDM7OTkxLDcgQEAgJChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vIFxcXG4mIzQzO1x0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9mb3IubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm8gXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5pbmRleCAzZDlkMmNkNzc2NGJkMy4uYjg2YjczNDU2ZDNjYTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbkBAIC0yNzYsNiAmIzQzOzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9ibG9vbV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zdHJuY21wX2FyZ3A7XG5AQCAtMjkyLDYgJiM0MzsyOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xuIFx0eyBcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcJiMzNDtSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2Jsb29tX21hcF9hcmdwLCAwLCBcJiMzNDtCbG9vbSBmaWx0ZXIgbWFwIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCBcJiMzNDticGZfbG9vcCBoZWxwZXIgYmVuY2htYXJrXCYjMzQ7LCAwIH0sXG4mIzQzO1x0eyBcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsIDAsIFwmIzM0O2JwZl9mb3IgbG9vcCBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCBcJiMzNDtsb2NhbF9zdG9yYWdlIGJlbmNobWFya1wmIzM0OywgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9zdHJuY21wX2FyZ3AsIDAsIFwmIzM0O2JwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmtcJiMzNDssIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncCwgMCxcbkBAIC01NTcsNiAmIzQzOzU1OSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYmxvb21fZmFsc2VfcG9zaXRpdmU7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb207XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhfYmxvb207XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfbG9vcDtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9ub19oZWxwZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX2hlbHBlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlO1xuQEAgLTY0MCw2ICYjNDM7NjQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9icGZfbG9vcCxcbiYjNDM7XHRcdTAwMjZiZW5jaF9icGZfZm9yLFxuIFx0XHUwMDI2YmVuY2hfc3RybmNtcF9ub19oZWxwZXIsXG4gXHRcdTAwMjZiZW5jaF9zdHJuY21wX2hlbHBlcixcbiBcdFx1MDAyNmJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzMwYzUxYWQyZGVjMzRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXG5AQCAtMCwwICYjNDM7MSwxMDQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JlbmNoLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YnBmX2Zvcl9iZW5jaC5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIEJQRiB0cmlnZ2VyaW5nIGJlbmNobWFya3MgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBjdHgge1xuJiM0MztcdHN0cnVjdCBicGZfZm9yX2JlbmNoICpza2VsO1xuJiM0Mzt9IGN0eDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qge1xuJiM0MztcdF9fdTMyIG5yX2xvb3BzO1xuJiM0Mzt9IGFyZ3MgPSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEZWZhdWx0IHRvIGEgbGFyZ2UgbG9vcCBjb3VudCBzbyB0aGUgcGVyLWl0ZXJhdGlvbiBicGZfaXRlcl9udW1fbmV4dCgpIGNvc3QgZG9taW5hdGVzXG4mIzQzO1x0ICogdGhlIG9uZS10aW1lIGJwZl9pdGVyX251bV9uZXcoKS9kZXN0cm95KCkgc2V0dXAgYW5kIHRlYXJkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdC5ucl9sb29wcyA9IDEwMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHtcbiYjNDM7XHRBUkdfTlJfTE9PUFMgPSA0MDAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4mIzQzO1x0eyBcJiMzNDtucl9sb29wc1wmIzM0OywgQVJHX05SX0xPT1BTLCBcJiMzNDtucl9sb29wc1wmIzM0OywgMCxcbiYjNDM7XHRcdFwmIzM0O1NldCBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgdGhlIGJwZl9mb3IoKSBsb29wXCYjMzQ7fSxcbiYjNDM7XHR7fSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoa2V5KSB7XG4mIzQzO1x0Y2FzZSBBUkdfTlJfTE9PUFM6XG4mIzQzO1x0XHRhcmdzLm5yX2xvb3BzID0gc3RydG9sKGFyZywgTlVMTCwgMTApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGV4cG9ydGVkIGludG8gYmVuY2htYXJrIHJ1bm5lciAqL1xuJiM0Mztjb25zdCBzdHJ1Y3QgYXJncCBiZW5jaF9icGZfZm9yX2FyZ3AgPSB7XG4mIzQzO1x0Lm9wdGlvbnMgPSBvcHRzLFxuJiM0MztcdC5wYXJzZXIgPSBwYXJzZV9hcmcsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2YWxpZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKHRydWUpXG4mIzQzO1x0XHQvKiB0cmlnZ2VyIHRoZSBicGYgcHJvZ3JhbSAqL1xuJiM0MztcdFx0c3lzY2FsbChfX05SX2dldHBnaWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXMtXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFx1MDAyNmN0eC5za2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0dXAodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluaztcbiYjNDM7XG4mIzQzO1x0c2V0dXBfbGliYnBmKCk7XG4mIzQzO1xuJiM0MztcdGN0eC5za2VsID0gYnBmX2Zvcl9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghY3R4LnNrZWwpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gb3BlbiBza2VsZXRvblxcblwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KDEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goY3R4LnNrZWwtXHUwMDNlcHJvZ3MuYmVuY2htYXJrKTtcbiYjNDM7XHRpZiAoIWxpbmspIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtmYWlsZWQgdG8gYXR0YWNoIHByb2dyYW0hXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoMSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlbnJfbG9vcHMgPSBhcmdzLm5yX2xvb3BzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvciA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2JwZi1mb3JcJiMzNDssXG4mIzQzO1x0LmFyZ3AgPSBcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsXG4mIzQzO1x0LnZhbGlkYXRlID0gdmFsaWRhdGUsXG4mIzQzO1x0LnNldHVwID0gc2V0dXAsXG4mIzQzO1x0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxuJiM0MztcdC5tZWFzdXJlID0gbWVhc3VyZSxcbiYjNDM7XHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcbiYjNDM7XHQucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaFxuQEAgLTAsMCAmIzQzOzEsMTUgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7c291cmNlIC4vYmVuY2hzL3J1bl9jb21tb24uc2hcbiYjNDM7XG4mIzQzO3NldCAtZXVmbyBwaXBlZmFpbFxuJiM0MztcbiYjNDM7Zm9yIHQgaW4gMSA0IDggMTIgMTY7IGRvXG4mIzQzO2ZvciBpIGluIDEwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwIDUwMDAwIDEwMDAwMCA1MDAwMDAgMTAwMDAwMDsgZG9cbiYjNDM7c3VidGl0bGUgXCYjMzQ7bnJfbG9vcHM6ICRpLCBucl90aHJlYWRzOiAkdFwmIzM0O1xuJiM0MztcdHN1bW1hcml6ZV9vcHMgXCYjMzQ7YnBmX2ZvcjogXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIFwmIzM0OyQoJFJVTl9CRU5DSCAtcCAkdCAtLW5yX2xvb3BzICRpIGJwZi1mb3IpXCYjMzQ7XG4mIzQzO1x0cHJpbnRmIFwmIzM0O1xcblwmIzM0O1xuJiM0Mztkb25lXG4mIzQzO2RvbmVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNzUyZGU1YzQ0ZjU3YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xuQEAgLTAsMCAmIzQzOzEsMzIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0Mzt1MzIgbnJfbG9vcHM7XG4mIzQzO2xvbmcgaGl0cztcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3V0ZXJfbG9vcChfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVtcHR5IGJvZHk6IHRoZSB3b3JrIGJlaW5nIG1lYXN1cmVkIGlzIHRoZSBvcGVuLWNvZGVkIG51bWVyaWMgaXRlcmF0b3IgaXRzZWxmXG4mIzQzO1x0ICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLlxuJiM0MztcdCAqL1xuJiM0MztcdGJwZl9mb3IoaSwgMCwgbnJfbG9vcHMpXG4mIzQzO1x0XHQ7XG4mIzQzO1x0X19zeW5jX2FkZF9hbmRfZmV0Y2goXHUwMDI2aGl0cywgbnJfbG9vcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L1wmIzM0OyBTWVNfUFJFRklYIFwmIzM0O3N5c19nZXRwZ2lkXCYjMzQ7KVxuJiM0MztpbnQgYmVuY2htYXJrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuaW5kZXggMGZhNzBiMTMzZDkzMjIuLmM0ZGY1ODllY2Q3YWU0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXG5AQCAtODgsNiAmIzQzOzg4LDE1MSBAQCBpbnQgaXRlcl9lcnJfdW5zYWZlX2FzbV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogTmFrZWQgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBjb21waWxlci1nZW5lcmF0ZWQgZ2x1ZSBhbmQgdGhlIHdob2xlIGlubGluZWQgcHJvZ3JhbSBjYW4gYmVcbiYjNDM7ICogbWF0Y2hlZC4gUGlubmVkIHRvIGFyY2hlcyB3aG9zZSBKSVRzIHplcm8tZXh0ZW5kIDMyLWJpdCB3cml0ZXMgaW1wbGljaXRseVxuJiM0MzsgKiAoYnBmX2ppdF9uZWVkc196ZXh0KCkgPT0gZmFsc2UpOyBvbiBhcmNoZXMgdGhhdCBuZWVkIGV4cGxpY2l0IHplcm8tZXh0ZW5zaW9uIHRoZSB2ZXJpZmllclxuJiM0MzsgKiBpbnRlcmxlYXZlcyBcJiMzNDt3TiA9IHdOXCYjMzQ7IGluc25zIGFuZCB0aGUgZml4ZWQgc2hhcGUgYmVsb3cgd291bGQgbm90IG1hdGNoLiBUaGUgaW5saW5pbmcgaXRzZWxmIGlzXG4mIzQzOyAqIGFyY2ggaW5kZXBlbmRlbnQsIHNvIGNoZWNraW5nIGl0IG9uIHRoZXNlIGFyY2hlcyBpcyBzdWZmaWNpZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBXaXRoIGNvbnN0YW50IGJvdW5kcyBicGZfaXRlcl9udW1fbmV3KCkgaXMgaW5saW5lZCB3aXRoIHRoZSByYW5nZSBjaGVja3MgZm9sZGVkIGF3YXksIGp1c3RcbiYjNDM7ICogc3RvcmluZyB0aGUgaW5pdGlhbCBzdGF0ZSAocy1cdTAwM2VjdXIgPSBzdGFydCAtIDEsIHMtXHUwMDNlZW5kID0gZW5kKTsgYnBmX2l0ZXJfbnVtX25leHQoKSBhbmRcbiYjNDM7ICogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28sIGxlYXZpbmcgYSBjYWxsLWZyZWUgbG9vcC5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX3hsYXRlZChcJiMzNDtyNiA9IHIxMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjYgJiM0Mzs9IC04XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMSA9IHI2XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMiA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IzID0gMTBcJiMzNDspXG4mIzQzOy8qIGJwZl9pdGVyX251bV9uZXcoXHUwMDI2aXQsIDAsIDEwKSBmb2xkZWQgdG8gdGhlIHN0YXRlIGluaXQgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IC0xXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHUzMiAqKShyMSAmIzQzOzQpID0gMTBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpICovXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gKih1MzIgKikocjEgJiM0MzswKVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzAgJiM0Mzs9IDFcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IyID0gKih1MzIgKikocjEgJiM0Mzs0KVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7aWYgdzAgc1x1MDAzZT0gdzIgZ290byBwYyYjNDM7M1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IHIxXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtnb3RvIHBjJiM0MzsyXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtpZiByMCAhPSAweDAgZ290byBwYy0xMVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjEgPSByNlwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXHUwMDI2aXQpICovXG4mIzQzO19feGxhdGVkKFwmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2V4aXRcJiMzNDspXG4mIzQzO2ludCBfX25ha2VkIGl0ZXJfbnVtX25ld19jb25zdF9mb2xkZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cbiYjNDM7XHRcdFwmIzM0O3I2ID0gcjEwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjYgJiM0Mzs9IC04O1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjEgPSByNjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IyID0gMDtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IzID0gMTA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7MTpcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7aWYgcjAgIT0gMCBnb3RvIDFiO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjEgPSByNjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2NhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdFx0OlxuJiM0MztcdFx0OiBfX2ltbShicGZfaXRlcl9udW1fbmV3KSxcbiYjNDM7XHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25leHQpLFxuJiM0MztcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fZGVzdHJveSlcbiYjNDM7XHRcdDogX19jbG9iYmVyX2NvbW1vbiwgXCYjMzQ7cjZcJiMzNDtcbiYjNDM7XHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTYW1lIGFyY2ggcGlubmluZyBhbmQgbmFrZWQtZnVuY3Rpb24gcmF0aW9uYWxlIGFzIGFib3ZlLiBXaXRoIGEgbm9uLWNvbnN0YW50IGJvdW5kXG4mIzQzOyAqIGJwZl9pdGVyX251bV9uZXcoKSBrZWVwcyB0aGUgZnVsbCByYW5nZSBjaGVjazogdGhlIGRpc3RhbmNlIGlzIGNvbXB1dGVkIGFuZCBib3RoIHRoZSAtRUlOVkFMXG4mIzQzOyAqIGFuZCAtRTJCSUcgZXJyb3IgcGF0aHMgcmVtYWluLiBicGZfaXRlcl9udW1fbmV4dCgpIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSgpIGFyZSBpbmxpbmVkIHRvby5cbiYjNDM7ICovXG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX3hsYXRlZChcJiMzNDtyNiA9IHIxMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjYgJiM0Mzs9IC04XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtjYWxsIHVua25vd25cJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IzID0gcjBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IzIFx1MDAyNj0gNjU1MzVcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IxID0gcjZcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IyID0gMFwmIzM0OylcbiYjNDM7LyogYnBmX2l0ZXJfbnVtX25ldyhcdTAwMjZpdCwgMCwgXHUwMDNjbm9uLWNvbnN0XHUwMDNlKSB3aXRoIHRoZSByYW5nZSBjaGVjayBrZXB0ICovXG4mIzQzO19feGxhdGVkKFwmIzM0O2lmIHcyIHNcdTAwM2UgdzMgZ290byBwYyYjNDM7OFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzAgPSB3M1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzAgLT0gdzJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2lmIHIwIHNcdTAwM2UgMHg4MDAwMDAgZ290byBwYyYjNDM7OFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7dzIgJiM0Mzs9IC0xXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHUzMiAqKShyMSAmIzQzOzApID0gcjJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OyoodTMyICopKHIxICYjNDM7NCkgPSByM1wmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtnb3RvIHBjJiM0Mzs1XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAtMjJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2dvdG8gcGMmIzQzOzJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IC03XCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMSA9IHI2XCYjMzQ7KVxuJiM0MzsvKiBicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCkgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjAgPSAqKHUzMiAqKShyMSAmIzQzOzApXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDt3MCAmIzQzOz0gMVwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7cjIgPSAqKHUzMiAqKShyMSAmIzQzOzQpXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtpZiB3MCBzXHUwMDNlPSB3MiBnb3RvIHBjJiM0MzszXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDsqKHUzMiAqKShyMSAmIzQzOzApID0gcjBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gcjFcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2dvdG8gcGMmIzQzOzJcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMCA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O2lmIHIwICE9IDB4MCBnb3RvIHBjLTExXCYjMzQ7KVxuJiM0MztfX3hsYXRlZChcJiMzNDtyMSA9IHI2XCYjMzQ7KVxuJiM0MzsvKiBicGZfaXRlcl9udW1fZGVzdHJveShcdTAwMjZpdCkgKi9cbiYjNDM7X194bGF0ZWQoXCYjMzQ7Kih1NjQgKikocjEgJiM0MzswKSA9IDBcJiMzNDspXG4mIzQzO19feGxhdGVkKFwmIzM0O3IwID0gMFwmIzM0OylcbiYjNDM7X194bGF0ZWQoXCYjMzQ7ZXhpdFwmIzM0OylcbiYjNDM7aW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cbiYjNDM7XHRcdFwmIzM0O3I2ID0gcjEwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjYgJiM0Mzs9IC04O1wmIzM0O1xuJiM0MztcdFx0Lyogbm9uLWNvbnN0YW50IGVuZCBzbyB0aGUgcmFuZ2UgY2hlY2tzIGFyZSBrZXB0ICovXG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMyA9IHIwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjMgXHUwMDI2PSAweGZmZmY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMSA9IHI2O1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjIgPSAwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1wmIzM0O1xuJiM0MztcdFwmIzM0OzE6XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtyMSA9IHI2O1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXh0XTtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O2lmIHIwICE9IDAgZ290byAxYjtcJiMzNDtcbiYjNDM7XHRcdFwmIzM0O3IxID0gcjY7XCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFx0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHRcdDpcbiYjNDM7XHRcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXG4mIzQzO1x0XHQgIF9faW1tKGJwZl9pdGVyX251bV9uZXcpLFxuJiM0MztcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksXG4mIzQzO1x0XHQgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KVxuJiM0MztcdFx0OiBfX2Nsb2JiZXJfY29tbW9uLCBcJiMzNDtyNlwmIzM0O1xuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgaXRlcl93aGlsZV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZml4dXBfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUmIzM0OywKICAgICYjMzQ7aW5saW5lX2JwZl9pdGVyX251bV9uZXcmIzM0OywKICAgICYjMzQ7aW5saW5lX2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGlubGluZSBicGZfaXRlcl9udW1fbmV3LCBicGZfaXRlcl9udW1fbmV4dCwgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95IGtmdW5jcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBvcHRpbWl6ZXMgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBrZnVuY3MgYW5kIGNhbiBiZSByZWFjaGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NmY3ODE1Y2ViMjVjMzc0ZjYwZjA3MzhlZGU4MjhmMDhhOTQyNTAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMTQ6MTU6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAppbmRleCA2ODJjMmNkM2I4NDQzMC4uOGMwNGUyZmQ4MDE3MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaApAQCAtNjEyLDYgJiM0Mzs2MTIsMTUgQEAgc3RydWN0IGJwZl9sb29wX2lubGluZV9zdGF0ZSB7CiAJdTMyIGNhbGxiYWNrX3N1YnByb2dubzsgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovCiB9OwogCiYjNDM7c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgewomIzQzOwl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ6MTsgLyogc2V0IHRvIHRydWUgdXBvbiBmaXJzdCBlbnRyeSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgZml0X2Zvcl9pbmxpbmU6MTsgLyogdHJ1ZSBpZiBzdGFydCBhbmQgZW5kIGFyZSBjb25zdGFudAomIzQzOwkJCQkJKiB3aXRoIHRoZSBzYW1lIHZhbHVlIGF0IGVhY2ggY2FsbAomIzQzOwkJCQkJKi8KJiM0MzsJczMyIHN0YXJ0OyAvKiB2YWxpZCB3aGVuIGZpdF9mb3JfaW5saW5lIGlzIHRydWUgKi8KJiM0MzsJczMyIGVuZDsgICAvKiB2YWxpZCB3aGVuIGZpdF9mb3JfaW5saW5lIGlzIHRydWUgKi8KJiM0Mzt9OwomIzQzOwogLyogcG9pbnRlciBhbmQgc3RhdGUgZm9yIG1hcHMgKi8KIHN0cnVjdCBicGZfbWFwX3B0cl9zdGF0ZSB7CiAJc3RydWN0IGJwZl9tYXAgKm1hcF9wdHI7CkBAIC02NjEsNiAmIzQzOzY3MCwxMCBAQCBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgewogCQkgKiB0aGUgc3RhdGUgb2YgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyB0byBtYWtlIGRlY2lzaW9uIGFib3V0IGlubGluaW5nCiAJCSAqLwogCQlzdHJ1Y3QgYnBmX2xvb3BfaW5saW5lX3N0YXRlIGxvb3BfaW5saW5lX3N0YXRlOwomIzQzOwkJLyogaWYgaW5zdHJ1Y3Rpb24gaXMgYSBjYWxsIHRvIGJwZl9pdGVyX251bV9uZXcgdGhpcyBmaWVsZCB0cmFja3MgaXRzIHN0YXJ0L2VuZAomIzQzOwkJICogYXJndW1lbnRzIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCBlbGlkaW5nIHRoZSByYW5nZSBjaGVja3Mgd2hlbiBpbmxpbmluZwomIzQzOwkJICovCiYjNDM7CQlzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSBpdGVyX251bV9uZXdfc3RhdGU7CiAJfTsKIAl1bmlvbiB7CiAJCS8qIHJlbWVtYmVyIHRoZSBzaXplIG9mIHR5cGUgcGFzc2VkIHRvIGJwZl9vYmpfbmV3IHRvIHJld3JpdGUgUjEgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCA1MmJlMGExMThjY2UwNy4uZDViNzNhZTgwMTk0NDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTEyOTYyLDYgJiM0MzsxMjk2Miw0NyBAQCBzdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZwogCiBzdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpOwogCiYjNDM7LyoKJiM0MzsgKiBicGZfaXRlcl9udW1fbmV3KCkgY2FuIGJlIGlubGluZWQgbW9yZSB0aWdodGx5IHdoZW4gaXRzIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzIGFyZSBjb25zdGFudCwKJiM0MzsgKiBhcyB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBjYW4gdGhlbiBiZSByZXNvbHZlZCBhdCByZXdyaXRlIHRpbWUuIFJlY29yZCwgcGVyCiYjNDM7ICogY2FsbCBzaXRlLCB3aGV0aGVyIGJvdGggYXJndW1lbnRzIGFyZSBjb25zdGFudCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9uIGV2ZXJ5IHZpc2l0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgKnN0YXRlID0gJmFtcDtjdXJfYXV4KGVudiktJmd0O2l0ZXJfbnVtX25ld19zdGF0ZTsKJiM0MzsJc3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0YXJ0X3JlZyA9ICZhbXA7Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzJdOwomIzQzOwlzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZW5kX3JlZyA9ICZhbXA7Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzNdOwomIzQzOwlib29sIGtub3duID0gdG51bV9pc19jb25zdChzdGFydF9yZWctJmd0O3Zhcl9vZmYpICZhbXA7JmFtcDsgdG51bV9pc19jb25zdChlbmRfcmVnLSZndDt2YXJfb2ZmKTsKJiM0MzsJczMyIHN0YXJ0ID0gc3RhcnRfcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwomIzQzOwlzMzIgZW5kID0gZW5kX3JlZy0mZ3Q7dmFyX29mZi52YWx1ZTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFzdGF0ZS0mZ3Q7aW5pdGlhbGl6ZWQpIHsKJiM0MzsJCXN0YXRlLSZndDtpbml0aWFsaXplZCA9IDE7CiYjNDM7CQlzdGF0ZS0mZ3Q7Zml0X2Zvcl9pbmxpbmUgPSBrbm93bjsKJiM0MzsJCXN0YXRlLSZndDtzdGFydCA9IHN0YXJ0OwomIzQzOwkJc3RhdGUtJmd0O2VuZCA9IGVuZDsKJiM0MzsJfSBlbHNlIGlmIChzdGF0ZS0mZ3Q7Zml0X2Zvcl9pbmxpbmUpIHsKJiM0MzsJCXN0YXRlLSZndDtmaXRfZm9yX2lubGluZSA9IGtub3duICZhbXA7JmFtcDsgc3RhdGUtJmd0O3N0YXJ0ID09IHN0YXJ0ICZhbXA7JmFtcDsgc3RhdGUtJmd0O2VuZCA9PSBlbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2hpbGUgZm9sZGluZyBpcyBzdGlsbCB2aWFibGUgdGhlIGRlY2lzaW9uIHJlbGllcyBvbiB0aGUgZXhhY3QgY29uc3RhbnQgdmFsdWVzLCBzbyBtYXJrCiYjNDM7CSAqIHRoZSByZWdpc3RlcnMgcHJlY2lzZTsgb3RoZXJ3aXNlIHRoZSB2ZXJpZmllciBjb3VsZCBwcnVuZSBhIHBhdGggdGhhdCByZWFjaGVzIHRoaXMgY2FsbAomIzQzOwkgKiB3aXRoIGRpZmZlcmVudCBjb25zdGFudHMgYW5kIHRoZSBmb2xkZWQgY29kZSB3b3VsZCBydW4gd2l0aCBhIHN0YWxlIHZhbHVlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YXRlLSZndDtmaXRfZm9yX2lubGluZSkgewomIzQzOwkJZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBCUEZfUkVHXzIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBCUEZfUkVHXzMpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCQkgICAgaW50ICppbnNuX2lkeF9wKQogewpAQCAtMTMxNjMsNiAmIzQzOzEzMjA0LDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCX0KIAl9CiAKJiM0MzsJaWYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25ld10pIHsKJiM0MzsJCWVyciA9IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoZW52KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCWZvciAoaSA9IDA7IGkgJmx0OyBDQUxMRVJfU0FWRURfUkVHUzsgaSYjNDM7JiM0MzspIHsKIAkJdTMyIHJlZ25vID0gY2FsbGVyX3NhdmVkW2ldOwogCkBAIC0xOTc3MCw2ICYjNDM7MTk4MTcsMTA5IEBAIHN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCwKIAkqY250ID0gNDsKIH0KIAomIzQzOy8qCiYjNDM7ICogSW5saW5lIGJwZl9pdGVyX251bV9uZXcoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLCBSMiBhbmQgUjMgaG9sZCB0aGUgKGludCkKJiM0MzsgKiBzdGFydCBhbmQgZW5kIGFyZ3VtZW50cy4gS2VlcCBpbiBzeW5jIHdpdGggdGhlIGtmdW5jIGluIGtlcm5lbC9icGYvYnBmX2l0ZXIuYy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGlubGluZV9icGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYsIHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBzdGFydCBhbmQgZW5kIGFyZSBjb25zdGFudCB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBmb2xkIGF3YXksCiYjNDM7CSAqIGxlYXZpbmcganVzdCB0aGUgc3RhdGUgaW5pdCBvciB0aGUgZXJyb3IgcmVzdWx0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHN0YXRlLSZndDtmaXRfZm9yX2lubGluZSkgewomIzQzOwkJczMyIHN0YXJ0ID0gc3RhdGUtJmd0O3N0YXJ0LCBlbmQgPSBzdGF0ZS0mZ3Q7ZW5kOwomIzQzOwomIzQzOwkJaWYgKHN0YXJ0ICZndDsgZW5kKSB7CiYjNDM7CQkJLyogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovCiYjNDM7CQkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7CiYjNDM7CQkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpOwomIzQzOwkJfSBlbHNlIGlmICgoczY0KWVuZCAtIChzNjQpc3RhcnQgJmd0OyBCUEZfTUFYX0xPT1BTKSB7CiYjNDM7CQkJLyogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIC1FMkJJRzsgKi8KJiM0MzsJCQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTsKJiM0MzsJCQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogcy0mZ3Q7Y3VyID0gc3RhcnQgLSAxOyBzLSZndDtlbmQgPSBlbmQ7IHJldHVybiAwOyAqLwomIzQzOwkJCWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgMCwgc3RhcnQgLSAxKTsKJiM0MzsJCQlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIDQsIGVuZCk7CiYjNDM7CQkJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIGk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogaWYgKHN0YXJ0ICZndDsgZW5kKSBnb3RvIGVpbnZhbDsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHVCwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIDgpOwomIzQzOwkvKgomIzQzOwkgKiBzdGFydCAmbHQ7PSBlbmQgaGVyZSwgc28gdGhlIHJhbmdlIGVuZCAtIHN0YXJ0IGZpdHMgaW4gYSB1MzI7IGNvbXB1dGUgaXQgYXMgYSAzMi1iaXQKJiM0MzsJICogc3VidHJhY3Rpb24gdGhhdCB6ZXJvLWV4dGVuZHMgaW50byByMC4KJiM0MzsJICovCiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1YzMl9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzMpOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfQUxVMzJfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18yKTsKJiM0MzsJLyogaWYgKHIwICZndDsgQlBGX01BWF9MT09QUykgZ290byBlMmJpZzsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUF9JTU0oQlBGX0pTR1QsIEJQRl9SRUdfMCwgQlBGX01BWF9MT09QUywgOCk7CiYjNDM7CS8qIHMtJmd0O2N1ciA9IHN0YXJ0IC0gMTsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0FMVTMyX0lNTShCUEZfQURELCBCUEZfUkVHXzIsIC0xKTsKJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUWF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgQlBGX1JFR18yLCAwKTsKJiM0MzsJLyogcy0mZ3Q7ZW5kID0gZW5kOyAqLwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzMsIDQpOwomIzQzOwkvKiByZXR1cm4gMDsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoNSk7CiYjNDM7CS8qIGVpbnZhbDogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovCiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVJTlZBTCk7CiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9KTVBfQSgyKTsKJiM0MzsJLyogZTJiaWc6IHMtJmd0O2N1ciA9IHMtJmd0O2VuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovCiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogSW5saW5lIGJwZl9pdGVyX251bV9uZXh0KCkuIFIxIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBpdGVyYXRvci4gS2VlcCBpbiBzeW5jIHdpdGggdGhlCiYjNDM7ICoga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgaW5saW5lX2JwZl9pdGVyX251bV9uZXh0KHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiYjNDM7ewomIzQzOwlpbnQgaSA9IDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHMtJmd0O2N1ciBhbmQgcy0mZ3Q7ZW5kIGFyZSBpbnQsIHNvIHRoZSAoczY0KShzLSZndDtjdXIgJiM0MzsgMSkgJmd0Oz0gcy0mZ3Q7ZW5kIGNoZWNrIGlzIGVxdWl2YWxlbnQgdG8gYQomIzQzOwkgKiBzaWduZWQgMzItYml0IGNvbXBhcmlzb24gb2YgKHMtJmd0O2N1ciAmIzQzOyAxKSBhZ2FpbnN0IHMtJmd0O2VuZCBhbmQgbmVlZHMgbm8gc2lnbiBleHRlbnNpb24uCiYjNDM7CSAqLwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMCwgMSk7CiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzIsIEJQRl9SRUdfMSwgNCk7CiYjNDM7CS8qIGlmICgoczMyKShzLSZndDtjdXIgJiM0MzsgMSkgJmd0Oz0gKHMzMilzLSZndDtlbmQpIGdvdG8gZG9uZTsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHRSwgQlBGX1JFR18wLCBCUEZfUkVHXzIsIDMpOwomIzQzOwkvKiBzLSZndDtjdXImIzQzOyYjNDM7OyByZXR1cm4gJmFtcDtzLSZndDtjdXI7ICovCiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7CiYjNDM7CWluc25fYnVmW2kmIzQzOyYjNDM7XSA9IEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzEpOwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfSk1QX0EoMik7CiYjNDM7CS8qIGRvbmU6IHMtJmd0O2N1ciA9IHMtJmd0O2VuZCA9IDA7IHJldHVybiBOVUxMOyAqLwomIzQzOwlpbnNuX2J1ZltpJiM0MzsmIzQzO10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTsKJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApOwomIzQzOwomIzQzOwlyZXR1cm4gaTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aAomIzQzOyAqIHRoZSBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKJiM0Mzt7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJLyogcy0mZ3Q7Y3VyID0gcy0mZ3Q7ZW5kID0gMDsgKi8KJiM0MzsJaW5zbl9idWZbaSYjNDM7JiM0MztdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiBpOwomIzQzO30KJiM0MzsKIGludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCSAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZiwgaW50IGluc25faWR4LCBpbnQgKmNudCkKIHsKQEAgLTE5ODk5LDYgJiM0MzsyMDA0OSwxMyBAQCBpbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCQlpbnNuX2J1Zls0XSA9IEJQRl9BTFU2NF9SRUcoQlBGX1NVQiwgQlBGX1JFR18wLCBCUEZfUkVHXzEpOwogCQlpbnNuX2J1Zls1XSA9IEJQRl9BTFU2NF9JTU0oQlBGX05FRywgQlBGX1JFR18wLCAwKTsKIAkJKmNudCA9IDY7CiYjNDM7CX0gZWxzZSBpZiAoZGVzYy0mZ3Q7ZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25ld10pIHsKJiM0MzsJCSpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhpbnNuX2J1ZiwKJiM0MzsJCQkJCSAgICAgICAmYW1wO2Vudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uaXRlcl9udW1fbmV3X3N0YXRlKTsKJiM0MzsJfSBlbHNlIGlmIChkZXNjLSZndDtmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0pIHsKJiM0MzsJCSpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoaW5zbl9idWYpOwomIzQzOwl9IGVsc2UgaWYgKGRlc2MtJmd0O2Z1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9kZXN0cm95XSkgewomIzQzOwkJKmNudCA9IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShpbnNuX2J1Zik7CiAJfQogCiAJaWYgKGVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0uYXJnX3Byb2cpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQppbmRleCA1NWQzOTQ0Mzg3MDVhNi4uMzE3NGMyZjE4ZTcxNTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKQEAgLTk2NSw2ICYjNDM7OTY1LDcgQEAgJChPVVRQVVQpL2JlbmNoX3JpbmdidWZzLm86ICQoT1VUUFVUKS9yaW5nYnVmX2JlbmNoLnNrZWwuaCBcCiAJCQkgICAgJChPVVRQVVQpL3BlcmZidWZfYmVuY2guc2tlbC5oCiAkKE9VVFBVVCkvYmVuY2hfYmxvb21fZmlsdGVyX21hcC5vOiAkKE9VVFBVVCkvYmxvb21fZmlsdGVyX2JlbmNoLnNrZWwuaAogJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm86ICQoT1VUUFVUKS9icGZfbG9vcF9iZW5jaC5za2VsLmgKJiM0MzskKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vOiAkKE9VVFBVVCkvYnBmX2Zvcl9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm86ICQoT1VUUFVUKS9zdHJuY21wX2JlbmNoLnNrZWwuaAogJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmgKICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX2JlbmNoLnNrZWwuaApAQCAtOTkwLDYgJiM0Mzs5OTEsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vIFwKIAkJICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXAomIzQzOwkJICQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm8gXAogCQkgJChPVVRQVVQpL2JlbmNoX3N0cm5jbXAubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubyBcCiAJCSAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMKaW5kZXggM2Q5ZDJjZDc3NjRiZDMuLmI4NmI3MzQ1NmQzY2E4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYwpAQCAtMjc2LDYgJiM0MzsyNzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2Jsb29tX21hcF9hcmdwOwogZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9sb29wX2FyZ3A7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX2FyZ3A7CiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncDsKIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zdHJuY21wX2FyZ3A7CkBAIC0yOTIsNiAmIzQzOzI5Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCBiZW5jaF9wYXJzZXJzW10gPSB7CiAJeyAmYW1wO2JlbmNoX3JpbmdidWZzX2FyZ3AsIDAsICYjMzQ7UmluZyBidWZmZXJzIGJlbmNobWFyayYjMzQ7LCAwIH0sCiAJeyAmYW1wO2JlbmNoX2Jsb29tX21hcF9hcmdwLCAwLCAmIzM0O0Jsb29tIGZpbHRlciBtYXAgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfYnBmX2xvb3BfYXJncCwgMCwgJiMzNDticGZfbG9vcCBoZWxwZXIgYmVuY2htYXJrJiMzNDssIDAgfSwKJiM0MzsJeyAmYW1wO2JlbmNoX2JwZl9mb3JfYXJncCwgMCwgJiMzNDticGZfZm9yIGxvb3AgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfbG9jYWxfc3RvcmFnZV9hcmdwLCAwLCAmIzM0O2xvY2FsX3N0b3JhZ2UgYmVuY2htYXJrJiMzNDssIDAgfSwKIAl7ICZhbXA7YmVuY2hfc3RybmNtcF9hcmdwLCAwLCAmIzM0O2JwZl9zdHJuY21wIGhlbHBlciBiZW5jaG1hcmsmIzM0OywgMCB9LAogCXsgJmFtcDtiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwLCAwLApAQCAtNTU3LDYgJiM0Mzs1NTksNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2Jsb29tX2ZhbHNlX3Bvc2l0aXZlOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb207CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aF9ibG9vbTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2xvb3A7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9zdHJuY21wX25vX2hlbHBlcjsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9oZWxwZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlOwpAQCAtNjQwLDYgJiM0Mzs2NDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHsKIAkmYW1wO2JlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbSwKIAkmYW1wO2JlbmNoX2hhc2htYXBfd2l0aF9ibG9vbSwKIAkmYW1wO2JlbmNoX2JwZl9sb29wLAomIzQzOwkmYW1wO2JlbmNoX2JwZl9mb3IsCiAJJmFtcDtiZW5jaF9zdHJuY21wX25vX2hlbHBlciwKIAkmYW1wO2JlbmNoX3N0cm5jbXBfaGVscGVyLAogCSZhbXA7YmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUsCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MzBjNTFhZDJkZWMzNAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jCkBAIC0wLDAgJiM0MzsxLDEwNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcmdwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtiZW5jaC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9mb3JfYmVuY2guc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovCiYjNDM7c3RhdGljIHN0cnVjdCBjdHggewomIzQzOwlzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDsKJiM0Mzt9IGN0eDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHsKJiM0MzsJX191MzIgbnJfbG9vcHM7CiYjNDM7fSBhcmdzID0gewomIzQzOwkvKgomIzQzOwkgKiBEZWZhdWx0IHRvIGEgbGFyZ2UgbG9vcCBjb3VudCBzbyB0aGUgcGVyLWl0ZXJhdGlvbiBicGZfaXRlcl9udW1fbmV4dCgpIGNvc3QgZG9taW5hdGVzCiYjNDM7CSAqIHRoZSBvbmUtdGltZSBicGZfaXRlcl9udW1fbmV3KCkvZGVzdHJveSgpIHNldHVwIGFuZCB0ZWFyZG93bi4KJiM0MzsJICovCiYjNDM7CS5ucl9sb29wcyA9IDEwMDAsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJQVJHX05SX0xPT1BTID0gNDAwMCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0gewomIzQzOwl7ICYjMzQ7bnJfbG9vcHMmIzM0OywgQVJHX05SX0xPT1BTLCAmIzM0O25yX2xvb3BzJiMzNDssIDAsCiYjNDM7CQkmIzM0O1NldCBudW1iZXIgb2YgaXRlcmF0aW9ucyBmb3IgdGhlIGJwZl9mb3IoKSBsb29wJiMzNDt9LAomIzQzOwl7fSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoa2V5KSB7CiYjNDM7CWNhc2UgQVJHX05SX0xPT1BTOgomIzQzOwkJYXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIGV4cG9ydGVkIGludG8gYmVuY2htYXJrIHJ1bm5lciAqLwomIzQzO2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncCA9IHsKJiM0MzsJLm9wdGlvbnMgPSBvcHRzLAomIzQzOwkucGFyc2VyID0gcGFyc2VfYXJnLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChlbnYuY29uc3VtZXJfY250ICE9IDApIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2JlbmNobWFyayBkb2VzbiYjMzk7dCBzdXBwb3J0IGNvbnN1bWVyIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcHJvZHVjZXIodm9pZCAqaW5wdXQpCiYjNDM7ewomIzQzOwl3aGlsZSAodHJ1ZSkKJiM0MzsJCS8qIHRyaWdnZXIgdGhlIGJwZiBwcm9ncmFtICovCiYjNDM7CQlzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtZWFzdXJlKHN0cnVjdCBiZW5jaF9yZXMgKnJlcykKJiM0Mzt7CiYjNDM7CXJlcy0mZ3Q7aGl0cyA9IGF0b21pY19zd2FwKCZhbXA7Y3R4LnNrZWwtJmd0O2Jzcy0mZ3Q7aGl0cywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CiYjNDM7CXNldHVwX2xpYmJwZigpOwomIzQzOwomIzQzOwljdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFjdHguc2tlbCkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cbiYjMzQ7KTsKJiM0MzsJCWV4aXQoMSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2goY3R4LnNrZWwtJmd0O3Byb2dzLmJlbmNobWFyayk7CiYjNDM7CWlmICghbGluaykgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxuJiMzNDspOwomIzQzOwkJZXhpdCgxKTsKJiM0MzsJfQomIzQzOwomIzQzOwljdHguc2tlbC0mZ3Q7YnNzLSZndDtucl9sb29wcyA9IGFyZ3MubnJfbG9vcHM7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfZm9yID0gewomIzQzOwkubmFtZSA9ICYjMzQ7YnBmLWZvciYjMzQ7LAomIzQzOwkuYXJncCA9ICZhbXA7YmVuY2hfYnBmX2Zvcl9hcmdwLAomIzQzOwkudmFsaWRhdGUgPSB2YWxpZGF0ZSwKJiM0MzsJLnNldHVwID0gc2V0dXAsCiYjNDM7CS5wcm9kdWNlcl90aHJlYWQgPSBwcm9kdWNlciwKJiM0MzsJLm1lYXN1cmUgPSBtZWFzdXJlLAomIzQzOwkucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcywKJiM0MzsJLnJlcG9ydF9maW5hbCA9IG9wc19yZXBvcnRfZmluYWwsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2gKQEAgLTAsMCAmIzQzOzEsMTUgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0Mztzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaAomIzQzOwomIzQzO3NldCAtZXVmbyBwaXBlZmFpbAomIzQzOwomIzQzO2ZvciB0IGluIDEgNCA4IDEyIDE2OyBkbwomIzQzO2ZvciBpIGluIDEwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwIDUwMDAwIDEwMDAwMCA1MDAwMDAgMTAwMDAwMDsgZG8KJiM0MztzdWJ0aXRsZSAmIzM0O25yX2xvb3BzOiAkaSwgbnJfdGhyZWFkczogJHQmIzM0OwomIzQzOwlzdW1tYXJpemVfb3BzICYjMzQ7YnBmX2ZvcjogJiMzNDsgXAomIzQzOwkgICAgJiMzNDskKCRSVU5fQkVOQ0ggLXAgJHQgLS1ucl9sb29wcyAkaSBicGYtZm9yKSYjMzQ7CiYjNDM7CXByaW50ZiAmIzM0O1xuJiMzNDsKJiM0Mztkb25lCiYjNDM7ZG9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI3NTJkZTVjNDRmNTdhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guYwpAQCAtMCwwICYjNDM7MSwzMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm1saW51eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7dTMyIG5yX2xvb3BzOwomIzQzO2xvbmcgaGl0czsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG91dGVyX2xvb3AoX191MzIgaW5kZXgsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW1wdHkgYm9keTogdGhlIHdvcmsgYmVpbmcgbWVhc3VyZWQgaXMgdGhlIG9wZW4tY29kZWQgbnVtZXJpYyBpdGVyYXRvciBpdHNlbGYKJiM0MzsJICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLgomIzQzOwkgKi8KJiM0MzsJYnBmX2ZvcihpLCAwLCBucl9sb29wcykKJiM0MzsJCTsKJiM0MzsJX19zeW5jX2FkZF9hbmRfZmV0Y2goJmFtcDtoaXRzLCBucl9sb29wcyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvJiMzNDsgU1lTX1BSRUZJWCAmIzM0O3N5c19nZXRwZ2lkJiMzNDspCiYjNDM7aW50IGJlbmNobWFyayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlicGZfbG9vcCgxMDAwLCBvdXRlcl9sb29wLCBOVUxMLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuYwppbmRleCAwZmE3MGIxMzNkOTMyMi4uYzRkZjU4OWVjZDdhZTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jCkBAIC04OCw2ICYjNDM7ODgsMTUxIEBAIGludCBpdGVyX2Vycl91bnNhZmVfYXNtX2xvb3AoY29uc3Qgdm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBOYWtlZCBmdW5jdGlvbnMsIHNvIHRoZXJlIGlzIG5vIGNvbXBpbGVyLWdlbmVyYXRlZCBnbHVlIGFuZCB0aGUgd2hvbGUgaW5saW5lZCBwcm9ncmFtIGNhbiBiZQomIzQzOyAqIG1hdGNoZWQuIFBpbm5lZCB0byBhcmNoZXMgd2hvc2UgSklUcyB6ZXJvLWV4dGVuZCAzMi1iaXQgd3JpdGVzIGltcGxpY2l0bHkKJiM0MzsgKiAoYnBmX2ppdF9uZWVkc196ZXh0KCkgPT0gZmFsc2UpOyBvbiBhcmNoZXMgdGhhdCBuZWVkIGV4cGxpY2l0IHplcm8tZXh0ZW5zaW9uIHRoZSB2ZXJpZmllcgomIzQzOyAqIGludGVybGVhdmVzICYjMzQ7d04gPSB3TiYjMzQ7IGluc25zIGFuZCB0aGUgZml4ZWQgc2hhcGUgYmVsb3cgd291bGQgbm90IG1hdGNoLiBUaGUgaW5saW5pbmcgaXRzZWxmIGlzCiYjNDM7ICogYXJjaCBpbmRlcGVuZGVudCwgc28gY2hlY2tpbmcgaXQgb24gdGhlc2UgYXJjaGVzIGlzIHN1ZmZpY2llbnQuCiYjNDM7ICoKJiM0MzsgKiBXaXRoIGNvbnN0YW50IGJvdW5kcyBicGZfaXRlcl9udW1fbmV3KCkgaXMgaW5saW5lZCB3aXRoIHRoZSByYW5nZSBjaGVja3MgZm9sZGVkIGF3YXksIGp1c3QKJiM0MzsgKiBzdG9yaW5nIHRoZSBpbml0aWFsIHN0YXRlIChzLSZndDtjdXIgPSBzdGFydCAtIDEsIHMtJmd0O2VuZCA9IGVuZCk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kCiYjNDM7ICogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28sIGxlYXZpbmcgYSBjYWxsLWZyZWUgbG9vcC4KJiM0MzsgKi8KJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19zdWNjZXNzCiYjNDM7X194bGF0ZWQoJiMzNDtyNiA9IHIxMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjYgJiM0Mzs9IC04JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMSA9IHI2JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMiA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IzID0gMTAmIzM0OykKJiM0MzsvKiBicGZfaXRlcl9udW1fbmV3KCZhbXA7aXQsIDAsIDEwKSBmb2xkZWQgdG8gdGhlIHN0YXRlIGluaXQgKi8KJiM0MztfX3hsYXRlZCgmIzM0OyoodTMyICopKHIxICYjNDM7MCkgPSAtMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1MzIgKikocjEgJiM0Mzs0KSA9IDEwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IxID0gcjYmIzM0OykKJiM0MzsvKiBicGZfaXRlcl9udW1fbmV4dCgmYW1wO2l0KSAqLwomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAqKHUzMiAqKShyMSAmIzQzOzApJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDt3MCAmIzQzOz0gMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjIgPSAqKHUzMiAqKShyMSAmIzQzOzQpJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiB3MCBzJmd0Oz0gdzIgZ290byBwYyYjNDM7MyYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IHIxJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtnb3RvIHBjJiM0MzsyJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiByMCAhPSAweDAgZ290byBwYy0xMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjEgPSByNiYjMzQ7KQomIzQzOy8qIGJwZl9pdGVyX251bV9kZXN0cm95KCZhbXA7aXQpICovCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtleGl0JiMzNDspCiYjNDM7aW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2NvbnN0X2ZvbGRlZCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJCS8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqLwomIzQzOwkJJiMzNDtyNiA9IHIxMDsmIzM0OwomIzQzOwkJJiMzNDtyNiAmIzQzOz0gLTg7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByNjsmIzM0OwomIzQzOwkJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJCSYjMzQ7cjMgPSAxMDsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107JiMzNDsKJiM0MzsJJiMzNDsxOiYjMzQ7CiYjNDM7CQkmIzM0O3IxID0gcjY7JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXh0XTsmIzM0OwomIzQzOwkJJiMzNDtpZiByMCAhPSAwIGdvdG8gMWI7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByNjsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldOyYjMzQ7CiYjNDM7CQkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CQk6CiYjNDM7CQk6IF9faW1tKGJwZl9pdGVyX251bV9uZXcpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksCiYjNDM7CQkgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KQomIzQzOwkJOiBfX2Nsb2JiZXJfY29tbW9uLCAmIzM0O3I2JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBTYW1lIGFyY2ggcGlubmluZyBhbmQgbmFrZWQtZnVuY3Rpb24gcmF0aW9uYWxlIGFzIGFib3ZlLiBXaXRoIGEgbm9uLWNvbnN0YW50IGJvdW5kCiYjNDM7ICogYnBmX2l0ZXJfbnVtX25ldygpIGtlZXBzIHRoZSBmdWxsIHJhbmdlIGNoZWNrOiB0aGUgZGlzdGFuY2UgaXMgY29tcHV0ZWQgYW5kIGJvdGggdGhlIC1FSU5WQUwKJiM0MzsgKiBhbmQgLUUyQklHIGVycm9yIHBhdGhzIHJlbWFpbi4gYnBmX2l0ZXJfbnVtX25leHQoKSBhbmQgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28uCiYjNDM7ICovCiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAomIzQzO19fc3VjY2VzcwomIzQzO19feGxhdGVkKCYjMzQ7cjYgPSByMTAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3I2ICYjNDM7PSAtOCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Y2FsbCB1bmtub3duJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMyA9IHIwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMyAmYW1wOz0gNjU1MzUmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IxID0gcjYmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IyID0gMCYjMzQ7KQomIzQzOy8qIGJwZl9pdGVyX251bV9uZXcoJmFtcDtpdCwgMCwgJmx0O25vbi1jb25zdCZndDspIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi8KJiM0MztfX3hsYXRlZCgmIzM0O2lmIHcyIHMmZ3Q7IHczIGdvdG8gcGMmIzQzOzgmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3cwID0gdzMmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3cwIC09IHcyJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiByMCBzJmd0OyAweDgwMDAwMCBnb3RvIHBjJiM0Mzs4JiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDt3MiAmIzQzOz0gLTEmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTMyICopKHIxICYjNDM7MCkgPSByMiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1MzIgKikocjEgJiM0Mzs0KSA9IHIzJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O2dvdG8gcGMmIzQzOzUmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0OyoodTY0ICopKHIxICYjNDM7MCkgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IC0yMiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Z290byBwYyYjNDM7MiYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1NjQgKikocjEgJiM0MzswKSA9IDAmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IwID0gLTcmIzM0OykKJiM0MztfX3hsYXRlZCgmIzM0O3IxID0gcjYmIzM0OykKJiM0MzsvKiBicGZfaXRlcl9udW1fbmV4dCgmYW1wO2l0KSAqLwomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAqKHUzMiAqKShyMSAmIzQzOzApJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDt3MCAmIzQzOz0gMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjIgPSAqKHUzMiAqKShyMSAmIzQzOzQpJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiB3MCBzJmd0Oz0gdzIgZ290byBwYyYjNDM7MyYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7Kih1MzIgKikocjEgJiM0MzswKSA9IHIwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtyMCA9IHIxJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtnb3RvIHBjJiM0MzsyJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtpZiByMCAhPSAweDAgZ290byBwYy0xMSYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjEgPSByNiYjMzQ7KQomIzQzOy8qIGJwZl9pdGVyX251bV9kZXN0cm95KCZhbXA7aXQpICovCiYjNDM7X194bGF0ZWQoJiMzNDsqKHU2NCAqKShyMSAmIzQzOzApID0gMCYjMzQ7KQomIzQzO19feGxhdGVkKCYjMzQ7cjAgPSAwJiMzNDspCiYjNDM7X194bGF0ZWQoJiMzNDtleGl0JiMzNDspCiYjNDM7aW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoCiYjNDM7CQkvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi8KJiM0MzsJCSYjMzQ7cjYgPSByMTA7JiMzNDsKJiM0MzsJCSYjMzQ7cjYgJiM0Mzs9IC04OyYjMzQ7CiYjNDM7CQkvKiBub24tY29uc3RhbnQgZW5kIHNvIHRoZSByYW5nZSBjaGVja3MgYXJlIGtlcHQgKi8KJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdOyYjMzQ7CiYjNDM7CQkmIzM0O3IzID0gcjA7JiMzNDsKJiM0MzsJCSYjMzQ7cjMgJmFtcDs9IDB4ZmZmZjsmIzM0OwomIzQzOwkJJiMzNDtyMSA9IHI2OyYjMzQ7CiYjNDM7CQkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107JiMzNDsKJiM0MzsJJiMzNDsxOiYjMzQ7CiYjNDM7CQkmIzM0O3IxID0gcjY7JiMzNDsKJiM0MzsJCSYjMzQ7Y2FsbCAlW2JwZl9pdGVyX251bV9uZXh0XTsmIzM0OwomIzQzOwkJJiMzNDtpZiByMCAhPSAwIGdvdG8gMWI7JiMzNDsKJiM0MzsJCSYjMzQ7cjEgPSByNjsmIzM0OwomIzQzOwkJJiMzNDtjYWxsICVbYnBmX2l0ZXJfbnVtX2Rlc3Ryb3ldOyYjMzQ7CiYjNDM7CQkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CQk6CiYjNDM7CQk6IF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl9udW1fbmV3KSwKJiM0MzsJCSAgX19pbW0oYnBmX2l0ZXJfbnVtX25leHQpLAomIzQzOwkJICBfX2ltbShicGZfaXRlcl9udW1fZGVzdHJveSkKJiM0MzsJCTogX19jbG9iYmVyX2NvbW1vbiwgJiMzNDtyNiYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwogU0VDKCYjMzQ7cmF3X3RwJiMzNDspCiBfX3N1Y2Nlc3MKIGludCBpdGVyX3doaWxlX2xvb3AoY29uc3Qgdm9pZCAqY3R4KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCUEYgVmVyaWZpZXIgT3B0aW1pemF0aW9uOiBJdGVyYXRpb24gSW5saW5pbmcqKgoKT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoIHRoYXQmIzM5O3MgZG9pbmcgc29tZSBjbGV2ZXIgaW5saW5pbmcgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEl0JiMzOTtzIHRhcmdldGluZyBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgIGtmdW5jcywgd2hpY2ggaXMgYSBnb29kIG9wdGltaXphdGlvbiB0YXJnZXQuIEkgY2FuIHNlZSB0aGUgY2hhbmdlczsgdGhleSYjMzk7dmUgYWRkZWQgYSBgc3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGVgIHRvIHRoZSBgYnBmX2luc25fYXV4X2RhdGFgIHRvIHRyYWNrIHRoZSBhcmd1bWVudHMmIzM5OyBjb25zdGFudC1uZXNzIGFuZCB0aGVyZWZvcmUgdGhlaXIgc3VpdGFiaWxpdHkgZm9yIGlubGluaW5nLiBUaGUgbWFpbiBsb2dpYyBpcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2hlcmUgdGhleSYjMzk7cmUgdXBkYXRpbmcgdGhpcyBzdGF0ZSBhbmQgcGVyZm9ybWluZyB0aGUgYWN0dWFsIGlubGluaW5nIGluIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYSBiZW5jaG1hcmsgKGBiZW5jaF9icGZfZm9yLmNgKSBhbmQgc29tZSB0ZXN0cyBpbiBgaXRlcnMuY2AsIHdoaWNoIGlzIHRoZSByaWdodCBhcHByb2FjaC4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIGZvciBhbnlvbmUgdXNpbmcgYGJwZl9mb3JgIG9yIGNhbGxpbmcgYGJwZl9pdGVyX251bV9uZXdgIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlIHZpYSBsb2FkZWQgQlBGIHByb2dyYW1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGFjdCBmcm9tIHRoZSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4KCkxldCYjMzk7cyBzZWUsIHRoZSBjb3JlIGZ1bmN0aW9ucyBtb2RpZmllZC9hZGRlZCBhcmU6IGB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlYCwgYGlubGluZV9icGZfaXRlcl9udW1fbmV3YCwgYGlubGluZV9icGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgaW5saW5lX2JwZl9pdGVyX251bV9kZXN0cm95YC4gQWxsIG9mIHRoZXNlLCBpbnRlcmVzdGluZ2x5LCBhcmUgc3RhdGljIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gVGhlIGVudHJ5IHBvaW50cyBhcmUgYGNoZWNrX2tmdW5jX2NhbGxgIGFuZCBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgLgoKTXkgcHJpbWFyeSBmdXp6aW5nIGZvY3VzIHNob3VsZCBub3cgZGVmaW5pdGVseSBiZSB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGtmdW5jIGNhbGxzIGFuZCBpbmxpbmluZy4gSSBzaG91bGQgemVybyBpbiBvbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgdGhvdWdoIEkgd2lsbCBiZSBsaW1pdGVkIHNpbmNlIHRoZXkgYXJlIHN0YXRpYzoKCiogICBgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZWAgKHN0YXRpYywgYnV0IHN0aWxsIGEgY29kZSBwYXRoIHRvIGNvbnNpZGVyKQoqICAgYGlubGluZV9icGZfaXRlcl9udW1fbmV3YAoqICAgYGlubGluZV9icGZfaXRlcl9udW1fbmV4dGAKKiAgIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgCiogICBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIChhbiBleGlzdGluZyBmdW5jdGlvbiB0aGV5IGFyZSB1c2luZywgd2hpY2ggaXMgZ29vZCB0byBhZGQgaXQgdG8gdGhlIGxpc3QpCiogICBgY2hlY2tfa2Z1bmNfY2FsbGAgKGFuIGV4aXN0aW5nIGZ1bmN0aW9uIHRoYXQgaXMga2V5IHRvIHRhcmdldCkuCgpgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZWAgYW5kIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ld2AgYXJlIHN0YXRpYywgSSBhbHJlYWR5IHNlZS4gR29vZC4KCkNvbmZpZ3MgcmVxdWlyZWQgYXJlIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9KSVRgLiBFYXN5IHRvIHZlcmlmeS4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFzIGV4cGVjdGVkLgoKSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3MgcmVsYXRpbmcgdG8gQlBGIGl0ZXJhdG9yczsgbGV0IG1lIGdyZXAgZm9yIGBicGZfaXRlcl9udW1fbmV3YCB0byBjaGVjayBpZiBpdCBkZXBlbmRzIG9uIGFueXRoaW5nLiBUaGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBga2VybmVsL2JwZi9icGZfaXRlci5jYCwgc28gSSBzaG91bGQgY2hlY2sgdGhlIE1ha2VmaWxlIG9yIEtjb25maWcgZm9yIHRoYXQgZGlyZWN0b3J5LiBHb29kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSBjb25maWdzIHJpZ2h0LgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgdmFsdWVzLiBJIGNhbiBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pdGVyX251bV9uZXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2JwZl9pdGVyLmM9NzY4PV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYy03NjktXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzcwOl9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNzcxLXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODg2PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZHlucHRyX3NsaWNlX3Jkd3IsIEtGX1JFVF9OVUxMKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDg4NzpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2l0ZXJfbnVtX25ldywgS0ZfSVRFUl9ORVcpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODg4LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfaXRlcl9udW1fbmV4dCwgS0ZfSVRFUl9ORVhUIHwgS0ZfUkVUX05VTEwpXG4tLVxua2VybmVsL2JwZi9zdGF0ZXMuYz0xMTEzPXN0YXRpYyBib29sIHN0YXRlc19tYXliZV9sb29waW5nKHN0cnVjdCBicGZfdmVyaWZpZXJfc3RhdGUgKm9sZCxcbi0tXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExODEtICpcbmtlcm5lbC9icGYvc3RhdGVzLmM6MTE4MjogKiAgIGJwZl9pdGVyX251bV9uZXcoXHUwMDI2aXQsIDAsIDEwKTtcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE4My0gKiAgIHdoaWxlICgocCA9IGJwZl9pdGVyX251bV9uZXh0KFx1MDAyNnQpKSkge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NTk3PXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZ2V0X2l0ZXJfZnJvbV9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXJfc3QsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTc2NzEtICogICAgIGludCBpID0gMCwgYSA9IDA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY3MjogKiAgICAgYnBmX2l0ZXJfbnVtX25ldyhcdTAwMjZpdCwgMCwgMTApO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTc2NzMtICogICAgIHdoaWxlIChicGZfaXRlcl9udW1fbmV4dChcdTAwMjZpdCkpIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwNjg9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTExOC1cdEtGX2JwZl9sb2NhbF9pcnFfcmVzdG9yZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTExOTpcdEtGX2JwZl9pdGVyX251bV9uZXcsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjAtXHRLRl9icGZfaXRlcl9udW1fbmV4dCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEyMDY9QlRGX0lEKGZ1bmMsIGJwZl9sb2NhbF9pcnFfcmVzdG9yZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwNzpCVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX25ldylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwOC1CVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX25leHQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjkwPXN0YXRpYyBib29sIGlzX2JwZl9pdGVyX251bV9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY5MS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2OTI6XHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjkzLVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2l0ZXJfbnVtX25leHRdIHx8XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTYzPXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTY1LS8qXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NjY6ICogYnBmX2l0ZXJfbnVtX25ldygpIGNhbiBiZSBpbmxpbmVkIG1vcmUgdGlnaHRseSB3aGVuIGl0cyBzdGFydCBhbmQgZW5kIGFyZ3VtZW50cyBhcmUgY29uc3RhbnQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5NjctICogYXMgdGhlIHJhbmdlIGNoZWNrcyBhbmQgdGhlaXIgZXJyb3IgcGF0aHMgY2FuIHRoZW4gYmUgcmVzb2x2ZWQgYXQgcmV3cml0ZSB0aW1lLiBSZWNvcmQsIHBlclxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjk3MD1zdGF0aWMgaW50IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk3MS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NzI6XHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUgPSBcdTAwMjZjdXJfYXV4KGVudiktXHUwMDNlaXRlcl9udW1fbmV3X3N0YXRlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTczLVx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnN0YXJ0X3JlZyA9IFx1MDAyNmN1cl9yZWdzKGVudilbQlBGX1JFR18yXTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTMwMDY9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyMDYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMyMDc6XHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjA4LVx0XHRlcnIgPSB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlKGVudik7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5ODAzPXN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4MjAtLypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTgyMTogKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX25ldygpLiBSMSBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgaXRlcmF0b3IsIFIyIGFuZCBSMyBob2xkIHRoZSAoaW50KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODIyLSAqIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODIzLSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODI0OnN0YXRpYyBpbnQgaW5saW5lX2JwZl9pdGVyX251bV9uZXcoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Ziwgc3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgKnN0YXRlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODI1LXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk5MjM9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNTEtXHRcdCpjbnQgPSA2O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDUyOlx0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAwNTM6XHRcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhpbnNuX2J1Zixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDA1NC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5pdGVyX251bV9uZXdfc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzQ1CgkJCQkJCQlvdXRwdXQ6IDE4MwoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbiBvcHRpbWl6YXRpb24gdG8gdGhlIEJQRiB2ZXJpZmllci4gSXQmIzM5O3MgaW5saW5pbmcgYGJwZl9pdGVyX251bV9uZXdgLCBgYnBmX2l0ZXJfbnVtX25leHRgLCBhbmQgYGJwZl9pdGVyX251bV9kZXN0cm95YC4gVGhhdCBzZWVtcyBwcmV0dHkgc29saWQgZnJvbSBhIGZ1bmN0aW9uYWxpdHkgc3RhbmRwb2ludC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7WWVwLCB0aGlzIGFic29sdXRlbHkgbmVlZHMgZnV6emluZy4mIzM0OyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW5saW5pbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgaXNzdWVzLCBlc3BlY2lhbGx5IGFyb3VuZCBlZGdlIGNhc2VzLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAgZnVuY3Rpb25zLiBUaG9zZSBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIFNpbmNlIHRoZSBpbmxpbmluZyBmdW5jdGlvbnMsIGxpa2UgYHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGVgLCBgaW5saW5lX2JwZl9pdGVyX251bV9uZXdgLCBgaW5saW5lX2JwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgLCBhcmUgc3RhdGljLCBJIHNob3VsZCBwcm9iYWJseSBrZWVwIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAgYW5kIGBjaGVja19rZnVuY19jYWxsYCBvbiB0aGUgbGlzdCBhcyB3ZWxsLgoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgaXQgbG9va3MgbGlrZSBgQlBGX1NZU0NBTExgIGlzIHRoZSBrZXkgcmVxdWlyZW1lbnQgaGVyZS4gSeKAmWxsIG1ha2Ugc3VyZSB0aGF0IGlzIGVuYWJsZWQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSBrbm93IGBCUEZfSklUYCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIEJQRiwgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQsIGJ1dCBgQlBGX1NZU0NBTExgIHNlZW1zIHRvIGJlIHRoZSBjb3JlIHJlcXVpcmVtZW50LgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ZpeHVwX2tmdW5jX2NhbGwmIzM0OywKICAgICYjMzQ7Y2hlY2tfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDt1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlJiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fbmV3JiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fbmV4dCYjMzQ7LAogICAgJiMzNDtpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldywgYnBmX2l0ZXJfbnVtX25leHQsIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSBrZnVuY3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgb3B0aW1pemVzIHRoZSBleGVjdXRpb24gb2YgdGhlc2Uga2Z1bmNzIGFuZCBjYW4gYmUgcmVhY2hlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZml4dXBfa2Z1bmNfY2FsbCYjMzQ7LAogICAgJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgICAmIzM0O3VwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUmIzM0OywKICAgICYjMzQ7aW5saW5lX2JwZl9pdGVyX251bV9uZXcmIzM0OywKICAgICYjMzQ7aW5saW5lX2JwZl9pdGVyX251bV9uZXh0JiMzNDssCiAgICAmIzM0O2lubGluZV9icGZfaXRlcl9udW1fZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGlubGluZSBicGZfaXRlcl9udW1fbmV3LCBicGZfaXRlcl9udW1fbmV4dCwgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95IGtmdW5jcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBvcHRpbWl6ZXMgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBrZnVuY3MgYW5kIGNhbiBiZSByZWFjaGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMTQ6MTU6MzYuMTUxMjYyMzA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MzAwOTAzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZml4dXBfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwidXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZVwiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9uZXdcIixcbiAgICBcImlubGluZV9icGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldywgYnBmX2l0ZXJfbnVtX25leHQsIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSBrZnVuY3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgb3B0aW1pemVzIHRoZSBleGVjdXRpb24gb2YgdGhlc2Uga2Z1bmNzIGFuZCBjYW4gYmUgcmVhY2hlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBmcm9tIHVzZXJzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTQ6MTU6MzYuMTUxMjY2Mjk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc1NTEwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NmY3ODE1Y2ViMjVjMzc0ZjYwZjA3MzhlZGU4MjhmMDhhOTQyNTAxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDE0OjE1OjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggNjgyYzJjZDNiODQ0MzAuLjhjMDRlMmZkODAxNzBiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTYxMiw2ICs2MTIsMTUgQEAgc3RydWN0IGJwZl9sb29wX2lubGluZV9zdGF0ZSB7XFxuIFxcdHUzMiBjYWxsYmFja19zdWJwcm9nbm87IC8qIHZhbGlkIHdoZW4gZml0X2Zvcl9pbmxpbmUgaXMgdHJ1ZSAqL1xcbiB9O1xcbiBcXG4rc3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUge1xcbitcXHR1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ6MTsgLyogc2V0IHRvIHRydWUgdXBvbiBmaXJzdCBlbnRyeSAqL1xcbitcXHR1bnNpZ25lZCBpbnQgZml0X2Zvcl9pbmxpbmU6MTsgLyogdHJ1ZSBpZiBzdGFydCBhbmQgZW5kIGFyZSBjb25zdGFudFxcbitcXHRcXHRcXHRcXHRcXHQqIHdpdGggdGhlIHNhbWUgdmFsdWUgYXQgZWFjaCBjYWxsXFxuK1xcdFxcdFxcdFxcdFxcdCovXFxuK1xcdHMzMiBzdGFydDsgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXFxuK1xcdHMzMiBlbmQ7ICAgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXFxuK307XFxuK1xcbiAvKiBwb2ludGVyIGFuZCBzdGF0ZSBmb3IgbWFwcyAqL1xcbiBzdHJ1Y3QgYnBmX21hcF9wdHJfc3RhdGUge1xcbiBcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcXG5AQCAtNjYxLDYgKzY3MCwxMCBAQCBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEge1xcbiBcXHRcXHQgKiB0aGUgc3RhdGUgb2YgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyB0byBtYWtlIGRlY2lzaW9uIGFib3V0IGlubGluaW5nXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRzdHJ1Y3QgYnBmX2xvb3BfaW5saW5lX3N0YXRlIGxvb3BfaW5saW5lX3N0YXRlO1xcbitcXHRcXHQvKiBpZiBpbnN0cnVjdGlvbiBpcyBhIGNhbGwgdG8gYnBmX2l0ZXJfbnVtX25ldyB0aGlzIGZpZWxkIHRyYWNrcyBpdHMgc3RhcnQvZW5kXFxuK1xcdFxcdCAqIGFyZ3VtZW50cyB0byBtYWtlIGEgZGVjaXNpb24gYWJvdXQgZWxpZGluZyB0aGUgcmFuZ2UgY2hlY2tzIHdoZW4gaW5saW5pbmdcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlIGl0ZXJfbnVtX25ld19zdGF0ZTtcXG4gXFx0fTtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHQvKiByZW1lbWJlciB0aGUgc2l6ZSBvZiB0eXBlIHBhc3NlZCB0byBicGZfb2JqX25ldyB0byByZXdyaXRlIFIxICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDUyYmUwYTExOGNjZTA3Li5kNWI3M2FlODAxOTQ0MyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMTI5NjIsNiArMTI5NjIsNDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdcXG4gXFxuIHN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XFxuIFxcbisvKlxcbisgKiBicGZfaXRlcl9udW1fbmV3KCkgY2FuIGJlIGlubGluZWQgbW9yZSB0aWdodGx5IHdoZW4gaXRzIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzIGFyZSBjb25zdGFudCxcXG4rICogYXMgdGhlIHJhbmdlIGNoZWNrcyBhbmQgdGhlaXIgZXJyb3IgcGF0aHMgY2FuIHRoZW4gYmUgcmVzb2x2ZWQgYXQgcmV3cml0ZSB0aW1lLiBSZWNvcmQsIHBlclxcbisgKiBjYWxsIHNpdGUsIHdoZXRoZXIgYm90aCBhcmd1bWVudHMgYXJlIGNvbnN0YW50IHdpdGggdGhlIHNhbWUgdmFsdWUgb24gZXZlcnkgdmlzaXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUgPSBcXHUwMDI2Y3VyX2F1eChlbnYpLVxcdTAwM2VpdGVyX251bV9uZXdfc3RhdGU7XFxuK1xcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpzdGFydF9yZWcgPSBcXHUwMDI2Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzJdO1xcbitcXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZW5kX3JlZyA9IFxcdTAwMjZjdXJfcmVncyhlbnYpW0JQRl9SRUdfM107XFxuK1xcdGJvb2wga25vd24gPSB0bnVtX2lzX2NvbnN0KHN0YXJ0X3JlZy1cXHUwMDNldmFyX29mZikgXFx1MDAyNlxcdTAwMjYgdG51bV9pc19jb25zdChlbmRfcmVnLVxcdTAwM2V2YXJfb2ZmKTtcXG4rXFx0czMyIHN0YXJ0ID0gc3RhcnRfcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbitcXHRzMzIgZW5kID0gZW5kX3JlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghc3RhdGUtXFx1MDAzZWluaXRpYWxpemVkKSB7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2Vpbml0aWFsaXplZCA9IDE7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VmaXRfZm9yX2lubGluZSA9IGtub3duO1xcbitcXHRcXHRzdGF0ZS1cXHUwMDNlc3RhcnQgPSBzdGFydDtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWVuZCA9IGVuZDtcXG4rXFx0fSBlbHNlIGlmIChzdGF0ZS1cXHUwMDNlZml0X2Zvcl9pbmxpbmUpIHtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWZpdF9mb3JfaW5saW5lID0ga25vd24gXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZXN0YXJ0ID09IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IHN0YXRlLVxcdTAwM2VlbmQgPT0gZW5kO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXaGlsZSBmb2xkaW5nIGlzIHN0aWxsIHZpYWJsZSB0aGUgZGVjaXNpb24gcmVsaWVzIG9uIHRoZSBleGFjdCBjb25zdGFudCB2YWx1ZXMsIHNvIG1hcmtcXG4rXFx0ICogdGhlIHJlZ2lzdGVycyBwcmVjaXNlOyBvdGhlcndpc2UgdGhlIHZlcmlmaWVyIGNvdWxkIHBydW5lIGEgcGF0aCB0aGF0IHJlYWNoZXMgdGhpcyBjYWxsXFxuK1xcdCAqIHdpdGggZGlmZmVyZW50IGNvbnN0YW50cyBhbmQgdGhlIGZvbGRlZCBjb2RlIHdvdWxkIHJ1biB3aXRoIGEgc3RhbGUgdmFsdWUuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3RhdGUtXFx1MDAzZWZpdF9mb3JfaW5saW5lKSB7XFxuK1xcdFxcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgQlBGX1JFR18yKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBCUEZfUkVHXzMpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0XFx0ICAgIGludCAqaW5zbl9pZHhfcClcXG4ge1xcbkBAIC0xMzE2Myw2ICsxMzIwNCwxMiBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XFxuK1xcdFxcdGVyciA9IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoZW52KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIENBTExFUl9TQVZFRF9SRUdTOyBpKyspIHtcXG4gXFx0XFx0dTMyIHJlZ25vID0gY2FsbGVyX3NhdmVkW2ldO1xcbiBcXG5AQCAtMTk3NzAsNiArMTk4MTcsMTA5IEBAIHN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcXG4gXFx0KmNudCA9IDQ7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIElubGluZSBicGZfaXRlcl9udW1fbmV3KCkuIFIxIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBpdGVyYXRvciwgUjIgYW5kIFIzIGhvbGQgdGhlIChpbnQpXFxuKyAqIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxcbisgKi9cXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0aW50IGkgPSAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBzdGFydCBhbmQgZW5kIGFyZSBjb25zdGFudCB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBmb2xkIGF3YXksXFxuK1xcdCAqIGxlYXZpbmcganVzdCB0aGUgc3RhdGUgaW5pdCBvciB0aGUgZXJyb3IgcmVzdWx0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHN0YXRlLVxcdTAwM2VmaXRfZm9yX2lubGluZSkge1xcbitcXHRcXHRzMzIgc3RhcnQgPSBzdGF0ZS1cXHUwMDNlc3RhcnQsIGVuZCA9IHN0YXRlLVxcdTAwM2VlbmQ7XFxuK1xcbitcXHRcXHRpZiAoc3RhcnQgXFx1MDAzZSBlbmQpIHtcXG4rXFx0XFx0XFx0Lyogcy1cXHUwMDNlY3VyID0gcy1cXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FSU5WQUw7ICovXFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0XFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcXG4rXFx0XFx0fSBlbHNlIGlmICgoczY0KWVuZCAtIChzNjQpc3RhcnQgXFx1MDAzZSBCUEZfTUFYX0xPT1BTKSB7XFxuK1xcdFxcdFxcdC8qIHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0XFx0XFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRTJCSUcpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKiBzLVxcdTAwM2VjdXIgPSBzdGFydCAtIDE7IHMtXFx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIDAsIHN0YXJ0IC0gMSk7XFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIDQsIGVuZCk7XFxuK1xcdFxcdFxcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGlmIChzdGFydCBcXHUwMDNlIGVuZCkgZ290byBlaW52YWw7ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dULCBCUEZfUkVHXzIsIEJQRl9SRUdfMywgOCk7XFxuK1xcdC8qXFxuK1xcdCAqIHN0YXJ0IFxcdTAwM2M9IGVuZCBoZXJlLCBzbyB0aGUgcmFuZ2UgZW5kIC0gc3RhcnQgZml0cyBpbiBhIHUzMjsgY29tcHV0ZSBpdCBhcyBhIDMyLWJpdFxcbitcXHQgKiBzdWJ0cmFjdGlvbiB0aGF0IHplcm8tZXh0ZW5kcyBpbnRvIHIwLlxcbitcXHQgKi9cXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1YzMl9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzMpO1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMik7XFxuK1xcdC8qIGlmIChyMCBcXHUwMDNlIEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0lNTShCUEZfSlNHVCwgQlBGX1JFR18wLCBCUEZfTUFYX0xPT1BTLCA4KTtcXG4rXFx0Lyogcy1cXHUwMDNlY3VyID0gc3RhcnQgLSAxOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX0lNTShCUEZfQURELCBCUEZfUkVHXzIsIC0xKTtcXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMiwgMCk7XFxuK1xcdC8qIHMtXFx1MDAzZWVuZCA9IGVuZDsgKi9cXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMywgNCk7XFxuK1xcdC8qIHJldHVybiAwOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApO1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUF9BKDUpO1xcbitcXHQvKiBlaW52YWw6IHMtXFx1MDAzZWN1ciA9IHMtXFx1MDAzZWVuZCA9IDA7IHJldHVybiAtRUlOVkFMOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVJTlZBTCk7XFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0EoMik7XFxuK1xcdC8qIGUyYmlnOiBzLVxcdTAwM2VjdXIgPSBzLVxcdTAwM2VlbmQgPSAwOyByZXR1cm4gLUUyQklHOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUUyQklHKTtcXG4rXFxuK1xcdHJldHVybiBpO1xcbit9XFxuK1xcbisvKlxcbisgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX25leHQoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aCB0aGVcXG4rICoga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxcbisgKi9cXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4re1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBzLVxcdTAwM2VjdXIgYW5kIHMtXFx1MDAzZWVuZCBhcmUgaW50LCBzbyB0aGUgKHM2NCkocy1cXHUwMDNlY3VyICsgMSkgXFx1MDAzZT0gcy1cXHUwMDNlZW5kIGNoZWNrIGlzIGVxdWl2YWxlbnQgdG8gYVxcbitcXHQgKiBzaWduZWQgMzItYml0IGNvbXBhcmlzb24gb2YgKHMtXFx1MDAzZWN1ciArIDEpIGFnYWluc3Qgcy1cXHUwMDNlZW5kIGFuZCBuZWVkcyBubyBzaWduIGV4dGVuc2lvbi5cXG4rXFx0ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApO1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX0lNTShCUEZfQURELCBCUEZfUkVHXzAsIDEpO1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMiwgQlBGX1JFR18xLCA0KTtcXG4rXFx0LyogaWYgKChzMzIpKHMtXFx1MDAzZWN1ciArIDEpIFxcdTAwM2U9IChzMzIpcy1cXHUwMDNlZW5kKSBnb3RvIGRvbmU7ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfSk1QMzJfUkVHKEJQRl9KU0dFLCBCUEZfUkVHXzAsIEJQRl9SRUdfMiwgMyk7XFxuK1xcdC8qIHMtXFx1MDAzZWN1cisrOyByZXR1cm4gXFx1MDAyNnMtXFx1MDAzZWN1cjsgKi9cXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7XFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSgyKTtcXG4rXFx0LyogZG9uZTogcy1cXHUwMDNlY3VyID0gcy1cXHUwMDNlZW5kID0gMDsgcmV0dXJuIE5VTEw7ICovXFxuK1xcdGluc25fYnVmW2krK10gPSBCUEZfU1RfTUVNKEJQRl9EVywgQlBGX1JFR18xLCAwLCAwKTtcXG4rXFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcXG4rXFxuK1xcdHJldHVybiBpO1xcbit9XFxuK1xcbisvKlxcbisgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aFxcbisgKiB0aGUga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxcbisgKi9cXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4re1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHQvKiBzLVxcdTAwM2VjdXIgPSBzLVxcdTAwM2VlbmQgPSAwOyAqL1xcbitcXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XFxuK1xcbitcXHRyZXR1cm4gaTtcXG4rfVxcbitcXG4gaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBpbnQgaW5zbl9pZHgsIGludCAqY250KVxcbiB7XFxuQEAgLTE5ODk5LDYgKzIwMDQ5LDEzIEBAIGludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdFxcdGluc25fYnVmWzRdID0gQlBGX0FMVTY0X1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XFxuIFxcdFxcdGluc25fYnVmWzVdID0gQlBGX0FMVTY0X0lNTShCUEZfTkVHLCBCUEZfUkVHXzAsIDApO1xcbiBcXHRcXHQqY250ID0gNjtcXG4rXFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xcbitcXHRcXHQqY250ID0gaW5saW5lX2JwZl9pdGVyX251bV9uZXcoaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5pdGVyX251bV9uZXdfc3RhdGUpO1xcbitcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXh0XSkge1xcbitcXHRcXHQqY250ID0gaW5saW5lX2JwZl9pdGVyX251bV9uZXh0KGluc25fYnVmKTtcXG4rXFx0fSBlbHNlIGlmIChkZXNjLVxcdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcXG4rXFx0XFx0KmNudCA9IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShpbnNuX2J1Zik7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmFyZ19wcm9nKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDU1ZDM5NDQzODcwNWE2Li4zMTc0YzJmMThlNzE1MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcXG5AQCAtOTY1LDYgKzk2NSw3IEBAICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vOiAkKE9VVFBVVCkvcmluZ2J1Zl9iZW5jaC5za2VsLmggXFxcXFxcbiBcXHRcXHRcXHQgICAgJChPVVRQVVQpL3BlcmZidWZfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm86ICQoT1VUUFVUKS9ibG9vbV9maWx0ZXJfYmVuY2guc2tlbC5oXFxuICQoT1VUUFVUKS9iZW5jaF9icGZfbG9vcC5vOiAkKE9VVFBVVCkvYnBmX2xvb3BfYmVuY2guc2tlbC5oXFxuKyQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm86ICQoT1VUUFVUKS9icGZfZm9yX2JlbmNoLnNrZWwuaFxcbiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlLm86ICQoT1VUUFVUKS9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZV9iZW5jaC5za2VsLmhcXG4gJChPVVRQVVQpL2JlbmNoX2xvY2FsX3N0b3JhZ2UubzogJChPVVRQVVQpL2xvY2FsX3N0b3JhZ2VfYmVuY2guc2tlbC5oXFxuQEAgLTk5MCw2ICs5OTEsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9yaW5nYnVmcy5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm8gXFxcXFxcbiBcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcXFxcbitcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2JwZl9mb3IubyBcXFxcXFxuIFxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vIFxcXFxcXG4gXFx0XFx0ICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm8gXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXFxuaW5kZXggM2Q5ZDJjZDc3NjRiZDMuLmI4NmI3MzQ1NmQzY2E4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcXG5AQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfcmluZ2J1ZnNfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2Jsb29tX21hcF9hcmdwO1xcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDtcXG4rZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncDtcXG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2FyZ3A7XFxuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9zdHJuY21wX2FyZ3A7XFxuQEAgLTI5Miw2ICsyOTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgYmVuY2hfcGFyc2Vyc1tdID0ge1xcbiBcXHR7IFxcdTAwMjZiZW5jaF9yaW5nYnVmc19hcmdwLCAwLCBcXFwiUmluZyBidWZmZXJzIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfYmxvb21fbWFwX2FyZ3AsIDAsIFxcXCJCbG9vbSBmaWx0ZXIgbWFwIGJlbmNobWFya1xcXCIsIDAgfSxcXG4gXFx0eyBcXHUwMDI2YmVuY2hfYnBmX2xvb3BfYXJncCwgMCwgXFxcImJwZl9sb29wIGhlbHBlciBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuK1xcdHsgXFx1MDAyNmJlbmNoX2JwZl9mb3JfYXJncCwgMCwgXFxcImJwZl9mb3IgbG9vcCBiZW5jaG1hcmtcXFwiLCAwIH0sXFxuIFxcdHsgXFx1MDAyNmJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncCwgMCwgXFxcImxvY2FsX3N0b3JhZ2UgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF9zdHJuY21wX2FyZ3AsIDAsIFxcXCJicGZfc3RybmNtcCBoZWxwZXIgYmVuY2htYXJrXFxcIiwgMCB9LFxcbiBcXHR7IFxcdTAwMjZiZW5jaF9sb2NhbF9zdG9yYWdlX3JjdV90YXNrc190cmFjZV9hcmdwLCAwLFxcbkBAIC01NTcsNiArNTU5LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9ibG9vbV9mYWxzZV9wb3NpdGl2ZTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb207XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfaGFzaG1hcF93aXRoX2Jsb29tO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9sb29wO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3I7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9ub19oZWxwZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9oZWxwZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGU7XFxuQEAgLTY0MCw2ICs2NDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJlbmNoICpiZW5jaHNbXSA9IHtcXG4gXFx0XFx1MDAyNmJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbSxcXG4gXFx0XFx1MDAyNmJlbmNoX2hhc2htYXBfd2l0aF9ibG9vbSxcXG4gXFx0XFx1MDAyNmJlbmNoX2JwZl9sb29wLFxcbitcXHRcXHUwMDI2YmVuY2hfYnBmX2ZvcixcXG4gXFx0XFx1MDAyNmJlbmNoX3N0cm5jbXBfbm9faGVscGVyLFxcbiBcXHRcXHUwMDI2YmVuY2hfc3RybmNtcF9oZWxwZXIsXFxuIFxcdFxcdTAwMjZiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZSxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjczMGM1MWFkMmRlYzM0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvYmVuY2hfYnBmX2Zvci5jXFxuQEAgLTAsMCArMSwxMDQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2FyZ3AuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJlbmNoLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfZm9yX2JlbmNoLnNrZWwuaFxcXCJcXG4rXFxuKy8qIEJQRiB0cmlnZ2VyaW5nIGJlbmNobWFya3MgKi9cXG4rc3RhdGljIHN0cnVjdCBjdHgge1xcbitcXHRzdHJ1Y3QgYnBmX2Zvcl9iZW5jaCAqc2tlbDtcXG4rfSBjdHg7XFxuK1xcbitzdGF0aWMgc3RydWN0IHtcXG4rXFx0X191MzIgbnJfbG9vcHM7XFxuK30gYXJncyA9IHtcXG4rXFx0LypcXG4rXFx0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xcbitcXHQgKiB0aGUgb25lLXRpbWUgYnBmX2l0ZXJfbnVtX25ldygpL2Rlc3Ryb3koKSBzZXR1cCBhbmQgdGVhcmRvd24uXFxuK1xcdCAqL1xcbitcXHQubnJfbG9vcHMgPSAxMDAwLFxcbit9O1xcbitcXG4rZW51bSB7XFxuK1xcdEFSR19OUl9MT09QUyA9IDQwMDAsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdHNbXSA9IHtcXG4rXFx0eyBcXFwibnJfbG9vcHNcXFwiLCBBUkdfTlJfTE9PUFMsIFxcXCJucl9sb29wc1xcXCIsIDAsXFxuK1xcdFxcdFxcXCJTZXQgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIHRoZSBicGZfZm9yKCkgbG9vcFxcXCJ9LFxcbitcXHR7fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzd2l0Y2ggKGtleSkge1xcbitcXHRjYXNlIEFSR19OUl9MT09QUzpcXG4rXFx0XFx0YXJncy5ucl9sb29wcyA9IHN0cnRvbChhcmcsIE5VTEwsIDEwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBBUkdQX0VSUl9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXFxuK2NvbnN0IHN0cnVjdCBhcmdwIGJlbmNoX2JwZl9mb3JfYXJncCA9IHtcXG4rXFx0Lm9wdGlvbnMgPSBvcHRzLFxcbitcXHQucGFyc2VyID0gcGFyc2VfYXJnLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgdmFsaWRhdGUodm9pZClcXG4re1xcbitcXHRpZiAoZW52LmNvbnN1bWVyX2NudCAhPSAwKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiYmVuY2htYXJrIGRvZXNuJ3Qgc3VwcG9ydCBjb25zdW1lciFcXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICpwcm9kdWNlcih2b2lkICppbnB1dClcXG4re1xcbitcXHR3aGlsZSAodHJ1ZSlcXG4rXFx0XFx0LyogdHJpZ2dlciB0aGUgYnBmIHByb2dyYW0gKi9cXG4rXFx0XFx0c3lzY2FsbChfX05SX2dldHBnaWQpO1xcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1lYXN1cmUoc3RydWN0IGJlbmNoX3JlcyAqcmVzKVxcbit7XFxuK1xcdHJlcy1cXHUwMDNlaGl0cyA9IGF0b21pY19zd2FwKFxcdTAwMjZjdHguc2tlbC1cXHUwMDNlYnNzLVxcdTAwM2VoaXRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2V0dXAodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XFxuK1xcbitcXHRzZXR1cF9saWJicGYoKTtcXG4rXFxuK1xcdGN0eC5za2VsID0gYnBmX2Zvcl9iZW5jaF9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIWN0eC5za2VsKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXFxcblxcXCIpO1xcbitcXHRcXHRleGl0KDEpO1xcbitcXHR9XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cXHUwMDNlcHJvZ3MuYmVuY2htYXJrKTtcXG4rXFx0aWYgKCFsaW5rKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiZmFpbGVkIHRvIGF0dGFjaCBwcm9ncmFtIVxcXFxuXFxcIik7XFxuK1xcdFxcdGV4aXQoMSk7XFxuK1xcdH1cXG4rXFxuK1xcdGN0eC5za2VsLVxcdTAwM2Vic3MtXFx1MDAzZW5yX2xvb3BzID0gYXJncy5ucl9sb29wcztcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9mb3IgPSB7XFxuK1xcdC5uYW1lID0gXFxcImJwZi1mb3JcXFwiLFxcbitcXHQuYXJncCA9IFxcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsXFxuK1xcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxcbitcXHQuc2V0dXAgPSBzZXR1cCxcXG4rXFx0LnByb2R1Y2VyX3RocmVhZCA9IHByb2R1Y2VyLFxcbitcXHQubWVhc3VyZSA9IG1lYXN1cmUsXFxuK1xcdC5yZXBvcnRfcHJvZ3Jlc3MgPSBvcHNfcmVwb3J0X3Byb2dyZXNzLFxcbitcXHQucmVwb3J0X2ZpbmFsID0gb3BzX3JlcG9ydF9maW5hbCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43ZGE2NDUzOTIwZGFiM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL3J1bl9iZW5jaF9icGZfZm9yLnNoXFxuQEAgLTAsMCArMSwxNSBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbitzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxcbitcXG4rc2V0IC1ldWZvIHBpcGVmYWlsXFxuK1xcbitmb3IgdCBpbiAxIDQgOCAxMiAxNjsgZG9cXG4rZm9yIGkgaW4gMTAgMTAwIDUwMCAxMDAwIDUwMDAgMTAwMDAgNTAwMDAgMTAwMDAwIDUwMDAwMCAxMDAwMDAwOyBkb1xcbitzdWJ0aXRsZSBcXFwibnJfbG9vcHM6ICRpLCBucl90aHJlYWRzOiAkdFxcXCJcXG4rXFx0c3VtbWFyaXplX29wcyBcXFwiYnBmX2ZvcjogXFxcIiBcXFxcXFxuK1xcdCAgICBcXFwiJCgkUlVOX0JFTkNIIC1wICR0IC0tbnJfbG9vcHMgJGkgYnBmLWZvcilcXFwiXFxuK1xcdHByaW50ZiBcXFwiXFxcXG5cXFwiXFxuK2RvbmVcXG4rZG9uZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX2Zvcl9iZW5jaC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI3NTJkZTVjNDRmNTdhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmNcXG5AQCAtMCwwICsxLDMyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuK3UzMiBucl9sb29wcztcXG4rbG9uZyBoaXRzO1xcbitcXG4rc3RhdGljIGludCBvdXRlcl9sb29wKF9fdTMyIGluZGV4LCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW1wdHkgYm9keTogdGhlIHdvcmsgYmVpbmcgbWVhc3VyZWQgaXMgdGhlIG9wZW4tY29kZWQgbnVtZXJpYyBpdGVyYXRvciBpdHNlbGZcXG4rXFx0ICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLlxcbitcXHQgKi9cXG4rXFx0YnBmX2ZvcihpLCAwLCBucl9sb29wcylcXG4rXFx0XFx0O1xcbitcXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcXHUwMDI2aGl0cywgbnJfbG9vcHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJmZW50cnkvXFxcIiBTWVNfUFJFRklYIFxcXCJzeXNfZ2V0cGdpZFxcXCIpXFxuK2ludCBiZW5jaG1hcmsodm9pZCAqY3R4KVxcbit7XFxuK1xcdGJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXFxuaW5kZXggMGZhNzBiMTMzZDkzMjIuLmM0ZGY1ODllY2Q3YWU0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcXG5AQCAtODgsNiArODgsMTUxIEBAIGludCBpdGVyX2Vycl91bnNhZmVfYXNtX2xvb3AoY29uc3Qgdm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogTmFrZWQgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBjb21waWxlci1nZW5lcmF0ZWQgZ2x1ZSBhbmQgdGhlIHdob2xlIGlubGluZWQgcHJvZ3JhbSBjYW4gYmVcXG4rICogbWF0Y2hlZC4gUGlubmVkIHRvIGFyY2hlcyB3aG9zZSBKSVRzIHplcm8tZXh0ZW5kIDMyLWJpdCB3cml0ZXMgaW1wbGljaXRseVxcbisgKiAoYnBmX2ppdF9uZWVkc196ZXh0KCkgPT0gZmFsc2UpOyBvbiBhcmNoZXMgdGhhdCBuZWVkIGV4cGxpY2l0IHplcm8tZXh0ZW5zaW9uIHRoZSB2ZXJpZmllclxcbisgKiBpbnRlcmxlYXZlcyBcXFwid04gPSB3TlxcXCIgaW5zbnMgYW5kIHRoZSBmaXhlZCBzaGFwZSBiZWxvdyB3b3VsZCBub3QgbWF0Y2guIFRoZSBpbmxpbmluZyBpdHNlbGYgaXNcXG4rICogYXJjaCBpbmRlcGVuZGVudCwgc28gY2hlY2tpbmcgaXQgb24gdGhlc2UgYXJjaGVzIGlzIHN1ZmZpY2llbnQuXFxuKyAqXFxuKyAqIFdpdGggY29uc3RhbnQgYm91bmRzIGJwZl9pdGVyX251bV9uZXcoKSBpcyBpbmxpbmVkIHdpdGggdGhlIHJhbmdlIGNoZWNrcyBmb2xkZWQgYXdheSwganVzdFxcbisgKiBzdG9yaW5nIHRoZSBpbml0aWFsIHN0YXRlIChzLVxcdTAwM2VjdXIgPSBzdGFydCAtIDEsIHMtXFx1MDAzZWVuZCA9IGVuZCk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kXFxuKyAqIGJwZl9pdGVyX251bV9kZXN0cm95KCkgYXJlIGlubGluZWQgdG9vLCBsZWF2aW5nIGEgY2FsbC1mcmVlIGxvb3AuXFxuKyAqL1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2Vzc1xcbitfX3hsYXRlZChcXFwicjYgPSByMTBcXFwiKVxcbitfX3hsYXRlZChcXFwicjYgKz0gLThcXFwiKVxcbitfX3hsYXRlZChcXFwicjEgPSByNlxcXCIpXFxuK19feGxhdGVkKFxcXCJyMiA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjMgPSAxMFxcXCIpXFxuKy8qIGJwZl9pdGVyX251bV9uZXcoXFx1MDAyNml0LCAwLCAxMCkgZm9sZGVkIHRvIHRoZSBzdGF0ZSBpbml0ICovXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArMCkgPSAtMVxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArNCkgPSAxMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjEgPSByNlxcXCIpXFxuKy8qIGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCkgKi9cXG4rX194bGF0ZWQoXFxcInIwID0gKih1MzIgKikocjEgKzApXFxcIilcXG4rX194bGF0ZWQoXFxcIncwICs9IDFcXFwiKVxcbitfX3hsYXRlZChcXFwicjIgPSAqKHUzMiAqKShyMSArNClcXFwiKVxcbitfX3hsYXRlZChcXFwiaWYgdzAgc1xcdTAwM2U9IHcyIGdvdG8gcGMrM1xcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArMCkgPSByMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IHIxXFxcIilcXG4rX194bGF0ZWQoXFxcImdvdG8gcGMrMlxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gMFxcXCIpXFxuK19feGxhdGVkKFxcXCJpZiByMCAhPSAweDAgZ290byBwYy0xMVxcXCIpXFxuK19feGxhdGVkKFxcXCJyMSA9IHI2XFxcIilcXG4rLyogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koXFx1MDAyNml0KSAqL1xcbitfX3hsYXRlZChcXFwiKih1NjQgKikocjEgKzApID0gMFxcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwiZXhpdFxcXCIpXFxuK2ludCBfX25ha2VkIGl0ZXJfbnVtX25ld19jb25zdF9mb2xkZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cXG4rXFx0XFx0XFxcInI2ID0gcjEwO1xcXCJcXG4rXFx0XFx0XFxcInI2ICs9IC04O1xcXCJcXG4rXFx0XFx0XFxcInIxID0gcjY7XFxcIlxcbitcXHRcXHRcXFwicjIgPSAwO1xcXCJcXG4rXFx0XFx0XFxcInIzID0gMTA7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1xcXCJcXG4rXFx0XFxcIjE6XFxcIlxcbitcXHRcXHRcXFwicjEgPSByNjtcXFwiXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1xcXCJcXG4rXFx0XFx0XFxcImlmIHIwICE9IDAgZ290byAxYjtcXFwiXFxuK1xcdFxcdFxcXCJyMSA9IHI2O1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XFxcIlxcbitcXHRcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFx0XFxcImV4aXQ7XFxcIlxcbitcXHRcXHQ6XFxuK1xcdFxcdDogX19pbW0oYnBmX2l0ZXJfbnVtX25ldyksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25leHQpLFxcbitcXHRcXHQgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KVxcbitcXHRcXHQ6IF9fY2xvYmJlcl9jb21tb24sIFxcXCJyNlxcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4rLypcXG4rICogU2FtZSBhcmNoIHBpbm5pbmcgYW5kIG5ha2VkLWZ1bmN0aW9uIHJhdGlvbmFsZSBhcyBhYm92ZS4gV2l0aCBhIG5vbi1jb25zdGFudCBib3VuZFxcbisgKiBicGZfaXRlcl9udW1fbmV3KCkga2VlcHMgdGhlIGZ1bGwgcmFuZ2UgY2hlY2s6IHRoZSBkaXN0YW5jZSBpcyBjb21wdXRlZCBhbmQgYm90aCB0aGUgLUVJTlZBTFxcbisgKiBhbmQgLUUyQklHIGVycm9yIHBhdGhzIHJlbWFpbi4gYnBmX2l0ZXJfbnVtX25leHQoKSBhbmQgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28uXFxuKyAqL1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuK19fc3VjY2Vzc1xcbitfX3hsYXRlZChcXFwicjYgPSByMTBcXFwiKVxcbitfX3hsYXRlZChcXFwicjYgKz0gLThcXFwiKVxcbitfX3hsYXRlZChcXFwiY2FsbCB1bmtub3duXFxcIilcXG4rX194bGF0ZWQoXFxcInIzID0gcjBcXFwiKVxcbitfX3hsYXRlZChcXFwicjMgXFx1MDAyNj0gNjU1MzVcXFwiKVxcbitfX3hsYXRlZChcXFwicjEgPSByNlxcXCIpXFxuK19feGxhdGVkKFxcXCJyMiA9IDBcXFwiKVxcbisvKiBicGZfaXRlcl9udW1fbmV3KFxcdTAwMjZpdCwgMCwgXFx1MDAzY25vbi1jb25zdFxcdTAwM2UpIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi9cXG4rX194bGF0ZWQoXFxcImlmIHcyIHNcXHUwMDNlIHczIGdvdG8gcGMrOFxcXCIpXFxuK19feGxhdGVkKFxcXCJ3MCA9IHczXFxcIilcXG4rX194bGF0ZWQoXFxcIncwIC09IHcyXFxcIilcXG4rX194bGF0ZWQoXFxcImlmIHIwIHNcXHUwMDNlIDB4ODAwMDAwIGdvdG8gcGMrOFxcXCIpXFxuK19feGxhdGVkKFxcXCJ3MiArPSAtMVxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArMCkgPSByMlxcXCIpXFxuK19feGxhdGVkKFxcXCIqKHUzMiAqKShyMSArNCkgPSByM1xcXCIpXFxuK19feGxhdGVkKFxcXCJyMCA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwiZ290byBwYys1XFxcIilcXG4rX194bGF0ZWQoXFxcIioodTY0ICopKHIxICswKSA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAtMjJcXFwiKVxcbitfX3hsYXRlZChcXFwiZ290byBwYysyXFxcIilcXG4rX194bGF0ZWQoXFxcIioodTY0ICopKHIxICswKSA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAtN1xcXCIpXFxuK19feGxhdGVkKFxcXCJyMSA9IHI2XFxcIilcXG4rLyogYnBmX2l0ZXJfbnVtX25leHQoXFx1MDAyNml0KSAqL1xcbitfX3hsYXRlZChcXFwicjAgPSAqKHUzMiAqKShyMSArMClcXFwiKVxcbitfX3hsYXRlZChcXFwidzAgKz0gMVxcXCIpXFxuK19feGxhdGVkKFxcXCJyMiA9ICoodTMyICopKHIxICs0KVxcXCIpXFxuK19feGxhdGVkKFxcXCJpZiB3MCBzXFx1MDAzZT0gdzIgZ290byBwYyszXFxcIilcXG4rX194bGF0ZWQoXFxcIioodTMyICopKHIxICswKSA9IHIwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gcjFcXFwiKVxcbitfX3hsYXRlZChcXFwiZ290byBwYysyXFxcIilcXG4rX194bGF0ZWQoXFxcIioodTY0ICopKHIxICswKSA9IDBcXFwiKVxcbitfX3hsYXRlZChcXFwicjAgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcImlmIHIwICE9IDB4MCBnb3RvIHBjLTExXFxcIilcXG4rX194bGF0ZWQoXFxcInIxID0gcjZcXFwiKVxcbisvKiBicGZfaXRlcl9udW1fZGVzdHJveShcXHUwMDI2aXQpICovXFxuK19feGxhdGVkKFxcXCIqKHU2NCAqKShyMSArMCkgPSAwXFxcIilcXG4rX194bGF0ZWQoXFxcInIwID0gMFxcXCIpXFxuK19feGxhdGVkKFxcXCJleGl0XFxcIilcXG4raW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cXG4rXFx0XFx0XFxcInI2ID0gcjEwO1xcXCJcXG4rXFx0XFx0XFxcInI2ICs9IC04O1xcXCJcXG4rXFx0XFx0Lyogbm9uLWNvbnN0YW50IGVuZCBzbyB0aGUgcmFuZ2UgY2hlY2tzIGFyZSBrZXB0ICovXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFxcIlxcbitcXHRcXHRcXFwicjMgPSByMDtcXFwiXFxuK1xcdFxcdFxcXCJyMyBcXHUwMDI2PSAweGZmZmY7XFxcIlxcbitcXHRcXHRcXFwicjEgPSByNjtcXFwiXFxuK1xcdFxcdFxcXCJyMiA9IDA7XFxcIlxcbitcXHRcXHRcXFwiY2FsbCAlW2JwZl9pdGVyX251bV9uZXddO1xcXCJcXG4rXFx0XFxcIjE6XFxcIlxcbitcXHRcXHRcXFwicjEgPSByNjtcXFwiXFxuK1xcdFxcdFxcXCJjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1xcXCJcXG4rXFx0XFx0XFxcImlmIHIwICE9IDAgZ290byAxYjtcXFwiXFxuK1xcdFxcdFxcXCJyMSA9IHI2O1xcXCJcXG4rXFx0XFx0XFxcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XFxcIlxcbitcXHRcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFx0XFxcImV4aXQ7XFxcIlxcbitcXHRcXHQ6XFxuK1xcdFxcdDogX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMiksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25ldyksXFxuK1xcdFxcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX25leHQpLFxcbitcXHRcXHQgIF9faW1tKGJwZl9pdGVyX251bV9kZXN0cm95KVxcbitcXHRcXHQ6IF9fY2xvYmJlcl9jb21tb24sIFxcXCJyNlxcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4gU0VDKFxcXCJyYXdfdHBcXFwiKVxcbiBfX3N1Y2Nlc3NcXG4gaW50IGl0ZXJfd2hpbGVfbG9vcChjb25zdCB2b2lkICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE0OjE1OjM2LjYwOTQwMjA0NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3OTcxOTQxOTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ZpeHVwX2tmdW5jX2NhbGxcIixcbiAgICBcImNoZWNrX2tmdW5jX2NhbGxcIixcbiAgICBcInVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGVcIixcbiAgICBcImlubGluZV9icGZfaXRlcl9udW1fbmV3XCIsXG4gICAgXCJpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHRcIixcbiAgICBcImlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gaW5saW5lIGJwZl9pdGVyX251bV9uZXcsIGJwZl9pdGVyX251bV9uZXh0LCBhbmQgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kga2Z1bmNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEJQRiB2ZXJpZmllciB0aGF0IG9wdGltaXplcyB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlIGtmdW5jcyBhbmQgY2FuIGJlIHJlYWNoZWQgYnkgbG9hZGluZyBCUEYgcHJvZ3JhbXMgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDZmNzgxNWNlYjI1YzM3NGY2MGYwNzM4ZWRlODI4ZjA4YTk0MjUwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE0OjE1OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDY4MmMyY2QzYjg0NDMwLi44YzA0ZTJmZDgwMTcwYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC02MTIsNiArNjEyLDE1IEBAIHN0cnVjdCBicGZfbG9vcF9pbmxpbmVfc3RhdGUge1xuIFx0dTMyIGNhbGxiYWNrX3N1YnByb2dubzsgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXG4gfTtcbiBcbitzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSB7XG4rXHR1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ6MTsgLyogc2V0IHRvIHRydWUgdXBvbiBmaXJzdCBlbnRyeSAqL1xuK1x0dW5zaWduZWQgaW50IGZpdF9mb3JfaW5saW5lOjE7IC8qIHRydWUgaWYgc3RhcnQgYW5kIGVuZCBhcmUgY29uc3RhbnRcbitcdFx0XHRcdFx0KiB3aXRoIHRoZSBzYW1lIHZhbHVlIGF0IGVhY2ggY2FsbFxuK1x0XHRcdFx0XHQqL1xuK1x0czMyIHN0YXJ0OyAvKiB2YWxpZCB3aGVuIGZpdF9mb3JfaW5saW5lIGlzIHRydWUgKi9cbitcdHMzMiBlbmQ7ICAgLyogdmFsaWQgd2hlbiBmaXRfZm9yX2lubGluZSBpcyB0cnVlICovXG4rfTtcbitcbiAvKiBwb2ludGVyIGFuZCBzdGF0ZSBmb3IgbWFwcyAqL1xuIHN0cnVjdCBicGZfbWFwX3B0cl9zdGF0ZSB7XG4gXHRzdHJ1Y3QgYnBmX21hcCAqbWFwX3B0cjtcbkBAIC02NjEsNiArNjcwLDEwIEBAIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSB7XG4gXHRcdCAqIHRoZSBzdGF0ZSBvZiB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzIHRvIG1ha2UgZGVjaXNpb24gYWJvdXQgaW5saW5pbmdcbiBcdFx0ICovXG4gXHRcdHN0cnVjdCBicGZfbG9vcF9pbmxpbmVfc3RhdGUgbG9vcF9pbmxpbmVfc3RhdGU7XG4rXHRcdC8qIGlmIGluc3RydWN0aW9uIGlzIGEgY2FsbCB0byBicGZfaXRlcl9udW1fbmV3IHRoaXMgZmllbGQgdHJhY2tzIGl0cyBzdGFydC9lbmRcbitcdFx0ICogYXJndW1lbnRzIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCBlbGlkaW5nIHRoZSByYW5nZSBjaGVja3Mgd2hlbiBpbmxpbmluZ1xuK1x0XHQgKi9cbitcdFx0c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgaXRlcl9udW1fbmV3X3N0YXRlO1xuIFx0fTtcbiBcdHVuaW9uIHtcbiBcdFx0LyogcmVtZW1iZXIgdGhlIHNpemUgb2YgdHlwZSBwYXNzZWQgdG8gYnBmX29ial9uZXcgdG8gcmV3cml0ZSBSMSAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNTJiZTBhMTE4Y2NlMDcuLmQ1YjczYWU4MDE5NDQzIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMjk2Miw2ICsxMjk2Miw0NyBAQCBzdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ1xuIFxuIHN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG4gXG4rLypcbisgKiBicGZfaXRlcl9udW1fbmV3KCkgY2FuIGJlIGlubGluZWQgbW9yZSB0aWdodGx5IHdoZW4gaXRzIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzIGFyZSBjb25zdGFudCxcbisgKiBhcyB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBjYW4gdGhlbiBiZSByZXNvbHZlZCBhdCByZXdyaXRlIHRpbWUuIFJlY29yZCwgcGVyXG4rICogY2FsbCBzaXRlLCB3aGV0aGVyIGJvdGggYXJndW1lbnRzIGFyZSBjb25zdGFudCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9uIGV2ZXJ5IHZpc2l0LlxuKyAqL1xuK3N0YXRpYyBpbnQgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuK3tcbitcdHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlICpzdGF0ZSA9IFx1MDAyNmN1cl9hdXgoZW52KS1cdTAwM2VpdGVyX251bV9uZXdfc3RhdGU7XG4rXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3RhcnRfcmVnID0gXHUwMDI2Y3VyX3JlZ3MoZW52KVtCUEZfUkVHXzJdO1xuK1x0c3RydWN0IGJwZl9yZWdfc3RhdGUgKmVuZF9yZWcgPSBcdTAwMjZjdXJfcmVncyhlbnYpW0JQRl9SRUdfM107XG4rXHRib29sIGtub3duID0gdG51bV9pc19jb25zdChzdGFydF9yZWctXHUwMDNldmFyX29mZikgXHUwMDI2XHUwMDI2IHRudW1faXNfY29uc3QoZW5kX3JlZy1cdTAwM2V2YXJfb2ZmKTtcbitcdHMzMiBzdGFydCA9IHN0YXJ0X3JlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuK1x0czMyIGVuZCA9IGVuZF9yZWctXHUwMDNldmFyX29mZi52YWx1ZTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIXN0YXRlLVx1MDAzZWluaXRpYWxpemVkKSB7XG4rXHRcdHN0YXRlLVx1MDAzZWluaXRpYWxpemVkID0gMTtcbitcdFx0c3RhdGUtXHUwMDNlZml0X2Zvcl9pbmxpbmUgPSBrbm93bjtcbitcdFx0c3RhdGUtXHUwMDNlc3RhcnQgPSBzdGFydDtcbitcdFx0c3RhdGUtXHUwMDNlZW5kID0gZW5kO1xuK1x0fSBlbHNlIGlmIChzdGF0ZS1cdTAwM2VmaXRfZm9yX2lubGluZSkge1xuK1x0XHRzdGF0ZS1cdTAwM2VmaXRfZm9yX2lubGluZSA9IGtub3duIFx1MDAyNlx1MDAyNiBzdGF0ZS1cdTAwM2VzdGFydCA9PSBzdGFydCBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZW5kID09IGVuZDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBXaGlsZSBmb2xkaW5nIGlzIHN0aWxsIHZpYWJsZSB0aGUgZGVjaXNpb24gcmVsaWVzIG9uIHRoZSBleGFjdCBjb25zdGFudCB2YWx1ZXMsIHNvIG1hcmtcbitcdCAqIHRoZSByZWdpc3RlcnMgcHJlY2lzZTsgb3RoZXJ3aXNlIHRoZSB2ZXJpZmllciBjb3VsZCBwcnVuZSBhIHBhdGggdGhhdCByZWFjaGVzIHRoaXMgY2FsbFxuK1x0ICogd2l0aCBkaWZmZXJlbnQgY29uc3RhbnRzIGFuZCB0aGUgZm9sZGVkIGNvZGUgd291bGQgcnVuIHdpdGggYSBzdGFsZSB2YWx1ZS5cbitcdCAqL1xuK1x0aWYgKHN0YXRlLVx1MDAzZWZpdF9mb3JfaW5saW5lKSB7XG4rXHRcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgQlBGX1JFR18yKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIEJQRl9SRUdfMyk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHRcdCAgICBpbnQgKmluc25faWR4X3ApXG4ge1xuQEAgLTEzMTYzLDYgKzEzMjA0LDEyIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdH1cbiBcdH1cbiBcbitcdGlmIChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG4rXHRcdGVyciA9IHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGUoZW52KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ0FMTEVSX1NBVkVEX1JFR1M7IGkrKykge1xuIFx0XHR1MzIgcmVnbm8gPSBjYWxsZXJfc2F2ZWRbaV07XG4gXG5AQCAtMTk3NzAsNiArMTk4MTcsMTA5IEBAIHN0YXRpYyB2b2lkIF9fZml4dXBfY29sbGVjdGlvbl9pbnNlcnRfa2Z1bmMoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eCxcbiBcdCpjbnQgPSA0O1xuIH1cbiBcbisvKlxuKyAqIElubGluZSBicGZfaXRlcl9udW1fbmV3KCkuIFIxIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBpdGVyYXRvciwgUjIgYW5kIFIzIGhvbGQgdGhlIChpbnQpXG4rICogc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMuIEtlZXAgaW4gc3luYyB3aXRoIHRoZSBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuXG4rICovXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUpXG4re1xuK1x0aW50IGkgPSAwO1xuK1xuK1x0LypcbitcdCAqIFdoZW4gc3RhcnQgYW5kIGVuZCBhcmUgY29uc3RhbnQgdGhlIHJhbmdlIGNoZWNrcyBhbmQgdGhlaXIgZXJyb3IgcGF0aHMgZm9sZCBhd2F5LFxuK1x0ICogbGVhdmluZyBqdXN0IHRoZSBzdGF0ZSBpbml0IG9yIHRoZSBlcnJvciByZXN1bHQuXG4rXHQgKi9cbitcdGlmIChzdGF0ZS1cdTAwM2VmaXRfZm9yX2lubGluZSkge1xuK1x0XHRzMzIgc3RhcnQgPSBzdGF0ZS1cdTAwM2VzdGFydCwgZW5kID0gc3RhdGUtXHUwMDNlZW5kO1xuK1xuK1x0XHRpZiAoc3RhcnQgXHUwMDNlIGVuZCkge1xuK1x0XHRcdC8qIHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyByZXR1cm4gLUVJTlZBTDsgKi9cbitcdFx0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbitcdFx0fSBlbHNlIGlmICgoczY0KWVuZCAtIChzNjQpc3RhcnQgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIHtcbitcdFx0XHQvKiBzLVx1MDAzZWN1ciA9IHMtXHUwMDNlZW5kID0gMDsgcmV0dXJuIC1FMkJJRzsgKi9cbitcdFx0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRTJCSUcpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxOyBzLVx1MDAzZWVuZCA9IGVuZDsgcmV0dXJuIDA7ICovXG4rXHRcdFx0aW5zbl9idWZbaSsrXSA9IEJQRl9TVF9NRU0oQlBGX1csIEJQRl9SRUdfMSwgMCwgc3RhcnQgLSAxKTtcbitcdFx0XHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfVywgQlBGX1JFR18xLCA0LCBlbmQpO1xuK1x0XHRcdGluc25fYnVmW2krK10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuIGk7XG4rXHR9XG4rXG4rXHQvKiBpZiAoc3RhcnQgXHUwMDNlIGVuZCkgZ290byBlaW52YWw7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHVCwgQlBGX1JFR18yLCBCUEZfUkVHXzMsIDgpO1xuK1x0LypcbitcdCAqIHN0YXJ0IFx1MDAzYz0gZW5kIGhlcmUsIHNvIHRoZSByYW5nZSBlbmQgLSBzdGFydCBmaXRzIGluIGEgdTMyOyBjb21wdXRlIGl0IGFzIGEgMzItYml0XG4rXHQgKiBzdWJ0cmFjdGlvbiB0aGF0IHplcm8tZXh0ZW5kcyBpbnRvIHIwLlxuK1x0ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjMyX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMyk7XG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0FMVTMyX1JFRyhCUEZfU1VCLCBCUEZfUkVHXzAsIEJQRl9SRUdfMik7XG4rXHQvKiBpZiAocjAgXHUwMDNlIEJQRl9NQVhfTE9PUFMpIGdvdG8gZTJiaWc7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUF9JTU0oQlBGX0pTR1QsIEJQRl9SRUdfMCwgQlBGX01BWF9MT09QUywgOCk7XG4rXHQvKiBzLVx1MDAzZWN1ciA9IHN0YXJ0IC0gMTsgKi9cbitcdGluc25fYnVmW2krK10gPSBCUEZfQUxVMzJfSU1NKEJQRl9BREQsIEJQRl9SRUdfMiwgLTEpO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMiwgMCk7XG4rXHQvKiBzLVx1MDAzZWVuZCA9IGVuZDsgKi9cbitcdGluc25fYnVmW2krK10gPSBCUEZfU1RYX01FTShCUEZfVywgQlBGX1JFR18xLCBCUEZfUkVHXzMsIDQpO1xuK1x0LyogcmV0dXJuIDA7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDApO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9KTVBfQSg1KTtcbitcdC8qIGVpbnZhbDogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRUlOVkFMOyAqL1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbitcdGluc25fYnVmW2krK10gPSBCUEZfSk1QX0EoMik7XG4rXHQvKiBlMmJpZzogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiAtRTJCSUc7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX1NUX01FTShCUEZfRFcsIEJQRl9SRUdfMSwgMCwgMCk7XG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FMkJJRyk7XG4rXG4rXHRyZXR1cm4gaTtcbit9XG4rXG4rLypcbisgKiBJbmxpbmUgYnBmX2l0ZXJfbnVtX25leHQoKS4gUjEgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZXJhdG9yLiBLZWVwIGluIHN5bmMgd2l0aCB0aGVcbisgKiBrZnVuYyBpbiBrZXJuZWwvYnBmL2JwZl9pdGVyLmMuXG4rICovXG4rc3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHQoc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbit7XG4rXHRpbnQgaSA9IDA7XG4rXG4rXHQvKlxuK1x0ICogcy1cdTAwM2VjdXIgYW5kIHMtXHUwMDNlZW5kIGFyZSBpbnQsIHNvIHRoZSAoczY0KShzLVx1MDAzZWN1ciArIDEpIFx1MDAzZT0gcy1cdTAwM2VlbmQgY2hlY2sgaXMgZXF1aXZhbGVudCB0byBhXG4rXHQgKiBzaWduZWQgMzItYml0IGNvbXBhcmlzb24gb2YgKHMtXHUwMDNlY3VyICsgMSkgYWdhaW5zdCBzLVx1MDAzZWVuZCBhbmQgbmVlZHMgbm8gc2lnbiBleHRlbnNpb24uXG4rXHQgKi9cbitcdGluc25fYnVmW2krK10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIDApO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9BTFUzMl9JTU0oQlBGX0FERCwgQlBGX1JFR18wLCAxKTtcbitcdGluc25fYnVmW2krK10gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18yLCBCUEZfUkVHXzEsIDQpO1xuK1x0LyogaWYgKChzMzIpKHMtXHUwMDNlY3VyICsgMSkgXHUwMDNlPSAoczMyKXMtXHUwMDNlZW5kKSBnb3RvIGRvbmU7ICovXG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUDMyX1JFRyhCUEZfSlNHRSwgQlBGX1JFR18wLCBCUEZfUkVHXzIsIDMpO1xuK1x0Lyogcy1cdTAwM2VjdXIrKzsgcmV0dXJuIFx1MDAyNnMtXHUwMDNlY3VyOyAqL1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVFhfTUVNKEJQRl9XLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7XG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX01PVjY0X1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMSk7XG4rXHRpbnNuX2J1ZltpKytdID0gQlBGX0pNUF9BKDIpO1xuK1x0LyogZG9uZTogcy1cdTAwM2VjdXIgPSBzLVx1MDAzZWVuZCA9IDA7IHJldHVybiBOVUxMOyAqL1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAwKTtcbitcbitcdHJldHVybiBpO1xuK31cbitcbisvKlxuKyAqIElubGluZSBicGZfaXRlcl9udW1fZGVzdHJveSgpLiBSMSBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgaXRlcmF0b3IuIEtlZXAgaW4gc3luYyB3aXRoXG4rICogdGhlIGtmdW5jIGluIGtlcm5lbC9icGYvYnBmX2l0ZXIuYy5cbisgKi9cbitzdGF0aWMgaW50IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuK3tcbitcdGludCBpID0gMDtcbitcbitcdC8qIHMtXHUwMDNlY3VyID0gcy1cdTAwM2VlbmQgPSAwOyAqL1xuK1x0aW5zbl9idWZbaSsrXSA9IEJQRl9TVF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEsIDAsIDApO1xuK1xuK1x0cmV0dXJuIGk7XG4rfVxuK1xuIGludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZiwgaW50IGluc25faWR4LCBpbnQgKmNudClcbiB7XG5AQCAtMTk4OTksNiArMjAwNDksMTMgQEAgaW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdFx0aW5zbl9idWZbNF0gPSBCUEZfQUxVNjRfUkVHKEJQRl9TVUIsIEJQRl9SRUdfMCwgQlBGX1JFR18xKTtcbiBcdFx0aW5zbl9idWZbNV0gPSBCUEZfQUxVNjRfSU1NKEJQRl9ORUcsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdCpjbnQgPSA2O1xuK1x0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XG4rXHRcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhpbnNuX2J1ZixcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5pdGVyX251bV9uZXdfc3RhdGUpO1xuK1x0fSBlbHNlIGlmIChkZXNjLVx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXh0XSkge1xuK1x0XHQqY250ID0gaW5saW5lX2JwZl9pdGVyX251bV9uZXh0KGluc25fYnVmKTtcbitcdH0gZWxzZSBpZiAoZGVzYy1cdTAwM2VmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fZGVzdHJveV0pIHtcbitcdFx0KmNudCA9IGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveShpbnNuX2J1Zik7XG4gXHR9XG4gXG4gXHRpZiAoZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmFyZ19wcm9nKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5pbmRleCA1NWQzOTQ0Mzg3MDVhNi4uMzE3NGMyZjE4ZTcxNTAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTk2NSw2ICs5NjUsNyBAQCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubzogJChPVVRQVVQpL3JpbmdidWZfYmVuY2guc2tlbC5oIFxcXG4gXHRcdFx0ICAgICQoT1VUUFVUKS9wZXJmYnVmX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9ibG9vbV9maWx0ZXJfbWFwLm86ICQoT1VUUFVUKS9ibG9vbV9maWx0ZXJfYmVuY2guc2tlbC5oXG4gJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm86ICQoT1VUUFVUKS9icGZfbG9vcF9iZW5jaC5za2VsLmhcbiskKE9VVFBVVCkvYmVuY2hfYnBmX2Zvci5vOiAkKE9VVFBVVCkvYnBmX2Zvcl9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfc3RybmNtcC5vOiAkKE9VVFBVVCkvc3RybmNtcF9iZW5jaC5za2VsLmhcbiAkKE9VVFBVVCkvYmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUubzogJChPVVRQVVQpL2JwZl9oYXNobWFwX2Z1bGxfdXBkYXRlX2JlbmNoLnNrZWwuaFxuICQoT1VUUFVUKS9iZW5jaF9sb2NhbF9zdG9yYWdlLm86ICQoT1VUUFVUKS9sb2NhbF9zdG9yYWdlX2JlbmNoLnNrZWwuaFxuQEAgLTk5MCw2ICs5OTEsNyBAQCAkKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfcmluZ2J1ZnMubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2Jsb29tX2ZpbHRlcl9tYXAubyBcXFxuIFx0XHQgJChPVVRQVVQpL2JlbmNoX2JwZl9sb29wLm8gXFxcbitcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfZm9yLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9zdHJuY21wLm8gXFxcbiBcdFx0ICQoT1VUUFVUKS9iZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZS5vIFxcXG4gXHRcdCAkKE9VVFBVVCkvYmVuY2hfbG9jYWxfc3RvcmFnZS5vIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2guY1xuaW5kZXggM2Q5ZDJjZDc3NjRiZDMuLmI4NmI3MzQ1NmQzY2E4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNoLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaC5jXG5AQCAtMjc2LDYgKzI3Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0c1tdID0ge1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9yaW5nYnVmc19hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9ibG9vbV9tYXBfYXJncDtcbiBleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2xvb3BfYXJncDtcbitleHRlcm4gc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwO1xuIGV4dGVybiBzdHJ1Y3QgYXJncCBiZW5jaF9sb2NhbF9zdG9yYWdlX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX2xvY2FsX3N0b3JhZ2VfcmN1X3Rhc2tzX3RyYWNlX2FyZ3A7XG4gZXh0ZXJuIHN0cnVjdCBhcmdwIGJlbmNoX3N0cm5jbXBfYXJncDtcbkBAIC0yOTIsNiArMjkzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkIGJlbmNoX3BhcnNlcnNbXSA9IHtcbiBcdHsgXHUwMDI2YmVuY2hfcmluZ2J1ZnNfYXJncCwgMCwgXCJSaW5nIGJ1ZmZlcnMgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfYmxvb21fbWFwX2FyZ3AsIDAsIFwiQmxvb20gZmlsdGVyIG1hcCBiZW5jaG1hcmtcIiwgMCB9LFxuIFx0eyBcdTAwMjZiZW5jaF9icGZfbG9vcF9hcmdwLCAwLCBcImJwZl9sb29wIGhlbHBlciBiZW5jaG1hcmtcIiwgMCB9LFxuK1x0eyBcdTAwMjZiZW5jaF9icGZfZm9yX2FyZ3AsIDAsIFwiYnBmX2ZvciBsb29wIGJlbmNobWFya1wiLCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX2xvY2FsX3N0b3JhZ2VfYXJncCwgMCwgXCJsb2NhbF9zdG9yYWdlIGJlbmNobWFya1wiLCAwIH0sXG4gXHR7IFx1MDAyNmJlbmNoX3N0cm5jbXBfYXJncCwgMCwgXCJicGZfc3RybmNtcCBoZWxwZXIgYmVuY2htYXJrXCIsIDAgfSxcbiBcdHsgXHUwMDI2YmVuY2hfbG9jYWxfc3RvcmFnZV9yY3VfdGFza3NfdHJhY2VfYXJncCwgMCxcbkBAIC01NTcsNiArNTU5LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9ibG9vbV9mYWxzZV9wb3NpdGl2ZTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aG91dF9ibG9vbTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2hhc2htYXBfd2l0aF9ibG9vbTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX2JwZl9sb29wO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IGJlbmNoIGJlbmNoX3N0cm5jbXBfbm9faGVscGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfc3RybmNtcF9oZWxwZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBiZW5jaCBiZW5jaF9icGZfaGFzaG1hcF9mdWxsX3VwZGF0ZTtcbkBAIC02NDAsNiArNjQzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZW5jaCAqYmVuY2hzW10gPSB7XG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhvdXRfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9oYXNobWFwX3dpdGhfYmxvb20sXG4gXHRcdTAwMjZiZW5jaF9icGZfbG9vcCxcbitcdFx1MDAyNmJlbmNoX2JwZl9mb3IsXG4gXHRcdTAwMjZiZW5jaF9zdHJuY21wX25vX2hlbHBlcixcbiBcdFx1MDAyNmJlbmNoX3N0cm5jbXBfaGVscGVyLFxuIFx0XHUwMDI2YmVuY2hfYnBmX2hhc2htYXBfZnVsbF91cGRhdGUsXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYmVuY2hzL2JlbmNoX2JwZl9mb3IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43MzBjNTFhZDJkZWMzNFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9iZW5jaF9icGZfZm9yLmNcbkBAIC0wLDAgKzEsMTA0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjYXJncC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJiZW5jaC5oXCJcbisjaW5jbHVkZSBcImJwZl9mb3JfYmVuY2guc2tlbC5oXCJcbitcbisvKiBCUEYgdHJpZ2dlcmluZyBiZW5jaG1hcmtzICovXG4rc3RhdGljIHN0cnVjdCBjdHgge1xuK1x0c3RydWN0IGJwZl9mb3JfYmVuY2ggKnNrZWw7XG4rfSBjdHg7XG4rXG4rc3RhdGljIHN0cnVjdCB7XG4rXHRfX3UzMiBucl9sb29wcztcbit9IGFyZ3MgPSB7XG4rXHQvKlxuK1x0ICogRGVmYXVsdCB0byBhIGxhcmdlIGxvb3AgY291bnQgc28gdGhlIHBlci1pdGVyYXRpb24gYnBmX2l0ZXJfbnVtX25leHQoKSBjb3N0IGRvbWluYXRlc1xuK1x0ICogdGhlIG9uZS10aW1lIGJwZl9pdGVyX251bV9uZXcoKS9kZXN0cm95KCkgc2V0dXAgYW5kIHRlYXJkb3duLlxuK1x0ICovXG4rXHQubnJfbG9vcHMgPSAxMDAwLFxuK307XG4rXG4rZW51bSB7XG4rXHRBUkdfTlJfTE9PUFMgPSA0MDAwLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRzW10gPSB7XG4rXHR7IFwibnJfbG9vcHNcIiwgQVJHX05SX0xPT1BTLCBcIm5yX2xvb3BzXCIsIDAsXG4rXHRcdFwiU2V0IG51bWJlciBvZiBpdGVyYXRpb25zIGZvciB0aGUgYnBmX2ZvcigpIGxvb3BcIn0sXG4rXHR7fSxcbit9O1xuK1xuK3N0YXRpYyBlcnJvcl90IHBhcnNlX2FyZyhpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzd2l0Y2ggKGtleSkge1xuK1x0Y2FzZSBBUkdfTlJfTE9PUFM6XG4rXHRcdGFyZ3MubnJfbG9vcHMgPSBzdHJ0b2woYXJnLCBOVUxMLCAxMCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEFSR1BfRVJSX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogZXhwb3J0ZWQgaW50byBiZW5jaG1hcmsgcnVubmVyICovXG4rY29uc3Qgc3RydWN0IGFyZ3AgYmVuY2hfYnBmX2Zvcl9hcmdwID0ge1xuK1x0Lm9wdGlvbnMgPSBvcHRzLFxuK1x0LnBhcnNlciA9IHBhcnNlX2FyZyxcbit9O1xuK1xuK3N0YXRpYyB2b2lkIHZhbGlkYXRlKHZvaWQpXG4re1xuK1x0aWYgKGVudi5jb25zdW1lcl9jbnQgIT0gMCkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJiZW5jaG1hcmsgZG9lc24ndCBzdXBwb3J0IGNvbnN1bWVyIVxcblwiKTtcbitcdFx0ZXhpdCgxKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgKnByb2R1Y2VyKHZvaWQgKmlucHV0KVxuK3tcbitcdHdoaWxlICh0cnVlKVxuK1x0XHQvKiB0cmlnZ2VyIHRoZSBicGYgcHJvZ3JhbSAqL1xuK1x0XHRzeXNjYWxsKF9fTlJfZ2V0cGdpZCk7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWVhc3VyZShzdHJ1Y3QgYmVuY2hfcmVzICpyZXMpXG4re1xuK1x0cmVzLVx1MDAzZWhpdHMgPSBhdG9taWNfc3dhcChcdTAwMjZjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlaGl0cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldHVwKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuK1xuK1x0c2V0dXBfbGliYnBmKCk7XG4rXG4rXHRjdHguc2tlbCA9IGJwZl9mb3JfYmVuY2hfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghY3R4LnNrZWwpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiZmFpbGVkIHRvIG9wZW4gc2tlbGV0b25cXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaChjdHguc2tlbC1cdTAwM2Vwcm9ncy5iZW5jaG1hcmspO1xuK1x0aWYgKCFsaW5rKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZhaWxlZCB0byBhdHRhY2ggcHJvZ3JhbSFcXG5cIik7XG4rXHRcdGV4aXQoMSk7XG4rXHR9XG4rXG4rXHRjdHguc2tlbC1cdTAwM2Vic3MtXHUwMDNlbnJfbG9vcHMgPSBhcmdzLm5yX2xvb3BzO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgYmVuY2ggYmVuY2hfYnBmX2ZvciA9IHtcbitcdC5uYW1lID0gXCJicGYtZm9yXCIsXG4rXHQuYXJncCA9IFx1MDAyNmJlbmNoX2JwZl9mb3JfYXJncCxcbitcdC52YWxpZGF0ZSA9IHZhbGlkYXRlLFxuK1x0LnNldHVwID0gc2V0dXAsXG4rXHQucHJvZHVjZXJfdGhyZWFkID0gcHJvZHVjZXIsXG4rXHQubWVhc3VyZSA9IG1lYXN1cmUsXG4rXHQucmVwb3J0X3Byb2dyZXNzID0gb3BzX3JlcG9ydF9wcm9ncmVzcyxcbitcdC5yZXBvcnRfZmluYWwgPSBvcHNfcmVwb3J0X2ZpbmFsLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JlbmNocy9ydW5fYmVuY2hfYnBmX2Zvci5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2RhNjQ1MzkyMGRhYjNcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9iZW5jaHMvcnVuX2JlbmNoX2JwZl9mb3Iuc2hcbkBAIC0wLDAgKzEsMTUgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbitzb3VyY2UgLi9iZW5jaHMvcnVuX2NvbW1vbi5zaFxuK1xuK3NldCAtZXVmbyBwaXBlZmFpbFxuK1xuK2ZvciB0IGluIDEgNCA4IDEyIDE2OyBkb1xuK2ZvciBpIGluIDEwIDEwMCA1MDAgMTAwMCA1MDAwIDEwMDAwIDUwMDAwIDEwMDAwMCA1MDAwMDAgMTAwMDAwMDsgZG9cbitzdWJ0aXRsZSBcIm5yX2xvb3BzOiAkaSwgbnJfdGhyZWFkczogJHRcIlxuK1x0c3VtbWFyaXplX29wcyBcImJwZl9mb3I6IFwiIFxcXG4rXHQgICAgXCIkKCRSVU5fQkVOQ0ggLXAgJHQgLS1ucl9sb29wcyAkaSBicGYtZm9yKVwiXG4rXHRwcmludGYgXCJcXG5cIlxuK2RvbmVcbitkb25lXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9mb3JfYmVuY2guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjc1MmRlNWM0NGY1N2Fcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfZm9yX2JlbmNoLmNcbkBAIC0wLDAgKzEsMzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbitcbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbit1MzIgbnJfbG9vcHM7XG4rbG9uZyBoaXRzO1xuK1xuK3N0YXRpYyBpbnQgb3V0ZXJfbG9vcChfX3UzMiBpbmRleCwgdm9pZCAqZGF0YSlcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qXG4rXHQgKiBFbXB0eSBib2R5OiB0aGUgd29yayBiZWluZyBtZWFzdXJlZCBpcyB0aGUgb3Blbi1jb2RlZCBudW1lcmljIGl0ZXJhdG9yIGl0c2VsZlxuK1x0ICogKGJwZl9pdGVyX251bV9uZXcvbmV4dC9kZXN0cm95IGJlaGluZCBicGZfZm9yKCkpLlxuK1x0ICovXG4rXHRicGZfZm9yKGksIDAsIG5yX2xvb3BzKVxuK1x0XHQ7XG4rXHRfX3N5bmNfYWRkX2FuZF9mZXRjaChcdTAwMjZoaXRzLCBucl9sb29wcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwiZmVudHJ5L1wiIFNZU19QUkVGSVggXCJzeXNfZ2V0cGdpZFwiKVxuK2ludCBiZW5jaG1hcmsodm9pZCAqY3R4KVxuK3tcbitcdGJwZl9sb29wKDEwMDAsIG91dGVyX2xvb3AsIE5VTEwsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2l0ZXJzLmNcbmluZGV4IDBmYTcwYjEzM2Q5MzIyLi5jNGRmNTg5ZWNkN2FlNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9pdGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvaXRlcnMuY1xuQEAgLTg4LDYgKzg4LDE1MSBAQCBpbnQgaXRlcl9lcnJfdW5zYWZlX2FzbV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIE5ha2VkIGZ1bmN0aW9ucywgc28gdGhlcmUgaXMgbm8gY29tcGlsZXItZ2VuZXJhdGVkIGdsdWUgYW5kIHRoZSB3aG9sZSBpbmxpbmVkIHByb2dyYW0gY2FuIGJlXG4rICogbWF0Y2hlZC4gUGlubmVkIHRvIGFyY2hlcyB3aG9zZSBKSVRzIHplcm8tZXh0ZW5kIDMyLWJpdCB3cml0ZXMgaW1wbGljaXRseVxuKyAqIChicGZfaml0X25lZWRzX3pleHQoKSA9PSBmYWxzZSk7IG9uIGFyY2hlcyB0aGF0IG5lZWQgZXhwbGljaXQgemVyby1leHRlbnNpb24gdGhlIHZlcmlmaWVyXG4rICogaW50ZXJsZWF2ZXMgXCJ3TiA9IHdOXCIgaW5zbnMgYW5kIHRoZSBmaXhlZCBzaGFwZSBiZWxvdyB3b3VsZCBub3QgbWF0Y2guIFRoZSBpbmxpbmluZyBpdHNlbGYgaXNcbisgKiBhcmNoIGluZGVwZW5kZW50LCBzbyBjaGVja2luZyBpdCBvbiB0aGVzZSBhcmNoZXMgaXMgc3VmZmljaWVudC5cbisgKlxuKyAqIFdpdGggY29uc3RhbnQgYm91bmRzIGJwZl9pdGVyX251bV9uZXcoKSBpcyBpbmxpbmVkIHdpdGggdGhlIHJhbmdlIGNoZWNrcyBmb2xkZWQgYXdheSwganVzdFxuKyAqIHN0b3JpbmcgdGhlIGluaXRpYWwgc3RhdGUgKHMtXHUwMDNlY3VyID0gc3RhcnQgLSAxLCBzLVx1MDAzZWVuZCA9IGVuZCk7IGJwZl9pdGVyX251bV9uZXh0KCkgYW5kXG4rICogYnBmX2l0ZXJfbnVtX2Rlc3Ryb3koKSBhcmUgaW5saW5lZCB0b28sIGxlYXZpbmcgYSBjYWxsLWZyZWUgbG9vcC5cbisgKi9cbitTRUMoXCJyYXdfdHBcIilcbitfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4rX19zdWNjZXNzXG4rX194bGF0ZWQoXCJyNiA9IHIxMFwiKVxuK19feGxhdGVkKFwicjYgKz0gLThcIilcbitfX3hsYXRlZChcInIxID0gcjZcIilcbitfX3hsYXRlZChcInIyID0gMFwiKVxuK19feGxhdGVkKFwicjMgPSAxMFwiKVxuKy8qIGJwZl9pdGVyX251bV9uZXcoXHUwMDI2aXQsIDAsIDEwKSBmb2xkZWQgdG8gdGhlIHN0YXRlIGluaXQgKi9cbitfX3hsYXRlZChcIioodTMyICopKHIxICswKSA9IC0xXCIpXG4rX194bGF0ZWQoXCIqKHUzMiAqKShyMSArNCkgPSAxMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rLyogYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpICovXG4rX194bGF0ZWQoXCJyMCA9ICoodTMyICopKHIxICswKVwiKVxuK19feGxhdGVkKFwidzAgKz0gMVwiKVxuK19feGxhdGVkKFwicjIgPSAqKHUzMiAqKShyMSArNClcIilcbitfX3hsYXRlZChcImlmIHcwIHNcdTAwM2U9IHcyIGdvdG8gcGMrM1wiKVxuK19feGxhdGVkKFwiKih1MzIgKikocjEgKzApID0gcjBcIilcbitfX3hsYXRlZChcInIwID0gcjFcIilcbitfX3hsYXRlZChcImdvdG8gcGMrMlwiKVxuK19feGxhdGVkKFwiKih1NjQgKikocjEgKzApID0gMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJpZiByMCAhPSAweDAgZ290byBwYy0xMVwiKVxuK19feGxhdGVkKFwicjEgPSByNlwiKVxuKy8qIGJwZl9pdGVyX251bV9kZXN0cm95KFx1MDAyNml0KSAqL1xuK19feGxhdGVkKFwiKih1NjQgKikocjEgKzApID0gMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJleGl0XCIpXG4raW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2NvbnN0X2ZvbGRlZCh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcdC8qIHI2IHBvaW50cyB0byBzdHJ1Y3QgYnBmX2l0ZXJfbnVtIG9uIHRoZSBzdGFjayAqL1xuK1x0XHRcInI2ID0gcjEwO1wiXG4rXHRcdFwicjYgKz0gLTg7XCJcbitcdFx0XCJyMSA9IHI2O1wiXG4rXHRcdFwicjIgPSAwO1wiXG4rXHRcdFwicjMgPSAxMDtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fbmV3XTtcIlxuK1x0XCIxOlwiXG4rXHRcdFwicjEgPSByNjtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fbmV4dF07XCJcbitcdFx0XCJpZiByMCAhPSAwIGdvdG8gMWI7XCJcbitcdFx0XCJyMSA9IHI2O1wiXG4rXHRcdFwiY2FsbCAlW2JwZl9pdGVyX251bV9kZXN0cm95XTtcIlxuK1x0XHRcInIwID0gMDtcIlxuK1x0XHRcImV4aXQ7XCJcbitcdFx0OlxuK1x0XHQ6IF9faW1tKGJwZl9pdGVyX251bV9uZXcpLFxuK1x0XHQgIF9faW1tKGJwZl9pdGVyX251bV9uZXh0KSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fZGVzdHJveSlcbitcdFx0OiBfX2Nsb2JiZXJfY29tbW9uLCBcInI2XCJcbitcdCk7XG4rfVxuK1xuKy8qXG4rICogU2FtZSBhcmNoIHBpbm5pbmcgYW5kIG5ha2VkLWZ1bmN0aW9uIHJhdGlvbmFsZSBhcyBhYm92ZS4gV2l0aCBhIG5vbi1jb25zdGFudCBib3VuZFxuKyAqIGJwZl9pdGVyX251bV9uZXcoKSBrZWVwcyB0aGUgZnVsbCByYW5nZSBjaGVjazogdGhlIGRpc3RhbmNlIGlzIGNvbXB1dGVkIGFuZCBib3RoIHRoZSAtRUlOVkFMXG4rICogYW5kIC1FMkJJRyBlcnJvciBwYXRocyByZW1haW4uIGJwZl9pdGVyX251bV9uZXh0KCkgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95KCkgYXJlIGlubGluZWQgdG9vLlxuKyAqL1xuK1NFQyhcInJhd190cFwiKVxuK19fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbitfX3N1Y2Nlc3NcbitfX3hsYXRlZChcInI2ID0gcjEwXCIpXG4rX194bGF0ZWQoXCJyNiArPSAtOFwiKVxuK19feGxhdGVkKFwiY2FsbCB1bmtub3duXCIpXG4rX194bGF0ZWQoXCJyMyA9IHIwXCIpXG4rX194bGF0ZWQoXCJyMyBcdTAwMjY9IDY1NTM1XCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rX194bGF0ZWQoXCJyMiA9IDBcIilcbisvKiBicGZfaXRlcl9udW1fbmV3KFx1MDAyNml0LCAwLCBcdTAwM2Nub24tY29uc3RcdTAwM2UpIHdpdGggdGhlIHJhbmdlIGNoZWNrIGtlcHQgKi9cbitfX3hsYXRlZChcImlmIHcyIHNcdTAwM2UgdzMgZ290byBwYys4XCIpXG4rX194bGF0ZWQoXCJ3MCA9IHczXCIpXG4rX194bGF0ZWQoXCJ3MCAtPSB3MlwiKVxuK19feGxhdGVkKFwiaWYgcjAgc1x1MDAzZSAweDgwMDAwMCBnb3RvIHBjKzhcIilcbitfX3hsYXRlZChcIncyICs9IC0xXCIpXG4rX194bGF0ZWQoXCIqKHUzMiAqKShyMSArMCkgPSByMlwiKVxuK19feGxhdGVkKFwiKih1MzIgKikocjEgKzQpID0gcjNcIilcbitfX3hsYXRlZChcInIwID0gMFwiKVxuK19feGxhdGVkKFwiZ290byBwYys1XCIpXG4rX194bGF0ZWQoXCIqKHU2NCAqKShyMSArMCkgPSAwXCIpXG4rX194bGF0ZWQoXCJyMCA9IC0yMlwiKVxuK19feGxhdGVkKFwiZ290byBwYysyXCIpXG4rX194bGF0ZWQoXCIqKHU2NCAqKShyMSArMCkgPSAwXCIpXG4rX194bGF0ZWQoXCJyMCA9IC03XCIpXG4rX194bGF0ZWQoXCJyMSA9IHI2XCIpXG4rLyogYnBmX2l0ZXJfbnVtX25leHQoXHUwMDI2aXQpICovXG4rX194bGF0ZWQoXCJyMCA9ICoodTMyICopKHIxICswKVwiKVxuK19feGxhdGVkKFwidzAgKz0gMVwiKVxuK19feGxhdGVkKFwicjIgPSAqKHUzMiAqKShyMSArNClcIilcbitfX3hsYXRlZChcImlmIHcwIHNcdTAwM2U9IHcyIGdvdG8gcGMrM1wiKVxuK19feGxhdGVkKFwiKih1MzIgKikocjEgKzApID0gcjBcIilcbitfX3hsYXRlZChcInIwID0gcjFcIilcbitfX3hsYXRlZChcImdvdG8gcGMrMlwiKVxuK19feGxhdGVkKFwiKih1NjQgKikocjEgKzApID0gMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJpZiByMCAhPSAweDAgZ290byBwYy0xMVwiKVxuK19feGxhdGVkKFwicjEgPSByNlwiKVxuKy8qIGJwZl9pdGVyX251bV9kZXN0cm95KFx1MDAyNml0KSAqL1xuK19feGxhdGVkKFwiKih1NjQgKikocjEgKzApID0gMFwiKVxuK19feGxhdGVkKFwicjAgPSAwXCIpXG4rX194bGF0ZWQoXCJleGl0XCIpXG4raW50IF9fbmFrZWQgaXRlcl9udW1fbmV3X2lubGluZWQodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XHQvKiByNiBwb2ludHMgdG8gc3RydWN0IGJwZl9pdGVyX251bSBvbiB0aGUgc3RhY2sgKi9cbitcdFx0XCJyNiA9IHIxMDtcIlxuK1x0XHRcInI2ICs9IC04O1wiXG4rXHRcdC8qIG5vbi1jb25zdGFudCBlbmQgc28gdGhlIHJhbmdlIGNoZWNrcyBhcmUga2VwdCAqL1xuK1x0XHRcImNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTtcIlxuK1x0XHRcInIzID0gcjA7XCJcbitcdFx0XCJyMyBcdTAwMjY9IDB4ZmZmZjtcIlxuK1x0XHRcInIxID0gcjY7XCJcbitcdFx0XCJyMiA9IDA7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX25ld107XCJcbitcdFwiMTpcIlxuK1x0XHRcInIxID0gcjY7XCJcbitcdFx0XCJjYWxsICVbYnBmX2l0ZXJfbnVtX25leHRdO1wiXG4rXHRcdFwiaWYgcjAgIT0gMCBnb3RvIDFiO1wiXG4rXHRcdFwicjEgPSByNjtcIlxuK1x0XHRcImNhbGwgJVticGZfaXRlcl9udW1fZGVzdHJveV07XCJcbitcdFx0XCJyMCA9IDA7XCJcbitcdFx0XCJleGl0O1wiXG4rXHRcdDpcbitcdFx0OiBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV3KSxcbitcdFx0ICBfX2ltbShicGZfaXRlcl9udW1fbmV4dCksXG4rXHRcdCAgX19pbW0oYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXG4rXHRcdDogX19jbG9iYmVyX2NvbW1vbiwgXCJyNlwiXG4rXHQpO1xuK31cbitcbiBTRUMoXCJyYXdfdHBcIilcbiBfX3N1Y2Nlc3NcbiBpbnQgaXRlcl93aGlsZV9sb29wKGNvbnN0IHZvaWQgKmN0eClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE0OjE1OjM2LjYwOTQwMzExNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjU3NDQ1MDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBPcHRpbWl6YXRpb246IEl0ZXJhdGlvbiBJbmxpbmluZyoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgZG9pbmcgc29tZSBjbGV2ZXIgaW5saW5pbmcgd2l0aGluIHRoZSBCUEYgdmVyaWZpZXIuIEl0J3MgdGFyZ2V0aW5nIGBicGZfaXRlcl9udW1fbmV3YCwgYGJwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBicGZfaXRlcl9udW1fZGVzdHJveWAga2Z1bmNzLCB3aGljaCBpcyBhIGdvb2Qgb3B0aW1pemF0aW9uIHRhcmdldC4gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzOyB0aGV5J3ZlIGFkZGVkIGEgYHN0cnVjdCBicGZfaXRlcl9udW1fbmV3X3N0YXRlYCB0byB0aGUgYGJwZl9pbnNuX2F1eF9kYXRhYCB0byB0cmFjayB0aGUgYXJndW1lbnRzJyBjb25zdGFudC1uZXNzIGFuZCB0aGVyZWZvcmUgdGhlaXIgc3VpdGFiaWxpdHkgZm9yIGlubGluaW5nLiBUaGUgbWFpbiBsb2dpYyBpcyBpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgd2hlcmUgdGhleSdyZSB1cGRhdGluZyB0aGlzIHN0YXRlIGFuZCBwZXJmb3JtaW5nIHRoZSBhY3R1YWwgaW5saW5pbmcgaW4gYGJwZl9maXh1cF9rZnVuY19jYWxsYC4gVGhleSd2ZSBhbHNvIGFkZGVkIGEgYmVuY2htYXJrIChgYmVuY2hfYnBmX2Zvci5jYCkgYW5kIHNvbWUgdGVzdHMgaW4gYGl0ZXJzLmNgLCB3aGljaCBpcyB0aGUgcmlnaHQgYXBwcm9hY2guXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIGZvciBhbnlvbmUgdXNpbmcgYGJwZl9mb3JgIG9yIGNhbGxpbmcgYGJwZl9pdGVyX251bV9uZXdgIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlIHZpYSBsb2FkZWQgQlBGIHByb2dyYW1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGFjdCBmcm9tIHRoZSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuTGV0J3Mgc2VlLCB0aGUgY29yZSBmdW5jdGlvbnMgbW9kaWZpZWQvYWRkZWQgYXJlOiBgdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZWAsIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ld2AsIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHRgLCBhbmQgYGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveWAuIEFsbCBvZiB0aGVzZSwgaW50ZXJlc3RpbmdseSwgYXJlIHN0YXRpYyB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBlbnRyeSBwb2ludHMgYXJlIGBjaGVja19rZnVuY19jYWxsYCBhbmQgYGJwZl9maXh1cF9rZnVuY19jYWxsYC5cblxuTXkgcHJpbWFyeSBmdXp6aW5nIGZvY3VzIHNob3VsZCBub3cgZGVmaW5pdGVseSBiZSB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGtmdW5jIGNhbGxzIGFuZCBpbmxpbmluZy4gSSBzaG91bGQgemVybyBpbiBvbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgdGhvdWdoIEkgd2lsbCBiZSBsaW1pdGVkIHNpbmNlIHRoZXkgYXJlIHN0YXRpYzpcblxuKiAgIGB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlYCAoc3RhdGljLCBidXQgc3RpbGwgYSBjb2RlIHBhdGggdG8gY29uc2lkZXIpXG4qICAgYGlubGluZV9icGZfaXRlcl9udW1fbmV3YFxuKiAgIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25leHRgXG4qICAgYGlubGluZV9icGZfaXRlcl9udW1fZGVzdHJveWBcbiogICBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIChhbiBleGlzdGluZyBmdW5jdGlvbiB0aGV5IGFyZSB1c2luZywgd2hpY2ggaXMgZ29vZCB0byBhZGQgaXQgdG8gdGhlIGxpc3QpXG4qICAgYGNoZWNrX2tmdW5jX2NhbGxgIChhbiBleGlzdGluZyBmdW5jdGlvbiB0aGF0IGlzIGtleSB0byB0YXJnZXQpLlxuXG5gdXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZWAgYW5kIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ld2AgYXJlIHN0YXRpYywgSSBhbHJlYWR5IHNlZS4gR29vZC5cblxuQ29uZmlncyByZXF1aXJlZCBhcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX0pJVGAuIEVhc3kgdG8gdmVyaWZ5LiBga2VybmVsL2JwZi92ZXJpZmllci5jYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYXMgZXhwZWN0ZWQuXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWdzIHJlbGF0aW5nIHRvIEJQRiBpdGVyYXRvcnM7IGxldCBtZSBncmVwIGZvciBgYnBmX2l0ZXJfbnVtX25ld2AgdG8gY2hlY2sgaWYgaXQgZGVwZW5kcyBvbiBhbnl0aGluZy4gVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYGtlcm5lbC9icGYvYnBmX2l0ZXIuY2AsIHNvIEkgc2hvdWxkIGNoZWNrIHRoZSBNYWtlZmlsZSBvciBLY29uZmlnIGZvciB0aGF0IGRpcmVjdG9yeS4gR29vZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlncyByaWdodC5cblxuTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGVzZSB2YWx1ZXMuIEkgY2FuIHNlZSBob3cgdGhpcyBhbGwgY29ubmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTQ6MTU6NDcuMjY2ODUwNzc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDAwMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pdGVyX251bV9uZXdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9icGZfaXRlci5jPTc2OD1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc2OS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NzcwOl9fYnBmX2tmdW5jIGludCBicGZfaXRlcl9udW1fbmV3KHN0cnVjdCBicGZfaXRlcl9udW0gKml0LCBpbnQgc3RhcnQsIGludCBlbmQpXFxua2VybmVsL2JwZi9icGZfaXRlci5jLTc3MS17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODg2PUJURl9JRF9GTEFHUyhmdW5jLCBicGZfZHlucHRyX3NsaWNlX3Jkd3IsIEtGX1JFVF9OVUxMKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4ODc6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX251bV9uZXcsIEtGX0lURVJfTkVXKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4ODgtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9pdGVyX251bV9uZXh0LCBLRl9JVEVSX05FWFQgfCBLRl9SRVRfTlVMTClcXG4tLVxcbmtlcm5lbC9icGYvc3RhdGVzLmM9MTExMz1zdGF0aWMgYm9vbCBzdGF0ZXNfbWF5YmVfbG9vcGluZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpvbGQsXFxuLS1cXG5rZXJuZWwvYnBmL3N0YXRlcy5jLTExODEtICpcXG5rZXJuZWwvYnBmL3N0YXRlcy5jOjExODI6ICogICBicGZfaXRlcl9udW1fbmV3KFxcdTAwMjZpdCwgMCwgMTApO1xcbmtlcm5lbC9icGYvc3RhdGVzLmMtMTE4My0gKiAgIHdoaWxlICgocCA9IGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZ0KSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NTk3PXN0YXRpYyBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqZ2V0X2l0ZXJfZnJvbV9zdGF0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRlICpjdXJfc3QsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY3MS0gKiAgICAgaW50IGkgPSAwLCBhID0gMDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzY3MjogKiAgICAgYnBmX2l0ZXJfbnVtX25ldyhcXHUwMDI2aXQsIDAsIDEwKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzY3My0gKiAgICAgd2hpbGUgKGJwZl9pdGVyX251bV9uZXh0KFxcdTAwMjZpdCkpIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTA2OD1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMTgtXFx0S0ZfYnBmX2xvY2FsX2lycV9yZXN0b3JlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTExOTpcXHRLRl9icGZfaXRlcl9udW1fbmV3LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEyMC1cXHRLRl9icGZfaXRlcl9udW1fbmV4dCxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIwNj1CVEZfSUQoZnVuYywgYnBmX2xvY2FsX2lycV9yZXN0b3JlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwNzpCVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX25ldylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDgtQlRGX0lEKGZ1bmMsIGJwZl9pdGVyX251bV9uZXh0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjkwPXN0YXRpYyBib29sIGlzX2JwZl9pdGVyX251bV9hcGlfa2Z1bmModTMyIGJ0Zl9pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2OTEte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTY5MjpcXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY5My1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV4dF0gfHxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjk2Mz1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTY1LS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTY2OiAqIGJwZl9pdGVyX251bV9uZXcoKSBjYW4gYmUgaW5saW5lZCBtb3JlIHRpZ2h0bHkgd2hlbiBpdHMgc3RhcnQgYW5kIGVuZCBhcmd1bWVudHMgYXJlIGNvbnN0YW50LFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk2Ny0gKiBhcyB0aGUgcmFuZ2UgY2hlY2tzIGFuZCB0aGVpciBlcnJvciBwYXRocyBjYW4gdGhlbiBiZSByZXNvbHZlZCBhdCByZXdyaXRlIHRpbWUuIFJlY29yZCwgcGVyXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5NzA9c3RhdGljIGludCB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTcxLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5NzI6XFx0c3RydWN0IGJwZl9pdGVyX251bV9uZXdfc3RhdGUgKnN0YXRlID0gXFx1MDAyNmN1cl9hdXgoZW52KS1cXHUwMDNlaXRlcl9udW1fbmV3X3N0YXRlO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk3My1cXHRzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqc3RhcnRfcmVnID0gXFx1MDAyNmN1cl9yZWdzKGVudilbQlBGX1JFR18yXTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMzAwNj1zdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMjA2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzIwNzpcXHRpZiAobWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfaXRlcl9udW1fbmV3XSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzIwOC1cXHRcXHRlcnIgPSB1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlKGVudik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4MDM9c3RhdGljIHZvaWQgX19maXh1cF9jb2xsZWN0aW9uX2luc2VydF9rZnVuYyhzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODIwLS8qXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODIxOiAqIElubGluZSBicGZfaXRlcl9udW1fbmV3KCkuIFIxIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBpdGVyYXRvciwgUjIgYW5kIFIzIGhvbGQgdGhlIChpbnQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODIyLSAqIHN0YXJ0IGFuZCBlbmQgYXJndW1lbnRzLiBLZWVwIGluIHN5bmMgd2l0aCB0aGUga2Z1bmMgaW4ga2VybmVsL2JwZi9icGZfaXRlci5jLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTgyMy0gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4MjQ6c3RhdGljIGludCBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmLCBzdHJ1Y3QgYnBmX2l0ZXJfbnVtX25ld19zdGF0ZSAqc3RhdGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODI1LXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTkyMz1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMDUxLVxcdFxcdCpjbnQgPSA2O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDA1MjpcXHR9IGVsc2UgaWYgKGRlc2MtXFx1MDAzZWZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9pdGVyX251bV9uZXddKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMDUzOlxcdFxcdCpjbnQgPSBpbmxpbmVfYnBmX2l0ZXJfbnVtX25ldyhpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAwNTQtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLml0ZXJfbnVtX25ld19zdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE0OjE1OjQ3LjMzMzg1NjA5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjc2ODgxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIFZlcmlmaWVyIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbiBvcHRpbWl6YXRpb24gdG8gdGhlIEJQRiB2ZXJpZmllci4gSXQncyBpbmxpbmluZyBgYnBmX2l0ZXJfbnVtX25ld2AsIGBicGZfaXRlcl9udW1fbmV4dGAsIGFuZCBgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgLiBUaGF0IHNlZW1zIHByZXR0eSBzb2xpZCBmcm9tIGEgZnVuY3Rpb25hbGl0eSBzdGFuZHBvaW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJZZXAsIHRoaXMgYWJzb2x1dGVseSBuZWVkcyBmdXp6aW5nLlwiIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbmxpbmluZyBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIGlzc3VlcywgZXNwZWNpYWxseSBhcm91bmQgZWRnZSBjYXNlcy5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBgYnBmX2ZpeHVwX2tmdW5jX2NhbGxgIGFuZCBgY2hlY2tfa2Z1bmNfY2FsbGAgZnVuY3Rpb25zLiBUaG9zZSBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIFNpbmNlIHRoZSBpbmxpbmluZyBmdW5jdGlvbnMsIGxpa2UgYHVwZGF0ZV9pdGVyX251bV9uZXdfc3RhdGVgLCBgaW5saW5lX2JwZl9pdGVyX251bV9uZXdgLCBgaW5saW5lX2JwZl9pdGVyX251bV9uZXh0YCwgYW5kIGBpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lgLCBhcmUgc3RhdGljLCBJIHNob3VsZCBwcm9iYWJseSBrZWVwIGBicGZfZml4dXBfa2Z1bmNfY2FsbGAgYW5kIGBjaGVja19rZnVuY19jYWxsYCBvbiB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIGtleSByZXF1aXJlbWVudCBoZXJlLiBJ4oCZbGwgbWFrZSBzdXJlIHRoYXQgaXMgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJIGtub3cgYEJQRl9KSVRgIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgQlBGLCBzbyBJJ2xsIGtlZXAgdGhhdCBpbiBtaW5kLCBidXQgYEJQRl9TWVNDQUxMYCBzZWVtcyB0byBiZSB0aGUgY29yZSByZXF1aXJlbWVudC5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIHByb2NlZWQuIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc0NSwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTQ6MTU6NTQuNTAxNTQ2NTkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTc5MzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZml4dXBfa2Z1bmNfY2FsbFwiLFxuICAgIFwiY2hlY2tfa2Z1bmNfY2FsbFwiLFxuICAgIFwidXBkYXRlX2l0ZXJfbnVtX25ld19zdGF0ZVwiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9uZXdcIixcbiAgICBcImlubGluZV9icGZfaXRlcl9udW1fbmV4dFwiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9kZXN0cm95XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBpbmxpbmUgYnBmX2l0ZXJfbnVtX25ldywgYnBmX2l0ZXJfbnVtX25leHQsIGFuZCBicGZfaXRlcl9udW1fZGVzdHJveSBrZnVuY3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgb3B0aW1pemVzIHRoZSBleGVjdXRpb24gb2YgdGhlc2Uga2Z1bmNzIGFuZCBjYW4gYmUgcmVhY2hlZCBieSBsb2FkaW5nIEJQRiBwcm9ncmFtcyBmcm9tIHVzZXJzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9maXh1cF9rZnVuY19jYWxsXCIsXG4gICAgXCJjaGVja19rZnVuY19jYWxsXCIsXG4gICAgXCJ1cGRhdGVfaXRlcl9udW1fbmV3X3N0YXRlXCIsXG4gICAgXCJpbmxpbmVfYnBmX2l0ZXJfbnVtX25ld1wiLFxuICAgIFwiaW5saW5lX2JwZl9pdGVyX251bV9uZXh0XCIsXG4gICAgXCJpbmxpbmVfYnBmX2l0ZXJfbnVtX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGlubGluZSBicGZfaXRlcl9udW1fbmV3LCBicGZfaXRlcl9udW1fbmV4dCwgYW5kIGJwZl9pdGVyX251bV9kZXN0cm95IGtmdW5jcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBCUEYgdmVyaWZpZXIgdGhhdCBvcHRpbWl6ZXMgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBrZnVuY3MgYW5kIGNhbiBiZSByZWFjaGVkIGJ5IGxvYWRpbmcgQlBGIHByb2dyYW1zIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workfloww4q6j[1] Phase: Succeeded StartedAt: 2026-07-23 14:16:05 +0000 UTC FinishedAt: 2026-07-23 14:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 14:16:05 +0000 UTC FinishedAt: 2026-07-23 14:16:05 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2] Phase: Running StartedAt: 2026-07-23 14:16:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-23 14:16:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:16:05 +0000 UTC FinishedAt: 2026-07-23 14:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:16:05 +0000 UTC FinishedAt: 2026-07-23 14:16:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4q6j/series-workfloww4q6j-convert-artifact-3463855705/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:16:15 +0000 UTC FinishedAt: 2026-07-23 14:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:16:15 +0000 UTC FinishedAt: 2026-07-23 14:55:39 +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:*7dbcca4d-1281-4d02-9ead-9e1b48ac5e57,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-workfloww4q6j/series-workfloww4q6j-convert-artifact-3463855705/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": "09a3d17f-dc34-4f1a-89e8-5c836138d36a", "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-workfloww4q6j/series-workfloww4q6j-build-action-166354679/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:16:15 +0000 UTC FinishedAt: 2026-07-23 14:55:29 +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:*7dbcca4d-1281-4d02-9ead-9e1b48ac5e57,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-workfloww4q6j/series-workfloww4q6j-convert-artifact-3463855705/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": "09a3d17f-dc34-4f1a-89e8-5c836138d36a", "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-workfloww4q6j/series-workfloww4q6j-build-action-166354679/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:55:39 +0000 UTC FinishedAt: 2026-07-23 14:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:55:39 +0000 UTC FinishedAt: 2026-07-23 14:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:55:39 +0000 UTC FinishedAt: 2026-07-23 14:55:49 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:55:39 +0000 UTC FinishedAt: 2026-07-23 14:55:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-workfloww4q6j/series-workfloww4q6j-convert-artifact-448526892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:55:49 +0000 UTC FinishedAt: 2026-07-23 14:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:55:49 +0000 UTC FinishedAt: 2026-07-23 14:57:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*09a3d17f-dc34-4f1a-89e8-5c836138d36a,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-workfloww4q6j/series-workfloww4q6j-build-action-166354679/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-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:58:01 +0000 UTC FinishedAt: 2026-07-23 14:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:58:01 +0000 UTC FinishedAt: 2026-07-23 14:58:01 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:58:01 +0000 UTC FinishedAt: 2026-07-23 15:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:58:01 +0000 UTC FinishedAt: 2026-07-23 15:43:27 +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:*7dbcca4d-1281-4d02-9ead-9e1b48ac5e57,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-workfloww4q6j/series-workfloww4q6j-convert-artifact-448526892/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": "88fcb1ed-c398-4194-8677-8b8ac7162b24", "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-workfloww4q6j/series-workfloww4q6j-build-action-2279440584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 14:58:01 +0000 UTC FinishedAt: 2026-07-23 15:43:17 +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:*7dbcca4d-1281-4d02-9ead-9e1b48ac5e57,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-workfloww4q6j/series-workfloww4q6j-convert-artifact-448526892/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": "88fcb1ed-c398-4194-8677-8b8ac7162b24", "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-workfloww4q6j/series-workfloww4q6j-build-action-2279440584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:43:27 +0000 UTC FinishedAt: 2026-07-23 15:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:43:27 +0000 UTC FinishedAt: 2026-07-23 15:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:43:27 +0000 UTC FinishedAt: 2026-07-23 15:45:27 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:43:27 +0000 UTC FinishedAt: 2026-07-23 15:45:18 +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:*88fcb1ed-c398-4194-8677-8b8ac7162b24,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-workfloww4q6j/series-workfloww4q6j-build-action-2279440584/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-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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: Running StartedAt: 2026-07-23 15:45:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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: Running StartedAt: 2026-07-23 15:45:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*09a3d17f-dc34-4f1a-89e8-5c836138d36a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*88fcb1ed-c398-4194-8677-8b8ac7162b24,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-workfloww4q6j/series-workfloww4q6j-build-action-166354679/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-workfloww4q6j/series-workfloww4q6j-build-action-2279440584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:45:27 +0000 UTC FinishedAt: 2026-07-23 15:45:37 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:45:27 +0000 UTC FinishedAt: 2026-07-23 15:45:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4q6j/series-workfloww4q6j-convert-artifact-792491797/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:45:27 +0000 UTC FinishedAt: 2026-07-23 15:45:27 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:45:27 +0000 UTC FinishedAt: 2026-07-23 15:45:27 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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-23 15:45:27 +0000 UTC FinishedAt: 2026-07-23 15:45:27 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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: Running StartedAt: 2026-07-23 15:45:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4q6j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_fixup_kfunc_call","check_kfunc_call","update_iter_num_new_state","inline_bpf_iter_num_new","inline_bpf_iter_num_next","inline_bpf_iter_num_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a23a71823352e2d792dcaae25f1ebb744acbfc0b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a9eaa282-a008-4d81-b0dd-131344e2667d","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: Running StartedAt: 2026-07-23 15:45:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*09a3d17f-dc34-4f1a-89e8-5c836138d36a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*88fcb1ed-c398-4194-8677-8b8ac7162b24,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-workfloww4q6j/series-workfloww4q6j-build-action-166354679/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-workfloww4q6j/series-workfloww4q6j-build-action-2279440584/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-workfloww4q6j/series-workfloww4q6j-convert-artifact-792491797/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil