Name: series-workflowl2ssc Phase: Succeeded StartedAt: 2026-08-06 23:02:17 +0000 UTC FinishedAt: 2026-08-07 02:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[0] Phase: Succeeded StartedAt: 2026-08-06 23:02:17 +0000 UTC FinishedAt: 2026-08-06 23:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 23:02:17 +0000 UTC FinishedAt: 2026-08-06 23:04:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1fb556c523f6c18b43b1f52fb366f61c9963ce06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1fb556c523f6c18b43b1f52fb366f61c9963ce06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "e0c7c794-db19-40e1-ab25-4bbd43cd9e84" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sys_swapoff" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzIGVudGlyZWx5LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzd2Fwb2ZmIHBhdGguIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3lzX3N3YXBvZmZgIHN5c3RlbSBjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTIxMGRlODczYzU5ZGU5Yjk2YWZmMTRkMzgxZDcxNzFlMzlhNDY1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMjM6MDM6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMmNiMWQyOTMwN2M1NC4uMmIxNGUyZTk2NzNiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI0Niw3ICYjNDM7MjQ2LDcgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qge1xuIFx0c3RydWN0IHBsaXN0X25vZGUgbGlzdDtcdFx0LyogZW50cnkgaW4gc3dhcF9hY3RpdmVfaGVhZCAqL1xuIFx0c2lnbmVkIGNoYXJcdHR5cGU7XHRcdC8qIHN0cmFuZ2UgbmFtZSBmb3IgYW4gaW5kZXggKi9cbiBcdHVuc2lnbmVkIGludFx0bWF4O1x0XHQvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi9cbi1cdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBjbHVzdGVyIGluZm8uIE9ubHkgZm9yIFNTRCAqL1xuJiM0MztcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGRlYTJkM2IzNmUwNmYuLjBkMjRlZmQzMmViMDMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggJiM0MzszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFx0XHQyNTZcbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pXG4ge1xuIFx0cmV0dXJuIGluZm8tXHUwMDNlY291bnQgPT0gMDtcbkBAIC0yNzYzLDcgJiM0MzsyNzYxLDkgQEAgc3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpXG4gc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgcHJldilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaSwgZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludCBjaV9vZmY7XG4gXHR1bnNpZ25lZCBsb25nIHN3cF90YjtcbiBcbiBcdC8qXG5AQCAtMjc3MiwxOSAmIzQzOzI3NzIsMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiAmIzQzOyAxOyBpIFx1MDAzYyBzaS1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuJiM0MztcdGkgPSBwcmV2ICYjNDM7IDE7XG4mIzQzO1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuJiM0MztcdFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xuJiM0MztcdFx0ZW5kID0gbWluX3QodW5zaWduZWQgbG9uZyxcbiYjNDM7XHRcdFx0ICAgIEFMSUdOX0RPV04oaSwgU1dBUEZJTEVfQ0xVU1RFUikgJiM0MzsgU1dBUEZJTEVfQ0xVU1RFUixcbiYjNDM7XHRcdFx0ICAgIHNpLVx1MDAzZW1heCk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLlxuJiM0MztcdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG4mIzQzO1x0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4mIzQzO1x0XHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cdTAwM2Vsb2NrIGlzXG4mIzQzO1x0XHQgKiBlbm91Z2gsIHVubGlrZSBpbiBldmVyeSBvdGhlciBjbHVzdGVyX2lzX2VtcHR5KCkgY2FsbGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIVJFQURfT05DRShjaS1cdTAwM2Vjb3VudCkpIHtcbiYjNDM7XHRcdFx0aSA9IGVuZDtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdH1cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4tXHRpZiAoaSA9PSBzaS1cdTAwM2VtYXgpXG4tXHRcdGkgPSAwO1xuJiM0MztcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4mIzQzO1x0XHRmb3IgKDsgaSBcdTAwM2MgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiYjNDM7XHRcdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuJiM0MztcdFx0XHRcdHJldHVybiBpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIGk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX3N3YXBvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycyBlbnRpcmVseSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3dhcG9mZiBwYXRoLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN5c19zd2Fwb2ZmYCBzeXN0ZW0gY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUyMTBkZTg3M2M1OWRlOWI5NmFmZjE0ZDM4MWQ3MTcxZTM5YTQ2NWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDIzOjAzOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAyY2IxZDI5MzA3YzU0Li4yYjE0ZTJlOTY3M2I0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCB7CiAJc3RydWN0IHBsaXN0X25vZGUgbGlzdDsJCS8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi8KIAlzaWduZWQgY2hhcgl0eXBlOwkJLyogc3RyYW5nZSBuYW1lIGZvciBhbiBpbmRleCAqLwogCXVuc2lnbmVkIGludAltYXg7CQkvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi8KLQlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi8KJiM0MzsJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGFycmF5LCBvbmUgZW50cnkgcGVyIGNsdXN0ZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBub25mdWxsX2NsdXN0ZXJzW1NXQVBfTlJfT1JERVJTXTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRlYTJkM2IzNmUwNmYuLjBkMjRlZmQzMmViMDMgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMzcwLDggJiM0MzszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJfQogfQogCi0jZGVmaW5lIExBVEVOQ1lfTElNSVQJCTI1NgotCiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pCiB7CiAJcmV0dXJuIGluZm8tJmd0O2NvdW50ID09IDA7CkBAIC0yNzYzLDcgJiM0MzsyNzYxLDkgQEAgc3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpCiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCQkJCXVuc2lnbmVkIGludCBwcmV2KQogewotCXVuc2lnbmVkIGludCBpOwomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwomIzQzOwl1bnNpZ25lZCBsb25nIGksIGVuZDsKJiM0MzsJdW5zaWduZWQgaW50IGNpX29mZjsKIAl1bnNpZ25lZCBsb25nIHN3cF90YjsKIAogCS8qCkBAIC0yNzcyLDE5ICYjNDM7Mjc3MiwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ldwogCSAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuCiAJICovCi0JZm9yIChpID0gcHJldiAmIzQzOyAxOyBpICZsdDsgc2ktJmd0O21heDsgaSYjNDM7JiM0MzspIHsKLQkJc3dwX3RiID0gc3dhcF90YWJsZV9nZXQoX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKSwKLQkJCQkJaSAlIFNXQVBGSUxFX0NMVVNURVIpOwotCQlpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgJmFtcDsmYW1wOyAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKQotCQkJYnJlYWs7Ci0JCWlmICgoaSAlIExBVEVOQ1lfTElNSVQpID09IDApCiYjNDM7CWkgPSBwcmV2ICYjNDM7IDE7CiYjNDM7CXdoaWxlIChpICZsdDsgc2ktJmd0O21heCkgewomIzQzOwkJY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpOwomIzQzOwkJZW5kID0gbWluX3QodW5zaWduZWQgbG9uZywKJiM0MzsJCQkgICAgQUxJR05fRE9XTihpLCBTV0FQRklMRV9DTFVTVEVSKSAmIzQzOyBTV0FQRklMRV9DTFVTVEVSLAomIzQzOwkJCSAgICBzaS0mZ3Q7bWF4KTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS4KJiM0MzsJCSAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcAomIzQzOwkJICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLgomIzQzOwkJICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktJmd0O2xvY2sgaXMKJiM0MzsJCSAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghUkVBRF9PTkNFKGNpLSZndDtjb3VudCkpIHsKJiM0MzsJCQlpID0gZW5kOwogCQkJY29uZF9yZXNjaGVkKCk7Ci0JfQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQogCi0JaWYgKGkgPT0gc2ktJmd0O21heCkKLQkJaSA9IDA7CiYjNDM7CQljaV9vZmYgPSBpICUgU1dBUEZJTEVfQ0xVU1RFUjsKJiM0MzsJCWZvciAoOyBpICZsdDsgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpOwomIzQzOwkJCWlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSAmYW1wOyZhbXA7ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpCiYjNDM7CQkJCXJldHVybiBpOwomIzQzOwkJfQomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KIAotCXJldHVybiBpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2FwZmlsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBwcmV0dHkgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uIHRvIGBmaW5kX25leHRfdG9fdW51c2VgIHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSBpdCYjMzk7cyBjaGFuZ2luZyBob3cgdGhlIHN5c3RlbSBsb2NhdGVzIHRoZSAqbmV4dCogc3dhcCBlbnRyeSB0byBiZSBtYXJrZWQgYXMgdW51c2VkLiBUaGUga2V5IGlzIHRoYXQgaXQmIzM5O3Mgb3B0aW1pemluZyB0aGUgbG9vcDogbm93LCBpdCBza2lwcyBlbnRpcmUgZW1wdHkgY2x1c3RlcnMgYmFzZWQgb24gYSBjaGVjayBhZ2FpbnN0IGBjaS0mZ3Q7Y291bnRgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0JiMzOTtzIGdvaW5nIHRvIGFsdGVyIHRoZSBiZWhhdmlvciBvZiBzd2FwZmlsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgYHN3YXBvZmZgIG9yIHBvc3NpYmx5IHdoZW4gd2UgYHRyeV90b191bnVzZWAgYSBzd2FwIGVudHJ5LgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gSXMgdGhpcyBjaGFuZ2VkIGZ1bmN0aW9uIGV2ZW4gKnVzZWQqPyBPa2F5LCBhIHF1aWNrIGNoZWNrIHRlbGxzIG1lIGBmaW5kX25leHRfdG9fdW51c2VgIGlzIGNhbGxlZCBieSBgdHJ5X3RvX3VudXNlYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgc3lzX3N3YXBvZmZgLiBFeGNlbGxlbnQuIGBzeXNfc3dhcG9mZmAgaXMsIG9mIGNvdXJzZSwgYSBzeXN0ZW0gY2FsbC4gVGhhdCBtZWFucyBpdOKAmXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQuIGBmaW5kX25leHRfdG9fdW51c2VgIGlzIGRlY2xhcmVkIHN0YXRpYywgYXMgaXMgYHRyeV90b191bnVzZWAuIEFuZCBgc3lzX3N3YXBvZmZgIGlzLCBhcyBleHBlY3RlZCwgYSBzeXNjYWxsLgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHRyeV90b191bnVzZWAgaXMgKmFjdHVhbGx5KiBpbiBgbW0vc3dhcGZpbGUuY2AuLi4gbGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuLS1cbm1tL3N3YXBmaWxlLmMtMTMzNi1cdC8qXG5tbS9zd2FwZmlsZS5jOjEzMzc6XHQgKiBNYWtlIHN1cmUgdGhhdCB0cnlfdG9fdW51c2UoKSBvYnNlcnZlcyBzaS1cdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXG5tbS9zd2FwZmlsZS5jLTEzMzgtXHQgKiBvbmx5IGFmdGVyIHRoZSBhYm92ZSBjbGVhbnVwcyBhcmUgZG9uZS5cbi0tXG5tbS9zd2FwZmlsZS5jPTI0NzE9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vc3dhcGZpbGUuYy0yNDgyLVx0ICogSWYgdGhlIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlIGJ5IG90aGVycywgY29udGludWUgdG9cbm1tL3N3YXBmaWxlLmM6MjQ4MzpcdCAqIHVudXNlIG90aGVyIFBURXMuIHRyeV90b191bnVzZSBtYXkgdHJ5IGFnYWluIGlmIHdlIG1pc3NlZCB0aGlzIG9uZS5cbm1tL3N3YXBmaWxlLmMtMjQ4NC1cdCAqL1xuLS1cbm1tL3N3YXBmaWxlLmM9Mjc2MT1zdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0yNzg0LVx0XHQgKiBBIHNsb3QgaXMgdW5jb3VudGVkIG9ubHkgYWZ0ZXIgaXRzIGZvbGlvIGxlZnQgdGhlIHN3YXBcbm1tL3N3YXBmaWxlLmM6Mjc4NTpcdFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxubW0vc3dhcGZpbGUuYy0yNzg2LVx0XHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cdTAwM2Vsb2NrIGlzXG4tLVxubW0vc3dhcGZpbGUuYy0yODA2LVxubW0vc3dhcGZpbGUuYzoyODA3OnN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxubW0vc3dhcGZpbGUuYy0yODA4LXtcbi0tXG5tbS9zd2FwZmlsZS5jLTI5MDEtXHQvKlxubW0vc3dhcGZpbGUuYzoyOTAyOlx0ICogTWFrZSBzdXJlIHRoYXQgZnVydGhlciBjbGVhbnVwcyBhZnRlciB0cnlfdG9fdW51c2UoKSByZXR1cm5zIGhhcHBlblxubW0vc3dhcGZpbGUuYy0yOTAzLVx0ICogYWZ0ZXIgc3dhcF9yYW5nZV9mcmVlKCkgcmVkdWNlcyBzaS1cdTAwM2VpbnVzZV9wYWdlcyB0byAwLlxuLS1cbm1tL3N3YXBmaWxlLmMtMjkwOS0vKlxubW0vc3dhcGZpbGUuYzoyOTEwOiAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCB0cnlfdG9fdW51c2UsIGlmIG5vIHN3YXAgaXMgbm93IGluIHVzZSwgd2Uga25vd1xubW0vc3dhcGZpbGUuYy0yOTExLSAqIHdlIGNhbiBlbXB0eSB0aGUgbW1saXN0LiAgc3dhcF9sb2NrIG11c3QgYmUgaGVsZCBvbiBlbnRyeSBhbmQgZXhpdC5cbi0tXG5tbS9zd2FwZmlsZS5jPTMxNTM9U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMzIxMy1cdHNldF9jdXJyZW50X29vbV9vcmlnaW4oKTtcbm1tL3N3YXBmaWxlLmM6MzIxNDpcdGVyciA9IHRyeV90b191bnVzZShwLVx1MDAzZXR5cGUpO1xubW0vc3dhcGZpbGUuYy0zMjE1LVx0Y2xlYXJfY3VycmVudF9vb21fb3JpZ2luKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzOAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgU3dhcCBEZWFjdGl2YXRpb24gU3lzdGVtIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzeXNfc3dhcG9mZmAuIFN0cmFpZ2h0IHRvIHRoZSBwb2ludCDigJMgdGhpcyBpcyBhYm91dCBkZWFjdGl2YXRpbmcgc3dhcCBzcGFjZS4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGtlcm5lbCBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJcyB0aGVyZSBldmVuIGEgY29uZGl0aW9uYWwgY29tcGlsZSBmbGFnIGludm9sdmVkIGhlcmU/IEkmIzM5O20gdGhpbmtpbmcgb2YgYENPTkZJR19TV0FQYC4gSWYgdGhhdCYjMzk7cyBub3QgZW5hYmxlZCwgdGhlIHdob2xlIHRoaW5nIG1pZ2h0IGJlIGEgbm8tb3AsIG9yIGF0IGxlYXN0IHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gR290dGEgdmVyaWZ5IHRoYXQgY29uZmlnIHNldHRpbmcgaXMgZW5hYmxlZCwgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL21pcHMvS2NvbmZpZz0xMjYzPWNvbmZpZyBNSVBTX1NQUkFNXG4tLVxuYXJjaC9taXBzL0tjb25maWctMTI2NS1cbmFyY2gvbWlwcy9LY29uZmlnOjEyNjY6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXHRib29sXG4tLVxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxuLS1cbmFyY2gvc2gvS2NvbmZpZy0xMjgtXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL3NoL0tjb25maWctMTMwLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3dhcG9mZiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19TV0FQYCBpcyByZWxldmFudCBoZXJlLiBUaGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgZGVmaW5pdGVseSBgc3lzX3N3YXBvZmZgLiBJJiMzOTt2ZSBjaGVja2VkIGFuZCBkb3VibGUtY2hlY2tlZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgYW5kIHRoYXQgYHRyeV90b191bnVzZWAgaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gaXQuIFRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGB0cnlfdG9fdW51c2VgLCBzb2xpZGlmeWluZyBgc3lzX3N3YXBvZmZgIGFzIHRoZSBjb3JlLgoKSSYjMzk7dmUgbWFkZSBzdXJlIGBzeXNfc3dhcG9mZmAgaXMgdGhlIGNvcnJlY3QgbmFtZSBieSB2ZXJpZnlpbmcgdGhhdCBgU1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIC4uLilgIGV4cGFuZHMgdG8gYHN5c19zd2Fwb2ZmYCBvciBgX194NjRfc3lzX3N3YXBvZmZgIGFuZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgZGVmaW5lZC4gVGhpcyBjb25maXJtcyB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgYSBsZWdpdGltYXRlIHN5c2NhbGwgYW5kIHRodXMgYSBnb29kIGZvY3VzLgoKSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhhdCBgdHJ5X3RvX3VudXNlYCBpcyBzdGF0aWMuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9jdXNlZCBvbiBvcHRpbWl6aW5nIGBmaW5kX25leHRfdG9fdW51c2VgIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzLiBJdCBhcHBlYXJzIHRvIG9wdGltaXplIHNlYXJjaGluZyBmb3Igc3dhcCBlbnRyaWVzLCB3aGljaCBhcmUgcmVsZXZhbnQgdG8gdGhlIHVubWFwcGluZyBwcm9jZXNzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlLiBUaGUgY29kZSBub3cgaXRlcmF0ZXMgdGhyb3VnaCBjbHVzdGVycyBvZiBzd2FwIGVudHJpZXMuIElmIGEgY2x1c3RlciBpcyBlbXB0eSwgaXQgc2tpcHMgdGhlIGVudGlyZSBjbHVzdGVyOyB0aGF0IHNob3VsZCBzYXZlIGEgZ29vZCBhbW91bnQgb2YgdGltZS4gSSBjYW4gc2VlIHRoYXQgc2tpcHBpbmcgZW1wdHkgY2x1c3RlcnMgaXMgYW4gb3B0aW1pemF0aW9uIHdvcnRoIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IHdpbGwgb3B0aW1pemUgdGhlIGBmaW5kX25leHRfdG9fdW51c2VgIGZ1bmN0aW9uLgoKSSBoYXZlOgoqICAgYENPTkZJR19TV0FQYCBhcyB0aGUgY29uZmlndXJhdGlvbgoqICAgYHN5c19zd2Fwb2ZmYCBhcyB0aGUgZm9jdXMgc3ltYm9sLgoKSSBjYW4gY29uZmlybSB0aGF0IFN5emthbGxlciBoYW5kbGVzIHN5c2NhbGxzIHVzaW5nIGdlbmVyaWMgbmFtZXMsIGFuZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgY29ycmVjdGx5IGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnN3YXBvZmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzEzNT1zdGF0aWMgdm9pZCBmbHVzaF9wZXJjcHVfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbi0tXG5tbS9zd2FwZmlsZS5jLTMxNTItXG5tbS9zd2FwZmlsZS5jOjMxNTM6U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxubW0vc3dhcGZpbGUuYy0zMTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTGludXggU3dhcG9mZiBTeXN0ZW0gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgLi4uKWAgbWFjcm8uIFJpZ2h0LCB0aGF0IGdlbmVyYXRlcyB0aGUgYHN5c19zd2Fwb2ZmYCBmdW5jdGlvbiAob3IgcG90ZW50aWFsbHkgYF9feDY0X3N5c19zd2Fwb2ZmYCBvbiB4ODZfNjQsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlKS4gVGhhdCBgc3lzX3N3YXBvZmZgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4gSSYjMzk7bGwgcHJvdmlkZSB0aGF0IGFzIHRoZSBmb2N1cyBzeW1ib2wsIHRoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpOb3csIEkgd2FzIGluaXRpYWxseSBjb25zaWRlcmluZyBgdHJ5X3RvX3VudXNlYCwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLiBIbW0sIHByb3ZpZGluZyBhIHN0YXRpYyBmdW5jdGlvbiBhcyB0aGUgZm9jdXMgc3ltYm9sIGlzIGdlbmVyYWxseSBhIGJhZCBpZGVhLiBUaGV5IGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgbWVhbmluZyBubyBkaXN0aW5jdCBzeW1ib2wsIG9yIG1pZ2h0IG5vdCBldmVuIGJlIGV4cG9ydGVkLiBBbHRob3VnaCwgYHRyeV90b191bnVzZWAgaXMgYSBwcmV0dHkgbGFyZ2UgZnVuY3Rpb24uIE1heWJlIGl0IGlzbiYjMzk7dCBpbmxpbmVkPyBQcm9iYWJseSBiZXN0IHRvIGp1c3Qgc3RpY2sgd2l0aCB0aGUgY2Fub25pY2FsIGVudHJ5IHBvaW50LCBgc3lzX3N3YXBvZmZgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBiZXR0ZXIgY2hvaWNlLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2suIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZW50cnkgcG9pbnRzIHRoYXQgd291bGQgYWxzbyBiZSBpbnRlcmVzdGluZyB0byBjb25zaWRlcj8gSXMgYGZpbmRfbmV4dF90b191bnVzZWAgY2FsbGVkIGZyb20gYW55d2hlcmUgb3V0c2lkZSB0aGUgZnVuY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfbmV4dF90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0yNzMzPXN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjc2MC0gKi9cbm1tL3N3YXBmaWxlLmM6Mjc2MTpzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTI3NjItXHRcdFx0XHRcdHVuc2lnbmVkIGludCBwcmV2KVxuLS1cbm1tL3N3YXBmaWxlLmM9MjgwNz1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTI4NjAtXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFx1MDAyNlx1MDAyNlxubW0vc3dhcGZpbGUuYzoyODYxOlx0ICAgICAgIChpID0gZmluZF9uZXh0X3RvX3VudXNlKHNpLCBpKSkgIT0gMCkge1xubW0vc3dhcGZpbGUuYy0yODYyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzYzCgkJCQkJCQlvdXRwdXQ6IDkwCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTd2Fwb2ZmIFBhdGgqKgoKT2theSwgc28gdGhlIGludmVzdGlnYXRpb24gcG9pbnRzIGNsZWFybHkuIFRoZSBjaGFuZ2UsIHRoZSAqb25seSogY2hhbmdlLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGhlcmUgc3RlbXMgZGlyZWN0bHkgZnJvbSBgdHJ5X3RvX3VudXNlYC4gVGh1cywgbXkgZm9jdXMgbXVzdCBiZSBzaGFycGx5IG9uIHRoZSBzeXN0ZW0gY2FsbCBgc3lzX3N3YXBvZmZgLiBJdCYjMzk7cyB0aGUgc29sZSBlbnRyeSBwb2ludC4KCkkgbmVlZCB0byBmbGFnIHRoaXMgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYGZpbmRfbmV4dF90b191bnVzZWAgYmVoYXZlczsgc3BlY2lmaWNhbGx5LCBpdCBza2lwcyBlbXB0eSBzd2FwIGNsdXN0ZXJzLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGFsdGVyYXRpb24gd2l0aGluIHRoZSBgc3dhcG9mZmAgZXhlY3V0aW9uIHBhdGguIEFuZCwgY3JpdGljYWxseSwgdGhlIGNvZGUgYWZmZWN0ZWQgKmlzKiByZWFjaGFibGUgdmlhIHRoZSBgc3lzX3N3YXBvZmZgIHN5c3RlbSBjYWxsLgoKVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgWyYjMzQ7c3lzX3N3YXBvZmYmIzM0O11gLgoKTGFzdGx5LCB0aGUgZnV6emluZyBuZWVkcyB0byBiZSBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQ6IGBFbmFibGVDb25maWdzOiBbJiMzNDtTV0FQJiMzNDtdYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzIGVudGlyZWx5LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzd2Fwb2ZmIHBhdGguIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3lzX3N3YXBvZmZgIHN5c3RlbSBjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX3N3YXBvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycyBlbnRpcmVseSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3dhcG9mZiBwYXRoLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN5c19zd2Fwb2ZmYCBzeXN0ZW0gY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjI0LjM3MjYyNTIwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzgzOTI0MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMgZW50aXJlbHksIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXBvZmYgcGF0aC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzeXNfc3dhcG9mZmAgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjI0LjM3MjYzNDEzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExOTI0MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTIxMGRlODczYzU5ZGU5Yjk2YWZmMTRkMzgxZDcxNzFlMzlhNDY1YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDIzOjAzOjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCAyY2IxZDI5MzA3YzU0Li4yYjE0ZTJlOTY3M2I0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMjQ2LDcgKzI0Niw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcXG4gXFx0c3RydWN0IHBsaXN0X25vZGUgbGlzdDtcXHRcXHQvKiBlbnRyeSBpbiBzd2FwX2FjdGl2ZV9oZWFkICovXFxuIFxcdHNpZ25lZCBjaGFyXFx0dHlwZTtcXHRcXHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXFxuIFxcdHVuc2lnbmVkIGludFxcdG1heDtcXHRcXHQvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi9cXG4tXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGNsdXN0ZXIgaW5mby4gT25seSBmb3IgU1NEICovXFxuK1xcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jbHVzdGVyczsgLyogZnJlZSBjbHVzdGVycyBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uMGQyNGVmZDMyZWIwMyAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC0zNzAsOCArMzcwLDYgQEAgc3RhdGljIHZvaWQgZGlzY2FyZF9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHR9XFxuIH1cXG4gXFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFxcdFxcdDI1Nlxcbi1cXG4gc3RhdGljIGlubGluZSBib29sIGNsdXN0ZXJfaXNfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHJldHVybiBpbmZvLVxcdTAwM2Vjb3VudCA9PSAwO1xcbkBAIC0yNzYzLDcgKzI3NjEsOSBAQCBzdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4gc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGludCBjaV9vZmY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xcbiBcXG4gXFx0LypcXG5AQCAtMjc3MiwxOSArMjc3MiwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcXG4gXFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cXG4gXFx0ICovXFxuLVxcdGZvciAoaSA9IHByZXYgKyAxOyBpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heDsgaSsrKSB7XFxuLVxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXFxuLVxcdFxcdFxcdFxcdFxcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcXG4tXFx0XFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFxcdTAwMjZcXHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxcbitcXHRpID0gcHJldiArIDE7XFxuK1xcdHdoaWxlIChpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heCkge1xcbitcXHRcXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XFxuK1xcdFxcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXFxuK1xcdFxcdFxcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICsgU1dBUEZJTEVfQ0xVU1RFUixcXG4rXFx0XFx0XFx0ICAgIHNpLVxcdTAwM2VtYXgpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXFxuK1xcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbitcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxuK1xcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuK1xcdFxcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShjaS1cXHUwMDNlY291bnQpKSB7XFxuK1xcdFxcdFxcdGkgPSBlbmQ7XFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRpZiAoaSA9PSBzaS1cXHUwMDNlbWF4KVxcbi1cXHRcXHRpID0gMDtcXG4rXFx0XFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XFxuK1xcdFxcdGZvciAoOyBpIFxcdTAwM2MgZW5kOyBjaV9vZmYrKywgaSsrKSB7XFxuK1xcdFxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbitcXHRcXHRcXHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXFx1MDAyNlxcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdH1cXG4gXFxuLVxcdHJldHVybiBpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjI0Ljg4NTMyMDIxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMwMjcxMjIwMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMgZW50aXJlbHksIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXBvZmYgcGF0aC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzeXNfc3dhcG9mZmAgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyMTBkZTg3M2M1OWRlOWI5NmFmZjE0ZDM4MWQ3MTcxZTM5YTQ2NWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDIzOjAzOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMmNiMWQyOTMwN2M1NC4uMmIxNGUyZTk2NzNiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI0Niw3ICsyNDYsNyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCB7XG4gXHRzdHJ1Y3QgcGxpc3Rfbm9kZSBsaXN0O1x0XHQvKiBlbnRyeSBpbiBzd2FwX2FjdGl2ZV9oZWFkICovXG4gXHRzaWduZWQgY2hhclx0dHlwZTtcdFx0Lyogc3RyYW5nZSBuYW1lIGZvciBhbiBpbmRleCAqL1xuIFx0dW5zaWduZWQgaW50XHRtYXg7XHRcdC8qIHNpemUgb2YgdGhpcyBzd2FwIGRldmljZSAqL1xuLVx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGNsdXN0ZXIgaW5mby4gT25seSBmb3IgU1NEICovXG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogYXJyYXksIG9uZSBlbnRyeSBwZXIgY2x1c3RlciAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmcmVlX2NsdXN0ZXJzOyAvKiBmcmVlIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vbmZ1bGxfY2x1c3RlcnNbU1dBUF9OUl9PUkRFUlNdO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBkZWEyZDNiMzZlMDZmLi4wZDI0ZWZkMzJlYjAzIDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuKysrIGIvbW0vc3dhcGZpbGUuY1xuQEAgLTM3MCw4ICszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFx0XHQyNTZcbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pXG4ge1xuIFx0cmV0dXJuIGluZm8tXHUwMDNlY291bnQgPT0gMDtcbkBAIC0yNzYzLDcgKzI3NjEsOSBAQCBzdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcbiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBwcmV2KVxuIHtcbi1cdHVuc2lnbmVkIGludCBpO1xuK1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbitcdHVuc2lnbmVkIGxvbmcgaSwgZW5kO1xuK1x0dW5zaWduZWQgaW50IGNpX29mZjtcbiBcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xuIFxuIFx0LypcbkBAIC0yNzcyLDE5ICsyNzcyLDM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcbiBcdCAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuXG4gXHQgKi9cbi1cdGZvciAoaSA9IHByZXYgKyAxOyBpIFx1MDAzYyBzaS1cdTAwM2VtYXg7IGkrKykge1xuLVx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpLFxuLVx0XHRcdFx0XHRpICUgU1dBUEZJTEVfQ0xVU1RFUik7XG4tXHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKChpICUgTEFURU5DWV9MSU1JVCkgPT0gMClcbitcdGkgPSBwcmV2ICsgMTtcbitcdHdoaWxlIChpIFx1MDAzYyBzaS1cdTAwM2VtYXgpIHtcbitcdFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xuK1x0XHRlbmQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLFxuK1x0XHRcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICsgU1dBUEZJTEVfQ0xVU1RFUixcbitcdFx0XHQgICAgc2ktXHUwMDNlbWF4KTtcbitcbitcdFx0LypcbitcdFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXG4rXHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxuK1x0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4rXHRcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVx1MDAzZWxvY2sgaXNcbitcdFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cbitcdFx0ICovXG4rXHRcdGlmICghUkVBRF9PTkNFKGNpLVx1MDAzZWNvdW50KSkge1xuK1x0XHRcdGkgPSBlbmQ7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbi1cdGlmIChpID09IHNpLVx1MDAzZW1heClcbi1cdFx0aSA9IDA7XG4rXHRcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xuK1x0XHRmb3IgKDsgaSBcdTAwM2MgZW5kOyBjaV9vZmYrKywgaSsrKSB7XG4rXHRcdFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4rXHRcdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuK1x0XHRcdFx0cmV0dXJuIGk7XG4rXHRcdH1cbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHR9XG4gXG4tXHRyZXR1cm4gaTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjI0Ljg4NTMyMTU1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTcyMTcyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTd2FwZmlsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIGEgcHJldHR5IHRhcmdldGVkIG1vZGlmaWNhdGlvbiB0byBgZmluZF9uZXh0X3RvX3VudXNlYCB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQncyBjaGFuZ2luZyBob3cgdGhlIHN5c3RlbSBsb2NhdGVzIHRoZSAqbmV4dCogc3dhcCBlbnRyeSB0byBiZSBtYXJrZWQgYXMgdW51c2VkLiBUaGUga2V5IGlzIHRoYXQgaXQncyBvcHRpbWl6aW5nIHRoZSBsb29wOiBub3csIGl0IHNraXBzIGVudGlyZSBlbXB0eSBjbHVzdGVycyBiYXNlZCBvbiBhIGNoZWNrIGFnYWluc3QgYGNpLVx1MDAzZWNvdW50YC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIGdvaW5nIHRvIGFsdGVyIHRoZSBiZWhhdmlvciBvZiBzd2FwZmlsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgYHN3YXBvZmZgIG9yIHBvc3NpYmx5IHdoZW4gd2UgYHRyeV90b191bnVzZWAgYSBzd2FwIGVudHJ5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiBJcyB0aGlzIGNoYW5nZWQgZnVuY3Rpb24gZXZlbiAqdXNlZCo/IE9rYXksIGEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgYGZpbmRfbmV4dF90b191bnVzZWAgaXMgY2FsbGVkIGJ5IGB0cnlfdG9fdW51c2VgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBzeXNfc3dhcG9mZmAuIEV4Y2VsbGVudC4gYHN5c19zd2Fwb2ZmYCBpcywgb2YgY291cnNlLCBhIHN5c3RlbSBjYWxsLiBUaGF0IG1lYW5zIGl04oCZcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZXhhY3Qgc3ltYm9sIG5hbWVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpbnZvbHZlZC4gYGZpbmRfbmV4dF90b191bnVzZWAgaXMgZGVjbGFyZWQgc3RhdGljLCBhcyBpcyBgdHJ5X3RvX3VudXNlYC4gQW5kIGBzeXNfc3dhcG9mZmAgaXMsIGFzIGV4cGVjdGVkLCBhIHN5c2NhbGwuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHRyeV90b191bnVzZWAgaXMgKmFjdHVhbGx5KiBpbiBgbW0vc3dhcGZpbGUuY2AuLi4gbGV0J3MgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMzowMzozMC44ODI1NDEwOTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNzY5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VudXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMzM2LVxcdC8qXFxubW0vc3dhcGZpbGUuYzoxMzM3OlxcdCAqIE1ha2Ugc3VyZSB0aGF0IHRyeV90b191bnVzZSgpIG9ic2VydmVzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXFxubW0vc3dhcGZpbGUuYy0xMzM4LVxcdCAqIG9ubHkgYWZ0ZXIgdGhlIGFib3ZlIGNsZWFudXBzIGFyZSBkb25lLlxcbi0tXFxubW0vc3dhcGZpbGUuYz0yNDcxPXN0YXRpYyBpbnQgdW51c2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNDgyLVxcdCAqIElmIHRoZSBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZSBieSBvdGhlcnMsIGNvbnRpbnVlIHRvXFxubW0vc3dhcGZpbGUuYzoyNDgzOlxcdCAqIHVudXNlIG90aGVyIFBURXMuIHRyeV90b191bnVzZSBtYXkgdHJ5IGFnYWluIGlmIHdlIG1pc3NlZCB0aGlzIG9uZS5cXG5tbS9zd2FwZmlsZS5jLTI0ODQtXFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI3NjE9c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNzg0LVxcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbm1tL3N3YXBmaWxlLmM6Mjc4NTpcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxubW0vc3dhcGZpbGUuYy0yNzg2LVxcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4MDYtXFxubW0vc3dhcGZpbGUuYzoyODA3OnN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbm1tL3N3YXBmaWxlLmMtMjgwOC17XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI5MDEtXFx0LypcXG5tbS9zd2FwZmlsZS5jOjI5MDI6XFx0ICogTWFrZSBzdXJlIHRoYXQgZnVydGhlciBjbGVhbnVwcyBhZnRlciB0cnlfdG9fdW51c2UoKSByZXR1cm5zIGhhcHBlblxcbm1tL3N3YXBmaWxlLmMtMjkwMy1cXHQgKiBhZnRlciBzd2FwX3JhbmdlX2ZyZWUoKSByZWR1Y2VzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyB0byAwLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0yOTA5LS8qXFxubW0vc3dhcGZpbGUuYzoyOTEwOiAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCB0cnlfdG9fdW51c2UsIGlmIG5vIHN3YXAgaXMgbm93IGluIHVzZSwgd2Uga25vd1xcbm1tL3N3YXBmaWxlLmMtMjkxMS0gKiB3ZSBjYW4gZW1wdHkgdGhlIG1tbGlzdC4gIHN3YXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgYW5kIGV4aXQuXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTMxNTM9U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zMjEzLVxcdHNldF9jdXJyZW50X29vbV9vcmlnaW4oKTtcXG5tbS9zd2FwZmlsZS5jOjMyMTQ6XFx0ZXJyID0gdHJ5X3RvX3VudXNlKHAtXFx1MDAzZXR5cGUpO1xcbm1tL3N3YXBmaWxlLmMtMzIxNS1cXHRjbGVhcl9jdXJyZW50X29vbV9vcmlnaW4oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjM6MDM6MzAuOTMwNzIxNzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY4MDI5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFN3YXAgRGVhY3RpdmF0aW9uIFN5c3RlbSBDYWxsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHN5c19zd2Fwb2ZmYC4gU3RyYWlnaHQgdG8gdGhlIHBvaW50IOKAkyB0aGlzIGlzIGFib3V0IGRlYWN0aXZhdGluZyBzd2FwIHNwYWNlLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUga2VybmVsIGNvZGUsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWwuIElzIHRoZXJlIGV2ZW4gYSBjb25kaXRpb25hbCBjb21waWxlIGZsYWcgaW52b2x2ZWQgaGVyZT8gSSdtIHRoaW5raW5nIG9mIGBDT05GSUdfU1dBUGAuIElmIHRoYXQncyBub3QgZW5hYmxlZCwgdGhlIHdob2xlIHRoaW5nIG1pZ2h0IGJlIGEgbm8tb3AsIG9yIGF0IGxlYXN0IHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gR290dGEgdmVyaWZ5IHRoYXQgY29uZmlnIHNldHRpbmcgaXMgZW5hYmxlZCwgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIzOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjMzLjg5ODc1NDg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ3MDQ3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXFxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEyOC1cXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMzowMzozNS42MTM0NjU1MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg2NTgzNDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXBvZmYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfU1dBUGAgaXMgcmVsZXZhbnQgaGVyZS4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGRlZmluaXRlbHkgYHN5c19zd2Fwb2ZmYC4gSSd2ZSBjaGVja2VkIGFuZCBkb3VibGUtY2hlY2tlZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgYW5kIHRoYXQgYHRyeV90b191bnVzZWAgaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gaXQuIFRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGB0cnlfdG9fdW51c2VgLCBzb2xpZGlmeWluZyBgc3lzX3N3YXBvZmZgIGFzIHRoZSBjb3JlLlxuXG5JJ3ZlIG1hZGUgc3VyZSBgc3lzX3N3YXBvZmZgIGlzIHRoZSBjb3JyZWN0IG5hbWUgYnkgdmVyaWZ5aW5nIHRoYXQgYFNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCAuLi4pYCBleHBhbmRzIHRvIGBzeXNfc3dhcG9mZmAgb3IgYF9feDY0X3N5c19zd2Fwb2ZmYCBhbmQgdGhhdCBgc3lzX3N3YXBvZmZgIGlzIGRlZmluZWQuIFRoaXMgY29uZmlybXMgdGhhdCBgc3lzX3N3YXBvZmZgIGlzIGEgbGVnaXRpbWF0ZSBzeXNjYWxsIGFuZCB0aHVzIGEgZ29vZCBmb2N1cy5cblxuSSd2ZSBhbHNvIGNvbmZpcm1lZCB0aGF0IGB0cnlfdG9fdW51c2VgIGlzIHN0YXRpYy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvY3VzZWQgb24gb3B0aW1pemluZyBgZmluZF9uZXh0X3RvX3VudXNlYCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycy4gSXQgYXBwZWFycyB0byBvcHRpbWl6ZSBzZWFyY2hpbmcgZm9yIHN3YXAgZW50cmllcywgd2hpY2ggYXJlIHJlbGV2YW50IHRvIHRoZSB1bm1hcHBpbmcgcHJvY2Vzcy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlLiBUaGUgY29kZSBub3cgaXRlcmF0ZXMgdGhyb3VnaCBjbHVzdGVycyBvZiBzd2FwIGVudHJpZXMuIElmIGEgY2x1c3RlciBpcyBlbXB0eSwgaXQgc2tpcHMgdGhlIGVudGlyZSBjbHVzdGVyOyB0aGF0IHNob3VsZCBzYXZlIGEgZ29vZCBhbW91bnQgb2YgdGltZS4gSSBjYW4gc2VlIHRoYXQgc2tpcHBpbmcgZW1wdHkgY2x1c3RlcnMgaXMgYW4gb3B0aW1pemF0aW9uIHdvcnRoIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IHdpbGwgb3B0aW1pemUgdGhlIGBmaW5kX25leHRfdG9fdW51c2VgIGZ1bmN0aW9uLlxuXG5JIGhhdmU6XG4qICAgYENPTkZJR19TV0FQYCBhcyB0aGUgY29uZmlndXJhdGlvblxuKiAgIGBzeXNfc3dhcG9mZmAgYXMgdGhlIGZvY3VzIHN5bWJvbC5cblxuSSBjYW4gY29uZmlybSB0aGF0IFN5emthbGxlciBoYW5kbGVzIHN5c2NhbGxzIHVzaW5nIGdlbmVyaWMgbmFtZXMsIGFuZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgY29ycmVjdGx5IGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjM6MDM6NDYuNDc5MzAzMDU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Mjg2OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLipzd2Fwb2ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0zMTM1PXN0YXRpYyB2b2lkIGZsdXNoX3BlcmNwdV9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zMTUyLVxcbm1tL3N3YXBmaWxlLmM6MzE1MzpTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUpXFxubW0vc3dhcGZpbGUuYy0zMTU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjM6MDM6NDYuNTM2NTk1MTI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0MDQxOTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IFN3YXBvZmYgU3lzdGVtIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYFNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCAuLi4pYCBtYWNyby4gUmlnaHQsIHRoYXQgZ2VuZXJhdGVzIHRoZSBgc3lzX3N3YXBvZmZgIGZ1bmN0aW9uIChvciBwb3RlbnRpYWxseSBgX194NjRfc3lzX3N3YXBvZmZgIG9uIHg4Nl82NCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUpLiBUaGF0IGBzeXNfc3dhcG9mZmAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBoZXJlLiBJJ2xsIHByb3ZpZGUgdGhhdCBhcyB0aGUgZm9jdXMgc3ltYm9sLCB0aGF0IG1ha2VzIHRoZSBtb3N0IHNlbnNlLlxuXG5Ob3csIEkgd2FzIGluaXRpYWxseSBjb25zaWRlcmluZyBgdHJ5X3RvX3VudXNlYCwgYnV0IHRoYXQncyBzdGF0aWMuIEhtbSwgcHJvdmlkaW5nIGEgc3RhdGljIGZ1bmN0aW9uIGFzIHRoZSBmb2N1cyBzeW1ib2wgaXMgZ2VuZXJhbGx5IGEgYmFkIGlkZWEuIFRoZXkgY2FuIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBtZWFuaW5nIG5vIGRpc3RpbmN0IHN5bWJvbCwgb3IgbWlnaHQgbm90IGV2ZW4gYmUgZXhwb3J0ZWQuIEFsdGhvdWdoLCBgdHJ5X3RvX3VudXNlYCBpcyBhIHByZXR0eSBsYXJnZSBmdW5jdGlvbi4gTWF5YmUgaXQgaXNuJ3QgaW5saW5lZD8gUHJvYmFibHkgYmVzdCB0byBqdXN0IHN0aWNrIHdpdGggdGhlIGNhbm9uaWNhbCBlbnRyeSBwb2ludCwgYHN5c19zd2Fwb2ZmYC4gSXQncyBkZWZpbml0ZWx5IHRoZSBiZXR0ZXIgY2hvaWNlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGVudHJ5IHBvaW50cyB0aGF0IHdvdWxkIGFsc28gYmUgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXI/IElzIGBmaW5kX25leHRfdG9fdW51c2VgIGNhbGxlZCBmcm9tIGFueXdoZXJlIG91dHNpZGUgdGhlIGZ1bmN0aW9uP1xuXG5cbiIsIklucHV0VG9rZW5zIjo2MTA0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjUwLjk3NzAxNzA2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MDAyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmluZF9uZXh0X3RvX3VudXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0yNzMzPXN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNzYwLSAqL1xcbm1tL3N3YXBmaWxlLmM6Mjc2MTpzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy0yNzYyLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBwcmV2KVxcbi0tXFxubW0vc3dhcGZpbGUuYz0yODA3PXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yODYwLVxcdCAgICAgICAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zd2FwZmlsZS5jOjI4NjE6XFx0ICAgICAgIChpID0gZmluZF9uZXh0X3RvX3VudXNlKHNpLCBpKSkgIT0gMCkge1xcbm1tL3N3YXBmaWxlLmMtMjg2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjM6MDM6NTEuMDIzNzIzNDMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTUwMTE4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFN3YXBvZmYgUGF0aCoqXG5cbk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIHBvaW50cyBjbGVhcmx5LiBUaGUgY2hhbmdlLCB0aGUgKm9ubHkqIGNoYW5nZSwgdGhhdCdzIGludGVyZXN0aW5nIGhlcmUgc3RlbXMgZGlyZWN0bHkgZnJvbSBgdHJ5X3RvX3VudXNlYC4gVGh1cywgbXkgZm9jdXMgbXVzdCBiZSBzaGFycGx5IG9uIHRoZSBzeXN0ZW0gY2FsbCBgc3lzX3N3YXBvZmZgLiBJdCdzIHRoZSBzb2xlIGVudHJ5IHBvaW50LlxuXG5JIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IGBmaW5kX25leHRfdG9fdW51c2VgIGJlaGF2ZXM7IHNwZWNpZmljYWxseSwgaXQgc2tpcHMgZW1wdHkgc3dhcCBjbHVzdGVycy4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uIHdpdGhpbiB0aGUgYHN3YXBvZmZgIGV4ZWN1dGlvbiBwYXRoLiBBbmQsIGNyaXRpY2FsbHksIHRoZSBjb2RlIGFmZmVjdGVkICppcyogcmVhY2hhYmxlIHZpYSB0aGUgYHN5c19zd2Fwb2ZmYCBzeXN0ZW0gY2FsbC5cblxuVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgW1wic3lzX3N3YXBvZmZcIl1gLlxuXG5MYXN0bHksIHRoZSBmdXp6aW5nIG5lZWRzIHRvIGJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZDogYEVuYWJsZUNvbmZpZ3M6IFtcIlNXQVBcIl1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzYzLCJPdXRwdXRUb2tlbnMiOjkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjU1LjA3ODczODI0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Nzk5NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX3N3YXBvZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzIGVudGlyZWx5LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzd2Fwb2ZmIHBhdGguIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3lzX3N3YXBvZmZgIHN5c3RlbSBjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMgZW50aXJlbHksIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXBvZmYgcGF0aC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzeXNfc3dhcG9mZmAgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 23:02:17 +0000 UTC FinishedAt: 2026-08-06 23:03:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1fb556c523f6c18b43b1f52fb366f61c9963ce06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1fb556c523f6c18b43b1f52fb366f61c9963ce06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "e0c7c794-db19-40e1-ab25-4bbd43cd9e84" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sys_swapoff" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzIGVudGlyZWx5LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzd2Fwb2ZmIHBhdGguIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3lzX3N3YXBvZmZgIHN5c3RlbSBjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTIxMGRlODczYzU5ZGU5Yjk2YWZmMTRkMzgxZDcxNzFlMzlhNDY1YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMjM6MDM6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMmNiMWQyOTMwN2M1NC4uMmIxNGUyZTk2NzNiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI0Niw3ICYjNDM7MjQ2LDcgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qge1xuIFx0c3RydWN0IHBsaXN0X25vZGUgbGlzdDtcdFx0LyogZW50cnkgaW4gc3dhcF9hY3RpdmVfaGVhZCAqL1xuIFx0c2lnbmVkIGNoYXJcdHR5cGU7XHRcdC8qIHN0cmFuZ2UgbmFtZSBmb3IgYW4gaW5kZXggKi9cbiBcdHVuc2lnbmVkIGludFx0bWF4O1x0XHQvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi9cbi1cdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBjbHVzdGVyIGluZm8uIE9ubHkgZm9yIFNTRCAqL1xuJiM0MztcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGRlYTJkM2IzNmUwNmYuLjBkMjRlZmQzMmViMDMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggJiM0MzszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFx0XHQyNTZcbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pXG4ge1xuIFx0cmV0dXJuIGluZm8tXHUwMDNlY291bnQgPT0gMDtcbkBAIC0yNzYzLDcgJiM0MzsyNzYxLDkgQEAgc3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpXG4gc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgcHJldilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaSwgZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludCBjaV9vZmY7XG4gXHR1bnNpZ25lZCBsb25nIHN3cF90YjtcbiBcbiBcdC8qXG5AQCAtMjc3MiwxOSAmIzQzOzI3NzIsMzYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiAmIzQzOyAxOyBpIFx1MDAzYyBzaS1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuJiM0MztcdGkgPSBwcmV2ICYjNDM7IDE7XG4mIzQzO1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuJiM0MztcdFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xuJiM0MztcdFx0ZW5kID0gbWluX3QodW5zaWduZWQgbG9uZyxcbiYjNDM7XHRcdFx0ICAgIEFMSUdOX0RPV04oaSwgU1dBUEZJTEVfQ0xVU1RFUikgJiM0MzsgU1dBUEZJTEVfQ0xVU1RFUixcbiYjNDM7XHRcdFx0ICAgIHNpLVx1MDAzZW1heCk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLlxuJiM0MztcdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG4mIzQzO1x0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4mIzQzO1x0XHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cdTAwM2Vsb2NrIGlzXG4mIzQzO1x0XHQgKiBlbm91Z2gsIHVubGlrZSBpbiBldmVyeSBvdGhlciBjbHVzdGVyX2lzX2VtcHR5KCkgY2FsbGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIVJFQURfT05DRShjaS1cdTAwM2Vjb3VudCkpIHtcbiYjNDM7XHRcdFx0aSA9IGVuZDtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdH1cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4tXHRpZiAoaSA9PSBzaS1cdTAwM2VtYXgpXG4tXHRcdGkgPSAwO1xuJiM0MztcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4mIzQzO1x0XHRmb3IgKDsgaSBcdTAwM2MgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiYjNDM7XHRcdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuJiM0MztcdFx0XHRcdHJldHVybiBpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIGk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX3N3YXBvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycyBlbnRpcmVseSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3dhcG9mZiBwYXRoLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN5c19zd2Fwb2ZmYCBzeXN0ZW0gY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUyMTBkZTg3M2M1OWRlOWI5NmFmZjE0ZDM4MWQ3MTcxZTM5YTQ2NWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDIzOjAzOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAyY2IxZDI5MzA3YzU0Li4yYjE0ZTJlOTY3M2I0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMjQ2LDcgJiM0MzsyNDYsNyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCB7CiAJc3RydWN0IHBsaXN0X25vZGUgbGlzdDsJCS8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi8KIAlzaWduZWQgY2hhcgl0eXBlOwkJLyogc3RyYW5nZSBuYW1lIGZvciBhbiBpbmRleCAqLwogCXVuc2lnbmVkIGludAltYXg7CQkvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi8KLQlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi8KJiM0MzsJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGFycmF5LCBvbmUgZW50cnkgcGVyIGNsdXN0ZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZCBub25mdWxsX2NsdXN0ZXJzW1NXQVBfTlJfT1JERVJTXTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRlYTJkM2IzNmUwNmYuLjBkMjRlZmQzMmViMDMgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMzcwLDggJiM0MzszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJfQogfQogCi0jZGVmaW5lIExBVEVOQ1lfTElNSVQJCTI1NgotCiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pCiB7CiAJcmV0dXJuIGluZm8tJmd0O2NvdW50ID09IDA7CkBAIC0yNzYzLDcgJiM0MzsyNzYxLDkgQEAgc3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpCiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCQkJCXVuc2lnbmVkIGludCBwcmV2KQogewotCXVuc2lnbmVkIGludCBpOwomIzQzOwlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwomIzQzOwl1bnNpZ25lZCBsb25nIGksIGVuZDsKJiM0MzsJdW5zaWduZWQgaW50IGNpX29mZjsKIAl1bnNpZ25lZCBsb25nIHN3cF90YjsKIAogCS8qCkBAIC0yNzcyLDE5ICYjNDM7Mjc3MiwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ldwogCSAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuCiAJICovCi0JZm9yIChpID0gcHJldiAmIzQzOyAxOyBpICZsdDsgc2ktJmd0O21heDsgaSYjNDM7JiM0MzspIHsKLQkJc3dwX3RiID0gc3dhcF90YWJsZV9nZXQoX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKSwKLQkJCQkJaSAlIFNXQVBGSUxFX0NMVVNURVIpOwotCQlpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgJmFtcDsmYW1wOyAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKQotCQkJYnJlYWs7Ci0JCWlmICgoaSAlIExBVEVOQ1lfTElNSVQpID09IDApCiYjNDM7CWkgPSBwcmV2ICYjNDM7IDE7CiYjNDM7CXdoaWxlIChpICZsdDsgc2ktJmd0O21heCkgewomIzQzOwkJY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpOwomIzQzOwkJZW5kID0gbWluX3QodW5zaWduZWQgbG9uZywKJiM0MzsJCQkgICAgQUxJR05fRE9XTihpLCBTV0FQRklMRV9DTFVTVEVSKSAmIzQzOyBTV0FQRklMRV9DTFVTVEVSLAomIzQzOwkJCSAgICBzaS0mZ3Q7bWF4KTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBbiBlbXB0eSBjbHVzdGVyIGhhcyBubyBzbG90IGluIHVzZSwgc28gc2tpcCBpdCB3aG9sZS4KJiM0MzsJCSAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcAomIzQzOwkJICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLgomIzQzOwkJICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktJmd0O2xvY2sgaXMKJiM0MzsJCSAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghUkVBRF9PTkNFKGNpLSZndDtjb3VudCkpIHsKJiM0MzsJCQlpID0gZW5kOwogCQkJY29uZF9yZXNjaGVkKCk7Ci0JfQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQogCi0JaWYgKGkgPT0gc2ktJmd0O21heCkKLQkJaSA9IDA7CiYjNDM7CQljaV9vZmYgPSBpICUgU1dBUEZJTEVfQ0xVU1RFUjsKJiM0MzsJCWZvciAoOyBpICZsdDsgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpOwomIzQzOwkJCWlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSAmYW1wOyZhbXA7ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpCiYjNDM7CQkJCXJldHVybiBpOwomIzQzOwkJfQomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KIAotCXJldHVybiBpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2FwZmlsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgYSBwcmV0dHkgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uIHRvIGBmaW5kX25leHRfdG9fdW51c2VgIHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSBpdCYjMzk7cyBjaGFuZ2luZyBob3cgdGhlIHN5c3RlbSBsb2NhdGVzIHRoZSAqbmV4dCogc3dhcCBlbnRyeSB0byBiZSBtYXJrZWQgYXMgdW51c2VkLiBUaGUga2V5IGlzIHRoYXQgaXQmIzM5O3Mgb3B0aW1pemluZyB0aGUgbG9vcDogbm93LCBpdCBza2lwcyBlbnRpcmUgZW1wdHkgY2x1c3RlcnMgYmFzZWQgb24gYSBjaGVjayBhZ2FpbnN0IGBjaS0mZ3Q7Y291bnRgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0JiMzOTtzIGdvaW5nIHRvIGFsdGVyIHRoZSBiZWhhdmlvciBvZiBzd2FwZmlsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgYHN3YXBvZmZgIG9yIHBvc3NpYmx5IHdoZW4gd2UgYHRyeV90b191bnVzZWAgYSBzd2FwIGVudHJ5LgoKRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gSXMgdGhpcyBjaGFuZ2VkIGZ1bmN0aW9uIGV2ZW4gKnVzZWQqPyBPa2F5LCBhIHF1aWNrIGNoZWNrIHRlbGxzIG1lIGBmaW5kX25leHRfdG9fdW51c2VgIGlzIGNhbGxlZCBieSBgdHJ5X3RvX3VudXNlYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgc3lzX3N3YXBvZmZgLiBFeGNlbGxlbnQuIGBzeXNfc3dhcG9mZmAgaXMsIG9mIGNvdXJzZSwgYSBzeXN0ZW0gY2FsbC4gVGhhdCBtZWFucyBpdOKAmXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGV4YWN0IHN5bWJvbCBuYW1lcyBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQuIGBmaW5kX25leHRfdG9fdW51c2VgIGlzIGRlY2xhcmVkIHN0YXRpYywgYXMgaXMgYHRyeV90b191bnVzZWAuIEFuZCBgc3lzX3N3YXBvZmZgIGlzLCBhcyBleHBlY3RlZCwgYSBzeXNjYWxsLgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHRyeV90b191bnVzZWAgaXMgKmFjdHVhbGx5KiBpbiBgbW0vc3dhcGZpbGUuY2AuLi4gbGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxuLS1cbm1tL3N3YXBmaWxlLmMtMTMzNi1cdC8qXG5tbS9zd2FwZmlsZS5jOjEzMzc6XHQgKiBNYWtlIHN1cmUgdGhhdCB0cnlfdG9fdW51c2UoKSBvYnNlcnZlcyBzaS1cdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXG5tbS9zd2FwZmlsZS5jLTEzMzgtXHQgKiBvbmx5IGFmdGVyIHRoZSBhYm92ZSBjbGVhbnVwcyBhcmUgZG9uZS5cbi0tXG5tbS9zd2FwZmlsZS5jPTI0NzE9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vc3dhcGZpbGUuYy0yNDgyLVx0ICogSWYgdGhlIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlIGJ5IG90aGVycywgY29udGludWUgdG9cbm1tL3N3YXBmaWxlLmM6MjQ4MzpcdCAqIHVudXNlIG90aGVyIFBURXMuIHRyeV90b191bnVzZSBtYXkgdHJ5IGFnYWluIGlmIHdlIG1pc3NlZCB0aGlzIG9uZS5cbm1tL3N3YXBmaWxlLmMtMjQ4NC1cdCAqL1xuLS1cbm1tL3N3YXBmaWxlLmM9Mjc2MT1zdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0yNzg0LVx0XHQgKiBBIHNsb3QgaXMgdW5jb3VudGVkIG9ubHkgYWZ0ZXIgaXRzIGZvbGlvIGxlZnQgdGhlIHN3YXBcbm1tL3N3YXBmaWxlLmM6Mjc4NTpcdFx0ICogY2FjaGUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgaGVyZSBmb3IgdHJ5X3RvX3VudXNlKCkgdG8gYWN0IG9uLlxubW0vc3dhcGZpbGUuYy0yNzg2LVx0XHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cdTAwM2Vsb2NrIGlzXG4tLVxubW0vc3dhcGZpbGUuYy0yODA2LVxubW0vc3dhcGZpbGUuYzoyODA3OnN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxubW0vc3dhcGZpbGUuYy0yODA4LXtcbi0tXG5tbS9zd2FwZmlsZS5jLTI5MDEtXHQvKlxubW0vc3dhcGZpbGUuYzoyOTAyOlx0ICogTWFrZSBzdXJlIHRoYXQgZnVydGhlciBjbGVhbnVwcyBhZnRlciB0cnlfdG9fdW51c2UoKSByZXR1cm5zIGhhcHBlblxubW0vc3dhcGZpbGUuYy0yOTAzLVx0ICogYWZ0ZXIgc3dhcF9yYW5nZV9mcmVlKCkgcmVkdWNlcyBzaS1cdTAwM2VpbnVzZV9wYWdlcyB0byAwLlxuLS1cbm1tL3N3YXBmaWxlLmMtMjkwOS0vKlxubW0vc3dhcGZpbGUuYzoyOTEwOiAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCB0cnlfdG9fdW51c2UsIGlmIG5vIHN3YXAgaXMgbm93IGluIHVzZSwgd2Uga25vd1xubW0vc3dhcGZpbGUuYy0yOTExLSAqIHdlIGNhbiBlbXB0eSB0aGUgbW1saXN0LiAgc3dhcF9sb2NrIG11c3QgYmUgaGVsZCBvbiBlbnRyeSBhbmQgZXhpdC5cbi0tXG5tbS9zd2FwZmlsZS5jPTMxNTM9U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMzIxMy1cdHNldF9jdXJyZW50X29vbV9vcmlnaW4oKTtcbm1tL3N3YXBmaWxlLmM6MzIxNDpcdGVyciA9IHRyeV90b191bnVzZShwLVx1MDAzZXR5cGUpO1xubW0vc3dhcGZpbGUuYy0zMjE1LVx0Y2xlYXJfY3VycmVudF9vb21fb3JpZ2luKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjM6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzOAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgU3dhcCBEZWFjdGl2YXRpb24gU3lzdGVtIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzeXNfc3dhcG9mZmAuIFN0cmFpZ2h0IHRvIHRoZSBwb2ludCDigJMgdGhpcyBpcyBhYm91dCBkZWFjdGl2YXRpbmcgc3dhcCBzcGFjZS4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGtlcm5lbCBjb2RlLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJcyB0aGVyZSBldmVuIGEgY29uZGl0aW9uYWwgY29tcGlsZSBmbGFnIGludm9sdmVkIGhlcmU/IEkmIzM5O20gdGhpbmtpbmcgb2YgYENPTkZJR19TV0FQYC4gSWYgdGhhdCYjMzk7cyBub3QgZW5hYmxlZCwgdGhlIHdob2xlIHRoaW5nIG1pZ2h0IGJlIGEgbm8tb3AsIG9yIGF0IGxlYXN0IHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gR290dGEgdmVyaWZ5IHRoYXQgY29uZmlnIHNldHRpbmcgaXMgZW5hYmxlZCwgYmVmb3JlIEkgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL21pcHMvS2NvbmZpZz0xMjYzPWNvbmZpZyBNSVBTX1NQUkFNXG4tLVxuYXJjaC9taXBzL0tjb25maWctMTI2NS1cbmFyY2gvbWlwcy9LY29uZmlnOjEyNjY6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXHRib29sXG4tLVxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxuLS1cbmFyY2gvc2gvS2NvbmZpZy0xMjgtXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL3NoL0tjb25maWctMTMwLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3dhcG9mZiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19TV0FQYCBpcyByZWxldmFudCBoZXJlLiBUaGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgZGVmaW5pdGVseSBgc3lzX3N3YXBvZmZgLiBJJiMzOTt2ZSBjaGVja2VkIGFuZCBkb3VibGUtY2hlY2tlZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgYW5kIHRoYXQgYHRyeV90b191bnVzZWAgaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gaXQuIFRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGB0cnlfdG9fdW51c2VgLCBzb2xpZGlmeWluZyBgc3lzX3N3YXBvZmZgIGFzIHRoZSBjb3JlLgoKSSYjMzk7dmUgbWFkZSBzdXJlIGBzeXNfc3dhcG9mZmAgaXMgdGhlIGNvcnJlY3QgbmFtZSBieSB2ZXJpZnlpbmcgdGhhdCBgU1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIC4uLilgIGV4cGFuZHMgdG8gYHN5c19zd2Fwb2ZmYCBvciBgX194NjRfc3lzX3N3YXBvZmZgIGFuZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgZGVmaW5lZC4gVGhpcyBjb25maXJtcyB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgYSBsZWdpdGltYXRlIHN5c2NhbGwgYW5kIHRodXMgYSBnb29kIGZvY3VzLgoKSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhhdCBgdHJ5X3RvX3VudXNlYCBpcyBzdGF0aWMuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZm9jdXNlZCBvbiBvcHRpbWl6aW5nIGBmaW5kX25leHRfdG9fdW51c2VgIGJ5IHNraXBwaW5nIGVtcHR5IGNsdXN0ZXJzLiBJdCBhcHBlYXJzIHRvIG9wdGltaXplIHNlYXJjaGluZyBmb3Igc3dhcCBlbnRyaWVzLCB3aGljaCBhcmUgcmVsZXZhbnQgdG8gdGhlIHVubWFwcGluZyBwcm9jZXNzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlLiBUaGUgY29kZSBub3cgaXRlcmF0ZXMgdGhyb3VnaCBjbHVzdGVycyBvZiBzd2FwIGVudHJpZXMuIElmIGEgY2x1c3RlciBpcyBlbXB0eSwgaXQgc2tpcHMgdGhlIGVudGlyZSBjbHVzdGVyOyB0aGF0IHNob3VsZCBzYXZlIGEgZ29vZCBhbW91bnQgb2YgdGltZS4gSSBjYW4gc2VlIHRoYXQgc2tpcHBpbmcgZW1wdHkgY2x1c3RlcnMgaXMgYW4gb3B0aW1pemF0aW9uIHdvcnRoIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IHdpbGwgb3B0aW1pemUgdGhlIGBmaW5kX25leHRfdG9fdW51c2VgIGZ1bmN0aW9uLgoKSSBoYXZlOgoqICAgYENPTkZJR19TV0FQYCBhcyB0aGUgY29uZmlndXJhdGlvbgoqICAgYHN5c19zd2Fwb2ZmYCBhcyB0aGUgZm9jdXMgc3ltYm9sLgoKSSBjYW4gY29uZmlybSB0aGF0IFN5emthbGxlciBoYW5kbGVzIHN5c2NhbGxzIHVzaW5nIGdlbmVyaWMgbmFtZXMsIGFuZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgY29ycmVjdGx5IGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnN3YXBvZmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzEzNT1zdGF0aWMgdm9pZCBmbHVzaF9wZXJjcHVfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbi0tXG5tbS9zd2FwZmlsZS5jLTMxNTItXG5tbS9zd2FwZmlsZS5jOjMxNTM6U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxubW0vc3dhcGZpbGUuYy0zMTU0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTGludXggU3dhcG9mZiBTeXN0ZW0gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgLi4uKWAgbWFjcm8uIFJpZ2h0LCB0aGF0IGdlbmVyYXRlcyB0aGUgYHN5c19zd2Fwb2ZmYCBmdW5jdGlvbiAob3IgcG90ZW50aWFsbHkgYF9feDY0X3N5c19zd2Fwb2ZmYCBvbiB4ODZfNjQsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlKS4gVGhhdCBgc3lzX3N3YXBvZmZgIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgaGVyZS4gSSYjMzk7bGwgcHJvdmlkZSB0aGF0IGFzIHRoZSBmb2N1cyBzeW1ib2wsIHRoYXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuCgpOb3csIEkgd2FzIGluaXRpYWxseSBjb25zaWRlcmluZyBgdHJ5X3RvX3VudXNlYCwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLiBIbW0sIHByb3ZpZGluZyBhIHN0YXRpYyBmdW5jdGlvbiBhcyB0aGUgZm9jdXMgc3ltYm9sIGlzIGdlbmVyYWxseSBhIGJhZCBpZGVhLiBUaGV5IGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgbWVhbmluZyBubyBkaXN0aW5jdCBzeW1ib2wsIG9yIG1pZ2h0IG5vdCBldmVuIGJlIGV4cG9ydGVkLiBBbHRob3VnaCwgYHRyeV90b191bnVzZWAgaXMgYSBwcmV0dHkgbGFyZ2UgZnVuY3Rpb24uIE1heWJlIGl0IGlzbiYjMzk7dCBpbmxpbmVkPyBQcm9iYWJseSBiZXN0IHRvIGp1c3Qgc3RpY2sgd2l0aCB0aGUgY2Fub25pY2FsIGVudHJ5IHBvaW50LCBgc3lzX3N3YXBvZmZgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHRoZSBiZXR0ZXIgY2hvaWNlLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2suIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZW50cnkgcG9pbnRzIHRoYXQgd291bGQgYWxzbyBiZSBpbnRlcmVzdGluZyB0byBjb25zaWRlcj8gSXMgYGZpbmRfbmV4dF90b191bnVzZWAgY2FsbGVkIGZyb20gYW55d2hlcmUgb3V0c2lkZSB0aGUgZnVuY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDIzOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfbmV4dF90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0yNzMzPXN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjc2MC0gKi9cbm1tL3N3YXBmaWxlLmM6Mjc2MTpzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG5tbS9zd2FwZmlsZS5jLTI3NjItXHRcdFx0XHRcdHVuc2lnbmVkIGludCBwcmV2KVxuLS1cbm1tL3N3YXBmaWxlLmM9MjgwNz1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTI4NjAtXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFx1MDAyNlx1MDAyNlxubW0vc3dhcGZpbGUuYzoyODYxOlx0ICAgICAgIChpID0gZmluZF9uZXh0X3RvX3VudXNlKHNpLCBpKSkgIT0gMCkge1xubW0vc3dhcGZpbGUuYy0yODYyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAyMzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzYzCgkJCQkJCQlvdXRwdXQ6IDkwCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTd2Fwb2ZmIFBhdGgqKgoKT2theSwgc28gdGhlIGludmVzdGlnYXRpb24gcG9pbnRzIGNsZWFybHkuIFRoZSBjaGFuZ2UsIHRoZSAqb25seSogY2hhbmdlLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nIGhlcmUgc3RlbXMgZGlyZWN0bHkgZnJvbSBgdHJ5X3RvX3VudXNlYC4gVGh1cywgbXkgZm9jdXMgbXVzdCBiZSBzaGFycGx5IG9uIHRoZSBzeXN0ZW0gY2FsbCBgc3lzX3N3YXBvZmZgLiBJdCYjMzk7cyB0aGUgc29sZSBlbnRyeSBwb2ludC4KCkkgbmVlZCB0byBmbGFnIHRoaXMgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSByYXRpb25hbGUgaXMgdGhhdCB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgYGZpbmRfbmV4dF90b191bnVzZWAgYmVoYXZlczsgc3BlY2lmaWNhbGx5LCBpdCBza2lwcyBlbXB0eSBzd2FwIGNsdXN0ZXJzLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGFsdGVyYXRpb24gd2l0aGluIHRoZSBgc3dhcG9mZmAgZXhlY3V0aW9uIHBhdGguIEFuZCwgY3JpdGljYWxseSwgdGhlIGNvZGUgYWZmZWN0ZWQgKmlzKiByZWFjaGFibGUgdmlhIHRoZSBgc3lzX3N3YXBvZmZgIHN5c3RlbSBjYWxsLgoKVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgWyYjMzQ7c3lzX3N3YXBvZmYmIzM0O11gLgoKTGFzdGx5LCB0aGUgZnV6emluZyBuZWVkcyB0byBiZSBhcHByb3ByaWF0ZWx5IGNvbmZpZ3VyZWQ6IGBFbmFibGVDb25maWdzOiBbJiMzNDtTV0FQJiMzNDtdYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMjM6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzIGVudGlyZWx5LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzd2Fwb2ZmIHBhdGguIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3lzX3N3YXBvZmZgIHN5c3RlbSBjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3lzX3N3YXBvZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycyBlbnRpcmVseSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3dhcG9mZiBwYXRoLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN5c19zd2Fwb2ZmYCBzeXN0ZW0gY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjI0LjM3MjYyNTIwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzgzOTI0MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMgZW50aXJlbHksIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXBvZmYgcGF0aC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzeXNfc3dhcG9mZmAgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjI0LjM3MjYzNDEzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExOTI0MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTIxMGRlODczYzU5ZGU5Yjk2YWZmMTRkMzgxZDcxNzFlMzlhNDY1YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyA2IDIzOjAzOjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCAyY2IxZDI5MzA3YzU0Li4yYjE0ZTJlOTY3M2I0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMjQ2LDcgKzI0Niw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcXG4gXFx0c3RydWN0IHBsaXN0X25vZGUgbGlzdDtcXHRcXHQvKiBlbnRyeSBpbiBzd2FwX2FjdGl2ZV9oZWFkICovXFxuIFxcdHNpZ25lZCBjaGFyXFx0dHlwZTtcXHRcXHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXFxuIFxcdHVuc2lnbmVkIGludFxcdG1heDtcXHRcXHQvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi9cXG4tXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGNsdXN0ZXIgaW5mby4gT25seSBmb3IgU1NEICovXFxuK1xcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jbHVzdGVyczsgLyogZnJlZSBjbHVzdGVycyBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uMGQyNGVmZDMyZWIwMyAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC0zNzAsOCArMzcwLDYgQEAgc3RhdGljIHZvaWQgZGlzY2FyZF9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHR9XFxuIH1cXG4gXFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFxcdFxcdDI1Nlxcbi1cXG4gc3RhdGljIGlubGluZSBib29sIGNsdXN0ZXJfaXNfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHJldHVybiBpbmZvLVxcdTAwM2Vjb3VudCA9PSAwO1xcbkBAIC0yNzYzLDcgKzI3NjEsOSBAQCBzdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4gc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGludCBjaV9vZmY7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xcbiBcXG4gXFx0LypcXG5AQCAtMjc3MiwxOSArMjc3MiwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcXG4gXFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cXG4gXFx0ICovXFxuLVxcdGZvciAoaSA9IHByZXYgKyAxOyBpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heDsgaSsrKSB7XFxuLVxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXFxuLVxcdFxcdFxcdFxcdFxcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcXG4tXFx0XFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFxcdTAwMjZcXHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxcbitcXHRpID0gcHJldiArIDE7XFxuK1xcdHdoaWxlIChpIFxcdTAwM2Mgc2ktXFx1MDAzZW1heCkge1xcbitcXHRcXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XFxuK1xcdFxcdGVuZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsXFxuK1xcdFxcdFxcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICsgU1dBUEZJTEVfQ0xVU1RFUixcXG4rXFx0XFx0XFx0ICAgIHNpLVxcdTAwM2VtYXgpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXFxuK1xcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbitcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxuK1xcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuK1xcdFxcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShjaS1cXHUwMDNlY291bnQpKSB7XFxuK1xcdFxcdFxcdGkgPSBlbmQ7XFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRpZiAoaSA9PSBzaS1cXHUwMDNlbWF4KVxcbi1cXHRcXHRpID0gMDtcXG4rXFx0XFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XFxuK1xcdFxcdGZvciAoOyBpIFxcdTAwM2MgZW5kOyBjaV9vZmYrKywgaSsrKSB7XFxuK1xcdFxcdFxcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbitcXHRcXHRcXHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXFx1MDAyNlxcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdH1cXG4gXFxuLVxcdHJldHVybiBpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjI0Ljg4NTMyMDIxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMwMjcxMjIwMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMgZW50aXJlbHksIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXBvZmYgcGF0aC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzeXNfc3dhcG9mZmAgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUyMTBkZTg3M2M1OWRlOWI5NmFmZjE0ZDM4MWQ3MTcxZTM5YTQ2NWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDIzOjAzOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMmNiMWQyOTMwN2M1NC4uMmIxNGUyZTk2NzNiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI0Niw3ICsyNDYsNyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCB7XG4gXHRzdHJ1Y3QgcGxpc3Rfbm9kZSBsaXN0O1x0XHQvKiBlbnRyeSBpbiBzd2FwX2FjdGl2ZV9oZWFkICovXG4gXHRzaWduZWQgY2hhclx0dHlwZTtcdFx0Lyogc3RyYW5nZSBuYW1lIGZvciBhbiBpbmRleCAqL1xuIFx0dW5zaWduZWQgaW50XHRtYXg7XHRcdC8qIHNpemUgb2YgdGhpcyBzd2FwIGRldmljZSAqL1xuLVx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGNsdXN0ZXIgaW5mby4gT25seSBmb3IgU1NEICovXG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogYXJyYXksIG9uZSBlbnRyeSBwZXIgY2x1c3RlciAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmcmVlX2NsdXN0ZXJzOyAvKiBmcmVlIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgZnVsbF9jbHVzdGVyczsgLyogZnVsbCBjbHVzdGVycyBsaXN0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vbmZ1bGxfY2x1c3RlcnNbU1dBUF9OUl9PUkRFUlNdO1xuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXG5pbmRleCBkZWEyZDNiMzZlMDZmLi4wZDI0ZWZkMzJlYjAzIDEwMDY0NFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xuKysrIGIvbW0vc3dhcGZpbGUuY1xuQEAgLTM3MCw4ICszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFx0XHQyNTZcbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pXG4ge1xuIFx0cmV0dXJuIGluZm8tXHUwMDNlY291bnQgPT0gMDtcbkBAIC0yNzYzLDcgKzI3NjEsOSBAQCBzdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcbiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBwcmV2KVxuIHtcbi1cdHVuc2lnbmVkIGludCBpO1xuK1x0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbitcdHVuc2lnbmVkIGxvbmcgaSwgZW5kO1xuK1x0dW5zaWduZWQgaW50IGNpX29mZjtcbiBcdHVuc2lnbmVkIGxvbmcgc3dwX3RiO1xuIFxuIFx0LypcbkBAIC0yNzcyLDE5ICsyNzcyLDM2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdCAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXdcbiBcdCAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBhcmVhICh3aGlsZSBob2xkaW5nIHN3YXBfbG9jaykuXG4gXHQgKi9cbi1cdGZvciAoaSA9IHByZXYgKyAxOyBpIFx1MDAzYyBzaS1cdTAwM2VtYXg7IGkrKykge1xuLVx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpLFxuLVx0XHRcdFx0XHRpICUgU1dBUEZJTEVfQ0xVU1RFUik7XG4tXHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKChpICUgTEFURU5DWV9MSU1JVCkgPT0gMClcbitcdGkgPSBwcmV2ICsgMTtcbitcdHdoaWxlIChpIFx1MDAzYyBzaS1cdTAwM2VtYXgpIHtcbitcdFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xuK1x0XHRlbmQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLFxuK1x0XHRcdCAgICBBTElHTl9ET1dOKGksIFNXQVBGSUxFX0NMVVNURVIpICsgU1dBUEZJTEVfQ0xVU1RFUixcbitcdFx0XHQgICAgc2ktXHUwMDNlbWF4KTtcbitcbitcdFx0LypcbitcdFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXG4rXHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxuK1x0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4rXHRcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVx1MDAzZWxvY2sgaXNcbitcdFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cbitcdFx0ICovXG4rXHRcdGlmICghUkVBRF9PTkNFKGNpLVx1MDAzZWNvdW50KSkge1xuK1x0XHRcdGkgPSBlbmQ7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbi1cdGlmIChpID09IHNpLVx1MDAzZW1heClcbi1cdFx0aSA9IDA7XG4rXHRcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xuK1x0XHRmb3IgKDsgaSBcdTAwM2MgZW5kOyBjaV9vZmYrKywgaSsrKSB7XG4rXHRcdFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4rXHRcdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuK1x0XHRcdFx0cmV0dXJuIGk7XG4rXHRcdH1cbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHR9XG4gXG4tXHRyZXR1cm4gaTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjI0Ljg4NTMyMTU1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTcyMTcyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTd2FwZmlsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIGEgcHJldHR5IHRhcmdldGVkIG1vZGlmaWNhdGlvbiB0byBgZmluZF9uZXh0X3RvX3VudXNlYCB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgaXQncyBjaGFuZ2luZyBob3cgdGhlIHN5c3RlbSBsb2NhdGVzIHRoZSAqbmV4dCogc3dhcCBlbnRyeSB0byBiZSBtYXJrZWQgYXMgdW51c2VkLiBUaGUga2V5IGlzIHRoYXQgaXQncyBvcHRpbWl6aW5nIHRoZSBsb29wOiBub3csIGl0IHNraXBzIGVudGlyZSBlbXB0eSBjbHVzdGVycyBiYXNlZCBvbiBhIGNoZWNrIGFnYWluc3QgYGNpLVx1MDAzZWNvdW50YC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIGdvaW5nIHRvIGFsdGVyIHRoZSBiZWhhdmlvciBvZiBzd2FwZmlsZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgYHN3YXBvZmZgIG9yIHBvc3NpYmx5IHdoZW4gd2UgYHRyeV90b191bnVzZWAgYSBzd2FwIGVudHJ5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiBJcyB0aGlzIGNoYW5nZWQgZnVuY3Rpb24gZXZlbiAqdXNlZCo/IE9rYXksIGEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgYGZpbmRfbmV4dF90b191bnVzZWAgaXMgY2FsbGVkIGJ5IGB0cnlfdG9fdW51c2VgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGBzeXNfc3dhcG9mZmAuIEV4Y2VsbGVudC4gYHN5c19zd2Fwb2ZmYCBpcywgb2YgY291cnNlLCBhIHN5c3RlbSBjYWxsLiBUaGF0IG1lYW5zIGl04oCZcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBzcGVjaWZpY3MuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZXhhY3Qgc3ltYm9sIG5hbWVzIGFuZCB0aGUgY29uZmlndXJhdGlvbiBpbnZvbHZlZC4gYGZpbmRfbmV4dF90b191bnVzZWAgaXMgZGVjbGFyZWQgc3RhdGljLCBhcyBpcyBgdHJ5X3RvX3VudXNlYC4gQW5kIGBzeXNfc3dhcG9mZmAgaXMsIGFzIGV4cGVjdGVkLCBhIHN5c2NhbGwuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHRyeV90b191bnVzZWAgaXMgKmFjdHVhbGx5KiBpbiBgbW0vc3dhcGZpbGUuY2AuLi4gbGV0J3MgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMzowMzozMC44ODI1NDEwOTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNzY5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VudXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMzM2LVxcdC8qXFxubW0vc3dhcGZpbGUuYzoxMzM3OlxcdCAqIE1ha2Ugc3VyZSB0aGF0IHRyeV90b191bnVzZSgpIG9ic2VydmVzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXFxubW0vc3dhcGZpbGUuYy0xMzM4LVxcdCAqIG9ubHkgYWZ0ZXIgdGhlIGFib3ZlIGNsZWFudXBzIGFyZSBkb25lLlxcbi0tXFxubW0vc3dhcGZpbGUuYz0yNDcxPXN0YXRpYyBpbnQgdW51c2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNDgyLVxcdCAqIElmIHRoZSBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZSBieSBvdGhlcnMsIGNvbnRpbnVlIHRvXFxubW0vc3dhcGZpbGUuYzoyNDgzOlxcdCAqIHVudXNlIG90aGVyIFBURXMuIHRyeV90b191bnVzZSBtYXkgdHJ5IGFnYWluIGlmIHdlIG1pc3NlZCB0aGlzIG9uZS5cXG5tbS9zd2FwZmlsZS5jLTI0ODQtXFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI3NjE9c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNzg0LVxcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbm1tL3N3YXBmaWxlLmM6Mjc4NTpcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxubW0vc3dhcGZpbGUuYy0yNzg2LVxcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4MDYtXFxubW0vc3dhcGZpbGUuYzoyODA3OnN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbm1tL3N3YXBmaWxlLmMtMjgwOC17XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI5MDEtXFx0LypcXG5tbS9zd2FwZmlsZS5jOjI5MDI6XFx0ICogTWFrZSBzdXJlIHRoYXQgZnVydGhlciBjbGVhbnVwcyBhZnRlciB0cnlfdG9fdW51c2UoKSByZXR1cm5zIGhhcHBlblxcbm1tL3N3YXBmaWxlLmMtMjkwMy1cXHQgKiBhZnRlciBzd2FwX3JhbmdlX2ZyZWUoKSByZWR1Y2VzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyB0byAwLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0yOTA5LS8qXFxubW0vc3dhcGZpbGUuYzoyOTEwOiAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCB0cnlfdG9fdW51c2UsIGlmIG5vIHN3YXAgaXMgbm93IGluIHVzZSwgd2Uga25vd1xcbm1tL3N3YXBmaWxlLmMtMjkxMS0gKiB3ZSBjYW4gZW1wdHkgdGhlIG1tbGlzdC4gIHN3YXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgYW5kIGV4aXQuXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTMxNTM9U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zMjEzLVxcdHNldF9jdXJyZW50X29vbV9vcmlnaW4oKTtcXG5tbS9zd2FwZmlsZS5jOjMyMTQ6XFx0ZXJyID0gdHJ5X3RvX3VudXNlKHAtXFx1MDAzZXR5cGUpO1xcbm1tL3N3YXBmaWxlLmMtMzIxNS1cXHRjbGVhcl9jdXJyZW50X29vbV9vcmlnaW4oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjM6MDM6MzAuOTMwNzIxNzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY4MDI5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFN3YXAgRGVhY3RpdmF0aW9uIFN5c3RlbSBDYWxsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHN5c19zd2Fwb2ZmYC4gU3RyYWlnaHQgdG8gdGhlIHBvaW50IOKAkyB0aGlzIGlzIGFib3V0IGRlYWN0aXZhdGluZyBzd2FwIHNwYWNlLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUga2VybmVsIGNvZGUsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgZnVuZGFtZW50YWwuIElzIHRoZXJlIGV2ZW4gYSBjb25kaXRpb25hbCBjb21waWxlIGZsYWcgaW52b2x2ZWQgaGVyZT8gSSdtIHRoaW5raW5nIG9mIGBDT05GSUdfU1dBUGAuIElmIHRoYXQncyBub3QgZW5hYmxlZCwgdGhlIHdob2xlIHRoaW5nIG1pZ2h0IGJlIGEgbm8tb3AsIG9yIGF0IGxlYXN0IHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGluIGl0cyBpbXBsZW1lbnRhdGlvbi4gR290dGEgdmVyaWZ5IHRoYXQgY29uZmlnIHNldHRpbmcgaXMgZW5hYmxlZCwgYmVmb3JlIEkgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIzOCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjMzLjg5ODc1NDg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ3MDQ3MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXFxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEyOC1cXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQyMzowMzozNS42MTM0NjU1MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg2NTgzNDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXBvZmYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfU1dBUGAgaXMgcmVsZXZhbnQgaGVyZS4gVGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0IGlzIGRlZmluaXRlbHkgYHN5c19zd2Fwb2ZmYC4gSSd2ZSBjaGVja2VkIGFuZCBkb3VibGUtY2hlY2tlZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgYW5kIHRoYXQgYHRyeV90b191bnVzZWAgaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gaXQuIFRoZSBwYXRjaCBtb2RpZmllcyBgZmluZF9uZXh0X3RvX3VudXNlYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGB0cnlfdG9fdW51c2VgLCBzb2xpZGlmeWluZyBgc3lzX3N3YXBvZmZgIGFzIHRoZSBjb3JlLlxuXG5JJ3ZlIG1hZGUgc3VyZSBgc3lzX3N3YXBvZmZgIGlzIHRoZSBjb3JyZWN0IG5hbWUgYnkgdmVyaWZ5aW5nIHRoYXQgYFNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCAuLi4pYCBleHBhbmRzIHRvIGBzeXNfc3dhcG9mZmAgb3IgYF9feDY0X3N5c19zd2Fwb2ZmYCBhbmQgdGhhdCBgc3lzX3N3YXBvZmZgIGlzIGRlZmluZWQuIFRoaXMgY29uZmlybXMgdGhhdCBgc3lzX3N3YXBvZmZgIGlzIGEgbGVnaXRpbWF0ZSBzeXNjYWxsIGFuZCB0aHVzIGEgZ29vZCBmb2N1cy5cblxuSSd2ZSBhbHNvIGNvbmZpcm1lZCB0aGF0IGB0cnlfdG9fdW51c2VgIGlzIHN0YXRpYy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZvY3VzZWQgb24gb3B0aW1pemluZyBgZmluZF9uZXh0X3RvX3VudXNlYCBieSBza2lwcGluZyBlbXB0eSBjbHVzdGVycy4gSXQgYXBwZWFycyB0byBvcHRpbWl6ZSBzZWFyY2hpbmcgZm9yIHN3YXAgZW50cmllcywgd2hpY2ggYXJlIHJlbGV2YW50IHRvIHRoZSB1bm1hcHBpbmcgcHJvY2Vzcy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBhIGdvb2QgY2hhbmdlLiBUaGUgY29kZSBub3cgaXRlcmF0ZXMgdGhyb3VnaCBjbHVzdGVycyBvZiBzd2FwIGVudHJpZXMuIElmIGEgY2x1c3RlciBpcyBlbXB0eSwgaXQgc2tpcHMgdGhlIGVudGlyZSBjbHVzdGVyOyB0aGF0IHNob3VsZCBzYXZlIGEgZ29vZCBhbW91bnQgb2YgdGltZS4gSSBjYW4gc2VlIHRoYXQgc2tpcHBpbmcgZW1wdHkgY2x1c3RlcnMgaXMgYW4gb3B0aW1pemF0aW9uIHdvcnRoIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IHdpbGwgb3B0aW1pemUgdGhlIGBmaW5kX25leHRfdG9fdW51c2VgIGZ1bmN0aW9uLlxuXG5JIGhhdmU6XG4qICAgYENPTkZJR19TV0FQYCBhcyB0aGUgY29uZmlndXJhdGlvblxuKiAgIGBzeXNfc3dhcG9mZmAgYXMgdGhlIGZvY3VzIHN5bWJvbC5cblxuSSBjYW4gY29uZmlybSB0aGF0IFN5emthbGxlciBoYW5kbGVzIHN5c2NhbGxzIHVzaW5nIGdlbmVyaWMgbmFtZXMsIGFuZCB0aGF0IGBzeXNfc3dhcG9mZmAgaXMgY29ycmVjdGx5IGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjM6MDM6NDYuNDc5MzAzMDU5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3Mjg2OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLipzd2Fwb2ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0zMTM1PXN0YXRpYyB2b2lkIGZsdXNoX3BlcmNwdV9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zMTUyLVxcbm1tL3N3YXBmaWxlLmM6MzE1MzpTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbGZpbGUpXFxubW0vc3dhcGZpbGUuYy0zMTU0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjM6MDM6NDYuNTM2NTk1MTI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0MDQxOTQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpbnV4IFN3YXBvZmYgU3lzdGVtIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYFNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCAuLi4pYCBtYWNyby4gUmlnaHQsIHRoYXQgZ2VuZXJhdGVzIHRoZSBgc3lzX3N3YXBvZmZgIGZ1bmN0aW9uIChvciBwb3RlbnRpYWxseSBgX194NjRfc3lzX3N3YXBvZmZgIG9uIHg4Nl82NCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUpLiBUaGF0IGBzeXNfc3dhcG9mZmAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCBoZXJlLiBJJ2xsIHByb3ZpZGUgdGhhdCBhcyB0aGUgZm9jdXMgc3ltYm9sLCB0aGF0IG1ha2VzIHRoZSBtb3N0IHNlbnNlLlxuXG5Ob3csIEkgd2FzIGluaXRpYWxseSBjb25zaWRlcmluZyBgdHJ5X3RvX3VudXNlYCwgYnV0IHRoYXQncyBzdGF0aWMuIEhtbSwgcHJvdmlkaW5nIGEgc3RhdGljIGZ1bmN0aW9uIGFzIHRoZSBmb2N1cyBzeW1ib2wgaXMgZ2VuZXJhbGx5IGEgYmFkIGlkZWEuIFRoZXkgY2FuIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBtZWFuaW5nIG5vIGRpc3RpbmN0IHN5bWJvbCwgb3IgbWlnaHQgbm90IGV2ZW4gYmUgZXhwb3J0ZWQuIEFsdGhvdWdoLCBgdHJ5X3RvX3VudXNlYCBpcyBhIHByZXR0eSBsYXJnZSBmdW5jdGlvbi4gTWF5YmUgaXQgaXNuJ3QgaW5saW5lZD8gUHJvYmFibHkgYmVzdCB0byBqdXN0IHN0aWNrIHdpdGggdGhlIGNhbm9uaWNhbCBlbnRyeSBwb2ludCwgYHN5c19zd2Fwb2ZmYC4gSXQncyBkZWZpbml0ZWx5IHRoZSBiZXR0ZXIgY2hvaWNlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGVudHJ5IHBvaW50cyB0aGF0IHdvdWxkIGFsc28gYmUgaW50ZXJlc3RpbmcgdG8gY29uc2lkZXI/IElzIGBmaW5kX25leHRfdG9fdW51c2VgIGNhbGxlZCBmcm9tIGFueXdoZXJlIG91dHNpZGUgdGhlIGZ1bmN0aW9uP1xuXG5cbiIsIklucHV0VG9rZW5zIjo2MTA0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjUwLjk3NzAxNzA2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3MDAyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmluZF9uZXh0X3RvX3VudXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0yNzMzPXN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNzYwLSAqL1xcbm1tL3N3YXBmaWxlLmM6Mjc2MTpzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy0yNzYyLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBwcmV2KVxcbi0tXFxubW0vc3dhcGZpbGUuYz0yODA3PXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yODYwLVxcdCAgICAgICAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zd2FwZmlsZS5jOjI4NjE6XFx0ICAgICAgIChpID0gZmluZF9uZXh0X3RvX3VudXNlKHNpLCBpKSkgIT0gMCkge1xcbm1tL3N3YXBmaWxlLmMtMjg2Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMjM6MDM6NTEuMDIzNzIzNDMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTUwMTE4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFN3YXBvZmYgUGF0aCoqXG5cbk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIHBvaW50cyBjbGVhcmx5LiBUaGUgY2hhbmdlLCB0aGUgKm9ubHkqIGNoYW5nZSwgdGhhdCdzIGludGVyZXN0aW5nIGhlcmUgc3RlbXMgZGlyZWN0bHkgZnJvbSBgdHJ5X3RvX3VudXNlYC4gVGh1cywgbXkgZm9jdXMgbXVzdCBiZSBzaGFycGx5IG9uIHRoZSBzeXN0ZW0gY2FsbCBgc3lzX3N3YXBvZmZgLiBJdCdzIHRoZSBzb2xlIGVudHJ5IHBvaW50LlxuXG5JIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBmdXp6aW5nLiBEZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc6IHRydWVgLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IGBmaW5kX25leHRfdG9fdW51c2VgIGJlaGF2ZXM7IHNwZWNpZmljYWxseSwgaXQgc2tpcHMgZW1wdHkgc3dhcCBjbHVzdGVycy4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uIHdpdGhpbiB0aGUgYHN3YXBvZmZgIGV4ZWN1dGlvbiBwYXRoLiBBbmQsIGNyaXRpY2FsbHksIHRoZSBjb2RlIGFmZmVjdGVkICppcyogcmVhY2hhYmxlIHZpYSB0aGUgYHN5c19zd2Fwb2ZmYCBzeXN0ZW0gY2FsbC5cblxuVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgW1wic3lzX3N3YXBvZmZcIl1gLlxuXG5MYXN0bHksIHRoZSBmdXp6aW5nIG5lZWRzIHRvIGJlIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZDogYEVuYWJsZUNvbmZpZ3M6IFtcIlNXQVBcIl1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzYzLCJPdXRwdXRUb2tlbnMiOjkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDIzOjAzOjU1LjA3ODczODI0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3Nzk5NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX3N3YXBvZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzIGVudGlyZWx5LCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzd2Fwb2ZmIHBhdGguIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3lzX3N3YXBvZmZgIHN5c3RlbSBjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMgZW50aXJlbHksIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXBvZmYgcGF0aC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzeXNfc3dhcG9mZmAgc3lzdGVtIGNhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[1] Phase: Succeeded StartedAt: 2026-08-06 23:04:06 +0000 UTC FinishedAt: 2026-08-06 23:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 23:04:06 +0000 UTC FinishedAt: 2026-08-06 23:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2] Phase: Succeeded StartedAt: 2026-08-06 23:04:06 +0000 UTC FinishedAt: 2026-08-07 02:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 23:04:06 +0000 UTC FinishedAt: 2026-08-07 02:51:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 23:04:06 +0000 UTC FinishedAt: 2026-08-06 23:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 23:04:06 +0000 UTC FinishedAt: 2026-08-06 23:04:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowl2ssc/series-workflowl2ssc-convert-artifact-2356841110/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 23:04:26 +0000 UTC FinishedAt: 2026-08-06 23:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 23:04:26 +0000 UTC FinishedAt: 2026-08-06 23:24:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4f676032-8318-48bf-bc4d-ea376ee5f263,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-workflowl2ssc/series-workflowl2ssc-convert-artifact-2356841110/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": "1554ba87-d6a6-4811-9f99-8be054d88e5a", "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-workflowl2ssc/series-workflowl2ssc-build-action-3042294316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 23:04:26 +0000 UTC FinishedAt: 2026-08-06 23:24:43 +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:*4f676032-8318-48bf-bc4d-ea376ee5f263,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-workflowl2ssc/series-workflowl2ssc-convert-artifact-2356841110/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": "1554ba87-d6a6-4811-9f99-8be054d88e5a", "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-workflowl2ssc/series-workflowl2ssc-build-action-3042294316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 23:24:53 +0000 UTC FinishedAt: 2026-08-06 23:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 23:24:53 +0000 UTC FinishedAt: 2026-08-06 23:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 23:24:53 +0000 UTC FinishedAt: 2026-08-06 23:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 23:24:53 +0000 UTC FinishedAt: 2026-08-06 23:24:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowl2ssc/series-workflowl2ssc-convert-artifact-2376046889/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 23:25:03 +0000 UTC FinishedAt: 2026-08-06 23:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 23:25:03 +0000 UTC FinishedAt: 2026-08-06 23:26:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1554ba87-d6a6-4811-9f99-8be054d88e5a,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-workflowl2ssc/series-workflowl2ssc-build-action-3042294316/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-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 23:27:08 +0000 UTC FinishedAt: 2026-08-06 23:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 23:27:08 +0000 UTC FinishedAt: 2026-08-06 23:27:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 23:27:08 +0000 UTC FinishedAt: 2026-08-06 23:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 23:27:08 +0000 UTC FinishedAt: 2026-08-06 23:43:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4f676032-8318-48bf-bc4d-ea376ee5f263,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-workflowl2ssc/series-workflowl2ssc-convert-artifact-2376046889/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": "d3bd339a-25ad-4cea-8cfd-97e6f0a5c78a", "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-workflowl2ssc/series-workflowl2ssc-build-action-4232502789/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 23:27:08 +0000 UTC FinishedAt: 2026-08-06 23:43:06 +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:*4f676032-8318-48bf-bc4d-ea376ee5f263,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-workflowl2ssc/series-workflowl2ssc-convert-artifact-2376046889/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": "d3bd339a-25ad-4cea-8cfd-97e6f0a5c78a", "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-workflowl2ssc/series-workflowl2ssc-build-action-4232502789/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 23:43:16 +0000 UTC FinishedAt: 2026-08-06 23:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 23:43:16 +0000 UTC FinishedAt: 2026-08-06 23:43:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 23:43:16 +0000 UTC FinishedAt: 2026-08-06 23:45:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 23:43:16 +0000 UTC FinishedAt: 2026-08-06 23:45:10 +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:*d3bd339a-25ad-4cea-8cfd-97e6f0a5c78a,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-workflowl2ssc/series-workflowl2ssc-build-action-4232502789/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-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 23:45:20 +0000 UTC FinishedAt: 2026-08-07 02:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 23:45:20 +0000 UTC FinishedAt: 2026-08-07 02:51:53 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},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:*1554ba87-d6a6-4811-9f99-8be054d88e5a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d3bd339a-25ad-4cea-8cfd-97e6f0a5c78a,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-workflowl2ssc/series-workflowl2ssc-build-action-3042294316/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-workflowl2ssc/series-workflowl2ssc-build-action-4232502789/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 23:45:20 +0000 UTC FinishedAt: 2026-08-06 23:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 23:45:20 +0000 UTC FinishedAt: 2026-08-06 23:45:24 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},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-workflowl2ssc/series-workflowl2ssc-convert-artifact-4241803134/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 23:45:20 +0000 UTC FinishedAt: 2026-08-06 23:45:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 23:45:20 +0000 UTC FinishedAt: 2026-08-06 23:45:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 23:45:20 +0000 UTC FinishedAt: 2026-08-06 23:45:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 23:45:30 +0000 UTC FinishedAt: 2026-08-07 02:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl2ssc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1fb556c523f6c18b43b1f52fb366f61c9963ce06","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"e0c7c794-db19-40e1-ab25-4bbd43cd9e84","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 23:45:30 +0000 UTC FinishedAt: 2026-08-07 02:51:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1554ba87-d6a6-4811-9f99-8be054d88e5a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d3bd339a-25ad-4cea-8cfd-97e6f0a5c78a,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-workflowl2ssc/series-workflowl2ssc-build-action-3042294316/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-workflowl2ssc/series-workflowl2ssc-build-action-4232502789/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-workflowl2ssc/series-workflowl2ssc-convert-artifact-4241803134/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,}