Name: series-workflowpp6jf Phase: Succeeded StartedAt: 2026-07-26 04:53:36 +0000 UTC FinishedAt: 2026-07-26 09:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[0] Phase: Succeeded StartedAt: 2026-07-26 04:53:36 +0000 UTC FinishedAt: 2026-07-26 05:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 04:53:36 +0000 UTC FinishedAt: 2026-07-26 05:14:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3dab139d4795f688e4f243e40c7474df00d329d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3dab139d4795f688e4f243e40c7474df00d329d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_ext_map_blocks", "ext4_es_cache_extent", "ext4_map_query_blocks" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZXNfY2FjaGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2V4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjM3MGMzNzk4ZGRlYzdhZjIxNDQyZTM5OTkxYmUyMzA5OGMyNjYyZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA1OjEzOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcbmluZGV4IDkxYzk3YWY2NGIzMTc3Li44NWUyMTM3NjFhMThkNSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHMuY1xuQEAgLTUzNywxMiAmIzQzOzUzNywxMiBAQCBzdGF0aWMgdm9pZCBleHQ0X2NhY2hlX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0aWYgKHByZXYgXHUwMDI2XHUwMDI2IChwcmV2ICE9IGxibGspKVxuIFx0XHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsXG4tXHRcdFx0XHRcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFLCBmYWxzZSk7XG4gXG4gXHRcdGlmIChleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpKVxuIFx0XHRcdHN0YXR1cyA9IEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOO1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbGJsaywgbGVuLFxuLVx0XHRcdFx0ICAgICBleHQ0X2V4dF9wYmxvY2soZXgpLCBzdGF0dXMpO1xuJiM0MztcdFx0XHRcdCAgICAgZXh0NF9leHRfcGJsb2NrKGV4KSwgc3RhdHVzLCBmYWxzZSk7XG4gXHRcdHByZXYgPSBsYmxrICYjNDM7IGxlbjtcbiBcdH1cbiB9XG5AQCAtNDIzOSw3ICYjNDM7NDIzOSw4IEBAIHN0YXRpYyBleHQ0X2xibGtfdCBleHQ0X2V4dF9kZXRlcm1pbmVfaW5zZXJ0X2hvbGUoc3RydWN0IGlub2RlICppbm9kZSxcbiBpbnNlcnRfaG9sZTpcbiBcdC8qIFB1dCBqdXN0IGZvdW5kIGdhcCBpbnRvIGNhY2hlIHRvIHNwZWVkIHVwIHN1YnNlcXVlbnQgcmVxdWVzdHMgKi9cbiBcdGV4dF9kZWJ1Zyhpbm9kZSwgXCYjMzQ7IC1cdTAwM2UgJXU6JXVcXG5cJiMzNDssIGhvbGVfc3RhcnQsIGxlbik7XG4tXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFKTtcbiYjNDM7XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFLFxuJiM0MztcdFx0XHQgICAgIGZhbHNlKTtcbiBcbiBcdC8qIFVwZGF0ZSBob2xlX2xlbiB0byByZWZsZWN0IGhvbGUgc2l6ZSBhZnRlciBsYmxrICovXG4gXHRpZiAoaG9sZV9zdGFydCAhPSBsYmxrKVxuQEAgLTQzMTAsMTMgJiM0Mzs0MzExLDE1IEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGV4dDRfbGJsa190IGVlX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spO1xuIFx0XHRleHQ0X2ZzYmxrX3QgZWVfc3RhcnQgPSBleHQ0X2V4dF9wYmxvY2soZXgpO1xuIFx0XHR1bnNpZ25lZCBzaG9ydCBlZV9sZW47XG4tXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgc3RhdHVzO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiB1bndyaXR0ZW4gZXh0ZW50cyBhcmUgdHJlYXRlZCBhcyBob2xlcywgZXhjZXB0IHRoYXRcbiBcdFx0ICogd2Ugc3BsaXQgb3V0IGluaXRpYWxpemVkIHBvcnRpb25zIGR1cmluZyBhIHdyaXRlLlxuIFx0XHQgKi9cbiBcdFx0ZWVfbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpO1xuJiM0MztcdFx0c3RhdHVzID0gZXh0NF9leHRfaXNfdW53cml0dGVuKGV4KSA/XG4mIzQzO1x0XHRcdCBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjtcbiBcbiBcdFx0dHJhY2VfZXh0NF9leHRfc2hvd19leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9zdGFydCwgZWVfbGVuKTtcbiBcbkBAIC00MzI4LDYgJiM0Mzs0MzMxLDEyIEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0X2RlYnVnKGlub2RlLCBcJiMzNDsldSBmaXQgaW50byAldTolZCAtXHUwMDNlICVsbHVcXG5cJiMzNDssXG4gXHRcdFx0XHQgIG1hcC1cdTAwM2VtX2xibGssIGVlX2Jsb2NrLCBlZV9sZW4sIG5ld2Jsb2NrKTtcbiBcbiYjNDM7XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IChFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFIHxcbiYjNDM7XHRcdFx0XHQgICAgICAgRVhUNF9FWF9OT0NBQ0hFKSkpXG4mIzQzO1x0XHRcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZWVfc3RhcnQsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICB0cnVlKTtcbiYjNDM7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgZXh0ZW50IGlzIGluaXRpYWxpemVkIGNoZWNrIHdoZXRoZXIgdGhlXG4gXHRcdFx0ICogY2FsbGVyIHdhbnRzIHRvIGNvbnZlcnQgaXQgdG8gdW53cml0dGVuLlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY1xuaW5kZXggNmU0YTE5MWU4MjE5MTUuLjVhMDM4NzhiMDYxNjAyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmNcbkBAIC0xMDIzLDcgJiM0MzsxMDIzLDcgQEAgdm9pZCBleHQ0X2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbiAgKi9cbiB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4gXHRcdFx0ICBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxuLVx0XHRcdCAgdW5zaWduZWQgaW50IHN0YXR1cylcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBpbnQgc3RhdHVzLCBib29sIHByZV9zZWFyY2gpXG4ge1xuIFx0c3RydWN0IGV4dGVudF9zdGF0dXMgKmVzO1xuIFx0c3RydWN0IGV4dGVudF9zdGF0dXMgY2hrZXMsIG5ld2VzO1xuQEAgLTEwNDMsNiAmIzQzOzEwNDMsMjEgQEAgdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFxuIFx0QlVHX09OKGVuZCBcdTAwM2MgbGJsayk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBdm9pZCB0YWtpbmcgaV9lc19sb2NrIGZvciB3cml0aW5nIGlmIHRoZSBlbnRpcmUgZXh0ZW50IGlzIGFscmVhZHlcbiYjNDM7XHQgKiBjYWNoZWQuIFRoZSB3cml0ZS1sb2NrZWQgc2VhcmNoIGJlbG93IHJlY2hlY2tzIGFmdGVyIGEgbWlzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJlX3NlYXJjaCkge1xuJiM0MztcdFx0cmVhZF9sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbiYjNDM7XHRcdGVzID0gX19lc190cmVlX3NlYXJjaChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXNfdHJlZS5yb290LCBsYmxrKTtcbiYjNDM7XHRcdGlmIChlcyBcdTAwMjZcdTAwMjYgZXMtXHUwMDNlZXNfbGJsayBcdTAwM2M9IGxibGsgXHUwMDI2XHUwMDI2IGV4dDRfZXNfZW5kKGVzKSBcdTAwM2U9IGVuZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhX19lc19jaGVja19leHRlbnRfc3RhdHVzKGVzLCBzdGF0dXMsIE5VTEwpKSB7XG4mIzQzO1x0XHRcdHJlYWRfdW5sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmVhZF91bmxvY2soXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VzX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR3cml0ZV9sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbiBcdGVzID0gX19lc190cmVlX3NlYXJjaChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXNfdHJlZS5yb290LCBsYmxrKTtcbiBcdGlmIChlcyBcdTAwMjZcdTAwMjYgZXMtXHUwMDNlZXNfbGJsayBcdTAwM2M9IGVuZCkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaCBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaFxuaW5kZXggZjMzOTZjZjMyYjQ0NjQuLmMyZGE3MmUzYzgyYmE3IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhcbkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIGV4dGVybiB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFx0XHRcdFx0ICBib29sIGRlbGFsbG9jX3Jlc2VydmVfdXNlZCk7XG4gZXh0ZXJuIHZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbiBcdFx0XHRcdCBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGludCBzdGF0dXMpO1xuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgc3RhdHVzLCBib29sIHByZV9zZWFyY2gpO1xuIGV4dGVybiB2b2lkIGV4dDRfZXNfcmVtb3ZlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFx0XHRcdFx0ICBleHQ0X2xibGtfdCBsZW4pO1xuIGV4dGVybiB2b2lkIGV4dDRfZXNfZmluZF9leHRlbnRfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi5kNDMyNjZjNDg5Nzg1OCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNTIzLDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSxcbiBcbiBcdGlmIChyZXR2YWwgXHUwMDNjPSAwKSB7XG4gXHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXHUwMDNlbV9sYmxrLCBtYXAtXHUwMDNlbV9sZW4sXG4tXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cyk7XG4mIzQzO1x0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMsIHRydWUpO1xuIFx0XHRyZXR1cm4gbWFwLVx1MDAzZW1fbGVuO1xuIFx0fVxuIFxuQEAgLTU0NiwxMSAmIzQzOzU0NiwxMSBAQCBzdGF0aWMgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRzdGF0dXMgPT0gc3RhdHVzMikge1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsayxcbiBcdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fbGVuICYjNDM7IG1hcDIubV9sZW4sIG1hcC1cdTAwM2VtX3BibGssXG4tXHRcdFx0XHQgICAgIHN0YXR1cyk7XG4mIzQzO1x0XHRcdFx0ICAgICBzdGF0dXMsIHRydWUpO1xuIFx0XHRtYXAtXHUwMDNlbV9sZW4gJiM0Mzs9IG1hcDIubV9sZW47XG4gXHR9IGVsc2Uge1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLFxuLVx0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xuJiM0MztcdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcbiBcdH1cbiBcbiBcdHJldHVybiBtYXAtXHUwMDNlbV9sZW47XG5AQCAtNTYyLDYgJiM0Mzs1NjIsMTMgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0dW5zaWduZWQgaW50IHN0YXR1cztcbiBcdGludCByZXR2YWw7XG4gXHR1bnNpZ25lZCBpbnQgb3JpZ19tbGVuID0gbWFwLVx1MDAzZW1fbGVuO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpIG1heSBoYXZlIGFscmVhZHkgY2FjaGVkIHRoZSBmdWxsIGV4dGVudCwgc29cbiYjNDM7XHQgKiBzZWFyY2ggZmlyc3QgdG8gYXZvaWQgdGFraW5nIGlfZXNfbG9jayBmb3Igd3JpdGluZy4gVGhlIGluZGlyZWN0XG4mIzQzO1x0ICogcGF0aCBkb2VzIG5vdCBwcmVwb3B1bGF0ZSB0aGUgRVMgdHJlZSBhZnRlciB0aGUgaW5pdGlhbCBsb29rdXAgbWlzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHByZV9zZWFyY2ggPSBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEVYVDRfSU5PREVfRVhURU5UUyk7XG4gXG4gXHRmbGFncyBcdTAwMjY9IEVYVDRfRVhfUVVFUllfRklMVEVSO1xuIFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKVxuQEAgLTU5Myw3ICYjNDM7NjAwLDcgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdGF0dXMgPSBtYXAtXHUwMDNlbV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfVU5XUklUVEVOID9cbiBcdFx0XHRcdEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOIDogRVhURU5UX1NUQVRVU19XUklUVEVOO1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLFxuLVx0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xuJiM0MztcdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzLCBwcmVfc2VhcmNoKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlLCBpbm9kZSwgbWFwLFxuIFx0XHRcdFx0XHRcdFx0ICAgIG9yaWdfbWxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZXNfY2FjaGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2V4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjM3MGMzNzk4ZGRlYzdhZjIxNDQyZTM5OTkxYmUyMzA5OGMyNjYyZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDA1OjEzOjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCA5MWM5N2FmNjRiMzE3Ny4uODVlMjEzNzYxYTE4ZDUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC01MzcsMTIgJiM0Mzs1MzcsMTIgQEAgc3RhdGljIHZvaWQgZXh0NF9jYWNoZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJaWYgKHByZXYgJmFtcDsmYW1wOyAocHJldiAhPSBsYmxrKSkKIAkJCWV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsCi0JCQkJCSAgICAgRVhURU5UX1NUQVRVU19IT0xFKTsKJiM0MzsJCQkJCSAgICAgRVhURU5UX1NUQVRVU19IT0xFLCBmYWxzZSk7CiAKIAkJaWYgKGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkpCiAJCQlzdGF0dXMgPSBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTjsKIAkJZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGxibGssIGxlbiwKLQkJCQkgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cyk7CiYjNDM7CQkJCSAgICAgZXh0NF9leHRfcGJsb2NrKGV4KSwgc3RhdHVzLCBmYWxzZSk7CiAJCXByZXYgPSBsYmxrICYjNDM7IGxlbjsKIAl9CiB9CkBAIC00MjM5LDcgJiM0Mzs0MjM5LDggQEAgc3RhdGljIGV4dDRfbGJsa190IGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogaW5zZXJ0X2hvbGU6CiAJLyogUHV0IGp1c3QgZm91bmQgZ2FwIGludG8gY2FjaGUgdG8gc3BlZWQgdXAgc3Vic2VxdWVudCByZXF1ZXN0cyAqLwogCWV4dF9kZWJ1Zyhpbm9kZSwgJiMzNDsgLSZndDsgJXU6JXVcbiYjMzQ7LCBob2xlX3N0YXJ0LCBsZW4pOwotCWV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBob2xlX3N0YXJ0LCBsZW4sIH4wLCBFWFRFTlRfU1RBVFVTX0hPTEUpOwomIzQzOwlleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFLAomIzQzOwkJCSAgICAgZmFsc2UpOwogCiAJLyogVXBkYXRlIGhvbGVfbGVuIHRvIHJlZmxlY3QgaG9sZSBzaXplIGFmdGVyIGxibGsgKi8KIAlpZiAoaG9sZV9zdGFydCAhPSBsYmxrKQpAQCAtNDMxMCwxMyAmIzQzOzQzMTEsMTUgQEAgaW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJZXh0NF9sYmxrX3QgZWVfYmxvY2sgPSBsZTMyX3RvX2NwdShleC0mZ3Q7ZWVfYmxvY2spOwogCQlleHQ0X2ZzYmxrX3QgZWVfc3RhcnQgPSBleHQ0X2V4dF9wYmxvY2soZXgpOwogCQl1bnNpZ25lZCBzaG9ydCBlZV9sZW47Ci0KJiM0MzsJCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKIAkJLyoKIAkJICogdW53cml0dGVuIGV4dGVudHMgYXJlIHRyZWF0ZWQgYXMgaG9sZXMsIGV4Y2VwdCB0aGF0CiAJCSAqIHdlIHNwbGl0IG91dCBpbml0aWFsaXplZCBwb3J0aW9ucyBkdXJpbmcgYSB3cml0ZS4KIAkJICovCiAJCWVlX2xlbiA9IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTsKJiM0MzsJCXN0YXR1cyA9IGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkgPwomIzQzOwkJCSBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjsKIAogCQl0cmFjZV9leHQ0X2V4dF9zaG93X2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIGVlX3N0YXJ0LCBlZV9sZW4pOwogCkBAIC00MzI4LDYgJiM0Mzs0MzMxLDEyIEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHRfZGVidWcoaW5vZGUsICYjMzQ7JXUgZml0IGludG8gJXU6JWQgLSZndDsgJWxsdVxuJiMzNDssCiAJCQkJICBtYXAtJmd0O21fbGJsaywgZWVfYmxvY2ssIGVlX2xlbiwgbmV3YmxvY2spOwogCiYjNDM7CQkJaWYgKCEoZmxhZ3MgJmFtcDsgKEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgfAomIzQzOwkJCQkgICAgICAgRVhUNF9FWF9OT0NBQ0hFKSkpCiYjNDM7CQkJCWV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBlZV9ibG9jaywgZWVfbGVuLAomIzQzOwkJCQkJCSAgICAgZWVfc3RhcnQsIHN0YXR1cywKJiM0MzsJCQkJCQkgICAgIHRydWUpOwomIzQzOwogCQkJLyoKIAkJCSAqIElmIHRoZSBleHRlbnQgaXMgaW5pdGlhbGl6ZWQgY2hlY2sgd2hldGhlciB0aGUKIAkJCSAqIGNhbGxlciB3YW50cyB0byBjb252ZXJ0IGl0IHRvIHVud3JpdHRlbi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYwppbmRleCA2ZTRhMTkxZTgyMTkxNS4uNWEwMzg3OGIwNjE2MDIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMKQEAgLTEwMjMsNyAmIzQzOzEwMjMsNyBAQCB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLAogICovCiB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssCiAJCQkgIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssCi0JCQkgIHVuc2lnbmVkIGludCBzdGF0dXMpCiYjNDM7CQkJICB1bnNpZ25lZCBpbnQgc3RhdHVzLCBib29sIHByZV9zZWFyY2gpCiB7CiAJc3RydWN0IGV4dGVudF9zdGF0dXMgKmVzOwogCXN0cnVjdCBleHRlbnRfc3RhdHVzIGNoa2VzLCBuZXdlczsKQEAgLTEwNDMsNiAmIzQzOzEwNDMsMjEgQEAgdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLAogCiAJQlVHX09OKGVuZCAmbHQ7IGxibGspOwogCiYjNDM7CS8qCiYjNDM7CSAqIEF2b2lkIHRha2luZyBpX2VzX2xvY2sgZm9yIHdyaXRpbmcgaWYgdGhlIGVudGlyZSBleHRlbnQgaXMgYWxyZWFkeQomIzQzOwkgKiBjYWNoZWQuIFRoZSB3cml0ZS1sb2NrZWQgc2VhcmNoIGJlbG93IHJlY2hlY2tzIGFmdGVyIGEgbWlzcy4KJiM0MzsJICovCiYjNDM7CWlmIChwcmVfc2VhcmNoKSB7CiYjNDM7CQlyZWFkX2xvY2soJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX2VzX2xvY2spOwomIzQzOwkJZXMgPSBfX2VzX3RyZWVfc2VhcmNoKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9lc190cmVlLnJvb3QsIGxibGspOwomIzQzOwkJaWYgKGVzICZhbXA7JmFtcDsgZXMtJmd0O2VzX2xibGsgJmx0Oz0gbGJsayAmYW1wOyZhbXA7IGV4dDRfZXNfZW5kKGVzKSAmZ3Q7PSBlbmQgJmFtcDsmYW1wOwomIzQzOwkJICAgICFfX2VzX2NoZWNrX2V4dGVudF9zdGF0dXMoZXMsIHN0YXR1cywgTlVMTCkpIHsKJiM0MzsJCQlyZWFkX3VubG9jaygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZXNfbG9jayk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJcmVhZF91bmxvY2soJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX2VzX2xvY2spOwomIzQzOwl9CiYjNDM7CiAJd3JpdGVfbG9jaygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZXNfbG9jayk7CiAJZXMgPSBfX2VzX3RyZWVfc2VhcmNoKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9lc190cmVlLnJvb3QsIGxibGspOwogCWlmIChlcyAmYW1wOyZhbXA7IGVzLSZndDtlc19sYmxrICZsdDs9IGVuZCkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oIGIvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oCmluZGV4IGYzMzk2Y2YzMmI0NDY0Li5jMmRhNzJlM2M4MmJhNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaApAQCAtMTM5LDcgJiM0MzsxMzksNyBAQCBleHRlcm4gdm9pZCBleHQ0X2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywKIAkJCQkgIGJvb2wgZGVsYWxsb2NfcmVzZXJ2ZV91c2VkKTsKIGV4dGVybiB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssCiAJCQkJIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssCi0JCQkJIHVuc2lnbmVkIGludCBzdGF0dXMpOwomIzQzOwkJCQkgdW5zaWduZWQgaW50IHN0YXR1cywgYm9vbCBwcmVfc2VhcmNoKTsKIGV4dGVybiB2b2lkIGV4dDRfZXNfcmVtb3ZlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLAogCQkJCSAgZXh0NF9sYmxrX3QgbGVuKTsKIGV4dGVybiB2b2lkIGV4dDRfZXNfZmluZF9leHRlbnRfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uZDQzMjY2YzQ4OTc4NTggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTUyMyw3ICYjNDM7NTIzLDcgQEAgc3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsCiAKIAlpZiAocmV0dmFsICZsdDs9IDApIHsKIAkJZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC0mZ3Q7bV9sYmxrLCBtYXAtJmd0O21fbGVuLAotCQkJCSAgICAgbWFwLSZndDttX3BibGssIHN0YXR1cyk7CiYjNDM7CQkJCSAgICAgbWFwLSZndDttX3BibGssIHN0YXR1cywgdHJ1ZSk7CiAJCXJldHVybiBtYXAtJmd0O21fbGVuOwogCX0KIApAQCAtNTQ2LDExICYjNDM7NTQ2LDExIEBAIHN0YXRpYyBpbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZihoYW5kbGVfdCAqaGFuZGxlLAogCQkJc3RhdHVzID09IHN0YXR1czIpIHsKIAkJZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC0mZ3Q7bV9sYmxrLAogCQkJCSAgICAgbWFwLSZndDttX2xlbiAmIzQzOyBtYXAyLm1fbGVuLCBtYXAtJmd0O21fcGJsaywKLQkJCQkgICAgIHN0YXR1cyk7CiYjNDM7CQkJCSAgICAgc3RhdHVzLCB0cnVlKTsKIAkJbWFwLSZndDttX2xlbiAmIzQzOz0gbWFwMi5tX2xlbjsKIAl9IGVsc2UgewogCQlleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLSZndDttX2xibGssIG1hcC0mZ3Q7bV9sZW4sCi0JCQkJICAgICBtYXAtJmd0O21fcGJsaywgc3RhdHVzKTsKJiM0MzsJCQkJICAgICBtYXAtJmd0O21fcGJsaywgc3RhdHVzLCB0cnVlKTsKIAl9CiAKIAlyZXR1cm4gbWFwLSZndDttX2xlbjsKQEAgLTU2Miw2ICYjNDM7NTYyLDEzIEBAIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCByZXR2YWw7CiAJdW5zaWduZWQgaW50IG9yaWdfbWxlbiA9IG1hcC0mZ3Q7bV9sZW47CiYjNDM7CS8qCiYjNDM7CSAqIGV4dDRfZXh0X21hcF9ibG9ja3MoKSBtYXkgaGF2ZSBhbHJlYWR5IGNhY2hlZCB0aGUgZnVsbCBleHRlbnQsIHNvCiYjNDM7CSAqIHNlYXJjaCBmaXJzdCB0byBhdm9pZCB0YWtpbmcgaV9lc19sb2NrIGZvciB3cml0aW5nLiBUaGUgaW5kaXJlY3QKJiM0MzsJICogcGF0aCBkb2VzIG5vdCBwcmVwb3B1bGF0ZSB0aGUgRVMgdHJlZSBhZnRlciB0aGUgaW5pdGlhbCBsb29rdXAgbWlzcy4KJiM0MzsJICovCiYjNDM7CWJvb2wgcHJlX3NlYXJjaCA9IGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLAomIzQzOwkJCQkJICAgICAgRVhUNF9JTk9ERV9FWFRFTlRTKTsKIAogCWZsYWdzICZhbXA7PSBFWFQ0X0VYX1FVRVJZX0ZJTFRFUjsKIAlpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpCkBAIC01OTMsNyAmIzQzOzYwMCw3IEBAIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJc3RhdHVzID0gbWFwLSZndDttX2ZsYWdzICZhbXA7IEVYVDRfTUFQX1VOV1JJVFRFTiA/CiAJCQkJRVhURU5UX1NUQVRVU19VTldSSVRURU4gOiBFWFRFTlRfU1RBVFVTX1dSSVRURU47CiAJCWV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtJmd0O21fbGJsaywgbWFwLSZndDttX2xlbiwKLQkJCQkgICAgIG1hcC0mZ3Q7bV9wYmxrLCBzdGF0dXMpOwomIzQzOwkJCQkgICAgIG1hcC0mZ3Q7bV9wYmxrLCBzdGF0dXMsIHByZV9zZWFyY2gpOwogCX0gZWxzZSB7CiAJCXJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlLCBpbm9kZSwgbWFwLAogCQkJCQkJCSAgICBvcmlnX21sZW4pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBleHQ0IEV4dGVudCBDYWNoaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHRoYXQgbW9kaWZpZXMgYGZzL2V4dDQvZXh0ZW50cy5jYCwgYGZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY2AsIGBmcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhgLCBhbmQgYGZzL2V4dDQvaW5vZGUuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBhIGBib29sIHByZV9zZWFyY2hgIHBhcmFtZXRlciB0byB0aGUgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCBmdW5jdGlvbi4gRXNzZW50aWFsbHksIGlmIHRoaXMgYHByZV9zZWFyY2hgIGZsYWcgaXMgc2V0IHRvIHRydWUsIGl0IG1lYW5zIHRoZSBjb2RlIHdpbGwgcGVyZm9ybSBhIHJlYWQgbG9jayBhbmQgc2VhcmNoIG9mIHRoZSBleHRlbnQgYmVmb3JlIHRha2luZyB0aGUgd3JpdGUgbG9jay4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHRhcmdldGVkIG9wdGltaXphdGlvbiB0byB0aGUgZXh0ZW50IGNhY2hpbmcgc3RyYXRlZ3ksIGFpbWluZyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHdyaXRlIGxvY2sgY29udGVudGlvbiBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLgoKRGlnZ2luZyBkZWVwZXIsIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCB0byBjYWxsIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgd2l0aCBgcHJlX3NlYXJjaCA9IHRydWVgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVmaW5pdGVseSBpbXBhY3RpbmcgY29yZSBleHQ0IGxvZ2ljLiBUaGUgc3RhdGVkIGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIG9wdGltaXplIGV4dGVudCBjYWNoaW5nIGJ5IGNpcmN1bXZlbnRpbmcgdGhlIHdyaXRlIGxvY2sgaWYgdGhlIGV4dGVudCBpcyBhbHJlYWR5IGNhY2hlZC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgdG91Y2hpbmcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbS4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEZyb20gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGV4dDRfY2FjaGVfZXh0ZW50c2AsIGBleHQ0X2V4dF9kZXRlcm1pbmVfaW5zZXJ0X2hvbGVgLCBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AsIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAsIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmYCwgYW5kIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLgoKVG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBtb3N0IGVmZmljaWVudGx5LCBJIG5lZWQgdG8ga25vdyB3aGljaCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBgZXh0NF9lc19jYWNoZV9leHRlbnRgIGlzIGV4cG9ydGVkLCBhcyBpcyBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AgYW5kIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLiBIb3dldmVyLCBgZXh0NF9jYWNoZV9leHRlbnRzYCwgYGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZWAsIGFuZCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZmAgYXJlIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZGUtcHJpb3JpdGl6ZSB0aG9zZSwgYXMgaXQgd291bGQgYmUgbW9yZSBjaGFsbGVuZ2luZyB0byB0YXJnZXQgdGhlbSBkaXJlY3RseSBpbiBpc29sYXRpb24uCgpTbywgdGhlIGNsZWFyIHRhcmdldHMgZm9yIGZ1enppbmcgYmVjb21lOgoqICAgYGV4dDRfZXh0X21hcF9ibG9ja3NgCiogICBgZXh0NF9lc19jYWNoZV9leHRlbnRgCiogICBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYAoKRmluYWxseSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWFsIGtlcm5lbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgZm9yIGFueSBkZXBlbmRlbmNpZXMuIEkga25vdyBgRVhUNF9GU2AgaXMgdGhlIG1haW4gb25lLCBidXQgYSBxdWljayBgZ3JlcGAgd2lsbCBiZSB0aGUgYmVzdCB3YXkgdG8gdmVyaWZ5IHRoZXJlIGFyZSBubyBoaWRkZW4gcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gdGhlIGJhc2UgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgYEVYVDRfRlNgLiBObyBuZWVkIHRvIGNvbXBsaWNhdGUgdGhpbmdzLCB3ZSYjMzk7bGwga2VlcCBpdCBzaW1wbGUgYW5kIGp1c3QgdXNlIGBFWFQ0X0ZTYC4KCk5vdywgSSB3YW50IHRvIGlkZW50aWZ5IHNvbWUgZ29vZCBhcmVhcyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIEVYVDQgY29kZWJhc2UuIExldCYjMzk7cyBzZWUuLi4gYGV4dDRfZXh0X21hcF9ibG9ja3NgIGxvb2tzIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUuIEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgYmxvY2sgbWFwcGluZywgd2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBleGVjdXRlZCBmcmVxdWVudGx5LiBUaGF0IG1ha2VzIGl0IGEgc29saWQgdGFyZ2V0IGZvciBmdXp6ZXIgY292ZXJhZ2UsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgaXQgaGFuZGxlcyBleHRlbnRzLiBJIGhhdmUgYSBodW5jaCB0aGF0IGVkZ2UgY2FzZXMgaW4gZXh0ZW50IG1hcHBpbmcgYXJlIGEgZmVydGlsZSBncm91bmQgZm9yIGRpc2NvdmVyaW5nIHZ1bG5lcmFiaWxpdGllcy4KCmBleHQ0X2VzX2NhY2hlX2V4dGVudGAgaXMgYW5vdGhlciBpbnRlcmVzdGluZyBvbmUsIEkmIzM5O2xsIGRlZmluaXRlbHkga2VlcCBhbiBleWUgb24gdGhhdCBvbmUuCgpBbmQsIG9mIGNvdXJzZSwgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AsIGdpdmVuIGl0cyByb2xlIGluIEZJRU1BUCBhbmQgcmVsYXRlZCBxdWVyaWVzLCBoYXMgdG8gYmUgY2hlY2tlZCBhcyB3ZWxsLgoKVG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGgsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AuIElkZW50aWZ5aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBnaXZlIHVzIGNydWNpYWwgY29udGV4dCBhbmQgaGVscCBmb3JtdWxhdGUgbW9yZSB0YXJnZXRlZCBmdXp6aW5nIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHRfbWFwX2Jsb2NrcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM4NzI9ZXh0ZXJuIGludCBleHQ0X2V4dF9pbmRleF90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGV4dGVudHMpO1xuZnMvZXh0NC9leHQ0Lmg6Mzg3MzpleHRlcm4gaW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvZXh0NC5oLTM4NzQtXHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgKm1hcCwgaW50IGZsYWdzKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jPTUyND1zdGF0aWMgY29uc3Qgc3RydWN0IGt1bml0X2V4dF90ZXN0X3BhcmFtIHRlc3Rfc3BsaXRfY29udmVydF9wYXJhbXNbXSA9IHtcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTcxMi1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6NzEzOi8qIFRlc3RzIHRvIHRyaWdnZXIgZXh0NF9leHRfbWFwX2Jsb2NrcygpIC1cdTAwM2UgY29udmVydF9pbml0aWFsaXplZF9leHRlbnQoKSAqL1xuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy03MTQtc3RhdGljIGNvbnN0IHN0cnVjdCBrdW5pdF9leHRfdGVzdF9wYXJhbSB0ZXN0X2NvbnZlcnRfaW5pdGlhbGl6ZWRfcGFyYW1zW10gPSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy04MDktXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjgxMDovKiBUZXN0cyB0byB0cmlnZ2VyIGV4dDRfZXh0X21hcF9ibG9ja3MoKSAtXHUwMDNlIGV4dDRfZXh0X2hhbmRsZV91bndyaXR0ZW5fZXhudGVudHMoKSAqL1xuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy04MTEtc3RhdGljIGNvbnN0IHN0cnVjdCBrdW5pdF9leHRfdGVzdF9wYXJhbSB0ZXN0X2hhbmRsZV91bndyaXR0ZW5fcGFyYW1zW10gPSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzQwOT1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzUzNi0vKlxuZnMvZXh0NC9leHRlbnRzLmM6MzUzNzogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgaWYgc29tZW9uZSB0cmllcyB0byB3cml0ZVxuZnMvZXh0NC9leHRlbnRzLmMtMzUzOC0gKiB0byBhbiB1bndyaXR0ZW4gZXh0ZW50LiBJdCBtYXkgcmVzdWx0IGluIHNwbGl0dGluZyB0aGUgdW53cml0dGVuXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzU1Nz1leHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzc5MC0vKlxuZnMvZXh0NC9leHRlbnRzLmM6Mzc5MTogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgZnJvbVxuZnMvZXh0NC9leHRlbnRzLmMtMzc5Mi0gKiBleHQ0X2dldF9ibG9ja3NfZGlvX3dyaXRlKCkgd2hlbiBESU8gdG8gd3JpdGVcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0zOTkyPWV4dDRfZXh0X2hhbmRsZV91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQwOTAtICpcbmZzL2V4dDQvZXh0ZW50cy5jOjQwOTE6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfbWFwX2Jsb2NrcygpIGFmdGVyIHdlIGZhaWxlZCB0b1xuZnMvZXh0NC9leHRlbnRzLmMtNDA5Mi0gKiBmaW5kIGJsb2NrcyB0aGF0IHdlcmUgYWxyZWFkeSBpbiB0aGUgaW5vZGUmIzM5O3MgZXh0ZW50IHRyZWUuICBIZW5jZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MTE3LSAqIGNsdXN0ZXIgRVhUNF9CMkMoc2JpLCBtYXAtXHUwMDNlbV9sYmxrKS5cdFdlIHdpbGwgdGhlbiByZXR1cm4gMSB0b1xuZnMvZXh0NC9leHRlbnRzLmM6NDExODogKiBzaWduYWwgdG8gZXh0NF9leHRfbWFwX2Jsb2NrcygpIHRoYXQgbWFwLVx1MDAzZW1fcGJsayBzaG91bGQgYmUgdHJlYXRlZFxuZnMvZXh0NC9leHRlbnRzLmMtNDExOS0gKiBhcyBhIG5ldyBcJiMzNDthbGxvY2F0ZWRcJiMzNDsgYmxvY2sgcmVnaW9uLiAgT3RoZXJ3aXNlLCB3ZSB3aWxsIHJldHVybiAwIGFuZFxuZnMvZXh0NC9leHRlbnRzLmM6NDEyMDogKiBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgd2lsbCB0aGVuIGFsbG9jYXRlIG9uZSBvciBtb3JlIG5ldyBjbHVzdGVyc1xuZnMvZXh0NC9leHRlbnRzLmMtNDEyMS0gKiBieSBjYWxsaW5nIGV4dDRfbWJfbmV3X2Jsb2NrcygpLlxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQxOTE9c3RhdGljIGV4dDRfbGJsa190IGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQyNjktICovXG5mcy9leHQ0L2V4dGVudHMuYzo0MjcwOmludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2V4dGVudHMuYy00MjcxLVx0XHRcdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgKm1hcCwgaW50IGZsYWdzKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQyODMtXHRleHRfZGVidWcoaW5vZGUsIFwmIzM0O2Jsb2NrcyAldS8ldSByZXF1ZXN0ZWRcXG5cJiMzNDssIG1hcC1cdTAwM2VtX2xibGssIG1hcC1cdTAwM2VtX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYzo0Mjg0Olx0dHJhY2VfZXh0NF9leHRfbWFwX2Jsb2Nrc19lbnRlcihpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLCBmbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy00Mjg1LVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ1NDYtXG5mcy9leHQ0L2V4dGVudHMuYzo0NTQ3Olx0dHJhY2VfZXh0NF9leHRfbWFwX2Jsb2Nrc19leGl0KGlub2RlLCBmbGFncywgbWFwLFxuZnMvZXh0NC9leHRlbnRzLmMtNDU0OC1cdFx0XHRcdCAgICAgICBlcnIgPyBlcnIgOiBhbGxvY2F0ZWQpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ1ODM9c3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ2NTEtXHRcdFx0ZXh0NF9kZWJ1ZyhcJiMzNDtpbm9kZSAjJWxsdTogYmxvY2sgJXU6IGxlbiAldTogXCYjMzQ7XG5mcy9leHQ0L2V4dGVudHMuYzo0NjUyOlx0XHRcdFx0ICAgXCYjMzQ7ZXh0NF9leHRfbWFwX2Jsb2NrcyByZXR1cm5lZCAlZFwmIzM0OyxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ2NTMtXHRcdFx0XHQgICBpbm9kZS1cdTAwM2VpX2lubywgbWFwLm1fbGJsayxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01MDQyPWludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01MDgxLVx0XHRcdFx0ICAgICBcJiMzNDtpbm9kZSAjJWxsdTogYmxvY2sgJXU6IGxlbiAldTogXCYjMzQ7XG5mcy9leHQ0L2V4dGVudHMuYzo1MDgyOlx0XHRcdFx0ICAgICBcJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzIHJldHVybmVkICVkXCYjMzQ7LFxuZnMvZXh0NC9leHRlbnRzLmMtNTA4My1cdFx0XHRcdCAgICAgaW5vZGUtXHUwMDNlaV9pbm8sIG1hcC5tX2xibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NTc3Mj1leHQ0X3N3YXBfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01OTU0LSAqIHJldHVybnMgMC4gIENhbiBhbHNvIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2Rlcy4gIERlcml2ZWQgZnJvbVxuZnMvZXh0NC9leHRlbnRzLmM6NTk1NTogKiBleHQ0X2V4dF9tYXBfYmxvY2tzKCkuXG5mcy9leHQ0L2V4dGVudHMuYy01OTU2LSAqL1xuLS1cbmZzL2V4dDQvaW5vZGUuYz00NjI9c3RhdGljIHZvaWQgZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2soaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDc5LVx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSB7XG5mcy9leHQ0L2lub2RlLmM6NDgwOlx0XHRyZXR2YWwgPSBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG1hcCwgMCk7XG5mcy9leHQ0L2lub2RlLmMtNDgxLVx0fSBlbHNlIHtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTA0PXN0YXRpYyBpbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZihoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01MjEtXHRtYXAyLm1fZmxhZ3MgPSAwO1xuZnMvZXh0NC9pbm9kZS5jOjUyMjpcdHJldHZhbCA9IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXHUwMDI2bWFwMiwgMCk7XG5mcy9leHQ0L2lub2RlLmMtNTIzLVxuLS1cbmZzL2V4dDQvaW5vZGUuYz01NTk9aW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NjUtXHQvKlxuZnMvZXh0NC9pbm9kZS5jOjU2NjpcdCAqIGV4dDRfZXh0X21hcF9ibG9ja3MoKSBtYXkgaGF2ZSBhbHJlYWR5IGNhY2hlZCB0aGUgZnVsbCBleHRlbnQsIHNvXG5mcy9leHQ0L2lub2RlLmMtNTY3LVx0ICogc2VhcmNoIGZpcnN0IHRvIGF2b2lkIHRha2luZyBpX2VzX2xvY2sgZm9yIHdyaXRpbmcuIFRoZSBpbmRpcmVjdFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NzQtXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpXG5mcy9leHQ0L2lub2RlLmM6NTc1Olx0XHRyZXR2YWwgPSBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG1hcCwgZmxhZ3MpO1xuZnMvZXh0NC9pbm9kZS5jLTU3Ni1cdGVsc2Vcbi0tXG5mcy9leHQ0L2lub2RlLmM9NjEzPWludCBleHQ0X21hcF9jcmVhdGVfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTYzNy1cdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkge1xuZnMvZXh0NC9pbm9kZS5jOjYzODpcdFx0cmV0dmFsID0gZXh0NF9leHRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBtYXAsIGZsYWdzKTtcbmZzL2V4dDQvaW5vZGUuYy02MzktXHR9IGVsc2Uge1xuLS1cbmZzL2V4dDQvaW5vZGUuYy02OTItICpcbmZzL2V4dDQvaW5vZGUuYzo2OTM6ICogSWYgZmlsZSB0eXBlIGlzIGV4dGVudHMgYmFzZWQsIGl0IHdpbGwgY2FsbCBleHQ0X2V4dF9tYXBfYmxvY2tzKCksXG5mcy9leHQ0L2lub2RlLmMtNjk0LSAqIE90aGVyd2lzZSwgY2FsbCB3aXRoIGV4dDRfaW5kX21hcF9ibG9ja3MoKSB0byBoYW5kbGUgaW5kaXJlY3QgbWFwcGluZ1xuLS1cbmZzL2V4dDQvaW5vZGUuYz03MDg9aW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy04MTAtXHQgKiBOb3RlIHRoYXQgaWYgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWRcbmZzL2V4dDQvaW5vZGUuYzo4MTE6XHQgKiBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgcmV0dXJucyB3aXRoIGJ1ZmZlciBoZWFkIHVubWFwcGVkXG5mcy9leHQ0L2lub2RlLmMtODEyLVx0ICovXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTgxNi1cdFx0ICogd2UgY29udGludWUgYW5kIGRvIHRoZSBhY3R1YWwgd29yayBpblxuZnMvZXh0NC9pbm9kZS5jOjgxNzpcdFx0ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpXG5mcy9leHQ0L2lub2RlLmMtODE4LVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBleHQ0IEJsb2NrIE1hcHBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb2RlIGFnYWluLCBzcGVjaWZpY2FsbHkgdGhlIGJsb2NrIG1hcHBpbmcuIEl0IGxvb2tzIGxpa2UgYGV4dDRfZXh0X21hcF9ibG9ja3NgIGlzIGEgcmVhbCB3b3JraG9yc2UuIEl0JiMzOTtzIGNhbGxlZCBieSBhIHdob2xlIGJ1bmNoIG9mIGNydWNpYWwgZnVuY3Rpb25zOiBgZXh0NF9tYXBfYmxvY2tzYCwgYGV4dDRfbWFwX2NyZWF0ZV9ibG9ja3NgLCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCwgZXZlbiB0aGluZ3MgbGlrZSBgZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2tgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhhdCBzY3JlYW1zICpjb3JlKiBleHRlbnRzIEFQSSBmdW5jdGlvbiB0byBtZSwgbm8gZG91YnQgYWJvdXQgaXQuIEl0JiMzOTtzIGRlZmluaXRlbHkgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIGV4dDQgZXh0ZW50cy4KCkFuZCB0aGVuIHdlIGhhdmUgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCwgd2hpY2ggc2VlbXMgdG8gYmUgdGlnaHRseSBjb3VwbGVkIHdpdGggZXh0ZW50IGNhY2hpbmcuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIExvb2tzIGxpa2UgYW4gaW1wb3J0YW50IGZ1bmN0aW9uIGFzIHdlbGwuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLgoKSSBhbHJlYWR5IGtub3cgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgaXMgYWxzbyBhbiBBUEkgZW50cnlwb2ludCwgYnV0IEkgd2FudCB0byBkaXZlIGEgbGl0dGxlIGRlZXBlciBpbnRvIHRoYXQsIGJ1dCBmaXJzdCwgbGV0JiMzOTtzIHNlZSB3aG8gaXMgY2FsbGluZyBgZXh0NF9lc19jYWNoZV9leHRlbnRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXNfY2FjaGVfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmM9NTI0PXN0YXRpYyB2b2lkIGV4dDRfY2FjaGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUzOC1cdFx0aWYgKHByZXYgXHUwMDI2XHUwMDI2IChwcmV2ICE9IGxibGspKVxuZnMvZXh0NC9leHRlbnRzLmM6NTM5Olx0XHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsXG5mcy9leHQ0L2V4dGVudHMuYy01NDAtXHRcdFx0XHRcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFLCBmYWxzZSk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTQzLVx0XHRcdHN0YXR1cyA9IEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOO1xuZnMvZXh0NC9leHRlbnRzLmM6NTQ0Olx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbGJsaywgbGVuLFxuZnMvZXh0NC9leHRlbnRzLmMtNTQ1LVx0XHRcdFx0ICAgICBleHQ0X2V4dF9wYmxvY2soZXgpLCBzdGF0dXMsIGZhbHNlKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00MTkxPXN0YXRpYyBleHQ0X2xibGtfdCBleHQ0X2V4dF9kZXRlcm1pbmVfaW5zZXJ0X2hvbGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MjQxLVx0ZXh0X2RlYnVnKGlub2RlLCBcJiMzNDsgLVx1MDAzZSAldToldVxcblwmIzM0OywgaG9sZV9zdGFydCwgbGVuKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjQyNDI6XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFLFxuZnMvZXh0NC9leHRlbnRzLmMtNDI0My1cdFx0XHQgICAgIGZhbHNlKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00MjcwPWludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDMzNS1cdFx0XHRcdCAgICAgICBFWFQ0X0VYX05PQ0FDSEUpKSlcbmZzL2V4dDQvZXh0ZW50cy5jOjQzMzY6XHRcdFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIGVlX2xlbixcbmZzL2V4dDQvZXh0ZW50cy5jLTQzMzctXHRcdFx0XHRcdFx0ICAgICBlZV9zdGFydCwgc3RhdHVzLFxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz04NDI9c3RhdGljIGludCBfX2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0dXMgKm5ld2VzLFxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MDItICogc3RhdHVzIHRyZWUuIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIG1vZGlmeWluZyBleHRlbnRzLiBUbyBjYWNoZVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjkwMzogKiBvbi1kaXNrIGV4dGVudHMsIHVzZSBleHQ0X2VzX2NhY2hlX2V4dGVudCgpIGluc3RlYWQuXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtOTA0LSAqL1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTkwNT12b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDE0LS8qXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTAxNTogKiBleHQ0X2VzX2NhY2hlX2V4dGVudCgpIGluc2VydHMgaW5mb3JtYXRpb24gaW50byB0aGUgZXh0ZW50IHN0YXR1cyB0cmVlXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAxNi0gKiBvbmx5IGlmIHRoZXJlIGlzIG5vIGV4aXN0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb3Jcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAyMy0gKi9cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDI0OnZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDI1LVx0XHRcdCAgZXh0NF9sYmxrX3QgbGVuLCBleHQ0X2ZzYmxrX3QgcGJsayxcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTA3OS1cdF9fZXNfaW5zZXJ0X2V4dGVudChpbm9kZSwgXHUwMDI2bmV3ZXMsIE5VTEwpO1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjEwODA6XHR0cmFjZV9leHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgXHUwMDI2bmV3ZXMpO1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwODEtXHRleHQ0X2VzX3ByaW50X3RyZWUoaW5vZGUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaD0xMzY9ZXh0ZXJuIHZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oLTEzOS1cdFx0XHRcdCAgYm9vbCBkZWxhbGxvY19yZXNlcnZlX3VzZWQpO1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oOjE0MDpleHRlcm4gdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oLTE0MS1cdFx0XHRcdCBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz01MDQ9c3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyNC1cdGlmIChyZXR2YWwgXHUwMDNjPSAwKSB7XG5mcy9leHQ0L2lub2RlLmM6NTI1Olx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLFxuZnMvZXh0NC9pbm9kZS5jLTUyNi1cdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTQ2LVx0XHRcdHN0YXR1cyA9PSBzdGF0dXMyKSB7XG5mcy9leHQ0L2lub2RlLmM6NTQ3Olx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsayxcbmZzL2V4dDQvaW5vZGUuYy01NDgtXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX2xlbiAmIzQzOyBtYXAyLm1fbGVuLCBtYXAtXHUwMDNlbV9wYmxrLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NTEtXHR9IGVsc2Uge1xuZnMvZXh0NC9pbm9kZS5jOjU1MjpcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIG1hcC1cdTAwM2VtX2xlbixcbmZzL2V4dDQvaW5vZGUuYy01NTMtXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cywgdHJ1ZSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU1OT1pbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTYwMS1cdFx0XHRcdEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOIDogRVhURU5UX1NUQVRVU19XUklUVEVOO1xuZnMvZXh0NC9pbm9kZS5jOjYwMjpcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIG1hcC1cdTAwM2VtX2xlbixcbmZzL2V4dDQvaW5vZGUuYy02MDMtXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cywgcHJlX3NlYXJjaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IEV4dGVudCBDYWNoZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYHByZV9zZWFyY2hgIGJvb2xlYW4gdG8gYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgd2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIHRydWUsIGl0IHBlcmZvcm1zIGEgcmVhZCBsb2NrIGFuZCBhIHNlYXJjaCAqYmVmb3JlKiBkb2luZyBhbnl0aGluZyBlbHNlLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcG90ZW50aWFsIHBvaW50IGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBlZGdlIGNhc2VzLiBHaXZlbiB0aGF0LCBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIHN5bWJvbHM6IGBleHQ0X2V4dF9tYXBfYmxvY2tzYCwgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCwgYW5kIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLgoKTm93LCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBuZWNlc3Nhcnkgc2V0dXAuIEl0IGxvb2tzIGxpa2UgYEVYVDRfRlNgIGlzIHRoZSBtYWluIHRoaW5nIEkgbmVlZC4gQWxyaWdodCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIE5vIHNwZWNpYWwgZXh0ZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gRXh0ZW50cyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGhpbiBFeHQ0LCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCBmdW5jdGlvbiBpbiBgZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jYCB0byBiZSBzdXJlLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9lc19jYWNoZV9leHRlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTg0Mj1zdGF0aWMgaW50IF9fZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3N0YXR1cyAqbmV3ZXMsXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTkwMi0gKiBzdGF0dXMgdHJlZS4gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgbW9kaWZ5aW5nIGV4dGVudHMuIFRvIGNhY2hlXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6OTAzOiAqIG9uLWRpc2sgZXh0ZW50cywgdXNlIGV4dDRfZXNfY2FjaGVfZXh0ZW50KCkgaW5zdGVhZC5cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MDQtICovXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9OTA1PXZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMTQtLypcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDE1OiAqIGV4dDRfZXNfY2FjaGVfZXh0ZW50KCkgaW5zZXJ0cyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBleHRlbnQgc3RhdHVzIHRyZWVcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDE2LSAqIG9ubHkgaWYgdGhlcmUgaXMgbm8gZXhpc3RpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCByYW5nZSBvclxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDIzLSAqL1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjEwMjQ6dm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMjUtXHRcdFx0ICBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDc5LVx0X19lc19pbnNlcnRfZXh0ZW50KGlub2RlLCBcdTAwMjZuZXdlcywgTlVMTCk7XG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTA4MDpcdHRyYWNlX2V4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBcdTAwMjZuZXdlcyk7XG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTA4MS1cdGV4dDRfZXNfcHJpbnRfdHJlZShpbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEV4dGVudCBDYWNoZSBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYHByZV9zZWFyY2hgIHBhcmFtZXRlciB0byBgZXh0NF9lc19jYWNoZV9leHRlbnRgLiBUaGUgZ29hbCBpcyBjbGVhcjogb3B0aW1pemUgdGhlIGV4dGVudCBjYWNoZS4gSXQmIzM5O3MgYWJvdXQgYXZvaWRpbmcgdGhlIHdyaXRlIGxvY2sgKGBpX2VzX2xvY2tgKSBvbiB0aGUgZXh0ZW50IGNhY2hlIGlmIHRoZSBleHRlbnQgaXMgKmFscmVhZHkqIGNhY2hlZC4gU21hcnQgbW92ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBtZWFuaW5nIGFueSBleHQ0IGZpbGUgb3BlcmF0aW9uIHRoYXQgZGVhbHMgd2l0aCBibG9jayBtYXBwaW5nIG9yIHF1ZXJpZXMgaXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBmdXp6IHRob3JvdWdobHkuCgpMZXQgbWUgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlOiBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AsIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgKG9mIGNvdXJzZSksIGFuZCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHByZV9zZWFyY2hgIHBhcmFtZXRlciBpbnRlcmFjdHMgd2l0aCB0aGVzZSBhbmQgd2hhdCBpdCBjaGFuZ2VzIGluIHRlcm1zIG9mIGxvY2tpbmcgYW5kIHBlcmZvcm1hbmNlLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEVYVDQsIGBFWFQ0X0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLgoKRmlyc3QsIEkgdGhpbmsgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gVGhhdCB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIHJldmlldyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9tYXBfcXVlcnlfYmxvY2tzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MjEwPXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMjQzLS8qXG5mcy9leHQ0L2V4dDQuaDoyNDQ6ICogVGhpcyBpcyBmb3IgdXNlIGluIGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcygpIGZvciBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBjYW5cbmZzL2V4dDQvZXh0NC5oLTI0NS0gKiBoYXZlIGEgcGh5c2ljYWxseSBhbmQgbG9naWNhbGx5IGNvbnRpZ3VvdXMgYmxvY2tzIHNwbGl0IGFjcm9zcyB0d28gbGVhZlxuLS1cbmZzL2V4dDQvZXh0NC5oLTI0Ny0gKiB0byBrbm93IHdoZXRoZXIgdGhlIHJldHVybmVkIGV4dGVudCBpcyBsYXN0IGluIGxlYWYuIElmIHllcywgdGhlbiBsb29rdXAgZm9yXG5mcy9leHQ0L2V4dDQuaDoyNDg6ICogbmV4dCBpbiBsZWFmIGJsb2NrIGluIGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoKS5cbmZzL2V4dDQvZXh0NC5oLTI0OS0gKiAtIFRoaXMgaXMgbmV2ZXIgZ29pbmcgdG8gYmUgYWRkZWQgdG8gYW55IGJ1ZmZlciBoZWFkIHN0YXRlLlxuLS1cbmZzL2V4dDQvZXh0NC5oPTY4ND1lbnVtIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC03NTItLypcbmZzL2V4dDQvZXh0NC5oOjc1MzogKiBleHQ0X21hcF9xdWVyeV9ibG9ja3MoKSB1c2VzIHRoaXMgZmlsdGVyIG1hc2sgdG8gZmlsdGVyIHRoZSBmbGFncyBuZWVkZWQgdG9cbmZzL2V4dDQvZXh0NC5oLTc1NC0gKiBwYXNzIHdoaWxlIGxvb2t1cC9xdWVyeWluZyBvZiBvbiBkaXNrIGV4dGVudCB0cmVlLlxuLS1cbmZzL2V4dDQvZXh0NC5oPTM4ODg9ZXh0ZXJuIGludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvZXh0NC5oLTM4ODktXHRcdFx0ICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xuZnMvZXh0NC9leHQ0Lmg6Mzg5MDpleHRlcm4gaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9leHQ0LmgtMzg5MS1cdFx0XHRcdCAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MzU4PXN0YXRpYyBpbnQgY2hlY2tfYnVmZmVyKGNoYXIgKmJ1ZiwgaW50IGMsIGludCBzaXplKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzcyLS8qXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjM3MzogKiBTaW11bGF0ZSBhIG1hcCBibG9jayBjYWxsIGJ5IGZpcnN0IGNhbGxpbmcgZXh0NF9tYXBfcXVlcnlfYmxvY2tzKCkgdG9cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzc0LSAqIGNvcnJlY3RseSBwb3B1bGF0ZSBtYXAgZmxhZ3MgYW5kIHBibGsgYW5kIHRoZW4gY2FsbCB0aGVcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jPTM3OT1zdGF0aWMgdm9pZCBleHQ0X21hcF9jcmVhdGVfYmxvY2tzX2hlbHBlcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy0zODUtXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjM4NjpcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCBmbGFncyk7XG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTM4Ny1cdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzg4LVx0XHRLVU5JVF9GQUlMKHRlc3QsXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjM4OTpcdFx0XHQgICBcJiMzNDtleHQ0X21hcF9xdWVyeV9ibG9ja3MoKSBmYWlsZWQuIENhbm5vdCBwcm9jZWVkXFxuXCYjMzQ7KTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzkwLVx0XHRyZXR1cm47XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjMxNT1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9pc3N1ZV96ZXJvb3V0KTtcbmZzL2V4dDQvZXh0ZW50cy5jOjYzMTY6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrcyk7XG5mcy9leHQ0L2V4dGVudHMuYy02MzE3LSNlbmRpZlxuLS1cbmZzL2V4dDQvaW5vZGUuYz00NjI9c3RhdGljIHZvaWQgZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2soaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTAzLVxuZnMvZXh0NC9pbm9kZS5jOjUwNDpzdGF0aWMgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL2V4dDQvaW5vZGUuYy01MDUtXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NTgtXG5mcy9leHQ0L2lub2RlLmM6NTU5OmludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvaW5vZGUuYy01NjAtXHRcdFx0ICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsIGludCBmbGFncylcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjA0LVx0fSBlbHNlIHtcbmZzL2V4dDQvaW5vZGUuYzo2MDU6XHRcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlLCBpbm9kZSwgbWFwLFxuZnMvZXh0NC9pbm9kZS5jLTYwNi1cdFx0XHRcdFx0XHRcdCAgICBvcmlnX21sZW4pO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz03MDg9aW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy03OTItXHRkb3duX3JlYWQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbmZzL2V4dDQvaW5vZGUuYzo3OTM6XHRyZXR2YWwgPSBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbWFwLCBmbGFncyk7XG5mcy9leHQ0L2lub2RlLmMtNzk0LVx0dXBfcmVhZCgoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTE5MjM9c3RhdGljIGludCBleHQ0X2RhX21hcF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0xOTc4LVx0ZWxzZVxuZnMvZXh0NC9pbm9kZS5jOjE5Nzk6XHRcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCAwKTtcbmZzL2V4dDQvaW5vZGUuYy0xOTgwLVx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pO1xuLS1cbmZzL2V4dDQvaW5vZGUuYy0yMDAxLVx0fSBlbHNlIGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG5mcy9leHQ0L2lub2RlLmM6MjAwMjpcdFx0cmV0dmFsID0gZXh0NF9tYXBfcXVlcnlfYmxvY2tzKE5VTEwsIGlub2RlLCBtYXAsIDApO1xuZnMvZXh0NC9pbm9kZS5jLTIwMDMtXHRcdGlmIChyZXR2YWwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NTEKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHBhdGhzLgoKKipGb2N1cyBBcmVhcyBpbiB0aGUgZXh0NCBCbG9jayBNYXBwaW5nIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBhbmQgd2hlcmUgSSBzaG91bGQgYmUgY29uY2VudHJhdGluZyBteSBlZmZvcnRzLiBUaGUgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBhIGtleSBzcG90LiBJdCYjMzk7cyBlc3NlbnRpYWxseSB0aGUgd29ya2hvcnNlLCBiZWluZyBjYWxsZWQgYnkgYm90aCBgZXh0NF9tYXBfYmxvY2tzYCBhbmQgYGV4dDRfZGFfbWFwX2Jsb2Nrc2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSAqdmVyeSogY29tbW9uIGFuZCBwb3RlbnRpYWxseSBjcml0aWNhbCBwYXRoIGZvciBvcHRpbWl6YXRpb24uIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgdGhhdCBhbnkgaW5lZmZpY2llbmNpZXMgaGVyZSBhcmUgYW1wbGlmaWVkIGFjcm9zcyB0aGUgYm9hcmQuCgpTaW5jZSBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCBpcyBzbyBjZW50cmFsLCBJIHNob3VsZCBhbHNvIGxvb2sgY2xvc2VseSBhdCBpdHMgY2FsbGVycy4gU28sIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCBhbmQgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgaW4tZGVwdGggYW5hbHlzaXMuIFRoZXkgZGlyZWN0bHkgZmVlZCBpbnRvIHRoZSBjb3JlIGJsb2NrIG1hcHBpbmcgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRob3NlIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLgoKQWxyaWdodCwgSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZXh0X21hcF9ibG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9lc19jYWNoZV9leHRlbnQmIzM0OywKICAgICYjMzQ7ZXh0NF9tYXBfcXVlcnlfYmxvY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGV4dGVudCBzdGF0dXMgY2FjaGluZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBhIGBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgdG8gYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC4gVGhpcyBhbGxvd3MgYXZvaWRpbmcgYSB3cml0ZSBsb2NrIGlmIHRoZSBleHRlbnQgaXMgYWxyZWFkeSBjYWNoZWQsIG9wdGltaXppbmcgYmxvY2sgbWFwcGluZyBhbmQgcXVlcnlpbmcgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZXNfY2FjaGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2V4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6MTM6NDYuOTEyMTg4MDA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3Njg3MTU3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXh0X21hcF9ibG9ja3NcIixcbiAgICBcImV4dDRfZXNfY2FjaGVfZXh0ZW50XCIsXG4gICAgXCJleHQ0X21hcF9xdWVyeV9ibG9ja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxMzo0Ni45MTIxOTQzOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODY3MTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIzNzBjMzc5OGRkZWM3YWYyMTQ0MmUzOTk5MWJlMjMwOThjMjY2MmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDU6MTM6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuY1xcbmluZGV4IDkxYzk3YWY2NGIzMTc3Li44NWUyMTM3NjFhMThkNSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuQEAgLTUzNywxMiArNTM3LDEyIEBAIHN0YXRpYyB2b2lkIGV4dDRfY2FjaGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0XFx0aWYgKHByZXYgXFx1MDAyNlxcdTAwMjYgKHByZXYgIT0gbGJsaykpXFxuIFxcdFxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBFWFRFTlRfU1RBVFVTX0hPTEUsIGZhbHNlKTtcXG4gXFxuIFxcdFxcdGlmIChleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpKVxcbiBcXHRcXHRcXHRzdGF0dXMgPSBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTjtcXG4gXFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGxibGssIGxlbixcXG4tXFx0XFx0XFx0XFx0ICAgICBleHQ0X2V4dF9wYmxvY2soZXgpLCBzdGF0dXMpO1xcbitcXHRcXHRcXHRcXHQgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cywgZmFsc2UpO1xcbiBcXHRcXHRwcmV2ID0gbGJsayArIGxlbjtcXG4gXFx0fVxcbiB9XFxuQEAgLTQyMzksNyArNDIzOSw4IEBAIHN0YXRpYyBleHQ0X2xibGtfdCBleHQ0X2V4dF9kZXRlcm1pbmVfaW5zZXJ0X2hvbGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4gaW5zZXJ0X2hvbGU6XFxuIFxcdC8qIFB1dCBqdXN0IGZvdW5kIGdhcCBpbnRvIGNhY2hlIHRvIHNwZWVkIHVwIHN1YnNlcXVlbnQgcmVxdWVzdHMgKi9cXG4gXFx0ZXh0X2RlYnVnKGlub2RlLCBcXFwiIC1cXHUwMDNlICV1OiV1XFxcXG5cXFwiLCBob2xlX3N0YXJ0LCBsZW4pO1xcbi1cXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFKTtcXG4rXFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGhvbGVfc3RhcnQsIGxlbiwgfjAsIEVYVEVOVF9TVEFUVVNfSE9MRSxcXG4rXFx0XFx0XFx0ICAgICBmYWxzZSk7XFxuIFxcbiBcXHQvKiBVcGRhdGUgaG9sZV9sZW4gdG8gcmVmbGVjdCBob2xlIHNpemUgYWZ0ZXIgbGJsayAqL1xcbiBcXHRpZiAoaG9sZV9zdGFydCAhPSBsYmxrKVxcbkBAIC00MzEwLDEzICs0MzExLDE1IEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdGV4dDRfbGJsa190IGVlX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKTtcXG4gXFx0XFx0ZXh0NF9mc2Jsa190IGVlX3N0YXJ0ID0gZXh0NF9leHRfcGJsb2NrKGV4KTtcXG4gXFx0XFx0dW5zaWduZWQgc2hvcnQgZWVfbGVuO1xcbi1cXG4rXFx0XFx0dW5zaWduZWQgaW50IHN0YXR1cztcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIHVud3JpdHRlbiBleHRlbnRzIGFyZSB0cmVhdGVkIGFzIGhvbGVzLCBleGNlcHQgdGhhdFxcbiBcXHRcXHQgKiB3ZSBzcGxpdCBvdXQgaW5pdGlhbGl6ZWQgcG9ydGlvbnMgZHVyaW5nIGEgd3JpdGUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRlZV9sZW4gPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7XFxuK1xcdFxcdHN0YXR1cyA9IGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkgP1xcbitcXHRcXHRcXHQgRVhURU5UX1NUQVRVU19VTldSSVRURU4gOiBFWFRFTlRfU1RBVFVTX1dSSVRURU47XFxuIFxcbiBcXHRcXHR0cmFjZV9leHQ0X2V4dF9zaG93X2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIGVlX3N0YXJ0LCBlZV9sZW4pO1xcbiBcXG5AQCAtNDMyOCw2ICs0MzMxLDEyIEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dF9kZWJ1Zyhpbm9kZSwgXFxcIiV1IGZpdCBpbnRvICV1OiVkIC1cXHUwMDNlICVsbHVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgbWFwLVxcdTAwM2VtX2xibGssIGVlX2Jsb2NrLCBlZV9sZW4sIG5ld2Jsb2NrKTtcXG4gXFxuK1xcdFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgKEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgfFxcbitcXHRcXHRcXHRcXHQgICAgICAgRVhUNF9FWF9OT0NBQ0hFKSkpXFxuK1xcdFxcdFxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBlZV9ibG9jaywgZWVfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVlX3N0YXJ0LCBzdGF0dXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSk7XFxuK1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBJZiB0aGUgZXh0ZW50IGlzIGluaXRpYWxpemVkIGNoZWNrIHdoZXRoZXIgdGhlXFxuIFxcdFxcdFxcdCAqIGNhbGxlciB3YW50cyB0byBjb252ZXJ0IGl0IHRvIHVud3JpdHRlbi5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jIGIvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jXFxuaW5kZXggNmU0YTE5MWU4MjE5MTUuLjVhMDM4NzhiMDYxNjAyIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY1xcbisrKyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY1xcbkBAIC0xMDIzLDcgKzEwMjMsNyBAQCB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbiAgKi9cXG4gdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbiBcXHRcXHRcXHQgIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IHN0YXR1cylcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgc3RhdHVzLCBib29sIHByZV9zZWFyY2gpXFxuIHtcXG4gXFx0c3RydWN0IGV4dGVudF9zdGF0dXMgKmVzO1xcbiBcXHRzdHJ1Y3QgZXh0ZW50X3N0YXR1cyBjaGtlcywgbmV3ZXM7XFxuQEAgLTEwNDMsNiArMTA0MywyMSBAQCB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXFxuIFxcbiBcXHRCVUdfT04oZW5kIFxcdTAwM2MgbGJsayk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBdm9pZCB0YWtpbmcgaV9lc19sb2NrIGZvciB3cml0aW5nIGlmIHRoZSBlbnRpcmUgZXh0ZW50IGlzIGFscmVhZHlcXG4rXFx0ICogY2FjaGVkLiBUaGUgd3JpdGUtbG9ja2VkIHNlYXJjaCBiZWxvdyByZWNoZWNrcyBhZnRlciBhIG1pc3MuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJlX3NlYXJjaCkge1xcbitcXHRcXHRyZWFkX2xvY2soXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXNfbG9jayk7XFxuK1xcdFxcdGVzID0gX19lc190cmVlX3NlYXJjaChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9lc190cmVlLnJvb3QsIGxibGspO1xcbitcXHRcXHRpZiAoZXMgXFx1MDAyNlxcdTAwMjYgZXMtXFx1MDAzZWVzX2xibGsgXFx1MDAzYz0gbGJsayBcXHUwMDI2XFx1MDAyNiBleHQ0X2VzX2VuZChlcykgXFx1MDAzZT0gZW5kIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhX19lc19jaGVja19leHRlbnRfc3RhdHVzKGVzLCBzdGF0dXMsIE5VTEwpKSB7XFxuK1xcdFxcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2VzX2xvY2spO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXNfbG9jayk7XFxuK1xcdH1cXG4rXFxuIFxcdHdyaXRlX2xvY2soXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXNfbG9jayk7XFxuIFxcdGVzID0gX19lc190cmVlX3NlYXJjaChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9lc190cmVlLnJvb3QsIGxibGspO1xcbiBcXHRpZiAoZXMgXFx1MDAyNlxcdTAwMjYgZXMtXFx1MDAzZWVzX2xibGsgXFx1MDAzYz0gZW5kKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaCBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaFxcbmluZGV4IGYzMzk2Y2YzMmI0NDY0Li5jMmRhNzJlM2M4MmJhNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhcXG4rKysgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhcXG5AQCAtMTM5LDcgKzEzOSw3IEBAIGV4dGVybiB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbiBcXHRcXHRcXHRcXHQgIGJvb2wgZGVsYWxsb2NfcmVzZXJ2ZV91c2VkKTtcXG4gZXh0ZXJuIHZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4gXFx0XFx0XFx0XFx0IGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXFxuLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgc3RhdHVzKTtcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzdGF0dXMsIGJvb2wgcHJlX3NlYXJjaCk7XFxuIGV4dGVybiB2b2lkIGV4dDRfZXNfcmVtb3ZlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbiBcXHRcXHRcXHRcXHQgIGV4dDRfbGJsa190IGxlbik7XFxuIGV4dGVybiB2b2lkIGV4dDRfZXNfZmluZF9leHRlbnRfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLmQ0MzI2NmM0ODk3ODU4IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC01MjMsNyArNTIzLDcgQEAgc3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2M9IDApIHtcXG4gXFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBtYXAtXFx1MDAzZW1fbGVuLFxcbi1cXHRcXHRcXHRcXHQgICAgIG1hcC1cXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xcbitcXHRcXHRcXHRcXHQgICAgIG1hcC1cXHUwMDNlbV9wYmxrLCBzdGF0dXMsIHRydWUpO1xcbiBcXHRcXHRyZXR1cm4gbWFwLVxcdTAwM2VtX2xlbjtcXG4gXFx0fVxcbiBcXG5AQCAtNTQ2LDExICs1NDYsMTEgQEAgc3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdHN0YXR1cyA9PSBzdGF0dXMyKSB7XFxuIFxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsayxcXG4gXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fbGVuICsgbWFwMi5tX2xlbiwgbWFwLVxcdTAwM2VtX3BibGssXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RhdHVzKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBzdGF0dXMsIHRydWUpO1xcbiBcXHRcXHRtYXAtXFx1MDAzZW1fbGVuICs9IG1hcDIubV9sZW47XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgbWFwLVxcdTAwM2VtX2xlbixcXG4tXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fcGJsaywgc3RhdHVzKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIG1hcC1cXHUwMDNlbV9sZW47XFxuQEAgLTU2Miw2ICs1NjIsMTMgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHR1bnNpZ25lZCBpbnQgc3RhdHVzO1xcbiBcXHRpbnQgcmV0dmFsO1xcbiBcXHR1bnNpZ25lZCBpbnQgb3JpZ19tbGVuID0gbWFwLVxcdTAwM2VtX2xlbjtcXG4rXFx0LypcXG4rXFx0ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpIG1heSBoYXZlIGFscmVhZHkgY2FjaGVkIHRoZSBmdWxsIGV4dGVudCwgc29cXG4rXFx0ICogc2VhcmNoIGZpcnN0IHRvIGF2b2lkIHRha2luZyBpX2VzX2xvY2sgZm9yIHdyaXRpbmcuIFRoZSBpbmRpcmVjdFxcbitcXHQgKiBwYXRoIGRvZXMgbm90IHByZXBvcHVsYXRlIHRoZSBFUyB0cmVlIGFmdGVyIHRoZSBpbml0aWFsIGxvb2t1cCBtaXNzLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBwcmVfc2VhcmNoID0gZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEVYVDRfSU5PREVfRVhURU5UUyk7XFxuIFxcbiBcXHRmbGFncyBcXHUwMDI2PSBFWFQ0X0VYX1FVRVJZX0ZJTFRFUjtcXG4gXFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKVxcbkBAIC01OTMsNyArNjAwLDcgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRzdGF0dXMgPSBtYXAtXFx1MDAzZW1fZmxhZ3MgXFx1MDAyNiBFWFQ0X01BUF9VTldSSVRURU4gP1xcbiBcXHRcXHRcXHRcXHRFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjtcXG4gXFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBtYXAtXFx1MDAzZW1fbGVuLFxcbi1cXHRcXHRcXHRcXHQgICAgIG1hcC1cXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xcbitcXHRcXHRcXHRcXHQgICAgIG1hcC1cXHUwMDNlbV9wYmxrLCBzdGF0dXMsIHByZV9zZWFyY2gpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZXR2YWwgPSBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZSwgaW5vZGUsIG1hcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG9yaWdfbWxlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjEzOjQ3LjgxMTkzNDM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjk4Njg5NTU5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXh0X21hcF9ibG9ja3NcIixcbiAgICBcImV4dDRfZXNfY2FjaGVfZXh0ZW50XCIsXG4gICAgXCJleHQ0X21hcF9xdWVyeV9ibG9ja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMzcwYzM3OThkZGVjN2FmMjE0NDJlMzk5OTFiZTIzMDk4YzI2NjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMDU6MTM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCA5MWM5N2FmNjRiMzE3Ny4uODVlMjEzNzYxYTE4ZDUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC01MzcsMTIgKzUzNywxMiBAQCBzdGF0aWMgdm9pZCBleHQ0X2NhY2hlX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0aWYgKHByZXYgXHUwMDI2XHUwMDI2IChwcmV2ICE9IGxibGspKVxuIFx0XHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsXG4tXHRcdFx0XHRcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFKTtcbitcdFx0XHRcdFx0ICAgICBFWFRFTlRfU1RBVFVTX0hPTEUsIGZhbHNlKTtcbiBcbiBcdFx0aWYgKGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkpXG4gXHRcdFx0c3RhdHVzID0gRVhURU5UX1NUQVRVU19VTldSSVRURU47XG4gXHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBsYmxrLCBsZW4sXG4tXHRcdFx0XHQgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cyk7XG4rXHRcdFx0XHQgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cywgZmFsc2UpO1xuIFx0XHRwcmV2ID0gbGJsayArIGxlbjtcbiBcdH1cbiB9XG5AQCAtNDIzOSw3ICs0MjM5LDggQEAgc3RhdGljIGV4dDRfbGJsa190IGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIGluc2VydF9ob2xlOlxuIFx0LyogUHV0IGp1c3QgZm91bmQgZ2FwIGludG8gY2FjaGUgdG8gc3BlZWQgdXAgc3Vic2VxdWVudCByZXF1ZXN0cyAqL1xuIFx0ZXh0X2RlYnVnKGlub2RlLCBcIiAtXHUwMDNlICV1OiV1XFxuXCIsIGhvbGVfc3RhcnQsIGxlbik7XG4tXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFKTtcbitcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBob2xlX3N0YXJ0LCBsZW4sIH4wLCBFWFRFTlRfU1RBVFVTX0hPTEUsXG4rXHRcdFx0ICAgICBmYWxzZSk7XG4gXG4gXHQvKiBVcGRhdGUgaG9sZV9sZW4gdG8gcmVmbGVjdCBob2xlIHNpemUgYWZ0ZXIgbGJsayAqL1xuIFx0aWYgKGhvbGVfc3RhcnQgIT0gbGJsaylcbkBAIC00MzEwLDEzICs0MzExLDE1IEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGV4dDRfbGJsa190IGVlX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spO1xuIFx0XHRleHQ0X2ZzYmxrX3QgZWVfc3RhcnQgPSBleHQ0X2V4dF9wYmxvY2soZXgpO1xuIFx0XHR1bnNpZ25lZCBzaG9ydCBlZV9sZW47XG4tXG4rXHRcdHVuc2lnbmVkIGludCBzdGF0dXM7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIHVud3JpdHRlbiBleHRlbnRzIGFyZSB0cmVhdGVkIGFzIGhvbGVzLCBleGNlcHQgdGhhdFxuIFx0XHQgKiB3ZSBzcGxpdCBvdXQgaW5pdGlhbGl6ZWQgcG9ydGlvbnMgZHVyaW5nIGEgd3JpdGUuXG4gXHRcdCAqL1xuIFx0XHRlZV9sZW4gPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7XG4rXHRcdHN0YXR1cyA9IGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkgP1xuK1x0XHRcdCBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjtcbiBcbiBcdFx0dHJhY2VfZXh0NF9leHRfc2hvd19leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9zdGFydCwgZWVfbGVuKTtcbiBcbkBAIC00MzI4LDYgKzQzMzEsMTIgQEAgaW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHRfZGVidWcoaW5vZGUsIFwiJXUgZml0IGludG8gJXU6JWQgLVx1MDAzZSAlbGx1XFxuXCIsXG4gXHRcdFx0XHQgIG1hcC1cdTAwM2VtX2xibGssIGVlX2Jsb2NrLCBlZV9sZW4sIG5ld2Jsb2NrKTtcbiBcbitcdFx0XHRpZiAoIShmbGFncyBcdTAwMjYgKEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgfFxuK1x0XHRcdFx0ICAgICAgIEVYVDRfRVhfTk9DQUNIRSkpKVxuK1x0XHRcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9sZW4sXG4rXHRcdFx0XHRcdFx0ICAgICBlZV9zdGFydCwgc3RhdHVzLFxuK1x0XHRcdFx0XHRcdCAgICAgdHJ1ZSk7XG4rXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgZXh0ZW50IGlzIGluaXRpYWxpemVkIGNoZWNrIHdoZXRoZXIgdGhlXG4gXHRcdFx0ICogY2FsbGVyIHdhbnRzIHRvIGNvbnZlcnQgaXQgdG8gdW53cml0dGVuLlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY1xuaW5kZXggNmU0YTE5MWU4MjE5MTUuLjVhMDM4NzhiMDYxNjAyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jXG4rKysgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmNcbkBAIC0xMDIzLDcgKzEwMjMsNyBAQCB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuICAqL1xuIHZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbiBcdFx0XHQgIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXG4tXHRcdFx0ICB1bnNpZ25lZCBpbnQgc3RhdHVzKVxuK1x0XHRcdCAgdW5zaWduZWQgaW50IHN0YXR1cywgYm9vbCBwcmVfc2VhcmNoKVxuIHtcbiBcdHN0cnVjdCBleHRlbnRfc3RhdHVzICplcztcbiBcdHN0cnVjdCBleHRlbnRfc3RhdHVzIGNoa2VzLCBuZXdlcztcbkBAIC0xMDQzLDYgKzEwNDMsMjEgQEAgdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFxuIFx0QlVHX09OKGVuZCBcdTAwM2MgbGJsayk7XG4gXG4rXHQvKlxuK1x0ICogQXZvaWQgdGFraW5nIGlfZXNfbG9jayBmb3Igd3JpdGluZyBpZiB0aGUgZW50aXJlIGV4dGVudCBpcyBhbHJlYWR5XG4rXHQgKiBjYWNoZWQuIFRoZSB3cml0ZS1sb2NrZWQgc2VhcmNoIGJlbG93IHJlY2hlY2tzIGFmdGVyIGEgbWlzcy5cbitcdCAqL1xuK1x0aWYgKHByZV9zZWFyY2gpIHtcbitcdFx0cmVhZF9sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbitcdFx0ZXMgPSBfX2VzX3RyZWVfc2VhcmNoKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc190cmVlLnJvb3QsIGxibGspO1xuK1x0XHRpZiAoZXMgXHUwMDI2XHUwMDI2IGVzLVx1MDAzZWVzX2xibGsgXHUwMDNjPSBsYmxrIFx1MDAyNlx1MDAyNiBleHQ0X2VzX2VuZChlcykgXHUwMDNlPSBlbmQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhX19lc19jaGVja19leHRlbnRfc3RhdHVzKGVzLCBzdGF0dXMsIE5VTEwpKSB7XG4rXHRcdFx0cmVhZF91bmxvY2soXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VzX2xvY2spO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRyZWFkX3VubG9jayhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXNfbG9jayk7XG4rXHR9XG4rXG4gXHR3cml0ZV9sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbiBcdGVzID0gX19lc190cmVlX3NlYXJjaChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXNfdHJlZS5yb290LCBsYmxrKTtcbiBcdGlmIChlcyBcdTAwMjZcdTAwMjYgZXMtXHUwMDNlZXNfbGJsayBcdTAwM2M9IGVuZCkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaCBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaFxuaW5kZXggZjMzOTZjZjMyYjQ0NjQuLmMyZGE3MmUzYzgyYmE3IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oXG4rKysgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhcbkBAIC0xMzksNyArMTM5LDcgQEAgZXh0ZXJuIHZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4gXHRcdFx0XHQgIGJvb2wgZGVsYWxsb2NfcmVzZXJ2ZV91c2VkKTtcbiBleHRlcm4gdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFx0XHRcdFx0IGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXG4tXHRcdFx0XHQgdW5zaWduZWQgaW50IHN0YXR1cyk7XG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IHN0YXR1cywgYm9vbCBwcmVfc2VhcmNoKTtcbiBleHRlcm4gdm9pZCBleHQ0X2VzX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbiBcdFx0XHRcdCAgZXh0NF9sYmxrX3QgbGVuKTtcbiBleHRlcm4gdm9pZCBleHQ0X2VzX2ZpbmRfZXh0ZW50X3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uZDQzMjY2YzQ4OTc4NTggMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTUyMyw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSxcbiBcbiBcdGlmIChyZXR2YWwgXHUwMDNjPSAwKSB7XG4gXHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXHUwMDNlbV9sYmxrLCBtYXAtXHUwMDNlbV9sZW4sXG4tXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cyk7XG4rXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cywgdHJ1ZSk7XG4gXHRcdHJldHVybiBtYXAtXHUwMDNlbV9sZW47XG4gXHR9XG4gXG5AQCAtNTQ2LDExICs1NDYsMTEgQEAgc3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0c3RhdHVzID09IHN0YXR1czIpIHtcbiBcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssXG4gXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX2xlbiArIG1hcDIubV9sZW4sIG1hcC1cdTAwM2VtX3BibGssXG4tXHRcdFx0XHQgICAgIHN0YXR1cyk7XG4rXHRcdFx0XHQgICAgIHN0YXR1cywgdHJ1ZSk7XG4gXHRcdG1hcC1cdTAwM2VtX2xlbiArPSBtYXAyLm1fbGVuO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIG1hcC1cdTAwM2VtX2xlbixcbi1cdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzKTtcbitcdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcbiBcdH1cbiBcbiBcdHJldHVybiBtYXAtXHUwMDNlbV9sZW47XG5AQCAtNTYyLDYgKzU2MiwxMyBAQCBpbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR1bnNpZ25lZCBpbnQgc3RhdHVzO1xuIFx0aW50IHJldHZhbDtcbiBcdHVuc2lnbmVkIGludCBvcmlnX21sZW4gPSBtYXAtXHUwMDNlbV9sZW47XG4rXHQvKlxuK1x0ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpIG1heSBoYXZlIGFscmVhZHkgY2FjaGVkIHRoZSBmdWxsIGV4dGVudCwgc29cbitcdCAqIHNlYXJjaCBmaXJzdCB0byBhdm9pZCB0YWtpbmcgaV9lc19sb2NrIGZvciB3cml0aW5nLiBUaGUgaW5kaXJlY3RcbitcdCAqIHBhdGggZG9lcyBub3QgcHJlcG9wdWxhdGUgdGhlIEVTIHRyZWUgYWZ0ZXIgdGhlIGluaXRpYWwgbG9va3VwIG1pc3MuXG4rXHQgKi9cbitcdGJvb2wgcHJlX3NlYXJjaCA9IGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLFxuK1x0XHRcdFx0XHQgICAgICBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuIFxuIFx0ZmxhZ3MgXHUwMDI2PSBFWFQ0X0VYX1FVRVJZX0ZJTFRFUjtcbiBcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSlcbkBAIC01OTMsNyArNjAwLDcgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdGF0dXMgPSBtYXAtXHUwMDNlbV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfVU5XUklUVEVOID9cbiBcdFx0XHRcdEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOIDogRVhURU5UX1NUQVRVU19XUklUVEVOO1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLFxuLVx0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xuK1x0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMsIHByZV9zZWFyY2gpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0dmFsID0gZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZihoYW5kbGUsIGlub2RlLCBtYXAsXG4gXHRcdFx0XHRcdFx0XHQgICAgb3JpZ19tbGVuKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjEzOjQ3LjgxMTkzNjY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ2MzcyOTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgZXh0NCBFeHRlbnQgQ2FjaGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGBmcy9leHQ0L2V4dGVudHMuY2AsIGBmcy9leHQ0L2V4dGVudHNfc3RhdHVzLmNgLCBgZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oYCwgYW5kIGBmcy9leHQ0L2lub2RlLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBgYm9vbCBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgdG8gdGhlIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpZiB0aGlzIGBwcmVfc2VhcmNoYCBmbGFnIGlzIHNldCB0byB0cnVlLCBpdCBtZWFucyB0aGUgY29kZSB3aWxsIHBlcmZvcm0gYSByZWFkIGxvY2sgYW5kIHNlYXJjaCBvZiB0aGUgZXh0ZW50IGJlZm9yZSB0YWtpbmcgdGhlIHdyaXRlIGxvY2suIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSB0YXJnZXRlZCBvcHRpbWl6YXRpb24gdG8gdGhlIGV4dGVudCBjYWNoaW5nIHN0cmF0ZWd5LCBhaW1pbmcgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSB3cml0ZSBsb2NrIGNvbnRlbnRpb24gaWYgdGhlIGV4dGVudCBpcyBhbHJlYWR5IGNhY2hlZC5cblxuRGlnZ2luZyBkZWVwZXIsIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCB0byBjYWxsIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgd2l0aCBgcHJlX3NlYXJjaCA9IHRydWVgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVmaW5pdGVseSBpbXBhY3RpbmcgY29yZSBleHQ0IGxvZ2ljLiBUaGUgc3RhdGVkIGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIG9wdGltaXplIGV4dGVudCBjYWNoaW5nIGJ5IGNpcmN1bXZlbnRpbmcgdGhlIHdyaXRlIGxvY2sgaWYgdGhlIGV4dGVudCBpcyBhbHJlYWR5IGNhY2hlZC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgdG91Y2hpbmcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbS5cblxuTm93LCBsZXQncyBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBGcm9tIG15IGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBleHQ0X2NhY2hlX2V4dGVudHNgLCBgZXh0NF9leHRfZGV0ZXJtaW5lX2luc2VydF9ob2xlYCwgYGV4dDRfZXh0X21hcF9ibG9ja3NgLCBgZXh0NF9lc19jYWNoZV9leHRlbnRgLCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZmAsIGFuZCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYC5cblxuVG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBtb3N0IGVmZmljaWVudGx5LCBJIG5lZWQgdG8ga25vdyB3aGljaCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBgZXh0NF9lc19jYWNoZV9leHRlbnRgIGlzIGV4cG9ydGVkLCBhcyBpcyBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AgYW5kIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLiBIb3dldmVyLCBgZXh0NF9jYWNoZV9leHRlbnRzYCwgYGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZWAsIGFuZCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZmAgYXJlIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZGUtcHJpb3JpdGl6ZSB0aG9zZSwgYXMgaXQgd291bGQgYmUgbW9yZSBjaGFsbGVuZ2luZyB0byB0YXJnZXQgdGhlbSBkaXJlY3RseSBpbiBpc29sYXRpb24uXG5cblNvLCB0aGUgY2xlYXIgdGFyZ2V0cyBmb3IgZnV6emluZyBiZWNvbWU6XG4qICAgYGV4dDRfZXh0X21hcF9ibG9ja3NgXG4qICAgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YFxuKiAgIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgXG5cbkZpbmFsbHksIGxldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNwZWNpYWwga2VybmVsIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZnMvZXh0NC9LY29uZmlnYCBmb3IgYW55IGRlcGVuZGVuY2llcy4gSSBrbm93IGBFWFQ0X0ZTYCBpcyB0aGUgbWFpbiBvbmUsIGJ1dCBhIHF1aWNrIGBncmVwYCB3aWxsIGJlIHRoZSBiZXN0IHdheSB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIGhpZGRlbiByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxMzo1NS4yNzU2NjkyODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NjQ4Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxMzo1NS40MzMzMjQxMzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDg4NDQ3MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFWFQ0IEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIHRoZSBiYXNlIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IGBFWFQ0X0ZTYC4gTm8gbmVlZCB0byBjb21wbGljYXRlIHRoaW5ncywgd2UnbGwga2VlcCBpdCBzaW1wbGUgYW5kIGp1c3QgdXNlIGBFWFQ0X0ZTYC5cblxuTm93LCBJIHdhbnQgdG8gaWRlbnRpZnkgc29tZSBnb29kIGFyZWFzIGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgRVhUNCBjb2RlYmFzZS4gTGV0J3Mgc2VlLi4uIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlLiBJdCdzIGNhbGxlZCBkdXJpbmcgYmxvY2sgbWFwcGluZywgd2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBpdCdzIHByb2JhYmx5IGV4ZWN1dGVkIGZyZXF1ZW50bHkuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCB0YXJnZXQgZm9yIGZ1enplciBjb3ZlcmFnZSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGhvdyBpdCBoYW5kbGVzIGV4dGVudHMuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgZWRnZSBjYXNlcyBpbiBleHRlbnQgbWFwcGluZyBhcmUgYSBmZXJ0aWxlIGdyb3VuZCBmb3IgZGlzY292ZXJpbmcgdnVsbmVyYWJpbGl0aWVzLlxuXG5gZXh0NF9lc19jYWNoZV9leHRlbnRgIGlzIGFub3RoZXIgaW50ZXJlc3Rpbmcgb25lLCBJJ2xsIGRlZmluaXRlbHkga2VlcCBhbiBleWUgb24gdGhhdCBvbmUuXG5cbkFuZCwgb2YgY291cnNlLCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCwgZ2l2ZW4gaXRzIHJvbGUgaW4gRklFTUFQIGFuZCByZWxhdGVkIHF1ZXJpZXMsIGhhcyB0byBiZSBjaGVja2VkIGFzIHdlbGwuXG5cblRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoLCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AuIElkZW50aWZ5aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBnaXZlIHVzIGNydWNpYWwgY29udGV4dCBhbmQgaGVscCBmb3JtdWxhdGUgbW9yZSB0YXJnZXRlZCBmdXp6aW5nIHN0cmF0ZWdpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6MTM6NTkuOTIxNzczNzM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTk4NDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4dF9tYXBfYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM4NzI9ZXh0ZXJuIGludCBleHQ0X2V4dF9pbmRleF90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGV4dGVudHMpO1xcbmZzL2V4dDQvZXh0NC5oOjM4NzM6ZXh0ZXJuIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9leHQ0LmgtMzg3NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYz01MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrdW5pdF9leHRfdGVzdF9wYXJhbSB0ZXN0X3NwbGl0X2NvbnZlcnRfcGFyYW1zW10gPSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTcxMi1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjcxMzovKiBUZXN0cyB0byB0cmlnZ2VyIGV4dDRfZXh0X21hcF9ibG9ja3MoKSAtXFx1MDAzZSBjb252ZXJ0X2luaXRpYWxpemVkX2V4dGVudCgpICovXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy03MTQtc3RhdGljIGNvbnN0IHN0cnVjdCBrdW5pdF9leHRfdGVzdF9wYXJhbSB0ZXN0X2NvbnZlcnRfaW5pdGlhbGl6ZWRfcGFyYW1zW10gPSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTgwOS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjgxMDovKiBUZXN0cyB0byB0cmlnZ2VyIGV4dDRfZXh0X21hcF9ibG9ja3MoKSAtXFx1MDAzZSBleHQ0X2V4dF9oYW5kbGVfdW53cml0dGVuX2V4bnRlbnRzKCkgKi9cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTgxMS1zdGF0aWMgY29uc3Qgc3RydWN0IGt1bml0X2V4dF90ZXN0X3BhcmFtIHRlc3RfaGFuZGxlX3Vud3JpdHRlbl9wYXJhbXNbXSA9IHtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM0MDk9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzUzNi0vKlxcbmZzL2V4dDQvZXh0ZW50cy5jOjM1Mzc6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfbWFwX2Jsb2NrcygpIGlmIHNvbWVvbmUgdHJpZXMgdG8gd3JpdGVcXG5mcy9leHQ0L2V4dGVudHMuYy0zNTM4LSAqIHRvIGFuIHVud3JpdHRlbiBleHRlbnQuIEl0IG1heSByZXN1bHQgaW4gc3BsaXR0aW5nIHRoZSB1bndyaXR0ZW5cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM1NTc9ZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc5MC0vKlxcbmZzL2V4dDQvZXh0ZW50cy5jOjM3OTE6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfbWFwX2Jsb2NrcygpIGZyb21cXG5mcy9leHQ0L2V4dGVudHMuYy0zNzkyLSAqIGV4dDRfZ2V0X2Jsb2Nrc19kaW9fd3JpdGUoKSB3aGVuIERJTyB0byB3cml0ZVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mzk5Mj1leHQ0X2V4dF9oYW5kbGVfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQwOTAtICpcXG5mcy9leHQ0L2V4dGVudHMuYzo0MDkxOiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGV4dDRfZXh0X21hcF9ibG9ja3MoKSBhZnRlciB3ZSBmYWlsZWQgdG9cXG5mcy9leHQ0L2V4dGVudHMuYy00MDkyLSAqIGZpbmQgYmxvY2tzIHRoYXQgd2VyZSBhbHJlYWR5IGluIHRoZSBpbm9kZSdzIGV4dGVudCB0cmVlLiAgSGVuY2UsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00MTE3LSAqIGNsdXN0ZXIgRVhUNF9CMkMoc2JpLCBtYXAtXFx1MDAzZW1fbGJsaykuXFx0V2Ugd2lsbCB0aGVuIHJldHVybiAxIHRvXFxuZnMvZXh0NC9leHRlbnRzLmM6NDExODogKiBzaWduYWwgdG8gZXh0NF9leHRfbWFwX2Jsb2NrcygpIHRoYXQgbWFwLVxcdTAwM2VtX3BibGsgc2hvdWxkIGJlIHRyZWF0ZWRcXG5mcy9leHQ0L2V4dGVudHMuYy00MTE5LSAqIGFzIGEgbmV3IFxcXCJhbGxvY2F0ZWRcXFwiIGJsb2NrIHJlZ2lvbi4gIE90aGVyd2lzZSwgd2Ugd2lsbCByZXR1cm4gMCBhbmRcXG5mcy9leHQ0L2V4dGVudHMuYzo0MTIwOiAqIGV4dDRfZXh0X21hcF9ibG9ja3MoKSB3aWxsIHRoZW4gYWxsb2NhdGUgb25lIG9yIG1vcmUgbmV3IGNsdXN0ZXJzXFxuZnMvZXh0NC9leHRlbnRzLmMtNDEyMS0gKiBieSBjYWxsaW5nIGV4dDRfbWJfbmV3X2Jsb2NrcygpLlxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDE5MT1zdGF0aWMgZXh0NF9sYmxrX3QgZXh0NF9leHRfZGV0ZXJtaW5lX2luc2VydF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00MjY5LSAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQyNzA6aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy00MjcxLVxcdFxcdFxcdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgKm1hcCwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDI4My1cXHRleHRfZGVidWcoaW5vZGUsIFxcXCJibG9ja3MgJXUvJXUgcmVxdWVzdGVkXFxcXG5cXFwiLCBtYXAtXFx1MDAzZW1fbGJsaywgbWFwLVxcdTAwM2VtX2xlbik7XFxuZnMvZXh0NC9leHRlbnRzLmM6NDI4NDpcXHR0cmFjZV9leHQ0X2V4dF9tYXBfYmxvY2tzX2VudGVyKGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgbWFwLVxcdTAwM2VtX2xlbiwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTQyODUtXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00NTQ2LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ1NDc6XFx0dHJhY2VfZXh0NF9leHRfbWFwX2Jsb2Nrc19leGl0KGlub2RlLCBmbGFncywgbWFwLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ1NDgtXFx0XFx0XFx0XFx0ICAgICAgIGVyciA/IGVyciA6IGFsbG9jYXRlZCk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00NTgzPXN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ2NTEtXFx0XFx0XFx0ZXh0NF9kZWJ1ZyhcXFwiaW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6IFxcXCJcXG5mcy9leHQ0L2V4dGVudHMuYzo0NjUyOlxcdFxcdFxcdFxcdCAgIFxcXCJleHQ0X2V4dF9tYXBfYmxvY2tzIHJldHVybmVkICVkXFxcIixcXG5mcy9leHQ0L2V4dGVudHMuYy00NjUzLVxcdFxcdFxcdFxcdCAgIGlub2RlLVxcdTAwM2VpX2lubywgbWFwLm1fbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTUwNDI9aW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTA4MS1cXHRcXHRcXHRcXHQgICAgIFxcXCJpbm9kZSAjJWxsdTogYmxvY2sgJXU6IGxlbiAldTogXFxcIlxcbmZzL2V4dDQvZXh0ZW50cy5jOjUwODI6XFx0XFx0XFx0XFx0ICAgICBcXFwiZXh0NF9leHRfbWFwX2Jsb2NrcyByZXR1cm5lZCAlZFxcXCIsXFxuZnMvZXh0NC9leHRlbnRzLmMtNTA4My1cXHRcXHRcXHRcXHQgICAgIGlub2RlLVxcdTAwM2VpX2lubywgbWFwLm1fbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTU3NzI9ZXh0NF9zd2FwX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZTEsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01OTU0LSAqIHJldHVybnMgMC4gIENhbiBhbHNvIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2Rlcy4gIERlcml2ZWQgZnJvbVxcbmZzL2V4dDQvZXh0ZW50cy5jOjU5NTU6ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpLlxcbmZzL2V4dDQvZXh0ZW50cy5jLTU5NTYtICovXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDYyPXN0YXRpYyB2b2lkIGV4dDRfbWFwX2Jsb2Nrc19lc19yZWNoZWNrKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDc5LVxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkge1xcbmZzL2V4dDQvaW5vZGUuYzo0ODA6XFx0XFx0cmV0dmFsID0gZXh0NF9leHRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBtYXAsIDApO1xcbmZzL2V4dDQvaW5vZGUuYy00ODEtXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MDQ9c3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIxLVxcdG1hcDIubV9mbGFncyA9IDA7XFxuZnMvZXh0NC9pbm9kZS5jOjUyMjpcXHRyZXR2YWwgPSBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZtYXAyLCAwKTtcXG5mcy9leHQ0L2lub2RlLmMtNTIzLVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTU1OT1pbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTY1LVxcdC8qXFxuZnMvZXh0NC9pbm9kZS5jOjU2NjpcXHQgKiBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgbWF5IGhhdmUgYWxyZWFkeSBjYWNoZWQgdGhlIGZ1bGwgZXh0ZW50LCBzb1xcbmZzL2V4dDQvaW5vZGUuYy01NjctXFx0ICogc2VhcmNoIGZpcnN0IHRvIGF2b2lkIHRha2luZyBpX2VzX2xvY2sgZm9yIHdyaXRpbmcuIFRoZSBpbmRpcmVjdFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU3NC1cXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpXFxuZnMvZXh0NC9pbm9kZS5jOjU3NTpcXHRcXHRyZXR2YWwgPSBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG1hcCwgZmxhZ3MpO1xcbmZzL2V4dDQvaW5vZGUuYy01NzYtXFx0ZWxzZVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTYxMz1pbnQgZXh0NF9tYXBfY3JlYXRlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTYzNy1cXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpIHtcXG5mcy9leHQ0L2lub2RlLmM6NjM4OlxcdFxcdHJldHZhbCA9IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbWFwLCBmbGFncyk7XFxuZnMvZXh0NC9pbm9kZS5jLTYzOS1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTY5Mi0gKlxcbmZzL2V4dDQvaW5vZGUuYzo2OTM6ICogSWYgZmlsZSB0eXBlIGlzIGV4dGVudHMgYmFzZWQsIGl0IHdpbGwgY2FsbCBleHQ0X2V4dF9tYXBfYmxvY2tzKCksXFxuZnMvZXh0NC9pbm9kZS5jLTY5NC0gKiBPdGhlcndpc2UsIGNhbGwgd2l0aCBleHQ0X2luZF9tYXBfYmxvY2tzKCkgdG8gaGFuZGxlIGluZGlyZWN0IG1hcHBpbmdcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz03MDg9aW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTgxMC1cXHQgKiBOb3RlIHRoYXQgaWYgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWRcXG5mcy9leHQ0L2lub2RlLmM6ODExOlxcdCAqIGV4dDRfZXh0X21hcF9ibG9ja3MoKSByZXR1cm5zIHdpdGggYnVmZmVyIGhlYWQgdW5tYXBwZWRcXG5mcy9leHQ0L2lub2RlLmMtODEyLVxcdCAqL1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTgxNi1cXHRcXHQgKiB3ZSBjb250aW51ZSBhbmQgZG8gdGhlIGFjdHVhbCB3b3JrIGluXFxuZnMvZXh0NC9pbm9kZS5jOjgxNzpcXHRcXHQgKiBleHQ0X2V4dF9tYXBfYmxvY2tzKClcXG5mcy9leHQ0L2lub2RlLmMtODE4LVxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxNDowMC4wNzE3NjgwNTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA2MjEyOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBleHQ0IEJsb2NrIE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0gY29kZSBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRoZSBibG9jayBtYXBwaW5nLiBJdCBsb29rcyBsaWtlIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCBpcyBhIHJlYWwgd29ya2hvcnNlLiBJdCdzIGNhbGxlZCBieSBhIHdob2xlIGJ1bmNoIG9mIGNydWNpYWwgZnVuY3Rpb25zOiBgZXh0NF9tYXBfYmxvY2tzYCwgYGV4dDRfbWFwX2NyZWF0ZV9ibG9ja3NgLCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCwgZXZlbiB0aGluZ3MgbGlrZSBgZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2tgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhhdCBzY3JlYW1zICpjb3JlKiBleHRlbnRzIEFQSSBmdW5jdGlvbiB0byBtZSwgbm8gZG91YnQgYWJvdXQgaXQuIEl0J3MgZGVmaW5pdGVseSBhbiBBUEkgZW50cnlwb2ludCBmb3IgZXh0NCBleHRlbnRzLlxuXG5BbmQgdGhlbiB3ZSBoYXZlIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAsIHdoaWNoIHNlZW1zIHRvIGJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIGV4dGVudCBjYWNoaW5nLiBUaGlzIGlzIGludGVyZXN0aW5nLiBMb29rcyBsaWtlIGFuIGltcG9ydGFudCBmdW5jdGlvbiBhcyB3ZWxsLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLlxuXG5JIGFscmVhZHkga25vdyBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCBpcyBhbHNvIGFuIEFQSSBlbnRyeXBvaW50LCBidXQgSSB3YW50IHRvIGRpdmUgYSBsaXR0bGUgZGVlcGVyIGludG8gdGhhdCwgYnV0IGZpcnN0LCBsZXQncyBzZWUgd2hvIGlzIGNhbGxpbmcgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxNDowNC4wNzc5ODM0NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3NDkzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9lc19jYWNoZV9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHRlbnRzLmM9NTI0PXN0YXRpYyB2b2lkIGV4dDRfY2FjaGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTM4LVxcdFxcdGlmIChwcmV2IFxcdTAwMjZcXHUwMDI2IChwcmV2ICE9IGxibGspKVxcbmZzL2V4dDQvZXh0ZW50cy5jOjUzOTpcXHRcXHRcXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgcHJldiwgbGJsayAtIHByZXYsIH4wLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgICAgIEVYVEVOVF9TVEFUVVNfSE9MRSwgZmFsc2UpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTQzLVxcdFxcdFxcdHN0YXR1cyA9IEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjU0NDpcXHRcXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbGJsaywgbGVuLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0NS1cXHRcXHRcXHRcXHQgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cywgZmFsc2UpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDE5MT1zdGF0aWMgZXh0NF9sYmxrX3QgZXh0NF9leHRfZGV0ZXJtaW5lX2luc2VydF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00MjQxLVxcdGV4dF9kZWJ1Zyhpbm9kZSwgXFxcIiAtXFx1MDAzZSAldToldVxcXFxuXFxcIiwgaG9sZV9zdGFydCwgbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0MjQyOlxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBob2xlX3N0YXJ0LCBsZW4sIH4wLCBFWFRFTlRfU1RBVFVTX0hPTEUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDI0My1cXHRcXHRcXHQgICAgIGZhbHNlKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQyNzA9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQzMzUtXFx0XFx0XFx0XFx0ICAgICAgIEVYVDRfRVhfTk9DQUNIRSkpKVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQzMzY6XFx0XFx0XFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9sZW4sXFxuZnMvZXh0NC9leHRlbnRzLmMtNDMzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVlX3N0YXJ0LCBzdGF0dXMsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9ODQyPXN0YXRpYyBpbnQgX19lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfc3RhdHVzICpuZXdlcyxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MDItICogc3RhdHVzIHRyZWUuIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIG1vZGlmeWluZyBleHRlbnRzLiBUbyBjYWNoZVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzo5MDM6ICogb24tZGlzayBleHRlbnRzLCB1c2UgZXh0NF9lc19jYWNoZV9leHRlbnQoKSBpbnN0ZWFkLlxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MDQtICovXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTkwNT12b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMTQtLypcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTAxNTogKiBleHQ0X2VzX2NhY2hlX2V4dGVudCgpIGluc2VydHMgaW5mb3JtYXRpb24gaW50byB0aGUgZXh0ZW50IHN0YXR1cyB0cmVlXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMTYtICogb25seSBpZiB0aGVyZSBpcyBubyBleGlzdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIHJhbmdlIG9yXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAyMy0gKi9cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTAyNDp2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMjUtXFx0XFx0XFx0ICBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwNzktXFx0X19lc19pbnNlcnRfZXh0ZW50KGlub2RlLCBcXHUwMDI2bmV3ZXMsIE5VTEwpO1xcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDgwOlxcdHRyYWNlX2V4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2bmV3ZXMpO1xcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDgxLVxcdGV4dDRfZXNfcHJpbnRfdHJlZShpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmg9MTM2PWV4dGVybiB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oLTEzOS1cXHRcXHRcXHRcXHQgIGJvb2wgZGVsYWxsb2NfcmVzZXJ2ZV91c2VkKTtcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmg6MTQwOmV4dGVybiB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oLTE0MS1cXHRcXHRcXHRcXHQgZXh0NF9sYmxrX3QgbGVuLCBleHQ0X2ZzYmxrX3QgcGJsayxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MDQ9c3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTI0LVxcdGlmIChyZXR2YWwgXFx1MDAzYz0gMCkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjU6XFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBtYXAtXFx1MDAzZW1fbGVuLFxcbmZzL2V4dDQvaW5vZGUuYy01MjYtXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01NDYtXFx0XFx0XFx0c3RhdHVzID09IHN0YXR1czIpIHtcXG5mcy9leHQ0L2lub2RlLmM6NTQ3OlxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsayxcXG5mcy9leHQ0L2lub2RlLmMtNTQ4LVxcdFxcdFxcdFxcdCAgICAgbWFwLVxcdTAwM2VtX2xlbiArIG1hcDIubV9sZW4sIG1hcC1cXHUwMDNlbV9wYmxrLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU1MS1cXHR9IGVsc2Uge1xcbmZzL2V4dDQvaW5vZGUuYzo1NTI6XFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBtYXAtXFx1MDAzZW1fbGVuLFxcbmZzL2V4dDQvaW5vZGUuYy01NTMtXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01NTk9aW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTYwMS1cXHRcXHRcXHRcXHRFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjtcXG5mcy9leHQ0L2lub2RlLmM6NjAyOlxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgbWFwLVxcdTAwM2VtX2xlbixcXG5mcy9leHQ0L2lub2RlLmMtNjAzLVxcdFxcdFxcdFxcdCAgICAgbWFwLVxcdTAwM2VtX3BibGssIHN0YXR1cywgcHJlX3NlYXJjaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjE0OjA0LjIxNzczODEwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDkxMjE1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEV4dGVudCBDYWNoZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBgcHJlX3NlYXJjaGAgYm9vbGVhbiB0byBgZXh0NF9lc19jYWNoZV9leHRlbnRgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB3aGVuIHRoaXMgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgaXQgcGVyZm9ybXMgYSByZWFkIGxvY2sgYW5kIGEgc2VhcmNoICpiZWZvcmUqIGRvaW5nIGFueXRoaW5nIGVsc2UuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIHBvdGVudGlhbCBwb2ludCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvciBhbmQgZWRnZSBjYXNlcy4gR2l2ZW4gdGhhdCwgSSdtIHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEknbGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Ugc3ltYm9sczogYGV4dDRfZXh0X21hcF9ibG9ja3NgLCBgZXh0NF9lc19jYWNoZV9leHRlbnRgLCBhbmQgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AuXG5cbk5vdywgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbmVjZXNzYXJ5IHNldHVwLiBJdCBsb29rcyBsaWtlIGBFWFQ0X0ZTYCBpcyB0aGUgbWFpbiB0aGluZyBJIG5lZWQuIEFscmlnaHQsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIE5vIHNwZWNpYWwgZXh0ZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gRXh0ZW50cyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGhpbiBFeHQ0LCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgZnVuY3Rpb24gaW4gYGZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY2AgdG8gYmUgc3VyZS4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6MTQ6MDguODY2ODYyNDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4OTY1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9lc19jYWNoZV9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz04NDI9c3RhdGljIGludCBfX2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0dXMgKm5ld2VzLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTkwMi0gKiBzdGF0dXMgdHJlZS4gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgbW9kaWZ5aW5nIGV4dGVudHMuIFRvIGNhY2hlXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjkwMzogKiBvbi1kaXNrIGV4dGVudHMsIHVzZSBleHQ0X2VzX2NhY2hlX2V4dGVudCgpIGluc3RlYWQuXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTkwNC0gKi9cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9OTA1PXZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAxNC0vKlxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDE1OiAqIGV4dDRfZXNfY2FjaGVfZXh0ZW50KCkgaW5zZXJ0cyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBleHRlbnQgc3RhdHVzIHRyZWVcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAxNi0gKiBvbmx5IGlmIHRoZXJlIGlzIG5vIGV4aXN0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb3JcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDIzLSAqL1xcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDI0OnZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAyNS1cXHRcXHRcXHQgIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTA3OS1cXHRfX2VzX2luc2VydF9leHRlbnQoaW5vZGUsIFxcdTAwMjZuZXdlcywgTlVMTCk7XFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjEwODA6XFx0dHJhY2VfZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIFxcdTAwMjZuZXdlcyk7XFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwODEtXFx0ZXh0NF9lc19wcmludF90cmVlKGlub2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6MTQ6MDguOTcyNzY1NzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjcyODI5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgRXh0ZW50IENhY2hlIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgdG8gYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC4gVGhlIGdvYWwgaXMgY2xlYXI6IG9wdGltaXplIHRoZSBleHRlbnQgY2FjaGUuIEl0J3MgYWJvdXQgYXZvaWRpbmcgdGhlIHdyaXRlIGxvY2sgKGBpX2VzX2xvY2tgKSBvbiB0aGUgZXh0ZW50IGNhY2hlIGlmIHRoZSBleHRlbnQgaXMgKmFscmVhZHkqIGNhY2hlZC4gU21hcnQgbW92ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBtZWFuaW5nIGFueSBleHQ0IGZpbGUgb3BlcmF0aW9uIHRoYXQgZGVhbHMgd2l0aCBibG9jayBtYXBwaW5nIG9yIHF1ZXJpZXMgaXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enogdGhvcm91Z2hseS5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGV4dDRfZXh0X21hcF9ibG9ja3NgLCBgZXh0NF9lc19jYWNoZV9leHRlbnRgIChvZiBjb3Vyc2UpLCBhbmQgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgaW50ZXJhY3RzIHdpdGggdGhlc2UgYW5kIHdoYXQgaXQgY2hhbmdlcyBpbiB0ZXJtcyBvZiBsb2NraW5nIGFuZCBwZXJmb3JtYW5jZS4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEVYVDQsIGBFWFQ0X0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLlxuXG5GaXJzdCwgSSB0aGluayBJJ2xsIHF1aWNrbHkgY2hlY2sgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIFRoYXQgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSByZXZpZXcgb2YgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjE0OjEyLjk0MDA1Mjc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ2MzI3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9tYXBfcXVlcnlfYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTIxMD1zdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3Qge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjQzLS8qXFxuZnMvZXh0NC9leHQ0Lmg6MjQ0OiAqIFRoaXMgaXMgZm9yIHVzZSBpbiBleHQ0X21hcF9xdWVyeV9ibG9ja3MoKSBmb3IgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgd2UgY2FuXFxuZnMvZXh0NC9leHQ0LmgtMjQ1LSAqIGhhdmUgYSBwaHlzaWNhbGx5IGFuZCBsb2dpY2FsbHkgY29udGlndW91cyBibG9ja3Mgc3BsaXQgYWNyb3NzIHR3byBsZWFmXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yNDctICogdG8ga25vdyB3aGV0aGVyIHRoZSByZXR1cm5lZCBleHRlbnQgaXMgbGFzdCBpbiBsZWFmLiBJZiB5ZXMsIHRoZW4gbG9va3VwIGZvclxcbmZzL2V4dDQvZXh0NC5oOjI0ODogKiBuZXh0IGluIGxlYWYgYmxvY2sgaW4gZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZigpLlxcbmZzL2V4dDQvZXh0NC5oLTI0OS0gKiAtIFRoaXMgaXMgbmV2ZXIgZ29pbmcgdG8gYmUgYWRkZWQgdG8gYW55IGJ1ZmZlciBoZWFkIHN0YXRlLlxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9Njg0PWVudW0ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNzUyLS8qXFxuZnMvZXh0NC9leHQ0Lmg6NzUzOiAqIGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcygpIHVzZXMgdGhpcyBmaWx0ZXIgbWFzayB0byBmaWx0ZXIgdGhlIGZsYWdzIG5lZWRlZCB0b1xcbmZzL2V4dDQvZXh0NC5oLTc1NC0gKiBwYXNzIHdoaWxlIGxvb2t1cC9xdWVyeWluZyBvZiBvbiBkaXNrIGV4dGVudCB0cmVlLlxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9Mzg4OD1leHRlcm4gaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvZXh0NC5oLTM4ODktXFx0XFx0XFx0ICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0NC5oOjM4OTA6ZXh0ZXJuIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dDQuaC0zODkxLVxcdFxcdFxcdFxcdCAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYz0zNTg9c3RhdGljIGludCBjaGVja19idWZmZXIoY2hhciAqYnVmLCBpbnQgYywgaW50IHNpemUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTM3Mi0vKlxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MzczOiAqIFNpbXVsYXRlIGEgbWFwIGJsb2NrIGNhbGwgYnkgZmlyc3QgY2FsbGluZyBleHQ0X21hcF9xdWVyeV9ibG9ja3MoKSB0b1xcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzc0LSAqIGNvcnJlY3RseSBwb3B1bGF0ZSBtYXAgZmxhZ3MgYW5kIHBibGsgYW5kIHRoZW4gY2FsbCB0aGVcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9Mzc5PXN0YXRpYyB2b2lkIGV4dDRfbWFwX2NyZWF0ZV9ibG9ja3NfaGVscGVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzg1LVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6Mzg2OlxcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCBmbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy0zODctXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApIHtcXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTM4OC1cXHRcXHRLVU5JVF9GQUlMKHRlc3QsXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzozODk6XFx0XFx0XFx0ICAgXFxcImV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcygpIGZhaWxlZC4gQ2Fubm90IHByb2NlZWRcXFxcblxcXCIpO1xcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzkwLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYzMTU9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfaXNzdWVfemVyb291dCk7XFxuZnMvZXh0NC9leHRlbnRzLmM6NjMxNjpFWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9tYXBfcXVlcnlfYmxvY2tzKTtcXG5mcy9leHQ0L2V4dGVudHMuYy02MzE3LSNlbmRpZlxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTQ2Mj1zdGF0aWMgdm9pZCBleHQ0X21hcF9ibG9ja3NfZXNfcmVjaGVjayhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUwMy1cXG5mcy9leHQ0L2lub2RlLmM6NTA0OnN0YXRpYyBpbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZihoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5vZGUuYy01MDUtXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU1OC1cXG5mcy9leHQ0L2lub2RlLmM6NTU5OmludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2lub2RlLmMtNTYwLVxcdFxcdFxcdCAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjA0LVxcdH0gZWxzZSB7XFxuZnMvZXh0NC9pbm9kZS5jOjYwNTpcXHRcXHRyZXR2YWwgPSBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZSwgaW5vZGUsIG1hcCxcXG5mcy9leHQ0L2lub2RlLmMtNjA2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBvcmlnX21sZW4pO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTcwOD1pbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNzkyLVxcdGRvd25fcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuZnMvZXh0NC9pbm9kZS5jOjc5MzpcXHRyZXR2YWwgPSBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbWFwLCBmbGFncyk7XFxuZnMvZXh0NC9pbm9kZS5jLTc5NC1cXHR1cF9yZWFkKChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhX3NlbSkpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE5MjM9c3RhdGljIGludCBleHQ0X2RhX21hcF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTE5NzgtXFx0ZWxzZVxcbmZzL2V4dDQvaW5vZGUuYzoxOTc5OlxcdFxcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCAwKTtcXG5mcy9leHQ0L2lub2RlLmMtMTk4MC1cXHR1cF9yZWFkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0yMDAxLVxcdH0gZWxzZSBpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xcbmZzL2V4dDQvaW5vZGUuYzoyMDAyOlxcdFxcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCAwKTtcXG5mcy9leHQ0L2lub2RlLmMtMjAwMy1cXHRcXHRpZiAocmV0dmFsKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjE0OjEzLjEyNDY5MzA4NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzAxMTgzMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHBhdGhzLlxuXG4qKkZvY3VzIEFyZWFzIGluIHRoZSBleHQ0IEJsb2NrIE1hcHBpbmcgTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBhbmQgd2hlcmUgSSBzaG91bGQgYmUgY29uY2VudHJhdGluZyBteSBlZmZvcnRzLiBUaGUgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBhIGtleSBzcG90LiBJdCdzIGVzc2VudGlhbGx5IHRoZSB3b3JraG9yc2UsIGJlaW5nIGNhbGxlZCBieSBib3RoIGBleHQ0X21hcF9ibG9ja3NgIGFuZCBgZXh0NF9kYV9tYXBfYmxvY2tzYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhICp2ZXJ5KiBjb21tb24gYW5kIHBvdGVudGlhbGx5IGNyaXRpY2FsIHBhdGggZm9yIG9wdGltaXphdGlvbi4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSB0aGF0IGFueSBpbmVmZmljaWVuY2llcyBoZXJlIGFyZSBhbXBsaWZpZWQgYWNyb3NzIHRoZSBib2FyZC5cblxuU2luY2UgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgaXMgc28gY2VudHJhbCwgSSBzaG91bGQgYWxzbyBsb29rIGNsb3NlbHkgYXQgaXRzIGNhbGxlcnMuIFNvLCBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AgYW5kIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgYWxzbyBzZWVtIGxpa2UgZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGluLWRlcHRoIGFuYWx5c2lzLiBUaGV5IGRpcmVjdGx5IGZlZWQgaW50byB0aGUgY29yZSBibG9jayBtYXBwaW5nIHByb2Nlc3MuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhvc2UgZnVuY3Rpb25zIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AuXG5cbkFscmlnaHQsIEknbGwgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1MSwiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxNDoxNy40MjU4ODEwOTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwMDUyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4dF9tYXBfYmxvY2tzXCIsXG4gICAgXCJleHQ0X2VzX2NhY2hlX2V4dGVudFwiLFxuICAgIFwiZXh0NF9tYXBfcXVlcnlfYmxvY2tzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgZXh0ZW50IHN0YXR1cyBjYWNoaW5nIGxvZ2ljIGJ5IGludHJvZHVjaW5nIGEgYHByZV9zZWFyY2hgIHBhcmFtZXRlciB0byBgZXh0NF9lc19jYWNoZV9leHRlbnRgLiBUaGlzIGFsbG93cyBhdm9pZGluZyBhIHdyaXRlIGxvY2sgaWYgdGhlIGV4dGVudCBpcyBhbHJlYWR5IGNhY2hlZCwgb3B0aW1pemluZyBibG9jayBtYXBwaW5nIGFuZCBxdWVyeWluZyBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9leHRfbWFwX2Jsb2Nrc1wiLFxuICAgIFwiZXh0NF9lc19jYWNoZV9leHRlbnRcIixcbiAgICBcImV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGV4dGVudCBzdGF0dXMgY2FjaGluZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBhIGBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgdG8gYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC4gVGhpcyBhbGxvd3MgYXZvaWRpbmcgYSB3cml0ZSBsb2NrIGlmIHRoZSBleHRlbnQgaXMgYWxyZWFkeSBjYWNoZWQsIG9wdGltaXppbmcgYmxvY2sgbWFwcGluZyBhbmQgcXVlcnlpbmcgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowpp6jf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 04:53:36 +0000 UTC FinishedAt: 2026-07-26 05:14:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3dab139d4795f688e4f243e40c7474df00d329d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3dab139d4795f688e4f243e40c7474df00d329d9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_ext_map_blocks", "ext4_es_cache_extent", "ext4_map_query_blocks" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZXNfY2FjaGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2V4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjM3MGMzNzk4ZGRlYzdhZjIxNDQyZTM5OTkxYmUyMzA5OGMyNjYyZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA1OjEzOjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcbmluZGV4IDkxYzk3YWY2NGIzMTc3Li44NWUyMTM3NjFhMThkNSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHMuY1xuQEAgLTUzNywxMiAmIzQzOzUzNywxMiBAQCBzdGF0aWMgdm9pZCBleHQ0X2NhY2hlX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0aWYgKHByZXYgXHUwMDI2XHUwMDI2IChwcmV2ICE9IGxibGspKVxuIFx0XHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsXG4tXHRcdFx0XHRcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFLCBmYWxzZSk7XG4gXG4gXHRcdGlmIChleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpKVxuIFx0XHRcdHN0YXR1cyA9IEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOO1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbGJsaywgbGVuLFxuLVx0XHRcdFx0ICAgICBleHQ0X2V4dF9wYmxvY2soZXgpLCBzdGF0dXMpO1xuJiM0MztcdFx0XHRcdCAgICAgZXh0NF9leHRfcGJsb2NrKGV4KSwgc3RhdHVzLCBmYWxzZSk7XG4gXHRcdHByZXYgPSBsYmxrICYjNDM7IGxlbjtcbiBcdH1cbiB9XG5AQCAtNDIzOSw3ICYjNDM7NDIzOSw4IEBAIHN0YXRpYyBleHQ0X2xibGtfdCBleHQ0X2V4dF9kZXRlcm1pbmVfaW5zZXJ0X2hvbGUoc3RydWN0IGlub2RlICppbm9kZSxcbiBpbnNlcnRfaG9sZTpcbiBcdC8qIFB1dCBqdXN0IGZvdW5kIGdhcCBpbnRvIGNhY2hlIHRvIHNwZWVkIHVwIHN1YnNlcXVlbnQgcmVxdWVzdHMgKi9cbiBcdGV4dF9kZWJ1Zyhpbm9kZSwgXCYjMzQ7IC1cdTAwM2UgJXU6JXVcXG5cJiMzNDssIGhvbGVfc3RhcnQsIGxlbik7XG4tXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFKTtcbiYjNDM7XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFLFxuJiM0MztcdFx0XHQgICAgIGZhbHNlKTtcbiBcbiBcdC8qIFVwZGF0ZSBob2xlX2xlbiB0byByZWZsZWN0IGhvbGUgc2l6ZSBhZnRlciBsYmxrICovXG4gXHRpZiAoaG9sZV9zdGFydCAhPSBsYmxrKVxuQEAgLTQzMTAsMTMgJiM0Mzs0MzExLDE1IEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGV4dDRfbGJsa190IGVlX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spO1xuIFx0XHRleHQ0X2ZzYmxrX3QgZWVfc3RhcnQgPSBleHQ0X2V4dF9wYmxvY2soZXgpO1xuIFx0XHR1bnNpZ25lZCBzaG9ydCBlZV9sZW47XG4tXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgc3RhdHVzO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiB1bndyaXR0ZW4gZXh0ZW50cyBhcmUgdHJlYXRlZCBhcyBob2xlcywgZXhjZXB0IHRoYXRcbiBcdFx0ICogd2Ugc3BsaXQgb3V0IGluaXRpYWxpemVkIHBvcnRpb25zIGR1cmluZyBhIHdyaXRlLlxuIFx0XHQgKi9cbiBcdFx0ZWVfbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpO1xuJiM0MztcdFx0c3RhdHVzID0gZXh0NF9leHRfaXNfdW53cml0dGVuKGV4KSA/XG4mIzQzO1x0XHRcdCBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjtcbiBcbiBcdFx0dHJhY2VfZXh0NF9leHRfc2hvd19leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9zdGFydCwgZWVfbGVuKTtcbiBcbkBAIC00MzI4LDYgJiM0Mzs0MzMxLDEyIEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0X2RlYnVnKGlub2RlLCBcJiMzNDsldSBmaXQgaW50byAldTolZCAtXHUwMDNlICVsbHVcXG5cJiMzNDssXG4gXHRcdFx0XHQgIG1hcC1cdTAwM2VtX2xibGssIGVlX2Jsb2NrLCBlZV9sZW4sIG5ld2Jsb2NrKTtcbiBcbiYjNDM7XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IChFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFIHxcbiYjNDM7XHRcdFx0XHQgICAgICAgRVhUNF9FWF9OT0NBQ0hFKSkpXG4mIzQzO1x0XHRcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9sZW4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZWVfc3RhcnQsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICB0cnVlKTtcbiYjNDM7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgZXh0ZW50IGlzIGluaXRpYWxpemVkIGNoZWNrIHdoZXRoZXIgdGhlXG4gXHRcdFx0ICogY2FsbGVyIHdhbnRzIHRvIGNvbnZlcnQgaXQgdG8gdW53cml0dGVuLlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY1xuaW5kZXggNmU0YTE5MWU4MjE5MTUuLjVhMDM4NzhiMDYxNjAyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmNcbkBAIC0xMDIzLDcgJiM0MzsxMDIzLDcgQEAgdm9pZCBleHQ0X2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbiAgKi9cbiB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4gXHRcdFx0ICBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxuLVx0XHRcdCAgdW5zaWduZWQgaW50IHN0YXR1cylcbiYjNDM7XHRcdFx0ICB1bnNpZ25lZCBpbnQgc3RhdHVzLCBib29sIHByZV9zZWFyY2gpXG4ge1xuIFx0c3RydWN0IGV4dGVudF9zdGF0dXMgKmVzO1xuIFx0c3RydWN0IGV4dGVudF9zdGF0dXMgY2hrZXMsIG5ld2VzO1xuQEAgLTEwNDMsNiAmIzQzOzEwNDMsMjEgQEAgdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFxuIFx0QlVHX09OKGVuZCBcdTAwM2MgbGJsayk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBdm9pZCB0YWtpbmcgaV9lc19sb2NrIGZvciB3cml0aW5nIGlmIHRoZSBlbnRpcmUgZXh0ZW50IGlzIGFscmVhZHlcbiYjNDM7XHQgKiBjYWNoZWQuIFRoZSB3cml0ZS1sb2NrZWQgc2VhcmNoIGJlbG93IHJlY2hlY2tzIGFmdGVyIGEgbWlzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJlX3NlYXJjaCkge1xuJiM0MztcdFx0cmVhZF9sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbiYjNDM7XHRcdGVzID0gX19lc190cmVlX3NlYXJjaChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXNfdHJlZS5yb290LCBsYmxrKTtcbiYjNDM7XHRcdGlmIChlcyBcdTAwMjZcdTAwMjYgZXMtXHUwMDNlZXNfbGJsayBcdTAwM2M9IGxibGsgXHUwMDI2XHUwMDI2IGV4dDRfZXNfZW5kKGVzKSBcdTAwM2U9IGVuZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhX19lc19jaGVja19leHRlbnRfc3RhdHVzKGVzLCBzdGF0dXMsIE5VTEwpKSB7XG4mIzQzO1x0XHRcdHJlYWRfdW5sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmVhZF91bmxvY2soXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VzX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR3cml0ZV9sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbiBcdGVzID0gX19lc190cmVlX3NlYXJjaChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXNfdHJlZS5yb290LCBsYmxrKTtcbiBcdGlmIChlcyBcdTAwMjZcdTAwMjYgZXMtXHUwMDNlZXNfbGJsayBcdTAwM2M9IGVuZCkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaCBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaFxuaW5kZXggZjMzOTZjZjMyYjQ0NjQuLmMyZGE3MmUzYzgyYmE3IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhcbkBAIC0xMzksNyAmIzQzOzEzOSw3IEBAIGV4dGVybiB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFx0XHRcdFx0ICBib29sIGRlbGFsbG9jX3Jlc2VydmVfdXNlZCk7XG4gZXh0ZXJuIHZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbiBcdFx0XHRcdCBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGludCBzdGF0dXMpO1xuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgc3RhdHVzLCBib29sIHByZV9zZWFyY2gpO1xuIGV4dGVybiB2b2lkIGV4dDRfZXNfcmVtb3ZlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFx0XHRcdFx0ICBleHQ0X2xibGtfdCBsZW4pO1xuIGV4dGVybiB2b2lkIGV4dDRfZXNfZmluZF9leHRlbnRfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi5kNDMyNjZjNDg5Nzg1OCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNTIzLDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSxcbiBcbiBcdGlmIChyZXR2YWwgXHUwMDNjPSAwKSB7XG4gXHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXHUwMDNlbV9sYmxrLCBtYXAtXHUwMDNlbV9sZW4sXG4tXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cyk7XG4mIzQzO1x0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMsIHRydWUpO1xuIFx0XHRyZXR1cm4gbWFwLVx1MDAzZW1fbGVuO1xuIFx0fVxuIFxuQEAgLTU0NiwxMSAmIzQzOzU0NiwxMSBAQCBzdGF0aWMgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRzdGF0dXMgPT0gc3RhdHVzMikge1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsayxcbiBcdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fbGVuICYjNDM7IG1hcDIubV9sZW4sIG1hcC1cdTAwM2VtX3BibGssXG4tXHRcdFx0XHQgICAgIHN0YXR1cyk7XG4mIzQzO1x0XHRcdFx0ICAgICBzdGF0dXMsIHRydWUpO1xuIFx0XHRtYXAtXHUwMDNlbV9sZW4gJiM0Mzs9IG1hcDIubV9sZW47XG4gXHR9IGVsc2Uge1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLFxuLVx0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xuJiM0MztcdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcbiBcdH1cbiBcbiBcdHJldHVybiBtYXAtXHUwMDNlbV9sZW47XG5AQCAtNTYyLDYgJiM0Mzs1NjIsMTMgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0dW5zaWduZWQgaW50IHN0YXR1cztcbiBcdGludCByZXR2YWw7XG4gXHR1bnNpZ25lZCBpbnQgb3JpZ19tbGVuID0gbWFwLVx1MDAzZW1fbGVuO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpIG1heSBoYXZlIGFscmVhZHkgY2FjaGVkIHRoZSBmdWxsIGV4dGVudCwgc29cbiYjNDM7XHQgKiBzZWFyY2ggZmlyc3QgdG8gYXZvaWQgdGFraW5nIGlfZXNfbG9jayBmb3Igd3JpdGluZy4gVGhlIGluZGlyZWN0XG4mIzQzO1x0ICogcGF0aCBkb2VzIG5vdCBwcmVwb3B1bGF0ZSB0aGUgRVMgdHJlZSBhZnRlciB0aGUgaW5pdGlhbCBsb29rdXAgbWlzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHByZV9zZWFyY2ggPSBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEVYVDRfSU5PREVfRVhURU5UUyk7XG4gXG4gXHRmbGFncyBcdTAwMjY9IEVYVDRfRVhfUVVFUllfRklMVEVSO1xuIFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKVxuQEAgLTU5Myw3ICYjNDM7NjAwLDcgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdGF0dXMgPSBtYXAtXHUwMDNlbV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfVU5XUklUVEVOID9cbiBcdFx0XHRcdEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOIDogRVhURU5UX1NUQVRVU19XUklUVEVOO1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLFxuLVx0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xuJiM0MztcdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzLCBwcmVfc2VhcmNoKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlLCBpbm9kZSwgbWFwLFxuIFx0XHRcdFx0XHRcdFx0ICAgIG9yaWdfbWxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZXNfY2FjaGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2V4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjM3MGMzNzk4ZGRlYzdhZjIxNDQyZTM5OTkxYmUyMzA5OGMyNjYyZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDA1OjEzOjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCA5MWM5N2FmNjRiMzE3Ny4uODVlMjEzNzYxYTE4ZDUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC01MzcsMTIgJiM0Mzs1MzcsMTIgQEAgc3RhdGljIHZvaWQgZXh0NF9jYWNoZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJaWYgKHByZXYgJmFtcDsmYW1wOyAocHJldiAhPSBsYmxrKSkKIAkJCWV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsCi0JCQkJCSAgICAgRVhURU5UX1NUQVRVU19IT0xFKTsKJiM0MzsJCQkJCSAgICAgRVhURU5UX1NUQVRVU19IT0xFLCBmYWxzZSk7CiAKIAkJaWYgKGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkpCiAJCQlzdGF0dXMgPSBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTjsKIAkJZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGxibGssIGxlbiwKLQkJCQkgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cyk7CiYjNDM7CQkJCSAgICAgZXh0NF9leHRfcGJsb2NrKGV4KSwgc3RhdHVzLCBmYWxzZSk7CiAJCXByZXYgPSBsYmxrICYjNDM7IGxlbjsKIAl9CiB9CkBAIC00MjM5LDcgJiM0Mzs0MjM5LDggQEAgc3RhdGljIGV4dDRfbGJsa190IGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogaW5zZXJ0X2hvbGU6CiAJLyogUHV0IGp1c3QgZm91bmQgZ2FwIGludG8gY2FjaGUgdG8gc3BlZWQgdXAgc3Vic2VxdWVudCByZXF1ZXN0cyAqLwogCWV4dF9kZWJ1Zyhpbm9kZSwgJiMzNDsgLSZndDsgJXU6JXVcbiYjMzQ7LCBob2xlX3N0YXJ0LCBsZW4pOwotCWV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBob2xlX3N0YXJ0LCBsZW4sIH4wLCBFWFRFTlRfU1RBVFVTX0hPTEUpOwomIzQzOwlleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFLAomIzQzOwkJCSAgICAgZmFsc2UpOwogCiAJLyogVXBkYXRlIGhvbGVfbGVuIHRvIHJlZmxlY3QgaG9sZSBzaXplIGFmdGVyIGxibGsgKi8KIAlpZiAoaG9sZV9zdGFydCAhPSBsYmxrKQpAQCAtNDMxMCwxMyAmIzQzOzQzMTEsMTUgQEAgaW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJZXh0NF9sYmxrX3QgZWVfYmxvY2sgPSBsZTMyX3RvX2NwdShleC0mZ3Q7ZWVfYmxvY2spOwogCQlleHQ0X2ZzYmxrX3QgZWVfc3RhcnQgPSBleHQ0X2V4dF9wYmxvY2soZXgpOwogCQl1bnNpZ25lZCBzaG9ydCBlZV9sZW47Ci0KJiM0MzsJCXVuc2lnbmVkIGludCBzdGF0dXM7CiAKIAkJLyoKIAkJICogdW53cml0dGVuIGV4dGVudHMgYXJlIHRyZWF0ZWQgYXMgaG9sZXMsIGV4Y2VwdCB0aGF0CiAJCSAqIHdlIHNwbGl0IG91dCBpbml0aWFsaXplZCBwb3J0aW9ucyBkdXJpbmcgYSB3cml0ZS4KIAkJICovCiAJCWVlX2xlbiA9IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTsKJiM0MzsJCXN0YXR1cyA9IGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkgPwomIzQzOwkJCSBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjsKIAogCQl0cmFjZV9leHQ0X2V4dF9zaG93X2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIGVlX3N0YXJ0LCBlZV9sZW4pOwogCkBAIC00MzI4LDYgJiM0Mzs0MzMxLDEyIEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHRfZGVidWcoaW5vZGUsICYjMzQ7JXUgZml0IGludG8gJXU6JWQgLSZndDsgJWxsdVxuJiMzNDssCiAJCQkJICBtYXAtJmd0O21fbGJsaywgZWVfYmxvY2ssIGVlX2xlbiwgbmV3YmxvY2spOwogCiYjNDM7CQkJaWYgKCEoZmxhZ3MgJmFtcDsgKEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgfAomIzQzOwkJCQkgICAgICAgRVhUNF9FWF9OT0NBQ0hFKSkpCiYjNDM7CQkJCWV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBlZV9ibG9jaywgZWVfbGVuLAomIzQzOwkJCQkJCSAgICAgZWVfc3RhcnQsIHN0YXR1cywKJiM0MzsJCQkJCQkgICAgIHRydWUpOwomIzQzOwogCQkJLyoKIAkJCSAqIElmIHRoZSBleHRlbnQgaXMgaW5pdGlhbGl6ZWQgY2hlY2sgd2hldGhlciB0aGUKIAkJCSAqIGNhbGxlciB3YW50cyB0byBjb252ZXJ0IGl0IHRvIHVud3JpdHRlbi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYwppbmRleCA2ZTRhMTkxZTgyMTkxNS4uNWEwMzg3OGIwNjE2MDIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMKQEAgLTEwMjMsNyAmIzQzOzEwMjMsNyBAQCB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLAogICovCiB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssCiAJCQkgIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssCi0JCQkgIHVuc2lnbmVkIGludCBzdGF0dXMpCiYjNDM7CQkJICB1bnNpZ25lZCBpbnQgc3RhdHVzLCBib29sIHByZV9zZWFyY2gpCiB7CiAJc3RydWN0IGV4dGVudF9zdGF0dXMgKmVzOwogCXN0cnVjdCBleHRlbnRfc3RhdHVzIGNoa2VzLCBuZXdlczsKQEAgLTEwNDMsNiAmIzQzOzEwNDMsMjEgQEAgdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLAogCiAJQlVHX09OKGVuZCAmbHQ7IGxibGspOwogCiYjNDM7CS8qCiYjNDM7CSAqIEF2b2lkIHRha2luZyBpX2VzX2xvY2sgZm9yIHdyaXRpbmcgaWYgdGhlIGVudGlyZSBleHRlbnQgaXMgYWxyZWFkeQomIzQzOwkgKiBjYWNoZWQuIFRoZSB3cml0ZS1sb2NrZWQgc2VhcmNoIGJlbG93IHJlY2hlY2tzIGFmdGVyIGEgbWlzcy4KJiM0MzsJICovCiYjNDM7CWlmIChwcmVfc2VhcmNoKSB7CiYjNDM7CQlyZWFkX2xvY2soJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX2VzX2xvY2spOwomIzQzOwkJZXMgPSBfX2VzX3RyZWVfc2VhcmNoKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9lc190cmVlLnJvb3QsIGxibGspOwomIzQzOwkJaWYgKGVzICZhbXA7JmFtcDsgZXMtJmd0O2VzX2xibGsgJmx0Oz0gbGJsayAmYW1wOyZhbXA7IGV4dDRfZXNfZW5kKGVzKSAmZ3Q7PSBlbmQgJmFtcDsmYW1wOwomIzQzOwkJICAgICFfX2VzX2NoZWNrX2V4dGVudF9zdGF0dXMoZXMsIHN0YXR1cywgTlVMTCkpIHsKJiM0MzsJCQlyZWFkX3VubG9jaygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZXNfbG9jayk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJcmVhZF91bmxvY2soJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX2VzX2xvY2spOwomIzQzOwl9CiYjNDM7CiAJd3JpdGVfbG9jaygmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZXNfbG9jayk7CiAJZXMgPSBfX2VzX3RyZWVfc2VhcmNoKCZhbXA7RVhUNF9JKGlub2RlKS0mZ3Q7aV9lc190cmVlLnJvb3QsIGxibGspOwogCWlmIChlcyAmYW1wOyZhbXA7IGVzLSZndDtlc19sYmxrICZsdDs9IGVuZCkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oIGIvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oCmluZGV4IGYzMzk2Y2YzMmI0NDY0Li5jMmRhNzJlM2M4MmJhNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaApAQCAtMTM5LDcgJiM0MzsxMzksNyBAQCBleHRlcm4gdm9pZCBleHQ0X2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywKIAkJCQkgIGJvb2wgZGVsYWxsb2NfcmVzZXJ2ZV91c2VkKTsKIGV4dGVybiB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssCiAJCQkJIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssCi0JCQkJIHVuc2lnbmVkIGludCBzdGF0dXMpOwomIzQzOwkJCQkgdW5zaWduZWQgaW50IHN0YXR1cywgYm9vbCBwcmVfc2VhcmNoKTsKIGV4dGVybiB2b2lkIGV4dDRfZXNfcmVtb3ZlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLAogCQkJCSAgZXh0NF9sYmxrX3QgbGVuKTsKIGV4dGVybiB2b2lkIGV4dDRfZXNfZmluZF9leHRlbnRfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uZDQzMjY2YzQ4OTc4NTggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTUyMyw3ICYjNDM7NTIzLDcgQEAgc3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsCiAKIAlpZiAocmV0dmFsICZsdDs9IDApIHsKIAkJZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC0mZ3Q7bV9sYmxrLCBtYXAtJmd0O21fbGVuLAotCQkJCSAgICAgbWFwLSZndDttX3BibGssIHN0YXR1cyk7CiYjNDM7CQkJCSAgICAgbWFwLSZndDttX3BibGssIHN0YXR1cywgdHJ1ZSk7CiAJCXJldHVybiBtYXAtJmd0O21fbGVuOwogCX0KIApAQCAtNTQ2LDExICYjNDM7NTQ2LDExIEBAIHN0YXRpYyBpbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZihoYW5kbGVfdCAqaGFuZGxlLAogCQkJc3RhdHVzID09IHN0YXR1czIpIHsKIAkJZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC0mZ3Q7bV9sYmxrLAogCQkJCSAgICAgbWFwLSZndDttX2xlbiAmIzQzOyBtYXAyLm1fbGVuLCBtYXAtJmd0O21fcGJsaywKLQkJCQkgICAgIHN0YXR1cyk7CiYjNDM7CQkJCSAgICAgc3RhdHVzLCB0cnVlKTsKIAkJbWFwLSZndDttX2xlbiAmIzQzOz0gbWFwMi5tX2xlbjsKIAl9IGVsc2UgewogCQlleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLSZndDttX2xibGssIG1hcC0mZ3Q7bV9sZW4sCi0JCQkJICAgICBtYXAtJmd0O21fcGJsaywgc3RhdHVzKTsKJiM0MzsJCQkJICAgICBtYXAtJmd0O21fcGJsaywgc3RhdHVzLCB0cnVlKTsKIAl9CiAKIAlyZXR1cm4gbWFwLSZndDttX2xlbjsKQEAgLTU2Miw2ICYjNDM7NTYyLDEzIEBAIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCByZXR2YWw7CiAJdW5zaWduZWQgaW50IG9yaWdfbWxlbiA9IG1hcC0mZ3Q7bV9sZW47CiYjNDM7CS8qCiYjNDM7CSAqIGV4dDRfZXh0X21hcF9ibG9ja3MoKSBtYXkgaGF2ZSBhbHJlYWR5IGNhY2hlZCB0aGUgZnVsbCBleHRlbnQsIHNvCiYjNDM7CSAqIHNlYXJjaCBmaXJzdCB0byBhdm9pZCB0YWtpbmcgaV9lc19sb2NrIGZvciB3cml0aW5nLiBUaGUgaW5kaXJlY3QKJiM0MzsJICogcGF0aCBkb2VzIG5vdCBwcmVwb3B1bGF0ZSB0aGUgRVMgdHJlZSBhZnRlciB0aGUgaW5pdGlhbCBsb29rdXAgbWlzcy4KJiM0MzsJICovCiYjNDM7CWJvb2wgcHJlX3NlYXJjaCA9IGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLAomIzQzOwkJCQkJICAgICAgRVhUNF9JTk9ERV9FWFRFTlRTKTsKIAogCWZsYWdzICZhbXA7PSBFWFQ0X0VYX1FVRVJZX0ZJTFRFUjsKIAlpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpCkBAIC01OTMsNyAmIzQzOzYwMCw3IEBAIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJc3RhdHVzID0gbWFwLSZndDttX2ZsYWdzICZhbXA7IEVYVDRfTUFQX1VOV1JJVFRFTiA/CiAJCQkJRVhURU5UX1NUQVRVU19VTldSSVRURU4gOiBFWFRFTlRfU1RBVFVTX1dSSVRURU47CiAJCWV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtJmd0O21fbGJsaywgbWFwLSZndDttX2xlbiwKLQkJCQkgICAgIG1hcC0mZ3Q7bV9wYmxrLCBzdGF0dXMpOwomIzQzOwkJCQkgICAgIG1hcC0mZ3Q7bV9wYmxrLCBzdGF0dXMsIHByZV9zZWFyY2gpOwogCX0gZWxzZSB7CiAJCXJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlLCBpbm9kZSwgbWFwLAogCQkJCQkJCSAgICBvcmlnX21sZW4pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBleHQ0IEV4dGVudCBDYWNoaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLCBhbmQgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY2hhbmdlIHRoYXQgbW9kaWZpZXMgYGZzL2V4dDQvZXh0ZW50cy5jYCwgYGZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY2AsIGBmcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhgLCBhbmQgYGZzL2V4dDQvaW5vZGUuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBhIGBib29sIHByZV9zZWFyY2hgIHBhcmFtZXRlciB0byB0aGUgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCBmdW5jdGlvbi4gRXNzZW50aWFsbHksIGlmIHRoaXMgYHByZV9zZWFyY2hgIGZsYWcgaXMgc2V0IHRvIHRydWUsIGl0IG1lYW5zIHRoZSBjb2RlIHdpbGwgcGVyZm9ybSBhIHJlYWQgbG9jayBhbmQgc2VhcmNoIG9mIHRoZSBleHRlbnQgYmVmb3JlIHRha2luZyB0aGUgd3JpdGUgbG9jay4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHRhcmdldGVkIG9wdGltaXphdGlvbiB0byB0aGUgZXh0ZW50IGNhY2hpbmcgc3RyYXRlZ3ksIGFpbWluZyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHdyaXRlIGxvY2sgY29udGVudGlvbiBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLgoKRGlnZ2luZyBkZWVwZXIsIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCB0byBjYWxsIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgd2l0aCBgcHJlX3NlYXJjaCA9IHRydWVgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVmaW5pdGVseSBpbXBhY3RpbmcgY29yZSBleHQ0IGxvZ2ljLiBUaGUgc3RhdGVkIGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIG9wdGltaXplIGV4dGVudCBjYWNoaW5nIGJ5IGNpcmN1bXZlbnRpbmcgdGhlIHdyaXRlIGxvY2sgaWYgdGhlIGV4dGVudCBpcyBhbHJlYWR5IGNhY2hlZC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgdG91Y2hpbmcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbS4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBrZXkgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcuIEZyb20gbXkgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGV4dDRfY2FjaGVfZXh0ZW50c2AsIGBleHQ0X2V4dF9kZXRlcm1pbmVfaW5zZXJ0X2hvbGVgLCBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AsIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAsIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmYCwgYW5kIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLgoKVG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBtb3N0IGVmZmljaWVudGx5LCBJIG5lZWQgdG8ga25vdyB3aGljaCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBgZXh0NF9lc19jYWNoZV9leHRlbnRgIGlzIGV4cG9ydGVkLCBhcyBpcyBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AgYW5kIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLiBIb3dldmVyLCBgZXh0NF9jYWNoZV9leHRlbnRzYCwgYGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZWAsIGFuZCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZmAgYXJlIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZGUtcHJpb3JpdGl6ZSB0aG9zZSwgYXMgaXQgd291bGQgYmUgbW9yZSBjaGFsbGVuZ2luZyB0byB0YXJnZXQgdGhlbSBkaXJlY3RseSBpbiBpc29sYXRpb24uCgpTbywgdGhlIGNsZWFyIHRhcmdldHMgZm9yIGZ1enppbmcgYmVjb21lOgoqICAgYGV4dDRfZXh0X21hcF9ibG9ja3NgCiogICBgZXh0NF9lc19jYWNoZV9leHRlbnRgCiogICBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYAoKRmluYWxseSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzcGVjaWFsIGtlcm5lbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgZm9yIGFueSBkZXBlbmRlbmNpZXMuIEkga25vdyBgRVhUNF9GU2AgaXMgdGhlIG1haW4gb25lLCBidXQgYSBxdWljayBgZ3JlcGAgd2lsbCBiZSB0aGUgYmVzdCB3YXkgdG8gdmVyaWZ5IHRoZXJlIGFyZSBubyBoaWRkZW4gcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gdGhlIGJhc2UgZmlsZXN5c3RlbSBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgYEVYVDRfRlNgLiBObyBuZWVkIHRvIGNvbXBsaWNhdGUgdGhpbmdzLCB3ZSYjMzk7bGwga2VlcCBpdCBzaW1wbGUgYW5kIGp1c3QgdXNlIGBFWFQ0X0ZTYC4KCk5vdywgSSB3YW50IHRvIGlkZW50aWZ5IHNvbWUgZ29vZCBhcmVhcyBmb3IgZnV6emluZyB3aXRoaW4gdGhlIEVYVDQgY29kZWJhc2UuIExldCYjMzk7cyBzZWUuLi4gYGV4dDRfZXh0X21hcF9ibG9ja3NgIGxvb2tzIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUuIEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgYmxvY2sgbWFwcGluZywgd2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBleGVjdXRlZCBmcmVxdWVudGx5LiBUaGF0IG1ha2VzIGl0IGEgc29saWQgdGFyZ2V0IGZvciBmdXp6ZXIgY292ZXJhZ2UsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBob3cgaXQgaGFuZGxlcyBleHRlbnRzLiBJIGhhdmUgYSBodW5jaCB0aGF0IGVkZ2UgY2FzZXMgaW4gZXh0ZW50IG1hcHBpbmcgYXJlIGEgZmVydGlsZSBncm91bmQgZm9yIGRpc2NvdmVyaW5nIHZ1bG5lcmFiaWxpdGllcy4KCmBleHQ0X2VzX2NhY2hlX2V4dGVudGAgaXMgYW5vdGhlciBpbnRlcmVzdGluZyBvbmUsIEkmIzM5O2xsIGRlZmluaXRlbHkga2VlcCBhbiBleWUgb24gdGhhdCBvbmUuCgpBbmQsIG9mIGNvdXJzZSwgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AsIGdpdmVuIGl0cyByb2xlIGluIEZJRU1BUCBhbmQgcmVsYXRlZCBxdWVyaWVzLCBoYXMgdG8gYmUgY2hlY2tlZCBhcyB3ZWxsLgoKVG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGgsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AuIElkZW50aWZ5aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBnaXZlIHVzIGNydWNpYWwgY29udGV4dCBhbmQgaGVscCBmb3JtdWxhdGUgbW9yZSB0YXJnZXRlZCBmdXp6aW5nIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHRfbWFwX2Jsb2NrcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM4NzI9ZXh0ZXJuIGludCBleHQ0X2V4dF9pbmRleF90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGV4dGVudHMpO1xuZnMvZXh0NC9leHQ0Lmg6Mzg3MzpleHRlcm4gaW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvZXh0NC5oLTM4NzQtXHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgKm1hcCwgaW50IGZsYWdzKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jPTUyND1zdGF0aWMgY29uc3Qgc3RydWN0IGt1bml0X2V4dF90ZXN0X3BhcmFtIHRlc3Rfc3BsaXRfY29udmVydF9wYXJhbXNbXSA9IHtcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTcxMi1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6NzEzOi8qIFRlc3RzIHRvIHRyaWdnZXIgZXh0NF9leHRfbWFwX2Jsb2NrcygpIC1cdTAwM2UgY29udmVydF9pbml0aWFsaXplZF9leHRlbnQoKSAqL1xuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy03MTQtc3RhdGljIGNvbnN0IHN0cnVjdCBrdW5pdF9leHRfdGVzdF9wYXJhbSB0ZXN0X2NvbnZlcnRfaW5pdGlhbGl6ZWRfcGFyYW1zW10gPSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy04MDktXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjgxMDovKiBUZXN0cyB0byB0cmlnZ2VyIGV4dDRfZXh0X21hcF9ibG9ja3MoKSAtXHUwMDNlIGV4dDRfZXh0X2hhbmRsZV91bndyaXR0ZW5fZXhudGVudHMoKSAqL1xuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy04MTEtc3RhdGljIGNvbnN0IHN0cnVjdCBrdW5pdF9leHRfdGVzdF9wYXJhbSB0ZXN0X2hhbmRsZV91bndyaXR0ZW5fcGFyYW1zW10gPSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzQwOT1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzUzNi0vKlxuZnMvZXh0NC9leHRlbnRzLmM6MzUzNzogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgaWYgc29tZW9uZSB0cmllcyB0byB3cml0ZVxuZnMvZXh0NC9leHRlbnRzLmMtMzUzOC0gKiB0byBhbiB1bndyaXR0ZW4gZXh0ZW50LiBJdCBtYXkgcmVzdWx0IGluIHNwbGl0dGluZyB0aGUgdW53cml0dGVuXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzU1Nz1leHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzc5MC0vKlxuZnMvZXh0NC9leHRlbnRzLmM6Mzc5MTogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgZnJvbVxuZnMvZXh0NC9leHRlbnRzLmMtMzc5Mi0gKiBleHQ0X2dldF9ibG9ja3NfZGlvX3dyaXRlKCkgd2hlbiBESU8gdG8gd3JpdGVcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0zOTkyPWV4dDRfZXh0X2hhbmRsZV91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQwOTAtICpcbmZzL2V4dDQvZXh0ZW50cy5jOjQwOTE6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfbWFwX2Jsb2NrcygpIGFmdGVyIHdlIGZhaWxlZCB0b1xuZnMvZXh0NC9leHRlbnRzLmMtNDA5Mi0gKiBmaW5kIGJsb2NrcyB0aGF0IHdlcmUgYWxyZWFkeSBpbiB0aGUgaW5vZGUmIzM5O3MgZXh0ZW50IHRyZWUuICBIZW5jZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MTE3LSAqIGNsdXN0ZXIgRVhUNF9CMkMoc2JpLCBtYXAtXHUwMDNlbV9sYmxrKS5cdFdlIHdpbGwgdGhlbiByZXR1cm4gMSB0b1xuZnMvZXh0NC9leHRlbnRzLmM6NDExODogKiBzaWduYWwgdG8gZXh0NF9leHRfbWFwX2Jsb2NrcygpIHRoYXQgbWFwLVx1MDAzZW1fcGJsayBzaG91bGQgYmUgdHJlYXRlZFxuZnMvZXh0NC9leHRlbnRzLmMtNDExOS0gKiBhcyBhIG5ldyBcJiMzNDthbGxvY2F0ZWRcJiMzNDsgYmxvY2sgcmVnaW9uLiAgT3RoZXJ3aXNlLCB3ZSB3aWxsIHJldHVybiAwIGFuZFxuZnMvZXh0NC9leHRlbnRzLmM6NDEyMDogKiBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgd2lsbCB0aGVuIGFsbG9jYXRlIG9uZSBvciBtb3JlIG5ldyBjbHVzdGVyc1xuZnMvZXh0NC9leHRlbnRzLmMtNDEyMS0gKiBieSBjYWxsaW5nIGV4dDRfbWJfbmV3X2Jsb2NrcygpLlxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQxOTE9c3RhdGljIGV4dDRfbGJsa190IGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQyNjktICovXG5mcy9leHQ0L2V4dGVudHMuYzo0MjcwOmludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2V4dGVudHMuYy00MjcxLVx0XHRcdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgKm1hcCwgaW50IGZsYWdzKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQyODMtXHRleHRfZGVidWcoaW5vZGUsIFwmIzM0O2Jsb2NrcyAldS8ldSByZXF1ZXN0ZWRcXG5cJiMzNDssIG1hcC1cdTAwM2VtX2xibGssIG1hcC1cdTAwM2VtX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYzo0Mjg0Olx0dHJhY2VfZXh0NF9leHRfbWFwX2Jsb2Nrc19lbnRlcihpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLCBmbGFncyk7XG5mcy9leHQ0L2V4dGVudHMuYy00Mjg1LVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ1NDYtXG5mcy9leHQ0L2V4dGVudHMuYzo0NTQ3Olx0dHJhY2VfZXh0NF9leHRfbWFwX2Jsb2Nrc19leGl0KGlub2RlLCBmbGFncywgbWFwLFxuZnMvZXh0NC9leHRlbnRzLmMtNDU0OC1cdFx0XHRcdCAgICAgICBlcnIgPyBlcnIgOiBhbGxvY2F0ZWQpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ1ODM9c3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ2NTEtXHRcdFx0ZXh0NF9kZWJ1ZyhcJiMzNDtpbm9kZSAjJWxsdTogYmxvY2sgJXU6IGxlbiAldTogXCYjMzQ7XG5mcy9leHQ0L2V4dGVudHMuYzo0NjUyOlx0XHRcdFx0ICAgXCYjMzQ7ZXh0NF9leHRfbWFwX2Jsb2NrcyByZXR1cm5lZCAlZFwmIzM0OyxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ2NTMtXHRcdFx0XHQgICBpbm9kZS1cdTAwM2VpX2lubywgbWFwLm1fbGJsayxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01MDQyPWludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01MDgxLVx0XHRcdFx0ICAgICBcJiMzNDtpbm9kZSAjJWxsdTogYmxvY2sgJXU6IGxlbiAldTogXCYjMzQ7XG5mcy9leHQ0L2V4dGVudHMuYzo1MDgyOlx0XHRcdFx0ICAgICBcJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzIHJldHVybmVkICVkXCYjMzQ7LFxuZnMvZXh0NC9leHRlbnRzLmMtNTA4My1cdFx0XHRcdCAgICAgaW5vZGUtXHUwMDNlaV9pbm8sIG1hcC5tX2xibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NTc3Mj1leHQ0X3N3YXBfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01OTU0LSAqIHJldHVybnMgMC4gIENhbiBhbHNvIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2Rlcy4gIERlcml2ZWQgZnJvbVxuZnMvZXh0NC9leHRlbnRzLmM6NTk1NTogKiBleHQ0X2V4dF9tYXBfYmxvY2tzKCkuXG5mcy9leHQ0L2V4dGVudHMuYy01OTU2LSAqL1xuLS1cbmZzL2V4dDQvaW5vZGUuYz00NjI9c3RhdGljIHZvaWQgZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2soaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDc5LVx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSB7XG5mcy9leHQ0L2lub2RlLmM6NDgwOlx0XHRyZXR2YWwgPSBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG1hcCwgMCk7XG5mcy9leHQ0L2lub2RlLmMtNDgxLVx0fSBlbHNlIHtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTA0PXN0YXRpYyBpbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZihoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01MjEtXHRtYXAyLm1fZmxhZ3MgPSAwO1xuZnMvZXh0NC9pbm9kZS5jOjUyMjpcdHJldHZhbCA9IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXHUwMDI2bWFwMiwgMCk7XG5mcy9leHQ0L2lub2RlLmMtNTIzLVxuLS1cbmZzL2V4dDQvaW5vZGUuYz01NTk9aW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NjUtXHQvKlxuZnMvZXh0NC9pbm9kZS5jOjU2NjpcdCAqIGV4dDRfZXh0X21hcF9ibG9ja3MoKSBtYXkgaGF2ZSBhbHJlYWR5IGNhY2hlZCB0aGUgZnVsbCBleHRlbnQsIHNvXG5mcy9leHQ0L2lub2RlLmMtNTY3LVx0ICogc2VhcmNoIGZpcnN0IHRvIGF2b2lkIHRha2luZyBpX2VzX2xvY2sgZm9yIHdyaXRpbmcuIFRoZSBpbmRpcmVjdFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NzQtXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpXG5mcy9leHQ0L2lub2RlLmM6NTc1Olx0XHRyZXR2YWwgPSBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG1hcCwgZmxhZ3MpO1xuZnMvZXh0NC9pbm9kZS5jLTU3Ni1cdGVsc2Vcbi0tXG5mcy9leHQ0L2lub2RlLmM9NjEzPWludCBleHQ0X21hcF9jcmVhdGVfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTYzNy1cdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkge1xuZnMvZXh0NC9pbm9kZS5jOjYzODpcdFx0cmV0dmFsID0gZXh0NF9leHRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBtYXAsIGZsYWdzKTtcbmZzL2V4dDQvaW5vZGUuYy02MzktXHR9IGVsc2Uge1xuLS1cbmZzL2V4dDQvaW5vZGUuYy02OTItICpcbmZzL2V4dDQvaW5vZGUuYzo2OTM6ICogSWYgZmlsZSB0eXBlIGlzIGV4dGVudHMgYmFzZWQsIGl0IHdpbGwgY2FsbCBleHQ0X2V4dF9tYXBfYmxvY2tzKCksXG5mcy9leHQ0L2lub2RlLmMtNjk0LSAqIE90aGVyd2lzZSwgY2FsbCB3aXRoIGV4dDRfaW5kX21hcF9ibG9ja3MoKSB0byBoYW5kbGUgaW5kaXJlY3QgbWFwcGluZ1xuLS1cbmZzL2V4dDQvaW5vZGUuYz03MDg9aW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy04MTAtXHQgKiBOb3RlIHRoYXQgaWYgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWRcbmZzL2V4dDQvaW5vZGUuYzo4MTE6XHQgKiBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgcmV0dXJucyB3aXRoIGJ1ZmZlciBoZWFkIHVubWFwcGVkXG5mcy9leHQ0L2lub2RlLmMtODEyLVx0ICovXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTgxNi1cdFx0ICogd2UgY29udGludWUgYW5kIGRvIHRoZSBhY3R1YWwgd29yayBpblxuZnMvZXh0NC9pbm9kZS5jOjgxNzpcdFx0ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpXG5mcy9leHQ0L2lub2RlLmMtODE4LVx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBleHQ0IEJsb2NrIE1hcHBpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb2RlIGFnYWluLCBzcGVjaWZpY2FsbHkgdGhlIGJsb2NrIG1hcHBpbmcuIEl0IGxvb2tzIGxpa2UgYGV4dDRfZXh0X21hcF9ibG9ja3NgIGlzIGEgcmVhbCB3b3JraG9yc2UuIEl0JiMzOTtzIGNhbGxlZCBieSBhIHdob2xlIGJ1bmNoIG9mIGNydWNpYWwgZnVuY3Rpb25zOiBgZXh0NF9tYXBfYmxvY2tzYCwgYGV4dDRfbWFwX2NyZWF0ZV9ibG9ja3NgLCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCwgZXZlbiB0aGluZ3MgbGlrZSBgZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2tgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhhdCBzY3JlYW1zICpjb3JlKiBleHRlbnRzIEFQSSBmdW5jdGlvbiB0byBtZSwgbm8gZG91YnQgYWJvdXQgaXQuIEl0JiMzOTtzIGRlZmluaXRlbHkgYW4gQVBJIGVudHJ5cG9pbnQgZm9yIGV4dDQgZXh0ZW50cy4KCkFuZCB0aGVuIHdlIGhhdmUgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCwgd2hpY2ggc2VlbXMgdG8gYmUgdGlnaHRseSBjb3VwbGVkIHdpdGggZXh0ZW50IGNhY2hpbmcuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIExvb2tzIGxpa2UgYW4gaW1wb3J0YW50IGZ1bmN0aW9uIGFzIHdlbGwuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLgoKSSBhbHJlYWR5IGtub3cgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgaXMgYWxzbyBhbiBBUEkgZW50cnlwb2ludCwgYnV0IEkgd2FudCB0byBkaXZlIGEgbGl0dGxlIGRlZXBlciBpbnRvIHRoYXQsIGJ1dCBmaXJzdCwgbGV0JiMzOTtzIHNlZSB3aG8gaXMgY2FsbGluZyBgZXh0NF9lc19jYWNoZV9leHRlbnRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXNfY2FjaGVfZXh0ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmM9NTI0PXN0YXRpYyB2b2lkIGV4dDRfY2FjaGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUzOC1cdFx0aWYgKHByZXYgXHUwMDI2XHUwMDI2IChwcmV2ICE9IGxibGspKVxuZnMvZXh0NC9leHRlbnRzLmM6NTM5Olx0XHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsXG5mcy9leHQ0L2V4dGVudHMuYy01NDAtXHRcdFx0XHRcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFLCBmYWxzZSk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTQzLVx0XHRcdHN0YXR1cyA9IEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOO1xuZnMvZXh0NC9leHRlbnRzLmM6NTQ0Olx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbGJsaywgbGVuLFxuZnMvZXh0NC9leHRlbnRzLmMtNTQ1LVx0XHRcdFx0ICAgICBleHQ0X2V4dF9wYmxvY2soZXgpLCBzdGF0dXMsIGZhbHNlKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00MTkxPXN0YXRpYyBleHQ0X2xibGtfdCBleHQ0X2V4dF9kZXRlcm1pbmVfaW5zZXJ0X2hvbGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MjQxLVx0ZXh0X2RlYnVnKGlub2RlLCBcJiMzNDsgLVx1MDAzZSAldToldVxcblwmIzM0OywgaG9sZV9zdGFydCwgbGVuKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjQyNDI6XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFLFxuZnMvZXh0NC9leHRlbnRzLmMtNDI0My1cdFx0XHQgICAgIGZhbHNlKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00MjcwPWludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDMzNS1cdFx0XHRcdCAgICAgICBFWFQ0X0VYX05PQ0FDSEUpKSlcbmZzL2V4dDQvZXh0ZW50cy5jOjQzMzY6XHRcdFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIGVlX2xlbixcbmZzL2V4dDQvZXh0ZW50cy5jLTQzMzctXHRcdFx0XHRcdFx0ICAgICBlZV9zdGFydCwgc3RhdHVzLFxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz04NDI9c3RhdGljIGludCBfX2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0dXMgKm5ld2VzLFxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MDItICogc3RhdHVzIHRyZWUuIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIG1vZGlmeWluZyBleHRlbnRzLiBUbyBjYWNoZVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjkwMzogKiBvbi1kaXNrIGV4dGVudHMsIHVzZSBleHQ0X2VzX2NhY2hlX2V4dGVudCgpIGluc3RlYWQuXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtOTA0LSAqL1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTkwNT12b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDE0LS8qXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTAxNTogKiBleHQ0X2VzX2NhY2hlX2V4dGVudCgpIGluc2VydHMgaW5mb3JtYXRpb24gaW50byB0aGUgZXh0ZW50IHN0YXR1cyB0cmVlXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAxNi0gKiBvbmx5IGlmIHRoZXJlIGlzIG5vIGV4aXN0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb3Jcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAyMy0gKi9cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDI0OnZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDI1LVx0XHRcdCAgZXh0NF9sYmxrX3QgbGVuLCBleHQ0X2ZzYmxrX3QgcGJsayxcbi0tXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTA3OS1cdF9fZXNfaW5zZXJ0X2V4dGVudChpbm9kZSwgXHUwMDI2bmV3ZXMsIE5VTEwpO1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjEwODA6XHR0cmFjZV9leHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgXHUwMDI2bmV3ZXMpO1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwODEtXHRleHQ0X2VzX3ByaW50X3RyZWUoaW5vZGUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaD0xMzY9ZXh0ZXJuIHZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oLTEzOS1cdFx0XHRcdCAgYm9vbCBkZWxhbGxvY19yZXNlcnZlX3VzZWQpO1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oOjE0MDpleHRlcm4gdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oLTE0MS1cdFx0XHRcdCBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz01MDQ9c3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyNC1cdGlmIChyZXR2YWwgXHUwMDNjPSAwKSB7XG5mcy9leHQ0L2lub2RlLmM6NTI1Olx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLFxuZnMvZXh0NC9pbm9kZS5jLTUyNi1cdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTQ2LVx0XHRcdHN0YXR1cyA9PSBzdGF0dXMyKSB7XG5mcy9leHQ0L2lub2RlLmM6NTQ3Olx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsayxcbmZzL2V4dDQvaW5vZGUuYy01NDgtXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX2xlbiAmIzQzOyBtYXAyLm1fbGVuLCBtYXAtXHUwMDNlbV9wYmxrLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NTEtXHR9IGVsc2Uge1xuZnMvZXh0NC9pbm9kZS5jOjU1MjpcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIG1hcC1cdTAwM2VtX2xlbixcbmZzL2V4dDQvaW5vZGUuYy01NTMtXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cywgdHJ1ZSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU1OT1pbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTYwMS1cdFx0XHRcdEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOIDogRVhURU5UX1NUQVRVU19XUklUVEVOO1xuZnMvZXh0NC9pbm9kZS5jOjYwMjpcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIG1hcC1cdTAwM2VtX2xlbixcbmZzL2V4dDQvaW5vZGUuYy02MDMtXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cywgcHJlX3NlYXJjaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IEV4dGVudCBDYWNoZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYHByZV9zZWFyY2hgIGJvb2xlYW4gdG8gYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgd2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIHRydWUsIGl0IHBlcmZvcm1zIGEgcmVhZCBsb2NrIGFuZCBhIHNlYXJjaCAqYmVmb3JlKiBkb2luZyBhbnl0aGluZyBlbHNlLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcG90ZW50aWFsIHBvaW50IGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGFuZCBlZGdlIGNhc2VzLiBHaXZlbiB0aGF0LCBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIHN5bWJvbHM6IGBleHQ0X2V4dF9tYXBfYmxvY2tzYCwgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCwgYW5kIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLgoKTm93LCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSB3YW50IHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBuZWNlc3Nhcnkgc2V0dXAuIEl0IGxvb2tzIGxpa2UgYEVYVDRfRlNgIGlzIHRoZSBtYWluIHRoaW5nIEkgbmVlZC4gQWxyaWdodCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIE5vIHNwZWNpYWwgZXh0ZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gRXh0ZW50cyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGhpbiBFeHQ0LCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCBmdW5jdGlvbiBpbiBgZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jYCB0byBiZSBzdXJlLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9lc19jYWNoZV9leHRlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTg0Mj1zdGF0aWMgaW50IF9fZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3N0YXR1cyAqbmV3ZXMsXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTkwMi0gKiBzdGF0dXMgdHJlZS4gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgbW9kaWZ5aW5nIGV4dGVudHMuIFRvIGNhY2hlXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6OTAzOiAqIG9uLWRpc2sgZXh0ZW50cywgdXNlIGV4dDRfZXNfY2FjaGVfZXh0ZW50KCkgaW5zdGVhZC5cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MDQtICovXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9OTA1PXZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4tLVxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMTQtLypcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDE1OiAqIGV4dDRfZXNfY2FjaGVfZXh0ZW50KCkgaW5zZXJ0cyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBleHRlbnQgc3RhdHVzIHRyZWVcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDE2LSAqIG9ubHkgaWYgdGhlcmUgaXMgbm8gZXhpc3RpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCByYW5nZSBvclxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDIzLSAqL1xuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjEwMjQ6dm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMjUtXHRcdFx0ICBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxuLS1cbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDc5LVx0X19lc19pbnNlcnRfZXh0ZW50KGlub2RlLCBcdTAwMjZuZXdlcywgTlVMTCk7XG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTA4MDpcdHRyYWNlX2V4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBcdTAwMjZuZXdlcyk7XG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTA4MS1cdGV4dDRfZXNfcHJpbnRfdHJlZShpbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA1OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjE1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEV4dGVudCBDYWNoZSBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgYHByZV9zZWFyY2hgIHBhcmFtZXRlciB0byBgZXh0NF9lc19jYWNoZV9leHRlbnRgLiBUaGUgZ29hbCBpcyBjbGVhcjogb3B0aW1pemUgdGhlIGV4dGVudCBjYWNoZS4gSXQmIzM5O3MgYWJvdXQgYXZvaWRpbmcgdGhlIHdyaXRlIGxvY2sgKGBpX2VzX2xvY2tgKSBvbiB0aGUgZXh0ZW50IGNhY2hlIGlmIHRoZSBleHRlbnQgaXMgKmFscmVhZHkqIGNhY2hlZC4gU21hcnQgbW92ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBtZWFuaW5nIGFueSBleHQ0IGZpbGUgb3BlcmF0aW9uIHRoYXQgZGVhbHMgd2l0aCBibG9jayBtYXBwaW5nIG9yIHF1ZXJpZXMgaXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBmdXp6IHRob3JvdWdobHkuCgpMZXQgbWUgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlOiBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AsIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgKG9mIGNvdXJzZSksIGFuZCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHByZV9zZWFyY2hgIHBhcmFtZXRlciBpbnRlcmFjdHMgd2l0aCB0aGVzZSBhbmQgd2hhdCBpdCBjaGFuZ2VzIGluIHRlcm1zIG9mIGxvY2tpbmcgYW5kIHBlcmZvcm1hbmNlLiBTaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEVYVDQsIGBFWFQ0X0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLgoKRmlyc3QsIEkgdGhpbmsgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gVGhhdCB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIHJldmlldyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9tYXBfcXVlcnlfYmxvY2tzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MjEwPXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMjQzLS8qXG5mcy9leHQ0L2V4dDQuaDoyNDQ6ICogVGhpcyBpcyBmb3IgdXNlIGluIGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcygpIGZvciBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBjYW5cbmZzL2V4dDQvZXh0NC5oLTI0NS0gKiBoYXZlIGEgcGh5c2ljYWxseSBhbmQgbG9naWNhbGx5IGNvbnRpZ3VvdXMgYmxvY2tzIHNwbGl0IGFjcm9zcyB0d28gbGVhZlxuLS1cbmZzL2V4dDQvZXh0NC5oLTI0Ny0gKiB0byBrbm93IHdoZXRoZXIgdGhlIHJldHVybmVkIGV4dGVudCBpcyBsYXN0IGluIGxlYWYuIElmIHllcywgdGhlbiBsb29rdXAgZm9yXG5mcy9leHQ0L2V4dDQuaDoyNDg6ICogbmV4dCBpbiBsZWFmIGJsb2NrIGluIGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoKS5cbmZzL2V4dDQvZXh0NC5oLTI0OS0gKiAtIFRoaXMgaXMgbmV2ZXIgZ29pbmcgdG8gYmUgYWRkZWQgdG8gYW55IGJ1ZmZlciBoZWFkIHN0YXRlLlxuLS1cbmZzL2V4dDQvZXh0NC5oPTY4ND1lbnVtIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC03NTItLypcbmZzL2V4dDQvZXh0NC5oOjc1MzogKiBleHQ0X21hcF9xdWVyeV9ibG9ja3MoKSB1c2VzIHRoaXMgZmlsdGVyIG1hc2sgdG8gZmlsdGVyIHRoZSBmbGFncyBuZWVkZWQgdG9cbmZzL2V4dDQvZXh0NC5oLTc1NC0gKiBwYXNzIHdoaWxlIGxvb2t1cC9xdWVyeWluZyBvZiBvbiBkaXNrIGV4dGVudCB0cmVlLlxuLS1cbmZzL2V4dDQvZXh0NC5oPTM4ODg9ZXh0ZXJuIGludCBleHQ0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvZXh0NC5oLTM4ODktXHRcdFx0ICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xuZnMvZXh0NC9leHQ0Lmg6Mzg5MDpleHRlcm4gaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9leHQ0LmgtMzg5MS1cdFx0XHRcdCAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MzU4PXN0YXRpYyBpbnQgY2hlY2tfYnVmZmVyKGNoYXIgKmJ1ZiwgaW50IGMsIGludCBzaXplKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzcyLS8qXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjM3MzogKiBTaW11bGF0ZSBhIG1hcCBibG9jayBjYWxsIGJ5IGZpcnN0IGNhbGxpbmcgZXh0NF9tYXBfcXVlcnlfYmxvY2tzKCkgdG9cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzc0LSAqIGNvcnJlY3RseSBwb3B1bGF0ZSBtYXAgZmxhZ3MgYW5kIHBibGsgYW5kIHRoZW4gY2FsbCB0aGVcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jPTM3OT1zdGF0aWMgdm9pZCBleHQ0X21hcF9jcmVhdGVfYmxvY2tzX2hlbHBlcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4tLVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy0zODUtXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjM4NjpcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCBmbGFncyk7XG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTM4Ny1cdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzg4LVx0XHRLVU5JVF9GQUlMKHRlc3QsXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjM4OTpcdFx0XHQgICBcJiMzNDtleHQ0X21hcF9xdWVyeV9ibG9ja3MoKSBmYWlsZWQuIENhbm5vdCBwcm9jZWVkXFxuXCYjMzQ7KTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzkwLVx0XHRyZXR1cm47XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjMxNT1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9pc3N1ZV96ZXJvb3V0KTtcbmZzL2V4dDQvZXh0ZW50cy5jOjYzMTY6RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrcyk7XG5mcy9leHQ0L2V4dGVudHMuYy02MzE3LSNlbmRpZlxuLS1cbmZzL2V4dDQvaW5vZGUuYz00NjI9c3RhdGljIHZvaWQgZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2soaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTAzLVxuZnMvZXh0NC9pbm9kZS5jOjUwNDpzdGF0aWMgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL2V4dDQvaW5vZGUuYy01MDUtXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01NTgtXG5mcy9leHQ0L2lub2RlLmM6NTU5OmludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvaW5vZGUuYy01NjAtXHRcdFx0ICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsIGludCBmbGFncylcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjA0LVx0fSBlbHNlIHtcbmZzL2V4dDQvaW5vZGUuYzo2MDU6XHRcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlLCBpbm9kZSwgbWFwLFxuZnMvZXh0NC9pbm9kZS5jLTYwNi1cdFx0XHRcdFx0XHRcdCAgICBvcmlnX21sZW4pO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz03MDg9aW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy03OTItXHRkb3duX3JlYWQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbmZzL2V4dDQvaW5vZGUuYzo3OTM6XHRyZXR2YWwgPSBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbWFwLCBmbGFncyk7XG5mcy9leHQ0L2lub2RlLmMtNzk0LVx0dXBfcmVhZCgoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTE5MjM9c3RhdGljIGludCBleHQ0X2RhX21hcF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0xOTc4LVx0ZWxzZVxuZnMvZXh0NC9pbm9kZS5jOjE5Nzk6XHRcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCAwKTtcbmZzL2V4dDQvaW5vZGUuYy0xOTgwLVx0dXBfcmVhZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YV9zZW0pO1xuLS1cbmZzL2V4dDQvaW5vZGUuYy0yMDAxLVx0fSBlbHNlIGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG5mcy9leHQ0L2lub2RlLmM6MjAwMjpcdFx0cmV0dmFsID0gZXh0NF9tYXBfcXVlcnlfYmxvY2tzKE5VTEwsIGlub2RlLCBtYXAsIDApO1xuZnMvZXh0NC9pbm9kZS5jLTIwMDMtXHRcdGlmIChyZXR2YWwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDU6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NTEKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHBhdGhzLgoKKipGb2N1cyBBcmVhcyBpbiB0aGUgZXh0NCBCbG9jayBNYXBwaW5nIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBhbmQgd2hlcmUgSSBzaG91bGQgYmUgY29uY2VudHJhdGluZyBteSBlZmZvcnRzLiBUaGUgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBhIGtleSBzcG90LiBJdCYjMzk7cyBlc3NlbnRpYWxseSB0aGUgd29ya2hvcnNlLCBiZWluZyBjYWxsZWQgYnkgYm90aCBgZXh0NF9tYXBfYmxvY2tzYCBhbmQgYGV4dDRfZGFfbWFwX2Jsb2Nrc2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSAqdmVyeSogY29tbW9uIGFuZCBwb3RlbnRpYWxseSBjcml0aWNhbCBwYXRoIGZvciBvcHRpbWl6YXRpb24uIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgdGhhdCBhbnkgaW5lZmZpY2llbmNpZXMgaGVyZSBhcmUgYW1wbGlmaWVkIGFjcm9zcyB0aGUgYm9hcmQuCgpTaW5jZSBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCBpcyBzbyBjZW50cmFsLCBJIHNob3VsZCBhbHNvIGxvb2sgY2xvc2VseSBhdCBpdHMgY2FsbGVycy4gU28sIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCBhbmQgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YCBhbHNvIHNlZW0gbGlrZSBleGNlbGxlbnQgY2FuZGlkYXRlcyBmb3IgaW4tZGVwdGggYW5hbHlzaXMuIFRoZXkgZGlyZWN0bHkgZmVlZCBpbnRvIHRoZSBjb3JlIGJsb2NrIG1hcHBpbmcgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRob3NlIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLgoKQWxyaWdodCwgSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZXh0X21hcF9ibG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9lc19jYWNoZV9leHRlbnQmIzM0OywKICAgICYjMzQ7ZXh0NF9tYXBfcXVlcnlfYmxvY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGV4dGVudCBzdGF0dXMgY2FjaGluZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBhIGBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgdG8gYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC4gVGhpcyBhbGxvd3MgYXZvaWRpbmcgYSB3cml0ZSBsb2NrIGlmIHRoZSBleHRlbnQgaXMgYWxyZWFkeSBjYWNoZWQsIG9wdGltaXppbmcgYmxvY2sgbWFwcGluZyBhbmQgcXVlcnlpbmcgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfZXNfY2FjaGVfZXh0ZW50JiMzNDssCiAgICAmIzM0O2V4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6MTM6NDYuOTEyMTg4MDA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3Njg3MTU3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXh0X21hcF9ibG9ja3NcIixcbiAgICBcImV4dDRfZXNfY2FjaGVfZXh0ZW50XCIsXG4gICAgXCJleHQ0X21hcF9xdWVyeV9ibG9ja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxMzo0Ni45MTIxOTQzOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5ODY3MTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIzNzBjMzc5OGRkZWM3YWYyMTQ0MmUzOTk5MWJlMjMwOThjMjY2MmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDU6MTM6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuY1xcbmluZGV4IDkxYzk3YWY2NGIzMTc3Li44NWUyMTM3NjFhMThkNSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuQEAgLTUzNywxMiArNTM3LDEyIEBAIHN0YXRpYyB2b2lkIGV4dDRfY2FjaGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0XFx0aWYgKHByZXYgXFx1MDAyNlxcdTAwMjYgKHByZXYgIT0gbGJsaykpXFxuIFxcdFxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBFWFRFTlRfU1RBVFVTX0hPTEUsIGZhbHNlKTtcXG4gXFxuIFxcdFxcdGlmIChleHQ0X2V4dF9pc191bndyaXR0ZW4oZXgpKVxcbiBcXHRcXHRcXHRzdGF0dXMgPSBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTjtcXG4gXFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGxibGssIGxlbixcXG4tXFx0XFx0XFx0XFx0ICAgICBleHQ0X2V4dF9wYmxvY2soZXgpLCBzdGF0dXMpO1xcbitcXHRcXHRcXHRcXHQgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cywgZmFsc2UpO1xcbiBcXHRcXHRwcmV2ID0gbGJsayArIGxlbjtcXG4gXFx0fVxcbiB9XFxuQEAgLTQyMzksNyArNDIzOSw4IEBAIHN0YXRpYyBleHQ0X2xibGtfdCBleHQ0X2V4dF9kZXRlcm1pbmVfaW5zZXJ0X2hvbGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4gaW5zZXJ0X2hvbGU6XFxuIFxcdC8qIFB1dCBqdXN0IGZvdW5kIGdhcCBpbnRvIGNhY2hlIHRvIHNwZWVkIHVwIHN1YnNlcXVlbnQgcmVxdWVzdHMgKi9cXG4gXFx0ZXh0X2RlYnVnKGlub2RlLCBcXFwiIC1cXHUwMDNlICV1OiV1XFxcXG5cXFwiLCBob2xlX3N0YXJ0LCBsZW4pO1xcbi1cXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFKTtcXG4rXFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGhvbGVfc3RhcnQsIGxlbiwgfjAsIEVYVEVOVF9TVEFUVVNfSE9MRSxcXG4rXFx0XFx0XFx0ICAgICBmYWxzZSk7XFxuIFxcbiBcXHQvKiBVcGRhdGUgaG9sZV9sZW4gdG8gcmVmbGVjdCBob2xlIHNpemUgYWZ0ZXIgbGJsayAqL1xcbiBcXHRpZiAoaG9sZV9zdGFydCAhPSBsYmxrKVxcbkBAIC00MzEwLDEzICs0MzExLDE1IEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdGV4dDRfbGJsa190IGVlX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtXFx1MDAzZWVlX2Jsb2NrKTtcXG4gXFx0XFx0ZXh0NF9mc2Jsa190IGVlX3N0YXJ0ID0gZXh0NF9leHRfcGJsb2NrKGV4KTtcXG4gXFx0XFx0dW5zaWduZWQgc2hvcnQgZWVfbGVuO1xcbi1cXG4rXFx0XFx0dW5zaWduZWQgaW50IHN0YXR1cztcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIHVud3JpdHRlbiBleHRlbnRzIGFyZSB0cmVhdGVkIGFzIGhvbGVzLCBleGNlcHQgdGhhdFxcbiBcXHRcXHQgKiB3ZSBzcGxpdCBvdXQgaW5pdGlhbGl6ZWQgcG9ydGlvbnMgZHVyaW5nIGEgd3JpdGUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRlZV9sZW4gPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7XFxuK1xcdFxcdHN0YXR1cyA9IGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkgP1xcbitcXHRcXHRcXHQgRVhURU5UX1NUQVRVU19VTldSSVRURU4gOiBFWFRFTlRfU1RBVFVTX1dSSVRURU47XFxuIFxcbiBcXHRcXHR0cmFjZV9leHQ0X2V4dF9zaG93X2V4dGVudChpbm9kZSwgZWVfYmxvY2ssIGVlX3N0YXJ0LCBlZV9sZW4pO1xcbiBcXG5AQCAtNDMyOCw2ICs0MzMxLDEyIEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dF9kZWJ1Zyhpbm9kZSwgXFxcIiV1IGZpdCBpbnRvICV1OiVkIC1cXHUwMDNlICVsbHVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCAgbWFwLVxcdTAwM2VtX2xibGssIGVlX2Jsb2NrLCBlZV9sZW4sIG5ld2Jsb2NrKTtcXG4gXFxuK1xcdFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgKEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgfFxcbitcXHRcXHRcXHRcXHQgICAgICAgRVhUNF9FWF9OT0NBQ0hFKSkpXFxuK1xcdFxcdFxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBlZV9ibG9jaywgZWVfbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVlX3N0YXJ0LCBzdGF0dXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgdHJ1ZSk7XFxuK1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBJZiB0aGUgZXh0ZW50IGlzIGluaXRpYWxpemVkIGNoZWNrIHdoZXRoZXIgdGhlXFxuIFxcdFxcdFxcdCAqIGNhbGxlciB3YW50cyB0byBjb252ZXJ0IGl0IHRvIHVud3JpdHRlbi5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jIGIvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jXFxuaW5kZXggNmU0YTE5MWU4MjE5MTUuLjVhMDM4NzhiMDYxNjAyIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY1xcbisrKyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY1xcbkBAIC0xMDIzLDcgKzEwMjMsNyBAQCB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbiAgKi9cXG4gdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbiBcXHRcXHRcXHQgIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXFxuLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IHN0YXR1cylcXG4rXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgc3RhdHVzLCBib29sIHByZV9zZWFyY2gpXFxuIHtcXG4gXFx0c3RydWN0IGV4dGVudF9zdGF0dXMgKmVzO1xcbiBcXHRzdHJ1Y3QgZXh0ZW50X3N0YXR1cyBjaGtlcywgbmV3ZXM7XFxuQEAgLTEwNDMsNiArMTA0MywyMSBAQCB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXFxuIFxcbiBcXHRCVUdfT04oZW5kIFxcdTAwM2MgbGJsayk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBdm9pZCB0YWtpbmcgaV9lc19sb2NrIGZvciB3cml0aW5nIGlmIHRoZSBlbnRpcmUgZXh0ZW50IGlzIGFscmVhZHlcXG4rXFx0ICogY2FjaGVkLiBUaGUgd3JpdGUtbG9ja2VkIHNlYXJjaCBiZWxvdyByZWNoZWNrcyBhZnRlciBhIG1pc3MuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJlX3NlYXJjaCkge1xcbitcXHRcXHRyZWFkX2xvY2soXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXNfbG9jayk7XFxuK1xcdFxcdGVzID0gX19lc190cmVlX3NlYXJjaChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9lc190cmVlLnJvb3QsIGxibGspO1xcbitcXHRcXHRpZiAoZXMgXFx1MDAyNlxcdTAwMjYgZXMtXFx1MDAzZWVzX2xibGsgXFx1MDAzYz0gbGJsayBcXHUwMDI2XFx1MDAyNiBleHQ0X2VzX2VuZChlcykgXFx1MDAzZT0gZW5kIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhX19lc19jaGVja19leHRlbnRfc3RhdHVzKGVzLCBzdGF0dXMsIE5VTEwpKSB7XFxuK1xcdFxcdFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2VzX2xvY2spO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXNfbG9jayk7XFxuK1xcdH1cXG4rXFxuIFxcdHdyaXRlX2xvY2soXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZXNfbG9jayk7XFxuIFxcdGVzID0gX19lc190cmVlX3NlYXJjaChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9lc190cmVlLnJvb3QsIGxibGspO1xcbiBcXHRpZiAoZXMgXFx1MDAyNlxcdTAwMjYgZXMtXFx1MDAzZWVzX2xibGsgXFx1MDAzYz0gZW5kKSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaCBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaFxcbmluZGV4IGYzMzk2Y2YzMmI0NDY0Li5jMmRhNzJlM2M4MmJhNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhcXG4rKysgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhcXG5AQCAtMTM5LDcgKzEzOSw3IEBAIGV4dGVybiB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbiBcXHRcXHRcXHRcXHQgIGJvb2wgZGVsYWxsb2NfcmVzZXJ2ZV91c2VkKTtcXG4gZXh0ZXJuIHZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG4gXFx0XFx0XFx0XFx0IGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXFxuLVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgc3RhdHVzKTtcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzdGF0dXMsIGJvb2wgcHJlX3NlYXJjaCk7XFxuIGV4dGVybiB2b2lkIGV4dDRfZXNfcmVtb3ZlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbiBcXHRcXHRcXHRcXHQgIGV4dDRfbGJsa190IGxlbik7XFxuIGV4dGVybiB2b2lkIGV4dDRfZXNfZmluZF9leHRlbnRfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSxcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLmQ0MzI2NmM0ODk3ODU4IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC01MjMsNyArNTIzLDcgQEAgc3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2M9IDApIHtcXG4gXFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBtYXAtXFx1MDAzZW1fbGVuLFxcbi1cXHRcXHRcXHRcXHQgICAgIG1hcC1cXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xcbitcXHRcXHRcXHRcXHQgICAgIG1hcC1cXHUwMDNlbV9wYmxrLCBzdGF0dXMsIHRydWUpO1xcbiBcXHRcXHRyZXR1cm4gbWFwLVxcdTAwM2VtX2xlbjtcXG4gXFx0fVxcbiBcXG5AQCAtNTQ2LDExICs1NDYsMTEgQEAgc3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdHN0YXR1cyA9PSBzdGF0dXMyKSB7XFxuIFxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsayxcXG4gXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fbGVuICsgbWFwMi5tX2xlbiwgbWFwLVxcdTAwM2VtX3BibGssXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RhdHVzKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBzdGF0dXMsIHRydWUpO1xcbiBcXHRcXHRtYXAtXFx1MDAzZW1fbGVuICs9IG1hcDIubV9sZW47XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgbWFwLVxcdTAwM2VtX2xlbixcXG4tXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fcGJsaywgc3RhdHVzKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIG1hcC1cXHUwMDNlbV9sZW47XFxuQEAgLTU2Miw2ICs1NjIsMTMgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHR1bnNpZ25lZCBpbnQgc3RhdHVzO1xcbiBcXHRpbnQgcmV0dmFsO1xcbiBcXHR1bnNpZ25lZCBpbnQgb3JpZ19tbGVuID0gbWFwLVxcdTAwM2VtX2xlbjtcXG4rXFx0LypcXG4rXFx0ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpIG1heSBoYXZlIGFscmVhZHkgY2FjaGVkIHRoZSBmdWxsIGV4dGVudCwgc29cXG4rXFx0ICogc2VhcmNoIGZpcnN0IHRvIGF2b2lkIHRha2luZyBpX2VzX2xvY2sgZm9yIHdyaXRpbmcuIFRoZSBpbmRpcmVjdFxcbitcXHQgKiBwYXRoIGRvZXMgbm90IHByZXBvcHVsYXRlIHRoZSBFUyB0cmVlIGFmdGVyIHRoZSBpbml0aWFsIGxvb2t1cCBtaXNzLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBwcmVfc2VhcmNoID0gZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIEVYVDRfSU5PREVfRVhURU5UUyk7XFxuIFxcbiBcXHRmbGFncyBcXHUwMDI2PSBFWFQ0X0VYX1FVRVJZX0ZJTFRFUjtcXG4gXFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKVxcbkBAIC01OTMsNyArNjAwLDcgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRzdGF0dXMgPSBtYXAtXFx1MDAzZW1fZmxhZ3MgXFx1MDAyNiBFWFQ0X01BUF9VTldSSVRURU4gP1xcbiBcXHRcXHRcXHRcXHRFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjtcXG4gXFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBtYXAtXFx1MDAzZW1fbGVuLFxcbi1cXHRcXHRcXHRcXHQgICAgIG1hcC1cXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xcbitcXHRcXHRcXHRcXHQgICAgIG1hcC1cXHUwMDNlbV9wYmxrLCBzdGF0dXMsIHByZV9zZWFyY2gpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZXR2YWwgPSBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZSwgaW5vZGUsIG1hcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG9yaWdfbWxlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjEzOjQ3LjgxMTkzNDM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Mjk4Njg5NTU5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfZXh0X21hcF9ibG9ja3NcIixcbiAgICBcImV4dDRfZXNfY2FjaGVfZXh0ZW50XCIsXG4gICAgXCJleHQ0X21hcF9xdWVyeV9ibG9ja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBleHRlbnQgc3RhdHVzIGNhY2hpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYSBgcHJlX3NlYXJjaGAgcGFyYW1ldGVyIHRvIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAuIFRoaXMgYWxsb3dzIGF2b2lkaW5nIGEgd3JpdGUgbG9jayBpZiB0aGUgZXh0ZW50IGlzIGFscmVhZHkgY2FjaGVkLCBvcHRpbWl6aW5nIGJsb2NrIG1hcHBpbmcgYW5kIHF1ZXJ5aW5nIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMzcwYzM3OThkZGVjN2FmMjE0NDJlMzk5OTFiZTIzMDk4YzI2NjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMDU6MTM6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCA5MWM5N2FmNjRiMzE3Ny4uODVlMjEzNzYxYTE4ZDUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC01MzcsMTIgKzUzNywxMiBAQCBzdGF0aWMgdm9pZCBleHQ0X2NhY2hlX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0aWYgKHByZXYgXHUwMDI2XHUwMDI2IChwcmV2ICE9IGxibGspKVxuIFx0XHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBwcmV2LCBsYmxrIC0gcHJldiwgfjAsXG4tXHRcdFx0XHRcdCAgICAgRVhURU5UX1NUQVRVU19IT0xFKTtcbitcdFx0XHRcdFx0ICAgICBFWFRFTlRfU1RBVFVTX0hPTEUsIGZhbHNlKTtcbiBcbiBcdFx0aWYgKGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkpXG4gXHRcdFx0c3RhdHVzID0gRVhURU5UX1NUQVRVU19VTldSSVRURU47XG4gXHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBsYmxrLCBsZW4sXG4tXHRcdFx0XHQgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cyk7XG4rXHRcdFx0XHQgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cywgZmFsc2UpO1xuIFx0XHRwcmV2ID0gbGJsayArIGxlbjtcbiBcdH1cbiB9XG5AQCAtNDIzOSw3ICs0MjM5LDggQEAgc3RhdGljIGV4dDRfbGJsa190IGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIGluc2VydF9ob2xlOlxuIFx0LyogUHV0IGp1c3QgZm91bmQgZ2FwIGludG8gY2FjaGUgdG8gc3BlZWQgdXAgc3Vic2VxdWVudCByZXF1ZXN0cyAqL1xuIFx0ZXh0X2RlYnVnKGlub2RlLCBcIiAtXHUwMDNlICV1OiV1XFxuXCIsIGhvbGVfc3RhcnQsIGxlbik7XG4tXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgaG9sZV9zdGFydCwgbGVuLCB+MCwgRVhURU5UX1NUQVRVU19IT0xFKTtcbitcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBob2xlX3N0YXJ0LCBsZW4sIH4wLCBFWFRFTlRfU1RBVFVTX0hPTEUsXG4rXHRcdFx0ICAgICBmYWxzZSk7XG4gXG4gXHQvKiBVcGRhdGUgaG9sZV9sZW4gdG8gcmVmbGVjdCBob2xlIHNpemUgYWZ0ZXIgbGJsayAqL1xuIFx0aWYgKGhvbGVfc3RhcnQgIT0gbGJsaylcbkBAIC00MzEwLDEzICs0MzExLDE1IEBAIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGV4dDRfbGJsa190IGVlX2Jsb2NrID0gbGUzMl90b19jcHUoZXgtXHUwMDNlZWVfYmxvY2spO1xuIFx0XHRleHQ0X2ZzYmxrX3QgZWVfc3RhcnQgPSBleHQ0X2V4dF9wYmxvY2soZXgpO1xuIFx0XHR1bnNpZ25lZCBzaG9ydCBlZV9sZW47XG4tXG4rXHRcdHVuc2lnbmVkIGludCBzdGF0dXM7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIHVud3JpdHRlbiBleHRlbnRzIGFyZSB0cmVhdGVkIGFzIGhvbGVzLCBleGNlcHQgdGhhdFxuIFx0XHQgKiB3ZSBzcGxpdCBvdXQgaW5pdGlhbGl6ZWQgcG9ydGlvbnMgZHVyaW5nIGEgd3JpdGUuXG4gXHRcdCAqL1xuIFx0XHRlZV9sZW4gPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7XG4rXHRcdHN0YXR1cyA9IGV4dDRfZXh0X2lzX3Vud3JpdHRlbihleCkgP1xuK1x0XHRcdCBFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjtcbiBcbiBcdFx0dHJhY2VfZXh0NF9leHRfc2hvd19leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9zdGFydCwgZWVfbGVuKTtcbiBcbkBAIC00MzI4LDYgKzQzMzEsMTIgQEAgaW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHRfZGVidWcoaW5vZGUsIFwiJXUgZml0IGludG8gJXU6JWQgLVx1MDAzZSAlbGx1XFxuXCIsXG4gXHRcdFx0XHQgIG1hcC1cdTAwM2VtX2xibGssIGVlX2Jsb2NrLCBlZV9sZW4sIG5ld2Jsb2NrKTtcbiBcbitcdFx0XHRpZiAoIShmbGFncyBcdTAwMjYgKEVYVDRfR0VUX0JMT0NLU19DUkVBVEUgfFxuK1x0XHRcdFx0ICAgICAgIEVYVDRfRVhfTk9DQUNIRSkpKVxuK1x0XHRcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9sZW4sXG4rXHRcdFx0XHRcdFx0ICAgICBlZV9zdGFydCwgc3RhdHVzLFxuK1x0XHRcdFx0XHRcdCAgICAgdHJ1ZSk7XG4rXG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgZXh0ZW50IGlzIGluaXRpYWxpemVkIGNoZWNrIHdoZXRoZXIgdGhlXG4gXHRcdFx0ICogY2FsbGVyIHdhbnRzIHRvIGNvbnZlcnQgaXQgdG8gdW53cml0dGVuLlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYyBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY1xuaW5kZXggNmU0YTE5MWU4MjE5MTUuLjVhMDM4NzhiMDYxNjAyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jXG4rKysgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmNcbkBAIC0xMDIzLDcgKzEwMjMsNyBAQCB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuICAqL1xuIHZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbiBcdFx0XHQgIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXG4tXHRcdFx0ICB1bnNpZ25lZCBpbnQgc3RhdHVzKVxuK1x0XHRcdCAgdW5zaWduZWQgaW50IHN0YXR1cywgYm9vbCBwcmVfc2VhcmNoKVxuIHtcbiBcdHN0cnVjdCBleHRlbnRfc3RhdHVzICplcztcbiBcdHN0cnVjdCBleHRlbnRfc3RhdHVzIGNoa2VzLCBuZXdlcztcbkBAIC0xMDQzLDYgKzEwNDMsMjEgQEAgdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFxuIFx0QlVHX09OKGVuZCBcdTAwM2MgbGJsayk7XG4gXG4rXHQvKlxuK1x0ICogQXZvaWQgdGFraW5nIGlfZXNfbG9jayBmb3Igd3JpdGluZyBpZiB0aGUgZW50aXJlIGV4dGVudCBpcyBhbHJlYWR5XG4rXHQgKiBjYWNoZWQuIFRoZSB3cml0ZS1sb2NrZWQgc2VhcmNoIGJlbG93IHJlY2hlY2tzIGFmdGVyIGEgbWlzcy5cbitcdCAqL1xuK1x0aWYgKHByZV9zZWFyY2gpIHtcbitcdFx0cmVhZF9sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbitcdFx0ZXMgPSBfX2VzX3RyZWVfc2VhcmNoKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc190cmVlLnJvb3QsIGxibGspO1xuK1x0XHRpZiAoZXMgXHUwMDI2XHUwMDI2IGVzLVx1MDAzZWVzX2xibGsgXHUwMDNjPSBsYmxrIFx1MDAyNlx1MDAyNiBleHQ0X2VzX2VuZChlcykgXHUwMDNlPSBlbmQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhX19lc19jaGVja19leHRlbnRfc3RhdHVzKGVzLCBzdGF0dXMsIE5VTEwpKSB7XG4rXHRcdFx0cmVhZF91bmxvY2soXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VzX2xvY2spO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRyZWFkX3VubG9jayhcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXNfbG9jayk7XG4rXHR9XG4rXG4gXHR3cml0ZV9sb2NrKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lc19sb2NrKTtcbiBcdGVzID0gX19lc190cmVlX3NlYXJjaChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZXNfdHJlZS5yb290LCBsYmxrKTtcbiBcdGlmIChlcyBcdTAwMjZcdTAwMjYgZXMtXHUwMDNlZXNfbGJsayBcdTAwM2M9IGVuZCkge1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaCBiL2ZzL2V4dDQvZXh0ZW50c19zdGF0dXMuaFxuaW5kZXggZjMzOTZjZjMyYjQ0NjQuLmMyZGE3MmUzYzgyYmE3IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oXG4rKysgYi9mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmhcbkBAIC0xMzksNyArMTM5LDcgQEAgZXh0ZXJuIHZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXG4gXHRcdFx0XHQgIGJvb2wgZGVsYWxsb2NfcmVzZXJ2ZV91c2VkKTtcbiBleHRlcm4gdm9pZCBleHQ0X2VzX2NhY2hlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxuIFx0XHRcdFx0IGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXG4tXHRcdFx0XHQgdW5zaWduZWQgaW50IHN0YXR1cyk7XG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IHN0YXR1cywgYm9vbCBwcmVfc2VhcmNoKTtcbiBleHRlcm4gdm9pZCBleHQ0X2VzX3JlbW92ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcbiBcdFx0XHRcdCAgZXh0NF9sYmxrX3QgbGVuKTtcbiBleHRlcm4gdm9pZCBleHQ0X2VzX2ZpbmRfZXh0ZW50X3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uZDQzMjY2YzQ4OTc4NTggMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTUyMyw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc19uZXh0X2luX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSxcbiBcbiBcdGlmIChyZXR2YWwgXHUwMDNjPSAwKSB7XG4gXHRcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXHUwMDNlbV9sYmxrLCBtYXAtXHUwMDNlbV9sZW4sXG4tXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cyk7XG4rXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX3BibGssIHN0YXR1cywgdHJ1ZSk7XG4gXHRcdHJldHVybiBtYXAtXHUwMDNlbV9sZW47XG4gXHR9XG4gXG5AQCAtNTQ2LDExICs1NDYsMTEgQEAgc3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0c3RhdHVzID09IHN0YXR1czIpIHtcbiBcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssXG4gXHRcdFx0XHQgICAgIG1hcC1cdTAwM2VtX2xlbiArIG1hcDIubV9sZW4sIG1hcC1cdTAwM2VtX3BibGssXG4tXHRcdFx0XHQgICAgIHN0YXR1cyk7XG4rXHRcdFx0XHQgICAgIHN0YXR1cywgdHJ1ZSk7XG4gXHRcdG1hcC1cdTAwM2VtX2xlbiArPSBtYXAyLm1fbGVuO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cdTAwM2VtX2xibGssIG1hcC1cdTAwM2VtX2xlbixcbi1cdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzKTtcbitcdFx0XHRcdCAgICAgbWFwLVx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcbiBcdH1cbiBcbiBcdHJldHVybiBtYXAtXHUwMDNlbV9sZW47XG5AQCAtNTYyLDYgKzU2MiwxMyBAQCBpbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR1bnNpZ25lZCBpbnQgc3RhdHVzO1xuIFx0aW50IHJldHZhbDtcbiBcdHVuc2lnbmVkIGludCBvcmlnX21sZW4gPSBtYXAtXHUwMDNlbV9sZW47XG4rXHQvKlxuK1x0ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpIG1heSBoYXZlIGFscmVhZHkgY2FjaGVkIHRoZSBmdWxsIGV4dGVudCwgc29cbitcdCAqIHNlYXJjaCBmaXJzdCB0byBhdm9pZCB0YWtpbmcgaV9lc19sb2NrIGZvciB3cml0aW5nLiBUaGUgaW5kaXJlY3RcbitcdCAqIHBhdGggZG9lcyBub3QgcHJlcG9wdWxhdGUgdGhlIEVTIHRyZWUgYWZ0ZXIgdGhlIGluaXRpYWwgbG9va3VwIG1pc3MuXG4rXHQgKi9cbitcdGJvb2wgcHJlX3NlYXJjaCA9IGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLFxuK1x0XHRcdFx0XHQgICAgICBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuIFxuIFx0ZmxhZ3MgXHUwMDI2PSBFWFQ0X0VYX1FVRVJZX0ZJTFRFUjtcbiBcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSlcbkBAIC01OTMsNyArNjAwLDcgQEAgaW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdGF0dXMgPSBtYXAtXHUwMDNlbV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfVU5XUklUVEVOID9cbiBcdFx0XHRcdEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOIDogRVhURU5UX1NUQVRVU19XUklUVEVOO1xuIFx0XHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbWFwLVx1MDAzZW1fbGJsaywgbWFwLVx1MDAzZW1fbGVuLFxuLVx0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMpO1xuK1x0XHRcdFx0ICAgICBtYXAtXHUwMDNlbV9wYmxrLCBzdGF0dXMsIHByZV9zZWFyY2gpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmV0dmFsID0gZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZihoYW5kbGUsIGlub2RlLCBtYXAsXG4gXHRcdFx0XHRcdFx0XHQgICAgb3JpZ19tbGVuKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjEzOjQ3LjgxMTkzNjY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ2MzcyOTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgZXh0NCBFeHRlbnQgQ2FjaGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIGFuZCBpdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5nZSB0aGF0IG1vZGlmaWVzIGBmcy9leHQ0L2V4dGVudHMuY2AsIGBmcy9leHQ0L2V4dGVudHNfc3RhdHVzLmNgLCBgZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oYCwgYW5kIGBmcy9leHQ0L2lub2RlLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgYSBgYm9vbCBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgdG8gdGhlIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgZnVuY3Rpb24uIEVzc2VudGlhbGx5LCBpZiB0aGlzIGBwcmVfc2VhcmNoYCBmbGFnIGlzIHNldCB0byB0cnVlLCBpdCBtZWFucyB0aGUgY29kZSB3aWxsIHBlcmZvcm0gYSByZWFkIGxvY2sgYW5kIHNlYXJjaCBvZiB0aGUgZXh0ZW50IGJlZm9yZSB0YWtpbmcgdGhlIHdyaXRlIGxvY2suIFRoaXMgc2VlbXMgbGlrZSBhIHByZXR0eSB0YXJnZXRlZCBvcHRpbWl6YXRpb24gdG8gdGhlIGV4dGVudCBjYWNoaW5nIHN0cmF0ZWd5LCBhaW1pbmcgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSB3cml0ZSBsb2NrIGNvbnRlbnRpb24gaWYgdGhlIGV4dGVudCBpcyBhbHJlYWR5IGNhY2hlZC5cblxuRGlnZ2luZyBkZWVwZXIsIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCB0byBjYWxsIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgd2l0aCBgcHJlX3NlYXJjaCA9IHRydWVgIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVmaW5pdGVseSBpbXBhY3RpbmcgY29yZSBleHQ0IGxvZ2ljLiBUaGUgc3RhdGVkIGdvYWwgb2YgdGhlIHBhdGNoIGlzIHRvIG9wdGltaXplIGV4dGVudCBjYWNoaW5nIGJ5IGNpcmN1bXZlbnRpbmcgdGhlIHdyaXRlIGxvY2sgaWYgdGhlIGV4dGVudCBpcyBhbHJlYWR5IGNhY2hlZC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgdG91Y2hpbmcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIGV4dDQgZmlsZXN5c3RlbS5cblxuTm93LCBsZXQncyBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nLiBGcm9tIG15IGluaXRpYWwgYXNzZXNzbWVudCwgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBleHQ0X2NhY2hlX2V4dGVudHNgLCBgZXh0NF9leHRfZGV0ZXJtaW5lX2luc2VydF9ob2xlYCwgYGV4dDRfZXh0X21hcF9ibG9ja3NgLCBgZXh0NF9lc19jYWNoZV9leHRlbnRgLCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZmAsIGFuZCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYC5cblxuVG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cyBtb3N0IGVmZmljaWVudGx5LCBJIG5lZWQgdG8ga25vdyB3aGljaCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBgZXh0NF9lc19jYWNoZV9leHRlbnRgIGlzIGV4cG9ydGVkLCBhcyBpcyBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AgYW5kIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgLiBIb3dldmVyLCBgZXh0NF9jYWNoZV9leHRlbnRzYCwgYGV4dDRfZXh0X2RldGVybWluZV9pbnNlcnRfaG9sZWAsIGFuZCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZmAgYXJlIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZGUtcHJpb3JpdGl6ZSB0aG9zZSwgYXMgaXQgd291bGQgYmUgbW9yZSBjaGFsbGVuZ2luZyB0byB0YXJnZXQgdGhlbSBkaXJlY3RseSBpbiBpc29sYXRpb24uXG5cblNvLCB0aGUgY2xlYXIgdGFyZ2V0cyBmb3IgZnV6emluZyBiZWNvbWU6XG4qICAgYGV4dDRfZXh0X21hcF9ibG9ja3NgXG4qICAgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YFxuKiAgIGBleHQ0X21hcF9xdWVyeV9ibG9ja3NgXG5cbkZpbmFsbHksIGxldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNwZWNpYWwga2VybmVsIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZnMvZXh0NC9LY29uZmlnYCBmb3IgYW55IGRlcGVuZGVuY2llcy4gSSBrbm93IGBFWFQ0X0ZTYCBpcyB0aGUgbWFpbiBvbmUsIGJ1dCBhIHF1aWNrIGBncmVwYCB3aWxsIGJlIHRoZSBiZXN0IHdheSB0byB2ZXJpZnkgdGhlcmUgYXJlIG5vIGhpZGRlbiByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxMzo1NS4yNzU2NjkyODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NjQ4Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxMzo1NS40MzMzMjQxMzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDg4NDQ3MzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBFWFQ0IEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIHRoZSBiYXNlIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IGBFWFQ0X0ZTYC4gTm8gbmVlZCB0byBjb21wbGljYXRlIHRoaW5ncywgd2UnbGwga2VlcCBpdCBzaW1wbGUgYW5kIGp1c3QgdXNlIGBFWFQ0X0ZTYC5cblxuTm93LCBJIHdhbnQgdG8gaWRlbnRpZnkgc29tZSBnb29kIGFyZWFzIGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgRVhUNCBjb2RlYmFzZS4gTGV0J3Mgc2VlLi4uIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCBsb29rcyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlLiBJdCdzIGNhbGxlZCBkdXJpbmcgYmxvY2sgbWFwcGluZywgd2hpY2ggaXMgYSBjb3JlIGZ1bmN0aW9uLCBzbyBpdCdzIHByb2JhYmx5IGV4ZWN1dGVkIGZyZXF1ZW50bHkuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCB0YXJnZXQgZm9yIGZ1enplciBjb3ZlcmFnZSwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIGhvdyBpdCBoYW5kbGVzIGV4dGVudHMuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgZWRnZSBjYXNlcyBpbiBleHRlbnQgbWFwcGluZyBhcmUgYSBmZXJ0aWxlIGdyb3VuZCBmb3IgZGlzY292ZXJpbmcgdnVsbmVyYWJpbGl0aWVzLlxuXG5gZXh0NF9lc19jYWNoZV9leHRlbnRgIGlzIGFub3RoZXIgaW50ZXJlc3Rpbmcgb25lLCBJJ2xsIGRlZmluaXRlbHkga2VlcCBhbiBleWUgb24gdGhhdCBvbmUuXG5cbkFuZCwgb2YgY291cnNlLCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCwgZ2l2ZW4gaXRzIHJvbGUgaW4gRklFTUFQIGFuZCByZWxhdGVkIHF1ZXJpZXMsIGhhcyB0byBiZSBjaGVja2VkIGFzIHdlbGwuXG5cblRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoLCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AuIElkZW50aWZ5aW5nIHRoZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBnaXZlIHVzIGNydWNpYWwgY29udGV4dCBhbmQgaGVscCBmb3JtdWxhdGUgbW9yZSB0YXJnZXRlZCBmdXp6aW5nIHN0cmF0ZWdpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6MTM6NTkuOTIxNzczNzM4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTk4NDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4dF9tYXBfYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM4NzI9ZXh0ZXJuIGludCBleHQ0X2V4dF9pbmRleF90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGV4dGVudHMpO1xcbmZzL2V4dDQvZXh0NC5oOjM4NzM6ZXh0ZXJuIGludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9leHQ0LmgtMzg3NC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYz01MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBrdW5pdF9leHRfdGVzdF9wYXJhbSB0ZXN0X3NwbGl0X2NvbnZlcnRfcGFyYW1zW10gPSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTcxMi1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjcxMzovKiBUZXN0cyB0byB0cmlnZ2VyIGV4dDRfZXh0X21hcF9ibG9ja3MoKSAtXFx1MDAzZSBjb252ZXJ0X2luaXRpYWxpemVkX2V4dGVudCgpICovXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy03MTQtc3RhdGljIGNvbnN0IHN0cnVjdCBrdW5pdF9leHRfdGVzdF9wYXJhbSB0ZXN0X2NvbnZlcnRfaW5pdGlhbGl6ZWRfcGFyYW1zW10gPSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTgwOS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjgxMDovKiBUZXN0cyB0byB0cmlnZ2VyIGV4dDRfZXh0X21hcF9ibG9ja3MoKSAtXFx1MDAzZSBleHQ0X2V4dF9oYW5kbGVfdW53cml0dGVuX2V4bnRlbnRzKCkgKi9cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTgxMS1zdGF0aWMgY29uc3Qgc3RydWN0IGt1bml0X2V4dF90ZXN0X3BhcmFtIHRlc3RfaGFuZGxlX3Vud3JpdHRlbl9wYXJhbXNbXSA9IHtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM0MDk9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzUzNi0vKlxcbmZzL2V4dDQvZXh0ZW50cy5jOjM1Mzc6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfbWFwX2Jsb2NrcygpIGlmIHNvbWVvbmUgdHJpZXMgdG8gd3JpdGVcXG5mcy9leHQ0L2V4dGVudHMuYy0zNTM4LSAqIHRvIGFuIHVud3JpdHRlbiBleHRlbnQuIEl0IG1heSByZXN1bHQgaW4gc3BsaXR0aW5nIHRoZSB1bndyaXR0ZW5cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM1NTc9ZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc5MC0vKlxcbmZzL2V4dDQvZXh0ZW50cy5jOjM3OTE6ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfbWFwX2Jsb2NrcygpIGZyb21cXG5mcy9leHQ0L2V4dGVudHMuYy0zNzkyLSAqIGV4dDRfZ2V0X2Jsb2Nrc19kaW9fd3JpdGUoKSB3aGVuIERJTyB0byB3cml0ZVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mzk5Mj1leHQ0X2V4dF9oYW5kbGVfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQwOTAtICpcXG5mcy9leHQ0L2V4dGVudHMuYzo0MDkxOiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGV4dDRfZXh0X21hcF9ibG9ja3MoKSBhZnRlciB3ZSBmYWlsZWQgdG9cXG5mcy9leHQ0L2V4dGVudHMuYy00MDkyLSAqIGZpbmQgYmxvY2tzIHRoYXQgd2VyZSBhbHJlYWR5IGluIHRoZSBpbm9kZSdzIGV4dGVudCB0cmVlLiAgSGVuY2UsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00MTE3LSAqIGNsdXN0ZXIgRVhUNF9CMkMoc2JpLCBtYXAtXFx1MDAzZW1fbGJsaykuXFx0V2Ugd2lsbCB0aGVuIHJldHVybiAxIHRvXFxuZnMvZXh0NC9leHRlbnRzLmM6NDExODogKiBzaWduYWwgdG8gZXh0NF9leHRfbWFwX2Jsb2NrcygpIHRoYXQgbWFwLVxcdTAwM2VtX3BibGsgc2hvdWxkIGJlIHRyZWF0ZWRcXG5mcy9leHQ0L2V4dGVudHMuYy00MTE5LSAqIGFzIGEgbmV3IFxcXCJhbGxvY2F0ZWRcXFwiIGJsb2NrIHJlZ2lvbi4gIE90aGVyd2lzZSwgd2Ugd2lsbCByZXR1cm4gMCBhbmRcXG5mcy9leHQ0L2V4dGVudHMuYzo0MTIwOiAqIGV4dDRfZXh0X21hcF9ibG9ja3MoKSB3aWxsIHRoZW4gYWxsb2NhdGUgb25lIG9yIG1vcmUgbmV3IGNsdXN0ZXJzXFxuZnMvZXh0NC9leHRlbnRzLmMtNDEyMS0gKiBieSBjYWxsaW5nIGV4dDRfbWJfbmV3X2Jsb2NrcygpLlxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDE5MT1zdGF0aWMgZXh0NF9sYmxrX3QgZXh0NF9leHRfZGV0ZXJtaW5lX2luc2VydF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00MjY5LSAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQyNzA6aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy00MjcxLVxcdFxcdFxcdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgKm1hcCwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDI4My1cXHRleHRfZGVidWcoaW5vZGUsIFxcXCJibG9ja3MgJXUvJXUgcmVxdWVzdGVkXFxcXG5cXFwiLCBtYXAtXFx1MDAzZW1fbGJsaywgbWFwLVxcdTAwM2VtX2xlbik7XFxuZnMvZXh0NC9leHRlbnRzLmM6NDI4NDpcXHR0cmFjZV9leHQ0X2V4dF9tYXBfYmxvY2tzX2VudGVyKGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgbWFwLVxcdTAwM2VtX2xlbiwgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTQyODUtXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00NTQ2LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ1NDc6XFx0dHJhY2VfZXh0NF9leHRfbWFwX2Jsb2Nrc19leGl0KGlub2RlLCBmbGFncywgbWFwLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ1NDgtXFx0XFx0XFx0XFx0ICAgICAgIGVyciA/IGVyciA6IGFsbG9jYXRlZCk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00NTgzPXN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ2NTEtXFx0XFx0XFx0ZXh0NF9kZWJ1ZyhcXFwiaW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6IFxcXCJcXG5mcy9leHQ0L2V4dGVudHMuYzo0NjUyOlxcdFxcdFxcdFxcdCAgIFxcXCJleHQ0X2V4dF9tYXBfYmxvY2tzIHJldHVybmVkICVkXFxcIixcXG5mcy9leHQ0L2V4dGVudHMuYy00NjUzLVxcdFxcdFxcdFxcdCAgIGlub2RlLVxcdTAwM2VpX2lubywgbWFwLm1fbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTUwNDI9aW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTA4MS1cXHRcXHRcXHRcXHQgICAgIFxcXCJpbm9kZSAjJWxsdTogYmxvY2sgJXU6IGxlbiAldTogXFxcIlxcbmZzL2V4dDQvZXh0ZW50cy5jOjUwODI6XFx0XFx0XFx0XFx0ICAgICBcXFwiZXh0NF9leHRfbWFwX2Jsb2NrcyByZXR1cm5lZCAlZFxcXCIsXFxuZnMvZXh0NC9leHRlbnRzLmMtNTA4My1cXHRcXHRcXHRcXHQgICAgIGlub2RlLVxcdTAwM2VpX2lubywgbWFwLm1fbGJsayxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTU3NzI9ZXh0NF9zd2FwX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZTEsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01OTU0LSAqIHJldHVybnMgMC4gIENhbiBhbHNvIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2Rlcy4gIERlcml2ZWQgZnJvbVxcbmZzL2V4dDQvZXh0ZW50cy5jOjU5NTU6ICogZXh0NF9leHRfbWFwX2Jsb2NrcygpLlxcbmZzL2V4dDQvZXh0ZW50cy5jLTU5NTYtICovXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDYyPXN0YXRpYyB2b2lkIGV4dDRfbWFwX2Jsb2Nrc19lc19yZWNoZWNrKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDc5LVxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkge1xcbmZzL2V4dDQvaW5vZGUuYzo0ODA6XFx0XFx0cmV0dmFsID0gZXh0NF9leHRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBtYXAsIDApO1xcbmZzL2V4dDQvaW5vZGUuYy00ODEtXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MDQ9c3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIxLVxcdG1hcDIubV9mbGFncyA9IDA7XFxuZnMvZXh0NC9pbm9kZS5jOjUyMjpcXHRyZXR2YWwgPSBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZtYXAyLCAwKTtcXG5mcy9leHQ0L2lub2RlLmMtNTIzLVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTU1OT1pbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTY1LVxcdC8qXFxuZnMvZXh0NC9pbm9kZS5jOjU2NjpcXHQgKiBleHQ0X2V4dF9tYXBfYmxvY2tzKCkgbWF5IGhhdmUgYWxyZWFkeSBjYWNoZWQgdGhlIGZ1bGwgZXh0ZW50LCBzb1xcbmZzL2V4dDQvaW5vZGUuYy01NjctXFx0ICogc2VhcmNoIGZpcnN0IHRvIGF2b2lkIHRha2luZyBpX2VzX2xvY2sgZm9yIHdyaXRpbmcuIFRoZSBpbmRpcmVjdFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU3NC1cXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpXFxuZnMvZXh0NC9pbm9kZS5jOjU3NTpcXHRcXHRyZXR2YWwgPSBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIG1hcCwgZmxhZ3MpO1xcbmZzL2V4dDQvaW5vZGUuYy01NzYtXFx0ZWxzZVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTYxMz1pbnQgZXh0NF9tYXBfY3JlYXRlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTYzNy1cXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpIHtcXG5mcy9leHQ0L2lub2RlLmM6NjM4OlxcdFxcdHJldHZhbCA9IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbWFwLCBmbGFncyk7XFxuZnMvZXh0NC9pbm9kZS5jLTYzOS1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTY5Mi0gKlxcbmZzL2V4dDQvaW5vZGUuYzo2OTM6ICogSWYgZmlsZSB0eXBlIGlzIGV4dGVudHMgYmFzZWQsIGl0IHdpbGwgY2FsbCBleHQ0X2V4dF9tYXBfYmxvY2tzKCksXFxuZnMvZXh0NC9pbm9kZS5jLTY5NC0gKiBPdGhlcndpc2UsIGNhbGwgd2l0aCBleHQ0X2luZF9tYXBfYmxvY2tzKCkgdG8gaGFuZGxlIGluZGlyZWN0IG1hcHBpbmdcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz03MDg9aW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTgxMC1cXHQgKiBOb3RlIHRoYXQgaWYgYmxvY2tzIGhhdmUgYmVlbiBwcmVhbGxvY2F0ZWRcXG5mcy9leHQ0L2lub2RlLmM6ODExOlxcdCAqIGV4dDRfZXh0X21hcF9ibG9ja3MoKSByZXR1cm5zIHdpdGggYnVmZmVyIGhlYWQgdW5tYXBwZWRcXG5mcy9leHQ0L2lub2RlLmMtODEyLVxcdCAqL1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTgxNi1cXHRcXHQgKiB3ZSBjb250aW51ZSBhbmQgZG8gdGhlIGFjdHVhbCB3b3JrIGluXFxuZnMvZXh0NC9pbm9kZS5jOjgxNzpcXHRcXHQgKiBleHQ0X2V4dF9tYXBfYmxvY2tzKClcXG5mcy9leHQ0L2lub2RlLmMtODE4LVxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxNDowMC4wNzE3NjgwNTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDA2MjEyOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBleHQ0IEJsb2NrIE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0gY29kZSBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRoZSBibG9jayBtYXBwaW5nLiBJdCBsb29rcyBsaWtlIGBleHQ0X2V4dF9tYXBfYmxvY2tzYCBpcyBhIHJlYWwgd29ya2hvcnNlLiBJdCdzIGNhbGxlZCBieSBhIHdob2xlIGJ1bmNoIG9mIGNydWNpYWwgZnVuY3Rpb25zOiBgZXh0NF9tYXBfYmxvY2tzYCwgYGV4dDRfbWFwX2NyZWF0ZV9ibG9ja3NgLCBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCwgZXZlbiB0aGluZ3MgbGlrZSBgZXh0NF9tYXBfYmxvY2tzX2VzX3JlY2hlY2tgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhhdCBzY3JlYW1zICpjb3JlKiBleHRlbnRzIEFQSSBmdW5jdGlvbiB0byBtZSwgbm8gZG91YnQgYWJvdXQgaXQuIEl0J3MgZGVmaW5pdGVseSBhbiBBUEkgZW50cnlwb2ludCBmb3IgZXh0NCBleHRlbnRzLlxuXG5BbmQgdGhlbiB3ZSBoYXZlIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAsIHdoaWNoIHNlZW1zIHRvIGJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIGV4dGVudCBjYWNoaW5nLiBUaGlzIGlzIGludGVyZXN0aW5nLiBMb29rcyBsaWtlIGFuIGltcG9ydGFudCBmdW5jdGlvbiBhcyB3ZWxsLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHRoYXQgYmV0dGVyLlxuXG5JIGFscmVhZHkga25vdyBgZXh0NF9tYXBfcXVlcnlfYmxvY2tzYCBpcyBhbHNvIGFuIEFQSSBlbnRyeXBvaW50LCBidXQgSSB3YW50IHRvIGRpdmUgYSBsaXR0bGUgZGVlcGVyIGludG8gdGhhdCwgYnV0IGZpcnN0LCBsZXQncyBzZWUgd2hvIGlzIGNhbGxpbmcgYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYyOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxNDowNC4wNzc5ODM0NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3NDkzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9lc19jYWNoZV9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHRlbnRzLmM9NTI0PXN0YXRpYyB2b2lkIGV4dDRfY2FjaGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTM4LVxcdFxcdGlmIChwcmV2IFxcdTAwMjZcXHUwMDI2IChwcmV2ICE9IGxibGspKVxcbmZzL2V4dDQvZXh0ZW50cy5jOjUzOTpcXHRcXHRcXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgcHJldiwgbGJsayAtIHByZXYsIH4wLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0MC1cXHRcXHRcXHRcXHRcXHQgICAgIEVYVEVOVF9TVEFUVVNfSE9MRSwgZmFsc2UpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTQzLVxcdFxcdFxcdHN0YXR1cyA9IEVYVEVOVF9TVEFUVVNfVU5XUklUVEVOO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjU0NDpcXHRcXHRleHQ0X2VzX2NhY2hlX2V4dGVudChpbm9kZSwgbGJsaywgbGVuLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTU0NS1cXHRcXHRcXHRcXHQgICAgIGV4dDRfZXh0X3BibG9jayhleCksIHN0YXR1cywgZmFsc2UpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDE5MT1zdGF0aWMgZXh0NF9sYmxrX3QgZXh0NF9leHRfZGV0ZXJtaW5lX2luc2VydF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00MjQxLVxcdGV4dF9kZWJ1Zyhpbm9kZSwgXFxcIiAtXFx1MDAzZSAldToldVxcXFxuXFxcIiwgaG9sZV9zdGFydCwgbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0MjQyOlxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBob2xlX3N0YXJ0LCBsZW4sIH4wLCBFWFRFTlRfU1RBVFVTX0hPTEUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDI0My1cXHRcXHRcXHQgICAgIGZhbHNlKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQyNzA9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQzMzUtXFx0XFx0XFx0XFx0ICAgICAgIEVYVDRfRVhfTk9DQUNIRSkpKVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQzMzY6XFx0XFx0XFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIGVlX2Jsb2NrLCBlZV9sZW4sXFxuZnMvZXh0NC9leHRlbnRzLmMtNDMzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGVlX3N0YXJ0LCBzdGF0dXMsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9ODQyPXN0YXRpYyBpbnQgX19lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfc3RhdHVzICpuZXdlcyxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MDItICogc3RhdHVzIHRyZWUuIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgZm9yIG1vZGlmeWluZyBleHRlbnRzLiBUbyBjYWNoZVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzo5MDM6ICogb24tZGlzayBleHRlbnRzLCB1c2UgZXh0NF9lc19jYWNoZV9leHRlbnQoKSBpbnN0ZWFkLlxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy05MDQtICovXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jPTkwNT12b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMTQtLypcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTAxNTogKiBleHQ0X2VzX2NhY2hlX2V4dGVudCgpIGluc2VydHMgaW5mb3JtYXRpb24gaW50byB0aGUgZXh0ZW50IHN0YXR1cyB0cmVlXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMTYtICogb25seSBpZiB0aGVyZSBpcyBubyBleGlzdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIHJhbmdlIG9yXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAyMy0gKi9cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM6MTAyNDp2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwMjUtXFx0XFx0XFx0ICBleHQ0X2xibGtfdCBsZW4sIGV4dDRfZnNibGtfdCBwYmxrLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwNzktXFx0X19lc19pbnNlcnRfZXh0ZW50KGlub2RlLCBcXHUwMDI2bmV3ZXMsIE5VTEwpO1xcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDgwOlxcdHRyYWNlX2V4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBcXHUwMDI2bmV3ZXMpO1xcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDgxLVxcdGV4dDRfZXNfcHJpbnRfdHJlZShpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmg9MTM2PWV4dGVybiB2b2lkIGV4dDRfZXNfaW5zZXJ0X2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oLTEzOS1cXHRcXHRcXHRcXHQgIGJvb2wgZGVsYWxsb2NfcmVzZXJ2ZV91c2VkKTtcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmg6MTQwOmV4dGVybiB2b2lkIGV4dDRfZXNfY2FjaGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5oLTE0MS1cXHRcXHRcXHRcXHQgZXh0NF9sYmxrX3QgbGVuLCBleHQ0X2ZzYmxrX3QgcGJsayxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MDQ9c3RhdGljIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTI0LVxcdGlmIChyZXR2YWwgXFx1MDAzYz0gMCkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjU6XFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBtYXAtXFx1MDAzZW1fbGVuLFxcbmZzL2V4dDQvaW5vZGUuYy01MjYtXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01NDYtXFx0XFx0XFx0c3RhdHVzID09IHN0YXR1czIpIHtcXG5mcy9leHQ0L2lub2RlLmM6NTQ3OlxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsayxcXG5mcy9leHQ0L2lub2RlLmMtNTQ4LVxcdFxcdFxcdFxcdCAgICAgbWFwLVxcdTAwM2VtX2xlbiArIG1hcDIubV9sZW4sIG1hcC1cXHUwMDNlbV9wYmxrLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU1MS1cXHR9IGVsc2Uge1xcbmZzL2V4dDQvaW5vZGUuYzo1NTI6XFx0XFx0ZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIG1hcC1cXHUwMDNlbV9sYmxrLCBtYXAtXFx1MDAzZW1fbGVuLFxcbmZzL2V4dDQvaW5vZGUuYy01NTMtXFx0XFx0XFx0XFx0ICAgICBtYXAtXFx1MDAzZW1fcGJsaywgc3RhdHVzLCB0cnVlKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01NTk9aW50IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTYwMS1cXHRcXHRcXHRcXHRFWFRFTlRfU1RBVFVTX1VOV1JJVFRFTiA6IEVYVEVOVF9TVEFUVVNfV1JJVFRFTjtcXG5mcy9leHQ0L2lub2RlLmM6NjAyOlxcdFxcdGV4dDRfZXNfY2FjaGVfZXh0ZW50KGlub2RlLCBtYXAtXFx1MDAzZW1fbGJsaywgbWFwLVxcdTAwM2VtX2xlbixcXG5mcy9leHQ0L2lub2RlLmMtNjAzLVxcdFxcdFxcdFxcdCAgICAgbWFwLVxcdTAwM2VtX3BibGssIHN0YXR1cywgcHJlX3NlYXJjaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjE0OjA0LjIxNzczODEwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDkxMjE1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEV4dGVudCBDYWNoZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBgcHJlX3NlYXJjaGAgYm9vbGVhbiB0byBgZXh0NF9lc19jYWNoZV9leHRlbnRgLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB3aGVuIHRoaXMgZmxhZyBpcyBzZXQgdG8gdHJ1ZSwgaXQgcGVyZm9ybXMgYSByZWFkIGxvY2sgYW5kIGEgc2VhcmNoICpiZWZvcmUqIGRvaW5nIGFueXRoaW5nIGVsc2UuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIHBvdGVudGlhbCBwb2ludCBmb3IgdW5leHBlY3RlZCBiZWhhdmlvciBhbmQgZWRnZSBjYXNlcy4gR2l2ZW4gdGhhdCwgSSdtIHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEknbGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Ugc3ltYm9sczogYGV4dDRfZXh0X21hcF9ibG9ja3NgLCBgZXh0NF9lc19jYWNoZV9leHRlbnRgLCBhbmQgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AuXG5cbk5vdywgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgd2FudCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbmVjZXNzYXJ5IHNldHVwLiBJdCBsb29rcyBsaWtlIGBFWFQ0X0ZTYCBpcyB0aGUgbWFpbiB0aGluZyBJIG5lZWQuIEFscmlnaHQsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIE5vIHNwZWNpYWwgZXh0ZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gRXh0ZW50cyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGhpbiBFeHQ0LCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgZnVuY3Rpb24gaW4gYGZzL2V4dDQvZXh0ZW50c19zdGF0dXMuY2AgdG8gYmUgc3VyZS4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6MTQ6MDguODY2ODYyNDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4OTY1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9lc19jYWNoZV9leHRlbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYz04NDI9c3RhdGljIGludCBfX2VzX2luc2VydF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0dXMgKm5ld2VzLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTkwMi0gKiBzdGF0dXMgdHJlZS4gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgbW9kaWZ5aW5nIGV4dGVudHMuIFRvIGNhY2hlXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjkwMzogKiBvbi1kaXNrIGV4dGVudHMsIHVzZSBleHQ0X2VzX2NhY2hlX2V4dGVudCgpIGluc3RlYWQuXFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTkwNC0gKi9cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmM9OTA1PXZvaWQgZXh0NF9lc19pbnNlcnRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAxNC0vKlxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDE1OiAqIGV4dDRfZXNfY2FjaGVfZXh0ZW50KCkgaW5zZXJ0cyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBleHRlbnQgc3RhdHVzIHRyZWVcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAxNi0gKiBvbmx5IGlmIHRoZXJlIGlzIG5vIGV4aXN0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb3JcXG4tLVxcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYy0xMDIzLSAqL1xcbmZzL2V4dDQvZXh0ZW50c19zdGF0dXMuYzoxMDI0OnZvaWQgZXh0NF9lc19jYWNoZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsayxcXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTAyNS1cXHRcXHRcXHQgIGV4dDRfbGJsa190IGxlbiwgZXh0NF9mc2Jsa190IHBibGssXFxuLS1cXG5mcy9leHQ0L2V4dGVudHNfc3RhdHVzLmMtMTA3OS1cXHRfX2VzX2luc2VydF9leHRlbnQoaW5vZGUsIFxcdTAwMjZuZXdlcywgTlVMTCk7XFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jOjEwODA6XFx0dHJhY2VfZXh0NF9lc19jYWNoZV9leHRlbnQoaW5vZGUsIFxcdTAwMjZuZXdlcyk7XFxuZnMvZXh0NC9leHRlbnRzX3N0YXR1cy5jLTEwODEtXFx0ZXh0NF9lc19wcmludF90cmVlKGlub2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDU6MTQ6MDguOTcyNzY1NzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjcyODI5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgRXh0ZW50IENhY2hlIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgdG8gYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC4gVGhlIGdvYWwgaXMgY2xlYXI6IG9wdGltaXplIHRoZSBleHRlbnQgY2FjaGUuIEl0J3MgYWJvdXQgYXZvaWRpbmcgdGhlIHdyaXRlIGxvY2sgKGBpX2VzX2xvY2tgKSBvbiB0aGUgZXh0ZW50IGNhY2hlIGlmIHRoZSBleHRlbnQgaXMgKmFscmVhZHkqIGNhY2hlZC4gU21hcnQgbW92ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBtZWFuaW5nIGFueSBleHQ0IGZpbGUgb3BlcmF0aW9uIHRoYXQgZGVhbHMgd2l0aCBibG9jayBtYXBwaW5nIG9yIHF1ZXJpZXMgaXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQuIFRoZXJlZm9yZSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enogdGhvcm91Z2hseS5cblxuTGV0IG1lIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZTogYGV4dDRfZXh0X21hcF9ibG9ja3NgLCBgZXh0NF9lc19jYWNoZV9leHRlbnRgIChvZiBjb3Vyc2UpLCBhbmQgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgaW50ZXJhY3RzIHdpdGggdGhlc2UgYW5kIHdoYXQgaXQgY2hhbmdlcyBpbiB0ZXJtcyBvZiBsb2NraW5nIGFuZCBwZXJmb3JtYW5jZS4gU2luY2Ugd2UncmUgZGVhbGluZyB3aXRoIEVYVDQsIGBFWFQ0X0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLlxuXG5GaXJzdCwgSSB0aGluayBJJ2xsIHF1aWNrbHkgY2hlY2sgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgdG8gc2VlIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIFRoYXQgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSByZXZpZXcgb2YgdGhlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjE1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjE0OjEyLjk0MDA1Mjc5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ2MzI3OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9tYXBfcXVlcnlfYmxvY2tzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTIxMD1zdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3Qge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjQzLS8qXFxuZnMvZXh0NC9leHQ0Lmg6MjQ0OiAqIFRoaXMgaXMgZm9yIHVzZSBpbiBleHQ0X21hcF9xdWVyeV9ibG9ja3MoKSBmb3IgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgd2UgY2FuXFxuZnMvZXh0NC9leHQ0LmgtMjQ1LSAqIGhhdmUgYSBwaHlzaWNhbGx5IGFuZCBsb2dpY2FsbHkgY29udGlndW91cyBibG9ja3Mgc3BsaXQgYWNyb3NzIHR3byBsZWFmXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yNDctICogdG8ga25vdyB3aGV0aGVyIHRoZSByZXR1cm5lZCBleHRlbnQgaXMgbGFzdCBpbiBsZWFmLiBJZiB5ZXMsIHRoZW4gbG9va3VwIGZvclxcbmZzL2V4dDQvZXh0NC5oOjI0ODogKiBuZXh0IGluIGxlYWYgYmxvY2sgaW4gZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZigpLlxcbmZzL2V4dDQvZXh0NC5oLTI0OS0gKiAtIFRoaXMgaXMgbmV2ZXIgZ29pbmcgdG8gYmUgYWRkZWQgdG8gYW55IGJ1ZmZlciBoZWFkIHN0YXRlLlxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9Njg0PWVudW0ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNzUyLS8qXFxuZnMvZXh0NC9leHQ0Lmg6NzUzOiAqIGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcygpIHVzZXMgdGhpcyBmaWx0ZXIgbWFzayB0byBmaWx0ZXIgdGhlIGZsYWdzIG5lZWRlZCB0b1xcbmZzL2V4dDQvZXh0NC5oLTc1NC0gKiBwYXNzIHdoaWxlIGxvb2t1cC9xdWVyeWluZyBvZiBvbiBkaXNrIGV4dGVudCB0cmVlLlxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9Mzg4OD1leHRlcm4gaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvZXh0NC5oLTM4ODktXFx0XFx0XFx0ICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xcbmZzL2V4dDQvZXh0NC5oOjM4OTA6ZXh0ZXJuIGludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dDQuaC0zODkxLVxcdFxcdFxcdFxcdCAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYz0zNTg9c3RhdGljIGludCBjaGVja19idWZmZXIoY2hhciAqYnVmLCBpbnQgYywgaW50IHNpemUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTM3Mi0vKlxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MzczOiAqIFNpbXVsYXRlIGEgbWFwIGJsb2NrIGNhbGwgYnkgZmlyc3QgY2FsbGluZyBleHQ0X21hcF9xdWVyeV9ibG9ja3MoKSB0b1xcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzc0LSAqIGNvcnJlY3RseSBwb3B1bGF0ZSBtYXAgZmxhZ3MgYW5kIHBibGsgYW5kIHRoZW4gY2FsbCB0aGVcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9Mzc5PXN0YXRpYyB2b2lkIGV4dDRfbWFwX2NyZWF0ZV9ibG9ja3NfaGVscGVyKHN0cnVjdCBrdW5pdCAqdGVzdCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzg1LVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6Mzg2OlxcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCBmbGFncyk7XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy0zODctXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApIHtcXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTM4OC1cXHRcXHRLVU5JVF9GQUlMKHRlc3QsXFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYzozODk6XFx0XFx0XFx0ICAgXFxcImV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcygpIGZhaWxlZC4gQ2Fubm90IHByb2NlZWRcXFxcblxcXCIpO1xcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzkwLVxcdFxcdHJldHVybjtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYzMTU9RVhQT1JUX1NZTUJPTF9GT1JfRVhUNF9URVNUKGV4dDRfaXNzdWVfemVyb291dCk7XFxuZnMvZXh0NC9leHRlbnRzLmM6NjMxNjpFWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NF9tYXBfcXVlcnlfYmxvY2tzKTtcXG5mcy9leHQ0L2V4dGVudHMuYy02MzE3LSNlbmRpZlxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTQ2Mj1zdGF0aWMgdm9pZCBleHQ0X21hcF9ibG9ja3NfZXNfcmVjaGVjayhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUwMy1cXG5mcy9leHQ0L2lub2RlLmM6NTA0OnN0YXRpYyBpbnQgZXh0NF9tYXBfcXVlcnlfYmxvY2tzX25leHRfaW5fbGVhZihoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5vZGUuYy01MDUtXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTU1OC1cXG5mcy9leHQ0L2lub2RlLmM6NTU5OmludCBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2lub2RlLmMtNTYwLVxcdFxcdFxcdCAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjA0LVxcdH0gZWxzZSB7XFxuZnMvZXh0NC9pbm9kZS5jOjYwNTpcXHRcXHRyZXR2YWwgPSBleHQ0X21hcF9xdWVyeV9ibG9ja3NfbmV4dF9pbl9sZWFmKGhhbmRsZSwgaW5vZGUsIG1hcCxcXG5mcy9leHQ0L2lub2RlLmMtNjA2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBvcmlnX21sZW4pO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTcwOD1pbnQgZXh0NF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNzkyLVxcdGRvd25fcmVhZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuZnMvZXh0NC9pbm9kZS5jOjc5MzpcXHRyZXR2YWwgPSBleHQ0X21hcF9xdWVyeV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbWFwLCBmbGFncyk7XFxuZnMvZXh0NC9pbm9kZS5jLTc5NC1cXHR1cF9yZWFkKChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhX3NlbSkpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE5MjM9c3RhdGljIGludCBleHQ0X2RhX21hcF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTE5NzgtXFx0ZWxzZVxcbmZzL2V4dDQvaW5vZGUuYzoxOTc5OlxcdFxcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCAwKTtcXG5mcy9leHQ0L2lub2RlLmMtMTk4MC1cXHR1cF9yZWFkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0yMDAxLVxcdH0gZWxzZSBpZiAoIWV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSkge1xcbmZzL2V4dDQvaW5vZGUuYzoyMDAyOlxcdFxcdHJldHZhbCA9IGV4dDRfbWFwX3F1ZXJ5X2Jsb2NrcyhOVUxMLCBpbm9kZSwgbWFwLCAwKTtcXG5mcy9leHQ0L2lub2RlLmMtMjAwMy1cXHRcXHRpZiAocmV0dmFsKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA1OjE0OjEzLjEyNDY5MzA4NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzAxMTgzMzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHBhdGhzLlxuXG4qKkZvY3VzIEFyZWFzIGluIHRoZSBleHQ0IEJsb2NrIE1hcHBpbmcgTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLCBhbmQgd2hlcmUgSSBzaG91bGQgYmUgY29uY2VudHJhdGluZyBteSBlZmZvcnRzLiBUaGUgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBhIGtleSBzcG90LiBJdCdzIGVzc2VudGlhbGx5IHRoZSB3b3JraG9yc2UsIGJlaW5nIGNhbGxlZCBieSBib3RoIGBleHQ0X21hcF9ibG9ja3NgIGFuZCBgZXh0NF9kYV9tYXBfYmxvY2tzYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhICp2ZXJ5KiBjb21tb24gYW5kIHBvdGVudGlhbGx5IGNyaXRpY2FsIHBhdGggZm9yIG9wdGltaXphdGlvbi4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSB0aGF0IGFueSBpbmVmZmljaWVuY2llcyBoZXJlIGFyZSBhbXBsaWZpZWQgYWNyb3NzIHRoZSBib2FyZC5cblxuU2luY2UgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AgaXMgc28gY2VudHJhbCwgSSBzaG91bGQgYWxzbyBsb29rIGNsb3NlbHkgYXQgaXRzIGNhbGxlcnMuIFNvLCBgZXh0NF9leHRfbWFwX2Jsb2Nrc2AgYW5kIGBleHQ0X2VzX2NhY2hlX2V4dGVudGAgYWxzbyBzZWVtIGxpa2UgZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGluLWRlcHRoIGFuYWx5c2lzLiBUaGV5IGRpcmVjdGx5IGZlZWQgaW50byB0aGUgY29yZSBibG9jayBtYXBwaW5nIHByb2Nlc3MuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhvc2UgZnVuY3Rpb25zIGFuZCBob3cgdGhleSBpbmZsdWVuY2UgYGV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc2AuXG5cbkFscmlnaHQsIEknbGwgc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU1MSwiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNToxNDoxNy40MjU4ODEwOTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTUwMDUyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2V4dF9tYXBfYmxvY2tzXCIsXG4gICAgXCJleHQ0X2VzX2NhY2hlX2V4dGVudFwiLFxuICAgIFwiZXh0NF9tYXBfcXVlcnlfYmxvY2tzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgZXh0ZW50IHN0YXR1cyBjYWNoaW5nIGxvZ2ljIGJ5IGludHJvZHVjaW5nIGEgYHByZV9zZWFyY2hgIHBhcmFtZXRlciB0byBgZXh0NF9lc19jYWNoZV9leHRlbnRgLiBUaGlzIGFsbG93cyBhdm9pZGluZyBhIHdyaXRlIGxvY2sgaWYgdGhlIGV4dGVudCBpcyBhbHJlYWR5IGNhY2hlZCwgb3B0aW1pemluZyBibG9jayBtYXBwaW5nIGFuZCBxdWVyeWluZyBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9leHRfbWFwX2Jsb2Nrc1wiLFxuICAgIFwiZXh0NF9lc19jYWNoZV9leHRlbnRcIixcbiAgICBcImV4dDRfbWFwX3F1ZXJ5X2Jsb2Nrc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGV4dGVudCBzdGF0dXMgY2FjaGluZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBhIGBwcmVfc2VhcmNoYCBwYXJhbWV0ZXIgdG8gYGV4dDRfZXNfY2FjaGVfZXh0ZW50YC4gVGhpcyBhbGxvd3MgYXZvaWRpbmcgYSB3cml0ZSBsb2NrIGlmIHRoZSBleHRlbnQgaXMgYWxyZWFkeSBjYWNoZWQsIG9wdGltaXppbmcgYmxvY2sgbWFwcGluZyBhbmQgcXVlcnlpbmcgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowpp6jf[1] Phase: Succeeded StartedAt: 2026-07-26 05:14:29 +0000 UTC FinishedAt: 2026-07-26 05:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 05:14:29 +0000 UTC FinishedAt: 2026-07-26 05:14:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2] Phase: Succeeded StartedAt: 2026-07-26 05:14:29 +0000 UTC FinishedAt: 2026-07-26 09:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 05:14:29 +0000 UTC FinishedAt: 2026-07-26 09:55:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 05:14:29 +0000 UTC FinishedAt: 2026-07-26 05:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 05:14:29 +0000 UTC FinishedAt: 2026-07-26 05:14:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowpp6jf/series-workflowpp6jf-convert-artifact-677223567/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 05:14:50 +0000 UTC FinishedAt: 2026-07-26 05:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 05:14:50 +0000 UTC FinishedAt: 2026-07-26 05:51:04 +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:*fde42859-dff9-4020-962c-8c3cf66b6582,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-workflowpp6jf/series-workflowpp6jf-convert-artifact-677223567/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": "8ec16c93-0134-4c71-90e2-925208cc2d25", "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-workflowpp6jf/series-workflowpp6jf-build-action-3616246229/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 05:14:50 +0000 UTC FinishedAt: 2026-07-26 05:49: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:*fde42859-dff9-4020-962c-8c3cf66b6582,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-workflowpp6jf/series-workflowpp6jf-convert-artifact-677223567/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": "8ec16c93-0134-4c71-90e2-925208cc2d25", "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-workflowpp6jf/series-workflowpp6jf-build-action-3616246229/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 05:51:04 +0000 UTC FinishedAt: 2026-07-26 05:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 05:51:04 +0000 UTC FinishedAt: 2026-07-26 05:51:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 05:51:04 +0000 UTC FinishedAt: 2026-07-26 05:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 05:51:04 +0000 UTC FinishedAt: 2026-07-26 05:51:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowpp6jf/series-workflowpp6jf-convert-artifact-3039823326/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 05:51:15 +0000 UTC FinishedAt: 2026-07-26 05:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 05:51:15 +0000 UTC FinishedAt: 2026-07-26 05:53:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8ec16c93-0134-4c71-90e2-925208cc2d25,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-workflowpp6jf/series-workflowpp6jf-build-action-3616246229/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-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 05:53:14 +0000 UTC FinishedAt: 2026-07-26 05:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 05:53:14 +0000 UTC FinishedAt: 2026-07-26 05:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 05:53:14 +0000 UTC FinishedAt: 2026-07-26 06:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 05:53:14 +0000 UTC FinishedAt: 2026-07-26 06:51:54 +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:*fde42859-dff9-4020-962c-8c3cf66b6582,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-workflowpp6jf/series-workflowpp6jf-convert-artifact-3039823326/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": "4e9cf07a-27f0-487f-83d0-e315797e4916", "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-workflowpp6jf/series-workflowpp6jf-build-action-2551271090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 05:53:14 +0000 UTC FinishedAt: 2026-07-26 06:51:44 +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:*fde42859-dff9-4020-962c-8c3cf66b6582,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-workflowpp6jf/series-workflowpp6jf-convert-artifact-3039823326/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": "4e9cf07a-27f0-487f-83d0-e315797e4916", "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-workflowpp6jf/series-workflowpp6jf-build-action-2551271090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 06:51:54 +0000 UTC FinishedAt: 2026-07-26 06:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 06:51:54 +0000 UTC FinishedAt: 2026-07-26 06:51:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 06:51:54 +0000 UTC FinishedAt: 2026-07-26 06:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 06:51:54 +0000 UTC FinishedAt: 2026-07-26 06:53:35 +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:*4e9cf07a-27f0-487f-83d0-e315797e4916,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-workflowpp6jf/series-workflowpp6jf-build-action-2551271090/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-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 06:53:46 +0000 UTC FinishedAt: 2026-07-26 09:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 06:53:46 +0000 UTC FinishedAt: 2026-07-26 09:55:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8ec16c93-0134-4c71-90e2-925208cc2d25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e9cf07a-27f0-487f-83d0-e315797e4916,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-workflowpp6jf/series-workflowpp6jf-build-action-3616246229/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-workflowpp6jf/series-workflowpp6jf-build-action-2551271090/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 06:53:46 +0000 UTC FinishedAt: 2026-07-26 06:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 06:53:46 +0000 UTC FinishedAt: 2026-07-26 06:53:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowpp6jf/series-workflowpp6jf-convert-artifact-3918044899/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 06:53:46 +0000 UTC FinishedAt: 2026-07-26 06:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 06:53:46 +0000 UTC FinishedAt: 2026-07-26 06:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 06:53:46 +0000 UTC FinishedAt: 2026-07-26 06:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 06:53:56 +0000 UTC FinishedAt: 2026-07-26 09:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpp6jf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_ext_map_blocks","ext4_es_cache_extent","ext4_map_query_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3dab139d4795f688e4f243e40c7474df00d329d9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"beb4115f-b8b7-4c21-acb5-04cfbf4e4d4b","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 06:53:56 +0000 UTC FinishedAt: 2026-07-26 09:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8ec16c93-0134-4c71-90e2-925208cc2d25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e9cf07a-27f0-487f-83d0-e315797e4916,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-workflowpp6jf/series-workflowpp6jf-build-action-3616246229/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-workflowpp6jf/series-workflowpp6jf-build-action-2551271090/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-workflowpp6jf/series-workflowpp6jf-convert-artifact-3918044899/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,}