Name: series-workflowl967v Phase: Succeeded StartedAt: 2026-07-11 23:10:39 +0000 UTC FinishedAt: 2026-07-12 04:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[0] Phase: Succeeded StartedAt: 2026-07-11 23:10:40 +0000 UTC FinishedAt: 2026-07-11 23:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 23:10:40 +0000 UTC FinishedAt: 2026-07-11 23:42:33 +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": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "a09753dc-9a03-43f5-9cc7-aa147f64d983" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_blind_constants", "bpf_prog_jit_compile", "bpf_jit_subprogs", "bpf_clear_insn_aux_data", "verifier_remove_insns", "adjust_insn_aux_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2JsaW5kX2NvbnN0YW50cyYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2JwZl9jbGVhcl9pbnNuX2F1eF9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDthZGp1c3RfaW5zbl9hdXhfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgZm9yIGJsaW5kaW5nIGNvbnN0YW50cyBhbmQgbWFuYWdpbmcgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEgKGBpbnNuX2F1eF9kYXRhYCkuIEl0IGNoYW5nZXMgaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIGJsaW5kaW5nIGFuZCBmaXhlcyBtZW1vcnkgbWFuYWdlbWVudCBvZiBhdXhpbGlhcnkgZGF0YSB3aGVuIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBsb2dpYyBlcnJvcnMgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIzOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTc5MTdhODBjODVmNTc1MWU2ODMwYmY0MjU0NmEwYTQ3NTQwNjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDIzOjQwOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzMTdlOTliOWFjYzBhNC4uYzk4ZWM5ZGU1YmE2ZWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtOTQ4LDYgJiM0Mzs5NDgsNyBAQCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7XG4gXHRib29sIHNlZW5fZGlyZWN0X3dyaXRlO1xuIFx0Ym9vbCBzZWVuX2V4Y2VwdGlvbjtcbiBcdGJvb2wgc2lnbmF0dXJlO1xuJiM0MztcdHUzMiBpbnNuX2F1eF9kYXRhX2xlbjtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXhfZGF0YTsgLyogYXJyYXkgb2YgcGVyLWluc24gc3RhdGUgKi9cbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluZV9pbmZvICpwcmV2X2xpbmZvO1xuIFx0c3RydWN0IGJwZl92ZXJpZmllcl9sb2cgbG9nO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMjMyYzAyMDMxZmVjYmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTIxMSwyNSAmIzQzOzEyMTEsMTIgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9zaW5nbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7XG4tc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG4tdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcbiB9XG4tXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLXtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcbi17XG4tfVxuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbiBpbnQgYnBmX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBjbnQpO1xuQEAgLTEzNjgsNyAmIzQzOzEzNTUsOCBAQCBpbnQgYnBmX2ppdF9nZXRfZnVuY19hZGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcbiBjb25zdCBjaGFyICpicGZfaml0X2dldF9wcm9nX25hbWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiBcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4mIzQzO2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpO1xuIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcik7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuQEAgLTE1MjAsOSAmIzQzOzE1MDgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpXG4ge1xuLVx0cmV0dXJuIHByb2c7XG4mIzQzO1x0KmNsb25lZCA9IGZhbHNlO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCA0N2ZlMDQ3YWQzMGI4OC4uMGE4MDcyZjU5Nzg5NTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTUyLDI3ICYjNDM7MTU1MiwzNCBAQCB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpXG4gICogTm93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIGJsaW5kIHRoZSBtYWluIHByb2cgYW5kIG11c3QgYmUgaW52b2tlZCBvbmx5IHdoZW5cbiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLlxuICAqL1xuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXG4mIzQzO1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZywgKnRtcDtcbiBcdGludCBpbnNuX2RlbHRhLCBpbnNuX2NudDtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcbiBcdGludCBpLCByZXdyaXR0ZW47XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gcHJvZykpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcdCpjbG9uZWQgPSBmYWxzZTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gKnBwcm9nKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Y2xvbmUgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUocHJvZywgR0ZQX1VTRVIpO1xuLVx0aWYgKCFjbG9uZSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZztcbiYjNDM7XHQvKiBvbmx5IGNsb25lIHRoZSBwcm9nIHdoZW4gd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgKi9cbiYjNDM7XHRpZiAoY2xvbmVfbmVlZGVkKSB7XG4mIzQzO1x0XHRwcm9nID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKG9yaWdfcHJvZywgR0ZQX1VTRVIpO1xuJiM0MztcdFx0aWYgKCFwcm9nKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXG4tXHRpZiAoZW52KVxuLVx0XHRlbnYtXHUwMDNlcHJvZyA9IGNsb25lO1xuJiM0MztcdFx0KmNsb25lZCA9IHRydWU7XG4mIzQzO1x0XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xuJiM0MztcdFx0aWYgKGVudilcbiYjNDM7XHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nO1xuJiM0MztcdH1cbiBcbi1cdGluc25fY250ID0gY2xvbmUtXHUwMDNlbGVuO1xuLVx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaTtcbiYjNDM7XHRpbnNuX2NudCA9IHByb2ctXHUwMDNlbGVuO1xuJiM0MztcdGluc24gPSBwcm9nLVx1MDAzZWluc25zaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkge1xuQEAgLTE1OTMsNDIgJiM0MzsxNjAwLDQ5IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXG4gXHRcdCAgICBpbnNuWzFdLmNvZGUgPT0gMClcbiBcdFx0XHRtZW1jcHkoYXV4LCBpbnNuLCBzaXplb2YoYXV4KSk7XG4gXG4tXHRcdHJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZixcbi1cdFx0XHRcdFx0XHRjbG9uZS1cdTAwM2VhdXgtXHUwMDNldmVyaWZpZXJfemV4dCk7XG4mIzQzO1x0XHRyZXdyaXR0ZW4gPSBicGZfaml0X2JsaW5kX2luc24oaW5zbiwgYXV4LCBpbnNuX2J1ZmYsIHByb2ctXHUwMDNlYXV4LVx1MDAzZXZlcmlmaWVyX3pleHQpO1xuIFx0XHRpZiAoIXJld3JpdHRlbilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGVudilcbiBcdFx0XHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFx0XHRlbHNlXG4tXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKGNsb25lLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4mIzQzO1x0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG4gXHRcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XG4tXHRcdFx0aWYgKGVudilcbi1cdFx0XHRcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cbi1cdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbi1cdFx0XHQvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LVx1MDAzZXByb2cgZHVyaW5nXG4tXHRcdFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cbi1cdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XG4tXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRcdFx0aWYgKCpjbG9uZWQpIHtcbiYjNDM7XHRcdFx0XHQvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi9cbiYjNDM7XHRcdFx0XHQqcHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHRcdFx0aWYgKGVudilcbiYjNDM7XHRcdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xuJiM0MztcdFx0XHRcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXHUwMDNlcHJvZyBkdXJpbmdcbiYjNDM7XHRcdFx0XHQgKiByZWFsbG9jIGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgc28gd2UgbmVlZCB0b1xuJiM0MztcdFx0XHRcdCAqIGZpeCBpdCB1cCBoZXJlIG9uIGVycm9yLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xuJiM0MztcdFx0XHRcdCpwcHJvZyA9IHByb2c7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcbiBcdFx0fVxuIFxuLVx0XHRjbG9uZSA9IHRtcDtcbiYjNDM7XHRcdHByb2cgPSB0bXA7XG4gXHRcdGluc25fZGVsdGEgPSByZXdyaXR0ZW4gLSAxO1xuIFxuIFx0XHRpZiAoZW52KVxuLVx0XHRcdGVudi1cdTAwM2Vwcm9nID0gY2xvbmU7XG4mIzQzO1x0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbiBcbiBcdFx0LyogV2FsayBuZXcgcHJvZ3JhbSBhbmQgc2tpcCBpbnNucyB3ZSBqdXN0IGluc2VydGVkLiAqL1xuLVx0XHRpbnNuID0gY2xvbmUtXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgaW5zbl9kZWx0YTtcbiYjNDM7XHRcdGluc24gPSBwcm9nLVx1MDAzZWluc25zaSAmIzQzOyBpICYjNDM7IGluc25fZGVsdGE7XG4gXHRcdGluc25fY250ICYjNDM7PSBpbnNuX2RlbHRhO1xuIFx0XHRpICAgICAgICAmIzQzOz0gaW5zbl9kZWx0YTtcbiBcdH1cbiBcbi1cdGNsb25lLVx1MDAzZWJsaW5kZWQgPSAxO1xuLVx0cmV0dXJuIGNsb25lO1xuJiM0MztcdHByb2ctXHUwMDNlYmxpbmRlZCA9IDE7XG4mIzQzO1x0KnBwcm9nID0gcHJvZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIGJvb2wgYnBmX2luc25faXNfaW5kaXJlY3RfdGFyZ2V0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbkBAIC0yNjE4LDQ5ICYjNDM7MjYzMiwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcbiBcdHJldHVybiBzZWxlY3RfaW50ZXJwcmV0ZXI7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIGppdF9uZWVkZWQpXG4ge1xuICNpZmRlZiBDT05GSUdfQlBGX0pJVFxuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuIFxuIFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxuIFx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuIFxuLVx0aWYgKGVudikge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXG4tXHRcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcbi1cdFx0ICogb24gZmFpbHVyZS5cbi1cdFx0ICovXG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KVxuLVx0XHRcdHJldHVybiBwcm9nO1xuLVx0fVxuLVxuIFx0b3JpZ19wcm9nID0gcHJvZztcbi1cdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0Lypcbi1cdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxuLVx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXG4tXHQgKi9cbi1cdGlmIChJU19FUlIocHJvZykpXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4mIzQzO1x0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhaml0X25lZWRlZCwgXHUwMDI2Y2xvbmVkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi1cdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbi1cdFx0aWYgKGVudilcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0cmV0dXJuIHByb2c7XG4mIzQzO1x0aWYgKGNsb25lZCkge1xuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbiYjNDM7XHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4mIzQzO1x0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuLVxuLW91dF9yZXN0b3JlOlxuLVx0cHJvZyA9IG9yaWdfcHJvZztcbi1cdGlmIChlbnYpXG4tXHRcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcbiYjNDM7b3V0OlxuICNlbmRpZlxuIFx0cmV0dXJuIHByb2c7XG4gfVxuQEAgLTI2OTAsNyAmIzQzOzI2ODgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XG4gXHRcdGlmICgqZXJyKVxuIFx0XHRcdHJldHVybiBmcDtcbiBcbi1cdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcbiYjNDM7XHRcdGZwID0gYnBmX3Byb2dfaml0X2NvbXBpbGUoZW52LCBmcCwgaml0X25lZWRlZCk7XG4gXHRcdGJwZl9wcm9nX2ppdF9hdHRlbXB0X2RvbmUoZnApO1xuIFx0XHRpZiAoIWZwLVx1MDAzZWppdGVkIFx1MDAyNlx1MDAyNiBqaXRfbmVlZGVkKSB7XG4gXHRcdFx0KmVyciA9IC1FTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggZDNiZTk3MjcxNGIyMmMuLjgwYzhiZWI0NWVhMDQ0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTE3NCw2ICYjNDM7MTc0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmIChjbnQgPT0gMSlcbiBcdFx0cmV0dXJuO1xuIFx0cHJvZ19sZW4gPSBuZXdfcHJvZy1cdTAwM2VsZW47XG4mIzQzO1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gcHJvZ19sZW47XG4gXG4gXHRtZW1tb3ZlKGRhdGEgJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEsIGRhdGEgJiM0Mzsgb2ZmLFxuIFx0XHRzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSAqIChwcm9nX2xlbiAtIG9mZiAtIGNudCAmIzQzOyAxKSk7XG5AQCAtNDQwLDcgJiM0Mzs0NDEsNiBAQCBzdGF0aWMgaW50IGJwZl9hZGpfbGluZm9fYWZ0ZXJfcmVtb3ZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXhfZGF0YSA9IGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhO1xuLVx0c3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbiBcdGludCBlbmQgPSBzdGFydCAmIzQzOyBsZW47XG4gXHRpbnQgaTtcbiBcbkBAIC00NDksOSAmIzQzOzQ0OSw2IEBAIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxuIFx0XHRcdGt2ZnJlZShhdXhfZGF0YVtpXS5qdCk7XG4gXHRcdFx0YXV4X2RhdGFbaV0uanQgPSBOVUxMO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChicGZfaXNfbGRpbW02NChcdTAwMjZpbnNuc1tpXSkpXG4tXHRcdFx0aSYjNDM7JiM0Mzs7XG4gXHR9XG4gfVxuIFxuQEAgLTQ2NCw3ICYjNDM7NDYxLDYgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSlcbiBcdFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XG4gXG4tXHQvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBicGZfcmVtb3ZlX2luc25zLCBhcyBpdCB1c2VzIHByb2ctXHUwMDNlaW5zbnNpICovXG4gXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTtcbiBcbiBcdGVyciA9IGJwZl9yZW1vdmVfaW5zbnMoZW52LVx1MDAzZXByb2csIG9mZiwgY250KTtcbkBAIC00ODMsNiAmIzQzOzQ3OSw3IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4gXG4gXHRtZW1tb3ZlKGF1eF9kYXRhICYjNDM7IG9mZixcdGF1eF9kYXRhICYjNDM7IG9mZiAmIzQzOyBjbnQsXG4gXHRcdHNpemVvZigqYXV4X2RhdGEpICogKG9yaWdfcHJvZ19sZW4gLSBvZmYgLSBjbnQpKTtcbiYjNDM7XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4gLT0gY250O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk5OSwzMiAmIzQzOzk5NiwxNCBAQCBzdGF0aWMgdTMyICpicGZfZHVwX3N1YnByb2dfc3RhcnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gc3RhdGljIHZvaWQgYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyICpvcmlnX3N0YXJ0cylcbiB7XG4mIzQzO1x0aWYgKCFvcmlnX3N0YXJ0cylcbiYjNDM7XHRcdHJldHVybjtcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBlbnYtXHUwMDNlc3VicHJvZ19jbnQ7IGkmIzQzOyYjNDM7KVxuIFx0XHRlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0ID0gb3JpZ19zdGFydHNbaV07XG4gXHQvKiByZXN0b3JlIHRoZSBzdGFydCBvZiBmYWtlICYjMzk7ZXhpdCYjMzk7IHN1YnByb2cgYXMgd2VsbCAqL1xuIFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tlbnYtXHUwMDNlc3VicHJvZ19jbnRdLnN0YXJ0ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIH1cbiBcbi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLXtcbi1cdHNpemVfdCBzaXplO1xuLVx0dm9pZCAqbmV3X2F1eDtcbi1cbi1cdHNpemUgPSBhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4pO1xuLVx0bmV3X2F1eCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKG5ld19hdXgpXG4tXHRcdG1lbWNweShuZXdfYXV4LCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSwgc2l6ZSk7XG4tXHRyZXR1cm4gbmV3X2F1eDtcbi19XG4tXG4tdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcbi17XG4tXHQvKiB0aGUgZXhwYW5kZWQgZWxlbWVudHMgYXJlIHplcm8tZmlsbGVkLCBzbyBubyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkICovXG4tXHR2ZnJlZShlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSk7XG4tXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSA9IG9yaWdfaW5zbl9hdXg7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2csICoqZnVuYywgKnRtcDtcbkBAIC0xMjk2LDU3ICYjNDM7MTI3NSw0NyBAQCBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0aW50IGVyciwgaTtcbi1cdGJvb2wgYmxpbmRlZCA9IGZhbHNlO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuO1xuIFx0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuLVx0dTMyICpvcmlnX3N1YnByb2dfc3RhcnRzO1xuJiM0MztcdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChlbnYtXHUwMDNlc3VicHJvZ19jbnQgXHUwMDNjPSAxKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHByb2cgPSBvcmlnX3Byb2cgPSBlbnYtXHUwMDNlcHJvZztcbiBcdGlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7XG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KSB7XG4tXHRcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuLVx0XHR9XG4tXHRcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XG4tXHRcdGlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykge1xuLVx0XHRcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdFx0Z290byBvdXRfY2xlYW51cDtcbiYjNDM7XHRcdGlmICghcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbiYjNDM7XHRcdFx0b3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTtcbiYjNDM7XHRcdFx0aWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbi1cdFx0cHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7XG4tXHRcdGlmIChJU19FUlIocHJvZykpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHRlcnIgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIFx1MDAyNnByb2csICFwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCwgXHUwMDI2Y2xvbmVkKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdFx0fVxuLVx0XHRibGluZGVkID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGVyciA9IGppdF9zdWJwcm9ncyhlbnYpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfaml0X2VycjtcbiBcbi1cdGlmIChibGluZGVkKSB7XG4mIzQzO1x0aWYgKGNsb25lZCkge1xuIFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpO1xuIFx0XHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4tXHRcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0X2ppdF9lcnI6XG4tXHRpZiAoYmxpbmRlZCkge1xuJiM0MztcdGlmIChjbG9uZWQpIHtcbiBcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcbi1cdFx0Lyogcm9sbCBiYWNrIHRvIHRoZSBjbGVhbiBvcmlnaW5hbCBwcm9nICovXG4mIzQzO1x0XHQvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuICBvcmlnaW5hbCBwcm9nICovXG4gXHRcdHByb2cgPSBlbnYtXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcbiBcdFx0Z290byBvdXRfcmVzdG9yZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChlcnIgIT0gLUVGQVVMVCkge1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFdlIHdpbGwgZmFsbCBiYWNrIHRvIGludGVycHJldGVyIG1vZGUgd2hlbiBlcnIgaXMgbm90IC1FRkFVTFQsIGJlZm9yZVxuIFx0XHRcdCAqIHRoYXQsIGluc24tXHUwMDNlb2ZmIGFuZCBpbnNuLVx1MDAzZWltbSBzaG91bGQgYmUgcmVzdG9yZWQgdG8gdGhlaXIgb3JpZ2luYWxcbkBAIC0xMzY0LDcgJiM0MzsxMzMzLDYgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBvdXRfcmVzdG9yZTpcbiBcdGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKGVudiwgb3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4tXHRicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKGVudiwgb3JpZ19pbnNuX2F1eCk7XG4gXHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4gb3V0X2NsZWFudXA6XG4gXHQvKiBjbGVhbnVwIG1haW4gcHJvZyB0byBiZSBpbnRlcnByZXRlZCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMDNlMjIwMmNjYTEzZDUuLjg1YjA1NTI5ZjEwN2E5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMDEwOCw3ICYjNDM7MjAxMDgsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdGlmICghaXNfcHJpdilcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZicGZfdmVyaWZpZXJfbG9jayk7XG4gXG4tXHRsZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4mIzQzO1x0bGVuID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGEgPVxuIFx0XHRfX3ZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgbGVuKSxcbiBcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuQEAgLTIwMzU0LDcgJiM0MzsyMDM1NCw3IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0cmVsZWFzZV9idGZzKGVudik7XG4gZXJyX2ZyZWVfZW52OlxuIFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhKVxuLVx0XHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbik7XG4gXHR2ZnJlZShlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSk7XG4gXHRrdmZyZWUoZW52LVx1MDAzZWZkX2FycmF5KTtcbiBcdGJwZl9zdGFja19saXZlbmVzc19mcmVlKGVudik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjM6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfYmxpbmRfY29uc3RhbnRzJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7YnBmX2NsZWFyX2luc25fYXV4X2RhdGEmIzM0OywKICAgICYjMzQ7dmVyaWZpZXJfcmVtb3ZlX2luc25zJiMzNDssCiAgICAmIzM0O2FkanVzdF9pbnNuX2F1eF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBmb3IgYmxpbmRpbmcgY29uc3RhbnRzIGFuZCBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKS4gSXQgY2hhbmdlcyBob3cgcHJvZ3JhbXMgYXJlIGNsb25lZCBkdXJpbmcgYmxpbmRpbmcgYW5kIGZpeGVzIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGFyZSByZW1vdmVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvZ2ljIGVycm9ycyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3OTE3YTgwYzg1ZjU3NTFlNjgzMGJmNDI1NDZhMGE0NzU0MDYwOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAyMzo0MDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IDMxN2U5OWI5YWNjMGE0Li5jOThlYzlkZTViYTZlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC05NDgsNiAmIzQzOzk0OCw3IEBAIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHsKIAlib29sIHNlZW5fZGlyZWN0X3dyaXRlOwogCWJvb2wgc2Vlbl9leGNlcHRpb247CiAJYm9vbCBzaWduYXR1cmU7CiYjNDM7CXUzMiBpbnNuX2F1eF9kYXRhX2xlbjsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4X2RhdGE7IC8qIGFycmF5IG9mIHBlci1pbnNuIHN0YXRlICovCiAJY29uc3Qgc3RydWN0IGJwZl9saW5lX2luZm8gKnByZXZfbGluZm87CiAJc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgbG9nOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggMTRhY2IyNDU1NzQ2ZmMuLjIzMmMwMjAzMWZlY2JiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTEyMTEsMjUgJiM0MzsxMjExLDEyIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fc2luZ2xlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7Ci1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTsKLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTsKIH0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCQkgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCkKLXsKLX0KICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KIAogaW50IGJwZl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgY250KTsKQEAgLTEzNjgsNyAmIzQzOzEzNTUsOCBAQCBpbnQgYnBmX2ppdF9nZXRfZnVuY19hZGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywKIAogY29uc3QgY2hhciAqYnBmX2ppdF9nZXRfcHJvZ19uYW1lKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7CiAKLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTsKJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csCiYjNDM7CQkJICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpOwogdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKTsKIAogc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQpAQCAtMTUyMCw5ICYjNDM7MTUwOCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiB9CiAKIHN0YXRpYyBpbmxpbmUKLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQomIzQzO2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZywKJiM0MzsJCQkgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZCkKIHsKLQlyZXR1cm4gcHJvZzsKJiM0MzsJKmNsb25lZCA9IGZhbHNlOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jCmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li4wYTgwNzJmNTk3ODk1NyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmMKQEAgLTE1NTIsMjcgJiM0MzsxNTUyLDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcikKICAqIE5vdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB0byBibGluZCB0aGUgbWFpbiBwcm9nIGFuZCBtdXN0IGJlIGludm9rZWQgb25seSB3aGVuCiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLgogICovCi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csCiYjNDM7CQkJICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpCiB7CiAJc3RydWN0IGJwZl9pbnNuIGluc25fYnVmZlsxNl0sIGF1eFsyXTsKLQlzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2cgKnByb2csICpvcmlnX3Byb2csICp0bXA7CiAJaW50IGluc25fZGVsdGEsIGluc25fY250OwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbjsKIAlpbnQgaSwgcmV3cml0dGVuOwogCi0JaWYgKFdBUk5fT05fT05DRShlbnYgJmFtcDsmYW1wOyBlbnYtJmd0O3Byb2cgIT0gcHJvZykpCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwkqY2xvbmVkID0gZmFsc2U7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoZW52ICZhbXA7JmFtcDsgZW52LSZndDtwcm9nICE9ICpwcHJvZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAotCWNsb25lID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKHByb2csIEdGUF9VU0VSKTsKLQlpZiAoIWNsb25lKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJcHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZzsKJiM0MzsJLyogb25seSBjbG9uZSB0aGUgcHJvZyB3aGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyICovCiYjNDM7CWlmIChjbG9uZV9uZWVkZWQpIHsKJiM0MzsJCXByb2cgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUob3JpZ19wcm9nLCBHRlBfVVNFUik7CiYjNDM7CQlpZiAoIXByb2cpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqLwotCWlmIChlbnYpCi0JCWVudi0mZ3Q7cHJvZyA9IGNsb25lOwomIzQzOwkJKmNsb25lZCA9IHRydWU7CiYjNDM7CQkvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqLwomIzQzOwkJaWYgKGVudikKJiM0MzsJCQllbnYtJmd0O3Byb2cgPSBwcm9nOwomIzQzOwl9CiAKLQlpbnNuX2NudCA9IGNsb25lLSZndDtsZW47Ci0JaW5zbiA9IGNsb25lLSZndDtpbnNuc2k7CiYjNDM7CWluc25fY250ID0gcHJvZy0mZ3Q7bGVuOwomIzQzOwlpbnNuID0gcHJvZy0mZ3Q7aW5zbnNpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKIAkJaWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkgewpAQCAtMTU5Myw0MiAmIzQzOzE2MDAsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnAKIAkJICAgIGluc25bMV0uY29kZSA9PSAwKQogCQkJbWVtY3B5KGF1eCwgaW5zbiwgc2l6ZW9mKGF1eCkpOwogCi0JCXJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZiwKLQkJCQkJCWNsb25lLSZndDthdXgtJmd0O3ZlcmlmaWVyX3pleHQpOwomIzQzOwkJcmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLCBwcm9nLSZndDthdXgtJmd0O3ZlcmlmaWVyX3pleHQpOwogCQlpZiAoIXJld3JpdHRlbikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChlbnYpCiAJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pOwogCQllbHNlCi0JCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTsKJiM0MzsJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUocHJvZywgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pOwogCiAJCWlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7Ci0JCQlpZiAoZW52KQotCQkJCS8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi8KLQkJCQllbnYtJmd0O3Byb2cgPSBwcm9nOwotCQkJLyogUGF0Y2hpbmcgbWF5IGhhdmUgcmVwb2ludGVkIGF1eC0mZ3Q7cHJvZyBkdXJpbmcKLQkJCSAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvCi0JCQkgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci4KLQkJCSAqLwotCQkJYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgY2xvbmUpOwotCQkJcmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJCQlpZiAoKmNsb25lZCkgewomIzQzOwkJCQkvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi8KJiM0MzsJCQkJKnBwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJCQlpZiAoZW52KQomIzQzOwkJCQkJZW52LSZndDtwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJCQkvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LSZndDtwcm9nIGR1cmluZwomIzQzOwkJCQkgKiByZWFsbG9jIGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgc28gd2UgbmVlZCB0bwomIzQzOwkJCQkgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJLyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqLwomIzQzOwkJCQkqcHByb2cgPSBwcm9nOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gSVNfRVJSKHRtcCkgPyBQVFJfRVJSKHRtcCkgOiAtRU5PTUVNOwogCQl9CiAKLQkJY2xvbmUgPSB0bXA7CiYjNDM7CQlwcm9nID0gdG1wOwogCQlpbnNuX2RlbHRhID0gcmV3cml0dGVuIC0gMTsKIAogCQlpZiAoZW52KQotCQkJZW52LSZndDtwcm9nID0gY2xvbmU7CiYjNDM7CQkJZW52LSZndDtwcm9nID0gcHJvZzsKIAogCQkvKiBXYWxrIG5ldyBwcm9ncmFtIGFuZCBza2lwIGluc25zIHdlIGp1c3QgaW5zZXJ0ZWQuICovCi0JCWluc24gPSBjbG9uZS0mZ3Q7aW5zbnNpICYjNDM7IGkgJiM0MzsgaW5zbl9kZWx0YTsKJiM0MzsJCWluc24gPSBwcm9nLSZndDtpbnNuc2kgJiM0MzsgaSAmIzQzOyBpbnNuX2RlbHRhOwogCQlpbnNuX2NudCAmIzQzOz0gaW5zbl9kZWx0YTsKIAkJaSAgICAgICAgJiM0Mzs9IGluc25fZGVsdGE7CiAJfQogCi0JY2xvbmUtJmd0O2JsaW5kZWQgPSAxOwotCXJldHVybiBjbG9uZTsKJiM0MzsJcHJvZy0mZ3Q7YmxpbmRlZCA9IDE7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBib29sIGJwZl9pbnNuX2lzX2luZGlyZWN0X3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCkBAIC0yNjE4LDQ5ICYjNDM7MjYzMiwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCkKIAlyZXR1cm4gc2VsZWN0X2ludGVycHJldGVyOwogfQogCi1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkJICAgICBib29sIGppdF9uZWVkZWQpCiB7CiAjaWZkZWYgQ09ORklHX0JQRl9KSVQKJiM0MzsJaW50IGVycjsKJiM0MzsJYm9vbCBjbG9uZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZzsKLQlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7CiAKIAlpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpCiAJCXJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7CiAKLQlpZiAoZW52KSB7Ci0JCS8qCi0JCSAqIElmIGVudiBpcyBub3QgTlVMTCwgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBlbmQgb2YgYnBmX2NoZWNrKCksIGF0IHRoaXMKLQkJICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZAotCQkgKiBvbiBmYWlsdXJlLgotCQkgKi8KLQkJb3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpOwotCQlpZiAoIW9yaWdfaW5zbl9hdXgpCi0JCQlyZXR1cm4gcHJvZzsKLQl9Ci0KIAlvcmlnX3Byb2cgPSBwcm9nOwotCXByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpOwotCS8qCi0JICogSWYgYmxpbmRpbmcgd2FzIHJlcXVlc3RlZCBhbmQgd2UgZmFpbGVkIGR1cmluZyBibGluZGluZywgd2UgbXVzdCBmYWxsCi0JICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuCi0JICovCi0JaWYgKElTX0VSUihwcm9nKSkKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCAmYW1wO3Byb2csICFqaXRfbmVlZGVkLCAmYW1wO2Nsb25lZCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAogCXByb2cgPSBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7Ci0JaWYgKHByb2ctJmd0O2ppdGVkKSB7Ci0JCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7Ci0JCWlmIChlbnYpCi0JCQl2ZnJlZShvcmlnX2luc25fYXV4KTsKLQkJcmV0dXJuIHByb2c7CiYjNDM7CWlmIChjbG9uZWQpIHsKJiM0MzsJCWlmIChwcm9nLSZndDtqaXRlZCkgewomIzQzOwkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiYjNDM7CQkJcHJvZyA9IG9yaWdfcHJvZzsKJiM0MzsJCX0KIAl9CiAKLQlicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpOwotCi1vdXRfcmVzdG9yZToKLQlwcm9nID0gb3JpZ19wcm9nOwotCWlmIChlbnYpCi0JCWJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTsKJiM0MztvdXQ6CiAjZW5kaWYKIAlyZXR1cm4gcHJvZzsKIH0KQEAgLTI2OTAsNyAmIzQzOzI2ODgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0CiAJCWlmICgqZXJyKQogCQkJcmV0dXJuIGZwOwogCi0JCWZwID0gYnBmX3Byb2dfaml0X2NvbXBpbGUoZW52LCBmcCk7CiYjNDM7CQlmcCA9IGJwZl9wcm9nX2ppdF9jb21waWxlKGVudiwgZnAsIGppdF9uZWVkZWQpOwogCQlicGZfcHJvZ19qaXRfYXR0ZW1wdF9kb25lKGZwKTsKIAkJaWYgKCFmcC0mZ3Q7aml0ZWQgJmFtcDsmYW1wOyBqaXRfbmVlZGVkKSB7CiAJCQkqZXJyID0gLUVOT1RTVVBQOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmMKaW5kZXggZDNiZTk3MjcxNGIyMmMuLjgwYzhiZWI0NWVhMDQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmMKQEAgLTE3NCw2ICYjNDM7MTc0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlpZiAoY250ID09IDEpCiAJCXJldHVybjsKIAlwcm9nX2xlbiA9IG5ld19wcm9nLSZndDtsZW47CiYjNDM7CWVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW4gPSBwcm9nX2xlbjsKIAogCW1lbW1vdmUoZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSwgZGF0YSAmIzQzOyBvZmYsCiAJCXNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpICogKHByb2dfbGVuIC0gb2ZmIC0gY250ICYjNDM7IDEpKTsKQEAgLTQ0MCw3ICYjNDM7NDQxLDYgQEAgc3RhdGljIGludCBicGZfYWRqX2xpbmZvX2FmdGVyX3JlbW92ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAogdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pCiB7CiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXhfZGF0YSA9IGVudi0mZ3Q7aW5zbl9hdXhfZGF0YTsKLQlzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gZW52LSZndDtwcm9nLSZndDtpbnNuc2k7CiAJaW50IGVuZCA9IHN0YXJ0ICYjNDM7IGxlbjsKIAlpbnQgaTsKIApAQCAtNDQ5LDkgJiM0Mzs0NDksNiBAQCB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbikKIAkJCWt2ZnJlZShhdXhfZGF0YVtpXS5qdCk7CiAJCQlhdXhfZGF0YVtpXS5qdCA9IE5VTEw7CiAJCX0KLQotCQlpZiAoYnBmX2lzX2xkaW1tNjQoJmFtcDtpbnNuc1tpXSkpCi0JCQlpJiM0MzsmIzQzOzsKIAl9CiB9CiAKQEAgLTQ2NCw3ICYjNDM7NDYxLDYgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAlpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi0mZ3Q7cHJvZy0mZ3Q7YXV4KSkKIAkJYnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7CiAKLQkvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBicGZfcmVtb3ZlX2luc25zLCBhcyBpdCB1c2VzIHByb2ctJmd0O2luc25zaSAqLwogCWJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgb2ZmLCBjbnQpOwogCiAJZXJyID0gYnBmX3JlbW92ZV9pbnNucyhlbnYtJmd0O3Byb2csIG9mZiwgY250KTsKQEAgLTQ4Myw2ICYjNDM7NDc5LDcgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAogCW1lbW1vdmUoYXV4X2RhdGEgJiM0Mzsgb2ZmLAlhdXhfZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250LAogCQlzaXplb2YoKmF1eF9kYXRhKSAqIChvcmlnX3Byb2dfbGVuIC0gb2ZmIC0gY250KSk7CiYjNDM7CWVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW4gLT0gY250OwogCiAJcmV0dXJuIDA7CiB9CkBAIC05OTksMzIgJiM0Mzs5OTYsMTQgQEAgc3RhdGljIHUzMiAqYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiBzdGF0aWMgdm9pZCBicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgKm9yaWdfc3RhcnRzKQogewomIzQzOwlpZiAoIW9yaWdfc3RhcnRzKQomIzQzOwkJcmV0dXJuOwogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgZW52LSZndDtzdWJwcm9nX2NudDsgaSYjNDM7JiM0MzspCiAJCWVudi0mZ3Q7c3VicHJvZ19pbmZvW2ldLnN0YXJ0ID0gb3JpZ19zdGFydHNbaV07CiAJLyogcmVzdG9yZSB0aGUgc3RhcnQgb2YgZmFrZSAmIzM5O2V4aXQmIzM5OyBzdWJwcm9nIGFzIHdlbGwgKi8KIAllbnYtJmd0O3N1YnByb2dfaW5mb1tlbnYtJmd0O3N1YnByb2dfY250XS5zdGFydCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogfQogCi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQotewotCXNpemVfdCBzaXplOwotCXZvaWQgKm5ld19hdXg7Ci0KLQlzaXplID0gYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgZW52LSZndDtwcm9nLSZndDtsZW4pOwotCW5ld19hdXggPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQlpZiAobmV3X2F1eCkKLQkJbWVtY3B5KG5ld19hdXgsIGVudi0mZ3Q7aW5zbl9hdXhfZGF0YSwgc2l6ZSk7Ci0JcmV0dXJuIG5ld19hdXg7Ci19Ci0KLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCkKLXsKLQkvKiB0aGUgZXhwYW5kZWQgZWxlbWVudHMgYXJlIHplcm8tZmlsbGVkLCBzbyBubyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkICovCi0JdmZyZWUoZW52LSZndDtpbnNuX2F1eF9kYXRhKTsKLQllbnYtJmd0O2luc25fYXV4X2RhdGEgPSBvcmlnX2luc25fYXV4OwotfQotCiBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCXN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi0mZ3Q7cHJvZywgKipmdW5jLCAqdG1wOwpAQCAtMTI5Niw1NyAmIzQzOzEyNzUsNDcgQEAgc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJaW50IGVyciwgaTsKLQlib29sIGJsaW5kZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc247CiAJc3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nOwotCXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eDsKLQl1MzIgKm9yaWdfc3VicHJvZ19zdGFydHM7CiYjNDM7CXUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IE5VTEw7CiYjNDM7CWJvb2wgY2xvbmVkID0gZmFsc2U7CiAKIAlpZiAoZW52LSZndDtzdWJwcm9nX2NudCAmbHQ7PSAxKQogCQlyZXR1cm4gMDsKIAogCXByb2cgPSBvcmlnX3Byb2cgPSBlbnYtJmd0O3Byb2c7CiAJaWYgKGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpIHsKLQkJb3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpOwotCQlpZiAoIW9yaWdfaW5zbl9hdXgpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9jbGVhbnVwOwotCQl9Ci0JCW9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7Ci0JCWlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykgewotCQkJdmZyZWUob3JpZ19pbnNuX2F1eCk7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfY2xlYW51cDsKJiM0MzsJCWlmICghcHJvZy0mZ3Q7aml0X3JlcXVpcmVkKSB7CiYjNDM7CQkJb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTsKJiM0MzsJCQlpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHsKJiM0MzsJCQkJZXJyID0gLUVOT01FTTsKJiM0MzsJCQkJZ290byBvdXRfY2xlYW51cDsKJiM0MzsJCQl9CiAJCX0KLQkJcHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7Ci0JCWlmIChJU19FUlIocHJvZykpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCAmYW1wO3Byb2csICFwcm9nLSZndDtqaXRfcmVxdWlyZWQsICZhbXA7Y2xvbmVkKTsKJiM0MzsJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9yZXN0b3JlOwotCQl9Ci0JCWJsaW5kZWQgPSB0cnVlOwogCX0KIAogCWVyciA9IGppdF9zdWJwcm9ncyhlbnYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ppdF9lcnI7CiAKLQlpZiAoYmxpbmRlZCkgewomIzQzOwlpZiAoY2xvbmVkKSB7CiAJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7CiAJCWt2ZnJlZShvcmlnX3N1YnByb2dfc3RhcnRzKTsKLQkJdmZyZWUob3JpZ19pbnNuX2F1eCk7CiAJfQogCiAJcmV0dXJuIDA7CiAKIG91dF9qaXRfZXJyOgotCWlmIChibGluZGVkKSB7CiYjNDM7CWlmIChjbG9uZWQpIHsKIAkJYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTsKLQkJLyogcm9sbCBiYWNrIHRvIHRoZSBjbGVhbiBvcmlnaW5hbCBwcm9nICovCiYjNDM7CQkvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuICBvcmlnaW5hbCBwcm9nICovCiAJCXByb2cgPSBlbnYtJmd0O3Byb2cgPSBvcmlnX3Byb2c7CiAJCWdvdG8gb3V0X3Jlc3RvcmU7CiAJfSBlbHNlIHsKLQkJaWYgKGVyciAhPSAtRUZBVUxUKSB7CiYjNDM7CQlpZiAoZXJyICE9IC1FRkFVTFQgJmFtcDsmYW1wOyAhcHJvZy0mZ3Q7aml0X3JlcXVpcmVkKSB7CiAJCQkvKgogCQkJICogV2Ugd2lsbCBmYWxsIGJhY2sgdG8gaW50ZXJwcmV0ZXIgbW9kZSB3aGVuIGVyciBpcyBub3QgLUVGQVVMVCwgYmVmb3JlCiAJCQkgKiB0aGF0LCBpbnNuLSZndDtvZmYgYW5kIGluc24tJmd0O2ltbSBzaG91bGQgYmUgcmVzdG9yZWQgdG8gdGhlaXIgb3JpZ2luYWwKQEAgLTEzNjQsNyAmIzQzOzEzMzMsNiBAQCBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiBvdXRfcmVzdG9yZToKIAlicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9yaWdfc3VicHJvZ19zdGFydHMpOwotCWJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTsKIAlrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7CiBvdXRfY2xlYW51cDoKIAkvKiBjbGVhbnVwIG1haW4gcHJvZyB0byBiZSBpbnRlcnByZXRlZCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDAzZTIyMDJjY2ExM2Q1Li44NWIwNTUyOWYxMDdhOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMjAxMDgsNyAmIzQzOzIwMTA4LDcgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsCiAJaWYgKCFpc19wcml2KQogCQltdXRleF9sb2NrKCZhbXA7YnBmX3ZlcmlmaWVyX2xvY2spOwogCi0JbGVuID0gZW52LSZndDtwcm9nLSZndDtsZW47CiYjNDM7CWxlbiA9IGVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW4gPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKIAllbnYtJmd0O2luc25fYXV4X2RhdGEgPQogCQlfX3ZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgbGVuKSwKIAkJCSAgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7CkBAIC0yMDM1NCw3ICYjNDM7MjAzNTQsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwKIAlyZWxlYXNlX2J0ZnMoZW52KTsKIGVycl9mcmVlX2VudjoKIAlpZiAoZW52LSZndDtpbnNuX2F1eF9kYXRhKQotCQlicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuKTsKJiM0MzsJCWJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgMCwgZW52LSZndDtpbnNuX2F1eF9kYXRhX2xlbik7CiAJdmZyZWUoZW52LSZndDtpbnNuX2F1eF9kYXRhKTsKIAlrdmZyZWUoZW52LSZndDtmZF9hcnJheSk7CiAJYnBmX3N0YWNrX2xpdmVuZXNzX2ZyZWUoZW52KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYzMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IHJhZGFyIGlzIHBpbmdpbmcuIFRoaXMgaXNuJiMzOTt0IHNvbWUgbWlub3IgdHdlYWs7IHRoaXMgaXMgdG91Y2hpbmcgdGhlIGhlYXJ0IG9mIEJQRiB2ZXJpZmllciBhbmQgSklUIGJsaW5kaW5nLCBzcGVjaWZpY2FsbHkgaG93IHdlIGhhbmRsZSBjbG9uaW5nIGFuZCBjb25zdGFudCBibGluZGluZy4gVGhleSYjMzk7dmUgY2hhbmdlZCBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgIHRvIHJldHVybiBhbiBgaW50YCBub3cgaW5zdGVhZCBvZiB0aGUgcHJvZ3JhbSBwb2ludGVyLCB3aGljaCBzZWVtcyBsaWtlIGEgc2lnbmlmaWNhbnQgc3RydWN0dXJhbCBzaGlmdCBpbiBob3cgaXQgYmVoYXZlcy4gVGhleSYjMzk7cmUgYWxzbyBtb2RpZnlpbmcgdGhlIGNsb25pbmcgYmVoYXZpb3IsIGhhbmRsaW5nIGl0IGRpZmZlcmVudGx5IGJhc2VkIG9uIGEgYGNsb25lX25lZWRlZGAgZmxhZywgd2hpY2ggaXMgdXNlZCBpbiBib3RoIGBicGZfcHJvZ19qaXRfY29tcGlsZWAgYW5kIGBicGZfaml0X3N1YnByb2dzYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaW5zbl9hdXhfZGF0YV9sZW5gIGFuZCBpdHMgdXNlIGluIGNsZWFyaW5nIGBpbnNuX2F1eF9kYXRhYCBpcyBhbHNvIGludGVyZXN0aW5nOyBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBjbGVhbiB1cCBob3cgdGhhdCBhdXhpbGlhcnkgZGF0YSBpcyBtYW5hZ2VkLiBBbmQgdGhlIHJlbW92YWwgb2YgdGhvc2UgYGR1cGAgYW5kIGByZXN0b3JlYCBmdW5jdGlvbnMgZm9yIHRoZSBhdXhpbGlhcnkgZGF0YSwgdGhhdCBoYXMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZTsgQlBGIGlzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbW9kZXJuIGtlcm5lbCBhbmQgZ2V0cyBhIGxvdCBvZiB1c2UuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IG1ham9yIG9uZSBhdCB0aGF0LCBzbyBpdCYjMzk7cyAqZGVmaW5pdGVseSogd29ydGggYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBXZeKAmXJlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbG9naWMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbjoKKiAgIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgLSBDbGVhcmx5LCBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzLgoqICAgYGJwZl9wcm9nX2ppdF9jb21waWxlYCAtIFRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgcGxheWVyIGluIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy4KKiAgIGBicGZfaml0X3N1YnByb2dzYCAtIEFub3RoZXIgSklUIGZ1bmN0aW9uLgoqICAgYGJwZl9jaGVja2AgLSBBbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmVyaWZpZXIgd2lsbCBiZSBjcml0aWNhbCwgYXMgdGhpcyB3aWxsIGhhdmUgYSBkaXJlY3QgaW1wYWN0LgoqICAgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgLSBIb3cgcmVtb3ZpbmcgQlBGIGluc3RydWN0aW9ucyBwbGF5cyB3aXRoIGF1eGlsaWFyeSBkYXRhIG5lZWRzIHRvIGJlIGV4YW1pbmVkLgoqICAgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCAtIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgZGF0YSBjbGVhcmluZyBjaGFuZ2VzLgoKRmluYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBCUEYgSklULCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5LiBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB3aXRoIGEgZ3JlcCBjb21tYW5kIGluIHRoZSByZXBvc2l0b3J5LiBHb3R0YSBtYWtlIHN1cmUgdGhvc2Ugc2V0dGluZ3MgYXJlIGFjdGl2ZSBmb3IgcmVsZXZhbnQgdGVzdCBjYXNlcy4gTm93LCBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBkZWVwZXIgYW5kIGZpbmQgd2hhdCB0aGVzZSBjaGFuZ2VzIGFyZSBhY3R1YWxseSB0cnlpbmcgdG8gYWNoaWV2ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEpJVCBCbGluZGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbXBhY3Qgb2YgdGhlc2Ugb24gdGhlIEJQRiBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCB3aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlLgoKSSBzZWUgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQ6IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfcHJvZ19qaXRfY29tcGlsZWAsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCwgYGFkanVzdF9pbnNuX2F1eF9kYXRhYCwgYW5kIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgaXMgdXNlZC4KClJpZ2h0LCBJIHNlZS4gYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCBnZXRzIGNhbGxlZCB3aGVuIGBicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpYCByZXR1cm5zIHRydWUuIFRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGNoZWNrcyBpZiBgYnBmX2ppdF9ibGluZGluZ2AgaXMgZW5hYmxlZC4gQWgsIGBicGZfaml0X2JsaW5kaW5nYCBpcyBhIHN5c2N0bC4gVGhhdCYjMzk7cyBrZXkuIEl0JiMzOTtzIGEgc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGljdGF0ZXMgd2hldGhlciB0aGlzIGJsaW5kaW5nIGJlaGF2aW9yIGlzIGVuYWJsZWQuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBicGZfcHJvZ19uZWVkX2JsaW5kYCBmdW5jdGlvbiBpbiBkZXRhaWwsIGFuZCBhc3Nlc3MgaXRzIHJvbGUgaW4gdGhpcyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX25lZWRfYmxpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMzYwPXZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcik7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEzNjEtXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEzNjI6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzYzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTE1MDE9c3RhdGljIGlubGluZSB2b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbChzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTUwNC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTUwNTpzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE1MDYte1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTE1NDA9dm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE1NTItICogTm93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIGJsaW5kIHRoZSBtYWluIHByb2cgYW5kIG11c3QgYmUgaW52b2tlZCBvbmx5IHdoZW5cbmtlcm5lbC9icGYvY29yZS5jOjE1NTM6ICogYnBmX3Byb2dfbmVlZF9ibGluZCgpIHJldHVybnMgdHJ1ZS5cbmtlcm5lbC9icGYvY29yZS5jLTE1NTQtICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjYzNT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjY0Mi1cbmtlcm5lbC9icGYvY29yZS5jOjI2NDM6XHRpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQ0LVx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTI3NT1pbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTI4Ni1cdHByb2cgPSBvcmlnX3Byb2cgPSBlbnYtXHUwMDNlcHJvZztcbmtlcm5lbC9icGYvZml4dXBzLmM6MTI4NzpcdGlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyODgtXHRcdGlmICghcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTUxCgkJCQkJCQlvdXRwdXQ6IDIxMQoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIEJsaW5kaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZnJvbSB3aGF0IEkgZ2F0aGVyLCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyB3aXRoaW4gdGhlIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgZnVuY3Rpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYm90aCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9zdWJwcm9nc2AuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBgaW5zbl9hdXhfZGF0YWAgd2hlbiBKSVQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nIGFyZSBoYXBwZW5pbmcuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBzeW1ib2xzOiAgYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCwgbmF0dXJhbGx5LCBhbG9uZyB3aXRoIGBicGZfcHJvZ19qaXRfY29tcGlsZWAgYW5kIGBicGZfaml0X3N1YnByb2dzYCwgYXMgdGhleSYjMzk7cmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbG9naWMgdGhpcyBwYXRjaCBtb2RpZmllcy4gIEkmIzM5O20gYWxzbyBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhdXhpbGlhcnkgZGF0YSBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCBhbmQgYGFkanVzdF9pbnNuX2F1eF9kYXRhYCwgc2luY2UgdGhvc2Ugc2VlbSBsaWtlIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBBbHNvLCB0aGUgdmVyaWZpZXIgc2lkZSBvZiBpbnN0cnVjdGlvbiByZW1vdmFsIGluIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgIGlzIHJlbGV2YW50IGhlcmUuCgpUaGUgcGF0Y2gmIzM5O3MgaW1wYWN0IGFwcGVhcnMgdG8gYmUgb24gdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyIHRoZW1zZWx2ZXMuIFNwZWNpZmljYWxseSwgaG93IGNvbnN0YW50cyBhcmUgYmxpbmRlZCBhbmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YS4gVGhlIGNoYW5nZXMgdG91Y2ggaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIHRoZSBibGluZGluZyBwcm9jZXNzIGFuZCB0YWNrbGVzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gdGhlIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGdldCByZW1vdmVkLiBUaGVzZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHR3ZWFrcyB0byB0aGUgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSwgYW5kIGltcG9ydGFudGx5LCB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwuIFRoaXMgbWVhbnMgdGhhdCwgYWZ0ZXIgYWxsLCBhbnkgYnVncyBoZXJlIGNvdWxkIGJlIGV4cGxvaXRhYmxlLCBzbyBJJiMzOTttIHRoaW5raW5nIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGNhdGNoIGFueSBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3Igb3RoZXIgbG9naWMgZXJyb3JzLgoKSSBkaWQgYSBxdWljayBjaGVjaywgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9KSVRgIGFsb25lICppcyogc3VmZmljaWVudCBmb3IgYGJwZl9wcm9nX2ppdF9jb21waWxlYCB0byBkbyBhbnl0aGluZy4KCkFscmlnaHQsIEkmIzM5O2xsIHJlY29yZCB0aGVzZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfYmxpbmRfY29uc3RhbnRzJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7YnBmX2NsZWFyX2luc25fYXV4X2RhdGEmIzM0OywKICAgICYjMzQ7dmVyaWZpZXJfcmVtb3ZlX2luc25zJiMzNDssCiAgICAmIzM0O2FkanVzdF9pbnNuX2F1eF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBmb3IgYmxpbmRpbmcgY29uc3RhbnRzIGFuZCBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKS4gSXQgY2hhbmdlcyBob3cgcHJvZ3JhbXMgYXJlIGNsb25lZCBkdXJpbmcgYmxpbmRpbmcgYW5kIGZpeGVzIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGFyZSByZW1vdmVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvZ2ljIGVycm9ycyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2JsaW5kX2NvbnN0YW50cyYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2JwZl9jbGVhcl9pbnNuX2F1eF9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDthZGp1c3RfaW5zbl9hdXhfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgZm9yIGJsaW5kaW5nIGNvbnN0YW50cyBhbmQgbWFuYWdpbmcgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEgKGBpbnNuX2F1eF9kYXRhYCkuIEl0IGNoYW5nZXMgaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIGJsaW5kaW5nIGFuZCBmaXhlcyBtZW1vcnkgbWFuYWdlbWVudCBvZiBhdXhpbGlhcnkgZGF0YSB3aGVuIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBsb2dpYyBlcnJvcnMgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMjM6NDA6MDkuMTY2Mzk0MDI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMTY5ODI1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICAgIFwiYnBmX3Byb2dfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfc3VicHJvZ3NcIixcbiAgICBcImJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhXCIsXG4gICAgXCJ2ZXJpZmllcl9yZW1vdmVfaW5zbnNcIixcbiAgICBcImFkanVzdF9pbnNuX2F1eF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgdGhlIGxvZ2ljIGZvciBibGluZGluZyBjb25zdGFudHMgYW5kIG1hbmFnaW5nIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApLiBJdCBjaGFuZ2VzIGhvdyBwcm9ncmFtcyBhcmUgY2xvbmVkIGR1cmluZyBibGluZGluZyBhbmQgZml4ZXMgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYXV4aWxpYXJ5IGRhdGEgd2hlbiBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbG9naWMgZXJyb3JzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjM6NDA6MDkuMTY2NDAwMDI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDI3ODEwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNzkxN2E4MGM4NWY1NzUxZTY4MzBiZjQyNTQ2YTBhNDc1NDA2MDljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDIzOjQwOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggMzE3ZTk5YjlhY2MwYTQuLmM5OGVjOWRlNWJhNmVjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTk0OCw2ICs5NDgsNyBAQCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7XFxuIFxcdGJvb2wgc2Vlbl9kaXJlY3Rfd3JpdGU7XFxuIFxcdGJvb2wgc2Vlbl9leGNlcHRpb247XFxuIFxcdGJvb2wgc2lnbmF0dXJlO1xcbitcXHR1MzIgaW5zbl9hdXhfZGF0YV9sZW47XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXhfZGF0YTsgLyogYXJyYXkgb2YgcGVyLWluc24gc3RhdGUgKi9cXG4gXFx0Y29uc3Qgc3RydWN0IGJwZl9saW5lX2luZm8gKnByZXZfbGluZm87XFxuIFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nIGxvZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMjMyYzAyMDMxZmVjYmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTIxMSwyNSArMTIxMSwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7XFxuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXFxuIHtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcXG4gfVxcbi1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi17XFxuLVxcdHJldHVybiBOVUxMO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcXG4te1xcbi19XFxuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG4gXFxuIGludCBicGZfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGNudCk7XFxuQEAgLTEzNjgsNyArMTM1NSw4IEBAIGludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXG4gY29uc3QgY2hhciAqYnBmX2ppdF9nZXRfcHJvZ19uYW1lKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIFxcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpO1xcbiB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbkBAIC0xNTIwLDkgKzE1MDgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbitpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXFxuK1xcdFxcdFxcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxcbiB7XFxuLVxcdHJldHVybiBwcm9nO1xcbitcXHQqY2xvbmVkID0gZmFsc2U7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li4wYTgwNzJmNTk3ODk1NyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXFxuQEAgLTE1NTIsMjcgKzE1NTIsMzQgQEAgdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKVxcbiAgKiBOb3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gYmxpbmQgdGhlIG1haW4gcHJvZyBhbmQgbXVzdCBiZSBpbnZva2VkIG9ubHkgd2hlblxcbiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLlxcbiAgKi9cXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pbnNuIGluc25fYnVmZlsxNl0sIGF1eFsyXTtcXG4tXFx0c3RydWN0IGJwZl9wcm9nICpjbG9uZSwgKnRtcDtcXG4rXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nLCAqdG1wO1xcbiBcXHRpbnQgaW5zbl9kZWx0YSwgaW5zbl9jbnQ7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcXG4gXFx0aW50IGksIHJld3JpdHRlbjtcXG4gXFxuLVxcdGlmIChXQVJOX09OX09OQ0UoZW52IFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlcHJvZyAhPSBwcm9nKSlcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcdCpjbG9uZWQgPSBmYWxzZTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShlbnYgXFx1MDAyNlxcdTAwMjYgZW52LVxcdTAwM2Vwcm9nICE9ICpwcHJvZykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0Y2xvbmUgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUocHJvZywgR0ZQX1VTRVIpO1xcbi1cXHRpZiAoIWNsb25lKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0cHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZztcXG4rXFx0Lyogb25seSBjbG9uZSB0aGUgcHJvZyB3aGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyICovXFxuK1xcdGlmIChjbG9uZV9uZWVkZWQpIHtcXG4rXFx0XFx0cHJvZyA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShvcmlnX3Byb2csIEdGUF9VU0VSKTtcXG4rXFx0XFx0aWYgKCFwcm9nKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXFxuLVxcdGlmIChlbnYpXFxuLVxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IGNsb25lO1xcbitcXHRcXHQqY2xvbmVkID0gdHJ1ZTtcXG4rXFx0XFx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cXG4rXFx0XFx0aWYgKGVudilcXG4rXFx0XFx0XFx0ZW52LVxcdTAwM2Vwcm9nID0gcHJvZztcXG4rXFx0fVxcbiBcXG4tXFx0aW5zbl9jbnQgPSBjbG9uZS1cXHUwMDNlbGVuO1xcbi1cXHRpbnNuID0gY2xvbmUtXFx1MDAzZWluc25zaTtcXG4rXFx0aW5zbl9jbnQgPSBwcm9nLVxcdTAwM2VsZW47XFxuK1xcdGluc24gPSBwcm9nLVxcdTAwM2VpbnNuc2k7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7IGkrKywgaW5zbisrKSB7XFxuIFxcdFxcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcXG5AQCAtMTU5Myw0MiArMTYwMCw0OSBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicFxcbiBcXHRcXHQgICAgaW5zblsxXS5jb2RlID09IDApXFxuIFxcdFxcdFxcdG1lbWNweShhdXgsIGluc24sIHNpemVvZihhdXgpKTtcXG4gXFxuLVxcdFxcdHJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y2xvbmUtXFx1MDAzZWF1eC1cXHUwMDNldmVyaWZpZXJfemV4dCk7XFxuK1xcdFxcdHJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZiwgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V2ZXJpZmllcl96ZXh0KTtcXG4gXFx0XFx0aWYgKCFyZXdyaXR0ZW4pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGVudilcXG4gXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4rXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKHByb2csIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4gXFxuIFxcdFxcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XFxuLVxcdFxcdFxcdGlmIChlbnYpXFxuLVxcdFxcdFxcdFxcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cXG4tXFx0XFx0XFx0XFx0ZW52LVxcdTAwM2Vwcm9nID0gcHJvZztcXG4tXFx0XFx0XFx0LyogUGF0Y2hpbmcgbWF5IGhhdmUgcmVwb2ludGVkIGF1eC1cXHUwMDNlcHJvZyBkdXJpbmdcXG4tXFx0XFx0XFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cXG4tXFx0XFx0XFx0ICogZml4IGl0IHVwIGhlcmUgb24gZXJyb3IuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XFxuLVxcdFxcdFxcdHJldHVybiBJU19FUlIodG1wKSA/IHRtcCA6IEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdFxcdFxcdGlmICgqY2xvbmVkKSB7XFxuK1xcdFxcdFxcdFxcdC8qIHJvbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgcHJvZyAqL1xcbitcXHRcXHRcXHRcXHQqcHByb2cgPSBvcmlnX3Byb2c7XFxuK1xcdFxcdFxcdFxcdGlmIChlbnYpXFxuK1xcdFxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcXG4rXFx0XFx0XFx0XFx0LyogUGF0Y2hpbmcgbWF5IGhhdmUgcmVwb2ludGVkIGF1eC1cXHUwMDNlcHJvZyBkdXJpbmdcXG4rXFx0XFx0XFx0XFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cXG4rXFx0XFx0XFx0XFx0ICogZml4IGl0IHVwIGhlcmUgb24gZXJyb3IuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHQvKiBqdXN0IGtlZXAgdGhlIGxhdGVzdCBzdWNjZXNzZnVsbHkgcGF0Y2hlZCBwcm9nICovXFxuK1xcdFxcdFxcdFxcdCpwcHJvZyA9IHByb2c7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0Y2xvbmUgPSB0bXA7XFxuK1xcdFxcdHByb2cgPSB0bXA7XFxuIFxcdFxcdGluc25fZGVsdGEgPSByZXdyaXR0ZW4gLSAxO1xcbiBcXG4gXFx0XFx0aWYgKGVudilcXG4tXFx0XFx0XFx0ZW52LVxcdTAwM2Vwcm9nID0gY2xvbmU7XFxuK1xcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2c7XFxuIFxcbiBcXHRcXHQvKiBXYWxrIG5ldyBwcm9ncmFtIGFuZCBza2lwIGluc25zIHdlIGp1c3QgaW5zZXJ0ZWQuICovXFxuLVxcdFxcdGluc24gPSBjbG9uZS1cXHUwMDNlaW5zbnNpICsgaSArIGluc25fZGVsdGE7XFxuK1xcdFxcdGluc24gPSBwcm9nLVxcdTAwM2VpbnNuc2kgKyBpICsgaW5zbl9kZWx0YTtcXG4gXFx0XFx0aW5zbl9jbnQgKz0gaW5zbl9kZWx0YTtcXG4gXFx0XFx0aSAgICAgICAgKz0gaW5zbl9kZWx0YTtcXG4gXFx0fVxcbiBcXG4tXFx0Y2xvbmUtXFx1MDAzZWJsaW5kZWQgPSAxO1xcbi1cXHRyZXR1cm4gY2xvbmU7XFxuK1xcdHByb2ctXFx1MDAzZWJsaW5kZWQgPSAxO1xcbitcXHQqcHByb2cgPSBwcm9nO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIGJvb2wgYnBmX2luc25faXNfaW5kaXJlY3RfdGFyZ2V0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5AQCAtMjYxOCw0OSArMjYzMiwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcXG4gXFx0cmV0dXJuIHNlbGVjdF9pbnRlcnByZXRlcjtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbitzdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCBqaXRfbmVlZGVkKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbitcXHRpbnQgZXJyO1xcbitcXHRib29sIGNsb25lZCA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZztcXG4tXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xcbiBcXG4gXFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxcbiBcXHRcXHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbiBcXG4tXFx0aWYgKGVudikge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXFxuLVxcdFxcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcXG4tXFx0XFx0ICogb24gZmFpbHVyZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcXG4tXFx0XFx0aWYgKCFvcmlnX2luc25fYXV4KVxcbi1cXHRcXHRcXHRyZXR1cm4gcHJvZztcXG4tXFx0fVxcbi1cXG4gXFx0b3JpZ19wcm9nID0gcHJvZztcXG4tXFx0cHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7XFxuLVxcdC8qXFxuLVxcdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxcbi1cXHQgKiBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci5cXG4tXFx0ICovXFxuLVxcdGlmIChJU19FUlIocHJvZykpXFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuK1xcdGVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgXFx1MDAyNnByb2csICFqaXRfbmVlZGVkLCBcXHUwMDI2Y2xvbmVkKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbi1cXHRpZiAocHJvZy1cXHUwMDNlaml0ZWQpIHtcXG4tXFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcXG4tXFx0XFx0aWYgKGVudilcXG4tXFx0XFx0XFx0dmZyZWUob3JpZ19pbnNuX2F1eCk7XFxuLVxcdFxcdHJldHVybiBwcm9nO1xcbitcXHRpZiAoY2xvbmVkKSB7XFxuK1xcdFxcdGlmIChwcm9nLVxcdTAwM2VqaXRlZCkge1xcbitcXHRcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xcbitcXHRcXHRcXHRwcm9nID0gb3JpZ19wcm9nO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XFxuLVxcbi1vdXRfcmVzdG9yZTpcXG4tXFx0cHJvZyA9IG9yaWdfcHJvZztcXG4tXFx0aWYgKGVudilcXG4tXFx0XFx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xcbitvdXQ6XFxuICNlbmRpZlxcbiBcXHRyZXR1cm4gcHJvZztcXG4gfVxcbkBAIC0yNjkwLDcgKzI2ODgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XFxuIFxcdFxcdGlmICgqZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZnA7XFxuIFxcbi1cXHRcXHRmcCA9IGJwZl9wcm9nX2ppdF9jb21waWxlKGVudiwgZnApO1xcbitcXHRcXHRmcCA9IGJwZl9wcm9nX2ppdF9jb21waWxlKGVudiwgZnAsIGppdF9uZWVkZWQpO1xcbiBcXHRcXHRicGZfcHJvZ19qaXRfYXR0ZW1wdF9kb25lKGZwKTtcXG4gXFx0XFx0aWYgKCFmcC1cXHUwMDNlaml0ZWQgXFx1MDAyNlxcdTAwMjYgaml0X25lZWRlZCkge1xcbiBcXHRcXHRcXHQqZXJyID0gLUVOT1RTVVBQO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbmluZGV4IGQzYmU5NzI3MTRiMjJjLi44MGM4YmViNDVlYTA0NCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC0xNzQsNiArMTc0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKGNudCA9PSAxKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdHByb2dfbGVuID0gbmV3X3Byb2ctXFx1MDAzZWxlbjtcXG4rXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IHByb2dfbGVuO1xcbiBcXG4gXFx0bWVtbW92ZShkYXRhICsgb2ZmICsgY250IC0gMSwgZGF0YSArIG9mZixcXG4gXFx0XFx0c2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSkgKiAocHJvZ19sZW4gLSBvZmYgLSBjbnQgKyAxKSk7XFxuQEAgLTQ0MCw3ICs0NDEsNiBAQCBzdGF0aWMgaW50IGJwZl9hZGpfbGluZm9fYWZ0ZXJfcmVtb3ZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4X2RhdGEgPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGE7XFxuLVxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4gXFx0aW50IGVuZCA9IHN0YXJ0ICsgbGVuO1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTQ0OSw5ICs0NDksNiBAQCB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbilcXG4gXFx0XFx0XFx0a3ZmcmVlKGF1eF9kYXRhW2ldLmp0KTtcXG4gXFx0XFx0XFx0YXV4X2RhdGFbaV0uanQgPSBOVUxMO1xcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHRpZiAoYnBmX2lzX2xkaW1tNjQoXFx1MDAyNmluc25zW2ldKSlcXG4tXFx0XFx0XFx0aSsrO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTQ2NCw3ICs0NjEsNiBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxcbiBcXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4KSlcXG4gXFx0XFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XFxuIFxcbi1cXHQvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBicGZfcmVtb3ZlX2luc25zLCBhcyBpdCB1c2VzIHByb2ctXFx1MDAzZWluc25zaSAqL1xcbiBcXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTtcXG4gXFxuIFxcdGVyciA9IGJwZl9yZW1vdmVfaW5zbnMoZW52LVxcdTAwM2Vwcm9nLCBvZmYsIGNudCk7XFxuQEAgLTQ4Myw2ICs0NzksNyBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxcbiBcXG4gXFx0bWVtbW92ZShhdXhfZGF0YSArIG9mZixcXHRhdXhfZGF0YSArIG9mZiArIGNudCxcXG4gXFx0XFx0c2l6ZW9mKCphdXhfZGF0YSkgKiAob3JpZ19wcm9nX2xlbiAtIG9mZiAtIGNudCkpO1xcbitcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFfbGVuIC09IGNudDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTk5OSwzMiArOTk2LDE0IEBAIHN0YXRpYyB1MzIgKmJwZl9kdXBfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIHN0YXRpYyB2b2lkIGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiAqb3JpZ19zdGFydHMpXFxuIHtcXG4rXFx0aWYgKCFvcmlnX3N0YXJ0cylcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIGVudi1cXHUwMDNlc3VicHJvZ19jbnQ7IGkrKylcXG4gXFx0XFx0ZW52LVxcdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQgPSBvcmlnX3N0YXJ0c1tpXTtcXG4gXFx0LyogcmVzdG9yZSB0aGUgc3RhcnQgb2YgZmFrZSAnZXhpdCcgc3VicHJvZyBhcyB3ZWxsICovXFxuIFxcdGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2Vudi1cXHUwMDNlc3VicHJvZ19jbnRdLnN0YXJ0ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuIH1cXG4gXFxuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLXtcXG4tXFx0c2l6ZV90IHNpemU7XFxuLVxcdHZvaWQgKm5ld19hdXg7XFxuLVxcbi1cXHRzaXplID0gYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4pO1xcbi1cXHRuZXdfYXV4ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdGlmIChuZXdfYXV4KVxcbi1cXHRcXHRtZW1jcHkobmV3X2F1eCwgZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhLCBzaXplKTtcXG4tXFx0cmV0dXJuIG5ld19hdXg7XFxuLX1cXG4tXFxuLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KVxcbi17XFxuLVxcdC8qIHRoZSBleHBhbmRlZCBlbGVtZW50cyBhcmUgemVyby1maWxsZWQsIHNvIG5vIHNwZWNpYWwgaGFuZGxpbmcgaXMgcmVxdWlyZWQgKi9cXG4tXFx0dmZyZWUoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhKTtcXG4tXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhID0gb3JpZ19pbnNuX2F1eDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXFx1MDAzZXByb2csICoqZnVuYywgKnRtcDtcXG5AQCAtMTI5Niw1NyArMTI3NSw0NyBAQCBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdGludCBlcnIsIGk7XFxuLVxcdGJvb2wgYmxpbmRlZCA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc247XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZztcXG4tXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xcbi1cXHR1MzIgKm9yaWdfc3VicHJvZ19zdGFydHM7XFxuK1xcdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IE5VTEw7XFxuK1xcdGJvb2wgY2xvbmVkID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoZW52LVxcdTAwM2VzdWJwcm9nX2NudCBcXHUwMDNjPSAxKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHByb2cgPSBvcmlnX3Byb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuIFxcdGlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7XFxuLVxcdFxcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcXG4tXFx0XFx0aWYgKCFvcmlnX2luc25fYXV4KSB7XFxuLVxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuLVxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0b3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTtcXG4tXFx0XFx0aWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7XFxuLVxcdFxcdFxcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xcbi1cXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbi1cXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwO1xcbitcXHRcXHRpZiAoIXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCkge1xcbitcXHRcXHRcXHRvcmlnX3N1YnByb2dfc3RhcnRzID0gYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhlbnYpO1xcbitcXHRcXHRcXHRpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfY2xlYW51cDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKHByb2cpKSB7XFxuLVxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuLVxcdFxcdFxcdHByb2cgPSBvcmlnX3Byb2c7XFxuK1xcdFxcdGVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgXFx1MDAyNnByb2csICFwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQsIFxcdTAwMjZjbG9uZWQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJsaW5kZWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBqaXRfc3VicHJvZ3MoZW52KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXRfaml0X2VycjtcXG4gXFxuLVxcdGlmIChibGluZGVkKSB7XFxuK1xcdGlmIChjbG9uZWQpIHtcXG4gXFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcXG4gXFx0XFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xcbi1cXHRcXHR2ZnJlZShvcmlnX2luc25fYXV4KTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBvdXRfaml0X2VycjpcXG4tXFx0aWYgKGJsaW5kZWQpIHtcXG4rXFx0aWYgKGNsb25lZCkge1xcbiBcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xcbi1cXHRcXHQvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuIG9yaWdpbmFsIHByb2cgKi9cXG4rXFx0XFx0Lyogcm9sbCBiYWNrIHRvIHRoZSBjbGVhbiAgb3JpZ2luYWwgcHJvZyAqL1xcbiBcXHRcXHRwcm9nID0gZW52LVxcdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xcbiBcXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAoZXJyICE9IC1FRkFVTFQpIHtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRUZBVUxUIFxcdTAwMjZcXHUwMDI2ICFwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQpIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogV2Ugd2lsbCBmYWxsIGJhY2sgdG8gaW50ZXJwcmV0ZXIgbW9kZSB3aGVuIGVyciBpcyBub3QgLUVGQVVMVCwgYmVmb3JlXFxuIFxcdFxcdFxcdCAqIHRoYXQsIGluc24tXFx1MDAzZW9mZiBhbmQgaW5zbi1cXHUwMDNlaW1tIHNob3VsZCBiZSByZXN0b3JlZCB0byB0aGVpciBvcmlnaW5hbFxcbkBAIC0xMzY0LDcgKzEzMzMsNiBAQCBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gb3V0X3Jlc3RvcmU6XFxuIFxcdGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKGVudiwgb3JpZ19zdWJwcm9nX3N0YXJ0cyk7XFxuLVxcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcXG4gXFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xcbiBvdXRfY2xlYW51cDpcXG4gXFx0LyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMDNlMjIwMmNjYTEzZDUuLjg1YjA1NTI5ZjEwN2E5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0yMDEwOCw3ICsyMDEwOCw3IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRpZiAoIWlzX3ByaXYpXFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJwZl92ZXJpZmllcl9sb2NrKTtcXG4gXFxuLVxcdGxlbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuO1xcbitcXHRsZW4gPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuIFxcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YSA9XFxuIFxcdFxcdF9fdm1hbGxvYyhhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBsZW4pLFxcbiBcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xcbkBAIC0yMDM1NCw3ICsyMDM1NCw3IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRyZWxlYXNlX2J0ZnMoZW52KTtcXG4gZXJyX2ZyZWVfZW52OlxcbiBcXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhKVxcbi1cXHRcXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFfbGVuKTtcXG4gXFx0dmZyZWUoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhKTtcXG4gXFx0a3ZmcmVlKGVudi1cXHUwMDNlZmRfYXJyYXkpO1xcbiBcXHRicGZfc3RhY2tfbGl2ZW5lc3NfZnJlZShlbnYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMzo0MDowOS41NzAwMjQ4NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzOTEzMzQzNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9ibGluZF9jb25zdGFudHNcIixcbiAgICBcImJwZl9wcm9nX2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfaml0X3N1YnByb2dzXCIsXG4gICAgXCJicGZfY2xlYXJfaW5zbl9hdXhfZGF0YVwiLFxuICAgIFwidmVyaWZpZXJfcmVtb3ZlX2luc25zXCIsXG4gICAgXCJhZGp1c3RfaW5zbl9hdXhfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBmb3IgYmxpbmRpbmcgY29uc3RhbnRzIGFuZCBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKS4gSXQgY2hhbmdlcyBob3cgcHJvZ3JhbXMgYXJlIGNsb25lZCBkdXJpbmcgYmxpbmRpbmcgYW5kIGZpeGVzIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGFyZSByZW1vdmVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvZ2ljIGVycm9ycyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTc5MTdhODBjODVmNTc1MWU2ODMwYmY0MjU0NmEwYTQ3NTQwNjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDIzOjQwOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDMxN2U5OWI5YWNjMGE0Li5jOThlYzlkZTViYTZlYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC05NDgsNiArOTQ4LDcgQEAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYge1xuIFx0Ym9vbCBzZWVuX2RpcmVjdF93cml0ZTtcbiBcdGJvb2wgc2Vlbl9leGNlcHRpb247XG4gXHRib29sIHNpZ25hdHVyZTtcbitcdHUzMiBpbnNuX2F1eF9kYXRhX2xlbjtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXhfZGF0YTsgLyogYXJyYXkgb2YgcGVyLWluc24gc3RhdGUgKi9cbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluZV9pbmZvICpwcmV2X2xpbmZvO1xuIFx0c3RydWN0IGJwZl92ZXJpZmllcl9sb2cgbG9nO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMjMyYzAyMDMxZmVjYmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTIxMSwyNSArMTIxMSwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcbiB7XG4gXHRyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApO1xuIH1cbi1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KVxuLXtcbi19XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIGludCBicGZfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGNudCk7XG5AQCAtMTM2OCw3ICsxMzU1LDggQEAgaW50IGJwZl9qaXRfZ2V0X2Z1bmNfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXG4gY29uc3QgY2hhciAqYnBmX2ppdF9nZXRfcHJvZ19uYW1lKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4gXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcbitcdFx0XHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZCk7XG4gdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5AQCAtMTUyMCw5ICsxNTA4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19uZWVkX2JsaW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcbitcdFx0XHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZClcbiB7XG4tXHRyZXR1cm4gcHJvZztcbitcdCpjbG9uZWQgPSBmYWxzZTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCA0N2ZlMDQ3YWQzMGI4OC4uMGE4MDcyZjU5Nzg5NTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTUyLDI3ICsxNTUyLDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbiAgKiBOb3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gYmxpbmQgdGhlIG1haW4gcHJvZyBhbmQgbXVzdCBiZSBpbnZva2VkIG9ubHkgd2hlblxuICAqIGJwZl9wcm9nX25lZWRfYmxpbmQoKSByZXR1cm5zIHRydWUuXG4gICovXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4raW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuK1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wO1xuK1x0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nLCAqdG1wO1xuIFx0aW50IGluc25fZGVsdGEsIGluc25fY250O1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuO1xuIFx0aW50IGksIHJld3JpdHRlbjtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoZW52IFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlcHJvZyAhPSBwcm9nKSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHQqY2xvbmVkID0gZmFsc2U7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gKnBwcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRjbG9uZSA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShwcm9nLCBHRlBfVVNFUik7XG4tXHRpZiAoIWNsb25lKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdHByb2cgPSBvcmlnX3Byb2cgPSAqcHByb2c7XG4rXHQvKiBvbmx5IGNsb25lIHRoZSBwcm9nIHdoZW4gd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgKi9cbitcdGlmIChjbG9uZV9uZWVkZWQpIHtcbitcdFx0cHJvZyA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShvcmlnX3Byb2csIEdGUF9VU0VSKTtcbitcdFx0aWYgKCFwcm9nKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cbi1cdGlmIChlbnYpXG4tXHRcdGVudi1cdTAwM2Vwcm9nID0gY2xvbmU7XG4rXHRcdCpjbG9uZWQgPSB0cnVlO1xuK1x0XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xuK1x0XHRpZiAoZW52KVxuK1x0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbitcdH1cbiBcbi1cdGluc25fY250ID0gY2xvbmUtXHUwMDNlbGVuO1xuLVx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaTtcbitcdGluc25fY250ID0gcHJvZy1cdTAwM2VsZW47XG4rXHRpbnNuID0gcHJvZy1cdTAwM2VpbnNuc2k7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgaSsrLCBpbnNuKyspIHtcbiBcdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkge1xuQEAgLTE1OTMsNDIgKzE2MDAsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBcbiBcdFx0ICAgIGluc25bMV0uY29kZSA9PSAwKVxuIFx0XHRcdG1lbWNweShhdXgsIGluc24sIHNpemVvZihhdXgpKTtcbiBcbi1cdFx0cmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLFxuLVx0XHRcdFx0XHRcdGNsb25lLVx1MDAzZWF1eC1cdTAwM2V2ZXJpZmllcl96ZXh0KTtcbitcdFx0cmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLCBwcm9nLVx1MDAzZWF1eC1cdTAwM2V2ZXJpZmllcl96ZXh0KTtcbiBcdFx0aWYgKCFyZXdyaXR0ZW4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChlbnYpXG4gXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcbiBcdFx0ZWxzZVxuLVx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuK1x0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG4gXHRcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XG4tXHRcdFx0aWYgKGVudilcbi1cdFx0XHRcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cbi1cdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbi1cdFx0XHQvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LVx1MDAzZXByb2cgZHVyaW5nXG4tXHRcdFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cbi1cdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XG4tXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTtcbitcdFx0XHRpZiAoKmNsb25lZCkge1xuK1x0XHRcdFx0Lyogcm9sbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwcm9nICovXG4rXHRcdFx0XHQqcHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdFx0XHRpZiAoZW52KVxuK1x0XHRcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcbitcdFx0XHRcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXHUwMDNlcHJvZyBkdXJpbmdcbitcdFx0XHRcdCAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvXG4rXHRcdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xuK1x0XHRcdFx0KnBwcm9nID0gcHJvZztcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcbiBcdFx0fVxuIFxuLVx0XHRjbG9uZSA9IHRtcDtcbitcdFx0cHJvZyA9IHRtcDtcbiBcdFx0aW5zbl9kZWx0YSA9IHJld3JpdHRlbiAtIDE7XG4gXG4gXHRcdGlmIChlbnYpXG4tXHRcdFx0ZW52LVx1MDAzZXByb2cgPSBjbG9uZTtcbitcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2c7XG4gXG4gXHRcdC8qIFdhbGsgbmV3IHByb2dyYW0gYW5kIHNraXAgaW5zbnMgd2UganVzdCBpbnNlcnRlZC4gKi9cbi1cdFx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaSArIGkgKyBpbnNuX2RlbHRhO1xuK1x0XHRpbnNuID0gcHJvZy1cdTAwM2VpbnNuc2kgKyBpICsgaW5zbl9kZWx0YTtcbiBcdFx0aW5zbl9jbnQgKz0gaW5zbl9kZWx0YTtcbiBcdFx0aSAgICAgICAgKz0gaW5zbl9kZWx0YTtcbiBcdH1cbiBcbi1cdGNsb25lLVx1MDAzZWJsaW5kZWQgPSAxO1xuLVx0cmV0dXJuIGNsb25lO1xuK1x0cHJvZy1cdTAwM2VibGluZGVkID0gMTtcbitcdCpwcHJvZyA9IHByb2c7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gYm9vbCBicGZfaW5zbl9pc19pbmRpcmVjdF90YXJnZXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuQEAgLTI2MTgsNDkgKzI2MzIsMzMgQEAgc3RhdGljIGJvb2wgYnBmX3Byb2dfc2VsZWN0X2ludGVycHJldGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXG4gXHRyZXR1cm4gc2VsZWN0X2ludGVycHJldGVyO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4rc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgaml0X25lZWRlZClcbiB7XG4gI2lmZGVmIENPTkZJR19CUEZfSklUXG4rXHRpbnQgZXJyO1xuK1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuIFxuIFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxuIFx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuIFxuLVx0aWYgKGVudikge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXG4tXHRcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcbi1cdFx0ICogb24gZmFpbHVyZS5cbi1cdFx0ICovXG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KVxuLVx0XHRcdHJldHVybiBwcm9nO1xuLVx0fVxuLVxuIFx0b3JpZ19wcm9nID0gcHJvZztcbi1cdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0Lypcbi1cdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxuLVx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXG4tXHQgKi9cbi1cdGlmIChJU19FUlIocHJvZykpXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRlcnIgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIFx1MDAyNnByb2csICFqaXRfbmVlZGVkLCBcdTAwMjZjbG9uZWQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi1cdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbi1cdFx0aWYgKGVudilcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0cmV0dXJuIHByb2c7XG4rXHRpZiAoY2xvbmVkKSB7XG4rXHRcdGlmIChwcm9nLVx1MDAzZWppdGVkKSB7XG4rXHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuK1x0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4tXG4tb3V0X3Jlc3RvcmU6XG4tXHRwcm9nID0gb3JpZ19wcm9nO1xuLVx0aWYgKGVudilcbi1cdFx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xuK291dDpcbiAjZW5kaWZcbiBcdHJldHVybiBwcm9nO1xuIH1cbkBAIC0yNjkwLDcgKzI2ODgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XG4gXHRcdGlmICgqZXJyKVxuIFx0XHRcdHJldHVybiBmcDtcbiBcbi1cdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcbitcdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwLCBqaXRfbmVlZGVkKTtcbiBcdFx0YnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShmcCk7XG4gXHRcdGlmICghZnAtXHUwMDNlaml0ZWQgXHUwMDI2XHUwMDI2IGppdF9uZWVkZWQpIHtcbiBcdFx0XHQqZXJyID0gLUVOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBkM2JlOTcyNzE0YjIyYy4uODBjOGJlYjQ1ZWEwNDQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMTc0LDYgKzE3NCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoY250ID09IDEpXG4gXHRcdHJldHVybjtcbiBcdHByb2dfbGVuID0gbmV3X3Byb2ctXHUwMDNlbGVuO1xuK1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gcHJvZ19sZW47XG4gXG4gXHRtZW1tb3ZlKGRhdGEgKyBvZmYgKyBjbnQgLSAxLCBkYXRhICsgb2ZmLFxuIFx0XHRzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSAqIChwcm9nX2xlbiAtIG9mZiAtIGNudCArIDEpKTtcbkBAIC00NDAsNyArNDQxLDYgQEAgc3RhdGljIGludCBicGZfYWRqX2xpbmZvX2FmdGVyX3JlbW92ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4X2RhdGEgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YTtcbi1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRpbnQgZW5kID0gc3RhcnQgKyBsZW47XG4gXHRpbnQgaTtcbiBcbkBAIC00NDksOSArNDQ5LDYgQEAgdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pXG4gXHRcdFx0a3ZmcmVlKGF1eF9kYXRhW2ldLmp0KTtcbiBcdFx0XHRhdXhfZGF0YVtpXS5qdCA9IE5VTEw7XG4gXHRcdH1cbi1cbi1cdFx0aWYgKGJwZl9pc19sZGltbTY0KFx1MDAyNmluc25zW2ldKSlcbi1cdFx0XHRpKys7XG4gXHR9XG4gfVxuIFxuQEAgLTQ2NCw3ICs0NjEsNiBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFx0aWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgpKVxuIFx0XHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcbiBcbi1cdC8qIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGJwZl9yZW1vdmVfaW5zbnMsIGFzIGl0IHVzZXMgcHJvZy1cdTAwM2VpbnNuc2kgKi9cbiBcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgb2ZmLCBjbnQpO1xuIFxuIFx0ZXJyID0gYnBmX3JlbW92ZV9pbnNucyhlbnYtXHUwMDNlcHJvZywgb2ZmLCBjbnQpO1xuQEAgLTQ4Myw2ICs0NzksNyBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFxuIFx0bWVtbW92ZShhdXhfZGF0YSArIG9mZixcdGF1eF9kYXRhICsgb2ZmICsgY250LFxuIFx0XHRzaXplb2YoKmF1eF9kYXRhKSAqIChvcmlnX3Byb2dfbGVuIC0gb2ZmIC0gY250KSk7XG4rXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4gLT0gY250O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk5OSwzMiArOTk2LDE0IEBAIHN0YXRpYyB1MzIgKmJwZl9kdXBfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBzdGF0aWMgdm9pZCBicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgKm9yaWdfc3RhcnRzKVxuIHtcbitcdGlmICghb3JpZ19zdGFydHMpXG4rXHRcdHJldHVybjtcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBlbnYtXHUwMDNlc3VicHJvZ19jbnQ7IGkrKylcbiBcdFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydCA9IG9yaWdfc3RhcnRzW2ldO1xuIFx0LyogcmVzdG9yZSB0aGUgc3RhcnQgb2YgZmFrZSAnZXhpdCcgc3VicHJvZyBhcyB3ZWxsICovXG4gXHRlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2Vudi1cdTAwM2VzdWJwcm9nX2NudF0uc3RhcnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gfVxuIFxuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4te1xuLVx0c2l6ZV90IHNpemU7XG4tXHR2b2lkICpuZXdfYXV4O1xuLVxuLVx0c2l6ZSA9IGFycmF5X3NpemUoc2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSksIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbik7XG4tXHRuZXdfYXV4ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRpZiAobmV3X2F1eClcbi1cdFx0bWVtY3B5KG5ld19hdXgsIGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhLCBzaXplKTtcbi1cdHJldHVybiBuZXdfYXV4O1xuLX1cbi1cbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KVxuLXtcbi1cdC8qIHRoZSBleHBhbmRlZCBlbGVtZW50cyBhcmUgemVyby1maWxsZWQsIHNvIG5vIHNwZWNpYWwgaGFuZGxpbmcgaXMgcmVxdWlyZWQgKi9cbi1cdHZmcmVlKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhKTtcbi1cdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhID0gb3JpZ19pbnNuX2F1eDtcbi19XG4tXG4gc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXHUwMDNlcHJvZywgKipmdW5jLCAqdG1wO1xuQEAgLTEyOTYsNTcgKzEyNzUsNDcgQEAgc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdGludCBlcnIsIGk7XG4tXHRib29sIGJsaW5kZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcbiBcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZztcbi1cdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eDtcbi1cdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cztcbitcdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IE5VTEw7XG4rXHRib29sIGNsb25lZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2NudCBcdTAwM2M9IDEpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cHJvZyA9IG9yaWdfcHJvZyA9IGVudi1cdTAwM2Vwcm9nO1xuIFx0aWYgKGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpIHtcbi1cdFx0b3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpO1xuLVx0XHRpZiAoIW9yaWdfaW5zbl9hdXgpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRcdGdvdG8gb3V0X2NsZWFudXA7XG4tXHRcdH1cbi1cdFx0b3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTtcbi1cdFx0aWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7XG4tXHRcdFx0dmZyZWUob3JpZ19pbnNuX2F1eCk7XG4tXHRcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuK1x0XHRpZiAoIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4rXHRcdFx0b3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTtcbitcdFx0XHRpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHtcbitcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuK1x0XHRcdH1cbiBcdFx0fVxuLVx0XHRwcm9nID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBwcm9nKTtcbi1cdFx0aWYgKElTX0VSUihwcm9nKSkge1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdFx0cHJvZyA9IG9yaWdfcHJvZztcbitcdFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQsIFx1MDAyNmNsb25lZCk7XG4rXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdFx0fVxuLVx0XHRibGluZGVkID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGVyciA9IGppdF9zdWJwcm9ncyhlbnYpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfaml0X2VycjtcbiBcbi1cdGlmIChibGluZGVkKSB7XG4rXHRpZiAoY2xvbmVkKSB7XG4gXHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7XG4gXHRcdGt2ZnJlZShvcmlnX3N1YnByb2dfc3RhcnRzKTtcbi1cdFx0dmZyZWUob3JpZ19pbnNuX2F1eCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBvdXRfaml0X2Vycjpcbi1cdGlmIChibGluZGVkKSB7XG4rXHRpZiAoY2xvbmVkKSB7XG4gXHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4tXHRcdC8qIHJvbGwgYmFjayB0byB0aGUgY2xlYW4gb3JpZ2luYWwgcHJvZyAqL1xuK1x0XHQvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuICBvcmlnaW5hbCBwcm9nICovXG4gXHRcdHByb2cgPSBlbnYtXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcbiBcdFx0Z290byBvdXRfcmVzdG9yZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChlcnIgIT0gLUVGQVVMVCkge1xuK1x0XHRpZiAoZXJyICE9IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2Ugd2lsbCBmYWxsIGJhY2sgdG8gaW50ZXJwcmV0ZXIgbW9kZSB3aGVuIGVyciBpcyBub3QgLUVGQVVMVCwgYmVmb3JlXG4gXHRcdFx0ICogdGhhdCwgaW5zbi1cdTAwM2VvZmYgYW5kIGluc24tXHUwMDNlaW1tIHNob3VsZCBiZSByZXN0b3JlZCB0byB0aGVpciBvcmlnaW5hbFxuQEAgLTEzNjQsNyArMTMzMyw2IEBAIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gb3V0X3Jlc3RvcmU6XG4gXHRicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9yaWdfc3VicHJvZ19zdGFydHMpO1xuLVx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xuIFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xuIG91dF9jbGVhbnVwOlxuIFx0LyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDAzZTIyMDJjY2ExM2Q1Li44NWIwNTUyOWYxMDdhOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjAxMDgsNyArMjAxMDgsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdGlmICghaXNfcHJpdilcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZicGZfdmVyaWZpZXJfbG9jayk7XG4gXG4tXHRsZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4rXHRsZW4gPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSA9XG4gXHRcdF9fdm1hbGxvYyhhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBsZW4pLFxuIFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG5AQCAtMjAzNTQsNyArMjAzNTQsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdHJlbGVhc2VfYnRmcyhlbnYpO1xuIGVycl9mcmVlX2VudjpcbiBcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSlcbi1cdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4pO1xuK1x0XHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbik7XG4gXHR2ZnJlZShlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSk7XG4gXHRrdmZyZWUoZW52LVx1MDAzZWZkX2FycmF5KTtcbiBcdGJwZl9zdGFja19saXZlbmVzc19mcmVlKGVudik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMzo0MDowOS41NzAwMjYxNjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTMxMzg3NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IHJhZGFyIGlzIHBpbmdpbmcuIFRoaXMgaXNuJ3Qgc29tZSBtaW5vciB0d2VhazsgdGhpcyBpcyB0b3VjaGluZyB0aGUgaGVhcnQgb2YgQlBGIHZlcmlmaWVyIGFuZCBKSVQgYmxpbmRpbmcsIHNwZWNpZmljYWxseSBob3cgd2UgaGFuZGxlIGNsb25pbmcgYW5kIGNvbnN0YW50IGJsaW5kaW5nLiBUaGV5J3ZlIGNoYW5nZWQgYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCB0byByZXR1cm4gYW4gYGludGAgbm93IGluc3RlYWQgb2YgdGhlIHByb2dyYW0gcG9pbnRlciwgd2hpY2ggc2VlbXMgbGlrZSBhIHNpZ25pZmljYW50IHN0cnVjdHVyYWwgc2hpZnQgaW4gaG93IGl0IGJlaGF2ZXMuIFRoZXkncmUgYWxzbyBtb2RpZnlpbmcgdGhlIGNsb25pbmcgYmVoYXZpb3IsIGhhbmRsaW5nIGl0IGRpZmZlcmVudGx5IGJhc2VkIG9uIGEgYGNsb25lX25lZWRlZGAgZmxhZywgd2hpY2ggaXMgdXNlZCBpbiBib3RoIGBicGZfcHJvZ19qaXRfY29tcGlsZWAgYW5kIGBicGZfaml0X3N1YnByb2dzYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaW5zbl9hdXhfZGF0YV9sZW5gIGFuZCBpdHMgdXNlIGluIGNsZWFyaW5nIGBpbnNuX2F1eF9kYXRhYCBpcyBhbHNvIGludGVyZXN0aW5nOyBsb29rcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIGNsZWFuIHVwIGhvdyB0aGF0IGF1eGlsaWFyeSBkYXRhIGlzIG1hbmFnZWQuIEFuZCB0aGUgcmVtb3ZhbCBvZiB0aG9zZSBgZHVwYCBhbmQgYHJlc3RvcmVgIGZ1bmN0aW9ucyBmb3IgdGhlIGF1eGlsaWFyeSBkYXRhLCB0aGF0IGhhcyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSByZWFjaGFibGU7IEJQRiBpcyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG1vZGVybiBrZXJuZWwgYW5kIGdldHMgYSBsb3Qgb2YgdXNlLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IG1ham9yIG9uZSBhdCB0aGF0LCBzbyBpdCdzICpkZWZpbml0ZWx5KiB3b3J0aCBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFdl4oCZcmUgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBsb2dpYyBoZXJlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uOlxuKiAgIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgLSBDbGVhcmx5LCBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzLlxuKiAgIGBicGZfcHJvZ19qaXRfY29tcGlsZWAgLSBUaGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBsYXllciBpbiB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuXG4qICAgYGJwZl9qaXRfc3VicHJvZ3NgIC0gQW5vdGhlciBKSVQgZnVuY3Rpb24uXG4qICAgYGJwZl9jaGVja2AgLSBBbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmVyaWZpZXIgd2lsbCBiZSBjcml0aWNhbCwgYXMgdGhpcyB3aWxsIGhhdmUgYSBkaXJlY3QgaW1wYWN0LlxuKiAgIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgIC0gSG93IHJlbW92aW5nIEJQRiBpbnN0cnVjdGlvbnMgcGxheXMgd2l0aCBhdXhpbGlhcnkgZGF0YSBuZWVkcyB0byBiZSBleGFtaW5lZC5cbiogICBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgIC0gVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBkYXRhIGNsZWFyaW5nIGNoYW5nZXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UncmUgdGFsa2luZyBhYm91dCBCUEYgSklULCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5LiBMZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IHdpdGggYSBncmVwIGNvbW1hbmQgaW4gdGhlIHJlcG9zaXRvcnkuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBzZXR0aW5ncyBhcmUgYWN0aXZlIGZvciByZWxldmFudCB0ZXN0IGNhc2VzLiBOb3csIGxldCdzIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGFuZCBmaW5kIHdoYXQgdGhlc2UgY2hhbmdlcyBhcmUgYWN0dWFsbHkgdHJ5aW5nIHRvIGFjaGlldmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMzo0MDoxNi41MDE0MTU4NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0MjAzMjUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMzo0MDoyMC40NDM0NTM3ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM2ODUzNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSklUIEJsaW5kaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbXBhY3Qgb2YgdGhlc2Ugb24gdGhlIEJQRiBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQsIHdoYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUuXG5cbkkgc2VlIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAsIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAsIGFuZCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgaXMgdXNlZC5cblxuUmlnaHQsIEkgc2VlLiBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgIGdldHMgY2FsbGVkIHdoZW4gYGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZylgIHJldHVybnMgdHJ1ZS4gVGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgY2hlY2tzIGlmIGBicGZfaml0X2JsaW5kaW5nYCBpcyBlbmFibGVkLiBBaCwgYGJwZl9qaXRfYmxpbmRpbmdgIGlzIGEgc3lzY3RsLiBUaGF0J3Mga2V5LiBJdCdzIGEgc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGljdGF0ZXMgd2hldGhlciB0aGlzIGJsaW5kaW5nIGJlaGF2aW9yIGlzIGVuYWJsZWQuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBicGZfcHJvZ19uZWVkX2JsaW5kYCBmdW5jdGlvbiBpbiBkZXRhaWwsIGFuZCBhc3Nlc3MgaXRzIHJvbGUgaW4gdGhpcyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODM2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIzOjQwOjI0LjY4MDMwOTk1OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY4MTU3Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX25lZWRfYmxpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMzYwPXZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcik7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzYxLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTM2MjpzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzYzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTUwMT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Byb2dfa2FsbHN5bXNfZGVsKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE1MDQtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxNTA1OnN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19uZWVkX2JsaW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE1MDYte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTU0MD12b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTUyLSAqIE5vdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB0byBibGluZCB0aGUgbWFpbiBwcm9nIGFuZCBtdXN0IGJlIGludm9rZWQgb25seSB3aGVuXFxua2VybmVsL2JwZi9jb3JlLmM6MTU1MzogKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLlxcbmtlcm5lbC9icGYvY29yZS5jLTE1NTQtICovXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjM1PXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NDItXFxua2VybmVsL2JwZi9jb3JlLmM6MjY0MzpcXHRpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpXFxua2VybmVsL2JwZi9jb3JlLmMtMjY0NC1cXHRcXHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xMjc1PWludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyODYtXFx0cHJvZyA9IG9yaWdfcHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEyODc6XFx0aWYgKGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyODgtXFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjM6NDA6MjYuNTQ4NDczNzQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2NDYzNzg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIEJsaW5kaW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZyb20gd2hhdCBJIGdhdGhlciwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoZSBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgIGZ1bmN0aW9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGJvdGggYGJwZl9wcm9nX2ppdF9jb21waWxlYCBhbmQgYGJwZl9qaXRfc3VicHJvZ3NgLiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhpcyBmaXhlcyBhIGJ1ZyByZWxhdGVkIHRvIGhvdyB3ZSdyZSBoYW5kbGluZyBgaW5zbl9hdXhfZGF0YWAgd2hlbiBKSVQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nIGFyZSBoYXBwZW5pbmcuXG5cbkknbSB6ZXJvaW5nIGluIG9uIGEgZmV3IGNydWNpYWwgc3ltYm9sczogIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIG5hdHVyYWxseSwgYWxvbmcgd2l0aCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9zdWJwcm9nc2AsIGFzIHRoZXkncmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbG9naWMgdGhpcyBwYXRjaCBtb2RpZmllcy4gIEknbSBhbHNvIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGF1eGlsaWFyeSBkYXRhIG1hbmFnZW1lbnQgZnVuY3Rpb25zOiBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgIGFuZCBgYWRqdXN0X2luc25fYXV4X2RhdGFgLCBzaW5jZSB0aG9zZSBzZWVtIGxpa2UgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIEFsc28sIHRoZSB2ZXJpZmllciBzaWRlIG9mIGluc3RydWN0aW9uIHJlbW92YWwgaW4gYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgaXMgcmVsZXZhbnQgaGVyZS5cblxuVGhlIHBhdGNoJ3MgaW1wYWN0IGFwcGVhcnMgdG8gYmUgb24gdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyIHRoZW1zZWx2ZXMuIFNwZWNpZmljYWxseSwgaG93IGNvbnN0YW50cyBhcmUgYmxpbmRlZCBhbmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YS4gVGhlIGNoYW5nZXMgdG91Y2ggaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIHRoZSBibGluZGluZyBwcm9jZXNzIGFuZCB0YWNrbGVzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gdGhlIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGdldCByZW1vdmVkLiBUaGVzZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHR3ZWFrcyB0byB0aGUgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSwgYW5kIGltcG9ydGFudGx5LCB0aGV5J3JlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbC4gVGhpcyBtZWFucyB0aGF0LCBhZnRlciBhbGwsIGFueSBidWdzIGhlcmUgY291bGQgYmUgZXhwbG9pdGFibGUsIHNvIEknbSB0aGlua2luZyBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byBjYXRjaCBhbnkgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG90aGVyIGxvZ2ljIGVycm9ycy5cblxuSSBkaWQgYSBxdWljayBjaGVjaywgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9KSVRgIGFsb25lICppcyogc3VmZmljaWVudCBmb3IgYGJwZl9wcm9nX2ppdF9jb21waWxlYCB0byBkbyBhbnl0aGluZy5cblxuQWxyaWdodCwgSSdsbCByZWNvcmQgdGhlc2UgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTEsIk91dHB1dFRva2VucyI6MjExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIzOjQwOjMzLjQxMzExMzk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI1MTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICAgIFwiYnBmX3Byb2dfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfc3VicHJvZ3NcIixcbiAgICBcImJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhXCIsXG4gICAgXCJ2ZXJpZmllcl9yZW1vdmVfaW5zbnNcIixcbiAgICBcImFkanVzdF9pbnNuX2F1eF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgdGhlIGxvZ2ljIGZvciBibGluZGluZyBjb25zdGFudHMgYW5kIG1hbmFnaW5nIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApLiBJdCBjaGFuZ2VzIGhvdyBwcm9ncmFtcyBhcmUgY2xvbmVkIGR1cmluZyBibGluZGluZyBhbmQgZml4ZXMgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYXV4aWxpYXJ5IGRhdGEgd2hlbiBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbG9naWMgZXJyb3JzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfYmxpbmRfY29uc3RhbnRzXCIsXG4gICAgXCJicGZfcHJvZ19qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2ppdF9zdWJwcm9nc1wiLFxuICAgIFwiYnBmX2NsZWFyX2luc25fYXV4X2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwiYWRqdXN0X2luc25fYXV4X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgZm9yIGJsaW5kaW5nIGNvbnN0YW50cyBhbmQgbWFuYWdpbmcgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEgKGBpbnNuX2F1eF9kYXRhYCkuIEl0IGNoYW5nZXMgaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIGJsaW5kaW5nIGFuZCBmaXhlcyBtZW1vcnkgbWFuYWdlbWVudCBvZiBhdXhpbGlhcnkgZGF0YSB3aGVuIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBsb2dpYyBlcnJvcnMgd2VyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowl967v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 23:10:40 +0000 UTC FinishedAt: 2026-07-11 23:40:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "520d7d7942025a58a0c79a61b905a556cf3cb524", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT" ], "series_id": "a09753dc-9a03-43f5-9cc7-aa147f64d983" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_jit_blind_constants", "bpf_prog_jit_compile", "bpf_jit_subprogs", "bpf_clear_insn_aux_data", "verifier_remove_insns", "adjust_insn_aux_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2JsaW5kX2NvbnN0YW50cyYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2JwZl9jbGVhcl9pbnNuX2F1eF9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDthZGp1c3RfaW5zbl9hdXhfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgZm9yIGJsaW5kaW5nIGNvbnN0YW50cyBhbmQgbWFuYWdpbmcgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEgKGBpbnNuX2F1eF9kYXRhYCkuIEl0IGNoYW5nZXMgaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIGJsaW5kaW5nIGFuZCBmaXhlcyBtZW1vcnkgbWFuYWdlbWVudCBvZiBhdXhpbGlhcnkgZGF0YSB3aGVuIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBsb2dpYyBlcnJvcnMgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIzOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTc5MTdhODBjODVmNTc1MWU2ODMwYmY0MjU0NmEwYTQ3NTQwNjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDIzOjQwOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAzMTdlOTliOWFjYzBhNC4uYzk4ZWM5ZGU1YmE2ZWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5AQCAtOTQ4LDYgJiM0Mzs5NDgsNyBAQCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7XG4gXHRib29sIHNlZW5fZGlyZWN0X3dyaXRlO1xuIFx0Ym9vbCBzZWVuX2V4Y2VwdGlvbjtcbiBcdGJvb2wgc2lnbmF0dXJlO1xuJiM0MztcdHUzMiBpbnNuX2F1eF9kYXRhX2xlbjtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXhfZGF0YTsgLyogYXJyYXkgb2YgcGVyLWluc24gc3RhdGUgKi9cbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluZV9pbmZvICpwcmV2X2xpbmZvO1xuIFx0c3RydWN0IGJwZl92ZXJpZmllcl9sb2cgbG9nO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMjMyYzAyMDMxZmVjYmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTIxMSwyNSAmIzQzOzEyMTEsMTIgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9zaW5nbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7XG4tc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XG4tdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXG4ge1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcbiB9XG4tXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLXtcbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcbi17XG4tfVxuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cbiBcbiBpbnQgYnBmX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBjbnQpO1xuQEAgLTEzNjgsNyAmIzQzOzEzNTUsOCBAQCBpbnQgYnBmX2ppdF9nZXRfZnVuY19hZGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbiBcbiBjb25zdCBjaGFyICpicGZfaml0X2dldF9wcm9nX25hbWUoc3RydWN0IGJwZl9wcm9nICpwcm9nKTtcbiBcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4mIzQzO2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpO1xuIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcik7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuQEAgLTE1MjAsOSAmIzQzOzE1MDgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcbiYjNDM7XHRcdFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpXG4ge1xuLVx0cmV0dXJuIHByb2c7XG4mIzQzO1x0KmNsb25lZCA9IGZhbHNlO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCA0N2ZlMDQ3YWQzMGI4OC4uMGE4MDcyZjU5Nzg5NTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTUyLDI3ICYjNDM7MTU1MiwzNCBAQCB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpXG4gICogTm93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIGJsaW5kIHRoZSBtYWluIHByb2cgYW5kIG11c3QgYmUgaW52b2tlZCBvbmx5IHdoZW5cbiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLlxuICAqL1xuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXG4mIzQzO1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZywgKnRtcDtcbiBcdGludCBpbnNuX2RlbHRhLCBpbnNuX2NudDtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcbiBcdGludCBpLCByZXdyaXR0ZW47XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gcHJvZykpXG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcdCpjbG9uZWQgPSBmYWxzZTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gKnBwcm9nKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0Y2xvbmUgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUocHJvZywgR0ZQX1VTRVIpO1xuLVx0aWYgKCFjbG9uZSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZztcbiYjNDM7XHQvKiBvbmx5IGNsb25lIHRoZSBwcm9nIHdoZW4gd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgKi9cbiYjNDM7XHRpZiAoY2xvbmVfbmVlZGVkKSB7XG4mIzQzO1x0XHRwcm9nID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKG9yaWdfcHJvZywgR0ZQX1VTRVIpO1xuJiM0MztcdFx0aWYgKCFwcm9nKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXG4tXHRpZiAoZW52KVxuLVx0XHRlbnYtXHUwMDNlcHJvZyA9IGNsb25lO1xuJiM0MztcdFx0KmNsb25lZCA9IHRydWU7XG4mIzQzO1x0XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xuJiM0MztcdFx0aWYgKGVudilcbiYjNDM7XHRcdFx0ZW52LVx1MDAzZXByb2cgPSBwcm9nO1xuJiM0MztcdH1cbiBcbi1cdGluc25fY250ID0gY2xvbmUtXHUwMDNlbGVuO1xuLVx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaTtcbiYjNDM7XHRpbnNuX2NudCA9IHByb2ctXHUwMDNlbGVuO1xuJiM0MztcdGluc24gPSBwcm9nLVx1MDAzZWluc25zaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkge1xuQEAgLTE1OTMsNDIgJiM0MzsxNjAwLDQ5IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXG4gXHRcdCAgICBpbnNuWzFdLmNvZGUgPT0gMClcbiBcdFx0XHRtZW1jcHkoYXV4LCBpbnNuLCBzaXplb2YoYXV4KSk7XG4gXG4tXHRcdHJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZixcbi1cdFx0XHRcdFx0XHRjbG9uZS1cdTAwM2VhdXgtXHUwMDNldmVyaWZpZXJfemV4dCk7XG4mIzQzO1x0XHRyZXdyaXR0ZW4gPSBicGZfaml0X2JsaW5kX2luc24oaW5zbiwgYXV4LCBpbnNuX2J1ZmYsIHByb2ctXHUwMDNlYXV4LVx1MDAzZXZlcmlmaWVyX3pleHQpO1xuIFx0XHRpZiAoIXJld3JpdHRlbilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGVudilcbiBcdFx0XHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFx0XHRlbHNlXG4tXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKGNsb25lLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4mIzQzO1x0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG4gXHRcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XG4tXHRcdFx0aWYgKGVudilcbi1cdFx0XHRcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cbi1cdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbi1cdFx0XHQvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LVx1MDAzZXByb2cgZHVyaW5nXG4tXHRcdFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cbi1cdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XG4tXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRcdFx0aWYgKCpjbG9uZWQpIHtcbiYjNDM7XHRcdFx0XHQvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi9cbiYjNDM7XHRcdFx0XHQqcHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHRcdFx0aWYgKGVudilcbiYjNDM7XHRcdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xuJiM0MztcdFx0XHRcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXHUwMDNlcHJvZyBkdXJpbmdcbiYjNDM7XHRcdFx0XHQgKiByZWFsbG9jIGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgc28gd2UgbmVlZCB0b1xuJiM0MztcdFx0XHRcdCAqIGZpeCBpdCB1cCBoZXJlIG9uIGVycm9yLlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xuJiM0MztcdFx0XHRcdCpwcHJvZyA9IHByb2c7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcbiBcdFx0fVxuIFxuLVx0XHRjbG9uZSA9IHRtcDtcbiYjNDM7XHRcdHByb2cgPSB0bXA7XG4gXHRcdGluc25fZGVsdGEgPSByZXdyaXR0ZW4gLSAxO1xuIFxuIFx0XHRpZiAoZW52KVxuLVx0XHRcdGVudi1cdTAwM2Vwcm9nID0gY2xvbmU7XG4mIzQzO1x0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbiBcbiBcdFx0LyogV2FsayBuZXcgcHJvZ3JhbSBhbmQgc2tpcCBpbnNucyB3ZSBqdXN0IGluc2VydGVkLiAqL1xuLVx0XHRpbnNuID0gY2xvbmUtXHUwMDNlaW5zbnNpICYjNDM7IGkgJiM0MzsgaW5zbl9kZWx0YTtcbiYjNDM7XHRcdGluc24gPSBwcm9nLVx1MDAzZWluc25zaSAmIzQzOyBpICYjNDM7IGluc25fZGVsdGE7XG4gXHRcdGluc25fY250ICYjNDM7PSBpbnNuX2RlbHRhO1xuIFx0XHRpICAgICAgICAmIzQzOz0gaW5zbl9kZWx0YTtcbiBcdH1cbiBcbi1cdGNsb25lLVx1MDAzZWJsaW5kZWQgPSAxO1xuLVx0cmV0dXJuIGNsb25lO1xuJiM0MztcdHByb2ctXHUwMDNlYmxpbmRlZCA9IDE7XG4mIzQzO1x0KnBwcm9nID0gcHJvZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIGJvb2wgYnBmX2luc25faXNfaW5kaXJlY3RfdGFyZ2V0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbkBAIC0yNjE4LDQ5ICYjNDM7MjYzMiwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcbiBcdHJldHVybiBzZWxlY3RfaW50ZXJwcmV0ZXI7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIGppdF9uZWVkZWQpXG4ge1xuICNpZmRlZiBDT05GSUdfQlBGX0pJVFxuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuIFxuIFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxuIFx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuIFxuLVx0aWYgKGVudikge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXG4tXHRcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcbi1cdFx0ICogb24gZmFpbHVyZS5cbi1cdFx0ICovXG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KVxuLVx0XHRcdHJldHVybiBwcm9nO1xuLVx0fVxuLVxuIFx0b3JpZ19wcm9nID0gcHJvZztcbi1cdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0Lypcbi1cdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxuLVx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXG4tXHQgKi9cbi1cdGlmIChJU19FUlIocHJvZykpXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4mIzQzO1x0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhaml0X25lZWRlZCwgXHUwMDI2Y2xvbmVkKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi1cdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbi1cdFx0aWYgKGVudilcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0cmV0dXJuIHByb2c7XG4mIzQzO1x0aWYgKGNsb25lZCkge1xuJiM0MztcdFx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbiYjNDM7XHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4mIzQzO1x0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuLVxuLW91dF9yZXN0b3JlOlxuLVx0cHJvZyA9IG9yaWdfcHJvZztcbi1cdGlmIChlbnYpXG4tXHRcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcbiYjNDM7b3V0OlxuICNlbmRpZlxuIFx0cmV0dXJuIHByb2c7XG4gfVxuQEAgLTI2OTAsNyAmIzQzOzI2ODgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XG4gXHRcdGlmICgqZXJyKVxuIFx0XHRcdHJldHVybiBmcDtcbiBcbi1cdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcbiYjNDM7XHRcdGZwID0gYnBmX3Byb2dfaml0X2NvbXBpbGUoZW52LCBmcCwgaml0X25lZWRlZCk7XG4gXHRcdGJwZl9wcm9nX2ppdF9hdHRlbXB0X2RvbmUoZnApO1xuIFx0XHRpZiAoIWZwLVx1MDAzZWppdGVkIFx1MDAyNlx1MDAyNiBqaXRfbmVlZGVkKSB7XG4gXHRcdFx0KmVyciA9IC1FTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xuaW5kZXggZDNiZTk3MjcxNGIyMmMuLjgwYzhiZWI0NWVhMDQ0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9maXh1cHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9maXh1cHMuY1xuQEAgLTE3NCw2ICYjNDM7MTc0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmIChjbnQgPT0gMSlcbiBcdFx0cmV0dXJuO1xuIFx0cHJvZ19sZW4gPSBuZXdfcHJvZy1cdTAwM2VsZW47XG4mIzQzO1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gcHJvZ19sZW47XG4gXG4gXHRtZW1tb3ZlKGRhdGEgJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEsIGRhdGEgJiM0Mzsgb2ZmLFxuIFx0XHRzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSAqIChwcm9nX2xlbiAtIG9mZiAtIGNudCAmIzQzOyAxKSk7XG5AQCAtNDQwLDcgJiM0Mzs0NDEsNiBAQCBzdGF0aWMgaW50IGJwZl9hZGpfbGluZm9fYWZ0ZXJfcmVtb3ZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pXG4ge1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXhfZGF0YSA9IGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhO1xuLVx0c3RydWN0IGJwZl9pbnNuICppbnNucyA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaTtcbiBcdGludCBlbmQgPSBzdGFydCAmIzQzOyBsZW47XG4gXHRpbnQgaTtcbiBcbkBAIC00NDksOSAmIzQzOzQ0OSw2IEBAIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxuIFx0XHRcdGt2ZnJlZShhdXhfZGF0YVtpXS5qdCk7XG4gXHRcdFx0YXV4X2RhdGFbaV0uanQgPSBOVUxMO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChicGZfaXNfbGRpbW02NChcdTAwMjZpbnNuc1tpXSkpXG4tXHRcdFx0aSYjNDM7JiM0Mzs7XG4gXHR9XG4gfVxuIFxuQEAgLTQ2NCw3ICYjNDM7NDYxLDYgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudClcbiBcdGlmIChicGZfcHJvZ19pc19vZmZsb2FkZWQoZW52LVx1MDAzZXByb2ctXHUwMDNlYXV4KSlcbiBcdFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XG4gXG4tXHQvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBicGZfcmVtb3ZlX2luc25zLCBhcyBpdCB1c2VzIHByb2ctXHUwMDNlaW5zbnNpICovXG4gXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTtcbiBcbiBcdGVyciA9IGJwZl9yZW1vdmVfaW5zbnMoZW52LVx1MDAzZXByb2csIG9mZiwgY250KTtcbkBAIC00ODMsNiAmIzQzOzQ3OSw3IEBAIHN0YXRpYyBpbnQgdmVyaWZpZXJfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsIHUzMiBjbnQpXG4gXG4gXHRtZW1tb3ZlKGF1eF9kYXRhICYjNDM7IG9mZixcdGF1eF9kYXRhICYjNDM7IG9mZiAmIzQzOyBjbnQsXG4gXHRcdHNpemVvZigqYXV4X2RhdGEpICogKG9yaWdfcHJvZ19sZW4gLSBvZmYgLSBjbnQpKTtcbiYjNDM7XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4gLT0gY250O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk5OSwzMiAmIzQzOzk5NiwxNCBAQCBzdGF0aWMgdTMyICpicGZfZHVwX3N1YnByb2dfc3RhcnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gc3RhdGljIHZvaWQgYnBmX3Jlc3RvcmVfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyICpvcmlnX3N0YXJ0cylcbiB7XG4mIzQzO1x0aWYgKCFvcmlnX3N0YXJ0cylcbiYjNDM7XHRcdHJldHVybjtcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBlbnYtXHUwMDNlc3VicHJvZ19jbnQ7IGkmIzQzOyYjNDM7KVxuIFx0XHRlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2ldLnN0YXJ0ID0gb3JpZ19zdGFydHNbaV07XG4gXHQvKiByZXN0b3JlIHRoZSBzdGFydCBvZiBmYWtlICYjMzk7ZXhpdCYjMzk7IHN1YnByb2cgYXMgd2VsbCAqL1xuIFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tlbnYtXHUwMDNlc3VicHJvZ19jbnRdLnN0YXJ0ID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIH1cbiBcbi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLXtcbi1cdHNpemVfdCBzaXplO1xuLVx0dm9pZCAqbmV3X2F1eDtcbi1cbi1cdHNpemUgPSBhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4pO1xuLVx0bmV3X2F1eCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0aWYgKG5ld19hdXgpXG4tXHRcdG1lbWNweShuZXdfYXV4LCBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSwgc2l6ZSk7XG4tXHRyZXR1cm4gbmV3X2F1eDtcbi19XG4tXG4tdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcbi17XG4tXHQvKiB0aGUgZXhwYW5kZWQgZWxlbWVudHMgYXJlIHplcm8tZmlsbGVkLCBzbyBubyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkICovXG4tXHR2ZnJlZShlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSk7XG4tXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSA9IG9yaWdfaW5zbl9hdXg7XG4tfVxuLVxuIHN0YXRpYyBpbnQgaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpwcm9nID0gZW52LVx1MDAzZXByb2csICoqZnVuYywgKnRtcDtcbkBAIC0xMjk2LDU3ICYjNDM7MTI3NSw0NyBAQCBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4ge1xuIFx0aW50IGVyciwgaTtcbi1cdGJvb2wgYmxpbmRlZCA9IGZhbHNlO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuO1xuIFx0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuLVx0dTMyICpvcmlnX3N1YnByb2dfc3RhcnRzO1xuJiM0MztcdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcbiBcdGlmIChlbnYtXHUwMDNlc3VicHJvZ19jbnQgXHUwMDNjPSAxKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHByb2cgPSBvcmlnX3Byb2cgPSBlbnYtXHUwMDNlcHJvZztcbiBcdGlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7XG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KSB7XG4tXHRcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuLVx0XHR9XG4tXHRcdG9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7XG4tXHRcdGlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykge1xuLVx0XHRcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdFx0Z290byBvdXRfY2xlYW51cDtcbiYjNDM7XHRcdGlmICghcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbiYjNDM7XHRcdFx0b3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTtcbiYjNDM7XHRcdFx0aWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbi1cdFx0cHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7XG4tXHRcdGlmIChJU19FUlIocHJvZykpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4mIzQzO1x0XHRlcnIgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIFx1MDAyNnByb2csICFwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCwgXHUwMDI2Y2xvbmVkKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdFx0fVxuLVx0XHRibGluZGVkID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGVyciA9IGppdF9zdWJwcm9ncyhlbnYpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfaml0X2VycjtcbiBcbi1cdGlmIChibGluZGVkKSB7XG4mIzQzO1x0aWYgKGNsb25lZCkge1xuIFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpO1xuIFx0XHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4tXHRcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0X2ppdF9lcnI6XG4tXHRpZiAoYmxpbmRlZCkge1xuJiM0MztcdGlmIChjbG9uZWQpIHtcbiBcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcbi1cdFx0Lyogcm9sbCBiYWNrIHRvIHRoZSBjbGVhbiBvcmlnaW5hbCBwcm9nICovXG4mIzQzO1x0XHQvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuICBvcmlnaW5hbCBwcm9nICovXG4gXHRcdHByb2cgPSBlbnYtXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcbiBcdFx0Z290byBvdXRfcmVzdG9yZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChlcnIgIT0gLUVGQVVMVCkge1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUZBVUxUIFx1MDAyNlx1MDAyNiAhcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFdlIHdpbGwgZmFsbCBiYWNrIHRvIGludGVycHJldGVyIG1vZGUgd2hlbiBlcnIgaXMgbm90IC1FRkFVTFQsIGJlZm9yZVxuIFx0XHRcdCAqIHRoYXQsIGluc24tXHUwMDNlb2ZmIGFuZCBpbnNuLVx1MDAzZWltbSBzaG91bGQgYmUgcmVzdG9yZWQgdG8gdGhlaXIgb3JpZ2luYWxcbkBAIC0xMzY0LDcgJiM0MzsxMzMzLDYgQEAgaW50IGJwZl9qaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBvdXRfcmVzdG9yZTpcbiBcdGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKGVudiwgb3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4tXHRicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKGVudiwgb3JpZ19pbnNuX2F1eCk7XG4gXHRrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7XG4gb3V0X2NsZWFudXA6XG4gXHQvKiBjbGVhbnVwIG1haW4gcHJvZyB0byBiZSBpbnRlcnByZXRlZCAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggMDNlMjIwMmNjYTEzZDUuLjg1YjA1NTI5ZjEwN2E5IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0yMDEwOCw3ICYjNDM7MjAxMDgsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdGlmICghaXNfcHJpdilcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZicGZfdmVyaWZpZXJfbG9jayk7XG4gXG4tXHRsZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4mIzQzO1x0bGVuID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuO1xuIFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGEgPVxuIFx0XHRfX3ZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgbGVuKSxcbiBcdFx0XHQgIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xuQEAgLTIwMzU0LDcgJiM0MzsyMDM1NCw3IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxuIFx0cmVsZWFzZV9idGZzKGVudik7XG4gZXJyX2ZyZWVfZW52OlxuIFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhKVxuLVx0XHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbik7XG4gXHR2ZnJlZShlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSk7XG4gXHRrdmZyZWUoZW52LVx1MDAzZWZkX2FycmF5KTtcbiBcdGJwZl9zdGFja19saXZlbmVzc19mcmVlKGVudik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjM6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfYmxpbmRfY29uc3RhbnRzJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7YnBmX2NsZWFyX2luc25fYXV4X2RhdGEmIzM0OywKICAgICYjMzQ7dmVyaWZpZXJfcmVtb3ZlX2luc25zJiMzNDssCiAgICAmIzM0O2FkanVzdF9pbnNuX2F1eF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBmb3IgYmxpbmRpbmcgY29uc3RhbnRzIGFuZCBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKS4gSXQgY2hhbmdlcyBob3cgcHJvZ3JhbXMgYXJlIGNsb25lZCBkdXJpbmcgYmxpbmRpbmcgYW5kIGZpeGVzIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGFyZSByZW1vdmVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvZ2ljIGVycm9ycyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3OTE3YTgwYzg1ZjU3NTFlNjgzMGJmNDI1NDZhMGE0NzU0MDYwOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAyMzo0MDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IDMxN2U5OWI5YWNjMGE0Li5jOThlYzlkZTViYTZlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC05NDgsNiAmIzQzOzk0OCw3IEBAIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52IHsKIAlib29sIHNlZW5fZGlyZWN0X3dyaXRlOwogCWJvb2wgc2Vlbl9leGNlcHRpb247CiAJYm9vbCBzaWduYXR1cmU7CiYjNDM7CXUzMiBpbnNuX2F1eF9kYXRhX2xlbjsKIAlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmluc25fYXV4X2RhdGE7IC8qIGFycmF5IG9mIHBlci1pbnNuIHN0YXRlICovCiAJY29uc3Qgc3RydWN0IGJwZl9saW5lX2luZm8gKnByZXZfbGluZm87CiAJc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgbG9nOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggMTRhY2IyNDU1NzQ2ZmMuLjIzMmMwMjAzMWZlY2JiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTEyMTEsMjUgJiM0MzsxMjExLDEyIEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fc2luZ2xlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7Ci1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTsKLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQkJCSAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pCiB7CiAJcmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTsKIH0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCQkgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCkKLXsKLX0KICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi8KIAogaW50IGJwZl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgY250KTsKQEAgLTEzNjgsNyAmIzQzOzEzNTUsOCBAQCBpbnQgYnBmX2ppdF9nZXRfZnVuY19hZGRyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywKIAogY29uc3QgY2hhciAqYnBmX2ppdF9nZXRfcHJvZ19uYW1lKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7CiAKLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKTsKJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csCiYjNDM7CQkJICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpOwogdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKTsKIAogc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQpAQCAtMTUyMCw5ICYjNDM7MTUwOCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiB9CiAKIHN0YXRpYyBpbmxpbmUKLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQomIzQzO2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZywKJiM0MzsJCQkgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZCkKIHsKLQlyZXR1cm4gcHJvZzsKJiM0MzsJKmNsb25lZCA9IGZhbHNlOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jCmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li4wYTgwNzJmNTk3ODk1NyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmMKQEAgLTE1NTIsMjcgJiM0MzsxNTUyLDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcikKICAqIE5vdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB0byBibGluZCB0aGUgbWFpbiBwcm9nIGFuZCBtdXN0IGJlIGludm9rZWQgb25seSB3aGVuCiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLgogICovCi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0MztpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csCiYjNDM7CQkJICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpCiB7CiAJc3RydWN0IGJwZl9pbnNuIGluc25fYnVmZlsxNl0sIGF1eFsyXTsKLQlzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wOwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2cgKnByb2csICpvcmlnX3Byb2csICp0bXA7CiAJaW50IGluc25fZGVsdGEsIGluc25fY250OwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbjsKIAlpbnQgaSwgcmV3cml0dGVuOwogCi0JaWYgKFdBUk5fT05fT05DRShlbnYgJmFtcDsmYW1wOyBlbnYtJmd0O3Byb2cgIT0gcHJvZykpCi0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwkqY2xvbmVkID0gZmFsc2U7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoZW52ICZhbXA7JmFtcDsgZW52LSZndDtwcm9nICE9ICpwcHJvZykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAotCWNsb25lID0gYnBmX3Byb2dfY2xvbmVfY3JlYXRlKHByb2csIEdGUF9VU0VSKTsKLQlpZiAoIWNsb25lKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJcHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZzsKJiM0MzsJLyogb25seSBjbG9uZSB0aGUgcHJvZyB3aGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyICovCiYjNDM7CWlmIChjbG9uZV9uZWVkZWQpIHsKJiM0MzsJCXByb2cgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUob3JpZ19wcm9nLCBHRlBfVVNFUik7CiYjNDM7CQlpZiAoIXByb2cpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqLwotCWlmIChlbnYpCi0JCWVudi0mZ3Q7cHJvZyA9IGNsb25lOwomIzQzOwkJKmNsb25lZCA9IHRydWU7CiYjNDM7CQkvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqLwomIzQzOwkJaWYgKGVudikKJiM0MzsJCQllbnYtJmd0O3Byb2cgPSBwcm9nOwomIzQzOwl9CiAKLQlpbnNuX2NudCA9IGNsb25lLSZndDtsZW47Ci0JaW5zbiA9IGNsb25lLSZndDtpbnNuc2k7CiYjNDM7CWluc25fY250ID0gcHJvZy0mZ3Q7bGVuOwomIzQzOwlpbnNuID0gcHJvZy0mZ3Q7aW5zbnNpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGluc25fY250OyBpJiM0MzsmIzQzOywgaW5zbiYjNDM7JiM0MzspIHsKIAkJaWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkgewpAQCAtMTU5Myw0MiAmIzQzOzE2MDAsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnAKIAkJICAgIGluc25bMV0uY29kZSA9PSAwKQogCQkJbWVtY3B5KGF1eCwgaW5zbiwgc2l6ZW9mKGF1eCkpOwogCi0JCXJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZiwKLQkJCQkJCWNsb25lLSZndDthdXgtJmd0O3ZlcmlmaWVyX3pleHQpOwomIzQzOwkJcmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLCBwcm9nLSZndDthdXgtJmd0O3ZlcmlmaWVyX3pleHQpOwogCQlpZiAoIXJld3JpdHRlbikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChlbnYpCiAJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pOwogCQllbHNlCi0JCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTsKJiM0MzsJCQl0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUocHJvZywgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pOwogCiAJCWlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7Ci0JCQlpZiAoZW52KQotCQkJCS8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi8KLQkJCQllbnYtJmd0O3Byb2cgPSBwcm9nOwotCQkJLyogUGF0Y2hpbmcgbWF5IGhhdmUgcmVwb2ludGVkIGF1eC0mZ3Q7cHJvZyBkdXJpbmcKLQkJCSAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvCi0JCQkgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci4KLQkJCSAqLwotCQkJYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgY2xvbmUpOwotCQkJcmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJCQlpZiAoKmNsb25lZCkgewomIzQzOwkJCQkvKiByb2xsIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHByb2cgKi8KJiM0MzsJCQkJKnBwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJCQlpZiAoZW52KQomIzQzOwkJCQkJZW52LSZndDtwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJCQkvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LSZndDtwcm9nIGR1cmluZwomIzQzOwkJCQkgKiByZWFsbG9jIGZyb20gdGhlIG9yaWdpbmFsIG9uZSwgc28gd2UgbmVlZCB0bwomIzQzOwkJCQkgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJLyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqLwomIzQzOwkJCQkqcHByb2cgPSBwcm9nOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gSVNfRVJSKHRtcCkgPyBQVFJfRVJSKHRtcCkgOiAtRU5PTUVNOwogCQl9CiAKLQkJY2xvbmUgPSB0bXA7CiYjNDM7CQlwcm9nID0gdG1wOwogCQlpbnNuX2RlbHRhID0gcmV3cml0dGVuIC0gMTsKIAogCQlpZiAoZW52KQotCQkJZW52LSZndDtwcm9nID0gY2xvbmU7CiYjNDM7CQkJZW52LSZndDtwcm9nID0gcHJvZzsKIAogCQkvKiBXYWxrIG5ldyBwcm9ncmFtIGFuZCBza2lwIGluc25zIHdlIGp1c3QgaW5zZXJ0ZWQuICovCi0JCWluc24gPSBjbG9uZS0mZ3Q7aW5zbnNpICYjNDM7IGkgJiM0MzsgaW5zbl9kZWx0YTsKJiM0MzsJCWluc24gPSBwcm9nLSZndDtpbnNuc2kgJiM0MzsgaSAmIzQzOyBpbnNuX2RlbHRhOwogCQlpbnNuX2NudCAmIzQzOz0gaW5zbl9kZWx0YTsKIAkJaSAgICAgICAgJiM0Mzs9IGluc25fZGVsdGE7CiAJfQogCi0JY2xvbmUtJmd0O2JsaW5kZWQgPSAxOwotCXJldHVybiBjbG9uZTsKJiM0MzsJcHJvZy0mZ3Q7YmxpbmRlZCA9IDE7CiYjNDM7CSpwcHJvZyA9IHByb2c7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBib29sIGJwZl9pbnNuX2lzX2luZGlyZWN0X3RhcmdldChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csCkBAIC0yNjE4LDQ5ICYjNDM7MjYzMiwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcCkKIAlyZXR1cm4gc2VsZWN0X2ludGVycHJldGVyOwogfQogCi1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLAomIzQzOwkJCQkJICAgICBib29sIGppdF9uZWVkZWQpCiB7CiAjaWZkZWYgQ09ORklHX0JQRl9KSVQKJiM0MzsJaW50IGVycjsKJiM0MzsJYm9vbCBjbG9uZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZzsKLQlzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXg7CiAKIAlpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpCiAJCXJldHVybiBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7CiAKLQlpZiAoZW52KSB7Ci0JCS8qCi0JCSAqIElmIGVudiBpcyBub3QgTlVMTCwgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBlbmQgb2YgYnBmX2NoZWNrKCksIGF0IHRoaXMKLQkJICogcG9pbnQsIG9ubHkgaW5zbl9hdXhfZGF0YSBpcyB1c2VkIGFmdGVyIGZhaWx1cmUsIHNvIGl0IHNob3VsZCBiZSByZXN0b3JlZAotCQkgKiBvbiBmYWlsdXJlLgotCQkgKi8KLQkJb3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpOwotCQlpZiAoIW9yaWdfaW5zbl9hdXgpCi0JCQlyZXR1cm4gcHJvZzsKLQl9Ci0KIAlvcmlnX3Byb2cgPSBwcm9nOwotCXByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpOwotCS8qCi0JICogSWYgYmxpbmRpbmcgd2FzIHJlcXVlc3RlZCBhbmQgd2UgZmFpbGVkIGR1cmluZyBibGluZGluZywgd2UgbXVzdCBmYWxsCi0JICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuCi0JICovCi0JaWYgKElTX0VSUihwcm9nKSkKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCAmYW1wO3Byb2csICFqaXRfbmVlZGVkLCAmYW1wO2Nsb25lZCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIG91dDsKIAogCXByb2cgPSBicGZfaW50X2ppdF9jb21waWxlKGVudiwgcHJvZyk7Ci0JaWYgKHByb2ctJmd0O2ppdGVkKSB7Ci0JCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7Ci0JCWlmIChlbnYpCi0JCQl2ZnJlZShvcmlnX2luc25fYXV4KTsKLQkJcmV0dXJuIHByb2c7CiYjNDM7CWlmIChjbG9uZWQpIHsKJiM0MzsJCWlmIChwcm9nLSZndDtqaXRlZCkgewomIzQzOwkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7CiYjNDM7CQkJcHJvZyA9IG9yaWdfcHJvZzsKJiM0MzsJCX0KIAl9CiAKLQlicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpOwotCi1vdXRfcmVzdG9yZToKLQlwcm9nID0gb3JpZ19wcm9nOwotCWlmIChlbnYpCi0JCWJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTsKJiM0MztvdXQ6CiAjZW5kaWYKIAlyZXR1cm4gcHJvZzsKIH0KQEAgLTI2OTAsNyAmIzQzOzI2ODgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0CiAJCWlmICgqZXJyKQogCQkJcmV0dXJuIGZwOwogCi0JCWZwID0gYnBmX3Byb2dfaml0X2NvbXBpbGUoZW52LCBmcCk7CiYjNDM7CQlmcCA9IGJwZl9wcm9nX2ppdF9jb21waWxlKGVudiwgZnAsIGppdF9uZWVkZWQpOwogCQlicGZfcHJvZ19qaXRfYXR0ZW1wdF9kb25lKGZwKTsKIAkJaWYgKCFmcC0mZ3Q7aml0ZWQgJmFtcDsmYW1wOyBqaXRfbmVlZGVkKSB7CiAJCQkqZXJyID0gLUVOT1RTVVBQOwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmMKaW5kZXggZDNiZTk3MjcxNGIyMmMuLjgwYzhiZWI0NWVhMDQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZml4dXBzLmMKQEAgLTE3NCw2ICYjNDM7MTc0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlpZiAoY250ID09IDEpCiAJCXJldHVybjsKIAlwcm9nX2xlbiA9IG5ld19wcm9nLSZndDtsZW47CiYjNDM7CWVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW4gPSBwcm9nX2xlbjsKIAogCW1lbW1vdmUoZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSwgZGF0YSAmIzQzOyBvZmYsCiAJCXNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpICogKHByb2dfbGVuIC0gb2ZmIC0gY250ICYjNDM7IDEpKTsKQEAgLTQ0MCw3ICYjNDM7NDQxLDYgQEAgc3RhdGljIGludCBicGZfYWRqX2xpbmZvX2FmdGVyX3JlbW92ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAogdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pCiB7CiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICphdXhfZGF0YSA9IGVudi0mZ3Q7aW5zbl9hdXhfZGF0YTsKLQlzdHJ1Y3QgYnBmX2luc24gKmluc25zID0gZW52LSZndDtwcm9nLSZndDtpbnNuc2k7CiAJaW50IGVuZCA9IHN0YXJ0ICYjNDM7IGxlbjsKIAlpbnQgaTsKIApAQCAtNDQ5LDkgJiM0Mzs0NDksNiBAQCB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbikKIAkJCWt2ZnJlZShhdXhfZGF0YVtpXS5qdCk7CiAJCQlhdXhfZGF0YVtpXS5qdCA9IE5VTEw7CiAJCX0KLQotCQlpZiAoYnBmX2lzX2xkaW1tNjQoJmFtcDtpbnNuc1tpXSkpCi0JCQlpJiM0MzsmIzQzOzsKIAl9CiB9CiAKQEAgLTQ2NCw3ICYjNDM7NDYxLDYgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAlpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi0mZ3Q7cHJvZy0mZ3Q7YXV4KSkKIAkJYnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7CiAKLQkvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBicGZfcmVtb3ZlX2luc25zLCBhcyBpdCB1c2VzIHByb2ctJmd0O2luc25zaSAqLwogCWJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgb2ZmLCBjbnQpOwogCiAJZXJyID0gYnBmX3JlbW92ZV9pbnNucyhlbnYtJmd0O3Byb2csIG9mZiwgY250KTsKQEAgLTQ4Myw2ICYjNDM7NDc5LDcgQEAgc3RhdGljIGludCB2ZXJpZmllcl9yZW1vdmVfaW5zbnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwgdTMyIGNudCkKIAogCW1lbW1vdmUoYXV4X2RhdGEgJiM0Mzsgb2ZmLAlhdXhfZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250LAogCQlzaXplb2YoKmF1eF9kYXRhKSAqIChvcmlnX3Byb2dfbGVuIC0gb2ZmIC0gY250KSk7CiYjNDM7CWVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW4gLT0gY250OwogCiAJcmV0dXJuIDA7CiB9CkBAIC05OTksMzIgJiM0Mzs5OTYsMTQgQEAgc3RhdGljIHUzMiAqYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiBzdGF0aWMgdm9pZCBicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgKm9yaWdfc3RhcnRzKQogewomIzQzOwlpZiAoIW9yaWdfc3RhcnRzKQomIzQzOwkJcmV0dXJuOwogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgZW52LSZndDtzdWJwcm9nX2NudDsgaSYjNDM7JiM0MzspCiAJCWVudi0mZ3Q7c3VicHJvZ19pbmZvW2ldLnN0YXJ0ID0gb3JpZ19zdGFydHNbaV07CiAJLyogcmVzdG9yZSB0aGUgc3RhcnQgb2YgZmFrZSAmIzM5O2V4aXQmIzM5OyBzdWJwcm9nIGFzIHdlbGwgKi8KIAllbnYtJmd0O3N1YnByb2dfaW5mb1tlbnYtJmd0O3N1YnByb2dfY250XS5zdGFydCA9IGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuOwogfQogCi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQotewotCXNpemVfdCBzaXplOwotCXZvaWQgKm5ld19hdXg7Ci0KLQlzaXplID0gYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgZW52LSZndDtwcm9nLSZndDtsZW4pOwotCW5ld19hdXggPSBfX3ZtYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQlpZiAobmV3X2F1eCkKLQkJbWVtY3B5KG5ld19hdXgsIGVudi0mZ3Q7aW5zbl9hdXhfZGF0YSwgc2l6ZSk7Ci0JcmV0dXJuIG5ld19hdXg7Ci19Ci0KLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCkKLXsKLQkvKiB0aGUgZXhwYW5kZWQgZWxlbWVudHMgYXJlIHplcm8tZmlsbGVkLCBzbyBubyBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkICovCi0JdmZyZWUoZW52LSZndDtpbnNuX2F1eF9kYXRhKTsKLQllbnYtJmd0O2luc25fYXV4X2RhdGEgPSBvcmlnX2luc25fYXV4OwotfQotCiBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogewogCXN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGVudi0mZ3Q7cHJvZywgKipmdW5jLCAqdG1wOwpAQCAtMTI5Niw1NyAmIzQzOzEyNzUsNDcgQEAgc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiB7CiAJaW50IGVyciwgaTsKLQlib29sIGJsaW5kZWQgPSBmYWxzZTsKIAlzdHJ1Y3QgYnBmX2luc24gKmluc247CiAJc3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nOwotCXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eDsKLQl1MzIgKm9yaWdfc3VicHJvZ19zdGFydHM7CiYjNDM7CXUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IE5VTEw7CiYjNDM7CWJvb2wgY2xvbmVkID0gZmFsc2U7CiAKIAlpZiAoZW52LSZndDtzdWJwcm9nX2NudCAmbHQ7PSAxKQogCQlyZXR1cm4gMDsKIAogCXByb2cgPSBvcmlnX3Byb2cgPSBlbnYtJmd0O3Byb2c7CiAJaWYgKGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpIHsKLQkJb3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpOwotCQlpZiAoIW9yaWdfaW5zbl9hdXgpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9jbGVhbnVwOwotCQl9Ci0JCW9yaWdfc3VicHJvZ19zdGFydHMgPSBicGZfZHVwX3N1YnByb2dfc3RhcnRzKGVudik7Ci0JCWlmICghb3JpZ19zdWJwcm9nX3N0YXJ0cykgewotCQkJdmZyZWUob3JpZ19pbnNuX2F1eCk7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfY2xlYW51cDsKJiM0MzsJCWlmICghcHJvZy0mZ3Q7aml0X3JlcXVpcmVkKSB7CiYjNDM7CQkJb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTsKJiM0MzsJCQlpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHsKJiM0MzsJCQkJZXJyID0gLUVOT01FTTsKJiM0MzsJCQkJZ290byBvdXRfY2xlYW51cDsKJiM0MzsJCQl9CiAJCX0KLQkJcHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7Ci0JCWlmIChJU19FUlIocHJvZykpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlwcm9nID0gb3JpZ19wcm9nOwomIzQzOwkJZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCAmYW1wO3Byb2csICFwcm9nLSZndDtqaXRfcmVxdWlyZWQsICZhbXA7Y2xvbmVkKTsKJiM0MzsJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9yZXN0b3JlOwotCQl9Ci0JCWJsaW5kZWQgPSB0cnVlOwogCX0KIAogCWVyciA9IGppdF9zdWJwcm9ncyhlbnYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ppdF9lcnI7CiAKLQlpZiAoYmxpbmRlZCkgewomIzQzOwlpZiAoY2xvbmVkKSB7CiAJCWJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7CiAJCWt2ZnJlZShvcmlnX3N1YnByb2dfc3RhcnRzKTsKLQkJdmZyZWUob3JpZ19pbnNuX2F1eCk7CiAJfQogCiAJcmV0dXJuIDA7CiAKIG91dF9qaXRfZXJyOgotCWlmIChibGluZGVkKSB7CiYjNDM7CWlmIChjbG9uZWQpIHsKIAkJYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTsKLQkJLyogcm9sbCBiYWNrIHRvIHRoZSBjbGVhbiBvcmlnaW5hbCBwcm9nICovCiYjNDM7CQkvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuICBvcmlnaW5hbCBwcm9nICovCiAJCXByb2cgPSBlbnYtJmd0O3Byb2cgPSBvcmlnX3Byb2c7CiAJCWdvdG8gb3V0X3Jlc3RvcmU7CiAJfSBlbHNlIHsKLQkJaWYgKGVyciAhPSAtRUZBVUxUKSB7CiYjNDM7CQlpZiAoZXJyICE9IC1FRkFVTFQgJmFtcDsmYW1wOyAhcHJvZy0mZ3Q7aml0X3JlcXVpcmVkKSB7CiAJCQkvKgogCQkJICogV2Ugd2lsbCBmYWxsIGJhY2sgdG8gaW50ZXJwcmV0ZXIgbW9kZSB3aGVuIGVyciBpcyBub3QgLUVGQVVMVCwgYmVmb3JlCiAJCQkgKiB0aGF0LCBpbnNuLSZndDtvZmYgYW5kIGluc24tJmd0O2ltbSBzaG91bGQgYmUgcmVzdG9yZWQgdG8gdGhlaXIgb3JpZ2luYWwKQEAgLTEzNjQsNyAmIzQzOzEzMzMsNiBAQCBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiBvdXRfcmVzdG9yZToKIAlicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9yaWdfc3VicHJvZ19zdGFydHMpOwotCWJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTsKIAlrdmZyZWUob3JpZ19zdWJwcm9nX3N0YXJ0cyk7CiBvdXRfY2xlYW51cDoKIAkvKiBjbGVhbnVwIG1haW4gcHJvZyB0byBiZSBpbnRlcnByZXRlZCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IDAzZTIyMDJjY2ExM2Q1Li44NWIwNTUyOWYxMDdhOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtMjAxMDgsNyAmIzQzOzIwMTA4LDcgQEAgaW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsCiAJaWYgKCFpc19wcml2KQogCQltdXRleF9sb2NrKCZhbXA7YnBmX3ZlcmlmaWVyX2xvY2spOwogCi0JbGVuID0gZW52LSZndDtwcm9nLSZndDtsZW47CiYjNDM7CWxlbiA9IGVudi0mZ3Q7aW5zbl9hdXhfZGF0YV9sZW4gPSBlbnYtJmd0O3Byb2ctJmd0O2xlbjsKIAllbnYtJmd0O2luc25fYXV4X2RhdGEgPQogCQlfX3ZtYWxsb2MoYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgbGVuKSwKIAkJCSAgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7CkBAIC0yMDM1NCw3ICYjNDM7MjAzNTQsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwKIAlyZWxlYXNlX2J0ZnMoZW52KTsKIGVycl9mcmVlX2VudjoKIAlpZiAoZW52LSZndDtpbnNuX2F1eF9kYXRhKQotCQlicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuKTsKJiM0MzsJCWJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgMCwgZW52LSZndDtpbnNuX2F1eF9kYXRhX2xlbik7CiAJdmZyZWUoZW52LSZndDtpbnNuX2F1eF9kYXRhKTsKIAlrdmZyZWUoZW52LSZndDtmZF9hcnJheSk7CiAJYnBmX3N0YWNrX2xpdmVuZXNzX2ZyZWUoZW52KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYzMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCUEYgUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IHJhZGFyIGlzIHBpbmdpbmcuIFRoaXMgaXNuJiMzOTt0IHNvbWUgbWlub3IgdHdlYWs7IHRoaXMgaXMgdG91Y2hpbmcgdGhlIGhlYXJ0IG9mIEJQRiB2ZXJpZmllciBhbmQgSklUIGJsaW5kaW5nLCBzcGVjaWZpY2FsbHkgaG93IHdlIGhhbmRsZSBjbG9uaW5nIGFuZCBjb25zdGFudCBibGluZGluZy4gVGhleSYjMzk7dmUgY2hhbmdlZCBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgIHRvIHJldHVybiBhbiBgaW50YCBub3cgaW5zdGVhZCBvZiB0aGUgcHJvZ3JhbSBwb2ludGVyLCB3aGljaCBzZWVtcyBsaWtlIGEgc2lnbmlmaWNhbnQgc3RydWN0dXJhbCBzaGlmdCBpbiBob3cgaXQgYmVoYXZlcy4gVGhleSYjMzk7cmUgYWxzbyBtb2RpZnlpbmcgdGhlIGNsb25pbmcgYmVoYXZpb3IsIGhhbmRsaW5nIGl0IGRpZmZlcmVudGx5IGJhc2VkIG9uIGEgYGNsb25lX25lZWRlZGAgZmxhZywgd2hpY2ggaXMgdXNlZCBpbiBib3RoIGBicGZfcHJvZ19qaXRfY29tcGlsZWAgYW5kIGBicGZfaml0X3N1YnByb2dzYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaW5zbl9hdXhfZGF0YV9sZW5gIGFuZCBpdHMgdXNlIGluIGNsZWFyaW5nIGBpbnNuX2F1eF9kYXRhYCBpcyBhbHNvIGludGVyZXN0aW5nOyBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBjbGVhbiB1cCBob3cgdGhhdCBhdXhpbGlhcnkgZGF0YSBpcyBtYW5hZ2VkLiBBbmQgdGhlIHJlbW92YWwgb2YgdGhvc2UgYGR1cGAgYW5kIGByZXN0b3JlYCBmdW5jdGlvbnMgZm9yIHRoZSBhdXhpbGlhcnkgZGF0YSwgdGhhdCBoYXMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZTsgQlBGIGlzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbW9kZXJuIGtlcm5lbCBhbmQgZ2V0cyBhIGxvdCBvZiB1c2UuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IG1ham9yIG9uZSBhdCB0aGF0LCBzbyBpdCYjMzk7cyAqZGVmaW5pdGVseSogd29ydGggYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBXZeKAmXJlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbG9naWMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbjoKKiAgIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgLSBDbGVhcmx5LCBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzLgoqICAgYGJwZl9wcm9nX2ppdF9jb21waWxlYCAtIFRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgcGxheWVyIGluIHRoZSBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy4KKiAgIGBicGZfaml0X3N1YnByb2dzYCAtIEFub3RoZXIgSklUIGZ1bmN0aW9uLgoqICAgYGJwZl9jaGVja2AgLSBBbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmVyaWZpZXIgd2lsbCBiZSBjcml0aWNhbCwgYXMgdGhpcyB3aWxsIGhhdmUgYSBkaXJlY3QgaW1wYWN0LgoqICAgYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgLSBIb3cgcmVtb3ZpbmcgQlBGIGluc3RydWN0aW9ucyBwbGF5cyB3aXRoIGF1eGlsaWFyeSBkYXRhIG5lZWRzIHRvIGJlIGV4YW1pbmVkLgoqICAgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCAtIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgZGF0YSBjbGVhcmluZyBjaGFuZ2VzLgoKRmluYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBCUEYgSklULCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5LiBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB3aXRoIGEgZ3JlcCBjb21tYW5kIGluIHRoZSByZXBvc2l0b3J5LiBHb3R0YSBtYWtlIHN1cmUgdGhvc2Ugc2V0dGluZ3MgYXJlIGFjdGl2ZSBmb3IgcmVsZXZhbnQgdGVzdCBjYXNlcy4gTm93LCBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBkZWVwZXIgYW5kIGZpbmQgd2hhdCB0aGVzZSBjaGFuZ2VzIGFyZSBhY3R1YWxseSB0cnlpbmcgdG8gYWNoaWV2ZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxua2VybmVsL2JwZi9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclwmIzM0O1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMjM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEpJVCBCbGluZGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbXBhY3Qgb2YgdGhlc2Ugb24gdGhlIEJQRiBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLCB3aGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlLgoKSSBzZWUgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQ6IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIGBicGZfcHJvZ19qaXRfY29tcGlsZWAsIGBicGZfaml0X3N1YnByb2dzYCwgYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCwgYGFkanVzdF9pbnNuX2F1eF9kYXRhYCwgYW5kIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgaXMgdXNlZC4KClJpZ2h0LCBJIHNlZS4gYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCBnZXRzIGNhbGxlZCB3aGVuIGBicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpYCByZXR1cm5zIHRydWUuIFRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGNoZWNrcyBpZiBgYnBmX2ppdF9ibGluZGluZ2AgaXMgZW5hYmxlZC4gQWgsIGBicGZfaml0X2JsaW5kaW5nYCBpcyBhIHN5c2N0bC4gVGhhdCYjMzk7cyBrZXkuIEl0JiMzOTtzIGEgc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGljdGF0ZXMgd2hldGhlciB0aGlzIGJsaW5kaW5nIGJlaGF2aW9yIGlzIGVuYWJsZWQuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBicGZfcHJvZ19uZWVkX2JsaW5kYCBmdW5jdGlvbiBpbiBkZXRhaWwsIGFuZCBhc3Nlc3MgaXRzIHJvbGUgaW4gdGhpcyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDIzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9wcm9nX25lZWRfYmxpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMzYwPXZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcik7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEzNjEtXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEzNjI6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzYzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTE1MDE9c3RhdGljIGlubGluZSB2b2lkIGJwZl9wcm9nX2thbGxzeW1zX2RlbChzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTUwNC1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTUwNTpzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE1MDYte1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTE1NDA9dm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTE1NTItICogTm93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IHRvIGJsaW5kIHRoZSBtYWluIHByb2cgYW5kIG11c3QgYmUgaW52b2tlZCBvbmx5IHdoZW5cbmtlcm5lbC9icGYvY29yZS5jOjE1NTM6ICogYnBmX3Byb2dfbmVlZF9ibGluZCgpIHJldHVybnMgdHJ1ZS5cbmtlcm5lbC9icGYvY29yZS5jLTE1NTQtICovXG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjYzNT1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMjY0Mi1cbmtlcm5lbC9icGYvY29yZS5jOjI2NDM6XHRpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpXG5rZXJuZWwvYnBmL2NvcmUuYy0yNjQ0LVx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTI3NT1pbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTI4Ni1cdHByb2cgPSBvcmlnX3Byb2cgPSBlbnYtXHUwMDNlcHJvZztcbmtlcm5lbC9icGYvZml4dXBzLmM6MTI4NzpcdGlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyODgtXHRcdGlmICghcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTUxCgkJCQkJCQlvdXRwdXQ6IDIxMQoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIEJsaW5kaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZnJvbSB3aGF0IEkgZ2F0aGVyLCB0aGUgY29yZSBvZiB0aGUgaXNzdWUgbGllcyB3aXRoaW4gdGhlIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgZnVuY3Rpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYm90aCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9zdWJwcm9nc2AuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGZpeGVzIGEgYnVnIHJlbGF0ZWQgdG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBgaW5zbl9hdXhfZGF0YWAgd2hlbiBKSVQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nIGFyZSBoYXBwZW5pbmcuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcgY3J1Y2lhbCBzeW1ib2xzOiAgYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCwgbmF0dXJhbGx5LCBhbG9uZyB3aXRoIGBicGZfcHJvZ19qaXRfY29tcGlsZWAgYW5kIGBicGZfaml0X3N1YnByb2dzYCwgYXMgdGhleSYjMzk7cmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbG9naWMgdGhpcyBwYXRjaCBtb2RpZmllcy4gIEkmIzM5O20gYWxzbyBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhdXhpbGlhcnkgZGF0YSBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhYCBhbmQgYGFkanVzdF9pbnNuX2F1eF9kYXRhYCwgc2luY2UgdGhvc2Ugc2VlbSBsaWtlIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLiBBbHNvLCB0aGUgdmVyaWZpZXIgc2lkZSBvZiBpbnN0cnVjdGlvbiByZW1vdmFsIGluIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgIGlzIHJlbGV2YW50IGhlcmUuCgpUaGUgcGF0Y2gmIzM5O3MgaW1wYWN0IGFwcGVhcnMgdG8gYmUgb24gdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyIHRoZW1zZWx2ZXMuIFNwZWNpZmljYWxseSwgaG93IGNvbnN0YW50cyBhcmUgYmxpbmRlZCBhbmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YS4gVGhlIGNoYW5nZXMgdG91Y2ggaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIHRoZSBibGluZGluZyBwcm9jZXNzIGFuZCB0YWNrbGVzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gdGhlIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGdldCByZW1vdmVkLiBUaGVzZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHR3ZWFrcyB0byB0aGUgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSwgYW5kIGltcG9ydGFudGx5LCB0aGV5JiMzOTtyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgYnBmKClgIHN5c2NhbGwuIFRoaXMgbWVhbnMgdGhhdCwgYWZ0ZXIgYWxsLCBhbnkgYnVncyBoZXJlIGNvdWxkIGJlIGV4cGxvaXRhYmxlLCBzbyBJJiMzOTttIHRoaW5raW5nIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIGNhdGNoIGFueSBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3Igb3RoZXIgbG9naWMgZXJyb3JzLgoKSSBkaWQgYSBxdWljayBjaGVjaywgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9KSVRgIGFsb25lICppcyogc3VmZmljaWVudCBmb3IgYGJwZl9wcm9nX2ppdF9jb21waWxlYCB0byBkbyBhbnl0aGluZy4KCkFscmlnaHQsIEkmIzM5O2xsIHJlY29yZCB0aGVzZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAyMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9qaXRfYmxpbmRfY29uc3RhbnRzJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VicHJvZ3MmIzM0OywKICAgICYjMzQ7YnBmX2NsZWFyX2luc25fYXV4X2RhdGEmIzM0OywKICAgICYjMzQ7dmVyaWZpZXJfcmVtb3ZlX2luc25zJiMzNDssCiAgICAmIzM0O2FkanVzdF9pbnNuX2F1eF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBmb3IgYmxpbmRpbmcgY29uc3RhbnRzIGFuZCBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKS4gSXQgY2hhbmdlcyBob3cgcHJvZ3JhbXMgYXJlIGNsb25lZCBkdXJpbmcgYmxpbmRpbmcgYW5kIGZpeGVzIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGFyZSByZW1vdmVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvZ2ljIGVycm9ycyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaml0X2JsaW5kX2NvbnN0YW50cyYjMzQ7LAogICAgJiMzNDticGZfcHJvZ19qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1YnByb2dzJiMzNDssCiAgICAmIzM0O2JwZl9jbGVhcl9pbnNuX2F1eF9kYXRhJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyX3JlbW92ZV9pbnNucyYjMzQ7LAogICAgJiMzNDthZGp1c3RfaW5zbl9hdXhfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgZm9yIGJsaW5kaW5nIGNvbnN0YW50cyBhbmQgbWFuYWdpbmcgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEgKGBpbnNuX2F1eF9kYXRhYCkuIEl0IGNoYW5nZXMgaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIGJsaW5kaW5nIGFuZCBmaXhlcyBtZW1vcnkgbWFuYWdlbWVudCBvZiBhdXhpbGlhcnkgZGF0YSB3aGVuIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBsb2dpYyBlcnJvcnMgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTFUMjM6NDA6MDkuMTY2Mzk0MDI2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzMTY5ODI1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICAgIFwiYnBmX3Byb2dfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfc3VicHJvZ3NcIixcbiAgICBcImJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhXCIsXG4gICAgXCJ2ZXJpZmllcl9yZW1vdmVfaW5zbnNcIixcbiAgICBcImFkanVzdF9pbnNuX2F1eF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgdGhlIGxvZ2ljIGZvciBibGluZGluZyBjb25zdGFudHMgYW5kIG1hbmFnaW5nIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApLiBJdCBjaGFuZ2VzIGhvdyBwcm9ncmFtcyBhcmUgY2xvbmVkIGR1cmluZyBibGluZGluZyBhbmQgZml4ZXMgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYXV4aWxpYXJ5IGRhdGEgd2hlbiBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbG9naWMgZXJyb3JzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjM6NDA6MDkuMTY2NDAwMDI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDI3ODEwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNzkxN2E4MGM4NWY1NzUxZTY4MzBiZjQyNTQ2YTBhNDc1NDA2MDljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDIzOjQwOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuaW5kZXggMzE3ZTk5YjlhY2MwYTQuLmM5OGVjOWRlNWJhNmVjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTk0OCw2ICs5NDgsNyBAQCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiB7XFxuIFxcdGJvb2wgc2Vlbl9kaXJlY3Rfd3JpdGU7XFxuIFxcdGJvb2wgc2Vlbl9leGNlcHRpb247XFxuIFxcdGJvb2wgc2lnbmF0dXJlO1xcbitcXHR1MzIgaW5zbl9hdXhfZGF0YV9sZW47XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXhfZGF0YTsgLyogYXJyYXkgb2YgcGVyLWluc24gc3RhdGUgKi9cXG4gXFx0Y29uc3Qgc3RydWN0IGJwZl9saW5lX2luZm8gKnByZXZfbGluZm87XFxuIFxcdHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nIGxvZztcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMjMyYzAyMDMxZmVjYmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTIxMSwyNSArMTIxMSwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbik7XFxuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xcbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eCk7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pXFxuIHtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcXG4gfVxcbi1cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi17XFxuLVxcdHJldHVybiBOVUxMO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eClcXG4te1xcbi19XFxuICNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG4gXFxuIGludCBicGZfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGNudCk7XFxuQEAgLTEzNjgsNyArMTM1NSw4IEBAIGludCBicGZfaml0X2dldF9mdW5jX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbiBcXG4gY29uc3QgY2hhciAqYnBmX2ppdF9nZXRfcHJvZ19uYW1lKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuIFxcbi1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpO1xcbiB2b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbkBAIC0xNTIwLDkgKzE1MDgsMTEgQEAgc3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX25lZWRfYmxpbmQoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbitpbnQgYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICoqcHByb2csXFxuK1xcdFxcdFxcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxcbiB7XFxuLVxcdHJldHVybiBwcm9nO1xcbitcXHQqY2xvbmVkID0gZmFsc2U7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li4wYTgwNzJmNTk3ODk1NyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXFxuQEAgLTE1NTIsMjcgKzE1NTIsMzQgQEAgdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKVxcbiAgKiBOb3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gYmxpbmQgdGhlIG1haW4gcHJvZyBhbmQgbXVzdCBiZSBpbnZva2VkIG9ubHkgd2hlblxcbiAgKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLlxcbiAgKi9cXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgY2xvbmVfbmVlZGVkLCBib29sICpjbG9uZWQpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pbnNuIGluc25fYnVmZlsxNl0sIGF1eFsyXTtcXG4tXFx0c3RydWN0IGJwZl9wcm9nICpjbG9uZSwgKnRtcDtcXG4rXFx0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nLCAqdG1wO1xcbiBcXHRpbnQgaW5zbl9kZWx0YSwgaW5zbl9jbnQ7XFxuIFxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcXG4gXFx0aW50IGksIHJld3JpdHRlbjtcXG4gXFxuLVxcdGlmIChXQVJOX09OX09OQ0UoZW52IFxcdTAwMjZcXHUwMDI2IGVudi1cXHUwMDNlcHJvZyAhPSBwcm9nKSlcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcdCpjbG9uZWQgPSBmYWxzZTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShlbnYgXFx1MDAyNlxcdTAwMjYgZW52LVxcdTAwM2Vwcm9nICE9ICpwcHJvZykpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0Y2xvbmUgPSBicGZfcHJvZ19jbG9uZV9jcmVhdGUocHJvZywgR0ZQX1VTRVIpO1xcbi1cXHRpZiAoIWNsb25lKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0cHJvZyA9IG9yaWdfcHJvZyA9ICpwcHJvZztcXG4rXFx0Lyogb25seSBjbG9uZSB0aGUgcHJvZyB3aGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gdGhlIGludGVycHJldGVyICovXFxuK1xcdGlmIChjbG9uZV9uZWVkZWQpIHtcXG4rXFx0XFx0cHJvZyA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShvcmlnX3Byb2csIEdGUF9VU0VSKTtcXG4rXFx0XFx0aWYgKCFwcm9nKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXFxuLVxcdGlmIChlbnYpXFxuLVxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IGNsb25lO1xcbitcXHRcXHQqY2xvbmVkID0gdHJ1ZTtcXG4rXFx0XFx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cXG4rXFx0XFx0aWYgKGVudilcXG4rXFx0XFx0XFx0ZW52LVxcdTAwM2Vwcm9nID0gcHJvZztcXG4rXFx0fVxcbiBcXG4tXFx0aW5zbl9jbnQgPSBjbG9uZS1cXHUwMDNlbGVuO1xcbi1cXHRpbnNuID0gY2xvbmUtXFx1MDAzZWluc25zaTtcXG4rXFx0aW5zbl9jbnQgPSBwcm9nLVxcdTAwM2VsZW47XFxuK1xcdGluc24gPSBwcm9nLVxcdTAwM2VpbnNuc2k7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5zbl9jbnQ7IGkrKywgaW5zbisrKSB7XFxuIFxcdFxcdGlmIChicGZfcHNldWRvX2Z1bmMoaW5zbikpIHtcXG5AQCAtMTU5Myw0MiArMTYwMCw0OSBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicFxcbiBcXHRcXHQgICAgaW5zblsxXS5jb2RlID09IDApXFxuIFxcdFxcdFxcdG1lbWNweShhdXgsIGluc24sIHNpemVvZihhdXgpKTtcXG4gXFxuLVxcdFxcdHJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y2xvbmUtXFx1MDAzZWF1eC1cXHUwMDNldmVyaWZpZXJfemV4dCk7XFxuK1xcdFxcdHJld3JpdHRlbiA9IGJwZl9qaXRfYmxpbmRfaW5zbihpbnNuLCBhdXgsIGluc25fYnVmZiwgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2V2ZXJpZmllcl96ZXh0KTtcXG4gXFx0XFx0aWYgKCFyZXdyaXR0ZW4pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGVudilcXG4gXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4rXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKHByb2csIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4gXFxuIFxcdFxcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XFxuLVxcdFxcdFxcdGlmIChlbnYpXFxuLVxcdFxcdFxcdFxcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cXG4tXFx0XFx0XFx0XFx0ZW52LVxcdTAwM2Vwcm9nID0gcHJvZztcXG4tXFx0XFx0XFx0LyogUGF0Y2hpbmcgbWF5IGhhdmUgcmVwb2ludGVkIGF1eC1cXHUwMDNlcHJvZyBkdXJpbmdcXG4tXFx0XFx0XFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cXG4tXFx0XFx0XFx0ICogZml4IGl0IHVwIGhlcmUgb24gZXJyb3IuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XFxuLVxcdFxcdFxcdHJldHVybiBJU19FUlIodG1wKSA/IHRtcCA6IEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdFxcdFxcdGlmICgqY2xvbmVkKSB7XFxuK1xcdFxcdFxcdFxcdC8qIHJvbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgcHJvZyAqL1xcbitcXHRcXHRcXHRcXHQqcHByb2cgPSBvcmlnX3Byb2c7XFxuK1xcdFxcdFxcdFxcdGlmIChlbnYpXFxuK1xcdFxcdFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcXG4rXFx0XFx0XFx0XFx0LyogUGF0Y2hpbmcgbWF5IGhhdmUgcmVwb2ludGVkIGF1eC1cXHUwMDNlcHJvZyBkdXJpbmdcXG4rXFx0XFx0XFx0XFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cXG4rXFx0XFx0XFx0XFx0ICogZml4IGl0IHVwIGhlcmUgb24gZXJyb3IuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHQvKiBqdXN0IGtlZXAgdGhlIGxhdGVzdCBzdWNjZXNzZnVsbHkgcGF0Y2hlZCBwcm9nICovXFxuK1xcdFxcdFxcdFxcdCpwcHJvZyA9IHByb2c7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0Y2xvbmUgPSB0bXA7XFxuK1xcdFxcdHByb2cgPSB0bXA7XFxuIFxcdFxcdGluc25fZGVsdGEgPSByZXdyaXR0ZW4gLSAxO1xcbiBcXG4gXFx0XFx0aWYgKGVudilcXG4tXFx0XFx0XFx0ZW52LVxcdTAwM2Vwcm9nID0gY2xvbmU7XFxuK1xcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IHByb2c7XFxuIFxcbiBcXHRcXHQvKiBXYWxrIG5ldyBwcm9ncmFtIGFuZCBza2lwIGluc25zIHdlIGp1c3QgaW5zZXJ0ZWQuICovXFxuLVxcdFxcdGluc24gPSBjbG9uZS1cXHUwMDNlaW5zbnNpICsgaSArIGluc25fZGVsdGE7XFxuK1xcdFxcdGluc24gPSBwcm9nLVxcdTAwM2VpbnNuc2kgKyBpICsgaW5zbl9kZWx0YTtcXG4gXFx0XFx0aW5zbl9jbnQgKz0gaW5zbl9kZWx0YTtcXG4gXFx0XFx0aSAgICAgICAgKz0gaW5zbl9kZWx0YTtcXG4gXFx0fVxcbiBcXG4tXFx0Y2xvbmUtXFx1MDAzZWJsaW5kZWQgPSAxO1xcbi1cXHRyZXR1cm4gY2xvbmU7XFxuK1xcdHByb2ctXFx1MDAzZWJsaW5kZWQgPSAxO1xcbitcXHQqcHByb2cgPSBwcm9nO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIGJvb2wgYnBmX2luc25faXNfaW5kaXJlY3RfdGFyZ2V0KGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5AQCAtMjYxOCw0OSArMjYzMiwzMyBAQCBzdGF0aWMgYm9vbCBicGZfcHJvZ19zZWxlY3RfaW50ZXJwcmV0ZXIoc3RydWN0IGJwZl9wcm9nICpmcClcXG4gXFx0cmV0dXJuIHNlbGVjdF9pbnRlcnByZXRlcjtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbitzdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCBqaXRfbmVlZGVkKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbitcXHRpbnQgZXJyO1xcbitcXHRib29sIGNsb25lZCA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9yaWdfcHJvZztcXG4tXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xcbiBcXG4gXFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxcbiBcXHRcXHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbiBcXG4tXFx0aWYgKGVudikge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXFxuLVxcdFxcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcXG4tXFx0XFx0ICogb24gZmFpbHVyZS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcXG4tXFx0XFx0aWYgKCFvcmlnX2luc25fYXV4KVxcbi1cXHRcXHRcXHRyZXR1cm4gcHJvZztcXG4tXFx0fVxcbi1cXG4gXFx0b3JpZ19wcm9nID0gcHJvZztcXG4tXFx0cHJvZyA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgcHJvZyk7XFxuLVxcdC8qXFxuLVxcdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxcbi1cXHQgKiBiYWNrIHRvIHRoZSBpbnRlcnByZXRlci5cXG4tXFx0ICovXFxuLVxcdGlmIChJU19FUlIocHJvZykpXFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuK1xcdGVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgXFx1MDAyNnByb2csICFqaXRfbmVlZGVkLCBcXHUwMDI2Y2xvbmVkKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbi1cXHRpZiAocHJvZy1cXHUwMDNlaml0ZWQpIHtcXG4tXFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcXG4tXFx0XFx0aWYgKGVudilcXG4tXFx0XFx0XFx0dmZyZWUob3JpZ19pbnNuX2F1eCk7XFxuLVxcdFxcdHJldHVybiBwcm9nO1xcbitcXHRpZiAoY2xvbmVkKSB7XFxuK1xcdFxcdGlmIChwcm9nLVxcdTAwM2VqaXRlZCkge1xcbitcXHRcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBvcmlnX3Byb2cpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xcbitcXHRcXHRcXHRwcm9nID0gb3JpZ19wcm9nO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XFxuLVxcbi1vdXRfcmVzdG9yZTpcXG4tXFx0cHJvZyA9IG9yaWdfcHJvZztcXG4tXFx0aWYgKGVudilcXG4tXFx0XFx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xcbitvdXQ6XFxuICNlbmRpZlxcbiBcXHRyZXR1cm4gcHJvZztcXG4gfVxcbkBAIC0yNjkwLDcgKzI2ODgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XFxuIFxcdFxcdGlmICgqZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZnA7XFxuIFxcbi1cXHRcXHRmcCA9IGJwZl9wcm9nX2ppdF9jb21waWxlKGVudiwgZnApO1xcbitcXHRcXHRmcCA9IGJwZl9wcm9nX2ppdF9jb21waWxlKGVudiwgZnAsIGppdF9uZWVkZWQpO1xcbiBcXHRcXHRicGZfcHJvZ19qaXRfYXR0ZW1wdF9kb25lKGZwKTtcXG4gXFx0XFx0aWYgKCFmcC1cXHUwMDNlaml0ZWQgXFx1MDAyNlxcdTAwMjYgaml0X25lZWRlZCkge1xcbiBcXHRcXHRcXHQqZXJyID0gLUVOT1RTVVBQO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2ZpeHVwcy5jIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbmluZGV4IGQzYmU5NzI3MTRiMjJjLi44MGM4YmViNDVlYTA0NCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuKysrIGIva2VybmVsL2JwZi9maXh1cHMuY1xcbkBAIC0xNzQsNiArMTc0LDcgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKGNudCA9PSAxKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdHByb2dfbGVuID0gbmV3X3Byb2ctXFx1MDAzZWxlbjtcXG4rXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhX2xlbiA9IHByb2dfbGVuO1xcbiBcXG4gXFx0bWVtbW92ZShkYXRhICsgb2ZmICsgY250IC0gMSwgZGF0YSArIG9mZixcXG4gXFx0XFx0c2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSkgKiAocHJvZ19sZW4gLSBvZmYgLSBjbnQgKyAxKSk7XFxuQEAgLTQ0MCw3ICs0NDEsNiBAQCBzdGF0aWMgaW50IGJwZl9hZGpfbGluZm9fYWZ0ZXJfcmVtb3ZlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4X2RhdGEgPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGE7XFxuLVxcdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25zaTtcXG4gXFx0aW50IGVuZCA9IHN0YXJ0ICsgbGVuO1xcbiBcXHRpbnQgaTtcXG4gXFxuQEAgLTQ0OSw5ICs0NDksNiBAQCB2b2lkIGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdGFydCwgaW50IGxlbilcXG4gXFx0XFx0XFx0a3ZmcmVlKGF1eF9kYXRhW2ldLmp0KTtcXG4gXFx0XFx0XFx0YXV4X2RhdGFbaV0uanQgPSBOVUxMO1xcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHRpZiAoYnBmX2lzX2xkaW1tNjQoXFx1MDAyNmluc25zW2ldKSlcXG4tXFx0XFx0XFx0aSsrO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTQ2NCw3ICs0NjEsNiBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxcbiBcXHRpZiAoYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4KSlcXG4gXFx0XFx0YnBmX3Byb2dfb2ZmbG9hZF9yZW1vdmVfaW5zbnMoZW52LCBvZmYsIGNudCk7XFxuIFxcbi1cXHQvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBicGZfcmVtb3ZlX2luc25zLCBhcyBpdCB1c2VzIHByb2ctXFx1MDAzZWluc25zaSAqL1xcbiBcXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIG9mZiwgY250KTtcXG4gXFxuIFxcdGVyciA9IGJwZl9yZW1vdmVfaW5zbnMoZW52LVxcdTAwM2Vwcm9nLCBvZmYsIGNudCk7XFxuQEAgLTQ4Myw2ICs0NzksNyBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxcbiBcXG4gXFx0bWVtbW92ZShhdXhfZGF0YSArIG9mZixcXHRhdXhfZGF0YSArIG9mZiArIGNudCxcXG4gXFx0XFx0c2l6ZW9mKCphdXhfZGF0YSkgKiAob3JpZ19wcm9nX2xlbiAtIG9mZiAtIGNudCkpO1xcbitcXHRlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFfbGVuIC09IGNudDtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTk5OSwzMiArOTk2LDE0IEBAIHN0YXRpYyB1MzIgKmJwZl9kdXBfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFxuIHN0YXRpYyB2b2lkIGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiAqb3JpZ19zdGFydHMpXFxuIHtcXG4rXFx0aWYgKCFvcmlnX3N0YXJ0cylcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIGVudi1cXHUwMDNlc3VicHJvZ19jbnQ7IGkrKylcXG4gXFx0XFx0ZW52LVxcdTAwM2VzdWJwcm9nX2luZm9baV0uc3RhcnQgPSBvcmlnX3N0YXJ0c1tpXTtcXG4gXFx0LyogcmVzdG9yZSB0aGUgc3RhcnQgb2YgZmFrZSAnZXhpdCcgc3VicHJvZyBhcyB3ZWxsICovXFxuIFxcdGVudi1cXHUwMDNlc3VicHJvZ19pbmZvW2Vudi1cXHUwMDNlc3VicHJvZ19jbnRdLnN0YXJ0ID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuIH1cXG4gXFxuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLXtcXG4tXFx0c2l6ZV90IHNpemU7XFxuLVxcdHZvaWQgKm5ld19hdXg7XFxuLVxcbi1cXHRzaXplID0gYXJyYXlfc2l6ZShzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSwgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4pO1xcbi1cXHRuZXdfYXV4ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdGlmIChuZXdfYXV4KVxcbi1cXHRcXHRtZW1jcHkobmV3X2F1eCwgZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhLCBzaXplKTtcXG4tXFx0cmV0dXJuIG5ld19hdXg7XFxuLX1cXG4tXFxuLXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KVxcbi17XFxuLVxcdC8qIHRoZSBleHBhbmRlZCBlbGVtZW50cyBhcmUgemVyby1maWxsZWQsIHNvIG5vIHNwZWNpYWwgaGFuZGxpbmcgaXMgcmVxdWlyZWQgKi9cXG4tXFx0dmZyZWUoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhKTtcXG4tXFx0ZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhID0gb3JpZ19pbnNuX2F1eDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXFx1MDAzZXByb2csICoqZnVuYywgKnRtcDtcXG5AQCAtMTI5Niw1NyArMTI3NSw0NyBAQCBzdGF0aWMgaW50IGppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiB7XFxuIFxcdGludCBlcnIsIGk7XFxuLVxcdGJvb2wgYmxpbmRlZCA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc247XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZztcXG4tXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xcbi1cXHR1MzIgKm9yaWdfc3VicHJvZ19zdGFydHM7XFxuK1xcdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IE5VTEw7XFxuK1xcdGJvb2wgY2xvbmVkID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoZW52LVxcdTAwM2VzdWJwcm9nX2NudCBcXHUwMDNjPSAxKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHByb2cgPSBvcmlnX3Byb2cgPSBlbnYtXFx1MDAzZXByb2c7XFxuIFxcdGlmIChicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKSB7XFxuLVxcdFxcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcXG4tXFx0XFx0aWYgKCFvcmlnX2luc25fYXV4KSB7XFxuLVxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuLVxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0b3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTtcXG4tXFx0XFx0aWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7XFxuLVxcdFxcdFxcdHZmcmVlKG9yaWdfaW5zbl9hdXgpO1xcbi1cXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbi1cXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwO1xcbitcXHRcXHRpZiAoIXByb2ctXFx1MDAzZWppdF9yZXF1aXJlZCkge1xcbitcXHRcXHRcXHRvcmlnX3N1YnByb2dfc3RhcnRzID0gYnBmX2R1cF9zdWJwcm9nX3N0YXJ0cyhlbnYpO1xcbitcXHRcXHRcXHRpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0XFx0Z290byBvdXRfY2xlYW51cDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xcbi1cXHRcXHRpZiAoSVNfRVJSKHByb2cpKSB7XFxuLVxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuLVxcdFxcdFxcdHByb2cgPSBvcmlnX3Byb2c7XFxuK1xcdFxcdGVyciA9IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKGVudiwgXFx1MDAyNnByb2csICFwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQsIFxcdTAwMjZjbG9uZWQpO1xcbitcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJsaW5kZWQgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBqaXRfc3VicHJvZ3MoZW52KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXRfaml0X2VycjtcXG4gXFxuLVxcdGlmIChibGluZGVkKSB7XFxuK1xcdGlmIChjbG9uZWQpIHtcXG4gXFx0XFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcXG4gXFx0XFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xcbi1cXHRcXHR2ZnJlZShvcmlnX2luc25fYXV4KTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBvdXRfaml0X2VycjpcXG4tXFx0aWYgKGJsaW5kZWQpIHtcXG4rXFx0aWYgKGNsb25lZCkge1xcbiBcXHRcXHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xcbi1cXHRcXHQvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuIG9yaWdpbmFsIHByb2cgKi9cXG4rXFx0XFx0Lyogcm9sbCBiYWNrIHRvIHRoZSBjbGVhbiAgb3JpZ2luYWwgcHJvZyAqL1xcbiBcXHRcXHRwcm9nID0gZW52LVxcdTAwM2Vwcm9nID0gb3JpZ19wcm9nO1xcbiBcXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRpZiAoZXJyICE9IC1FRkFVTFQpIHtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRUZBVUxUIFxcdTAwMjZcXHUwMDI2ICFwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQpIHtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogV2Ugd2lsbCBmYWxsIGJhY2sgdG8gaW50ZXJwcmV0ZXIgbW9kZSB3aGVuIGVyciBpcyBub3QgLUVGQVVMVCwgYmVmb3JlXFxuIFxcdFxcdFxcdCAqIHRoYXQsIGluc24tXFx1MDAzZW9mZiBhbmQgaW5zbi1cXHUwMDNlaW1tIHNob3VsZCBiZSByZXN0b3JlZCB0byB0aGVpciBvcmlnaW5hbFxcbkBAIC0xMzY0LDcgKzEzMzMsNiBAQCBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXG4gb3V0X3Jlc3RvcmU6XFxuIFxcdGJwZl9yZXN0b3JlX3N1YnByb2dfc3RhcnRzKGVudiwgb3JpZ19zdWJwcm9nX3N0YXJ0cyk7XFxuLVxcdGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoZW52LCBvcmlnX2luc25fYXV4KTtcXG4gXFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xcbiBvdXRfY2xlYW51cDpcXG4gXFx0LyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi9cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggMDNlMjIwMmNjYTEzZDUuLjg1YjA1NTI5ZjEwN2E5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC0yMDEwOCw3ICsyMDEwOCw3IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRpZiAoIWlzX3ByaXYpXFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJwZl92ZXJpZmllcl9sb2NrKTtcXG4gXFxuLVxcdGxlbiA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuO1xcbitcXHRsZW4gPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW47XFxuIFxcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YSA9XFxuIFxcdFxcdF9fdm1hbGxvYyhhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBsZW4pLFxcbiBcXHRcXHRcXHQgIEdGUF9LRVJORUxfQUNDT1VOVCB8IF9fR0ZQX1pFUk8pO1xcbkBAIC0yMDM1NCw3ICsyMDM1NCw3IEBAIGludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbiBcXHRyZWxlYXNlX2J0ZnMoZW52KTtcXG4gZXJyX2ZyZWVfZW52OlxcbiBcXHRpZiAoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhKVxcbi1cXHRcXHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFfbGVuKTtcXG4gXFx0dmZyZWUoZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhKTtcXG4gXFx0a3ZmcmVlKGVudi1cXHUwMDNlZmRfYXJyYXkpO1xcbiBcXHRicGZfc3RhY2tfbGl2ZW5lc3NfZnJlZShlbnYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMzo0MDowOS41NzAwMjQ4NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzOTEzMzQzNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfSklUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ppdF9ibGluZF9jb25zdGFudHNcIixcbiAgICBcImJwZl9wcm9nX2ppdF9jb21waWxlXCIsXG4gICAgXCJicGZfaml0X3N1YnByb2dzXCIsXG4gICAgXCJicGZfY2xlYXJfaW5zbl9hdXhfZGF0YVwiLFxuICAgIFwidmVyaWZpZXJfcmVtb3ZlX2luc25zXCIsXG4gICAgXCJhZGp1c3RfaW5zbl9hdXhfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgYW5kIEpJVCBjb21waWxlciwgc3BlY2lmaWNhbGx5IHRoZSBsb2dpYyBmb3IgYmxpbmRpbmcgY29uc3RhbnRzIGFuZCBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YSAoYGluc25fYXV4X2RhdGFgKS4gSXQgY2hhbmdlcyBob3cgcHJvZ3JhbXMgYXJlIGNsb25lZCBkdXJpbmcgYmxpbmRpbmcgYW5kIGZpeGVzIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGFyZSByZW1vdmVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgQlBGIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvZ2ljIGVycm9ycyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTc5MTdhODBjODVmNTc1MWU2ODMwYmY0MjU0NmEwYTQ3NTQwNjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDExIDIzOjQwOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbmluZGV4IDMxN2U5OWI5YWNjMGE0Li5jOThlYzlkZTViYTZlYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC05NDgsNiArOTQ4LDcgQEAgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYge1xuIFx0Ym9vbCBzZWVuX2RpcmVjdF93cml0ZTtcbiBcdGJvb2wgc2Vlbl9leGNlcHRpb247XG4gXHRib29sIHNpZ25hdHVyZTtcbitcdHUzMiBpbnNuX2F1eF9kYXRhX2xlbjtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXhfZGF0YTsgLyogYXJyYXkgb2YgcGVyLWluc24gc3RhdGUgKi9cbiBcdGNvbnN0IHN0cnVjdCBicGZfbGluZV9pbmZvICpwcmV2X2xpbmZvO1xuIFx0c3RydWN0IGJwZl92ZXJpZmllcl9sb2cgbG9nO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMjMyYzAyMDMxZmVjYmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTIxMSwyNSArMTIxMSwxMiBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbi1zdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKmJwZl9kdXBfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KTtcbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcbiB7XG4gXHRyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApO1xuIH1cbi1cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KVxuLXtcbi19XG4gI2VuZGlmIC8qIENPTkZJR19CUEZfU1lTQ0FMTCAqL1xuIFxuIGludCBicGZfcmVtb3ZlX2luc25zKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGNudCk7XG5AQCAtMTM2OCw3ICsxMzU1LDggQEAgaW50IGJwZl9qaXRfZ2V0X2Z1bmNfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4gXG4gY29uc3QgY2hhciAqYnBmX2ppdF9nZXRfcHJvZ19uYW1lKHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4gXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcbitcdFx0XHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZCk7XG4gdm9pZCBicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihzdHJ1Y3QgYnBmX3Byb2cgKmZwLCBzdHJ1Y3QgYnBmX3Byb2cgKmZwX290aGVyKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5AQCAtMTUyMCw5ICsxNTA4LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19uZWVkX2JsaW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuLXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuK2ludCBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKipwcHJvZyxcbitcdFx0XHQgICAgYm9vbCBjbG9uZV9uZWVkZWQsIGJvb2wgKmNsb25lZClcbiB7XG4tXHRyZXR1cm4gcHJvZztcbitcdCpjbG9uZWQgPSBmYWxzZTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXG5pbmRleCA0N2ZlMDQ3YWQzMGI4OC4uMGE4MDcyZjU5Nzg5NTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcbkBAIC0xNTUyLDI3ICsxNTUyLDM0IEBAIHZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcilcbiAgKiBOb3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gYmxpbmQgdGhlIG1haW4gcHJvZyBhbmQgbXVzdCBiZSBpbnZva2VkIG9ubHkgd2hlblxuICAqIGJwZl9wcm9nX25lZWRfYmxpbmQoKSByZXR1cm5zIHRydWUuXG4gICovXG4tc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4raW50IGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqKnBwcm9nLFxuK1x0XHRcdCAgICBib29sIGNsb25lX25lZWRlZCwgYm9vbCAqY2xvbmVkKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbiBpbnNuX2J1ZmZbMTZdLCBhdXhbMl07XG4tXHRzdHJ1Y3QgYnBmX3Byb2cgKmNsb25lLCAqdG1wO1xuK1x0c3RydWN0IGJwZl9wcm9nICpwcm9nLCAqb3JpZ19wcm9nLCAqdG1wO1xuIFx0aW50IGluc25fZGVsdGEsIGluc25fY250O1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuO1xuIFx0aW50IGksIHJld3JpdHRlbjtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UoZW52IFx1MDAyNlx1MDAyNiBlbnYtXHUwMDNlcHJvZyAhPSBwcm9nKSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHQqY2xvbmVkID0gZmFsc2U7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKGVudiBcdTAwMjZcdTAwMjYgZW52LVx1MDAzZXByb2cgIT0gKnBwcm9nKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRjbG9uZSA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShwcm9nLCBHRlBfVVNFUik7XG4tXHRpZiAoIWNsb25lKVxuLVx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdHByb2cgPSBvcmlnX3Byb2cgPSAqcHByb2c7XG4rXHQvKiBvbmx5IGNsb25lIHRoZSBwcm9nIHdoZW4gd2UgY2FuIGZhbGwgYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIgKi9cbitcdGlmIChjbG9uZV9uZWVkZWQpIHtcbitcdFx0cHJvZyA9IGJwZl9wcm9nX2Nsb25lX2NyZWF0ZShvcmlnX3Byb2csIEdGUF9VU0VSKTtcbitcdFx0aWYgKCFwcm9nKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0LyogbWFrZSBzdXJlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBwYXRjaGVzIHRoZSBjb3JyZWN0IHByb2cgKi9cbi1cdGlmIChlbnYpXG4tXHRcdGVudi1cdTAwM2Vwcm9nID0gY2xvbmU7XG4rXHRcdCpjbG9uZWQgPSB0cnVlO1xuK1x0XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xuK1x0XHRpZiAoZW52KVxuK1x0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbitcdH1cbiBcbi1cdGluc25fY250ID0gY2xvbmUtXHUwMDNlbGVuO1xuLVx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaTtcbitcdGluc25fY250ID0gcHJvZy1cdTAwM2VsZW47XG4rXHRpbnNuID0gcHJvZy1cdTAwM2VpbnNuc2k7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbnNuX2NudDsgaSsrLCBpbnNuKyspIHtcbiBcdFx0aWYgKGJwZl9wc2V1ZG9fZnVuYyhpbnNuKSkge1xuQEAgLTE1OTMsNDIgKzE2MDAsNDkgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBcbiBcdFx0ICAgIGluc25bMV0uY29kZSA9PSAwKVxuIFx0XHRcdG1lbWNweShhdXgsIGluc24sIHNpemVvZihhdXgpKTtcbiBcbi1cdFx0cmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLFxuLVx0XHRcdFx0XHRcdGNsb25lLVx1MDAzZWF1eC1cdTAwM2V2ZXJpZmllcl96ZXh0KTtcbitcdFx0cmV3cml0dGVuID0gYnBmX2ppdF9ibGluZF9pbnNuKGluc24sIGF1eCwgaW5zbl9idWZmLCBwcm9nLVx1MDAzZWF1eC1cdTAwM2V2ZXJpZmllcl96ZXh0KTtcbiBcdFx0aWYgKCFyZXdyaXR0ZW4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChlbnYpXG4gXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcbiBcdFx0ZWxzZVxuLVx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuK1x0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShwcm9nLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG4gXHRcdGlmIChJU19FUlJfT1JfTlVMTCh0bXApKSB7XG4tXHRcdFx0aWYgKGVudilcbi1cdFx0XHRcdC8qIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb2cgKi9cbi1cdFx0XHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbi1cdFx0XHQvKiBQYXRjaGluZyBtYXkgaGF2ZSByZXBvaW50ZWQgYXV4LVx1MDAzZXByb2cgZHVyaW5nXG4tXHRcdFx0ICogcmVhbGxvYyBmcm9tIHRoZSBvcmlnaW5hbCBvbmUsIHNvIHdlIG5lZWQgdG9cbi1cdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbi1cdFx0XHQgKi9cbi1cdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihwcm9nLCBjbG9uZSk7XG4tXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gdG1wIDogRVJSX1BUUigtRU5PTUVNKTtcbitcdFx0XHRpZiAoKmNsb25lZCkge1xuK1x0XHRcdFx0Lyogcm9sbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwcm9nICovXG4rXHRcdFx0XHQqcHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdFx0XHRpZiAoZW52KVxuK1x0XHRcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcbitcdFx0XHRcdC8qIFBhdGNoaW5nIG1heSBoYXZlIHJlcG9pbnRlZCBhdXgtXHUwMDNlcHJvZyBkdXJpbmdcbitcdFx0XHRcdCAqIHJlYWxsb2MgZnJvbSB0aGUgb3JpZ2luYWwgb25lLCBzbyB3ZSBuZWVkIHRvXG4rXHRcdFx0XHQgKiBmaXggaXQgdXAgaGVyZSBvbiBlcnJvci5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIob3JpZ19wcm9nLCBwcm9nKTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0LyoganVzdCBrZWVwIHRoZSBsYXRlc3Qgc3VjY2Vzc2Z1bGx5IHBhdGNoZWQgcHJvZyAqL1xuK1x0XHRcdFx0KnBwcm9nID0gcHJvZztcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIElTX0VSUih0bXApID8gUFRSX0VSUih0bXApIDogLUVOT01FTTtcbiBcdFx0fVxuIFxuLVx0XHRjbG9uZSA9IHRtcDtcbitcdFx0cHJvZyA9IHRtcDtcbiBcdFx0aW5zbl9kZWx0YSA9IHJld3JpdHRlbiAtIDE7XG4gXG4gXHRcdGlmIChlbnYpXG4tXHRcdFx0ZW52LVx1MDAzZXByb2cgPSBjbG9uZTtcbitcdFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2c7XG4gXG4gXHRcdC8qIFdhbGsgbmV3IHByb2dyYW0gYW5kIHNraXAgaW5zbnMgd2UganVzdCBpbnNlcnRlZC4gKi9cbi1cdFx0aW5zbiA9IGNsb25lLVx1MDAzZWluc25zaSArIGkgKyBpbnNuX2RlbHRhO1xuK1x0XHRpbnNuID0gcHJvZy1cdTAwM2VpbnNuc2kgKyBpICsgaW5zbl9kZWx0YTtcbiBcdFx0aW5zbl9jbnQgKz0gaW5zbl9kZWx0YTtcbiBcdFx0aSAgICAgICAgKz0gaW5zbl9kZWx0YTtcbiBcdH1cbiBcbi1cdGNsb25lLVx1MDAzZWJsaW5kZWQgPSAxO1xuLVx0cmV0dXJuIGNsb25lO1xuK1x0cHJvZy1cdTAwM2VibGluZGVkID0gMTtcbitcdCpwcHJvZyA9IHByb2c7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gYm9vbCBicGZfaW5zbl9pc19pbmRpcmVjdF90YXJnZXQoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuQEAgLTI2MTgsNDkgKzI2MzIsMzMgQEAgc3RhdGljIGJvb2wgYnBmX3Byb2dfc2VsZWN0X2ludGVycHJldGVyKHN0cnVjdCBicGZfcHJvZyAqZnApXG4gXHRyZXR1cm4gc2VsZWN0X2ludGVycHJldGVyO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4rc3RhdGljIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfaml0X2NvbXBpbGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgaml0X25lZWRlZClcbiB7XG4gI2lmZGVmIENPTkZJR19CUEZfSklUXG4rXHRpbnQgZXJyO1xuK1x0Ym9vbCBjbG9uZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb3JpZ19wcm9nO1xuLVx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4O1xuIFxuIFx0aWYgKCFicGZfcHJvZ19uZWVkX2JsaW5kKHByb2cpKVxuIFx0XHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuIFxuLVx0aWYgKGVudikge1xuLVx0XHQvKlxuLVx0XHQgKiBJZiBlbnYgaXMgbm90IE5VTEwsIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgZW5kIG9mIGJwZl9jaGVjaygpLCBhdCB0aGlzXG4tXHRcdCAqIHBvaW50LCBvbmx5IGluc25fYXV4X2RhdGEgaXMgdXNlZCBhZnRlciBmYWlsdXJlLCBzbyBpdCBzaG91bGQgYmUgcmVzdG9yZWRcbi1cdFx0ICogb24gZmFpbHVyZS5cbi1cdFx0ICovXG4tXHRcdG9yaWdfaW5zbl9hdXggPSBicGZfZHVwX2luc25fYXV4X2RhdGEoZW52KTtcbi1cdFx0aWYgKCFvcmlnX2luc25fYXV4KVxuLVx0XHRcdHJldHVybiBwcm9nO1xuLVx0fVxuLVxuIFx0b3JpZ19wcm9nID0gcHJvZztcbi1cdHByb2cgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIHByb2cpO1xuLVx0Lypcbi1cdCAqIElmIGJsaW5kaW5nIHdhcyByZXF1ZXN0ZWQgYW5kIHdlIGZhaWxlZCBkdXJpbmcgYmxpbmRpbmcsIHdlIG11c3QgZmFsbFxuLVx0ICogYmFjayB0byB0aGUgaW50ZXJwcmV0ZXIuXG4tXHQgKi9cbi1cdGlmIChJU19FUlIocHJvZykpXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRlcnIgPSBicGZfaml0X2JsaW5kX2NvbnN0YW50cyhlbnYsIFx1MDAyNnByb2csICFqaXRfbmVlZGVkLCBcdTAwMjZjbG9uZWQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRwcm9nID0gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xuLVx0aWYgKHByb2ctXHUwMDNlaml0ZWQpIHtcbi1cdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbi1cdFx0aWYgKGVudilcbi1cdFx0XHR2ZnJlZShvcmlnX2luc25fYXV4KTtcbi1cdFx0cmV0dXJuIHByb2c7XG4rXHRpZiAoY2xvbmVkKSB7XG4rXHRcdGlmIChwcm9nLVx1MDAzZWppdGVkKSB7XG4rXHRcdFx0YnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIocHJvZywgb3JpZ19wcm9nKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRicGZfaml0X3Byb2dfcmVsZWFzZV9vdGhlcihvcmlnX3Byb2csIHByb2cpO1xuK1x0XHRcdHByb2cgPSBvcmlnX3Byb2c7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4tXG4tb3V0X3Jlc3RvcmU6XG4tXHRwcm9nID0gb3JpZ19wcm9nO1xuLVx0aWYgKGVudilcbi1cdFx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xuK291dDpcbiAjZW5kaWZcbiBcdHJldHVybiBwcm9nO1xuIH1cbkBAIC0yNjkwLDcgKzI2ODgsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0XG4gXHRcdGlmICgqZXJyKVxuIFx0XHRcdHJldHVybiBmcDtcbiBcbi1cdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwKTtcbitcdFx0ZnAgPSBicGZfcHJvZ19qaXRfY29tcGlsZShlbnYsIGZwLCBqaXRfbmVlZGVkKTtcbiBcdFx0YnBmX3Byb2dfaml0X2F0dGVtcHRfZG9uZShmcCk7XG4gXHRcdGlmICghZnAtXHUwMDNlaml0ZWQgXHUwMDI2XHUwMDI2IGppdF9uZWVkZWQpIHtcbiBcdFx0XHQqZXJyID0gLUVOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBkM2JlOTcyNzE0YjIyYy4uODBjOGJlYjQ1ZWEwNDQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMTc0LDYgKzE3NCw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoY250ID09IDEpXG4gXHRcdHJldHVybjtcbiBcdHByb2dfbGVuID0gbmV3X3Byb2ctXHUwMDNlbGVuO1xuK1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFfbGVuID0gcHJvZ19sZW47XG4gXG4gXHRtZW1tb3ZlKGRhdGEgKyBvZmYgKyBjbnQgLSAxLCBkYXRhICsgb2ZmLFxuIFx0XHRzaXplb2Yoc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhKSAqIChwcm9nX2xlbiAtIG9mZiAtIGNudCArIDEpKTtcbkBAIC00NDAsNyArNDQxLDYgQEAgc3RhdGljIGludCBicGZfYWRqX2xpbmZvX2FmdGVyX3JlbW92ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuIHZvaWQgYnBmX2NsZWFyX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN0YXJ0LCBpbnQgbGVuKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYXV4X2RhdGEgPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YTtcbi1cdHN0cnVjdCBicGZfaW5zbiAqaW5zbnMgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2k7XG4gXHRpbnQgZW5kID0gc3RhcnQgKyBsZW47XG4gXHRpbnQgaTtcbiBcbkBAIC00NDksOSArNDQ5LDYgQEAgdm9pZCBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3RhcnQsIGludCBsZW4pXG4gXHRcdFx0a3ZmcmVlKGF1eF9kYXRhW2ldLmp0KTtcbiBcdFx0XHRhdXhfZGF0YVtpXS5qdCA9IE5VTEw7XG4gXHRcdH1cbi1cbi1cdFx0aWYgKGJwZl9pc19sZGltbTY0KFx1MDAyNmluc25zW2ldKSlcbi1cdFx0XHRpKys7XG4gXHR9XG4gfVxuIFxuQEAgLTQ2NCw3ICs0NjEsNiBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFx0aWYgKGJwZl9wcm9nX2lzX29mZmxvYWRlZChlbnYtXHUwMDNlcHJvZy1cdTAwM2VhdXgpKVxuIFx0XHRicGZfcHJvZ19vZmZsb2FkX3JlbW92ZV9pbnNucyhlbnYsIG9mZiwgY250KTtcbiBcbi1cdC8qIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGJwZl9yZW1vdmVfaW5zbnMsIGFzIGl0IHVzZXMgcHJvZy1cdTAwM2VpbnNuc2kgKi9cbiBcdGJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhKGVudiwgb2ZmLCBjbnQpO1xuIFxuIFx0ZXJyID0gYnBmX3JlbW92ZV9pbnNucyhlbnYtXHUwMDNlcHJvZywgb2ZmLCBjbnQpO1xuQEAgLTQ4Myw2ICs0NzksNyBAQCBzdGF0aWMgaW50IHZlcmlmaWVyX3JlbW92ZV9pbnNucyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLCB1MzIgY250KVxuIFxuIFx0bWVtbW92ZShhdXhfZGF0YSArIG9mZixcdGF1eF9kYXRhICsgb2ZmICsgY250LFxuIFx0XHRzaXplb2YoKmF1eF9kYXRhKSAqIChvcmlnX3Byb2dfbGVuIC0gb2ZmIC0gY250KSk7XG4rXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4gLT0gY250O1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk5OSwzMiArOTk2LDE0IEBAIHN0YXRpYyB1MzIgKmJwZl9kdXBfc3VicHJvZ19zdGFydHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcbiBzdGF0aWMgdm9pZCBicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgKm9yaWdfc3RhcnRzKVxuIHtcbitcdGlmICghb3JpZ19zdGFydHMpXG4rXHRcdHJldHVybjtcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBlbnYtXHUwMDNlc3VicHJvZ19jbnQ7IGkrKylcbiBcdFx0ZW52LVx1MDAzZXN1YnByb2dfaW5mb1tpXS5zdGFydCA9IG9yaWdfc3RhcnRzW2ldO1xuIFx0LyogcmVzdG9yZSB0aGUgc3RhcnQgb2YgZmFrZSAnZXhpdCcgc3VicHJvZyBhcyB3ZWxsICovXG4gXHRlbnYtXHUwMDNlc3VicHJvZ19pbmZvW2Vudi1cdTAwM2VzdWJwcm9nX2NudF0uc3RhcnQgPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gfVxuIFxuLXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4te1xuLVx0c2l6ZV90IHNpemU7XG4tXHR2b2lkICpuZXdfYXV4O1xuLVxuLVx0c2l6ZSA9IGFycmF5X3NpemUoc2l6ZW9mKHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSksIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbik7XG4tXHRuZXdfYXV4ID0gX192bWFsbG9jKHNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRpZiAobmV3X2F1eClcbi1cdFx0bWVtY3B5KG5ld19hdXgsIGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhLCBzaXplKTtcbi1cdHJldHVybiBuZXdfYXV4O1xuLX1cbi1cbi12b2lkIGJwZl9yZXN0b3JlX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KVxuLXtcbi1cdC8qIHRoZSBleHBhbmRlZCBlbGVtZW50cyBhcmUgemVyby1maWxsZWQsIHNvIG5vIHNwZWNpYWwgaGFuZGxpbmcgaXMgcmVxdWlyZWQgKi9cbi1cdHZmcmVlKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhKTtcbi1cdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhID0gb3JpZ19pbnNuX2F1eDtcbi19XG4tXG4gc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiB7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBlbnYtXHUwMDNlcHJvZywgKipmdW5jLCAqdG1wO1xuQEAgLTEyOTYsNTcgKzEyNzUsNDcgQEAgc3RhdGljIGludCBqaXRfc3VicHJvZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBpbnQgYnBmX2ppdF9zdWJwcm9ncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIHtcbiBcdGludCBlcnIsIGk7XG4tXHRib29sIGJsaW5kZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbjtcbiBcdHN0cnVjdCBicGZfcHJvZyAqcHJvZywgKm9yaWdfcHJvZztcbi1cdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqb3JpZ19pbnNuX2F1eDtcbi1cdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cztcbitcdHUzMiAqb3JpZ19zdWJwcm9nX3N0YXJ0cyA9IE5VTEw7XG4rXHRib29sIGNsb25lZCA9IGZhbHNlO1xuIFxuIFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2NudCBcdTAwM2M9IDEpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cHJvZyA9IG9yaWdfcHJvZyA9IGVudi1cdTAwM2Vwcm9nO1xuIFx0aWYgKGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpIHtcbi1cdFx0b3JpZ19pbnNuX2F1eCA9IGJwZl9kdXBfaW5zbl9hdXhfZGF0YShlbnYpO1xuLVx0XHRpZiAoIW9yaWdfaW5zbl9hdXgpIHtcbi1cdFx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRcdGdvdG8gb3V0X2NsZWFudXA7XG4tXHRcdH1cbi1cdFx0b3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTtcbi1cdFx0aWYgKCFvcmlnX3N1YnByb2dfc3RhcnRzKSB7XG4tXHRcdFx0dmZyZWUob3JpZ19pbnNuX2F1eCk7XG4tXHRcdFx0ZXJyID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuK1x0XHRpZiAoIXByb2ctXHUwMDNlaml0X3JlcXVpcmVkKSB7XG4rXHRcdFx0b3JpZ19zdWJwcm9nX3N0YXJ0cyA9IGJwZl9kdXBfc3VicHJvZ19zdGFydHMoZW52KTtcbitcdFx0XHRpZiAoIW9yaWdfc3VicHJvZ19zdGFydHMpIHtcbitcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0XHRnb3RvIG91dF9jbGVhbnVwO1xuK1x0XHRcdH1cbiBcdFx0fVxuLVx0XHRwcm9nID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBwcm9nKTtcbi1cdFx0aWYgKElTX0VSUihwcm9nKSkge1xuLVx0XHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdFx0cHJvZyA9IG9yaWdfcHJvZztcbitcdFx0ZXJyID0gYnBmX2ppdF9ibGluZF9jb25zdGFudHMoZW52LCBcdTAwMjZwcm9nLCAhcHJvZy1cdTAwM2VqaXRfcmVxdWlyZWQsIFx1MDAyNmNsb25lZCk7XG4rXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdFx0fVxuLVx0XHRibGluZGVkID0gdHJ1ZTtcbiBcdH1cbiBcbiBcdGVyciA9IGppdF9zdWJwcm9ncyhlbnYpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXRfaml0X2VycjtcbiBcbi1cdGlmIChibGluZGVkKSB7XG4rXHRpZiAoY2xvbmVkKSB7XG4gXHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHByb2csIG9yaWdfcHJvZyk7XG4gXHRcdGt2ZnJlZShvcmlnX3N1YnByb2dfc3RhcnRzKTtcbi1cdFx0dmZyZWUob3JpZ19pbnNuX2F1eCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiBvdXRfaml0X2Vycjpcbi1cdGlmIChibGluZGVkKSB7XG4rXHRpZiAoY2xvbmVkKSB7XG4gXHRcdGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKG9yaWdfcHJvZywgcHJvZyk7XG4tXHRcdC8qIHJvbGwgYmFjayB0byB0aGUgY2xlYW4gb3JpZ2luYWwgcHJvZyAqL1xuK1x0XHQvKiByb2xsIGJhY2sgdG8gdGhlIGNsZWFuICBvcmlnaW5hbCBwcm9nICovXG4gXHRcdHByb2cgPSBlbnYtXHUwMDNlcHJvZyA9IG9yaWdfcHJvZztcbiBcdFx0Z290byBvdXRfcmVzdG9yZTtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChlcnIgIT0gLUVGQVVMVCkge1xuK1x0XHRpZiAoZXJyICE9IC1FRkFVTFQgXHUwMDI2XHUwMDI2ICFwcm9nLVx1MDAzZWppdF9yZXF1aXJlZCkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2Ugd2lsbCBmYWxsIGJhY2sgdG8gaW50ZXJwcmV0ZXIgbW9kZSB3aGVuIGVyciBpcyBub3QgLUVGQVVMVCwgYmVmb3JlXG4gXHRcdFx0ICogdGhhdCwgaW5zbi1cdTAwM2VvZmYgYW5kIGluc24tXHUwMDNlaW1tIHNob3VsZCBiZSByZXN0b3JlZCB0byB0aGVpciBvcmlnaW5hbFxuQEAgLTEzNjQsNyArMTMzMyw2IEBAIGludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gb3V0X3Jlc3RvcmU6XG4gXHRicGZfcmVzdG9yZV9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9yaWdfc3VicHJvZ19zdGFydHMpO1xuLVx0YnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShlbnYsIG9yaWdfaW5zbl9hdXgpO1xuIFx0a3ZmcmVlKG9yaWdfc3VicHJvZ19zdGFydHMpO1xuIG91dF9jbGVhbnVwOlxuIFx0LyogY2xlYW51cCBtYWluIHByb2cgdG8gYmUgaW50ZXJwcmV0ZWQgKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDAzZTIyMDJjY2ExM2Q1Li44NWIwNTUyOWYxMDdhOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMjAxMDgsNyArMjAxMDgsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdGlmICghaXNfcHJpdilcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZicGZfdmVyaWZpZXJfbG9jayk7XG4gXG4tXHRsZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4rXHRsZW4gPSBlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YV9sZW4gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW47XG4gXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSA9XG4gXHRcdF9fdm1hbGxvYyhhcnJheV9zaXplKHNpemVvZihzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEpLCBsZW4pLFxuIFx0XHRcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UIHwgX19HRlBfWkVSTyk7XG5AQCAtMjAzNTQsNyArMjAzNTQsNyBAQCBpbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbiBcdHJlbGVhc2VfYnRmcyhlbnYpO1xuIGVycl9mcmVlX2VudjpcbiBcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSlcbi1cdFx0YnBmX2NsZWFyX2luc25fYXV4X2RhdGEoZW52LCAwLCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4pO1xuK1x0XHRicGZfY2xlYXJfaW5zbl9hdXhfZGF0YShlbnYsIDAsIGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhX2xlbik7XG4gXHR2ZnJlZShlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YSk7XG4gXHRrdmZyZWUoZW52LVx1MDAzZWZkX2FycmF5KTtcbiBcdGJwZl9zdGFja19saXZlbmVzc19mcmVlKGVudik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMzo0MDowOS41NzAwMjYxNjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTMxMzg3NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IHJhZGFyIGlzIHBpbmdpbmcuIFRoaXMgaXNuJ3Qgc29tZSBtaW5vciB0d2VhazsgdGhpcyBpcyB0b3VjaGluZyB0aGUgaGVhcnQgb2YgQlBGIHZlcmlmaWVyIGFuZCBKSVQgYmxpbmRpbmcsIHNwZWNpZmljYWxseSBob3cgd2UgaGFuZGxlIGNsb25pbmcgYW5kIGNvbnN0YW50IGJsaW5kaW5nLiBUaGV5J3ZlIGNoYW5nZWQgYGJwZl9qaXRfYmxpbmRfY29uc3RhbnRzYCB0byByZXR1cm4gYW4gYGludGAgbm93IGluc3RlYWQgb2YgdGhlIHByb2dyYW0gcG9pbnRlciwgd2hpY2ggc2VlbXMgbGlrZSBhIHNpZ25pZmljYW50IHN0cnVjdHVyYWwgc2hpZnQgaW4gaG93IGl0IGJlaGF2ZXMuIFRoZXkncmUgYWxzbyBtb2RpZnlpbmcgdGhlIGNsb25pbmcgYmVoYXZpb3IsIGhhbmRsaW5nIGl0IGRpZmZlcmVudGx5IGJhc2VkIG9uIGEgYGNsb25lX25lZWRlZGAgZmxhZywgd2hpY2ggaXMgdXNlZCBpbiBib3RoIGBicGZfcHJvZ19qaXRfY29tcGlsZWAgYW5kIGBicGZfaml0X3N1YnByb2dzYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaW5zbl9hdXhfZGF0YV9sZW5gIGFuZCBpdHMgdXNlIGluIGNsZWFyaW5nIGBpbnNuX2F1eF9kYXRhYCBpcyBhbHNvIGludGVyZXN0aW5nOyBsb29rcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIGNsZWFuIHVwIGhvdyB0aGF0IGF1eGlsaWFyeSBkYXRhIGlzIG1hbmFnZWQuIEFuZCB0aGUgcmVtb3ZhbCBvZiB0aG9zZSBgZHVwYCBhbmQgYHJlc3RvcmVgIGZ1bmN0aW9ucyBmb3IgdGhlIGF1eGlsaWFyeSBkYXRhLCB0aGF0IGhhcyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYWJzb2x1dGVseSByZWFjaGFibGU7IEJQRiBpcyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIG1vZGVybiBrZXJuZWwgYW5kIGdldHMgYSBsb3Qgb2YgdXNlLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IG1ham9yIG9uZSBhdCB0aGF0LCBzbyBpdCdzICpkZWZpbml0ZWx5KiB3b3J0aCBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFdl4oCZcmUgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBsb2dpYyBoZXJlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uOlxuKiAgIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgLSBDbGVhcmx5LCBjZW50cmFsIHRvIHRoZSBjaGFuZ2VzLlxuKiAgIGBicGZfcHJvZ19qaXRfY29tcGlsZWAgLSBUaGlzIGZ1bmN0aW9uIGlzIGEga2V5IHBsYXllciBpbiB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuXG4qICAgYGJwZl9qaXRfc3VicHJvZ3NgIC0gQW5vdGhlciBKSVQgZnVuY3Rpb24uXG4qICAgYGJwZl9jaGVja2AgLSBBbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmVyaWZpZXIgd2lsbCBiZSBjcml0aWNhbCwgYXMgdGhpcyB3aWxsIGhhdmUgYSBkaXJlY3QgaW1wYWN0LlxuKiAgIGB2ZXJpZmllcl9yZW1vdmVfaW5zbnNgIC0gSG93IHJlbW92aW5nIEJQRiBpbnN0cnVjdGlvbnMgcGxheXMgd2l0aCBhdXhpbGlhcnkgZGF0YSBuZWVkcyB0byBiZSBleGFtaW5lZC5cbiogICBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgIC0gVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBkYXRhIGNsZWFyaW5nIGNoYW5nZXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UncmUgdGFsa2luZyBhYm91dCBCUEYgSklULCBzbyBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19CUEZfSklUYCBhcmUgZGVmaW5pdGVseSBpbiBwbGF5LiBMZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IHdpdGggYSBncmVwIGNvbW1hbmQgaW4gdGhlIHJlcG9zaXRvcnkuIEdvdHRhIG1ha2Ugc3VyZSB0aG9zZSBzZXR0aW5ncyBhcmUgYWN0aXZlIGZvciByZWxldmFudCB0ZXN0IGNhc2VzLiBOb3csIGxldCdzIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGFuZCBmaW5kIHdoYXQgdGhlc2UgY2hhbmdlcyBhcmUgYWN0dWFsbHkgdHJ5aW5nIHRvIGFjaGlldmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMzo0MDoxNi41MDE0MTU4NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0MjAzMjUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXFxua2VybmVsL2JwZi9LY29uZmlnOjQyOmNvbmZpZyBCUEZfSklUXFxua2VybmVsL2JwZi9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTU3LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo1ODpjb25maWcgQlBGX0pJVF9BTFdBWVNfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNTktXFx0Ym9vbCBcXFwiUGVybWFuZW50bHkgZW5hYmxlIEJQRiBKSVQgYW5kIHJlbW92ZSBCUEYgaW50ZXJwcmV0ZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNjgtXFxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cXG5rZXJuZWwvYnBmL0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVCB8fCBCUEZfSklUX0FMV0FZU19PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQyMzo0MDoyMC40NDM0NTM3ODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM2ODUzNDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSklUIEJsaW5kaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgQlBGX1NZU0NBTExgIGFuZCBgQlBGX0pJVGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbXBhY3Qgb2YgdGhlc2Ugb24gdGhlIEJQRiBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQsIHdoYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUuXG5cbkkgc2VlIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgLCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgLCBgYnBmX2ppdF9zdWJwcm9nc2AsIGBicGZfY2xlYXJfaW5zbl9hdXhfZGF0YWAsIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAsIGFuZCBgdmVyaWZpZXJfcmVtb3ZlX2luc25zYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHBhcnRpY3VsYXJseSBhcm91bmQgaG93IGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AgaXMgdXNlZC5cblxuUmlnaHQsIEkgc2VlLiBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgIGdldHMgY2FsbGVkIHdoZW4gYGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZylgIHJldHVybnMgdHJ1ZS4gVGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgY2hlY2tzIGlmIGBicGZfaml0X2JsaW5kaW5nYCBpcyBlbmFibGVkLiBBaCwgYGJwZl9qaXRfYmxpbmRpbmdgIGlzIGEgc3lzY3RsLiBUaGF0J3Mga2V5LiBJdCdzIGEgc3lzdGVtLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZGljdGF0ZXMgd2hldGhlciB0aGlzIGJsaW5kaW5nIGJlaGF2aW9yIGlzIGVuYWJsZWQuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBicGZfcHJvZ19uZWVkX2JsaW5kYCBmdW5jdGlvbiBpbiBkZXRhaWwsIGFuZCBhc3Nlc3MgaXRzIHJvbGUgaW4gdGhpcyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODM2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIzOjQwOjI0LjY4MDMwOTk1OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODY4MTU3Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX25lZWRfYmxpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMzYwPXZvaWQgYnBmX2ppdF9wcm9nX3JlbGVhc2Vfb3RoZXIoc3RydWN0IGJwZl9wcm9nICpmcCwgc3RydWN0IGJwZl9wcm9nICpmcF9vdGhlcik7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzYxLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTM2MjpzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfbmVlZF9ibGluZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMzYzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTUwMT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX3Byb2dfa2FsbHN5bXNfZGVsKHN0cnVjdCBicGZfcHJvZyAqZnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE1MDQtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxNTA1OnN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19uZWVkX2JsaW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE1MDYte1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MTU0MD12b2lkIGJwZl9qaXRfcHJvZ19yZWxlYXNlX290aGVyKHN0cnVjdCBicGZfcHJvZyAqZnAsIHN0cnVjdCBicGZfcHJvZyAqZnBfb3RoZXIpXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0xNTUyLSAqIE5vdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSB0byBibGluZCB0aGUgbWFpbiBwcm9nIGFuZCBtdXN0IGJlIGludm9rZWQgb25seSB3aGVuXFxua2VybmVsL2JwZi9jb3JlLmM6MTU1MzogKiBicGZfcHJvZ19uZWVkX2JsaW5kKCkgcmV0dXJucyB0cnVlLlxcbmtlcm5lbC9icGYvY29yZS5jLTE1NTQtICovXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNjM1PXN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI2NDItXFxua2VybmVsL2JwZi9jb3JlLmM6MjY0MzpcXHRpZiAoIWJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpXFxua2VybmVsL2JwZi9jb3JlLmMtMjY0NC1cXHRcXHRyZXR1cm4gYnBmX2ludF9qaXRfY29tcGlsZShlbnYsIHByb2cpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xMjc1PWludCBicGZfaml0X3N1YnByb2dzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyODYtXFx0cHJvZyA9IG9yaWdfcHJvZyA9IGVudi1cXHUwMDNlcHJvZztcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjEyODc6XFx0aWYgKGJwZl9wcm9nX25lZWRfYmxpbmQocHJvZykpIHtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEyODgtXFx0XFx0aWYgKCFwcm9nLVxcdTAwM2VqaXRfcmVxdWlyZWQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMjM6NDA6MjYuNTQ4NDczNzQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg2NDYzNzg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIEJsaW5kaW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZyb20gd2hhdCBJIGdhdGhlciwgdGhlIGNvcmUgb2YgdGhlIGlzc3VlIGxpZXMgd2l0aGluIHRoZSBgYnBmX2ppdF9ibGluZF9jb25zdGFudHNgIGZ1bmN0aW9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGJvdGggYGJwZl9wcm9nX2ppdF9jb21waWxlYCBhbmQgYGJwZl9qaXRfc3VicHJvZ3NgLiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhpcyBmaXhlcyBhIGJ1ZyByZWxhdGVkIHRvIGhvdyB3ZSdyZSBoYW5kbGluZyBgaW5zbl9hdXhfZGF0YWAgd2hlbiBKSVQgYmxpbmRpbmcgYW5kIHN1YnByb2dyYW0gSklUaW5nIGFyZSBoYXBwZW5pbmcuXG5cbkknbSB6ZXJvaW5nIGluIG9uIGEgZmV3IGNydWNpYWwgc3ltYm9sczogIGBicGZfaml0X2JsaW5kX2NvbnN0YW50c2AsIG5hdHVyYWxseSwgYWxvbmcgd2l0aCBgYnBmX3Byb2dfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2ppdF9zdWJwcm9nc2AsIGFzIHRoZXkncmUgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgbG9naWMgdGhpcyBwYXRjaCBtb2RpZmllcy4gIEknbSBhbHNvIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGF1eGlsaWFyeSBkYXRhIG1hbmFnZW1lbnQgZnVuY3Rpb25zOiBgYnBmX2NsZWFyX2luc25fYXV4X2RhdGFgIGFuZCBgYWRqdXN0X2luc25fYXV4X2RhdGFgLCBzaW5jZSB0aG9zZSBzZWVtIGxpa2UgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uIEFsc28sIHRoZSB2ZXJpZmllciBzaWRlIG9mIGluc3RydWN0aW9uIHJlbW92YWwgaW4gYHZlcmlmaWVyX3JlbW92ZV9pbnNuc2AgaXMgcmVsZXZhbnQgaGVyZS5cblxuVGhlIHBhdGNoJ3MgaW1wYWN0IGFwcGVhcnMgdG8gYmUgb24gdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyIHRoZW1zZWx2ZXMuIFNwZWNpZmljYWxseSwgaG93IGNvbnN0YW50cyBhcmUgYmxpbmRlZCBhbmQgdGhlIGxvZ2ljIGZvciBtYW5hZ2luZyBpbnN0cnVjdGlvbiBhdXhpbGlhcnkgZGF0YS4gVGhlIGNoYW5nZXMgdG91Y2ggaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIHRoZSBibGluZGluZyBwcm9jZXNzIGFuZCB0YWNrbGVzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gdGhlIGF1eGlsaWFyeSBkYXRhIHdoZW4gaW5zdHJ1Y3Rpb25zIGdldCByZW1vdmVkLiBUaGVzZSBhcmUgcHJldHR5IGZ1bmRhbWVudGFsIHR3ZWFrcyB0byB0aGUgY29yZSBCUEYgZnVuY3Rpb25hbGl0eSwgYW5kIGltcG9ydGFudGx5LCB0aGV5J3JlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbC4gVGhpcyBtZWFucyB0aGF0LCBhZnRlciBhbGwsIGFueSBidWdzIGhlcmUgY291bGQgYmUgZXhwbG9pdGFibGUsIHNvIEknbSB0aGlua2luZyBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byBjYXRjaCBhbnkgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG90aGVyIGxvZ2ljIGVycm9ycy5cblxuSSBkaWQgYSBxdWljayBjaGVjaywgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9KSVRgIGFsb25lICppcyogc3VmZmljaWVudCBmb3IgYGJwZl9wcm9nX2ppdF9jb21waWxlYCB0byBkbyBhbnl0aGluZy5cblxuQWxyaWdodCwgSSdsbCByZWNvcmQgdGhlc2UgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTEsIk91dHB1dFRva2VucyI6MjExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDIzOjQwOjMzLjQxMzExMzk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI1MTM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfaml0X2JsaW5kX2NvbnN0YW50c1wiLFxuICAgIFwiYnBmX3Byb2dfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9qaXRfc3VicHJvZ3NcIixcbiAgICBcImJwZl9jbGVhcl9pbnNuX2F1eF9kYXRhXCIsXG4gICAgXCJ2ZXJpZmllcl9yZW1vdmVfaW5zbnNcIixcbiAgICBcImFkanVzdF9pbnNuX2F1eF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciBhbmQgSklUIGNvbXBpbGVyLCBzcGVjaWZpY2FsbHkgdGhlIGxvZ2ljIGZvciBibGluZGluZyBjb25zdGFudHMgYW5kIG1hbmFnaW5nIGluc3RydWN0aW9uIGF1eGlsaWFyeSBkYXRhIChgaW5zbl9hdXhfZGF0YWApLiBJdCBjaGFuZ2VzIGhvdyBwcm9ncmFtcyBhcmUgY2xvbmVkIGR1cmluZyBibGluZGluZyBhbmQgZml4ZXMgbWVtb3J5IG1hbmFnZW1lbnQgb2YgYXV4aWxpYXJ5IGRhdGEgd2hlbiBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgbG9naWMgZXJyb3JzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9qaXRfYmxpbmRfY29uc3RhbnRzXCIsXG4gICAgXCJicGZfcHJvZ19qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2ppdF9zdWJwcm9nc1wiLFxuICAgIFwiYnBmX2NsZWFyX2luc25fYXV4X2RhdGFcIixcbiAgICBcInZlcmlmaWVyX3JlbW92ZV9pbnNuc1wiLFxuICAgIFwiYWRqdXN0X2luc25fYXV4X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIGFuZCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSB0aGUgbG9naWMgZm9yIGJsaW5kaW5nIGNvbnN0YW50cyBhbmQgbWFuYWdpbmcgaW5zdHJ1Y3Rpb24gYXV4aWxpYXJ5IGRhdGEgKGBpbnNuX2F1eF9kYXRhYCkuIEl0IGNoYW5nZXMgaG93IHByb2dyYW1zIGFyZSBjbG9uZWQgZHVyaW5nIGJsaW5kaW5nIGFuZCBmaXhlcyBtZW1vcnkgbWFuYWdlbWVudCBvZiBhdXhpbGlhcnkgZGF0YSB3aGVuIGluc3RydWN0aW9ucyBhcmUgcmVtb3ZlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciBsb2dpYyBlcnJvcnMgd2VyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowl967v[1] Phase: Succeeded StartedAt: 2026-07-11 23:42:33 +0000 UTC FinishedAt: 2026-07-11 23:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 23:42:33 +0000 UTC FinishedAt: 2026-07-11 23:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2] Phase: Succeeded StartedAt: 2026-07-11 23:42:33 +0000 UTC FinishedAt: 2026-07-12 04:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 23:42:33 +0000 UTC FinishedAt: 2026-07-12 04:22:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-11 23:42:33 +0000 UTC FinishedAt: 2026-07-11 23:42:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-11 23:42:33 +0000 UTC FinishedAt: 2026-07-11 23:42:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl967v/series-workflowl967v-convert-artifact-60105215/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-11 23:42:43 +0000 UTC FinishedAt: 2026-07-12 00:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-11 23:42:43 +0000 UTC FinishedAt: 2026-07-12 00:26:12 +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:*85e46619-815d-4b58-95f8-72f2acd59669,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-workflowl967v/series-workflowl967v-convert-artifact-60105215/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": "36107dd5-4b5d-4dbc-9eda-42cf26928240", "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-workflowl967v/series-workflowl967v-build-action-2030828677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-11 23:42:43 +0000 UTC FinishedAt: 2026-07-12 00:26:02 +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:*85e46619-815d-4b58-95f8-72f2acd59669,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-workflowl967v/series-workflowl967v-convert-artifact-60105215/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": "36107dd5-4b5d-4dbc-9eda-42cf26928240", "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-workflowl967v/series-workflowl967v-build-action-2030828677/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:26:12 +0000 UTC FinishedAt: 2026-07-12 00:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:26:12 +0000 UTC FinishedAt: 2026-07-12 00:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:26:12 +0000 UTC FinishedAt: 2026-07-12 00:26:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:26:12 +0000 UTC FinishedAt: 2026-07-12 00:26:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-workflowl967v/series-workflowl967v-convert-artifact-1286715406/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:26:22 +0000 UTC FinishedAt: 2026-07-12 00:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:26:22 +0000 UTC FinishedAt: 2026-07-12 00:28:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*36107dd5-4b5d-4dbc-9eda-42cf26928240,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-workflowl967v/series-workflowl967v-build-action-2030828677/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-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:28:55 +0000 UTC FinishedAt: 2026-07-12 00:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:28:55 +0000 UTC FinishedAt: 2026-07-12 00:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:28:55 +0000 UTC FinishedAt: 2026-07-12 01:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:28:55 +0000 UTC FinishedAt: 2026-07-12 01:17:59 +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:*85e46619-815d-4b58-95f8-72f2acd59669,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-workflowl967v/series-workflowl967v-convert-artifact-1286715406/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": "3156f428-2657-4724-8b65-33518a672c20", "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-workflowl967v/series-workflowl967v-build-action-4085058978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 00:28:55 +0000 UTC FinishedAt: 2026-07-12 01:17:13 +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:*85e46619-815d-4b58-95f8-72f2acd59669,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-workflowl967v/series-workflowl967v-convert-artifact-1286715406/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": "3156f428-2657-4724-8b65-33518a672c20", "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-workflowl967v/series-workflowl967v-build-action-4085058978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:17:59 +0000 UTC FinishedAt: 2026-07-12 01:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:17:59 +0000 UTC FinishedAt: 2026-07-12 01:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:17:59 +0000 UTC FinishedAt: 2026-07-12 01:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:17:59 +0000 UTC FinishedAt: 2026-07-12 01:19:57 +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:*3156f428-2657-4724-8b65-33518a672c20,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-workflowl967v/series-workflowl967v-build-action-4085058978/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-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-12 01:20:07 +0000 UTC FinishedAt: 2026-07-12 04:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-12 01:20:07 +0000 UTC FinishedAt: 2026-07-12 04:22:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*36107dd5-4b5d-4dbc-9eda-42cf26928240,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3156f428-2657-4724-8b65-33518a672c20,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-workflowl967v/series-workflowl967v-build-action-2030828677/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-workflowl967v/series-workflowl967v-build-action-4085058978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:20:07 +0000 UTC FinishedAt: 2026-07-12 01:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:20:07 +0000 UTC FinishedAt: 2026-07-12 01:20:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl967v/series-workflowl967v-convert-artifact-1273893427/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:20:07 +0000 UTC FinishedAt: 2026-07-12 01:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:20:07 +0000 UTC FinishedAt: 2026-07-12 01:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","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-12 01:20:07 +0000 UTC FinishedAt: 2026-07-12 01:20:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-12 01:20:48 +0000 UTC FinishedAt: 2026-07-12 04:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl967v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_jit_blind_constants","bpf_prog_jit_compile","bpf_jit_subprogs","bpf_clear_insn_aux_data","verifier_remove_insns","adjust_insn_aux_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"520d7d7942025a58a0c79a61b905a556cf3cb524","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT"],"series_id":"a09753dc-9a03-43f5-9cc7-aa147f64d983","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-12 01:20:48 +0000 UTC FinishedAt: 2026-07-12 04:22:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*36107dd5-4b5d-4dbc-9eda-42cf26928240,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3156f428-2657-4724-8b65-33518a672c20,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-workflowl967v/series-workflowl967v-build-action-2030828677/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-workflowl967v/series-workflowl967v-build-action-4085058978/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-workflowl967v/series-workflowl967v-convert-artifact-1273893427/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}