Name: series-workflow2vfhp Phase: Succeeded StartedAt: 2026-08-23 13:41:37 +0000 UTC FinishedAt: 2026-08-23 17:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[0] Phase: Succeeded StartedAt: 2026-08-23 13:41:37 +0000 UTC FinishedAt: 2026-08-23 13:52:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 13:41:37 +0000 UTC FinishedAt: 2026-08-23 13:52:21 +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": "2709dd5ae32f0828f386327c76bba9f39f63a1c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2709dd5ae32f0828f386327c76bba9f39f63a1c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "cedd7a10-a87c-48d2-a686-33b8281a3d29" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_unbind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBndWVzdF9tZW1mZCBzZWxmdGVzdHMgYW5kIGZpeGVzIGEgbG9ja2luZy9jb25jdXJyZW5jeSBidWcgaW4gYGt2bV9nbWVtX3VuYmluZGAgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGUgYnVnIGZpeCBlbnN1cmVzIHRoYXQgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBpcyB0YWtlbiBldmVuIHdoZW4gdGhlIGZpbGUgaXMgZHlpbmcsIHByZXZlbnRpbmcgYSBtaXNtYXRjaCBpbiBgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3NgIGluY3JlbWVudHMvZGVjcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljL2NvbmN1cnJlbmN5IGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUsIGFuZCBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX2dtZW1fdW5iaW5kYCB3aGVuIGEgZ3Vlc3RfbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQgYnkgZW5zdXJpbmcgdGhlIGludmFsaWRhdGUgbG9jayBpcyB0YWtlbiBldmVuIGZvciBkeWluZyBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTMyY2NlZjkxMDQ5ZTZkZjcyMmFjMGMzYTkyMjhhYWEzZGUxNTA5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDEzOjQzOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG5pbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuQEAgLTc2LDMzICYjNDM7NzYsNTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tbWFwX3N1cHBvcnRlZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLlxuJiM0MzsgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuaWQ7XG4mIzQzO1x0aW50IG5yX2ZvdW5kID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChuaWQsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSkge1xuJiM0MztcdFx0bmlkc1tucl9mb3VuZCYjNDM7JiM0MztdID0gbmlkO1xuJiM0MztcdFx0aWYgKG5yX2ZvdW5kID09IG5yX25pZHMpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG5vZGVtYXNrXzAgPSAxOyAvKiBuaWQ6IDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzayk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBub2RlbWFzaywgYmluZF9ub2RlbWFzaztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSAmIzQzOyAxO1xuIFx0aW50IHBvbGljeTtcbiBcdGNoYXIgKm1lbTtcbiYjNDM7XHRpbnQgbmlkO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKVxuJiM0MztcdGlmICghZ2V0X251bWFfbm9kZV9pZHMoXHUwMDI2bmlkLCAxKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGJpbmRfbm9kZW1hc2sgPSAxVUwgXHUwMDNjXHUwMDNjIG5pZDtcbiBcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcbiBcbiBcdC8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqL1xuLVx0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0a3ZtX2dldF9tZW1wb2xpY3koXHUwMDI2cG9saWN5LCBcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7XG4tXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBub2RlbWFza18wLFxuJiM0MztcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssXG4gXHRcdCAgICBcJiMzNDtXYW50ZWQgTVBPTF9JTlRFUkxFQVZFICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XCYjMzQ7LFxuLVx0XHQgICAgTVBPTF9JTlRFUkxFQVZFLCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcbiYjNDM7XHRcdCAgICBNUE9MX0lOVEVSTEVBVkUsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCBiYXNpYyBNUE9MX0JJTkQgcG9saWN5ICovXG4tXHRrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7XG4mIzQzO1x0a3ZtX21iaW5kKG1lbSAmIzQzOyBwYWdlX3NpemUgKiAyLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0a3ZtX2dldF9tZW1wb2xpY3koXHUwMDI2cG9saWN5LCBcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfRl9BRERSKTtcbi1cdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXG4mIzQzO1x0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcbiBcdFx0ICAgIFwmIzM0O1dhbnRlZCBNUE9MX0JJTkQgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcJiMzNDssXG4tXHRcdCAgICBNUE9MX0JJTkQsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spO1xuJiM0MztcdFx0ICAgIE1QT0xfQklORCwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IE1QT0xfREVGQVVMVCBwb2xpY3kgKi9cbiBcdGt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7XG5AQCAtMTEyLDcgJiM0MzsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXHRcdCAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovXG4tXHRyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCBcdTAwMjZiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTtcbiBcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuIFx0XHQgICAgXCYjMzQ7bWJpbmQgd2l0aCBpbnZhbGlkIHBvbGljeSBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFwmIzM0Oyk7XG4gXG5AQCAtMTIxLDE3ICYjNDM7MTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZTBfbWFzayA9IDE7ICAvKiBOb2RlIDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbm9kZTFfbWFzayA9IDI7ICAvKiBOb2RlIDEgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBiaW5kX25vZGVtYXNrc1syXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKGJpbmRfbm9kZW1hc2tzWzBdKSAmIzQzOyAxO1xuIFx0dm9pZCAqcGFnZXNbNF07XG4mIzQzO1x0aW50IG5pZHNbMl07XG4gXHRpbnQgc3RhdHVzWzRdO1xuIFx0Y2hhciAqbWVtO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcbiYjNDM7XHRpZiAoIWdldF9udW1hX25vZGVfaWRzKG5pZHMsIEFSUkFZX1NJWkUobmlkcykpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0YmluZF9ub2RlbWFza3NbMF0gPSAxVUwgXHUwMDNjXHUwMDNjIG5pZHNbMF07XG4mIzQzO1x0YmluZF9ub2RlbWFza3NbMV0gPSAxVUwgXHUwMDNjXHUwMDNjIG5pZHNbMV07XG4gXHRtZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA0OyBpJiM0MzsmIzQzOylcbkBAIC0xMzksMzQgJiM0MzsxNjEsNDIgQEAgc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcbiBcdC8qIFNldCBOVU1BIHBvbGljeSBhZnRlciBhbGxvY2F0aW9uICovXG4gXHRtZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4mIzQzO1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuIFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCBwYWdlX3NpemUpO1xuIFxuIFx0LyogU2V0IE5VTUEgcG9saWN5IGJlZm9yZSBhbGxvY2F0aW9uICovXG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTFfbWFzaywgbWF4bm9kZSwgMCk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4mIzQzO1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuIFx0bWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7XG4gXG4gXHQvKiBWYWxpZGF0ZSBpZiBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHNwZWNpZmllZCBOVU1BIG5vZGVzICovXG4gXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAxLCBcJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgc3RhdHVzWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCBcJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgc3RhdHVzWzFdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSAwLCBcJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgc3RhdHVzWzJdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAwLCBcJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgc3RhdHVzWzNdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1sxXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMV0sIHN0YXR1c1swXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IG5pZHNbMV0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMV0pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzBdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzJdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1swXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMF0sIHN0YXR1c1szXSk7XG4gXG4gXHQvKiBQdW5jaCBob2xlIGZvciBhbGwgcGFnZXMgKi9cbiBcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgdG90YWxfc2l6ZSk7XG4gXG4gXHQvKiBDaGFuZ2UgTlVNQSBwb2xpY3kgbm9kZXMgYW5kIHJlYWxsb2NhdGUgKi9cbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbi1cdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMV9tYXNrLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuJiM0MztcdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XG4gXHRtZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTtcbiBcbiBcdGt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDAsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMF0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDAsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMl0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDEsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbM10pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzBdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzBdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMF0sIHN0YXR1c1sxXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMV0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMl0pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzFdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1sxXSwgc3RhdHVzWzNdKTtcbiBcbiBcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuaW5kZXggMjk1NzJhNmQ3ODljZC4uNGJiYmYzMTRlOWQ3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuQEAgLTQsOCAmIzQzOzQsNiBAQFxuICNpZm5kZWYgU0VMRlRFU1RfS1ZNX05VTUFJRl9IXG4gI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcbiBcbi0jaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3ZtX3N5c2NhbGxzLmhcJiMzNDtcbkBAIC0zMCw1NCAmIzQzOzI4LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXG4gXHRcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXG4gXHRcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tYXhfbnVtYV9ub2RlKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnVtYV9tZW1fbm9kZXModm9pZClcbiB7XG4tXHRzdHJ1Y3QgZGlyZW50ICpkZTtcbi1cdGludCBtYXhfbm9kZSA9IDA7XG4tXHRESVIgKmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4gXG4tXHQvKlxuLVx0ICogQXNzdW1lIHRoZXJlJiMzOTtzIGEgc2luZ2xlIG5vZGUgaWYgdGhlIGtlcm5lbCBkb2VzbiYjMzk7dCBzdXBwb3J0IE5VTUEsXG4tXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXG4tXHQgKi9cbi1cdGQgPSBvcGVuZGlyKFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZVwmIzM0Oyk7XG4tXHRpZiAoIWQpXG4mIzQzO1x0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuJiM0MztcdGlmIChnZXRfbWVtcG9saWN5KE5VTEwsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgTlVMTCxcbiYjNDM7XHRcdFx0ICBNUE9MX0ZfTUVNU19BTExPV0VEKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkge1xuLVx0XHRpbnQgbm9kZV9pZDtcbi1cdFx0Y2hhciAqZW5kcHRyO1xuLVxuLVx0XHRpZiAoc3RybmNtcChkZS1cdTAwM2VkX25hbWUsIFwmIzM0O25vZGVcJiMzNDssIDQpICE9IDApXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdG5vZGVfaWQgPSBzdHJ0b2woZGUtXHUwMDNlZF9uYW1lICYjNDM7IDQsIFx1MDAyNmVuZHB0ciwgMTApO1xuLVx0XHRpZiAoKmVuZHB0ciAhPSAmIzM5O1xcMCYjMzk7KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAobm9kZV9pZCBcdTAwM2UgbWF4X25vZGUpXG4tXHRcdFx0bWF4X25vZGUgPSBub2RlX2lkO1xuLVx0fVxuLVx0Y2xvc2VkaXIoZCk7XG4tXG4tXHRyZXR1cm4gbWF4X25vZGU7XG4tfVxuLVxuLXN0YXRpYyBib29sIGlzX251bWFfYXZhaWxhYmxlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIFByb2JlIGZvciBOVU1BIGJ5IGRvaW5nIGEgZHVtbXkgZ2V0X21lbXBvbGljeSgpLiAgSWYgdGhlIHN5c2NhbGxcbi1cdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0LlxuLVx0ICogaWYgdGhlIHN5c2NhbGwgZmFpbHMgd2l0aCBFUEVSTSwgdGhlbiB0aGUgcHJvY2Vzcy91c2VyIGxhY2tzIHRoZVxuLVx0ICogbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyAoQ0FQX1NZU19OSUNFKS5cbi1cdCAqL1xuLVx0cmV0dXJuICFnZXRfbWVtcG9saWN5KE5VTEwsIE5VTEwsIDAsIE5VTEwsIDApIHx8XG4tXHRcdChlcnJubyAhPSBFTk9TWVMgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVQRVJNKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0odm9pZClcbi17XG4tXHRyZXR1cm4gaXNfbnVtYV9hdmFpbGFibGUoKSBcdTAwMjZcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcdTAwM2U9IDE7XG4mIzQzO1x0cmV0dXJuIG5vZGVtYXNrO1xuIH1cbiBcbiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX05VTUFJRl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG5pbmRleCAzOWNlOWE5MzY5ZjViLi42NmRjZjM2Mzk4YWFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbkBAIC0yNTEsOCAmIzQzOzI1MSw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0XHQgICB1NjQgKnBpcGlzX3JjdmQpXG4ge1xuIFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW3NpemVvZihub2RlbWFzaykgKiA4XTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcbiBcdGludCBub2RlcyA9IDA7XG4gXHR0aW1lX3Qgc3RhcnRfdGltZSwgbGFzdF91cGRhdGUsIG5vdztcbiBcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcbkBAIC0yNjYsMTkgJiM0MzsyNjYsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Q2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcblwmIzM0OyxcbiBcdFx0ZGVsYXlfdXNlY3MpO1xuIFxuLVx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuLVx0a3ZtX2dldF9tZW1wb2xpY3koTlVMTCwgXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxuLVx0XHRcdCAgMCwgTVBPTF9GX01FTVNfQUxMT1dFRCk7XG4mIzQzO1x0bm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbiBcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFwmIzM0O1xuIFx0XHRcJiMzNDsoZWFjaCAxLWJpdCBpbmRpY2F0ZXMgbm9kZSBpcyBwcmVzZW50KTogJSNseFxcblwmIzM0Oyxcbi1cdFx0c2l6ZW9mKG5vZGVtYXNrKSAqIDgsIG5vZGVtYXNrKTtcbiYjNDM7XHRcdEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBub2RlbWFzayk7XG4gXG4gXHQvKiBJbml0IGFycmF5IG9mIG1hc2tzIGNvbnRhaW5pbmcgYSBzaW5nbGUtYml0IGluIGVhY2gsIG9uZSBmb3IgZWFjaFxuIFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcbiBcdCAqIGFzIGJpdCBtYXNrcy5cbiBcdCAqL1xuLVx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2Mgc2l6ZW9mKG5vZGVtYXNrKSAqIDg7IGkmIzQzOyYjNDM7LCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4mIzQzO1x0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkmIzQzOyYjNDM7LCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4gXHRcdGlmIChub2RlbWFzayBcdTAwMjYgYml0KSB7XG4gXHRcdFx0bm9kZW1hc2tzW25vZGVzXSA9IG5vZGVtYXNrIFx1MDAyNiBiaXQ7XG4gXHRcdFx0bm9kZXMmIzQzOyYjNDM7O1xuQEAgLTMxMCw3ICYjNDM7MzA4LDcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAqIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gSWYgdGhhdCBhc3N1bXB0aW9uIGV2ZXIgY2hhbmdlcyB0aGlzXG4gXHRcdCAqIHRlc3QgbWF5IGJyZWFrIG9yIGdpdmUgYSBmYWxzZSBwb3NpdGl2ZSBzaWduYWwuXG4gXHRcdCAqL1xuLVx0XHRwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIHNpemVvZihub2RlbWFza3NbZnJvbV0pLFxuJiM0MztcdFx0cGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrc1tmcm9tXSkgJiM0MzsgMSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZub2RlbWFza3NbZnJvbV0sXG4gXHRcdFx0XHRcdFx0XHUwMDI2bm9kZW1hc2tzW3RvXSk7XG4gXHRcdGlmIChwYWdlc19ub3RfbW92ZWQgXHUwMDNjIDApXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGYwZTVkYTQ5MDg2NjAuLmY4NDgxMjBhZjg0YmUgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtNzIxLDYgJiM0Mzs3MjEsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKVxuIFxuIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4ge1xuJiM0MztcdHN0cnVjdCBmaWxlICpnbWVtX2ZpbGU7XG4mIzQzO1xuIFx0LypcbiBcdCAqIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHVuZGVybHlpbmcgZmlsZSB3YXMgX2FscmVhZHlfIGNsb3NlZCwgYXNcbiBcdCAqIGt2bV9nbWVtX3JlbGVhc2UoKSBpbnZhbGlkYXRlcyBhbmQgbnVsbGlmaWVzIGFsbCBiaW5kaW5ncy5cbkBAIC03MzMsMjEgJiM0Mzs3MzUsMjQgQEAgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiBcdC8qXG4gXHQgKiBIb3dldmVyLCBpZiB0aGUgZmlsZSBpcyBfYmVpbmdfIGNsb3NlZCwgdGhlbiB0aGUgYmluZGluZ3MgbmVlZCB0byBiZVxuIFx0ICogcmVtb3ZlZCBhcyBrdm1fZ21lbV9yZWxlYXNlKCkgbWlnaHQgbm90IHJ1biB1bnRpbCBhZnRlciB0aGUgbWVtc2xvdFxuLVx0ICogaXMgZnJlZWQuICBOb3RlLCBtb2RpZnlpbmcgdGhlIGJpbmRpbmdzIGlzIHNhZmUgZXZlbiB0aG91Z2ggdGhlIGZpbGVcbi1cdCAqIGlzIGR5aW5nIGFzIGt2bV9nbWVtX3JlbGVhc2UoKSBudWxsaWZpZXMgc2xvdC1cdTAwM2VnbWVtLmZpbGUgdW5kZXJcbiYjNDM7XHQgKiBpcyBmcmVlZC4gIE5vdGUsIGRlcmVmZXJlbmNpbmcgdGhlIGR5aW5nIGZpbGUgaXMgc2FmZSBhc1xuJiM0MztcdCAqIGt2bV9nbWVtX3JlbGVhc2UoKSBudWxsaWZpZXMgc2xvdC1cdTAwM2VnbWVtLmZpbGUgdW5kZXJcbiBcdCAqIHNsb3RzX2xvY2ssIGFuZCBvbmx5IHB1dHMgaXRzIHJlZmVyZW5jZSB0byBLVk0gYWZ0ZXIgZGVzdHJveWluZyBhbGxcbiBcdCAqIGJpbmRpbmdzLiAgSS5lLiByZWFjaGluZyB0aGlzIHBvaW50IG1lYW5zIGt2bV9nbWVtX3JlbGVhc2UoKSBoYXNuJiMzOTt0XG4gXHQgKiB5ZXQgZGVzdHJveWVkIHRoZSBiaW5kaW5ncyBvciBmcmVlZCB0aGUgZ21lbV9maWxlLCBhbmQgY2FuJiMzOTt0IGRvIHNvXG4gXHQgKiB1bnRpbCB0aGUgY2FsbGVyIGRyb3BzIHNsb3RzX2xvY2suXG4gXHQgKi9cbi1cdGlmICghZmlsZSkge1xuLVx0XHRfX2t2bV9nbWVtX3VuYmluZChzbG90LCBzbG90LVx1MDAzZWdtZW0uZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4mIzQzO1x0Z21lbV9maWxlID0gZmlsZSA/OiBzbG90LVx1MDAzZWdtZW0uZmlsZTtcbiBcbi1cdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbi1cdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKTtcbi1cdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFrZSB0aGUgaW52YWxpZGF0ZSBsb2NrIGV2ZW4gZm9yIGEgZHlpbmcgZmlsZS4gIE90aGVyd2lzZSxcbiYjNDM7XHQgKiBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KCkgY2FuIGZpbmQgdGhlIGJpbmRpbmcgYW5kIGluY3JlbWVudFxuJiM0MztcdCAqIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzIHdoaWxlIGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKCkgbWlzc2VzXG4mIzQzO1x0ICogdGhlIHJlbW92ZWQgYmluZGluZyBhbmQgc2tpcHMgZGVjcmVtZW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGdtZW1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuJiM0MztcdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuJiM0MztcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZ21lbV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gfVxuIFxuIC8qIFJldHVybnMgYSBsb2NrZWQgZm9saW8gb24gc3VjY2Vzcy4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBrdm1fZ21lbV91bmJpbmRgIHdoZW4gYSBndWVzdF9tZW1mZCBmaWxlIGlzIGJlaW5nIGNsb3NlZCBieSBlbnN1cmluZyB0aGUgaW52YWxpZGF0ZSBsb2NrIGlzIHRha2VuIGV2ZW4gZm9yIGR5aW5nIGZpbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBLVk0gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMzJjY2VmOTEwNDllNmRmNzIyYWMwYzNhOTIyOGFhYTNkZTE1MDlhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTM6NDM6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYwppbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMKQEAgLTc2LDMzICYjNDM7NzYsNTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tbWFwX3N1cHBvcnRlZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogCWt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLgomIzQzOyAqIFJldHVybiBmYWxzZSBpZiB0aGUgbWFzayBjb250YWlucyBmZXdlciB0aGFuIEBucl9uaWRzIG5vZGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmlkOwomIzQzOwlpbnQgbnJfZm91bmQgPSAwOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KG5pZCwgJmFtcDtub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzaykpIHsKJiM0MzsJCW5pZHNbbnJfZm91bmQmIzQzOyYjNDM7XSA9IG5pZDsKJiM0MzsJCWlmIChucl9mb3VuZCA9PSBucl9uaWRzKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiB7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovCi0JdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzayk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2ssIGJpbmRfbm9kZW1hc2s7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spICYjNDM7IDE7CiAJaW50IHBvbGljeTsKIAljaGFyICptZW07CiYjNDM7CWludCBuaWQ7CiAJaW50IHJldDsKIAotCWlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKQomIzQzOwlpZiAoIWdldF9udW1hX25vZGVfaWRzKCZhbXA7bmlkLCAxKSkKIAkJcmV0dXJuOwogCiYjNDM7CWJpbmRfbm9kZW1hc2sgPSAxVUwgJmx0OyZsdDsgbmlkOwogCW1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTsKIAogCS8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqLwotCWt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgJmFtcDtub2RlbWFza18wLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCAmYW1wO2JpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApOwogCWt2bV9nZXRfbWVtcG9saWN5KCZhbXA7cG9saWN5LCAmYW1wO25vZGVtYXNrLCBtYXhub2RlLCBtZW0sIE1QT0xfRl9BRERSKTsKLQlURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFICZhbXA7JmFtcDsgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCwKJiM0MzsJVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSAmYW1wOyZhbXA7IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssCiAJCSAgICAmIzM0O1dhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHgmIzM0OywKLQkJICAgIE1QT0xfSU5URVJMRUFWRSwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7CiYjNDM7CQkgICAgTVBPTF9JTlRFUkxFQVZFLCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTsKIAogCS8qIFRlc3QgYmFzaWMgTVBPTF9CSU5EIHBvbGljeSAqLwotCWt2bV9tYmluZChtZW0gJiM0MzsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGVtYXNrXzAsIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTsKIAlrdm1fZ2V0X21lbXBvbGljeSgmYW1wO3BvbGljeSwgJmFtcDtub2RlbWFzaywgbWF4bm9kZSwgbWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfRl9BRERSKTsKLQlURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EICZhbXA7JmFtcDsgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCwKJiM0MzsJVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCAmYW1wOyZhbXA7IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssCiAJCSAgICAmIzM0O1dhbnRlZCBNUE9MX0JJTkQgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHgmIzM0OywKLQkJICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7CiYjNDM7CQkgICAgTVBPTF9CSU5ELCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTsKIAogCS8qIFRlc3QgTVBPTF9ERUZBVUxUIHBvbGljeSAqLwogCWt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7CkBAIC0xMTIsNyAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAkJICAgIE1QT0xfREVGQVVMVCwgcG9saWN5LCBub2RlbWFzayk7CiAKIAkvKiBUZXN0IHdpdGggaW52YWxpZCBwb2xpY3kgKi8KLQlyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCAmYW1wO25vZGVtYXNrXzAsIG1heG5vZGUsIDApOwomIzQzOwlyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCAmYW1wO2JpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApOwogCVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKIAkJICAgICYjMzQ7bWJpbmQgd2l0aCBpbnZhbGlkIHBvbGljeSBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTCYjMzQ7KTsKIApAQCAtMTIxLDE3ICYjNDM7MTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAogc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIG5vZGUwX21hc2sgPSAxOyAgLyogTm9kZSAwICovCi0JdW5zaWduZWQgbG9uZyBub2RlMV9tYXNrID0gMjsgIC8qIE5vZGUgMSAqLwotCXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICYjNDM7IDE7CiAJdm9pZCAqcGFnZXNbNF07CiYjNDM7CWludCBuaWRzWzJdOwogCWludCBzdGF0dXNbNF07CiAJY2hhciAqbWVtOwogCWludCBpOwogCi0JaWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpCiYjNDM7CWlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpCiAJCXJldHVybjsKIAomIzQzOwliaW5kX25vZGVtYXNrc1swXSA9IDFVTCAmbHQ7Jmx0OyBuaWRzWzBdOwomIzQzOwliaW5kX25vZGVtYXNrc1sxXSA9IDFVTCAmbHQ7Jmx0OyBuaWRzWzFdOwogCW1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyA0OyBpJiM0MzsmIzQzOykKQEAgLTEzOSwzNCAmIzQzOzE2MSw0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogCiAJLyogU2V0IE5VTUEgcG9saWN5IGFmdGVyIGFsbG9jYXRpb24gKi8KIAltZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpOwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsICZhbXA7bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApOwogCWt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTsKIAogCS8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqLwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUxX21hc2ssIG1heG5vZGUsIDApOwotCWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTsKIAltZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTsKIAogCS8qIFZhbGlkYXRlIGlmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gc3BlY2lmaWVkIE5VTUEgbm9kZXMgKi8KIAlrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMF0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1sxXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzJdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMCwgJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbM10pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMF0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMV0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMl0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbM10pOwogCiAJLyogUHVuY2ggaG9sZSBmb3IgYWxsIHBhZ2VzICovCiAJa3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTsKIAogCS8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqLwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwotCWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUxX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTsKIAltZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTsKIAogCWt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApOwotCVRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1swXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzFdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMl0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1szXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzBdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMF0sIHN0YXR1c1swXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzBdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMF0sIHN0YXR1c1sxXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzFdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMV0sIHN0YXR1c1syXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzFdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMV0sIHN0YXR1c1szXSk7CiAKIAlrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCmluZGV4IDI5NTcyYTZkNzg5Y2QuLjRiYmJmMzE0ZTlkNzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCkBAIC00LDggJiM0Mzs0LDYgQEAKICNpZm5kZWYgU0VMRlRFU1RfS1ZNX05VTUFJRl9ICiAjZGVmaW5lIFNFTEZURVNUX0tWTV9OVU1BSUZfSAogCi0jaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7Ci0KICNpbmNsdWRlICZsdDtsaW51eC9tZW1wb2xpY3kuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrdm1fc3lzY2FsbHMuaCYjMzQ7CkBAIC0zMCw1NCAmIzQzOzI4LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsCiAJCSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsCiAJCSAgIHVuc2lnbmVkIGludCwgZmxhZ3MpOwogCi1zdGF0aWMgaW5saW5lIGludCBnZXRfbWF4X251bWFfbm9kZSh2b2lkKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnVtYV9tZW1fbm9kZXModm9pZCkKIHsKLQlzdHJ1Y3QgZGlyZW50ICpkZTsKLQlpbnQgbWF4X25vZGUgPSAwOwotCURJUiAqZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7CiAKLQkvKgotCSAqIEFzc3VtZSB0aGVyZSYjMzk7cyBhIHNpbmdsZSBub2RlIGlmIHRoZSBrZXJuZWwgZG9lc24mIzM5O3Qgc3VwcG9ydCBOVU1BLAotCSAqIG9yIGlmIG5vIG5vZGVzIGFyZSBmb3VuZC4KLQkgKi8KLQlkID0gb3BlbmRpcigmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZSYjMzQ7KTsKLQlpZiAoIWQpCiYjNDM7CS8qIEdldCBzZXQgb2YgZmlyc3QgNjQgbnVtYSBub2RlcyBhdmFpbGFibGUgKi8KJiM0MzsJaWYgKGdldF9tZW1wb2xpY3koTlVMTCwgJmFtcDtub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzayksIE5VTEwsCiYjNDM7CQkJICBNUE9MX0ZfTUVNU19BTExPV0VEKSkKIAkJcmV0dXJuIDA7CiAKLQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgewotCQlpbnQgbm9kZV9pZDsKLQkJY2hhciAqZW5kcHRyOwotCi0JCWlmIChzdHJuY21wKGRlLSZndDtkX25hbWUsICYjMzQ7bm9kZSYjMzQ7LCA0KSAhPSAwKQotCQkJY29udGludWU7Ci0KLQkJbm9kZV9pZCA9IHN0cnRvbChkZS0mZ3Q7ZF9uYW1lICYjNDM7IDQsICZhbXA7ZW5kcHRyLCAxMCk7Ci0JCWlmICgqZW5kcHRyICE9ICYjMzk7XDAmIzM5OykKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChub2RlX2lkICZndDsgbWF4X25vZGUpCi0JCQltYXhfbm9kZSA9IG5vZGVfaWQ7Ci0JfQotCWNsb3NlZGlyKGQpOwotCi0JcmV0dXJuIG1heF9ub2RlOwotfQotCi1zdGF0aWMgYm9vbCBpc19udW1hX2F2YWlsYWJsZSh2b2lkKQotewotCS8qCi0JICogUHJvYmUgZm9yIE5VTUEgYnkgZG9pbmcgYSBkdW1teSBnZXRfbWVtcG9saWN5KCkuICBJZiB0aGUgc3lzY2FsbAotCSAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0LgotCSAqIGlmIHRoZSBzeXNjYWxsIGZhaWxzIHdpdGggRVBFUk0sIHRoZW4gdGhlIHByb2Nlc3MvdXNlciBsYWNrcyB0aGUKLQkgKiBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzIChDQVBfU1lTX05JQ0UpLgotCSAqLwotCXJldHVybiAhZ2V0X21lbXBvbGljeShOVUxMLCBOVUxMLCAwLCBOVUxMLCAwKSB8fAotCQkoZXJybm8gIT0gRU5PU1lTICZhbXA7JmFtcDsgZXJybm8gIT0gRVBFUk0pOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSh2b2lkKQotewotCXJldHVybiBpc19udW1hX2F2YWlsYWJsZSgpICZhbXA7JmFtcDsgZ2V0X21heF9udW1hX25vZGUoKSAmZ3Q7PSAxOwomIzQzOwlyZXR1cm4gbm9kZW1hc2s7CiB9CiAKICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fTlVNQUlGX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYwppbmRleCAzOWNlOWE5MzY5ZjViLi42NmRjZjM2Mzk4YWFhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jCkBAIC0yNTEsOCAmIzQzOzI1MSw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLAogCQkgICB1NjQgKnBpcGlzX3JjdmQpCiB7CiAJbG9uZyBwYWdlc19ub3RfbW92ZWQ7Ci0JdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBub2RlbWFza3Nbc2l6ZW9mKG5vZGVtYXNrKSAqIDhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrOwomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKV07CiAJaW50IG5vZGVzID0gMDsKIAl0aW1lX3Qgc3RhcnRfdGltZSwgbGFzdF91cGRhdGUsIG5vdzsKIAl0aW1lX3QgaW50ZXJ2YWxfc2VjcyA9IDE7CkBAIC0yNjYsMTkgJiM0MzsyNjYsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsCiAJZnByaW50ZihzdGRlcnIsICYjMzQ7Q2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xuJiMzNDssCiAJCWRlbGF5X3VzZWNzKTsKIAotCS8qIEdldCBzZXQgb2YgZmlyc3QgNjQgbnVtYSBub2RlcyBhdmFpbGFibGUgKi8KLQlrdm1fZ2V0X21lbXBvbGljeShOVUxMLCAmYW1wO25vZGVtYXNrLCBzaXplb2Yobm9kZW1hc2spICogOCwKLQkJCSAgMCwgTVBPTF9GX01FTVNfQUxMT1dFRCk7CiYjNDM7CW5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7CiAKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzICYjMzQ7CiAJCSYjMzQ7KGVhY2ggMS1iaXQgaW5kaWNhdGVzIG5vZGUgaXMgcHJlc2VudCk6ICUjbHhcbiYjMzQ7LAotCQlzaXplb2Yobm9kZW1hc2spICogOCwgbm9kZW1hc2spOwomIzQzOwkJQklUU19QRVJfVFlQRShub2RlbWFzayksIG5vZGVtYXNrKTsKIAogCS8qIEluaXQgYXJyYXkgb2YgbWFza3MgY29udGFpbmluZyBhIHNpbmdsZS1iaXQgaW4gZWFjaCwgb25lIGZvciBlYWNoCiAJICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXMKIAkgKiBhcyBiaXQgbWFza3MuCiAJICovCi0JZm9yIChpID0gMCwgYml0ID0gMTsgaSAmbHQ7IHNpemVvZihub2RlbWFzaykgKiA4OyBpJiM0MzsmIzQzOywgYml0ICZsdDsmbHQ7PSAxKSB7CiYjNDM7CWZvciAoaSA9IDAsIGJpdCA9IDE7IGkgJmx0OyBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTsgaSYjNDM7JiM0MzssIGJpdCAmbHQ7Jmx0Oz0gMSkgewogCQlpZiAobm9kZW1hc2sgJmFtcDsgYml0KSB7CiAJCQlub2RlbWFza3Nbbm9kZXNdID0gbm9kZW1hc2sgJmFtcDsgYml0OwogCQkJbm9kZXMmIzQzOyYjNDM7OwpAQCAtMzEwLDcgJiM0MzszMDgsNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcywKIAkJICogS1ZNX0NSRUFURV9WQ1BVIGlvY3RsLiBJZiB0aGF0IGFzc3VtcHRpb24gZXZlciBjaGFuZ2VzIHRoaXMKIAkJICogdGVzdCBtYXkgYnJlYWsgb3IgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlIHNpZ25hbC4KIAkJICovCi0JCXBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgc2l6ZW9mKG5vZGVtYXNrc1tmcm9tXSksCiYjNDM7CQlwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIEJJVFNfUEVSX1RZUEUobm9kZW1hc2tzW2Zyb21dKSAmIzQzOyAxLAogCQkJCQkJJmFtcDtub2RlbWFza3NbZnJvbV0sCiAJCQkJCQkmYW1wO25vZGVtYXNrc1t0b10pOwogCQlpZiAocGFnZXNfbm90X21vdmVkICZsdDsgMCkKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IGYwZTVkYTQ5MDg2NjAuLmY4NDgxMjBhZjg0YmUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtNzIxLDYgJiM0Mzs3MjEsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKQogCiB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQogewomIzQzOwlzdHJ1Y3QgZmlsZSAqZ21lbV9maWxlOwomIzQzOwogCS8qCiAJICogTm90aGluZyB0byBkbyBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHdhcyBfYWxyZWFkeV8gY2xvc2VkLCBhcwogCSAqIGt2bV9nbWVtX3JlbGVhc2UoKSBpbnZhbGlkYXRlcyBhbmQgbnVsbGlmaWVzIGFsbCBiaW5kaW5ncy4KQEAgLTczMywyMSAmIzQzOzczNSwyNCBAQCB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQogCS8qCiAJICogSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgX2JlaW5nXyBjbG9zZWQsIHRoZW4gdGhlIGJpbmRpbmdzIG5lZWQgdG8gYmUKIAkgKiByZW1vdmVkIGFzIGt2bV9nbWVtX3JlbGVhc2UoKSBtaWdodCBub3QgcnVuIHVudGlsIGFmdGVyIHRoZSBtZW1zbG90Ci0JICogaXMgZnJlZWQuICBOb3RlLCBtb2RpZnlpbmcgdGhlIGJpbmRpbmdzIGlzIHNhZmUgZXZlbiB0aG91Z2ggdGhlIGZpbGUKLQkgKiBpcyBkeWluZyBhcyBrdm1fZ21lbV9yZWxlYXNlKCkgbnVsbGlmaWVzIHNsb3QtJmd0O2dtZW0uZmlsZSB1bmRlcgomIzQzOwkgKiBpcyBmcmVlZC4gIE5vdGUsIGRlcmVmZXJlbmNpbmcgdGhlIGR5aW5nIGZpbGUgaXMgc2FmZSBhcwomIzQzOwkgKiBrdm1fZ21lbV9yZWxlYXNlKCkgbnVsbGlmaWVzIHNsb3QtJmd0O2dtZW0uZmlsZSB1bmRlcgogCSAqIHNsb3RzX2xvY2ssIGFuZCBvbmx5IHB1dHMgaXRzIHJlZmVyZW5jZSB0byBLVk0gYWZ0ZXIgZGVzdHJveWluZyBhbGwKIAkgKiBiaW5kaW5ncy4gIEkuZS4gcmVhY2hpbmcgdGhpcyBwb2ludCBtZWFucyBrdm1fZ21lbV9yZWxlYXNlKCkgaGFzbiYjMzk7dAogCSAqIHlldCBkZXN0cm95ZWQgdGhlIGJpbmRpbmdzIG9yIGZyZWVkIHRoZSBnbWVtX2ZpbGUsIGFuZCBjYW4mIzM5O3QgZG8gc28KIAkgKiB1bnRpbCB0aGUgY2FsbGVyIGRyb3BzIHNsb3RzX2xvY2suCiAJICovCi0JaWYgKCFmaWxlKSB7Ci0JCV9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIHNsb3QtJmd0O2dtZW0uZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhKTsKLQkJcmV0dXJuOwotCX0KJiM0MzsJZ21lbV9maWxlID0gZmlsZSA/OiBzbG90LSZndDtnbWVtLmZpbGU7CiAKLQlmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhmaWxlLSZndDtmX21hcHBpbmcpOwotCV9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGZpbGUtJmd0O3ByaXZhdGVfZGF0YSk7Ci0JZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhmaWxlLSZndDtmX21hcHBpbmcpOwomIzQzOwkvKgomIzQzOwkgKiBUYWtlIHRoZSBpbnZhbGlkYXRlIGxvY2sgZXZlbiBmb3IgYSBkeWluZyBmaWxlLiAgT3RoZXJ3aXNlLAomIzQzOwkgKiBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KCkgY2FuIGZpbmQgdGhlIGJpbmRpbmcgYW5kIGluY3JlbWVudAomIzQzOwkgKiBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzcyB3aGlsZSBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZCgpIG1pc3NlcwomIzQzOwkgKiB0aGUgcmVtb3ZlZCBiaW5kaW5nIGFuZCBza2lwcyBkZWNyZW1lbnQuCiYjNDM7CSAqLwomIzQzOwlmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhnbWVtX2ZpbGUtJmd0O2ZfbWFwcGluZyk7CiYjNDM7CV9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhKTsKJiM0MzsJZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhnbWVtX2ZpbGUtJmd0O2ZfbWFwcGluZyk7CiB9CiAKIC8qIFJldHVybnMgYSBsb2NrZWQgZm9saW8gb24gc3VjY2Vzcy4gICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxODUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIEd1ZXN0IE1lbWZkIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBndWVzdF9tZW1mZF90ZXN0LmNgLCBgbnVtYWlmLmhgLCBgeGFwaWNfaXBpX3Rlc3QuY2AsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgYGd1ZXN0X21lbWZkLmNgLiBUaGUgY2hhbmdlcyBpbiBgZ3Vlc3RfbWVtZmQuY2AgYXJlIHdoYXQgSSYjMzk7bSBmb2N1c2luZyBvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIGJ1ZyBmaXggaW4gdGhlIGBrdm1fZ21lbV91bmJpbmRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gZ3Vlc3QgbWVtZmQuCgpUaGUgZ2lzdCBvZiBpdCBpcyB0aGlzOiB3aGVuIGEgZ3Vlc3QgbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQsIGFuZCB0aGUgYGZpbGVgIHBvaW50ZXIgaXMgbnVsbCAobWVhbmluZyB0aGUgZmlsZSBpcyBkeWluZykgdGhlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2Agd2FzbiYjMzk7dCBiZWluZyB0YWtlbi4gIFRoaXMgaXMgYSBjcml0aWNhbCBvdmVyc2lnaHQuICBJZiB0aGF0IGxvY2sgaXNuJiMzOTt0IGhlbGQsIHRoZW4gdGhlIGludmFsaWRhdGUgbG9naWMgY291bGQgZ2V0IGludG8gYSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpYCBjb3VsZCBzZWUgYW4gYWN0aXZlIGJpbmRpbmcsIGluY3JlbWVudGluZyBhIGNvdW50ZXIsIHdoaWxlIGBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZCgpYCBtaWdodCBtaXNzIHRoZSB1bmJpbmRpbmcsIGxlYXZpbmcgdGhhdCBjb3VudGVyIHVuYmFsYW5jZWQuICBUaGlzIGNhbiBsZWFkIHRvIHNpZ25pZmljYW50IGlzc3Vlcy4KClRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGludmFsaWRhdGUgbG9jayBpcyBhbHdheXMgdGFrZW4gYmVmb3JlIHVuYmluZGluZyB0aGUgZ3Vlc3QgbWVtZmQgc2xvdCwgZXZlbiB3aGVuIHRoZSB1bmRlcmx5aW5nIGZpbGUgaXMgYmVpbmcgY2xvc2VkLiBUaGUgbG9naWMgbm93IHVzZXMgZWl0aGVyIHRoZSBleGlzdGluZyBgZmlsZWAgcG9pbnRlciBvciB1c2VzIHRoZSBzbG90JiMzOTtzIGBnbWVtLmZpbGVgIGlmIHRoZSBgZmlsZWAgcG9pbnRlciBpcyBudWxsLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIGlzIGhlbGQuCgpUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGZpeCwgYnV0IGl0JiMzOTtzIGEgY3JpdGljYWwgb25lIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBzaXRzIGluIHRoZSBoZWFydCBvZiBob3cgS1ZNIGhhbmRsZXMgZ3Vlc3QgbWVtZmQsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgY2FuIGVhc2lseSBsZWFkIHRvIG11Y2ggbW9yZSBzZXJpb3VzIHByb2JsZW1zLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gdGhlIGNhbGxlcnMgb2YgYGt2bV9nbWVtX3VuYmluZGAgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dtZW1fdW5iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NjQzPWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTcwNy1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzA4OnN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIHN0cnVjdCBnbWVtX2ZpbGUgKmYpXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTcwOS17XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MjEtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjcyMjp2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MjMte1xuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzUzLVx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZ21lbV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjc1NDpcdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NTUtXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGdtZW1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9OTM1PXN0YXRpYyB2b2lkIGt2bV9mcmVlX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtOTM3LVx0aWYgKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjkzODpcdFx0a3ZtX2dtZW1fdW5iaW5kKHNsb3QpO1xudmlydC9rdm0va3ZtX21haW4uYy05MzktXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xNjk2PXN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ5LVx0XHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkpXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NTA6XHRcdFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NTEtXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xOTk0PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjAtXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxudmlydC9rdm0va3ZtX21haW4uYzoyMTIxOlx0XHRrdm1fZ21lbV91bmJpbmQobmV3KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyMi1vdXQ6XG4tLVxudmlydC9rdm0va3ZtX21tLmg9Nzc9aW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxudmlydC9rdm0va3ZtX21tLmgtNzgtXHRcdCAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KTtcbnZpcnQva3ZtL2t2bV9tbS5oOjc5OnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xudmlydC9rdm0va3ZtX21tLmgtODAtI2Vsc2Vcbi0tXG52aXJ0L2t2bS9rdm1fbW0uaD04Nj1zdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbW0uaC05My1cbnZpcnQva3ZtL2t2bV9tbS5oOjk0OnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbnZpcnQva3ZtL2t2bV9tbS5oLTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBhIHByb21pc2luZyB0YXJnZXQuIFRoZSBga3ZtX2dtZW1fdW5iaW5kYCBmdW5jdGlvbiBpbiBga3ZtX21haW4uY2Agc2VlbXMgdG8gYmUgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBpbXBvcnRhbnQgZnVuY3Rpb25zIGxpa2UgYGt2bV9mcmVlX21lbXNsb3RgLCBga3ZtX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kIGBrdm1fc2V0X21lbW9yeV9yZWdpb25gIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aCB3aXRoIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBLVk0gb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGV4cGxvcmluZyB3aXRoIGZ1enppbmcuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgZ3Vlc3RfbWVtZmQgYW5kIHByb2NlZWQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fTUVNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzM1PWFsbG93cyBtYXBwaW5nIGd1ZXN0X21lbWZkIG1lbW9yeSBpbnRvIGEgZ3Vlc3QuICBBbGwgZmllbGRzIHNoYXJlZCB3aXRoXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzNjpLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBpZGVudGljYWxseS4gIFVzZXJzcGFjZSBjYW4gc2V0IEtWTV9NRU1fR1VFU1RfTUVNRkRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM3LWluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzU2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1OC11c2Vyc3BhY2VfYWRkciAoc2hhcmVkIG1lbW9yeSkuICBIb3dldmVyLCBcJiMzNDt2YWxpZFwmIzM0OyBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTYxOT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3Nsb3RfaGFzX2dtZW0oY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC02MjAte1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjYyMTpcdHJldHVybiBzbG90IFx1MDAyNlx1MDAyNiAoc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNjIyLX1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Mzk9c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC01Ny0jZGVmaW5lIEtWTV9NRU1fUkVBRE9OTFlcdCgxVUwgXHUwMDNjXHUwMDNjIDEpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NTg6I2RlZmluZSBLVk1fTUVNX0dVRVNUX01FTUZEXHQoMVVMIFx1MDAzY1x1MDAzYyAyKVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTU5LVxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOT1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTU3LSNkZWZpbmUgS1ZNX01FTV9SRUFET05MWVx0KDFVTCBcdTAwM2NcdTAwM2MgMSlcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo1ODojZGVmaW5lIEtWTV9NRU1fR1VFU1RfTUVNRkRcdCgxVUwgXHUwMDNjXHUwMDNjIDIpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz0zNzg9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2JpbmRpbmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBmZCwgc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM4MjpcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCAwLCBLVk1fTUVNX0dVRVNUX01FTUZELCAwLCBzaXplLCAwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXHRcdFx0XHRcdCBmZCwgQUxJR05fRE9XTihJTlQ2NF9NQVgsIHBhZ2Vfc2l6ZSkpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9NTM1PXN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3MC1cdFx0XHRcdFx0ICAgICBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTcxOlx0dm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIHNsb3QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsIGdwYSwgc2l6ZSwgTlVMTCwgZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3OT1zdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNTAwLVx0aWYgKGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHNoYXBlKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo1MDE6XHRcdGZsYWdzIHw9IEtWTV9NRU1fR1VFU1RfTUVNRkQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNTAyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05Nzk9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODU6XHRpZiAoZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg2LVx0XHRpZiAoZ3Vlc3RfbWVtZmQgXHUwMDNjIDApIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9MTI3ND12b2lkIHZtX2d1ZXN0X21lbV9mYWxsb2NhdGUoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBiYXNlLCB1NjQgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI4Ny1cdFx0cmVnaW9uID0gdXNlcnNwYWNlX21lbV9yZWdpb25fZmluZCh2bSwgZ3BhLCBncGEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyODg6XHRcdFRFU1RfQVNTRVJUKHJlZ2lvbiBcdTAwMjZcdTAwMjYgcmVnaW9uLVx1MDAzZXJlZ2lvbi5mbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjg5LVx0XHRcdCAgICBcJiMzNDtQcml2YXRlIG1lbW9yeSByZWdpb24gbm90IGZvdW5kIGZvciBHUEEgMHglbHhcJiMzNDssIGdwYSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jPTY1PXN0YXRpYyB2b2lkIHByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYmFzZV9ncGEsIHU2NCBvZmZzZXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTc1LVx0XHQuZ3BhID0gYmFzZV9ncGEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6NzY6XHRcdC5mbGFncyA9IHByaXZhdGUgPyBLVk1fTUVNX0dVRVNUX01FTUZEIDogMCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy03Ny1cdH07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jPTE2Mz1zdGF0aWMgdm9pZCBfX3Rlc3RfcHJlX2ZhdWx0X21lbW9yeSh1bnNpZ25lZCBsb25nIHZtX3R5cGUsIGJvb2wgcHJpdmF0ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTgyLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgZ3BhLCBURVNUX1NMT1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6MTgzOlx0XHRcdFx0ICAgIFRFU1RfTlBBR0VTLCBwcml2YXRlID8gS1ZNX01FTV9HVUVTVF9NRU1GRCA6IDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTE4NC1cdHZpcnRfbWFwKHZtLCBndmEsIGdwYSwgVEVTVF9OUEFHRVMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9MzQ2PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9tZW1vcnlfcmVnaW9uX2ZsYWdzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNDgtXHR1MzIgc3VwcG9ydGVkX2ZsYWdzID0gS1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM0OTpcdGNvbnN0IHUzMiB2Ml9vbmx5X2ZsYWdzID0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzUwLVx0c3RydWN0IGt2bV92bSAqdm07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNjQtXHRpZiAoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX01FTU9SWV9BVFRSSUJVVEVTKSBcdTAwMjYgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzY1Olx0XHRzdXBwb3J0ZWRfZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzY2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozODY6XHRpZiAoc3VwcG9ydGVkX2ZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM4Ny1cdFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg5LVx0XHRyID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgMCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzkwOlx0XHRcdFx0XHRcdCBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUyB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5MS1cdFx0XHRcdFx0XHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTUtXHRcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCAwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTY6XHRcdFx0XHRcdFx0IEtWTV9NRU1fUkVBRE9OTFkgfCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTctXHRcdFx0XHRcdFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDU4PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG1lbWZkLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDYwLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDYxOlx0aW50IHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ2Mi1cdFx0XHRcdFx0ICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TSVpFLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzI6XHRwcl9pbmZvKFwmIzM0O1Rlc3RpbmcgQUREIG9mIEtWTV9NRU1fR1VFU1RfTUVNRkQgbWVtb3J5IHJlZ2lvbnNcXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzMtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4NzpcdHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtMiwgTUVNX1JFR0lPTl9TTE9ULCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODgtXHRcdFx0XHQgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TSVpFLCAwLCBtZW1mZCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NjpcdHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ5Ny1cdFx0XHRcdCAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NJWkUsIDAsIG1lbWZkLCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTUwMz1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9vdmVybGFwcGluZ19wcml2YXRlX21lbW9yeV9yZWdpb25zKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MDgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUwOTpcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBBREQgb2Ygb3ZlcmxhcHBpbmcgS1ZNX01FTV9HVUVTVF9NRU1GRCBtZW1vcnkgcmVnaW9uc1xcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTE1Olx0dm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE2LVx0XHRcdFx0ICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0laRSAqIDIsIDAsIG1lbWZkLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTg6XHR2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgTUVNX1JFR0lPTl9TTE9UICYjNDM7IDEsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxOS1cdFx0XHRcdCAgIE1FTV9SRUdJT05fR1BBICogMiwgTUVNX1JFR0lPTl9TSVpFICogMixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyNS1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MjY6XHR2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgTUVNX1JFR0lPTl9TTE9ULCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjctXHRcdFx0XHQgICBNRU1fUkVHSU9OX0dQQSwgMCwgTlVMTCwgLTEsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTMyLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUzMzpcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzNC1cdFx0XHRcdFx0IE1FTV9SRUdJT05fR1BBLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQwLVx0LyogQW5kIG5vdyB0aGUgYmFjayBoYWxmIG9mIHRoZSBvdGhlciBzbG90JiMzOTtzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU0MTpcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0Mi1cdFx0XHRcdFx0IE1FTV9SRUdJT05fR1BBLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTUyLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU1MzpcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU1NC1cdFx0XHRcdFx0IE1FTV9SRUdJT05fR1BBICogMiAtIE1FTV9SRUdJT05fU0laRSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2MC1cdC8qIEFuZCBub3cgdGhlIGJhY2sgaGFsZiBvZiB0aGUgb3RoZXIgc2xvdC4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTYxOlx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTYyLVx0XHRcdFx0XHQgTUVNX1JFR0lPTl9HUEEgKiAyICYjNDM7IE1FTV9SRUdJT05fU0laRSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTYyMz1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNjQ4LVx0fSBlbHNlIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NjQ5Olx0XHRwcl9pbmZvKFwmIzM0O1NraXBwaW5nIHRlc3RzIGZvciBLVk1fTUVNX0dVRVNUX01FTUZEIG1lbW9yeSByZWdpb25zXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNjUwLVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTM2OT1zdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdmNwdXMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDAxLVx0XHRcdCAgIEJBU0VfREFUQV9TTE9UICYjNDM7IGksIHNsb3Rfc2l6ZSAvIHZtLVx1MDAzZXBhZ2Vfc2l6ZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQwMjpcdFx0XHQgICBLVk1fTUVNX0dVRVNUX01FTUZELCBtZW1mZCwgc2xvdF9zaXplICogaSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MDMtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jPTQ3PXN0YXRpYyB2b2lkIHRlc3RfcHJpdmF0ZV9hY2Nlc3NfbWVtc2xvdF9kZWxldGVkKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTYwLVx0XHRcdFx0ICAgIEVYSVRTX1RFU1RfTlBBR0VTLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jOjYxOlx0XHRcdFx0ICAgIEtWTV9NRU1fR1VFU1RfTUVNRkQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTYyLVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NjQzPWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY4NC1cdC8qXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjY4NTpcdCAqIG1lbXNsb3RzIG9mIGZsYWcgS1ZNX01FTV9HVUVTVF9NRU1GRCBhcmUgaW1tdXRhYmxlIHRvIGNoYW5nZSwgc29cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjg2LVx0ICoga3ZtX2dtZW1fYmluZCgpIG11c3Qgb2NjdXIgb24gYSBuZXcgbWVtc2xvdC4gIEJlY2F1c2UgdGhlIG1lbXNsb3Rcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTkzNT1zdGF0aWMgdm9pZCBrdm1fZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTM2LXtcbnZpcnQva3ZtL2t2bV9tYWluLmM6OTM3Olx0aWYgKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTkzOC1cdFx0a3ZtX2dtZW1fdW5iaW5kKHNsb3QpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTU3Mz1zdGF0aWMgaW50IGNoZWNrX21lbW9yeV9yZWdpb25fZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTU3OC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKVxudmlydC9rdm0va3ZtX21haW4uYzoxNTc5Olx0XHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xudmlydC9rdm0va3ZtX21haW4uYy0xNTgwLVxudmlydC9rdm0va3ZtX21haW4uYy0xNTgxLVx0LyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTU4MjpcdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE1ODMtXHRcdHZhbGlkX2ZsYWdzIFx1MDAyNj0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTU5MC1cdGlmIChrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgXHUwMDI2XHUwMDI2XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE1OTE6XHQgICAgIShtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpKVxudmlydC9rdm0va3ZtX21haW4uYy0xNTkyLVx0XHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX1JFQURPTkxZO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTY5Nj1zdGF0aWMgdm9pZCBrdm1fY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTczMi1cdFx0ICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3MzM6XHRcdFdBUk5fT05fT05DRShvbGQtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpO1xudmlydC9rdm0va3ZtX21haW4uYy0xNzM0LVx0XHRmYWxsdGhyb3VnaDtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NDgtXHRcdCAqL1xudmlydC9rdm0va3ZtX21haW4uYzoxNzQ5Olx0XHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NTAtXHRcdFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xOTk0PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMjUtXHRcdHJldHVybiAtRUlOVkFMO1xudmlydC9rdm0va3ZtX21haW4uYzoyMDI2Olx0aWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCBcdTAwMjZcdTAwMjZcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjAyNy1cdCAgICAobWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCBcdTAwMjYgKFBBR0VfU0laRSAtIDEpIHx8XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMDc2LVx0XHQvKiBQcml2YXRlIG1lbXNsb3RzIGFyZSBpbW11dGFibGUsIHRoZXkgY2FuIG9ubHkgYmUgZGVsZXRlZC4gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjA3NzpcdFx0aWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjA3OC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwODAtXHRcdCAgICAobnBhZ2VzICE9IG9sZC1cdTAwM2VucGFnZXMpIHx8XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIwODE6XHRcdCAgICAoKG1lbS1cdTAwM2VmbGFncyBeIG9sZC1cdTAwM2VmbGFncykgXHUwMDI2IChLVk1fTUVNX1JFQURPTkxZIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCkpKVxudmlydC9rdm0va3ZtX21haW4uYy0yMDgyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwNi1cdG5ldy1cdTAwM2V1c2Vyc3BhY2VfYWRkciA9IG1lbS1cdTAwM2V1c2Vyc3BhY2VfYWRkcjtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEwNzpcdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMTE5LW91dF91bmJpbmQ6XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMjA6XHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxudmlydC9rdm0va3ZtX21haW4uYy0yMTIxLVx0XHRrdm1fZ21lbV91bmJpbmQobmV3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTczOQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IEZpbGUgRGVzY3JpcHRvciBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGhlcmUgaXMgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0IGZvciBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAuIExldCYjMzk7cyBhc3N1bWUgdGhpcyBpcyBhIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXMgd291bGQgYmUgaW4gdGhlIGB2aXJ0L2t2bS9gIGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHNvdXJjZSwgb3IgcG90ZW50aWFsbHkgYSBzaW1pbGFybHkgbmFtZWQgZGlyZWN0b3J5IGlmIHRoZXJlJiMzOTtzIGFuIGFic3RyYWN0aW9uIGxheWVyLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW5zaWRlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhleSYjMzk7cmUgdGhlIHVzdWFsIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQgb2YgdGhpbmcgaXMgZGVmaW5lZCwgYW5kIGRlcGVuZGVuY2llcyBhcmUgY2xlYXJseSBsaXN0ZWQuIElmIGl0IGlzbiYjMzk7dCBgS2NvbmZpZ2AsIEkgbmVlZCB0byBsb29rIGZvciBhbnkgYC5jb25maWdgIGZpbGUgd2l0aGluIHRoZSBkaXJlY3RvcmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnN5c3RlbS4gSSB3b3VsZCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgYWJvdXQgd2hhdCBmZWF0dXJlcyB0aGlzIGRlcGVuZHMgb24sIHdoYXQgaXQgZW5hYmxlcywgYW5kIHBvdGVudGlhbGx5IHdoaWNoIGFyY2hpdGVjdHVyZXMgb3IgcHJvY2Vzc29ycyB0aGlzIGlzIHJlbGV2YW50IHRvLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjExOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgdmlydC9rdm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgdGhhdCBwb2ludCBpbiB0aGUgY29kZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBzZXQgb2Ygb3B0aW9uczsgaXQmIzM5O3MgbGlrZWx5IHRoZXkgYXJlIHRoZSBiYXNpY3MgZm9yIHRoZSBtb2R1bGUgdG8gYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAxMDE6XHQgICAgICAgYm9vbFxuIDEwMjpcdFxuIDEwMzpcdGNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEwNDpcdCAgICAgICBib29sXG4gMTA1Olx0XG4gMTA2Olx0Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxuIDEwNzpcdCAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4gMTA4Olx0ICAgICAgIGJvb2xcbiAxMDk6XHRcbiAxMTA6XHRjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiAxMTE6XHQgICAgICAgYm9vbFxuIDExMjpcdCAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDExNTpcdCAgICAgICBib29sXG4gMTE2Olx0ICAgICAgIGRlcGVuZHMgb24gS1ZNX0dVRVNUX01FTUZEXG4gMTE3Olx0XG4gMTE4Olx0Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDExOTpcdCAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTQ2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLVk1fR1VFU1RfTUVNRkQqKgoKT2theSwgc28gSSYjMzk7dmUgc3R1bWJsZWQgdXBvbiB0aGlzIGBLVk1fR1VFU1RfTUVNRkRgIGJvb2xlYW4sIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGhpZGRlbi4gTXkgaW5pdGlhbCBodW5jaCwgZ2l2ZW4gaXRzIG5hbWUgYW5kIGhpZGRlbiBzdGF0dXMsIGlzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHNlbGVjdGVkIGRlZXAgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGV4cG9zZWQgZGlyZWN0bHkgYXQgYSBoaWdoIGxldmVsLiBUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgcHVsbGluZyB0aGlzIGluLiBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3NlbGVjdCYjMzQ7IHJlbGF0aW9uc2hpcHMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgdW5kZXJseWluZyByYXRpb25hbGUgYW5kIHdoaWNoIHNwZWNpZmljIGhhcmR3YXJlIG9yIGFyY2hpdGVjdHVyYWwgbnVhbmNlcyBuZWNlc3NpdGF0ZSBpdHMgaW5jbHVzaW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5Olx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgS1ZNIGNoYW5nZSwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Qgc28gZmFyLiBUaGUga2V5IGVuYWJsaW5nIGNvbmZpZyBzZWVtcyB0byBiZSBgS1ZNYCwgYW5kIGl0JiMzOTtzIGJlaW5nIHVzZWQgYWNyb3NzIGJvdGggYXJtNjQgYW5kIHg4Nl82NCBhcmNoaXRlY3R1cmVzIOKAkyBhIGdvb2Qgc2lnbiBvZiB3aWRlciBhcHBsaWNhYmlsaXR5LCBvciBhdCBsZWFzdCBpbnRlbnQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgY2VudGVyZWQgb24gdGhlIGBrdm1fZ21lbV91bmJpbmRgIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIG90aGVyIGFmZmVjdGVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaC4KCkFoLCBhbmQgSSBzZWUgdGhlIHNlbGYtdGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jYC4gVGhvc2UgYXJlIHB1cmVseSB0ZXN0cyB0aG91Z2gsIG5vdCBrZXJuZWwgY29kZSwgc28gdGhleSBkb24mIzM5O3QgaW1wYWN0IG15IGltbWVkaWF0ZSBmdXp6aW5nIGZvY3VzLgoKUmlnaHQsIHNvIHRoZSBrZXJuZWwgY29kZSBtb2RpZmljYXRpb24gaXMgcmVhbGx5IGp1c3QgYGt2bV9nbWVtX3VuYmluZGAuIFRoYXQmIzM5O3MgYSB2ZXJ5IGZvY3VzZWQgY2hhbmdlLCB3aGljaCBtYWtlcyBpdCBhbiBpZGVhbCB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBrdm1fZ21lbV91bmJpbmRgIGlzIHN0YXRpYyBvciBub3QuIE9rYXksIGxldCYjMzk7cyBzZWU6CgpgYGBjCnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpCmBgYAoKTm8sIGl0JiMzOTtzIG5vdCBzdGF0aWMuIEdvb2QuIFRoaXMgaXMgcHJvYmFibHkgZXhwb3J0ZWQgZm9yIG90aGVyIG1vZHVsZXMgdG8gYWNjZXNzIGl0LgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qa3ZtX2dtZW1fdW5iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MjgKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogODQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR3Vlc3QgTWVtZmQgVW5iaW5kIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZXZlbiB0aG91Z2ggYGt2bV9nbWVtX3VuYmluZGAgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGl0JiMzOTtzIGEgZ2xvYmFsIGZ1bmN0aW9uIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBwZXJmZWN0bHkgdmFsaWQgdG8gdXNlIGl0IGFzIGEgZm9jdXMgc3ltYm9sIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCB3ZXJlIHRvdWNoZWQuIFRoZSBkaWZmIG9ubHkgbWVudGlvbnMgbW9kaWZpY2F0aW9ucyB0byBga3ZtX2dtZW1fdW5iaW5kYCwgd2hpY2ggY29uZmlybXMgdGhlIHNjb3BlLgoKQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYSBtaXNzaW5nIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgY2FsbC4gUHJldmlvdXNseSwgd2hlbiB0aGUgYGZpbGVgIHBvaW50ZXIgd2FzIE5VTEzigJRpbmRpY2F0aW5nIHRoZSBmaWxlIHdhcyBiZWluZyBjbG9zZWTigJR0aGUgbG9jayB3YXNuJiMzOTt0IGFjcXVpcmVkLiBUaGlzIG9taXNzaW9uIGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbi4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGFsd2F5cyB0YWtpbmcgdGhlIGxvY2ssIGV2ZW4gaWYgdGhlIGZpbGUgaXMgbnVsbC4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gZml4LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCB0YXJnZXRpbmcgdGhlIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgc3Vycm91bmRpbmcgZ3Vlc3QgbWVtZmQsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEkgd2lsbCBhbHNvIHVzZSBgRm9jdXNTeW1ib2xzPVsmIzM0O2t2bV9nbWVtX3VuYmluZCYjMzQ7XWAgdG8gY29uY2VudHJhdGUgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGaW5hbGx5LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBgRW5hYmxlQ29uZmlncz1bJiMzNDtLVk0mIzM0O11gLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIGVuc3VyZSB0aG9yb3VnaCB0ZXN0aW5nIG9mIHRoaXMgY3JpdGljYWwgS1ZNIGNvbXBvbmVudCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmFjZSBjb25kaXRpb24gbmF0dXJlIG9mIHRoZSBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV91bmJpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX2dtZW1fdW5iaW5kYCB3aGVuIGEgZ3Vlc3RfbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQgYnkgZW5zdXJpbmcgdGhlIGludmFsaWRhdGUgbG9jayBpcyB0YWtlbiBldmVuIGZvciBkeWluZyBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV91bmJpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX2dtZW1fdW5iaW5kYCB3aGVuIGEgZ3Vlc3RfbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQgYnkgZW5zdXJpbmcgdGhlIGludmFsaWRhdGUgbG9jayBpcyB0YWtlbiBldmVuIGZvciBkeWluZyBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBndWVzdF9tZW1mZCBzZWxmdGVzdHMgYW5kIGZpeGVzIGEgbG9ja2luZy9jb25jdXJyZW5jeSBidWcgaW4gYGt2bV9nbWVtX3VuYmluZGAgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGUgYnVnIGZpeCBlbnN1cmVzIHRoYXQgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBpcyB0YWtlbiBldmVuIHdoZW4gdGhlIGZpbGUgaXMgZHlpbmcsIHByZXZlbnRpbmcgYSBtaXNtYXRjaCBpbiBgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3NgIGluY3JlbWVudHMvZGVjcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljL2NvbmN1cnJlbmN5IGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUsIGFuZCBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTMyY2NlZjkxMDQ5ZTZkZjcyMmFjMGMzYTkyMjhhYWEzZGUxNTA5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDEzOjQzOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMKaW5kZXggMjIzM2Q4NzFhMzhmNC4uYWVlODBkZGE2MjI5NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jCkBAIC03NiwzMyAmIzQzOzc2LDUzIEBAIHN0YXRpYyB2b2lkIHRlc3RfbW1hcF9zdXBwb3J0ZWQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAlrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZpbGwgQG5pZHMgd2l0aCB0aGUgZmlyc3QgQG5yX25pZHMgbm9kZXMgaW4gdGhlIGFsbG93ZWQgbWFzay4KJiM0MzsgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBnZXRfbnVtYV9ub2RlX2lkcyhpbnQgKm5pZHMsIGludCBucl9uaWRzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5pZDsKJiM0MzsJaW50IG5yX2ZvdW5kID0gMDsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChuaWQsICZhbXA7bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7CiYjNDM7CQluaWRzW25yX2ZvdW5kJiM0MzsmIzQzO10gPSBuaWQ7CiYjNDM7CQlpZiAobnJfZm91bmQgPT0gbnJfbmlkcykKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tfMCA9IDE7IC8qIG5pZDogMCAqLwotCXVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spOwomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrLCBiaW5kX25vZGVtYXNrOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSAmIzQzOyAxOwogCWludCBwb2xpY3k7CiAJY2hhciAqbWVtOwomIzQzOwlpbnQgbmlkOwogCWludCByZXQ7CiAKLQlpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSkKJiM0MzsJaWYgKCFnZXRfbnVtYV9ub2RlX2lkcygmYW1wO25pZCwgMSkpCiAJCXJldHVybjsKIAomIzQzOwliaW5kX25vZGVtYXNrID0gMVVMICZsdDsmbHQ7IG5pZDsKIAltZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7CiAKIAkvKiBUZXN0IE1QT0xfSU5URVJMRUFWRSBwb2xpY3kgKi8KLQlrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsICZhbXA7bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgJmFtcDtiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTsKIAlrdm1fZ2V0X21lbXBvbGljeSgmYW1wO3BvbGljeSwgJmFtcDtub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7Ci0JVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSAmYW1wOyZhbXA7IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsCiYjNDM7CVRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgJmFtcDsmYW1wOyBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLAogCQkgICAgJiMzNDtXYW50ZWQgTVBPTF9JTlRFUkxFQVZFICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4JiMzNDssCi0JCSAgICBNUE9MX0lOVEVSTEVBVkUsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spOwomIzQzOwkJICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7CiAKIAkvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi8KLQlrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlbWFza18wLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKG1lbSAmIzQzOyBwYWdlX3NpemUgKiAyLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7CiAJa3ZtX2dldF9tZW1wb2xpY3koJmFtcDtwb2xpY3ksICZhbXA7bm9kZW1hc2ssIG1heG5vZGUsIG1lbSAmIzQzOyBwYWdlX3NpemUgKiAyLCBNUE9MX0ZfQUREUik7Ci0JVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCAmYW1wOyZhbXA7IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsCiYjNDM7CVRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgJmFtcDsmYW1wOyBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLAogCQkgICAgJiMzNDtXYW50ZWQgTVBPTF9CSU5EICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4JiMzNDssCi0JCSAgICBNUE9MX0JJTkQsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spOwomIzQzOwkJICAgIE1QT0xfQklORCwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7CiAKIAkvKiBUZXN0IE1QT0xfREVGQVVMVCBwb2xpY3kgKi8KIAlrdm1fbWJpbmQobWVtLCB0b3RhbF9zaXplLCBNUE9MX0RFRkFVTFQsIE5VTEwsIDAsIDApOwpAQCAtMTEyLDcgJiM0MzsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiAJCSAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spOwogCiAJLyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovCi0JcmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgJmFtcDtub2RlbWFza18wLCBtYXhub2RlLCAwKTsKJiM0MzsJcmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgJmFtcDtiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTsKIAlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5WQUwsCiAJCSAgICAmIzM0O21iaW5kIHdpdGggaW52YWxpZCBwb2xpY3kgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUwmIzM0Oyk7CiAKQEAgLTEyMSwxNyAmIzQzOzE0MSwxOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiAKIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqLwotCXVuc2lnbmVkIGxvbmcgbm9kZTFfbWFzayA9IDI7ICAvKiBOb2RlIDEgKi8KLQl1bnNpZ25lZCBsb25nIG1heG5vZGUgPSA4OwomIzQzOwl1bnNpZ25lZCBsb25nIGJpbmRfbm9kZW1hc2tzWzJdOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKGJpbmRfbm9kZW1hc2tzWzBdKSAmIzQzOyAxOwogCXZvaWQgKnBhZ2VzWzRdOwomIzQzOwlpbnQgbmlkc1syXTsKIAlpbnQgc3RhdHVzWzRdOwogCWNoYXIgKm1lbTsKIAlpbnQgaTsKIAotCWlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKQomIzQzOwlpZiAoIWdldF9udW1hX25vZGVfaWRzKG5pZHMsIEFSUkFZX1NJWkUobmlkcykpKQogCQlyZXR1cm47CiAKJiM0MzsJYmluZF9ub2RlbWFza3NbMF0gPSAxVUwgJmx0OyZsdDsgbmlkc1swXTsKJiM0MzsJYmluZF9ub2RlbWFza3NbMV0gPSAxVUwgJmx0OyZsdDsgbmlkc1sxXTsKIAltZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgNDsgaSYjNDM7JiM0MzspCkBAIC0xMzksMzQgJiM0MzsxNjEsNDIgQEAgc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAogCS8qIFNldCBOVU1BIHBvbGljeSBhZnRlciBhbGxvY2F0aW9uICovCiAJbWVtc2V0KG1lbSwgMHhhYSwgcGFnZV9zaXplKTsKLQlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTsKIAlrdm1fZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIDAsIHBhZ2Vfc2l6ZSk7CiAKIAkvKiBTZXQgTlVNQSBwb2xpY3kgYmVmb3JlIGFsbG9jYXRpb24gKi8KLQlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlMV9tYXNrLCBtYXhub2RlLCAwKTsKLQlrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlMF9tYXNrLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFza3NbMV0sIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7CiAJbWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7CiAKIAkvKiBWYWxpZGF0ZSBpZiBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHNwZWNpZmllZCBOVU1BIG5vZGVzICovCiAJa3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsICYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzBdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMV0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSAwLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1syXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzNdKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IG5pZHNbMV0sCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgbmlkc1sxXSwgc3RhdHVzWzBdKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IG5pZHNbMV0sCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgbmlkc1sxXSwgc3RhdHVzWzFdKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMF0sCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzJdKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IG5pZHNbMF0sCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzNdKTsKIAogCS8qIFB1bmNoIGhvbGUgZm9yIGFsbCBwYWdlcyAqLwogCWt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgdG90YWxfc2l6ZSk7CiAKIAkvKiBDaGFuZ2UgTlVNQSBwb2xpY3kgbm9kZXMgYW5kIHJlYWxsb2NhdGUgKi8KLQlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlMF9tYXNrLCBtYXhub2RlLCAwKTsKLQlrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlMV9tYXNrLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7CiAJbWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7CiAKIAlrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMCwgJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMF0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAwLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1sxXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzJdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbM10pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMF0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMV0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMl0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbM10pOwogCiAJa3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaAppbmRleCAyOTU3MmE2ZDc4OWNkLi40YmJiZjMxNGU5ZDc3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaApAQCAtNCw4ICYjNDM7NCw2IEBACiAjaWZuZGVmIFNFTEZURVNUX0tWTV9OVU1BSUZfSAogI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0gKIAotI2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwotCiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcG9saWN5LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3ZtX3N5c2NhbGxzLmgmIzM0OwpAQCAtMzAsNTQgJiM0MzsyOCwxNiBAQCBLVk1fU1lTQ0FMTF9ERUZJTkUobWJpbmQsIDYsIHZvaWQgKiwgYWRkciwgdW5zaWduZWQgbG9uZywgc2l6ZSwgaW50LCBtb2RlLAogCQkgICBjb25zdCB1bnNpZ25lZCBsb25nICosIG5vZGVtYXNrLCB1bnNpZ25lZCBsb25nLCBtYXhub2RlLAogCQkgICB1bnNpZ25lZCBpbnQsIGZsYWdzKTsKIAotc3RhdGljIGlubGluZSBpbnQgZ2V0X21heF9udW1hX25vZGUodm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X251bWFfbWVtX25vZGVzKHZvaWQpCiB7Ci0Jc3RydWN0IGRpcmVudCAqZGU7Ci0JaW50IG1heF9ub2RlID0gMDsKLQlESVIgKmQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwOwogCi0JLyoKLQkgKiBBc3N1bWUgdGhlcmUmIzM5O3MgYSBzaW5nbGUgbm9kZSBpZiB0aGUga2VybmVsIGRvZXNuJiMzOTt0IHN1cHBvcnQgTlVNQSwKLQkgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuCi0JICovCi0JZCA9IG9wZW5kaXIoJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL25vZGUmIzM0Oyk7Ci0JaWYgKCFkKQomIzQzOwkvKiBHZXQgc2V0IG9mIGZpcnN0IDY0IG51bWEgbm9kZXMgYXZhaWxhYmxlICovCiYjNDM7CWlmIChnZXRfbWVtcG9saWN5KE5VTEwsICZhbXA7bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBOVUxMLAomIzQzOwkJCSAgTVBPTF9GX01FTVNfQUxMT1dFRCkpCiAJCXJldHVybiAwOwogCi0Jd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKLQkJaW50IG5vZGVfaWQ7Ci0JCWNoYXIgKmVuZHB0cjsKLQotCQlpZiAoc3RybmNtcChkZS0mZ3Q7ZF9uYW1lLCAmIzM0O25vZGUmIzM0OywgNCkgIT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCW5vZGVfaWQgPSBzdHJ0b2woZGUtJmd0O2RfbmFtZSAmIzQzOyA0LCAmYW1wO2VuZHB0ciwgMTApOwotCQlpZiAoKmVuZHB0ciAhPSAmIzM5O1wwJiMzOTspCi0JCQljb250aW51ZTsKLQotCQlpZiAobm9kZV9pZCAmZ3Q7IG1heF9ub2RlKQotCQkJbWF4X25vZGUgPSBub2RlX2lkOwotCX0KLQljbG9zZWRpcihkKTsKLQotCXJldHVybiBtYXhfbm9kZTsKLX0KLQotc3RhdGljIGJvb2wgaXNfbnVtYV9hdmFpbGFibGUodm9pZCkKLXsKLQkvKgotCSAqIFByb2JlIGZvciBOVU1BIGJ5IGRvaW5nIGEgZHVtbXkgZ2V0X21lbXBvbGljeSgpLiAgSWYgdGhlIHN5c2NhbGwKLQkgKiBmYWlscyB3aXRoIEVOT1NZUywgdGhlbiB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRob3V0IE5VTUEgc3VwcG9ydC4KLQkgKiBpZiB0aGUgc3lzY2FsbCBmYWlscyB3aXRoIEVQRVJNLCB0aGVuIHRoZSBwcm9jZXNzL3VzZXIgbGFja3MgdGhlCi0JICogbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyAoQ0FQX1NZU19OSUNFKS4KLQkgKi8KLQlyZXR1cm4gIWdldF9tZW1wb2xpY3koTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCkgfHwKLQkJKGVycm5vICE9IEVOT1NZUyAmYW1wOyZhbXA7IGVycm5vICE9IEVQRVJNKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0odm9pZCkKLXsKLQlyZXR1cm4gaXNfbnVtYV9hdmFpbGFibGUoKSAmYW1wOyZhbXA7IGdldF9tYXhfbnVtYV9ub2RlKCkgJmd0Oz0gMTsKJiM0MzsJcmV0dXJuIG5vZGVtYXNrOwogfQogCiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX05VTUFJRl9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMKaW5kZXggMzljZTlhOTM2OWY1Yi4uNjZkY2YzNjM5OGFhYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYwpAQCAtMjUxLDggJiM0MzsyNTEsOCBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcywKIAkJICAgdTY0ICpwaXBpc19yY3ZkKQogewogCWxvbmcgcGFnZXNfbm90X21vdmVkOwotCXVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW3NpemVvZihub2RlbWFzaykgKiA4XTsKJiM0MzsJdW5zaWduZWQgbG9uZyBub2RlbWFzazsKJiM0MzsJdW5zaWduZWQgbG9uZyBub2RlbWFza3NbQklUU19QRVJfVFlQRShub2RlbWFzayldOwogCWludCBub2RlcyA9IDA7CiAJdGltZV90IHN0YXJ0X3RpbWUsIGxhc3RfdXBkYXRlLCBub3c7CiAJdGltZV90IGludGVydmFsX3NlY3MgPSAxOwpAQCAtMjY2LDE5ICYjNDM7MjY2LDE3IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLAogCWZwcmludGYoc3RkZXJyLCAmIzM0O0NhbGxpbmcgbWlncmF0ZV9wYWdlcyBldmVyeSAlZCBtaWNyb3NlY29uZHNcbiYjMzQ7LAogCQlkZWxheV91c2Vjcyk7CiAKLQkvKiBHZXQgc2V0IG9mIGZpcnN0IDY0IG51bWEgbm9kZXMgYXZhaWxhYmxlICovCi0Ja3ZtX2dldF9tZW1wb2xpY3koTlVMTCwgJmFtcDtub2RlbWFzaywgc2l6ZW9mKG5vZGVtYXNrKSAqIDgsCi0JCQkgIDAsIE1QT0xfRl9NRU1TX0FMTE9XRUQpOwomIzQzOwlub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpOwogCiAJZnByaW50ZihzdGRlcnIsICYjMzQ7TnVtYSBub2RlcyBmb3VuZCBhbW9uZ3N0IGZpcnN0ICVsdSBwb3NzaWJsZSBub2RlcyAmIzM0OwogCQkmIzM0OyhlYWNoIDEtYml0IGluZGljYXRlcyBub2RlIGlzIHByZXNlbnQpOiAlI2x4XG4mIzM0OywKLQkJc2l6ZW9mKG5vZGVtYXNrKSAqIDgsIG5vZGVtYXNrKTsKJiM0MzsJCUJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBub2RlbWFzayk7CiAKIAkvKiBJbml0IGFycmF5IG9mIG1hc2tzIGNvbnRhaW5pbmcgYSBzaW5nbGUtYml0IGluIGVhY2gsIG9uZSBmb3IgZWFjaAogCSAqIGF2YWlsYWJsZSBub2RlLiBtaWdyYXRlX3BhZ2VzIGNhbGxlZCBiZWxvdyByZXF1aXJlcyBzcGVjaWZ5aW5nIG5vZGVzCiAJICogYXMgYml0IG1hc2tzLgogCSAqLwotCWZvciAoaSA9IDAsIGJpdCA9IDE7IGkgJmx0OyBzaXplb2Yobm9kZW1hc2spICogODsgaSYjNDM7JiM0MzssIGJpdCAmbHQ7Jmx0Oz0gMSkgewomIzQzOwlmb3IgKGkgPSAwLCBiaXQgPSAxOyBpICZsdDsgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkmIzQzOyYjNDM7LCBiaXQgJmx0OyZsdDs9IDEpIHsKIAkJaWYgKG5vZGVtYXNrICZhbXA7IGJpdCkgewogCQkJbm9kZW1hc2tzW25vZGVzXSA9IG5vZGVtYXNrICZhbXA7IGJpdDsKIAkJCW5vZGVzJiM0MzsmIzQzOzsKQEAgLTMxMCw3ICYjNDM7MzA4LDcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsCiAJCSAqIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gSWYgdGhhdCBhc3N1bXB0aW9uIGV2ZXIgY2hhbmdlcyB0aGlzCiAJCSAqIHRlc3QgbWF5IGJyZWFrIG9yIGdpdmUgYSBmYWxzZSBwb3NpdGl2ZSBzaWduYWwuCiAJCSAqLwotCQlwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIHNpemVvZihub2RlbWFza3NbZnJvbV0pLAomIzQzOwkJcGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrc1tmcm9tXSkgJiM0MzsgMSwKIAkJCQkJCSZhbXA7bm9kZW1hc2tzW2Zyb21dLAogCQkJCQkJJmFtcDtub2RlbWFza3NbdG9dKTsKIAkJaWYgKHBhZ2VzX25vdF9tb3ZlZCAmbHQ7IDApCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwppbmRleCBmMGU1ZGE0OTA4NjYwLi5mODQ4MTIwYWY4NGJlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKQEAgLTcyMSw2ICYjNDM7NzIxLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgc3RydWN0IGdtZW1fZmlsZSAqZikKIAogdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKIHsKJiM0MzsJc3RydWN0IGZpbGUgKmdtZW1fZmlsZTsKJiM0MzsKIAkvKgogCSAqIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHVuZGVybHlpbmcgZmlsZSB3YXMgX2FscmVhZHlfIGNsb3NlZCwgYXMKIAkgKiBrdm1fZ21lbV9yZWxlYXNlKCkgaW52YWxpZGF0ZXMgYW5kIG51bGxpZmllcyBhbGwgYmluZGluZ3MuCkBAIC03MzMsMjEgJiM0Mzs3MzUsMjQgQEAgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKIAkvKgogCSAqIEhvd2V2ZXIsIGlmIHRoZSBmaWxlIGlzIF9iZWluZ18gY2xvc2VkLCB0aGVuIHRoZSBiaW5kaW5ncyBuZWVkIHRvIGJlCiAJICogcmVtb3ZlZCBhcyBrdm1fZ21lbV9yZWxlYXNlKCkgbWlnaHQgbm90IHJ1biB1bnRpbCBhZnRlciB0aGUgbWVtc2xvdAotCSAqIGlzIGZyZWVkLiAgTm90ZSwgbW9kaWZ5aW5nIHRoZSBiaW5kaW5ncyBpcyBzYWZlIGV2ZW4gdGhvdWdoIHRoZSBmaWxlCi0JICogaXMgZHlpbmcgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LSZndDtnbWVtLmZpbGUgdW5kZXIKJiM0MzsJICogaXMgZnJlZWQuICBOb3RlLCBkZXJlZmVyZW5jaW5nIHRoZSBkeWluZyBmaWxlIGlzIHNhZmUgYXMKJiM0MzsJICoga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LSZndDtnbWVtLmZpbGUgdW5kZXIKIAkgKiBzbG90c19sb2NrLCBhbmQgb25seSBwdXRzIGl0cyByZWZlcmVuY2UgdG8gS1ZNIGFmdGVyIGRlc3Ryb3lpbmcgYWxsCiAJICogYmluZGluZ3MuICBJLmUuIHJlYWNoaW5nIHRoaXMgcG9pbnQgbWVhbnMga3ZtX2dtZW1fcmVsZWFzZSgpIGhhc24mIzM5O3QKIAkgKiB5ZXQgZGVzdHJveWVkIHRoZSBiaW5kaW5ncyBvciBmcmVlZCB0aGUgZ21lbV9maWxlLCBhbmQgY2FuJiMzOTt0IGRvIHNvCiAJICogdW50aWwgdGhlIGNhbGxlciBkcm9wcyBzbG90c19sb2NrLgogCSAqLwotCWlmICghZmlsZSkgewotCQlfX2t2bV9nbWVtX3VuYmluZChzbG90LCBzbG90LSZndDtnbWVtLmZpbGUtJmd0O3ByaXZhdGVfZGF0YSk7Ci0JCXJldHVybjsKLQl9CiYjNDM7CWdtZW1fZmlsZSA9IGZpbGUgPzogc2xvdC0mZ3Q7Z21lbS5maWxlOwogCi0JZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZmlsZS0mZ3Q7Zl9tYXBwaW5nKTsKLQlfX2t2bV9nbWVtX3VuYmluZChzbG90LCBmaWxlLSZndDtwcml2YXRlX2RhdGEpOwotCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZmlsZS0mZ3Q7Zl9tYXBwaW5nKTsKJiM0MzsJLyoKJiM0MzsJICogVGFrZSB0aGUgaW52YWxpZGF0ZSBsb2NrIGV2ZW4gZm9yIGEgZHlpbmcgZmlsZS4gIE90aGVyd2lzZSwKJiM0MzsJICoga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpIGNhbiBmaW5kIHRoZSBiaW5kaW5nIGFuZCBpbmNyZW1lbnQKJiM0MzsJICogbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3Mgd2hpbGUga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoKSBtaXNzZXMKJiM0MzsJICogdGhlIHJlbW92ZWQgYmluZGluZyBhbmQgc2tpcHMgZGVjcmVtZW50LgomIzQzOwkgKi8KJiM0MzsJZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZ21lbV9maWxlLSZndDtmX21hcHBpbmcpOwomIzQzOwlfX2t2bV9nbWVtX3VuYmluZChzbG90LCBnbWVtX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YSk7CiYjNDM7CWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZ21lbV9maWxlLSZndDtmX21hcHBpbmcpOwogfQogCiAvKiBSZXR1cm5zIGEgbG9ja2VkIGZvbGlvIG9uIHN1Y2Nlc3MuICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4MgoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA4NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IEZpbGUgVW5iaW5kaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBhIGZldyBmaWxlcy4gVGhlIGNoYW5nZXMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnkgYXJlIGp1c3QgdGVzdCB1cGRhdGVzLCBzbyB0aGV5JiMzOTtyZSBub3QgdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBpbnRlcmVzdGluZyBoZXJlLiBUaGUgcmVhbCBtZWF0IGlzIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4KClRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGt2bV9nbWVtX3VuYmluZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgc2NlbmFyaW8gYmVpbmcgYWRkcmVzc2VkLCB3aGVyZSB0aGUgdW5kZXJseWluZyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGd1ZXN0IG1lbW9yeSBzbG90IG1pZ2h0IGJlIGluIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIGZvciBgZmlsZWAgYmVpbmcgTlVMTC4gSWYgaXQgd2FzLCBtZWFuaW5nIHRoZSBmaWxlIHdhcyBjbG9zaW5nLCBpdCB3b3VsZCBkZXJlZmVyZW5jZSBgc2xvdC0mZ3Q7Z21lbS5maWxlYCBpbW1lZGlhdGVseSBhbmQgY2FsbCBgX19rdm1fZ21lbV91bmJpbmRgLiBIb3dldmVyLCBpdCBza2lwcGVkIHRoZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgLgoKVGhlIGZpeCBpbnRyb2R1Y2VzIGEgbG9jYWwgYGdtZW1fZmlsZWAgdmFyaWFibGUgYW5kIHVzZXMgZWl0aGVyIHRoZSBwb3RlbnRpYWxseS1OVUxMIGBmaWxlYCBmcm9tIHRoZSBjaGVjayBvciBgc2xvdC0mZ3Q7Z21lbS5maWxlYCBpbiBjYXNlIGBmaWxlYCBpcyBOVUxMLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIHBhdGNoIG5vdyAqYWx3YXlzKiBhY3F1aXJlcyB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBiZWZvcmUgY2FsbGluZyBgX19rdm1fZ21lbV91bmJpbmRgLCBldmVuIGlmIHRoZSBmaWxlIGlzIGJlaW5nIGNsb3NlZC4KClRoaXMgaXMgYWxsIGFib3V0IHByZXZlbnRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIEtWTSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGxvY2sgaXMgbmVlZGVkIGJlY2F1c2UgYGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKWAgbWlnaHQgYmUgY29uY3VycmVudGx5IGluY3JlbWVudGluZyBgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3NgLCB3aGlsZSB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHJlbW92ZSB0aGUgYmluZGluZy4gV2l0aG91dCB0aGUgbG9jaywgYGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKClgIGNvdWxkIG1pc3MgdGhlIHJlbW92ZWQgYmluZGluZyBhbmQgZmFpbCB0byBkZWNyZW1lbnQgdGhlIGNvdW50ZXIsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgcmVzb3VyY2UgbGVhayBvciwgd29yc2UsIGluY29ycmVjdCBtZW1vcnkgYWNjZXNzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgY29uY3VycmVuY3kgaXNzdWUsIGEgbG9ja2luZyBwcm9ibGVtLCBub3QgYSBtZW1vcnkgc2FmZXR5IG9uZS4gSSBjYW4gY29uZmlybSB0aGlzIGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgaW5mb3JtYXRpb24gbGVhay4gS0FTQU4vTE9DS0RFUC9ldGMuIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgY2F0Y2hpbmcgc2ltaWxhciBpc3N1ZXMsIG9yIGl0IGNvdWxkIGJlIGEgc2ltcGxlIGxvZ2ljYWwgYnVnLiBTbywgY29uc2lkZXJpbmcgdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUsIHRoaXMgZG9lc24mIzM5O3Qgd2FycmFudCBOZWVkc0tNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gZ3Vlc3RfbWVtZmQgc2VsZnRlc3RzIGFuZCBmaXhlcyBhIGxvY2tpbmcvY29uY3VycmVuY3kgYnVnIGluIGBrdm1fZ21lbV91bmJpbmRgIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gVGhlIGJ1ZyBmaXggZW5zdXJlcyB0aGF0IGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgaXMgdGFrZW4gZXZlbiB3aGVuIHRoZSBmaWxlIGlzIGR5aW5nLCBwcmV2ZW50aW5nIGEgbWlzbWF0Y2ggaW4gYG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzYCBpbmNyZW1lbnRzL2RlY3JlbWVudHMuIFRoaXMgaXMgYSBsb2dpYy9jb25jdXJyZW5jeSBpc3N1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gZ3Vlc3RfbWVtZmQgc2VsZnRlc3RzIGFuZCBmaXhlcyBhIGxvY2tpbmcvY29uY3VycmVuY3kgYnVnIGluIGBrdm1fZ21lbV91bmJpbmRgIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gVGhlIGJ1ZyBmaXggZW5zdXJlcyB0aGF0IGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgaXMgdGFrZW4gZXZlbiB3aGVuIHRoZSBmaWxlIGlzIGR5aW5nLCBwcmV2ZW50aW5nIGEgbWlzbWF0Y2ggaW4gYG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzYCBpbmNyZW1lbnRzL2RlY3JlbWVudHMuIFRoaXMgaXMgYSBsb2dpYy9jb25jdXJyZW5jeSBpc3N1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQzOjQwLjgzMTAwNjQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5OTk2ODU0OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX3VuYmluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIGd1ZXN0X21lbWZkIHNlbGZ0ZXN0cyBhbmQgZml4ZXMgYSBsb2NraW5nL2NvbmN1cnJlbmN5IGJ1ZyBpbiBga3ZtX2dtZW1fdW5iaW5kYCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIFRoZSBidWcgZml4IGVuc3VyZXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIGlzIHRha2VuIGV2ZW4gd2hlbiB0aGUgZmlsZSBpcyBkeWluZywgcHJldmVudGluZyBhIG1pc21hdGNoIGluIGBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzc2AgaW5jcmVtZW50cy9kZWNyZW1lbnRzLiBUaGlzIGlzIGEgbG9naWMvY29uY3VycmVuY3kgaXNzdWUsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhay4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGt2bV9nbWVtX3VuYmluZGAgd2hlbiBhIGd1ZXN0X21lbWZkIGZpbGUgaXMgYmVpbmcgY2xvc2VkIGJ5IGVuc3VyaW5nIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgdGFrZW4gZXZlbiBmb3IgZHlpbmcgZmlsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NDM6NDAuODMxMDE0NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDg5NjE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEzMmNjZWY5MTA0OWU2ZGY3MjJhYzBjM2E5MjI4YWFhM2RlMTUwOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTM6NDM6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcXG5pbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXFxuQEAgLTc2LDMzICs3Niw1MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21tYXBfc3VwcG9ydGVkKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcXG4gfVxcbiBcXG4rLypcXG4rICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLlxcbisgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5pZDtcXG4rXFx0aW50IG5yX2ZvdW5kID0gMDtcXG4rXFxuK1xcdGZvcl9lYWNoX3NldF9iaXQobmlkLCBcXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7XFxuK1xcdFxcdG5pZHNbbnJfZm91bmQrK10gPSBuaWQ7XFxuK1xcdFxcdGlmIChucl9mb3VuZCA9PSBucl9uaWRzKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIHtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBub2RlbWFzaywgYmluZF9ub2RlbWFzaztcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzaykgKyAxO1xcbiBcXHRpbnQgcG9saWN5O1xcbiBcXHRjaGFyICptZW07XFxuK1xcdGludCBuaWQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcXG4rXFx0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhcXHUwMDI2bmlkLCAxKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0YmluZF9ub2RlbWFzayA9IDFVTCBcXHUwMDNjXFx1MDAzYyBuaWQ7XFxuIFxcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcXG4gXFxuIFxcdC8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqL1xcbi1cXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFxcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9nZXRfbWVtcG9saWN5KFxcdTAwMjZwb2xpY3ksIFxcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7XFxuLVxcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXFx1MDAyNlxcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcXG4rXFx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcXHUwMDI2XFx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxcbiBcXHRcXHQgICAgXFxcIldhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcXFwiLFxcbi1cXHRcXHQgICAgTVBPTF9JTlRFUkxFQVZFLCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcXG4rXFx0XFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XFxuIFxcbiBcXHQvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi9cXG4tXFx0a3ZtX21iaW5kKG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQobWVtICsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9nZXRfbWVtcG9saWN5KFxcdTAwMjZwb2xpY3ksIFxcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtICsgcGFnZV9zaXplICogMiwgTVBPTF9GX0FERFIpO1xcbi1cXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFxcdTAwMjZcXHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXFxuK1xcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXFx1MDAyNlxcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcXG4gXFx0XFx0ICAgIFxcXCJXYW50ZWQgTVBPTF9CSU5EICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XFxcIixcXG4tXFx0XFx0ICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XFxuK1xcdFxcdCAgICBNUE9MX0JJTkQsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogVGVzdCBNUE9MX0RFRkFVTFQgcG9saWN5ICovXFxuIFxcdGt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7XFxuQEAgLTExMiw3ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcdFxcdCAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovXFxuLVxcdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFxcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcXG4rXFx0cmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgXFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xcbiBcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbiBcXHRcXHQgICAgXFxcIm1iaW5kIHdpdGggaW52YWxpZCBwb2xpY3kgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUxcXFwiKTtcXG4gXFxuQEAgLTEyMSwxNyArMTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqL1xcbi1cXHR1bnNpZ25lZCBsb25nIG5vZGUxX21hc2sgPSAyOyAgLyogTm9kZSAxICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICsgMTtcXG4gXFx0dm9pZCAqcGFnZXNbNF07XFxuK1xcdGludCBuaWRzWzJdO1xcbiBcXHRpbnQgc3RhdHVzWzRdO1xcbiBcXHRjaGFyICptZW07XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXFxuK1xcdGlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGJpbmRfbm9kZW1hc2tzWzBdID0gMVVMIFxcdTAwM2NcXHUwMDNjIG5pZHNbMF07XFxuK1xcdGJpbmRfbm9kZW1hc2tzWzFdID0gMVVMIFxcdTAwM2NcXHUwMDNjIG5pZHNbMV07XFxuIFxcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA0OyBpKyspXFxuQEAgLTEzOSwzNCArMTYxLDQyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcbiBcXHQvKiBTZXQgTlVNQSBwb2xpY3kgYWZ0ZXIgYWxsb2NhdGlvbiAqL1xcbiBcXHRtZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XFxuK1xcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTtcXG4gXFxuIFxcdC8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqL1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XFxuIFxcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xcbiBcXG4gXFx0LyogVmFsaWRhdGUgaWYgcGFnZXMgYXJlIGFsbG9jYXRlZCBvbiBzcGVjaWZpZWQgTlVNQSBub2RlcyAqL1xcbiBcXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsIFxcXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1swXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCBcXFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbMV0pO1xcbi1cXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMCwgXFxcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXFxcIiwgc3RhdHVzWzJdKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsIFxcXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1szXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzFdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMV0sIHN0YXR1c1swXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzFdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMV0sIHN0YXR1c1sxXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzBdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMF0sIHN0YXR1c1syXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzBdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMF0sIHN0YXR1c1szXSk7XFxuIFxcbiBcXHQvKiBQdW5jaCBob2xlIGZvciBhbGwgcGFnZXMgKi9cXG4gXFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTtcXG4gXFxuIFxcdC8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqL1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XFxuIFxcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xcbiBcXG4gXFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCBcXFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbMF0pO1xcbi1cXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMCwgXFxcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXFxcIiwgc3RhdHVzWzFdKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsIFxcXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1syXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCBcXFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbM10pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1swXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzBdLCBzdGF0dXNbMF0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzBdLCBzdGF0dXNbMV0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzFdLCBzdGF0dXNbMl0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1sxXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzFdLCBzdGF0dXNbM10pO1xcbiBcXG4gXFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcXG5pbmRleCAyOTU3MmE2ZDc4OWNkLi40YmJiZjMxNGU5ZDc3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcXG5AQCAtNCw4ICs0LDYgQEBcXG4gI2lmbmRlZiBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcXG4gI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcXG4gXFxuLSNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4tXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrdm1fc3lzY2FsbHMuaFxcXCJcXG5AQCAtMzAsNTQgKzI4LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXFxuIFxcdFxcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXFxuIFxcdFxcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X21heF9udW1hX25vZGUodm9pZClcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9udW1hX21lbV9ub2Rlcyh2b2lkKVxcbiB7XFxuLVxcdHN0cnVjdCBkaXJlbnQgKmRlO1xcbi1cXHRpbnQgbWF4X25vZGUgPSAwO1xcbi1cXHRESVIgKmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogQXNzdW1lIHRoZXJlJ3MgYSBzaW5nbGUgbm9kZSBpZiB0aGUga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBOVU1BLFxcbi1cXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXFxuLVxcdCAqL1xcbi1cXHRkID0gb3BlbmRpcihcXFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlXFxcIik7XFxuLVxcdGlmICghZClcXG4rXFx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xcbitcXHRpZiAoZ2V0X21lbXBvbGljeShOVUxMLCBcXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBOVUxMLFxcbitcXHRcXHRcXHQgIE1QT0xfRl9NRU1TX0FMTE9XRUQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7XFxuLVxcdFxcdGludCBub2RlX2lkO1xcbi1cXHRcXHRjaGFyICplbmRwdHI7XFxuLVxcbi1cXHRcXHRpZiAoc3RybmNtcChkZS1cXHUwMDNlZF9uYW1lLCBcXFwibm9kZVxcXCIsIDQpICE9IDApXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0bm9kZV9pZCA9IHN0cnRvbChkZS1cXHUwMDNlZF9uYW1lICsgNCwgXFx1MDAyNmVuZHB0ciwgMTApO1xcbi1cXHRcXHRpZiAoKmVuZHB0ciAhPSAnXFxcXDAnKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGlmIChub2RlX2lkIFxcdTAwM2UgbWF4X25vZGUpXFxuLVxcdFxcdFxcdG1heF9ub2RlID0gbm9kZV9pZDtcXG4tXFx0fVxcbi1cXHRjbG9zZWRpcihkKTtcXG4tXFxuLVxcdHJldHVybiBtYXhfbm9kZTtcXG4tfVxcbi1cXG4tc3RhdGljIGJvb2wgaXNfbnVtYV9hdmFpbGFibGUodm9pZClcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBQcm9iZSBmb3IgTlVNQSBieSBkb2luZyBhIGR1bW15IGdldF9tZW1wb2xpY3koKS4gIElmIHRoZSBzeXNjYWxsXFxuLVxcdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0Llxcbi1cXHQgKiBpZiB0aGUgc3lzY2FsbCBmYWlscyB3aXRoIEVQRVJNLCB0aGVuIHRoZSBwcm9jZXNzL3VzZXIgbGFja3MgdGhlXFxuLVxcdCAqIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMgKENBUF9TWVNfTklDRSkuXFxuLVxcdCAqL1xcbi1cXHRyZXR1cm4gIWdldF9tZW1wb2xpY3koTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCkgfHxcXG4tXFx0XFx0KGVycm5vICE9IEVOT1NZUyBcXHUwMDI2XFx1MDAyNiBlcnJubyAhPSBFUEVSTSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKHZvaWQpXFxuLXtcXG4tXFx0cmV0dXJuIGlzX251bWFfYXZhaWxhYmxlKCkgXFx1MDAyNlxcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcXHUwMDNlPSAxO1xcbitcXHRyZXR1cm4gbm9kZW1hc2s7XFxuIH1cXG4gXFxuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fTlVNQUlGX0ggKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXFxuaW5kZXggMzljZTlhOTM2OWY1Yi4uNjZkY2YzNjM5OGFhYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG5AQCAtMjUxLDggKzI1MSw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxcbiBcXHRcXHQgICB1NjQgKnBpcGlzX3JjdmQpXFxuIHtcXG4gXFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tzaXplb2Yobm9kZW1hc2spICogOF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2s7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcXG4gXFx0aW50IG5vZGVzID0gMDtcXG4gXFx0dGltZV90IHN0YXJ0X3RpbWUsIGxhc3RfdXBkYXRlLCBub3c7XFxuIFxcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcXG5AQCAtMjY2LDE5ICsyNjYsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXFxuIFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcXFxuXFxcIixcXG4gXFx0XFx0ZGVsYXlfdXNlY3MpO1xcbiBcXG4tXFx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xcbi1cXHRrdm1fZ2V0X21lbXBvbGljeShOVUxMLCBcXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxcbi1cXHRcXHRcXHQgIDAsIE1QT0xfRl9NRU1TX0FMTE9XRUQpO1xcbitcXHRub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xcbiBcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFxcXCJcXG4gXFx0XFx0XFxcIihlYWNoIDEtYml0IGluZGljYXRlcyBub2RlIGlzIHByZXNlbnQpOiAlI2x4XFxcXG5cXFwiLFxcbi1cXHRcXHRzaXplb2Yobm9kZW1hc2spICogOCwgbm9kZW1hc2spO1xcbitcXHRcXHRCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogSW5pdCBhcnJheSBvZiBtYXNrcyBjb250YWluaW5nIGEgc2luZ2xlLWJpdCBpbiBlYWNoLCBvbmUgZm9yIGVhY2hcXG4gXFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcXG4gXFx0ICogYXMgYml0IG1hc2tzLlxcbiBcXHQgKi9cXG4tXFx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcXHUwMDNjIHNpemVvZihub2RlbWFzaykgKiA4OyBpKyssIGJpdCBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbitcXHRmb3IgKGkgPSAwLCBiaXQgPSAxOyBpIFxcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkrKywgYml0IFxcdTAwM2NcXHUwMDNjPSAxKSB7XFxuIFxcdFxcdGlmIChub2RlbWFzayBcXHUwMDI2IGJpdCkge1xcbiBcXHRcXHRcXHRub2RlbWFza3Nbbm9kZXNdID0gbm9kZW1hc2sgXFx1MDAyNiBiaXQ7XFxuIFxcdFxcdFxcdG5vZGVzKys7XFxuQEAgLTMxMCw3ICszMDgsNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcXG4gXFx0XFx0ICogS1ZNX0NSRUFURV9WQ1BVIGlvY3RsLiBJZiB0aGF0IGFzc3VtcHRpb24gZXZlciBjaGFuZ2VzIHRoaXNcXG4gXFx0XFx0ICogdGVzdCBtYXkgYnJlYWsgb3IgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlIHNpZ25hbC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgc2l6ZW9mKG5vZGVtYXNrc1tmcm9tXSksXFxuK1xcdFxcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgQklUU19QRVJfVFlQRShub2RlbWFza3NbZnJvbV0pICsgMSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVtYXNrc1tmcm9tXSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVtYXNrc1t0b10pO1xcbiBcXHRcXHRpZiAocGFnZXNfbm90X21vdmVkIFxcdTAwM2MgMClcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5pbmRleCBmMGU1ZGE0OTA4NjYwLi5mODQ4MTIwYWY4NGJlIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuQEAgLTcyMSw2ICs3MjEsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKVxcbiBcXG4gdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4ge1xcbitcXHRzdHJ1Y3QgZmlsZSAqZ21lbV9maWxlO1xcbitcXG4gXFx0LypcXG4gXFx0ICogTm90aGluZyB0byBkbyBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHdhcyBfYWxyZWFkeV8gY2xvc2VkLCBhc1xcbiBcXHQgKiBrdm1fZ21lbV9yZWxlYXNlKCkgaW52YWxpZGF0ZXMgYW5kIG51bGxpZmllcyBhbGwgYmluZGluZ3MuXFxuQEAgLTczMywyMSArNzM1LDI0IEBAIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuIFxcdC8qXFxuIFxcdCAqIEhvd2V2ZXIsIGlmIHRoZSBmaWxlIGlzIF9iZWluZ18gY2xvc2VkLCB0aGVuIHRoZSBiaW5kaW5ncyBuZWVkIHRvIGJlXFxuIFxcdCAqIHJlbW92ZWQgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG1pZ2h0IG5vdCBydW4gdW50aWwgYWZ0ZXIgdGhlIG1lbXNsb3RcXG4tXFx0ICogaXMgZnJlZWQuICBOb3RlLCBtb2RpZnlpbmcgdGhlIGJpbmRpbmdzIGlzIHNhZmUgZXZlbiB0aG91Z2ggdGhlIGZpbGVcXG4tXFx0ICogaXMgZHlpbmcgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LVxcdTAwM2VnbWVtLmZpbGUgdW5kZXJcXG4rXFx0ICogaXMgZnJlZWQuICBOb3RlLCBkZXJlZmVyZW5jaW5nIHRoZSBkeWluZyBmaWxlIGlzIHNhZmUgYXNcXG4rXFx0ICoga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LVxcdTAwM2VnbWVtLmZpbGUgdW5kZXJcXG4gXFx0ICogc2xvdHNfbG9jaywgYW5kIG9ubHkgcHV0cyBpdHMgcmVmZXJlbmNlIHRvIEtWTSBhZnRlciBkZXN0cm95aW5nIGFsbFxcbiBcXHQgKiBiaW5kaW5ncy4gIEkuZS4gcmVhY2hpbmcgdGhpcyBwb2ludCBtZWFucyBrdm1fZ21lbV9yZWxlYXNlKCkgaGFzbid0XFxuIFxcdCAqIHlldCBkZXN0cm95ZWQgdGhlIGJpbmRpbmdzIG9yIGZyZWVkIHRoZSBnbWVtX2ZpbGUsIGFuZCBjYW4ndCBkbyBzb1xcbiBcXHQgKiB1bnRpbCB0aGUgY2FsbGVyIGRyb3BzIHNsb3RzX2xvY2suXFxuIFxcdCAqL1xcbi1cXHRpZiAoIWZpbGUpIHtcXG4tXFx0XFx0X19rdm1fZ21lbV91bmJpbmQoc2xvdCwgc2xvdC1cXHUwMDNlZ21lbS5maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0Z21lbV9maWxlID0gZmlsZSA/OiBzbG90LVxcdTAwM2VnbWVtLmZpbGU7XFxuIFxcbi1cXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhmaWxlLVxcdTAwM2VmX21hcHBpbmcpO1xcbi1cXHRfX2t2bV9nbWVtX3VuYmluZChzbG90LCBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbi1cXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuK1xcdC8qXFxuK1xcdCAqIFRha2UgdGhlIGludmFsaWRhdGUgbG9jayBldmVuIGZvciBhIGR5aW5nIGZpbGUuICBPdGhlcndpc2UsXFxuK1xcdCAqIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKSBjYW4gZmluZCB0aGUgYmluZGluZyBhbmQgaW5jcmVtZW50XFxuK1xcdCAqIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzIHdoaWxlIGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKCkgbWlzc2VzXFxuK1xcdCAqIHRoZSByZW1vdmVkIGJpbmRpbmcgYW5kIHNraXBzIGRlY3JlbWVudC5cXG4rXFx0ICovXFxuK1xcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGdtZW1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG4rXFx0X19rdm1fZ21lbV91bmJpbmQoc2xvdCwgZ21lbV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbitcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGdtZW1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG4gfVxcbiBcXG4gLyogUmV0dXJucyBhIGxvY2tlZCBmb2xpbyBvbiBzdWNjZXNzLiAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NDM6NDEuMzQyNDc5NjYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDk3NDcwNTA1Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX3VuYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGt2bV9nbWVtX3VuYmluZGAgd2hlbiBhIGd1ZXN0X21lbWZkIGZpbGUgaXMgYmVpbmcgY2xvc2VkIGJ5IGVuc3VyaW5nIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgdGFrZW4gZXZlbiBmb3IgZHlpbmcgZmlsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTMyY2NlZjkxMDQ5ZTZkZjcyMmFjMGMzYTkyMjhhYWEzZGUxNTA5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDEzOjQzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcbmluZGV4IDIyMzNkODcxYTM4ZjQuLmFlZTgwZGRhNjIyOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG5AQCAtNzYsMzMgKzc2LDUzIEBAIHN0YXRpYyB2b2lkIHRlc3RfbW1hcF9zdXBwb3J0ZWQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcbiB9XG4gXG4rLypcbisgKiBGaWxsIEBuaWRzIHdpdGggdGhlIGZpcnN0IEBucl9uaWRzIG5vZGVzIGluIHRoZSBhbGxvd2VkIG1hc2suXG4rICogUmV0dXJuIGZhbHNlIGlmIHRoZSBtYXNrIGNvbnRhaW5zIGZld2VyIHRoYW4gQG5yX25pZHMgbm9kZXMuXG4rICovXG4rc3RhdGljIGJvb2wgZ2V0X251bWFfbm9kZV9pZHMoaW50ICpuaWRzLCBpbnQgbnJfbmlkcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7XG4rXHR1bnNpZ25lZCBsb25nIG5pZDtcbitcdGludCBucl9mb3VuZCA9IDA7XG4rXG4rXHRmb3JfZWFjaF9zZXRfYml0KG5pZCwgXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7XG4rXHRcdG5pZHNbbnJfZm91bmQrK10gPSBuaWQ7XG4rXHRcdGlmIChucl9mb3VuZCA9PSBucl9uaWRzKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4ge1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovXG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spO1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFzaywgYmluZF9ub2RlbWFzaztcbitcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spICsgMTtcbiBcdGludCBwb2xpY3k7XG4gXHRjaGFyICptZW07XG4rXHRpbnQgbmlkO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKVxuK1x0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhcdTAwMjZuaWQsIDEpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRiaW5kX25vZGVtYXNrID0gMVVMIFx1MDAzY1x1MDAzYyBuaWQ7XG4gXHRtZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7XG4gXG4gXHQvKiBUZXN0IE1QT0xfSU5URVJMRUFWRSBwb2xpY3kgKi9cbi1cdGt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgXHUwMDI2bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0a3ZtX2dldF9tZW1wb2xpY3koXHUwMDI2cG9saWN5LCBcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7XG4tXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBub2RlbWFza18wLFxuK1x0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcbiBcdFx0ICAgIFwiV2FudGVkIE1QT0xfSU5URVJMRUFWRSAoJXUpIGFuZCBub2RlbWFzayAweCVseCwgZ290ICV1IGFuZCAweCVseFwiLFxuLVx0XHQgICAgTVBPTF9JTlRFUkxFQVZFLCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcbitcdFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi9cbi1cdGt2bV9tYmluZChtZW0gKyBwYWdlX3NpemUgKiAyLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZ2V0X21lbXBvbGljeShcdTAwMjZwb2xpY3ksIFx1MDAyNm5vZGVtYXNrLCBtYXhub2RlLCBtZW0gKyBwYWdlX3NpemUgKiAyLCBNUE9MX0ZfQUREUik7XG4tXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBub2RlbWFza18wLFxuK1x0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcbiBcdFx0ICAgIFwiV2FudGVkIE1QT0xfQklORCAoJXUpIGFuZCBub2RlbWFzayAweCVseCwgZ290ICV1IGFuZCAweCVseFwiLFxuLVx0XHQgICAgTVBPTF9CSU5ELCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcbitcdFx0ICAgIE1QT0xfQklORCwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IE1QT0xfREVGQVVMVCBwb2xpY3kgKi9cbiBcdGt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7XG5AQCAtMTEyLDcgKzEzMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcdFx0ICAgIE1QT0xfREVGQVVMVCwgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IHdpdGggaW52YWxpZCBwb2xpY3kgKi9cbi1cdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuK1x0cmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbiBcdFx0ICAgIFwibWJpbmQgd2l0aCBpbnZhbGlkIHBvbGljeSBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFwiKTtcbiBcbkBAIC0xMjEsMTcgKzE0MSwxOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXG4gc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGUwX21hc2sgPSAxOyAgLyogTm9kZSAwICovXG4tXHR1bnNpZ25lZCBsb25nIG5vZGUxX21hc2sgPSAyOyAgLyogTm9kZSAxICovXG4tXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSA4O1xuK1x0dW5zaWduZWQgbG9uZyBiaW5kX25vZGVtYXNrc1syXTtcbitcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICsgMTtcbiBcdHZvaWQgKnBhZ2VzWzRdO1xuK1x0aW50IG5pZHNbMl07XG4gXHRpbnQgc3RhdHVzWzRdO1xuIFx0Y2hhciAqbWVtO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcbitcdGlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpXG4gXHRcdHJldHVybjtcbiBcbitcdGJpbmRfbm9kZW1hc2tzWzBdID0gMVVMIFx1MDAzY1x1MDAzYyBuaWRzWzBdO1xuK1x0YmluZF9ub2RlbWFza3NbMV0gPSAxVUwgXHUwMDNjXHUwMDNjIG5pZHNbMV07XG4gXHRtZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA0OyBpKyspXG5AQCAtMTM5LDM0ICsxNjEsNDIgQEAgc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcbiBcdC8qIFNldCBOVU1BIHBvbGljeSBhZnRlciBhbGxvY2F0aW9uICovXG4gXHRtZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIDAsIHBhZ2Vfc2l6ZSk7XG4gXG4gXHQvKiBTZXQgTlVNQSBwb2xpY3kgYmVmb3JlIGFsbG9jYXRpb24gKi9cbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMV9tYXNrLCBtYXhub2RlLCAwKTtcbi1cdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuIFx0bWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7XG4gXG4gXHQvKiBWYWxpZGF0ZSBpZiBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHNwZWNpZmllZCBOVU1BIG5vZGVzICovXG4gXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAxLCBcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1swXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMSwgXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDAsIFwiRXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzJdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAwLCBcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1szXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1sxXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMV0sIHN0YXR1c1swXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1sxXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMV0sIHN0YXR1c1sxXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1swXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMF0sIHN0YXR1c1syXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1swXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMF0sIHN0YXR1c1szXSk7XG4gXG4gXHQvKiBQdW5jaCBob2xlIGZvciBhbGwgcGFnZXMgKi9cbiBcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgdG90YWxfc2l6ZSk7XG4gXG4gXHQvKiBDaGFuZ2UgTlVNQSBwb2xpY3kgbm9kZXMgYW5kIHJlYWxsb2NhdGUgKi9cbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbi1cdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMV9tYXNrLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMV0sIG1heG5vZGUsIDApO1xuIFx0bWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7XG4gXG4gXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCBcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1swXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMCwgXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsIFwiRXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzJdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCBcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1szXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1swXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMF0sIHN0YXR1c1swXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMF0sIHN0YXR1c1sxXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMV0sIHN0YXR1c1syXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1sxXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMV0sIHN0YXR1c1szXSk7XG4gXG4gXHRrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcbmluZGV4IDI5NTcyYTZkNzg5Y2QuLjRiYmJmMzE0ZTlkNzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcbkBAIC00LDggKzQsNiBAQFxuICNpZm5kZWYgU0VMRlRFU1RfS1ZNX05VTUFJRl9IXG4gI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcbiBcbi0jaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJrdm1fc3lzY2FsbHMuaFwiXG5AQCAtMzAsNTQgKzI4LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXG4gXHRcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXG4gXHRcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tYXhfbnVtYV9ub2RlKHZvaWQpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9udW1hX21lbV9ub2Rlcyh2b2lkKVxuIHtcbi1cdHN0cnVjdCBkaXJlbnQgKmRlO1xuLVx0aW50IG1heF9ub2RlID0gMDtcbi1cdERJUiAqZDtcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xuIFxuLVx0Lypcbi1cdCAqIEFzc3VtZSB0aGVyZSdzIGEgc2luZ2xlIG5vZGUgaWYgdGhlIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgTlVNQSxcbi1cdCAqIG9yIGlmIG5vIG5vZGVzIGFyZSBmb3VuZC5cbi1cdCAqL1xuLVx0ZCA9IG9wZW5kaXIoXCIvc3lzL2RldmljZXMvc3lzdGVtL25vZGVcIik7XG4tXHRpZiAoIWQpXG4rXHQvKiBHZXQgc2V0IG9mIGZpcnN0IDY0IG51bWEgbm9kZXMgYXZhaWxhYmxlICovXG4rXHRpZiAoZ2V0X21lbXBvbGljeShOVUxMLCBcdTAwMjZub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzayksIE5VTEwsXG4rXHRcdFx0ICBNUE9MX0ZfTUVNU19BTExPV0VEKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkge1xuLVx0XHRpbnQgbm9kZV9pZDtcbi1cdFx0Y2hhciAqZW5kcHRyO1xuLVxuLVx0XHRpZiAoc3RybmNtcChkZS1cdTAwM2VkX25hbWUsIFwibm9kZVwiLCA0KSAhPSAwKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRub2RlX2lkID0gc3RydG9sKGRlLVx1MDAzZWRfbmFtZSArIDQsIFx1MDAyNmVuZHB0ciwgMTApO1xuLVx0XHRpZiAoKmVuZHB0ciAhPSAnXFwwJylcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKG5vZGVfaWQgXHUwMDNlIG1heF9ub2RlKVxuLVx0XHRcdG1heF9ub2RlID0gbm9kZV9pZDtcbi1cdH1cbi1cdGNsb3NlZGlyKGQpO1xuLVxuLVx0cmV0dXJuIG1heF9ub2RlO1xuLX1cbi1cbi1zdGF0aWMgYm9vbCBpc19udW1hX2F2YWlsYWJsZSh2b2lkKVxuLXtcbi1cdC8qXG4tXHQgKiBQcm9iZSBmb3IgTlVNQSBieSBkb2luZyBhIGR1bW15IGdldF9tZW1wb2xpY3koKS4gIElmIHRoZSBzeXNjYWxsXG4tXHQgKiBmYWlscyB3aXRoIEVOT1NZUywgdGhlbiB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRob3V0IE5VTUEgc3VwcG9ydC5cbi1cdCAqIGlmIHRoZSBzeXNjYWxsIGZhaWxzIHdpdGggRVBFUk0sIHRoZW4gdGhlIHByb2Nlc3MvdXNlciBsYWNrcyB0aGVcbi1cdCAqIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMgKENBUF9TWVNfTklDRSkuXG4tXHQgKi9cbi1cdHJldHVybiAhZ2V0X21lbXBvbGljeShOVUxMLCBOVUxMLCAwLCBOVUxMLCAwKSB8fFxuLVx0XHQoZXJybm8gIT0gRU5PU1lTIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFUEVSTSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKHZvaWQpXG4te1xuLVx0cmV0dXJuIGlzX251bWFfYXZhaWxhYmxlKCkgXHUwMDI2XHUwMDI2IGdldF9tYXhfbnVtYV9ub2RlKCkgXHUwMDNlPSAxO1xuK1x0cmV0dXJuIG5vZGVtYXNrO1xuIH1cbiBcbiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX05VTUFJRl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG5pbmRleCAzOWNlOWE5MzY5ZjViLi42NmRjZjM2Mzk4YWFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbkBAIC0yNTEsOCArMjUxLDggQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAgIHU2NCAqcGlwaXNfcmN2ZClcbiB7XG4gXHRsb25nIHBhZ2VzX25vdF9tb3ZlZDtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBub2RlbWFza3Nbc2l6ZW9mKG5vZGVtYXNrKSAqIDhdO1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFzaztcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcbiBcdGludCBub2RlcyA9IDA7XG4gXHR0aW1lX3Qgc3RhcnRfdGltZSwgbGFzdF91cGRhdGUsIG5vdztcbiBcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcbkBAIC0yNjYsMTkgKzI2NiwxNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcbiBcdGZwcmludGYoc3RkZXJyLCBcIkNhbGxpbmcgbWlncmF0ZV9wYWdlcyBldmVyeSAlZCBtaWNyb3NlY29uZHNcXG5cIixcbiBcdFx0ZGVsYXlfdXNlY3MpO1xuIFxuLVx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuLVx0a3ZtX2dldF9tZW1wb2xpY3koTlVMTCwgXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxuLVx0XHRcdCAgMCwgTVBPTF9GX01FTVNfQUxMT1dFRCk7XG4rXHRub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xuIFxuIFx0ZnByaW50ZihzdGRlcnIsIFwiTnVtYSBub2RlcyBmb3VuZCBhbW9uZ3N0IGZpcnN0ICVsdSBwb3NzaWJsZSBub2RlcyBcIlxuIFx0XHRcIihlYWNoIDEtYml0IGluZGljYXRlcyBub2RlIGlzIHByZXNlbnQpOiAlI2x4XFxuXCIsXG4tXHRcdHNpemVvZihub2RlbWFzaykgKiA4LCBub2RlbWFzayk7XG4rXHRcdEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBub2RlbWFzayk7XG4gXG4gXHQvKiBJbml0IGFycmF5IG9mIG1hc2tzIGNvbnRhaW5pbmcgYSBzaW5nbGUtYml0IGluIGVhY2gsIG9uZSBmb3IgZWFjaFxuIFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcbiBcdCAqIGFzIGJpdCBtYXNrcy5cbiBcdCAqL1xuLVx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2Mgc2l6ZW9mKG5vZGVtYXNrKSAqIDg7IGkrKywgYml0IFx1MDAzY1x1MDAzYz0gMSkge1xuK1x0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkrKywgYml0IFx1MDAzY1x1MDAzYz0gMSkge1xuIFx0XHRpZiAobm9kZW1hc2sgXHUwMDI2IGJpdCkge1xuIFx0XHRcdG5vZGVtYXNrc1tub2Rlc10gPSBub2RlbWFzayBcdTAwMjYgYml0O1xuIFx0XHRcdG5vZGVzKys7XG5AQCAtMzEwLDcgKzMwOCw3IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0XHQgKiBLVk1fQ1JFQVRFX1ZDUFUgaW9jdGwuIElmIHRoYXQgYXNzdW1wdGlvbiBldmVyIGNoYW5nZXMgdGhpc1xuIFx0XHQgKiB0ZXN0IG1heSBicmVhayBvciBnaXZlIGEgZmFsc2UgcG9zaXRpdmUgc2lnbmFsLlxuIFx0XHQgKi9cbi1cdFx0cGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBzaXplb2Yobm9kZW1hc2tzW2Zyb21dKSxcbitcdFx0cGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrc1tmcm9tXSkgKyAxLFxuIFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVtYXNrc1tmcm9tXSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZub2RlbWFza3NbdG9dKTtcbiBcdFx0aWYgKHBhZ2VzX25vdF9tb3ZlZCBcdTAwM2MgMClcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZjBlNWRhNDkwODY2MC4uZjg0ODEyMGFmODRiZSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC03MjEsNiArNzIxLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgc3RydWN0IGdtZW1fZmlsZSAqZilcbiBcbiB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuIHtcbitcdHN0cnVjdCBmaWxlICpnbWVtX2ZpbGU7XG4rXG4gXHQvKlxuIFx0ICogTm90aGluZyB0byBkbyBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHdhcyBfYWxyZWFkeV8gY2xvc2VkLCBhc1xuIFx0ICoga3ZtX2dtZW1fcmVsZWFzZSgpIGludmFsaWRhdGVzIGFuZCBudWxsaWZpZXMgYWxsIGJpbmRpbmdzLlxuQEAgLTczMywyMSArNzM1LDI0IEBAIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4gXHQvKlxuIFx0ICogSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgX2JlaW5nXyBjbG9zZWQsIHRoZW4gdGhlIGJpbmRpbmdzIG5lZWQgdG8gYmVcbiBcdCAqIHJlbW92ZWQgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG1pZ2h0IG5vdCBydW4gdW50aWwgYWZ0ZXIgdGhlIG1lbXNsb3Rcbi1cdCAqIGlzIGZyZWVkLiAgTm90ZSwgbW9kaWZ5aW5nIHRoZSBiaW5kaW5ncyBpcyBzYWZlIGV2ZW4gdGhvdWdoIHRoZSBmaWxlXG4tXHQgKiBpcyBkeWluZyBhcyBrdm1fZ21lbV9yZWxlYXNlKCkgbnVsbGlmaWVzIHNsb3QtXHUwMDNlZ21lbS5maWxlIHVuZGVyXG4rXHQgKiBpcyBmcmVlZC4gIE5vdGUsIGRlcmVmZXJlbmNpbmcgdGhlIGR5aW5nIGZpbGUgaXMgc2FmZSBhc1xuK1x0ICoga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LVx1MDAzZWdtZW0uZmlsZSB1bmRlclxuIFx0ICogc2xvdHNfbG9jaywgYW5kIG9ubHkgcHV0cyBpdHMgcmVmZXJlbmNlIHRvIEtWTSBhZnRlciBkZXN0cm95aW5nIGFsbFxuIFx0ICogYmluZGluZ3MuICBJLmUuIHJlYWNoaW5nIHRoaXMgcG9pbnQgbWVhbnMga3ZtX2dtZW1fcmVsZWFzZSgpIGhhc24ndFxuIFx0ICogeWV0IGRlc3Ryb3llZCB0aGUgYmluZGluZ3Mgb3IgZnJlZWQgdGhlIGdtZW1fZmlsZSwgYW5kIGNhbid0IGRvIHNvXG4gXHQgKiB1bnRpbCB0aGUgY2FsbGVyIGRyb3BzIHNsb3RzX2xvY2suXG4gXHQgKi9cbi1cdGlmICghZmlsZSkge1xuLVx0XHRfX2t2bV9nbWVtX3VuYmluZChzbG90LCBzbG90LVx1MDAzZWdtZW0uZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4rXHRnbWVtX2ZpbGUgPSBmaWxlID86IHNsb3QtXHUwMDNlZ21lbS5maWxlO1xuIFxuLVx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuLVx0X19rdm1fZ21lbV91bmJpbmQoc2xvdCwgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuLVx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhmaWxlLVx1MDAzZWZfbWFwcGluZyk7XG4rXHQvKlxuK1x0ICogVGFrZSB0aGUgaW52YWxpZGF0ZSBsb2NrIGV2ZW4gZm9yIGEgZHlpbmcgZmlsZS4gIE90aGVyd2lzZSxcbitcdCAqIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKSBjYW4gZmluZCB0aGUgYmluZGluZyBhbmQgaW5jcmVtZW50XG4rXHQgKiBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzcyB3aGlsZSBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZCgpIG1pc3Nlc1xuK1x0ICogdGhlIHJlbW92ZWQgYmluZGluZyBhbmQgc2tpcHMgZGVjcmVtZW50LlxuK1x0ICovXG4rXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhnbWVtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbitcdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuK1x0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhnbWVtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiB9XG4gXG4gLyogUmV0dXJucyBhIGxvY2tlZCBmb2xpbyBvbiBzdWNjZXNzLiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQzOjQxLjM0MjQ4NTcyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MTQ3MDI2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIEd1ZXN0IE1lbWZkIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGEgZmV3IGZpbGVzOiBgZ3Vlc3RfbWVtZmRfdGVzdC5jYCwgYG51bWFpZi5oYCwgYHhhcGljX2lwaV90ZXN0LmNgLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGBndWVzdF9tZW1mZC5jYC4gVGhlIGNoYW5nZXMgaW4gYGd1ZXN0X21lbWZkLmNgIGFyZSB3aGF0IEknbSBmb2N1c2luZyBvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGEgYnVnIGZpeCBpbiB0aGUgYGt2bV9nbWVtX3VuYmluZGAgZnVuY3Rpb24sIHdoaWNoIGlzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBndWVzdCBtZW1mZC5cblxuVGhlIGdpc3Qgb2YgaXQgaXMgdGhpczogd2hlbiBhIGd1ZXN0IG1lbWZkIGZpbGUgaXMgYmVpbmcgY2xvc2VkLCBhbmQgdGhlIGBmaWxlYCBwb2ludGVyIGlzIG51bGwgKG1lYW5pbmcgdGhlIGZpbGUgaXMgZHlpbmcpIHRoZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIHdhc24ndCBiZWluZyB0YWtlbi4gIFRoaXMgaXMgYSBjcml0aWNhbCBvdmVyc2lnaHQuICBJZiB0aGF0IGxvY2sgaXNuJ3QgaGVsZCwgdGhlbiB0aGUgaW52YWxpZGF0ZSBsb2dpYyBjb3VsZCBnZXQgaW50byBhIHJhY2UgY29uZGl0aW9uLiBTcGVjaWZpY2FsbHksIGBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KClgIGNvdWxkIHNlZSBhbiBhY3RpdmUgYmluZGluZywgaW5jcmVtZW50aW5nIGEgY291bnRlciwgd2hpbGUgYGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKClgIG1pZ2h0IG1pc3MgdGhlIHVuYmluZGluZywgbGVhdmluZyB0aGF0IGNvdW50ZXIgdW5iYWxhbmNlZC4gIFRoaXMgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgaXNzdWVzLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBlbnN1cmluZyB0aGF0IHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgYWx3YXlzIHRha2VuIGJlZm9yZSB1bmJpbmRpbmcgdGhlIGd1ZXN0IG1lbWZkIHNsb3QsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBmaWxlIGlzIGJlaW5nIGNsb3NlZC4gVGhlIGxvZ2ljIG5vdyB1c2VzIGVpdGhlciB0aGUgZXhpc3RpbmcgYGZpbGVgIHBvaW50ZXIgb3IgdXNlcyB0aGUgc2xvdCdzIGBnbWVtLmZpbGVgIGlmIHRoZSBgZmlsZWAgcG9pbnRlciBpcyBudWxsLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIGlzIGhlbGQuXG5cblRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgZml4LCBidXQgaXQncyBhIGNyaXRpY2FsIG9uZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gc2l0cyBpbiB0aGUgaGVhcnQgb2YgaG93IEtWTSBoYW5kbGVzIGd1ZXN0IG1lbWZkLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGNhbiBlYXNpbHkgbGVhZCB0byBtdWNoIG1vcmUgc2VyaW91cyBwcm9ibGVtcy4gSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIHRoZSBjYWxsZXJzIG9mIGBrdm1fZ21lbV91bmJpbmRgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxODUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo0Mzo0OS43NTcxOTE0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU3MjQxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9nbWVtX3VuYmluZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTY0Mz1pbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTcwNy1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjcwODpzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzA5LXtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzIxLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzIyOnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MjMte1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NTMtXFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZ21lbV9maWxlLVxcdTAwM2VmX21hcHBpbmcpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzU0OlxcdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1NS1cXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGdtZW1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9OTM1PXN0YXRpYyB2b2lkIGt2bV9mcmVlX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy05MzctXFx0aWYgKHNsb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjkzODpcXHRcXHRrdm1fZ21lbV91bmJpbmQoc2xvdCk7XFxudmlydC9rdm0va3ZtX21haW4uYy05MzktXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE2OTY9c3RhdGljIHZvaWQga3ZtX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTc0OS1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NTA6XFx0XFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xNzUxLVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xOTk0PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyMC1cXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXFxudmlydC9rdm0va3ZtX21haW4uYzoyMTIxOlxcdFxcdGt2bV9nbWVtX3VuYmluZChuZXcpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyMi1vdXQ6XFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaD03Nz1pbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0va3ZtX21tLmgtNzgtXFx0XFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpO1xcbnZpcnQva3ZtL2t2bV9tbS5oOjc5OnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbnZpcnQva3ZtL2t2bV9tbS5oLTgwLSNlbHNlXFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaD04Nj1zdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tbS5oLTkzLVxcbnZpcnQva3ZtL2t2bV9tbS5oOjk0OnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG52aXJ0L2t2bS9rdm1fbW0uaC05NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQzOjUyLjAxNDQzNzUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDM0NjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCBhIHByb21pc2luZyB0YXJnZXQuIFRoZSBga3ZtX2dtZW1fdW5iaW5kYCBmdW5jdGlvbiBpbiBga3ZtX21haW4uY2Agc2VlbXMgdG8gYmUgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIG11bHRpcGxlIGltcG9ydGFudCBmdW5jdGlvbnMgbGlrZSBga3ZtX2ZyZWVfbWVtc2xvdGAsIGBrdm1fY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIHBhdGggd2l0aCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBLVk0gb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGV4cGxvcmluZyB3aXRoIGZ1enppbmcuIE5vdywgbGV0J3Mgc2VlIHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBndWVzdF9tZW1mZCBhbmQgcHJvY2VlZCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NDM6NTUuNjQ4Nzg2NjQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTc3NzUxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX01FTV9HVUVTVF9NRU1GRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzNT1hbGxvd3MgbWFwcGluZyBndWVzdF9tZW1mZCBtZW1vcnkgaW50byBhIGd1ZXN0LiAgQWxsIGZpZWxkcyBzaGFyZWQgd2l0aFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM2OktWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM3LWluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzNDE9Ym91bmRzIGNoZWNrcyBhcHBseSAodXNlIGNvbW1vbiBzZW5zZSkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1Ni1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1NzpBIEtWTV9NRU1fR1VFU1RfTUVNRkQgcmVnaW9uIF9tdXN0XyBoYXZlIGEgdmFsaWQgZ3Vlc3RfbWVtZmQgKHByaXZhdGUgbWVtb3J5KSBhbmRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1OC11c2Vyc3BhY2VfYWRkciAoc2hhcmVkIG1lbW9yeSkuICBIb3dldmVyLCBcXFwidmFsaWRcXFwiIGZvciB1c2Vyc3BhY2VfYWRkciBzaW1wbHlcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD02MTk9c3RhdGljIGlubGluZSBib29sIGt2bV9zbG90X2hhc19nbWVtKGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTYyMC17XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjYyMTpcXHRyZXR1cm4gc2xvdCBcXHUwMDI2XFx1MDAyNiAoc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNjIyLX1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOT1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNTctI2RlZmluZSBLVk1fTUVNX1JFQURPTkxZXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAxKVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo1ODojZGVmaW5lIEtWTV9NRU1fR1VFU1RfTUVNRkRcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIDIpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTU5LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC01Ny0jZGVmaW5lIEtWTV9NRU1fUkVBRE9OTFlcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIDEpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjU4OiNkZWZpbmUgS1ZNX01FTV9HVUVTVF9NRU1GRFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMilcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTM3OD1zdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfYmluZGluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGZkLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzgxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzgyOlxcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCAwLCBLVk1fTUVNX0dVRVNUX01FTUZELCAwLCBzaXplLCAwLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzgzLVxcdFxcdFxcdFxcdFxcdCBmZCwgQUxJR05fRE9XTihJTlQ2NF9NQVgsIHBhZ2Vfc2l6ZSkpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01MzU9c3RhdGljIHZvaWQgdGVzdF9ndWVzdF9tZW1mZF9ndWVzdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzAtXFx0XFx0XFx0XFx0XFx0ICAgICBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU3MTpcXHR2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgS1ZNX01FTV9HVUVTVF9NRU1GRCwgZ3BhLCBzaXplLCBOVUxMLCBmZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTUwMC1cXHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo1MDE6XFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNTAyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk3OT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA4NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NTpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwODYtXFx0XFx0aWYgKGd1ZXN0X21lbWZkIFxcdTAwM2MgMCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTEyNzQ9dm9pZCB2bV9ndWVzdF9tZW1fZmFsbG9jYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgYmFzZSwgdTY0IHNpemUsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI4Ny1cXHRcXHRyZWdpb24gPSB1c2Vyc3BhY2VfbWVtX3JlZ2lvbl9maW5kKHZtLCBncGEsIGdwYSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyODg6XFx0XFx0VEVTVF9BU1NFUlQocmVnaW9uIFxcdTAwMjZcXHUwMDI2IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI4OS1cXHRcXHRcXHQgICAgXFxcIlByaXZhdGUgbWVtb3J5IHJlZ2lvbiBub3QgZm91bmQgZm9yIEdQQSAweCVseFxcXCIsIGdwYSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM9NjU9c3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy03NS1cXHRcXHQuZ3BhID0gYmFzZV9ncGEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjc2OlxcdFxcdC5mbGFncyA9IHByaXZhdGUgPyBLVk1fTUVNX0dVRVNUX01FTUZEIDogMCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtNzctXFx0fTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYz0xNjM9c3RhdGljIHZvaWQgX190ZXN0X3ByZV9mYXVsdF9tZW1vcnkodW5zaWduZWQgbG9uZyB2bV90eXBlLCBib29sIHByaXZhdGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTgyLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIGdwYSwgVEVTVF9TTE9ULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYzoxODM6XFx0XFx0XFx0XFx0ICAgIFRFU1RfTlBBR0VTLCBwcml2YXRlID8gS1ZNX01FTV9HVUVTVF9NRU1GRCA6IDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0xODQtXFx0dmlydF9tYXAodm0sIGd2YSwgZ3BhLCBURVNUX05QQUdFUyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTM0Nj1zdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbWVtb3J5X3JlZ2lvbl9mbGFncyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNDgtXFx0dTMyIHN1cHBvcnRlZF9mbGFncyA9IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzQ5OlxcdGNvbnN0IHUzMiB2Ml9vbmx5X2ZsYWdzID0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM1MC1cXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzY0LVxcdGlmIChrdm1fY2hlY2tfY2FwKEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMpIFxcdTAwMjYgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM2NTpcXHRcXHRzdXBwb3J0ZWRfZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM2Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6Mzg2OlxcdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODctXFx0XFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODktXFx0XFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTA6XFx0XFx0XFx0XFx0XFx0XFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5MS1cXHRcXHRcXHRcXHRcXHRcXHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5NS1cXHRcXHRyID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgMCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5NjpcXHRcXHRcXHRcXHRcXHRcXHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTctXFx0XFx0XFx0XFx0XFx0XFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz00NTg9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbWVtZmQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ2MC17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NjE6XFx0aW50IHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NjItXFx0XFx0XFx0XFx0XFx0ICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TSVpFLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz00Njc9c3RhdGljIHZvaWQgdGVzdF9hZGRfcHJpdmF0ZV9tZW1vcnlfcmVnaW9uKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ3MjpcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIEFERCBvZiBLVk1fTUVNX0dVRVNUX01FTUZEIG1lbW9yeSByZWdpb25zXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDg2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg3OlxcdHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtMiwgTUVNX1JFR0lPTl9TTE9ULCBLVk1fTUVNX0dVRVNUX01FTUZELFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDg4LVxcdFxcdFxcdFxcdCAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NJWkUsIDAsIG1lbWZkLCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDk1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDk2OlxcdHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTctXFx0XFx0XFx0XFx0ICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0laRSwgMCwgbWVtZmQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MDgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MDk6XFx0cHJfaW5mbyhcXFwiVGVzdGluZyBBREQgb2Ygb3ZlcmxhcHBpbmcgS1ZNX01FTV9HVUVTVF9NRU1GRCBtZW1vcnkgcmVnaW9uc1xcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUxNTpcXHR2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgTUVNX1JFR0lPTl9TTE9ULCBLVk1fTUVNX0dVRVNUX01FTUZELFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE2LVxcdFxcdFxcdFxcdCAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NJWkUgKiAyLCAwLCBtZW1mZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTg6XFx0dm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCArIDEsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTktXFx0XFx0XFx0XFx0ICAgTUVNX1JFR0lPTl9HUEEgKiAyLCBNRU1fUkVHSU9OX1NJWkUgKiAyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjUtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MjY6XFx0dm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyNy1cXHRcXHRcXHRcXHQgICBNRU1fUkVHSU9OX0dQQSwgMCwgTlVMTCwgLTEsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzItXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MzM6XFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzNC1cXHRcXHRcXHRcXHRcXHQgTUVNX1JFR0lPTl9HUEEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0MC1cXHQvKiBBbmQgbm93IHRoZSBiYWNrIGhhbGYgb2YgdGhlIG90aGVyIHNsb3QncyBndWVzdF9tZW1mZCBiaW5kaW5nLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQxOlxcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDItXFx0XFx0XFx0XFx0XFx0IE1FTV9SRUdJT05fR1BBLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTItXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NTM6XFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU1NC1cXHRcXHRcXHRcXHRcXHQgTUVNX1JFR0lPTl9HUEEgKiAyIC0gTUVNX1JFR0lPTl9TSVpFLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjAtXFx0LyogQW5kIG5vdyB0aGUgYmFjayBoYWxmIG9mIHRoZSBvdGhlciBzbG90LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTYxOlxcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjItXFx0XFx0XFx0XFx0XFx0IE1FTV9SRUdJT05fR1BBICogMiArIE1FTV9SRUdJT05fU0laRSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NjIzPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTY0OC1cXHR9IGVsc2Uge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NjQ5OlxcdFxcdHByX2luZm8oXFxcIlNraXBwaW5nIHRlc3RzIGZvciBLVk1fTUVNX0dVRVNUX01FTUZEIG1lbW9yeSByZWdpb25zXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTY1MC1cXHR9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz0zNjk9c3RhdGljIHZvaWQgdGVzdF9tZW1fY29udmVyc2lvbnMoZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwgdTMyIG5yX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDAxLVxcdFxcdFxcdCAgIEJBU0VfREFUQV9TTE9UICsgaSwgc2xvdF9zaXplIC8gdm0tXFx1MDAzZXBhZ2Vfc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0MDI6XFx0XFx0XFx0ICAgS1ZNX01FTV9HVUVTVF9NRU1GRCwgbWVtZmQsIHNsb3Rfc2l6ZSAqIGkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQwMy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYz00Nz1zdGF0aWMgdm9pZCB0ZXN0X3ByaXZhdGVfYWNjZXNzX21lbXNsb3RfZGVsZXRlZCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTYwLVxcdFxcdFxcdFxcdCAgICBFWElUU19URVNUX05QQUdFUyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmM6NjE6XFx0XFx0XFx0XFx0ICAgIEtWTV9NRU1fR1VFU1RfTUVNRkQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYy02Mi1cXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NjQzPWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjg0LVxcdC8qXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2ODU6XFx0ICogbWVtc2xvdHMgb2YgZmxhZyBLVk1fTUVNX0dVRVNUX01FTUZEIGFyZSBpbW11dGFibGUgdG8gY2hhbmdlLCBzb1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjg2LVxcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTkzNT1zdGF0aWMgdm9pZCBrdm1fZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTkzNi17XFxudmlydC9rdm0va3ZtX21haW4uYzo5Mzc6XFx0aWYgKHNsb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTkzOC1cXHRcXHRrdm1fZ21lbV91bmJpbmQoc2xvdCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE1NzM9c3RhdGljIGludCBjaGVja19tZW1vcnlfcmVnaW9uX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTU3OC1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE1Nzk6XFx0XFx0dmFsaWRfZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE1ODAtXFxudmlydC9rdm0va3ZtX21haW4uYy0xNTgxLVxcdC8qIERpcnR5IGxvZ2dpbmcgcHJpdmF0ZSBtZW1vcnkgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuICovXFxudmlydC9rdm0va3ZtX21haW4uYzoxNTgyOlxcdGlmIChtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE1ODMtXFx0XFx0dmFsaWRfZmxhZ3MgXFx1MDAyNj0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xNTkwLVxcdGlmIChrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgXFx1MDAyNlxcdTAwMjZcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE1OTE6XFx0ICAgICEobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTU5Mi1cXHRcXHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX1JFQURPTkxZO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xNjk2PXN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3MzItXFx0XFx0ICovXFxudmlydC9rdm0va3ZtX21haW4uYzoxNzMzOlxcdFxcdFdBUk5fT05fT05DRShvbGQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xNzM0LVxcdFxcdGZhbGx0aHJvdWdoO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ4LVxcdFxcdCAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTc0OTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NTAtXFx0XFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTQ9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDI1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjAyNjpcXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQgXFx1MDAyNlxcdTAwMjZcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMjctXFx0ICAgIChtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCBcXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDc2LVxcdFxcdC8qIFByaXZhdGUgbWVtc2xvdHMgYXJlIGltbXV0YWJsZSwgdGhleSBjYW4gb25seSBiZSBkZWxldGVkLiAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjA3NzpcXHRcXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDc4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDgwLVxcdFxcdCAgICAobnBhZ2VzICE9IG9sZC1cXHUwMDNlbnBhZ2VzKSB8fFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjA4MTpcXHRcXHQgICAgKChtZW0tXFx1MDAzZWZsYWdzIF4gb2xkLVxcdTAwM2VmbGFncykgXFx1MDAyNiAoS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQpKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwODItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMDYtXFx0bmV3LVxcdTAwM2V1c2Vyc3BhY2VfYWRkciA9IG1lbS1cXHUwMDNldXNlcnNwYWNlX2FkZHI7XFxudmlydC9rdm0va3ZtX21haW4uYzoyMTA3OlxcdGlmIChtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cXHRcXHRyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLVxcdTAwM2VndWVzdF9tZW1mZCwgbWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTE5LW91dF91bmJpbmQ6XFxudmlydC9rdm0va3ZtX21haW4uYzoyMTIwOlxcdGlmIChtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjEtXFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG5ldyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQzOjU3LjQ2NjU2NjUxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTU1NTg4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEtWTSBHdWVzdCBNZW1vcnkgRmlsZSBEZXNjcmlwdG9yIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29udGV4dCBmb3IgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgLiBMZXQncyBhc3N1bWUgdGhpcyBpcyBhIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXMgd291bGQgYmUgaW4gdGhlIGB2aXJ0L2t2bS9gIGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHNvdXJjZSwgb3IgcG90ZW50aWFsbHkgYSBzaW1pbGFybHkgbmFtZWQgZGlyZWN0b3J5IGlmIHRoZXJlJ3MgYW4gYWJzdHJhY3Rpb24gbGF5ZXIuIEknbGwgbmVlZCB0byBsb29rIGluc2lkZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkncmUgdGhlIHVzdWFsIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQgb2YgdGhpbmcgaXMgZGVmaW5lZCwgYW5kIGRlcGVuZGVuY2llcyBhcmUgY2xlYXJseSBsaXN0ZWQuIElmIGl0IGlzbid0IGBLY29uZmlnYCwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBgLmNvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGRpcmVjdG9yaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3Vic3lzdGVtLiBJIHdvdWxkIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyBhYm91dCB3aGF0IGZlYXR1cmVzIHRoaXMgZGVwZW5kcyBvbiwgd2hhdCBpdCBlbmFibGVzLCBhbmQgcG90ZW50aWFsbHkgd2hpY2ggYXJjaGl0ZWN0dXJlcyBvciBwcm9jZXNzb3JzIHRoaXMgaXMgcmVsZXZhbnQgdG8uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTczOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQ0OjAxLjAyMjEyODQ3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc4OTcyOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NDQ6MDIuNzAxMTE1MTE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MjkyOTM5NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgdGhhdCBwb2ludCBpbiB0aGUgY29kZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIHNldCBvZiBvcHRpb25zOyBpdCdzIGxpa2VseSB0aGV5IGFyZSB0aGUgYmFzaWNzIGZvciB0aGUgbW9kdWxlIHRvIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjExOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjUwOjU5Ljk5NDA1ODEzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRjb25maWcgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAxMDE6XFx0ICAgICAgIGJvb2xcXG4gMTAyOlxcdFxcbiAxMDM6XFx0Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDEwNDpcXHQgICAgICAgYm9vbFxcbiAxMDU6XFx0XFxuIDEwNjpcXHRjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxuIDEwNzpcXHQgICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcbiAxMDg6XFx0ICAgICAgIGJvb2xcXG4gMTA5OlxcdFxcbiAxMTA6XFx0Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDExMTpcXHQgICAgICAgYm9vbFxcbiAxMTI6XFx0ICAgICAgIGRlcGVuZHMgb24gS1ZNX0dVRVNUX01FTUZEXFxuIDExMzpcXHRcXG4gMTE0OlxcdGNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbiAxMTU6XFx0ICAgICAgIGJvb2xcXG4gMTE2OlxcdCAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxcbiAxMTc6XFx0XFxuIDExODpcXHRjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDExOTpcXHQgICAgICAgYm9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo1MDo1OS45OTQxMzA0NjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3MjMxMjI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtWTV9HVUVTVF9NRU1GRCoqXG5cbk9rYXksIHNvIEkndmUgc3R1bWJsZWQgdXBvbiB0aGlzIGBLVk1fR1VFU1RfTUVNRkRgIGJvb2xlYW4sIGFuZCBpdCdzIGZsYWdnZWQgYXMgaGlkZGVuLiBNeSBpbml0aWFsIGh1bmNoLCBnaXZlbiBpdHMgbmFtZSBhbmQgaGlkZGVuIHN0YXR1cywgaXMgdGhhdCBpdCdzIGxpa2VseSBzZWxlY3RlZCBkZWVwIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBjb25maWd1cmF0aW9uIGZpbGVzLiBJdCdzIG5vdCBzb21ldGhpbmcgSSdkIGV4cGVjdCB0byBzZWUgZXhwb3NlZCBkaXJlY3RseSBhdCBhIGhpZ2ggbGV2ZWwuIFRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqZXhhY3RseSogd2hhdCdzIHB1bGxpbmcgdGhpcyBpbi4gVW5kZXJzdGFuZGluZyB0aGUgXCJzZWxlY3RcIiByZWxhdGlvbnNoaXBzIHdpbGwgZ2l2ZSBtZSBhIGNyaXRpY2FsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHVuZGVybHlpbmcgcmF0aW9uYWxlIGFuZCB3aGljaCBzcGVjaWZpYyBoYXJkd2FyZSBvciBhcmNoaXRlY3R1cmFsIG51YW5jZXMgbmVjZXNzaXRhdGUgaXRzIGluY2x1c2lvbi4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgY29uZmlncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NDYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjUxOjA1Ljc2NjQ0NTI4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyOTUzNzM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzgtXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNDktXFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NTE6MDcuODk1OTg4Nzc2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjM1MjEwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIEtWTSBjaGFuZ2UsIGFuZCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdCBzbyBmYXIuIFRoZSBrZXkgZW5hYmxpbmcgY29uZmlnIHNlZW1zIHRvIGJlIGBLVk1gLCBhbmQgaXQncyBiZWluZyB1c2VkIGFjcm9zcyBib3RoIGFybTY0IGFuZCB4ODZfNjQgYXJjaGl0ZWN0dXJlcyDigJMgYSBnb29kIHNpZ24gb2Ygd2lkZXIgYXBwbGljYWJpbGl0eSwgb3IgYXQgbGVhc3QgaW50ZW50LlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgY2VudGVyZWQgb24gdGhlIGBrdm1fZ21lbV91bmJpbmRgIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3Igb3RoZXIgYWZmZWN0ZWQgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5BaCwgYW5kIEkgc2VlIHRoZSBzZWxmLXRlc3RzIGhhdmUgYmVlbiB1cGRhdGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY2AuIFRob3NlIGFyZSBwdXJlbHkgdGVzdHMgdGhvdWdoLCBub3Qga2VybmVsIGNvZGUsIHNvIHRoZXkgZG9uJ3QgaW1wYWN0IG15IGltbWVkaWF0ZSBmdXp6aW5nIGZvY3VzLlxuXG5SaWdodCwgc28gdGhlIGtlcm5lbCBjb2RlIG1vZGlmaWNhdGlvbiBpcyByZWFsbHkganVzdCBga3ZtX2dtZW1fdW5iaW5kYC4gVGhhdCdzIGEgdmVyeSBmb2N1c2VkIGNoYW5nZSwgd2hpY2ggbWFrZXMgaXQgYW4gaWRlYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBga3ZtX2dtZW1fdW5iaW5kYCBpcyBzdGF0aWMgb3Igbm90LiBPa2F5LCBsZXQncyBzZWU6XG5cbmBgYGNcbnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG5gYGBcblxuTm8sIGl0J3Mgbm90IHN0YXRpYy4gR29vZC4gVGhpcyBpcyBwcm9iYWJseSBleHBvcnRlZCBmb3Igb3RoZXIgbW9kdWxlcyB0byBhY2Nlc3MgaXQuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgZXhwb3J0ZWQgYW5kIHZpc2libGUgdG8gb3RoZXIgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NTE6MTUuMjU5NTEyMDgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM3Nzk0ODcwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLiprdm1fZ21lbV91bmJpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjUxOjE3LjQ5NzMxNTk3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIzNTg0MDkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEd1ZXN0IE1lbWZkIFVuYmluZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBldmVuIHRob3VnaCBga3ZtX2dtZW1fdW5iaW5kYCBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCBpdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhlcmVmb3JlLCBpdCdzIHBlcmZlY3RseSB2YWxpZCB0byB1c2UgaXQgYXMgYSBmb2N1cyBzeW1ib2wgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cbkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2Agd2VyZSB0b3VjaGVkLiBUaGUgZGlmZiBvbmx5IG1lbnRpb25zIG1vZGlmaWNhdGlvbnMgdG8gYGt2bV9nbWVtX3VuYmluZGAsIHdoaWNoIGNvbmZpcm1zIHRoZSBzY29wZS5cblxuQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYSBtaXNzaW5nIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgY2FsbC4gUHJldmlvdXNseSwgd2hlbiB0aGUgYGZpbGVgIHBvaW50ZXIgd2FzIE5VTEzigJRpbmRpY2F0aW5nIHRoZSBmaWxlIHdhcyBiZWluZyBjbG9zZWTigJR0aGUgbG9jayB3YXNuJ3QgYWNxdWlyZWQuIFRoaXMgb21pc3Npb24gY3JlYXRlcyBhIHJhY2UgY29uZGl0aW9uLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWx3YXlzIHRha2luZyB0aGUgbG9jaywgZXZlbiBpZiB0aGUgZmlsZSBpcyBudWxsLiBUaGlzIGxvb2tzIGxpa2UgYSByYWNlIGNvbmRpdGlvbiBmaXguXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgdGFyZ2V0aW5nIHRoZSBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHN1cnJvdW5kaW5nIGd1ZXN0IG1lbWZkLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEkgd2lsbCBhbHNvIHVzZSBgRm9jdXNTeW1ib2xzPVtcImt2bV9nbWVtX3VuYmluZFwiXWAgdG8gY29uY2VudHJhdGUgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGaW5hbGx5LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBgRW5hYmxlQ29uZmlncz1bXCJLVk1cIl1gLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIGVuc3VyZSB0aG9yb3VnaCB0ZXN0aW5nIG9mIHRoaXMgY3JpdGljYWwgS1ZNIGNvbXBvbmVudCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmFjZSBjb25kaXRpb24gbmF0dXJlIG9mIHRoZSBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjI4LCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo1MTo1OC43MzMxNjAwMThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTgyMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dtZW1fdW5iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX2dtZW1fdW5iaW5kYCB3aGVuIGEgZ3Vlc3RfbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQgYnkgZW5zdXJpbmcgdGhlIGludmFsaWRhdGUgbG9jayBpcyB0YWtlbiBldmVuIGZvciBkeWluZyBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX3VuYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGt2bV9nbWVtX3VuYmluZGAgd2hlbiBhIGd1ZXN0X21lbWZkIGZpbGUgaXMgYmVpbmcgY2xvc2VkIGJ5IGVuc3VyaW5nIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgdGFrZW4gZXZlbiBmb3IgZHlpbmcgZmlsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NTE6NTguODEyOTg5NjY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxNDg1OTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjUxOjU4LjgxMzYzNDc3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjAxNDIwOTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIGd1ZXN0X21lbWZkIHNlbGZ0ZXN0cyBhbmQgZml4ZXMgYSBsb2NraW5nL2NvbmN1cnJlbmN5IGJ1ZyBpbiBga3ZtX2dtZW1fdW5iaW5kYCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIFRoZSBidWcgZml4IGVuc3VyZXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIGlzIHRha2VuIGV2ZW4gd2hlbiB0aGUgZmlsZSBpcyBkeWluZywgcHJldmVudGluZyBhIG1pc21hdGNoIGluIGBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzc2AgaW5jcmVtZW50cy9kZWNyZW1lbnRzLiBUaGlzIGlzIGEgbG9naWMvY29uY3VycmVuY3kgaXNzdWUsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhay4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEzMmNjZWY5MTA0OWU2ZGY3MjJhYzBjM2E5MjI4YWFhM2RlMTUwOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMzo0MzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG5pbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuQEAgLTc2LDMzICs3Niw1MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21tYXBfc3VwcG9ydGVkKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXHRrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7XG4gfVxuIFxuKy8qXG4rICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLlxuKyAqIFJldHVybiBmYWxzZSBpZiB0aGUgbWFzayBjb250YWlucyBmZXdlciB0aGFuIEBucl9uaWRzIG5vZGVzLlxuKyAqL1xuK3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xuK1x0dW5zaWduZWQgbG9uZyBuaWQ7XG4rXHRpbnQgbnJfZm91bmQgPSAwO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChuaWQsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSkge1xuK1x0XHRuaWRzW25yX2ZvdW5kKytdID0gbmlkO1xuK1x0XHRpZiAobnJfZm91bmQgPT0gbnJfbmlkcylcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tfMCA9IDE7IC8qIG5pZDogMCAqL1xuLVx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTtcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2ssIGJpbmRfbm9kZW1hc2s7XG4rXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSArIDE7XG4gXHRpbnQgcG9saWN5O1xuIFx0Y2hhciAqbWVtO1xuK1x0aW50IG5pZDtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcbitcdGlmICghZ2V0X251bWFfbm9kZV9pZHMoXHUwMDI2bmlkLCAxKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0YmluZF9ub2RlbWFzayA9IDFVTCBcdTAwM2NcdTAwM2MgbmlkO1xuIFx0bWVtID0ga3ZtX21tYXAodG90YWxfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQpO1xuIFxuIFx0LyogVGVzdCBNUE9MX0lOVEVSTEVBVkUgcG9saWN5ICovXG4tXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcdTAwMjZiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTtcbiBcdGt2bV9nZXRfbWVtcG9saWN5KFx1MDAyNnBvbGljeSwgXHUwMDI2bm9kZW1hc2ssIG1heG5vZGUsIG1lbSwgTVBPTF9GX0FERFIpO1xuLVx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcbitcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssXG4gXHRcdCAgICBcIldhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcIixcbi1cdFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XG4rXHRcdCAgICBNUE9MX0lOVEVSTEVBVkUsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCBiYXNpYyBNUE9MX0JJTkQgcG9saWN5ICovXG4tXHRrdm1fbWJpbmQobWVtICsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChtZW0gKyBwYWdlX3NpemUgKiAyLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0a3ZtX2dldF9tZW1wb2xpY3koXHUwMDI2cG9saWN5LCBcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtICsgcGFnZV9zaXplICogMiwgTVBPTF9GX0FERFIpO1xuLVx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcbitcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssXG4gXHRcdCAgICBcIldhbnRlZCBNUE9MX0JJTkQgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcIixcbi1cdFx0ICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XG4rXHRcdCAgICBNUE9MX0JJTkQsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCBNUE9MX0RFRkFVTFQgcG9saWN5ICovXG4gXHRrdm1fbWJpbmQobWVtLCB0b3RhbF9zaXplLCBNUE9MX0RFRkFVTFQsIE5VTEwsIDAsIDApO1xuQEAgLTExMiw3ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXHRcdCAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovXG4tXHRyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbitcdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4gXHRcdCAgICBcIm1iaW5kIHdpdGggaW52YWxpZCBwb2xpY3kgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUxcIik7XG4gXG5AQCAtMTIxLDE3ICsxNDEsMTkgQEAgc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFxuIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqL1xuLVx0dW5zaWduZWQgbG9uZyBub2RlMV9tYXNrID0gMjsgIC8qIE5vZGUgMSAqL1xuLVx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gODtcbitcdHVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07XG4rXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKGJpbmRfbm9kZW1hc2tzWzBdKSArIDE7XG4gXHR2b2lkICpwYWdlc1s0XTtcbitcdGludCBuaWRzWzJdO1xuIFx0aW50IHN0YXR1c1s0XTtcbiBcdGNoYXIgKm1lbTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXG4rXHRpZiAoIWdldF9udW1hX25vZGVfaWRzKG5pZHMsIEFSUkFZX1NJWkUobmlkcykpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRiaW5kX25vZGVtYXNrc1swXSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlkc1swXTtcbitcdGJpbmRfbm9kZW1hc2tzWzFdID0gMVVMIFx1MDAzY1x1MDAzYyBuaWRzWzFdO1xuIFx0bWVtID0ga3ZtX21tYXAodG90YWxfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgaSsrKVxuQEAgLTEzOSwzNCArMTYxLDQyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXG4gXHQvKiBTZXQgTlVNQSBwb2xpY3kgYWZ0ZXIgYWxsb2NhdGlvbiAqL1xuIFx0bWVtc2V0KG1lbSwgMHhhYSwgcGFnZV9zaXplKTtcbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuIFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCBwYWdlX3NpemUpO1xuIFxuIFx0LyogU2V0IE5VTUEgcG9saWN5IGJlZm9yZSBhbGxvY2F0aW9uICovXG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTFfbWFzaywgbWF4bm9kZSwgMCk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMV0sIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcbiBcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xuIFxuIFx0LyogVmFsaWRhdGUgaWYgcGFnZXMgYXJlIGFsbG9jYXRlZCBvbiBzcGVjaWZpZWQgTlVNQSBub2RlcyAqL1xuIFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMSwgXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMF0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDEsIFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzFdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSAwLCBcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1syXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMCwgXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbM10pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IG5pZHNbMV0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzFdLCBzdGF0dXNbMF0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IG5pZHNbMV0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzFdLCBzdGF0dXNbMV0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMF0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzBdLCBzdGF0dXNbMl0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IG5pZHNbMF0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzBdLCBzdGF0dXNbM10pO1xuIFxuIFx0LyogUHVuY2ggaG9sZSBmb3IgYWxsIHBhZ2VzICovXG4gXHRrdm1fZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIDAsIHRvdGFsX3NpemUpO1xuIFxuIFx0LyogQ2hhbmdlIE5VTUEgcG9saWN5IG5vZGVzIGFuZCByZWFsbG9jYXRlICovXG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTFfbWFzaywgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcbiBcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xuIFxuIFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMCwgXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMF0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDAsIFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzFdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSAxLCBcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1syXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMSwgXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbM10pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IG5pZHNbMF0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzBdLCBzdGF0dXNbMF0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IG5pZHNbMF0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzBdLCBzdGF0dXNbMV0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMV0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzFdLCBzdGF0dXNbMl0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IG5pZHNbMV0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzFdLCBzdGF0dXNbM10pO1xuIFxuIFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG5pbmRleCAyOTU3MmE2ZDc4OWNkLi40YmJiZjMxNGU5ZDc3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG5AQCAtNCw4ICs0LDYgQEBcbiAjaWZuZGVmIFNFTEZURVNUX0tWTV9OVU1BSUZfSFxuICNkZWZpbmUgU0VMRlRFU1RfS1ZNX05VTUFJRl9IXG4gXG4tI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2Vcbi1cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3ZtX3N5c2NhbGxzLmhcIlxuQEAgLTMwLDU0ICsyOCwxNiBAQCBLVk1fU1lTQ0FMTF9ERUZJTkUobWJpbmQsIDYsIHZvaWQgKiwgYWRkciwgdW5zaWduZWQgbG9uZywgc2l6ZSwgaW50LCBtb2RlLFxuIFx0XHQgICBjb25zdCB1bnNpZ25lZCBsb25nICosIG5vZGVtYXNrLCB1bnNpZ25lZCBsb25nLCBtYXhub2RlLFxuIFx0XHQgICB1bnNpZ25lZCBpbnQsIGZsYWdzKTtcbiBcbi1zdGF0aWMgaW5saW5lIGludCBnZXRfbWF4X251bWFfbm9kZSh2b2lkKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnVtYV9tZW1fbm9kZXModm9pZClcbiB7XG4tXHRzdHJ1Y3QgZGlyZW50ICpkZTtcbi1cdGludCBtYXhfbm9kZSA9IDA7XG4tXHRESVIgKmQ7XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBBc3N1bWUgdGhlcmUncyBhIHNpbmdsZSBub2RlIGlmIHRoZSBrZXJuZWwgZG9lc24ndCBzdXBwb3J0IE5VTUEsXG4tXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXG4tXHQgKi9cbi1cdGQgPSBvcGVuZGlyKFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlXCIpO1xuLVx0aWYgKCFkKVxuK1x0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuK1x0aWYgKGdldF9tZW1wb2xpY3koTlVMTCwgXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBOVUxMLFxuK1x0XHRcdCAgTVBPTF9GX01FTVNfQUxMT1dFRCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0d2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHtcbi1cdFx0aW50IG5vZGVfaWQ7XG4tXHRcdGNoYXIgKmVuZHB0cjtcbi1cbi1cdFx0aWYgKHN0cm5jbXAoZGUtXHUwMDNlZF9uYW1lLCBcIm5vZGVcIiwgNCkgIT0gMClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0bm9kZV9pZCA9IHN0cnRvbChkZS1cdTAwM2VkX25hbWUgKyA0LCBcdTAwMjZlbmRwdHIsIDEwKTtcbi1cdFx0aWYgKCplbmRwdHIgIT0gJ1xcMCcpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChub2RlX2lkIFx1MDAzZSBtYXhfbm9kZSlcbi1cdFx0XHRtYXhfbm9kZSA9IG5vZGVfaWQ7XG4tXHR9XG4tXHRjbG9zZWRpcihkKTtcbi1cbi1cdHJldHVybiBtYXhfbm9kZTtcbi19XG4tXG4tc3RhdGljIGJvb2wgaXNfbnVtYV9hdmFpbGFibGUodm9pZClcbi17XG4tXHQvKlxuLVx0ICogUHJvYmUgZm9yIE5VTUEgYnkgZG9pbmcgYSBkdW1teSBnZXRfbWVtcG9saWN5KCkuICBJZiB0aGUgc3lzY2FsbFxuLVx0ICogZmFpbHMgd2l0aCBFTk9TWVMsIHRoZW4gdGhlIGtlcm5lbCB3YXMgYnVpbHQgd2l0aG91dCBOVU1BIHN1cHBvcnQuXG4tXHQgKiBpZiB0aGUgc3lzY2FsbCBmYWlscyB3aXRoIEVQRVJNLCB0aGVuIHRoZSBwcm9jZXNzL3VzZXIgbGFja3MgdGhlXG4tXHQgKiBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzIChDQVBfU1lTX05JQ0UpLlxuLVx0ICovXG4tXHRyZXR1cm4gIWdldF9tZW1wb2xpY3koTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCkgfHxcbi1cdFx0KGVycm5vICE9IEVOT1NZUyBcdTAwMjZcdTAwMjYgZXJybm8gIT0gRVBFUk0pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSh2b2lkKVxuLXtcbi1cdHJldHVybiBpc19udW1hX2F2YWlsYWJsZSgpIFx1MDAyNlx1MDAyNiBnZXRfbWF4X251bWFfbm9kZSgpIFx1MDAzZT0gMTtcbitcdHJldHVybiBub2RlbWFzaztcbiB9XG4gXG4gI2VuZGlmIC8qIFNFTEZURVNUX0tWTV9OVU1BSUZfSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuaW5kZXggMzljZTlhOTM2OWY1Yi4uNjZkY2YzNjM5OGFhYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG5AQCAtMjUxLDggKzI1MSw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0XHQgICB1NjQgKnBpcGlzX3JjdmQpXG4ge1xuIFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW3NpemVvZihub2RlbWFzaykgKiA4XTtcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2s7XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKV07XG4gXHRpbnQgbm9kZXMgPSAwO1xuIFx0dGltZV90IHN0YXJ0X3RpbWUsIGxhc3RfdXBkYXRlLCBub3c7XG4gXHR0aW1lX3QgaW50ZXJ2YWxfc2VjcyA9IDE7XG5AQCAtMjY2LDE5ICsyNjYsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJDYWxsaW5nIG1pZ3JhdGVfcGFnZXMgZXZlcnkgJWQgbWljcm9zZWNvbmRzXFxuXCIsXG4gXHRcdGRlbGF5X3VzZWNzKTtcbiBcbi1cdC8qIEdldCBzZXQgb2YgZmlyc3QgNjQgbnVtYSBub2RlcyBhdmFpbGFibGUgKi9cbi1cdGt2bV9nZXRfbWVtcG9saWN5KE5VTEwsIFx1MDAyNm5vZGVtYXNrLCBzaXplb2Yobm9kZW1hc2spICogOCxcbi1cdFx0XHQgIDAsIE1QT0xfRl9NRU1TX0FMTE9XRUQpO1xuK1x0bm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbiBcbiBcdGZwcmludGYoc3RkZXJyLCBcIk51bWEgbm9kZXMgZm91bmQgYW1vbmdzdCBmaXJzdCAlbHUgcG9zc2libGUgbm9kZXMgXCJcbiBcdFx0XCIoZWFjaCAxLWJpdCBpbmRpY2F0ZXMgbm9kZSBpcyBwcmVzZW50KTogJSNseFxcblwiLFxuLVx0XHRzaXplb2Yobm9kZW1hc2spICogOCwgbm9kZW1hc2spO1xuK1x0XHRCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgbm9kZW1hc2spO1xuIFxuIFx0LyogSW5pdCBhcnJheSBvZiBtYXNrcyBjb250YWluaW5nIGEgc2luZ2xlLWJpdCBpbiBlYWNoLCBvbmUgZm9yIGVhY2hcbiBcdCAqIGF2YWlsYWJsZSBub2RlLiBtaWdyYXRlX3BhZ2VzIGNhbGxlZCBiZWxvdyByZXF1aXJlcyBzcGVjaWZ5aW5nIG5vZGVzXG4gXHQgKiBhcyBiaXQgbWFza3MuXG4gXHQgKi9cbi1cdGZvciAoaSA9IDAsIGJpdCA9IDE7IGkgXHUwMDNjIHNpemVvZihub2RlbWFzaykgKiA4OyBpKyssIGJpdCBcdTAwM2NcdTAwM2M9IDEpIHtcbitcdGZvciAoaSA9IDAsIGJpdCA9IDE7IGkgXHUwMDNjIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spOyBpKyssIGJpdCBcdTAwM2NcdTAwM2M9IDEpIHtcbiBcdFx0aWYgKG5vZGVtYXNrIFx1MDAyNiBiaXQpIHtcbiBcdFx0XHRub2RlbWFza3Nbbm9kZXNdID0gbm9kZW1hc2sgXHUwMDI2IGJpdDtcbiBcdFx0XHRub2RlcysrO1xuQEAgLTMxMCw3ICszMDgsNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcbiBcdFx0ICogS1ZNX0NSRUFURV9WQ1BVIGlvY3RsLiBJZiB0aGF0IGFzc3VtcHRpb24gZXZlciBjaGFuZ2VzIHRoaXNcbiBcdFx0ICogdGVzdCBtYXkgYnJlYWsgb3IgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlIHNpZ25hbC5cbiBcdFx0ICovXG4tXHRcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgc2l6ZW9mKG5vZGVtYXNrc1tmcm9tXSksXG4rXHRcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgQklUU19QRVJfVFlQRShub2RlbWFza3NbZnJvbV0pICsgMSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZub2RlbWFza3NbZnJvbV0sXG4gXHRcdFx0XHRcdFx0XHUwMDI2bm9kZW1hc2tzW3RvXSk7XG4gXHRcdGlmIChwYWdlc19ub3RfbW92ZWQgXHUwMDNjIDApXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGYwZTVkYTQ5MDg2NjAuLmY4NDgxMjBhZjg0YmUgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtNzIxLDYgKzcyMSw4IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIHN0cnVjdCBnbWVtX2ZpbGUgKmYpXG4gXG4gdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiB7XG4rXHRzdHJ1Y3QgZmlsZSAqZ21lbV9maWxlO1xuK1xuIFx0LypcbiBcdCAqIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHVuZGVybHlpbmcgZmlsZSB3YXMgX2FscmVhZHlfIGNsb3NlZCwgYXNcbiBcdCAqIGt2bV9nbWVtX3JlbGVhc2UoKSBpbnZhbGlkYXRlcyBhbmQgbnVsbGlmaWVzIGFsbCBiaW5kaW5ncy5cbkBAIC03MzMsMjEgKzczNSwyNCBAQCB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuIFx0LypcbiBcdCAqIEhvd2V2ZXIsIGlmIHRoZSBmaWxlIGlzIF9iZWluZ18gY2xvc2VkLCB0aGVuIHRoZSBiaW5kaW5ncyBuZWVkIHRvIGJlXG4gXHQgKiByZW1vdmVkIGFzIGt2bV9nbWVtX3JlbGVhc2UoKSBtaWdodCBub3QgcnVuIHVudGlsIGFmdGVyIHRoZSBtZW1zbG90XG4tXHQgKiBpcyBmcmVlZC4gIE5vdGUsIG1vZGlmeWluZyB0aGUgYmluZGluZ3MgaXMgc2FmZSBldmVuIHRob3VnaCB0aGUgZmlsZVxuLVx0ICogaXMgZHlpbmcgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LVx1MDAzZWdtZW0uZmlsZSB1bmRlclxuK1x0ICogaXMgZnJlZWQuICBOb3RlLCBkZXJlZmVyZW5jaW5nIHRoZSBkeWluZyBmaWxlIGlzIHNhZmUgYXNcbitcdCAqIGt2bV9nbWVtX3JlbGVhc2UoKSBudWxsaWZpZXMgc2xvdC1cdTAwM2VnbWVtLmZpbGUgdW5kZXJcbiBcdCAqIHNsb3RzX2xvY2ssIGFuZCBvbmx5IHB1dHMgaXRzIHJlZmVyZW5jZSB0byBLVk0gYWZ0ZXIgZGVzdHJveWluZyBhbGxcbiBcdCAqIGJpbmRpbmdzLiAgSS5lLiByZWFjaGluZyB0aGlzIHBvaW50IG1lYW5zIGt2bV9nbWVtX3JlbGVhc2UoKSBoYXNuJ3RcbiBcdCAqIHlldCBkZXN0cm95ZWQgdGhlIGJpbmRpbmdzIG9yIGZyZWVkIHRoZSBnbWVtX2ZpbGUsIGFuZCBjYW4ndCBkbyBzb1xuIFx0ICogdW50aWwgdGhlIGNhbGxlciBkcm9wcyBzbG90c19sb2NrLlxuIFx0ICovXG4tXHRpZiAoIWZpbGUpIHtcbi1cdFx0X19rdm1fZ21lbV91bmJpbmQoc2xvdCwgc2xvdC1cdTAwM2VnbWVtLmZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuK1x0Z21lbV9maWxlID0gZmlsZSA/OiBzbG90LVx1MDAzZWdtZW0uZmlsZTtcbiBcbi1cdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbi1cdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKTtcbi1cdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuK1x0LypcbitcdCAqIFRha2UgdGhlIGludmFsaWRhdGUgbG9jayBldmVuIGZvciBhIGR5aW5nIGZpbGUuICBPdGhlcndpc2UsXG4rXHQgKiBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KCkgY2FuIGZpbmQgdGhlIGJpbmRpbmcgYW5kIGluY3JlbWVudFxuK1x0ICogbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3Mgd2hpbGUga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoKSBtaXNzZXNcbitcdCAqIHRoZSByZW1vdmVkIGJpbmRpbmcgYW5kIHNraXBzIGRlY3JlbWVudC5cbitcdCAqL1xuK1x0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZ21lbV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4rXHRfX2t2bV9nbWVtX3VuYmluZChzbG90LCBnbWVtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKTtcbitcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZ21lbV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gfVxuIFxuIC8qIFJldHVybnMgYSBsb2NrZWQgZm9saW8gb24gc3VjY2Vzcy4gICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo1MTo1OC44MTM2MzU0ODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMTQxNzM3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IEZpbGUgVW5iaW5kaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYSBmZXcgZmlsZXMuIFRoZSBjaGFuZ2VzIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5IGFyZSBqdXN0IHRlc3QgdXBkYXRlcywgc28gdGhleSdyZSBub3QgdGhlIGNvcmUgb2Ygd2hhdCdzIGludGVyZXN0aW5nIGhlcmUuIFRoZSByZWFsIG1lYXQgaXMgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBrdm1fZ21lbV91bmJpbmRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGVyZSdzIGEgc3BlY2lmaWMgc2NlbmFyaW8gYmVpbmcgYWRkcmVzc2VkLCB3aGVyZSB0aGUgdW5kZXJseWluZyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGd1ZXN0IG1lbW9yeSBzbG90IG1pZ2h0IGJlIGluIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIGZvciBgZmlsZWAgYmVpbmcgTlVMTC4gSWYgaXQgd2FzLCBtZWFuaW5nIHRoZSBmaWxlIHdhcyBjbG9zaW5nLCBpdCB3b3VsZCBkZXJlZmVyZW5jZSBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgIGltbWVkaWF0ZWx5IGFuZCBjYWxsIGBfX2t2bV9nbWVtX3VuYmluZGAuIEhvd2V2ZXIsIGl0IHNraXBwZWQgdGhlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AuXG5cblRoZSBmaXggaW50cm9kdWNlcyBhIGxvY2FsIGBnbWVtX2ZpbGVgIHZhcmlhYmxlIGFuZCB1c2VzIGVpdGhlciB0aGUgcG90ZW50aWFsbHktTlVMTCBgZmlsZWAgZnJvbSB0aGUgY2hlY2sgb3IgYHNsb3QtXHUwMDNlZ21lbS5maWxlYCBpbiBjYXNlIGBmaWxlYCBpcyBOVUxMLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIHBhdGNoIG5vdyAqYWx3YXlzKiBhY3F1aXJlcyB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBiZWZvcmUgY2FsbGluZyBgX19rdm1fZ21lbV91bmJpbmRgLCBldmVuIGlmIHRoZSBmaWxlIGlzIGJlaW5nIGNsb3NlZC5cblxuVGhpcyBpcyBhbGwgYWJvdXQgcHJldmVudGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgbG9jayBpcyBuZWVkZWQgYmVjYXVzZSBga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpYCBtaWdodCBiZSBjb25jdXJyZW50bHkgaW5jcmVtZW50aW5nIGBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzc2AsIHdoaWxlIHdlJ3JlIHRyeWluZyB0byByZW1vdmUgdGhlIGJpbmRpbmcuIFdpdGhvdXQgdGhlIGxvY2ssIGBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZCgpYCBjb3VsZCBtaXNzIHRoZSByZW1vdmVkIGJpbmRpbmcgYW5kIGZhaWwgdG8gZGVjcmVtZW50IHRoZSBjb3VudGVyLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgb3IsIHdvcnNlLCBpbmNvcnJlY3QgbWVtb3J5IGFjY2Vzcy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgY29uY3VycmVuY3kgaXNzdWUsIGEgbG9ja2luZyBwcm9ibGVtLCBub3QgYSBtZW1vcnkgc2FmZXR5IG9uZS4gSSBjYW4gY29uZmlybSB0aGlzIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBLQVNBTi9MT0NLREVQL2V0Yy4gbWlnaHQgYmUgdXNlZnVsIGZvciBjYXRjaGluZyBzaW1pbGFyIGlzc3Vlcywgb3IgaXQgY291bGQgYmUgYSBzaW1wbGUgbG9naWNhbCBidWcuIFNvLCBjb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgdGhpcyBkb2Vzbid0IHdhcnJhbnQgTmVlZHNLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE4MiwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo1MjoxMC44Mjc4MTM5NzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBndWVzdF9tZW1mZCBzZWxmdGVzdHMgYW5kIGZpeGVzIGEgbG9ja2luZy9jb25jdXJyZW5jeSBidWcgaW4gYGt2bV9nbWVtX3VuYmluZGAgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGUgYnVnIGZpeCBlbnN1cmVzIHRoYXQgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBpcyB0YWtlbiBldmVuIHdoZW4gdGhlIGZpbGUgaXMgZHlpbmcsIHByZXZlbnRpbmcgYSBtaXNtYXRjaCBpbiBgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3NgIGluY3JlbWVudHMvZGVjcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljL2NvbmN1cnJlbmN5IGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUsIGFuZCBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3RpbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gZ3Vlc3RfbWVtZmQgc2VsZnRlc3RzIGFuZCBmaXhlcyBhIGxvY2tpbmcvY29uY3VycmVuY3kgYnVnIGluIGBrdm1fZ21lbV91bmJpbmRgIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gVGhlIGJ1ZyBmaXggZW5zdXJlcyB0aGF0IGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgaXMgdGFrZW4gZXZlbiB3aGVuIHRoZSBmaWxlIGlzIGR5aW5nLCBwcmV2ZW50aW5nIGEgbWlzbWF0Y2ggaW4gYG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzYCBpbmNyZW1lbnRzL2RlY3JlbWVudHMuIFRoaXMgaXMgYSBsb2dpYy9jb25jdXJyZW5jeSBpc3N1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2vfhp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 13:41:37 +0000 UTC FinishedAt: 2026-08-23 13:52:12 +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": "2709dd5ae32f0828f386327c76bba9f39f63a1c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "2709dd5ae32f0828f386327c76bba9f39f63a1c6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "cedd7a10-a87c-48d2-a686-33b8281a3d29" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_unbind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBndWVzdF9tZW1mZCBzZWxmdGVzdHMgYW5kIGZpeGVzIGEgbG9ja2luZy9jb25jdXJyZW5jeSBidWcgaW4gYGt2bV9nbWVtX3VuYmluZGAgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGUgYnVnIGZpeCBlbnN1cmVzIHRoYXQgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBpcyB0YWtlbiBldmVuIHdoZW4gdGhlIGZpbGUgaXMgZHlpbmcsIHByZXZlbnRpbmcgYSBtaXNtYXRjaCBpbiBgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3NgIGluY3JlbWVudHMvZGVjcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljL2NvbmN1cnJlbmN5IGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUsIGFuZCBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX2dtZW1fdW5iaW5kYCB3aGVuIGEgZ3Vlc3RfbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQgYnkgZW5zdXJpbmcgdGhlIGludmFsaWRhdGUgbG9jayBpcyB0YWtlbiBldmVuIGZvciBkeWluZyBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTMyY2NlZjkxMDQ5ZTZkZjcyMmFjMGMzYTkyMjhhYWEzZGUxNTA5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDEzOjQzOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG5pbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuQEAgLTc2LDMzICYjNDM7NzYsNTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tbWFwX3N1cHBvcnRlZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLlxuJiM0MzsgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuaWQ7XG4mIzQzO1x0aW50IG5yX2ZvdW5kID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChuaWQsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSkge1xuJiM0MztcdFx0bmlkc1tucl9mb3VuZCYjNDM7JiM0MztdID0gbmlkO1xuJiM0MztcdFx0aWYgKG5yX2ZvdW5kID09IG5yX25pZHMpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiB7XG4tXHRjb25zdCB1bnNpZ25lZCBsb25nIG5vZGVtYXNrXzAgPSAxOyAvKiBuaWQ6IDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzayk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBub2RlbWFzaywgYmluZF9ub2RlbWFzaztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSAmIzQzOyAxO1xuIFx0aW50IHBvbGljeTtcbiBcdGNoYXIgKm1lbTtcbiYjNDM7XHRpbnQgbmlkO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKVxuJiM0MztcdGlmICghZ2V0X251bWFfbm9kZV9pZHMoXHUwMDI2bmlkLCAxKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGJpbmRfbm9kZW1hc2sgPSAxVUwgXHUwMDNjXHUwMDNjIG5pZDtcbiBcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcbiBcbiBcdC8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqL1xuLVx0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0a3ZtX2dldF9tZW1wb2xpY3koXHUwMDI2cG9saWN5LCBcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7XG4tXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBub2RlbWFza18wLFxuJiM0MztcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssXG4gXHRcdCAgICBcJiMzNDtXYW50ZWQgTVBPTF9JTlRFUkxFQVZFICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XCYjMzQ7LFxuLVx0XHQgICAgTVBPTF9JTlRFUkxFQVZFLCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcbiYjNDM7XHRcdCAgICBNUE9MX0lOVEVSTEVBVkUsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCBiYXNpYyBNUE9MX0JJTkQgcG9saWN5ICovXG4tXHRrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7XG4mIzQzO1x0a3ZtX21iaW5kKG1lbSAmIzQzOyBwYWdlX3NpemUgKiAyLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0a3ZtX2dldF9tZW1wb2xpY3koXHUwMDI2cG9saWN5LCBcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfRl9BRERSKTtcbi1cdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXG4mIzQzO1x0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcbiBcdFx0ICAgIFwmIzM0O1dhbnRlZCBNUE9MX0JJTkQgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcJiMzNDssXG4tXHRcdCAgICBNUE9MX0JJTkQsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spO1xuJiM0MztcdFx0ICAgIE1QT0xfQklORCwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IE1QT0xfREVGQVVMVCBwb2xpY3kgKi9cbiBcdGt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7XG5AQCAtMTEyLDcgJiM0MzsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXHRcdCAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovXG4tXHRyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCBcdTAwMjZiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTtcbiBcdFRFU1RfQVNTRVJUKHJldCA9PSAtMSBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxuIFx0XHQgICAgXCYjMzQ7bWJpbmQgd2l0aCBpbnZhbGlkIHBvbGljeSBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFwmIzM0Oyk7XG4gXG5AQCAtMTIxLDE3ICYjNDM7MTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcbiBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZTBfbWFzayA9IDE7ICAvKiBOb2RlIDAgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbm9kZTFfbWFzayA9IDI7ICAvKiBOb2RlIDEgKi9cbi1cdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBiaW5kX25vZGVtYXNrc1syXTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKGJpbmRfbm9kZW1hc2tzWzBdKSAmIzQzOyAxO1xuIFx0dm9pZCAqcGFnZXNbNF07XG4mIzQzO1x0aW50IG5pZHNbMl07XG4gXHRpbnQgc3RhdHVzWzRdO1xuIFx0Y2hhciAqbWVtO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcbiYjNDM7XHRpZiAoIWdldF9udW1hX25vZGVfaWRzKG5pZHMsIEFSUkFZX1NJWkUobmlkcykpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0YmluZF9ub2RlbWFza3NbMF0gPSAxVUwgXHUwMDNjXHUwMDNjIG5pZHNbMF07XG4mIzQzO1x0YmluZF9ub2RlbWFza3NbMV0gPSAxVUwgXHUwMDNjXHUwMDNjIG5pZHNbMV07XG4gXHRtZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA0OyBpJiM0MzsmIzQzOylcbkBAIC0xMzksMzQgJiM0MzsxNjEsNDIgQEAgc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcbiBcdC8qIFNldCBOVU1BIHBvbGljeSBhZnRlciBhbGxvY2F0aW9uICovXG4gXHRtZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4mIzQzO1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuIFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCBwYWdlX3NpemUpO1xuIFxuIFx0LyogU2V0IE5VTUEgcG9saWN5IGJlZm9yZSBhbGxvY2F0aW9uICovXG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTFfbWFzaywgbWF4bm9kZSwgMCk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4mIzQzO1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuIFx0bWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7XG4gXG4gXHQvKiBWYWxpZGF0ZSBpZiBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHNwZWNpZmllZCBOVU1BIG5vZGVzICovXG4gXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAxLCBcJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgc3RhdHVzWzBdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCBcJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgc3RhdHVzWzFdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSAwLCBcJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgc3RhdHVzWzJdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAwLCBcJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgc3RhdHVzWzNdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1sxXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMV0sIHN0YXR1c1swXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IG5pZHNbMV0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMV0pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzBdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzJdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1swXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMF0sIHN0YXR1c1szXSk7XG4gXG4gXHQvKiBQdW5jaCBob2xlIGZvciBhbGwgcGFnZXMgKi9cbiBcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgdG90YWxfc2l6ZSk7XG4gXG4gXHQvKiBDaGFuZ2UgTlVNQSBwb2xpY3kgbm9kZXMgYW5kIHJlYWxsb2NhdGUgKi9cbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbi1cdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMV9tYXNrLCBtYXhub2RlLCAwKTtcbiYjNDM7XHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuJiM0MztcdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XG4gXHRtZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTtcbiBcbiBcdGt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDAsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMF0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDAsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbMl0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDEsIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBzdGF0dXNbM10pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzBdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzBdKTtcbiYjNDM7XHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSxcbiYjNDM7XHRcdCAgICBcJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcJiMzNDssIG5pZHNbMF0sIHN0YXR1c1sxXSk7XG4mIzQzO1x0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMV0sXG4mIzQzO1x0XHQgICAgXCYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMl0pO1xuJiM0MztcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzFdLFxuJiM0MztcdFx0ICAgIFwmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwmIzM0Oywgbmlkc1sxXSwgc3RhdHVzWzNdKTtcbiBcbiBcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuaW5kZXggMjk1NzJhNmQ3ODljZC4uNGJiYmYzMTRlOWQ3NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuQEAgLTQsOCAmIzQzOzQsNiBAQFxuICNpZm5kZWYgU0VMRlRFU1RfS1ZNX05VTUFJRl9IXG4gI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcbiBcbi0jaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7a3ZtX3N5c2NhbGxzLmhcJiMzNDtcbkBAIC0zMCw1NCAmIzQzOzI4LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXG4gXHRcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXG4gXHRcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tYXhfbnVtYV9ub2RlKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnVtYV9tZW1fbm9kZXModm9pZClcbiB7XG4tXHRzdHJ1Y3QgZGlyZW50ICpkZTtcbi1cdGludCBtYXhfbm9kZSA9IDA7XG4tXHRESVIgKmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4gXG4tXHQvKlxuLVx0ICogQXNzdW1lIHRoZXJlJiMzOTtzIGEgc2luZ2xlIG5vZGUgaWYgdGhlIGtlcm5lbCBkb2VzbiYjMzk7dCBzdXBwb3J0IE5VTUEsXG4tXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXG4tXHQgKi9cbi1cdGQgPSBvcGVuZGlyKFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZVwmIzM0Oyk7XG4tXHRpZiAoIWQpXG4mIzQzO1x0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuJiM0MztcdGlmIChnZXRfbWVtcG9saWN5KE5VTEwsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgTlVMTCxcbiYjNDM7XHRcdFx0ICBNUE9MX0ZfTUVNU19BTExPV0VEKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkge1xuLVx0XHRpbnQgbm9kZV9pZDtcbi1cdFx0Y2hhciAqZW5kcHRyO1xuLVxuLVx0XHRpZiAoc3RybmNtcChkZS1cdTAwM2VkX25hbWUsIFwmIzM0O25vZGVcJiMzNDssIDQpICE9IDApXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdG5vZGVfaWQgPSBzdHJ0b2woZGUtXHUwMDNlZF9uYW1lICYjNDM7IDQsIFx1MDAyNmVuZHB0ciwgMTApO1xuLVx0XHRpZiAoKmVuZHB0ciAhPSAmIzM5O1xcMCYjMzk7KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAobm9kZV9pZCBcdTAwM2UgbWF4X25vZGUpXG4tXHRcdFx0bWF4X25vZGUgPSBub2RlX2lkO1xuLVx0fVxuLVx0Y2xvc2VkaXIoZCk7XG4tXG4tXHRyZXR1cm4gbWF4X25vZGU7XG4tfVxuLVxuLXN0YXRpYyBib29sIGlzX251bWFfYXZhaWxhYmxlKHZvaWQpXG4te1xuLVx0Lypcbi1cdCAqIFByb2JlIGZvciBOVU1BIGJ5IGRvaW5nIGEgZHVtbXkgZ2V0X21lbXBvbGljeSgpLiAgSWYgdGhlIHN5c2NhbGxcbi1cdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0LlxuLVx0ICogaWYgdGhlIHN5c2NhbGwgZmFpbHMgd2l0aCBFUEVSTSwgdGhlbiB0aGUgcHJvY2Vzcy91c2VyIGxhY2tzIHRoZVxuLVx0ICogbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyAoQ0FQX1NZU19OSUNFKS5cbi1cdCAqL1xuLVx0cmV0dXJuICFnZXRfbWVtcG9saWN5KE5VTEwsIE5VTEwsIDAsIE5VTEwsIDApIHx8XG4tXHRcdChlcnJubyAhPSBFTk9TWVMgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVQRVJNKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSBib29sIGlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0odm9pZClcbi17XG4tXHRyZXR1cm4gaXNfbnVtYV9hdmFpbGFibGUoKSBcdTAwMjZcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcdTAwM2U9IDE7XG4mIzQzO1x0cmV0dXJuIG5vZGVtYXNrO1xuIH1cbiBcbiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX05VTUFJRl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG5pbmRleCAzOWNlOWE5MzY5ZjViLi42NmRjZjM2Mzk4YWFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbkBAIC0yNTEsOCAmIzQzOzI1MSw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0XHQgICB1NjQgKnBpcGlzX3JjdmQpXG4ge1xuIFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW3NpemVvZihub2RlbWFzaykgKiA4XTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcbiBcdGludCBub2RlcyA9IDA7XG4gXHR0aW1lX3Qgc3RhcnRfdGltZSwgbGFzdF91cGRhdGUsIG5vdztcbiBcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcbkBAIC0yNjYsMTkgJiM0MzsyNjYsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Q2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcblwmIzM0OyxcbiBcdFx0ZGVsYXlfdXNlY3MpO1xuIFxuLVx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuLVx0a3ZtX2dldF9tZW1wb2xpY3koTlVMTCwgXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxuLVx0XHRcdCAgMCwgTVBPTF9GX01FTVNfQUxMT1dFRCk7XG4mIzQzO1x0bm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbiBcbiBcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFwmIzM0O1xuIFx0XHRcJiMzNDsoZWFjaCAxLWJpdCBpbmRpY2F0ZXMgbm9kZSBpcyBwcmVzZW50KTogJSNseFxcblwmIzM0Oyxcbi1cdFx0c2l6ZW9mKG5vZGVtYXNrKSAqIDgsIG5vZGVtYXNrKTtcbiYjNDM7XHRcdEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBub2RlbWFzayk7XG4gXG4gXHQvKiBJbml0IGFycmF5IG9mIG1hc2tzIGNvbnRhaW5pbmcgYSBzaW5nbGUtYml0IGluIGVhY2gsIG9uZSBmb3IgZWFjaFxuIFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcbiBcdCAqIGFzIGJpdCBtYXNrcy5cbiBcdCAqL1xuLVx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2Mgc2l6ZW9mKG5vZGVtYXNrKSAqIDg7IGkmIzQzOyYjNDM7LCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4mIzQzO1x0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkmIzQzOyYjNDM7LCBiaXQgXHUwMDNjXHUwMDNjPSAxKSB7XG4gXHRcdGlmIChub2RlbWFzayBcdTAwMjYgYml0KSB7XG4gXHRcdFx0bm9kZW1hc2tzW25vZGVzXSA9IG5vZGVtYXNrIFx1MDAyNiBiaXQ7XG4gXHRcdFx0bm9kZXMmIzQzOyYjNDM7O1xuQEAgLTMxMCw3ICYjNDM7MzA4LDcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAqIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gSWYgdGhhdCBhc3N1bXB0aW9uIGV2ZXIgY2hhbmdlcyB0aGlzXG4gXHRcdCAqIHRlc3QgbWF5IGJyZWFrIG9yIGdpdmUgYSBmYWxzZSBwb3NpdGl2ZSBzaWduYWwuXG4gXHRcdCAqL1xuLVx0XHRwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIHNpemVvZihub2RlbWFza3NbZnJvbV0pLFxuJiM0MztcdFx0cGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrc1tmcm9tXSkgJiM0MzsgMSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZub2RlbWFza3NbZnJvbV0sXG4gXHRcdFx0XHRcdFx0XHUwMDI2bm9kZW1hc2tzW3RvXSk7XG4gXHRcdGlmIChwYWdlc19ub3RfbW92ZWQgXHUwMDNjIDApXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGYwZTVkYTQ5MDg2NjAuLmY4NDgxMjBhZjg0YmUgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtNzIxLDYgJiM0Mzs3MjEsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKVxuIFxuIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4ge1xuJiM0MztcdHN0cnVjdCBmaWxlICpnbWVtX2ZpbGU7XG4mIzQzO1xuIFx0LypcbiBcdCAqIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHVuZGVybHlpbmcgZmlsZSB3YXMgX2FscmVhZHlfIGNsb3NlZCwgYXNcbiBcdCAqIGt2bV9nbWVtX3JlbGVhc2UoKSBpbnZhbGlkYXRlcyBhbmQgbnVsbGlmaWVzIGFsbCBiaW5kaW5ncy5cbkBAIC03MzMsMjEgJiM0Mzs3MzUsMjQgQEAgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiBcdC8qXG4gXHQgKiBIb3dldmVyLCBpZiB0aGUgZmlsZSBpcyBfYmVpbmdfIGNsb3NlZCwgdGhlbiB0aGUgYmluZGluZ3MgbmVlZCB0byBiZVxuIFx0ICogcmVtb3ZlZCBhcyBrdm1fZ21lbV9yZWxlYXNlKCkgbWlnaHQgbm90IHJ1biB1bnRpbCBhZnRlciB0aGUgbWVtc2xvdFxuLVx0ICogaXMgZnJlZWQuICBOb3RlLCBtb2RpZnlpbmcgdGhlIGJpbmRpbmdzIGlzIHNhZmUgZXZlbiB0aG91Z2ggdGhlIGZpbGVcbi1cdCAqIGlzIGR5aW5nIGFzIGt2bV9nbWVtX3JlbGVhc2UoKSBudWxsaWZpZXMgc2xvdC1cdTAwM2VnbWVtLmZpbGUgdW5kZXJcbiYjNDM7XHQgKiBpcyBmcmVlZC4gIE5vdGUsIGRlcmVmZXJlbmNpbmcgdGhlIGR5aW5nIGZpbGUgaXMgc2FmZSBhc1xuJiM0MztcdCAqIGt2bV9nbWVtX3JlbGVhc2UoKSBudWxsaWZpZXMgc2xvdC1cdTAwM2VnbWVtLmZpbGUgdW5kZXJcbiBcdCAqIHNsb3RzX2xvY2ssIGFuZCBvbmx5IHB1dHMgaXRzIHJlZmVyZW5jZSB0byBLVk0gYWZ0ZXIgZGVzdHJveWluZyBhbGxcbiBcdCAqIGJpbmRpbmdzLiAgSS5lLiByZWFjaGluZyB0aGlzIHBvaW50IG1lYW5zIGt2bV9nbWVtX3JlbGVhc2UoKSBoYXNuJiMzOTt0XG4gXHQgKiB5ZXQgZGVzdHJveWVkIHRoZSBiaW5kaW5ncyBvciBmcmVlZCB0aGUgZ21lbV9maWxlLCBhbmQgY2FuJiMzOTt0IGRvIHNvXG4gXHQgKiB1bnRpbCB0aGUgY2FsbGVyIGRyb3BzIHNsb3RzX2xvY2suXG4gXHQgKi9cbi1cdGlmICghZmlsZSkge1xuLVx0XHRfX2t2bV9nbWVtX3VuYmluZChzbG90LCBzbG90LVx1MDAzZWdtZW0uZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4mIzQzO1x0Z21lbV9maWxlID0gZmlsZSA/OiBzbG90LVx1MDAzZWdtZW0uZmlsZTtcbiBcbi1cdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbi1cdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKTtcbi1cdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFrZSB0aGUgaW52YWxpZGF0ZSBsb2NrIGV2ZW4gZm9yIGEgZHlpbmcgZmlsZS4gIE90aGVyd2lzZSxcbiYjNDM7XHQgKiBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KCkgY2FuIGZpbmQgdGhlIGJpbmRpbmcgYW5kIGluY3JlbWVudFxuJiM0MztcdCAqIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzIHdoaWxlIGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKCkgbWlzc2VzXG4mIzQzO1x0ICogdGhlIHJlbW92ZWQgYmluZGluZyBhbmQgc2tpcHMgZGVjcmVtZW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGdtZW1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuJiM0MztcdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuJiM0MztcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZ21lbV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gfVxuIFxuIC8qIFJldHVybnMgYSBsb2NrZWQgZm9saW8gb24gc3VjY2Vzcy4gICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX3VuYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBrdm1fZ21lbV91bmJpbmRgIHdoZW4gYSBndWVzdF9tZW1mZCBmaWxlIGlzIGJlaW5nIGNsb3NlZCBieSBlbnN1cmluZyB0aGUgaW52YWxpZGF0ZSBsb2NrIGlzIHRha2VuIGV2ZW4gZm9yIGR5aW5nIGZpbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBLVk0gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMzJjY2VmOTEwNDllNmRmNzIyYWMwYzNhOTIyOGFhYTNkZTE1MDlhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMTM6NDM6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYwppbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMKQEAgLTc2LDMzICYjNDM7NzYsNTMgQEAgc3RhdGljIHZvaWQgdGVzdF9tbWFwX3N1cHBvcnRlZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogCWt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLgomIzQzOyAqIFJldHVybiBmYWxzZSBpZiB0aGUgbWFzayBjb250YWlucyBmZXdlciB0aGFuIEBucl9uaWRzIG5vZGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmlkOwomIzQzOwlpbnQgbnJfZm91bmQgPSAwOwomIzQzOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KG5pZCwgJmFtcDtub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzaykpIHsKJiM0MzsJCW5pZHNbbnJfZm91bmQmIzQzOyYjNDM7XSA9IG5pZDsKJiM0MzsJCWlmIChucl9mb3VuZCA9PSBucl9uaWRzKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiB7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovCi0JdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzayk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2ssIGJpbmRfbm9kZW1hc2s7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spICYjNDM7IDE7CiAJaW50IHBvbGljeTsKIAljaGFyICptZW07CiYjNDM7CWludCBuaWQ7CiAJaW50IHJldDsKIAotCWlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKQomIzQzOwlpZiAoIWdldF9udW1hX25vZGVfaWRzKCZhbXA7bmlkLCAxKSkKIAkJcmV0dXJuOwogCiYjNDM7CWJpbmRfbm9kZW1hc2sgPSAxVUwgJmx0OyZsdDsgbmlkOwogCW1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTsKIAogCS8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqLwotCWt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgJmFtcDtub2RlbWFza18wLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCAmYW1wO2JpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApOwogCWt2bV9nZXRfbWVtcG9saWN5KCZhbXA7cG9saWN5LCAmYW1wO25vZGVtYXNrLCBtYXhub2RlLCBtZW0sIE1QT0xfRl9BRERSKTsKLQlURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFICZhbXA7JmFtcDsgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCwKJiM0MzsJVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSAmYW1wOyZhbXA7IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssCiAJCSAgICAmIzM0O1dhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHgmIzM0OywKLQkJICAgIE1QT0xfSU5URVJMRUFWRSwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7CiYjNDM7CQkgICAgTVBPTF9JTlRFUkxFQVZFLCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTsKIAogCS8qIFRlc3QgYmFzaWMgTVBPTF9CSU5EIHBvbGljeSAqLwotCWt2bV9tYmluZChtZW0gJiM0MzsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGVtYXNrXzAsIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTsKIAlrdm1fZ2V0X21lbXBvbGljeSgmYW1wO3BvbGljeSwgJmFtcDtub2RlbWFzaywgbWF4bm9kZSwgbWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfRl9BRERSKTsKLQlURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EICZhbXA7JmFtcDsgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCwKJiM0MzsJVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCAmYW1wOyZhbXA7IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssCiAJCSAgICAmIzM0O1dhbnRlZCBNUE9MX0JJTkQgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHgmIzM0OywKLQkJICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7CiYjNDM7CQkgICAgTVBPTF9CSU5ELCBiaW5kX25vZGVtYXNrLCBwb2xpY3ksIG5vZGVtYXNrKTsKIAogCS8qIFRlc3QgTVBPTF9ERUZBVUxUIHBvbGljeSAqLwogCWt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7CkBAIC0xMTIsNyAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAkJICAgIE1QT0xfREVGQVVMVCwgcG9saWN5LCBub2RlbWFzayk7CiAKIAkvKiBUZXN0IHdpdGggaW52YWxpZCBwb2xpY3kgKi8KLQlyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCAmYW1wO25vZGVtYXNrXzAsIG1heG5vZGUsIDApOwomIzQzOwlyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCAmYW1wO2JpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApOwogCVRFU1RfQVNTRVJUKHJldCA9PSAtMSAmYW1wOyZhbXA7IGVycm5vID09IEVJTlZBTCwKIAkJICAgICYjMzQ7bWJpbmQgd2l0aCBpbnZhbGlkIHBvbGljeSBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTCYjMzQ7KTsKIApAQCAtMTIxLDE3ICYjNDM7MTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAogc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIHsKLQl1bnNpZ25lZCBsb25nIG5vZGUwX21hc2sgPSAxOyAgLyogTm9kZSAwICovCi0JdW5zaWduZWQgbG9uZyBub2RlMV9tYXNrID0gMjsgIC8qIE5vZGUgMSAqLwotCXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICYjNDM7IDE7CiAJdm9pZCAqcGFnZXNbNF07CiYjNDM7CWludCBuaWRzWzJdOwogCWludCBzdGF0dXNbNF07CiAJY2hhciAqbWVtOwogCWludCBpOwogCi0JaWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpCiYjNDM7CWlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpCiAJCXJldHVybjsKIAomIzQzOwliaW5kX25vZGVtYXNrc1swXSA9IDFVTCAmbHQ7Jmx0OyBuaWRzWzBdOwomIzQzOwliaW5kX25vZGVtYXNrc1sxXSA9IDFVTCAmbHQ7Jmx0OyBuaWRzWzFdOwogCW1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyA0OyBpJiM0MzsmIzQzOykKQEAgLTEzOSwzNCAmIzQzOzE2MSw0MiBAQCBzdGF0aWMgdm9pZCB0ZXN0X251bWFfYWxsb2NhdGlvbihpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogCiAJLyogU2V0IE5VTUEgcG9saWN5IGFmdGVyIGFsbG9jYXRpb24gKi8KIAltZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpOwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsICZhbXA7bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApOwogCWt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTsKIAogCS8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqLwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUxX21hc2ssIG1heG5vZGUsIDApOwotCWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTsKIAltZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTsKIAogCS8qIFZhbGlkYXRlIGlmIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gc3BlY2lmaWVkIE5VTUEgbm9kZXMgKi8KIAlrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMF0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1sxXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzJdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMCwgJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbM10pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMF0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMV0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMl0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbM10pOwogCiAJLyogUHVuY2ggaG9sZSBmb3IgYWxsIHBhZ2VzICovCiAJa3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTsKIAogCS8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqLwotCWt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwotCWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO25vZGUxX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTsKIAltZW1zZXQobWVtLCAweGFhLCB0b3RhbF9zaXplKTsKIAogCWt2bV9tb3ZlX3BhZ2VzKDAsIDQsIHBhZ2VzLCBOVUxMLCBzdGF0dXMsIDApOwotCVRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1swXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzFdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMl0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1szXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzBdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMF0sIHN0YXR1c1swXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzBdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMF0sIHN0YXR1c1sxXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzFdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMV0sIHN0YXR1c1syXSk7CiYjNDM7CVRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzFdLAomIzQzOwkJICAgICYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIG5pZHNbMV0sIHN0YXR1c1szXSk7CiAKIAlrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCmluZGV4IDI5NTcyYTZkNzg5Y2QuLjRiYmJmMzE0ZTlkNzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oCkBAIC00LDggJiM0Mzs0LDYgQEAKICNpZm5kZWYgU0VMRlRFU1RfS1ZNX05VTUFJRl9ICiAjZGVmaW5lIFNFTEZURVNUX0tWTV9OVU1BSUZfSAogCi0jaW5jbHVkZSAmbHQ7ZGlyZW50LmgmZ3Q7Ci0KICNpbmNsdWRlICZsdDtsaW51eC9tZW1wb2xpY3kuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtrdm1fc3lzY2FsbHMuaCYjMzQ7CkBAIC0zMCw1NCAmIzQzOzI4LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsCiAJCSAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsCiAJCSAgIHVuc2lnbmVkIGludCwgZmxhZ3MpOwogCi1zdGF0aWMgaW5saW5lIGludCBnZXRfbWF4X251bWFfbm9kZSh2b2lkKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnVtYV9tZW1fbm9kZXModm9pZCkKIHsKLQlzdHJ1Y3QgZGlyZW50ICpkZTsKLQlpbnQgbWF4X25vZGUgPSAwOwotCURJUiAqZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7CiAKLQkvKgotCSAqIEFzc3VtZSB0aGVyZSYjMzk7cyBhIHNpbmdsZSBub2RlIGlmIHRoZSBrZXJuZWwgZG9lc24mIzM5O3Qgc3VwcG9ydCBOVU1BLAotCSAqIG9yIGlmIG5vIG5vZGVzIGFyZSBmb3VuZC4KLQkgKi8KLQlkID0gb3BlbmRpcigmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZSYjMzQ7KTsKLQlpZiAoIWQpCiYjNDM7CS8qIEdldCBzZXQgb2YgZmlyc3QgNjQgbnVtYSBub2RlcyBhdmFpbGFibGUgKi8KJiM0MzsJaWYgKGdldF9tZW1wb2xpY3koTlVMTCwgJmFtcDtub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzayksIE5VTEwsCiYjNDM7CQkJICBNUE9MX0ZfTUVNU19BTExPV0VEKSkKIAkJcmV0dXJuIDA7CiAKLQl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgewotCQlpbnQgbm9kZV9pZDsKLQkJY2hhciAqZW5kcHRyOwotCi0JCWlmIChzdHJuY21wKGRlLSZndDtkX25hbWUsICYjMzQ7bm9kZSYjMzQ7LCA0KSAhPSAwKQotCQkJY29udGludWU7Ci0KLQkJbm9kZV9pZCA9IHN0cnRvbChkZS0mZ3Q7ZF9uYW1lICYjNDM7IDQsICZhbXA7ZW5kcHRyLCAxMCk7Ci0JCWlmICgqZW5kcHRyICE9ICYjMzk7XDAmIzM5OykKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChub2RlX2lkICZndDsgbWF4X25vZGUpCi0JCQltYXhfbm9kZSA9IG5vZGVfaWQ7Ci0JfQotCWNsb3NlZGlyKGQpOwotCi0JcmV0dXJuIG1heF9ub2RlOwotfQotCi1zdGF0aWMgYm9vbCBpc19udW1hX2F2YWlsYWJsZSh2b2lkKQotewotCS8qCi0JICogUHJvYmUgZm9yIE5VTUEgYnkgZG9pbmcgYSBkdW1teSBnZXRfbWVtcG9saWN5KCkuICBJZiB0aGUgc3lzY2FsbAotCSAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0LgotCSAqIGlmIHRoZSBzeXNjYWxsIGZhaWxzIHdpdGggRVBFUk0sIHRoZW4gdGhlIHByb2Nlc3MvdXNlciBsYWNrcyB0aGUKLQkgKiBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzIChDQVBfU1lTX05JQ0UpLgotCSAqLwotCXJldHVybiAhZ2V0X21lbXBvbGljeShOVUxMLCBOVUxMLCAwLCBOVUxMLCAwKSB8fAotCQkoZXJybm8gIT0gRU5PU1lTICZhbXA7JmFtcDsgZXJybm8gIT0gRVBFUk0pOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSh2b2lkKQotewotCXJldHVybiBpc19udW1hX2F2YWlsYWJsZSgpICZhbXA7JmFtcDsgZ2V0X21heF9udW1hX25vZGUoKSAmZ3Q7PSAxOwomIzQzOwlyZXR1cm4gbm9kZW1hc2s7CiB9CiAKICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fTlVNQUlGX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYwppbmRleCAzOWNlOWE5MzY5ZjViLi42NmRjZjM2Mzk4YWFhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jCkBAIC0yNTEsOCAmIzQzOzI1MSw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLAogCQkgICB1NjQgKnBpcGlzX3JjdmQpCiB7CiAJbG9uZyBwYWdlc19ub3RfbW92ZWQ7Ci0JdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBub2RlbWFza3Nbc2l6ZW9mKG5vZGVtYXNrKSAqIDhdOwomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrOwomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKV07CiAJaW50IG5vZGVzID0gMDsKIAl0aW1lX3Qgc3RhcnRfdGltZSwgbGFzdF91cGRhdGUsIG5vdzsKIAl0aW1lX3QgaW50ZXJ2YWxfc2VjcyA9IDE7CkBAIC0yNjYsMTkgJiM0MzsyNjYsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsCiAJZnByaW50ZihzdGRlcnIsICYjMzQ7Q2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xuJiMzNDssCiAJCWRlbGF5X3VzZWNzKTsKIAotCS8qIEdldCBzZXQgb2YgZmlyc3QgNjQgbnVtYSBub2RlcyBhdmFpbGFibGUgKi8KLQlrdm1fZ2V0X21lbXBvbGljeShOVUxMLCAmYW1wO25vZGVtYXNrLCBzaXplb2Yobm9kZW1hc2spICogOCwKLQkJCSAgMCwgTVBPTF9GX01FTVNfQUxMT1dFRCk7CiYjNDM7CW5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7CiAKIAlmcHJpbnRmKHN0ZGVyciwgJiMzNDtOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzICYjMzQ7CiAJCSYjMzQ7KGVhY2ggMS1iaXQgaW5kaWNhdGVzIG5vZGUgaXMgcHJlc2VudCk6ICUjbHhcbiYjMzQ7LAotCQlzaXplb2Yobm9kZW1hc2spICogOCwgbm9kZW1hc2spOwomIzQzOwkJQklUU19QRVJfVFlQRShub2RlbWFzayksIG5vZGVtYXNrKTsKIAogCS8qIEluaXQgYXJyYXkgb2YgbWFza3MgY29udGFpbmluZyBhIHNpbmdsZS1iaXQgaW4gZWFjaCwgb25lIGZvciBlYWNoCiAJICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXMKIAkgKiBhcyBiaXQgbWFza3MuCiAJICovCi0JZm9yIChpID0gMCwgYml0ID0gMTsgaSAmbHQ7IHNpemVvZihub2RlbWFzaykgKiA4OyBpJiM0MzsmIzQzOywgYml0ICZsdDsmbHQ7PSAxKSB7CiYjNDM7CWZvciAoaSA9IDAsIGJpdCA9IDE7IGkgJmx0OyBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTsgaSYjNDM7JiM0MzssIGJpdCAmbHQ7Jmx0Oz0gMSkgewogCQlpZiAobm9kZW1hc2sgJmFtcDsgYml0KSB7CiAJCQlub2RlbWFza3Nbbm9kZXNdID0gbm9kZW1hc2sgJmFtcDsgYml0OwogCQkJbm9kZXMmIzQzOyYjNDM7OwpAQCAtMzEwLDcgJiM0MzszMDgsNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcywKIAkJICogS1ZNX0NSRUFURV9WQ1BVIGlvY3RsLiBJZiB0aGF0IGFzc3VtcHRpb24gZXZlciBjaGFuZ2VzIHRoaXMKIAkJICogdGVzdCBtYXkgYnJlYWsgb3IgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlIHNpZ25hbC4KIAkJICovCi0JCXBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgc2l6ZW9mKG5vZGVtYXNrc1tmcm9tXSksCiYjNDM7CQlwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIEJJVFNfUEVSX1RZUEUobm9kZW1hc2tzW2Zyb21dKSAmIzQzOyAxLAogCQkJCQkJJmFtcDtub2RlbWFza3NbZnJvbV0sCiAJCQkJCQkmYW1wO25vZGVtYXNrc1t0b10pOwogCQlpZiAocGFnZXNfbm90X21vdmVkICZsdDsgMCkKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCmluZGV4IGYwZTVkYTQ5MDg2NjAuLmY4NDgxMjBhZjg0YmUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwpAQCAtNzIxLDYgJiM0Mzs3MjEsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKQogCiB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQogewomIzQzOwlzdHJ1Y3QgZmlsZSAqZ21lbV9maWxlOwomIzQzOwogCS8qCiAJICogTm90aGluZyB0byBkbyBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHdhcyBfYWxyZWFkeV8gY2xvc2VkLCBhcwogCSAqIGt2bV9nbWVtX3JlbGVhc2UoKSBpbnZhbGlkYXRlcyBhbmQgbnVsbGlmaWVzIGFsbCBiaW5kaW5ncy4KQEAgLTczMywyMSAmIzQzOzczNSwyNCBAQCB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KQogCS8qCiAJICogSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgX2JlaW5nXyBjbG9zZWQsIHRoZW4gdGhlIGJpbmRpbmdzIG5lZWQgdG8gYmUKIAkgKiByZW1vdmVkIGFzIGt2bV9nbWVtX3JlbGVhc2UoKSBtaWdodCBub3QgcnVuIHVudGlsIGFmdGVyIHRoZSBtZW1zbG90Ci0JICogaXMgZnJlZWQuICBOb3RlLCBtb2RpZnlpbmcgdGhlIGJpbmRpbmdzIGlzIHNhZmUgZXZlbiB0aG91Z2ggdGhlIGZpbGUKLQkgKiBpcyBkeWluZyBhcyBrdm1fZ21lbV9yZWxlYXNlKCkgbnVsbGlmaWVzIHNsb3QtJmd0O2dtZW0uZmlsZSB1bmRlcgomIzQzOwkgKiBpcyBmcmVlZC4gIE5vdGUsIGRlcmVmZXJlbmNpbmcgdGhlIGR5aW5nIGZpbGUgaXMgc2FmZSBhcwomIzQzOwkgKiBrdm1fZ21lbV9yZWxlYXNlKCkgbnVsbGlmaWVzIHNsb3QtJmd0O2dtZW0uZmlsZSB1bmRlcgogCSAqIHNsb3RzX2xvY2ssIGFuZCBvbmx5IHB1dHMgaXRzIHJlZmVyZW5jZSB0byBLVk0gYWZ0ZXIgZGVzdHJveWluZyBhbGwKIAkgKiBiaW5kaW5ncy4gIEkuZS4gcmVhY2hpbmcgdGhpcyBwb2ludCBtZWFucyBrdm1fZ21lbV9yZWxlYXNlKCkgaGFzbiYjMzk7dAogCSAqIHlldCBkZXN0cm95ZWQgdGhlIGJpbmRpbmdzIG9yIGZyZWVkIHRoZSBnbWVtX2ZpbGUsIGFuZCBjYW4mIzM5O3QgZG8gc28KIAkgKiB1bnRpbCB0aGUgY2FsbGVyIGRyb3BzIHNsb3RzX2xvY2suCiAJICovCi0JaWYgKCFmaWxlKSB7Ci0JCV9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIHNsb3QtJmd0O2dtZW0uZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhKTsKLQkJcmV0dXJuOwotCX0KJiM0MzsJZ21lbV9maWxlID0gZmlsZSA/OiBzbG90LSZndDtnbWVtLmZpbGU7CiAKLQlmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhmaWxlLSZndDtmX21hcHBpbmcpOwotCV9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGZpbGUtJmd0O3ByaXZhdGVfZGF0YSk7Ci0JZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhmaWxlLSZndDtmX21hcHBpbmcpOwomIzQzOwkvKgomIzQzOwkgKiBUYWtlIHRoZSBpbnZhbGlkYXRlIGxvY2sgZXZlbiBmb3IgYSBkeWluZyBmaWxlLiAgT3RoZXJ3aXNlLAomIzQzOwkgKiBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KCkgY2FuIGZpbmQgdGhlIGJpbmRpbmcgYW5kIGluY3JlbWVudAomIzQzOwkgKiBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzcyB3aGlsZSBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZCgpIG1pc3NlcwomIzQzOwkgKiB0aGUgcmVtb3ZlZCBiaW5kaW5nIGFuZCBza2lwcyBkZWNyZW1lbnQuCiYjNDM7CSAqLwomIzQzOwlmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhnbWVtX2ZpbGUtJmd0O2ZfbWFwcGluZyk7CiYjNDM7CV9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhKTsKJiM0MzsJZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhnbWVtX2ZpbGUtJmd0O2ZfbWFwcGluZyk7CiB9CiAKIC8qIFJldHVybnMgYSBsb2NrZWQgZm9saW8gb24gc3VjY2Vzcy4gICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxODUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS1ZNIEd1ZXN0IE1lbWZkIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBndWVzdF9tZW1mZF90ZXN0LmNgLCBgbnVtYWlmLmhgLCBgeGFwaWNfaXBpX3Rlc3QuY2AsIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgYGd1ZXN0X21lbWZkLmNgLiBUaGUgY2hhbmdlcyBpbiBgZ3Vlc3RfbWVtZmQuY2AgYXJlIHdoYXQgSSYjMzk7bSBmb2N1c2luZyBvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhIGJ1ZyBmaXggaW4gdGhlIGBrdm1fZ21lbV91bmJpbmRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gZ3Vlc3QgbWVtZmQuCgpUaGUgZ2lzdCBvZiBpdCBpcyB0aGlzOiB3aGVuIGEgZ3Vlc3QgbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQsIGFuZCB0aGUgYGZpbGVgIHBvaW50ZXIgaXMgbnVsbCAobWVhbmluZyB0aGUgZmlsZSBpcyBkeWluZykgdGhlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2Agd2FzbiYjMzk7dCBiZWluZyB0YWtlbi4gIFRoaXMgaXMgYSBjcml0aWNhbCBvdmVyc2lnaHQuICBJZiB0aGF0IGxvY2sgaXNuJiMzOTt0IGhlbGQsIHRoZW4gdGhlIGludmFsaWRhdGUgbG9naWMgY291bGQgZ2V0IGludG8gYSByYWNlIGNvbmRpdGlvbi4gU3BlY2lmaWNhbGx5LCBga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpYCBjb3VsZCBzZWUgYW4gYWN0aXZlIGJpbmRpbmcsIGluY3JlbWVudGluZyBhIGNvdW50ZXIsIHdoaWxlIGBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZCgpYCBtaWdodCBtaXNzIHRoZSB1bmJpbmRpbmcsIGxlYXZpbmcgdGhhdCBjb3VudGVyIHVuYmFsYW5jZWQuICBUaGlzIGNhbiBsZWFkIHRvIHNpZ25pZmljYW50IGlzc3Vlcy4KClRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIGludmFsaWRhdGUgbG9jayBpcyBhbHdheXMgdGFrZW4gYmVmb3JlIHVuYmluZGluZyB0aGUgZ3Vlc3QgbWVtZmQgc2xvdCwgZXZlbiB3aGVuIHRoZSB1bmRlcmx5aW5nIGZpbGUgaXMgYmVpbmcgY2xvc2VkLiBUaGUgbG9naWMgbm93IHVzZXMgZWl0aGVyIHRoZSBleGlzdGluZyBgZmlsZWAgcG9pbnRlciBvciB1c2VzIHRoZSBzbG90JiMzOTtzIGBnbWVtLmZpbGVgIGlmIHRoZSBgZmlsZWAgcG9pbnRlciBpcyBudWxsLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIGlzIGhlbGQuCgpUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGZpeCwgYnV0IGl0JiMzOTtzIGEgY3JpdGljYWwgb25lIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBzaXRzIGluIHRoZSBoZWFydCBvZiBob3cgS1ZNIGhhbmRsZXMgZ3Vlc3QgbWVtZmQsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgY2FuIGVhc2lseSBsZWFkIHRvIG11Y2ggbW9yZSBzZXJpb3VzIHByb2JsZW1zLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gdGhlIGNhbGxlcnMgb2YgYGt2bV9nbWVtX3VuYmluZGAgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgc3VidGxlIGRlcGVuZGVuY2llcyBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dtZW1fdW5iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NjQzPWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTcwNy1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzA4OnN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIHN0cnVjdCBnbWVtX2ZpbGUgKmYpXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTcwOS17XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MjEtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjcyMjp2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MjMte1xuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzUzLVx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZ21lbV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjc1NDpcdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NTUtXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGdtZW1fZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9OTM1PXN0YXRpYyB2b2lkIGt2bV9mcmVlX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtOTM3LVx0aWYgKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjkzODpcdFx0a3ZtX2dtZW1fdW5iaW5kKHNsb3QpO1xudmlydC9rdm0va3ZtX21haW4uYy05MzktXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xNjk2PXN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ5LVx0XHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkpXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NTA6XHRcdFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NTEtXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xOTk0PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjAtXHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxudmlydC9rdm0va3ZtX21haW4uYzoyMTIxOlx0XHRrdm1fZ21lbV91bmJpbmQobmV3KTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyMi1vdXQ6XG4tLVxudmlydC9rdm0va3ZtX21tLmg9Nzc9aW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxudmlydC9rdm0va3ZtX21tLmgtNzgtXHRcdCAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KTtcbnZpcnQva3ZtL2t2bV9tbS5oOjc5OnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xudmlydC9rdm0va3ZtX21tLmgtODAtI2Vsc2Vcbi0tXG52aXJ0L2t2bS9rdm1fbW0uaD04Nj1zdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbW0uaC05My1cbnZpcnQva3ZtL2t2bV9tbS5oOjk0OnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbnZpcnQva3ZtL2t2bV9tbS5oLTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBhIHByb21pc2luZyB0YXJnZXQuIFRoZSBga3ZtX2dtZW1fdW5iaW5kYCBmdW5jdGlvbiBpbiBga3ZtX21haW4uY2Agc2VlbXMgdG8gYmUgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBpbXBvcnRhbnQgZnVuY3Rpb25zIGxpa2UgYGt2bV9mcmVlX21lbXNsb3RgLCBga3ZtX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYW5kIGBrdm1fc2V0X21lbW9yeV9yZWdpb25gIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aCB3aXRoIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBLVk0gb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGV4cGxvcmluZyB3aXRoIGZ1enppbmcuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgZ3Vlc3RfbWVtZmQgYW5kIHByb2NlZWQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fTUVNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzM1PWFsbG93cyBtYXBwaW5nIGd1ZXN0X21lbWZkIG1lbW9yeSBpbnRvIGEgZ3Vlc3QuICBBbGwgZmllbGRzIHNoYXJlZCB3aXRoXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjMzNjpLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBpZGVudGljYWxseS4gIFVzZXJzcGFjZSBjYW4gc2V0IEtWTV9NRU1fR1VFU1RfTUVNRkRcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM3LWluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02MzQxPWJvdW5kcyBjaGVja3MgYXBwbHkgKHVzZSBjb21tb24gc2Vuc2UpLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzU2LVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzNTc6QSBLVk1fTUVNX0dVRVNUX01FTUZEIHJlZ2lvbiBfbXVzdF8gaGF2ZSBhIHZhbGlkIGd1ZXN0X21lbWZkIChwcml2YXRlIG1lbW9yeSkgYW5kXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1OC11c2Vyc3BhY2VfYWRkciAoc2hhcmVkIG1lbW9yeSkuICBIb3dldmVyLCBcJiMzNDt2YWxpZFwmIzM0OyBmb3IgdXNlcnNwYWNlX2FkZHIgc2ltcGx5XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTYxOT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX3Nsb3RfaGFzX2dtZW0oY29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC02MjAte1xuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjYyMTpcdHJldHVybiBzbG90IFx1MDAyNlx1MDAyNiAoc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCk7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNjIyLX1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Mzk9c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC01Ny0jZGVmaW5lIEtWTV9NRU1fUkVBRE9OTFlcdCgxVUwgXHUwMDNjXHUwMDNjIDEpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6NTg6I2RlZmluZSBLVk1fTUVNX0dVRVNUX01FTUZEXHQoMVVMIFx1MDAzY1x1MDAzYyAyKVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTU5LVxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOT1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTU3LSNkZWZpbmUgS1ZNX01FTV9SRUFET05MWVx0KDFVTCBcdTAwM2NcdTAwM2MgMSlcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo1ODojZGVmaW5lIEtWTV9NRU1fR1VFU1RfTUVNRkRcdCgxVUwgXHUwMDNjXHUwMDNjIDIpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz0zNzg9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2JpbmRpbmcoc3RydWN0IGt2bV92bSAqdm0sIGludCBmZCwgc2l6ZV90IHNpemUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjM4MjpcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCAwLCBLVk1fTUVNX0dVRVNUX01FTUZELCAwLCBzaXplLCAwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy0zODMtXHRcdFx0XHRcdCBmZCwgQUxJR05fRE9XTihJTlQ2NF9NQVgsIHBhZ2Vfc2l6ZSkpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM9NTM1PXN0YXRpYyB2b2lkIHRlc3RfZ3Vlc3RfbWVtZmRfZ3Vlc3Qodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jLTU3MC1cdFx0XHRcdFx0ICAgICBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6NTcxOlx0dm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIHNsb3QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsIGdwYSwgc2l6ZSwgTlVMTCwgZmQsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTQ3OT1zdHJ1Y3Qga3ZtX3ZtICpfX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUsIHUzMiBucl9ydW5uYWJsZV92Y3B1cyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNTAwLVx0aWYgKGlzX2d1ZXN0X21lbWZkX3JlcXVpcmVkKHNoYXBlKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo1MDE6XHRcdGZsYWdzIHw9IEtWTV9NRU1fR1VFU1RfTUVNRkQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNTAyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYz05Nzk9dm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEwODU6XHRpZiAoZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMDg2LVx0XHRpZiAoZ3Vlc3RfbWVtZmQgXHUwMDNjIDApIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9MTI3ND12b2lkIHZtX2d1ZXN0X21lbV9mYWxsb2NhdGUoc3RydWN0IGt2bV92bSAqdm0sIHU2NCBiYXNlLCB1NjQgc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI4Ny1cdFx0cmVnaW9uID0gdXNlcnNwYWNlX21lbV9yZWdpb25fZmluZCh2bSwgZ3BhLCBncGEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyODg6XHRcdFRFU1RfQVNTRVJUKHJlZ2lvbiBcdTAwMjZcdTAwMjYgcmVnaW9uLVx1MDAzZXJlZ2lvbi5mbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYy0xMjg5LVx0XHRcdCAgICBcJiMzNDtQcml2YXRlIG1lbW9yeSByZWdpb24gbm90IGZvdW5kIGZvciBHUEEgMHglbHhcJiMzNDssIGdwYSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jPTY1PXN0YXRpYyB2b2lkIHByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYmFzZV9ncGEsIHU2NCBvZmZzZXQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTc1LVx0XHQuZ3BhID0gYmFzZV9ncGEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6NzY6XHRcdC5mbGFncyA9IHByaXZhdGUgPyBLVk1fTUVNX0dVRVNUX01FTUZEIDogMCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy03Ny1cdH07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jPTE2Mz1zdGF0aWMgdm9pZCBfX3Rlc3RfcHJlX2ZhdWx0X21lbW9yeSh1bnNpZ25lZCBsb25nIHZtX3R5cGUsIGJvb2wgcHJpdmF0ZSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTgyLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgZ3BhLCBURVNUX1NMT1QsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6MTgzOlx0XHRcdFx0ICAgIFRFU1RfTlBBR0VTLCBwcml2YXRlID8gS1ZNX01FTV9HVUVTVF9NRU1GRCA6IDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTE4NC1cdHZpcnRfbWFwKHZtLCBndmEsIGdwYSwgVEVTVF9OUEFHRVMpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9MzQ2PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9tZW1vcnlfcmVnaW9uX2ZsYWdzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNDgtXHR1MzIgc3VwcG9ydGVkX2ZsYWdzID0gS1ZNX01FTV9MT0dfRElSVFlfUEFHRVM7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM0OTpcdGNvbnN0IHUzMiB2Ml9vbmx5X2ZsYWdzID0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzUwLVx0c3RydWN0IGt2bV92bSAqdm07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNjQtXHRpZiAoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX01FTU9SWV9BVFRSSUJVVEVTKSBcdTAwMjYgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzY1Olx0XHRzdXBwb3J0ZWRfZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzY2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozODY6XHRpZiAoc3VwcG9ydGVkX2ZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM4Ny1cdFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg5LVx0XHRyID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgMCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzkwOlx0XHRcdFx0XHRcdCBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUyB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5MS1cdFx0XHRcdFx0XHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTUtXHRcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCAwLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTY6XHRcdFx0XHRcdFx0IEtWTV9NRU1fUkVBRE9OTFkgfCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTctXHRcdFx0XHRcdFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDU4PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9ndWVzdF9tZW1mZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IG1lbWZkLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDYwLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDYxOlx0aW50IHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ2Mi1cdFx0XHRcdFx0ICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TSVpFLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDcxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzI6XHRwcl9pbmZvKFwmIzM0O1Rlc3RpbmcgQUREIG9mIEtWTV9NRU1fR1VFU1RfTUVNRkQgbWVtb3J5IHJlZ2lvbnNcXG5cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzMtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ4NzpcdHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtMiwgTUVNX1JFR0lPTl9TTE9ULCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODgtXHRcdFx0XHQgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TSVpFLCAwLCBtZW1mZCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ5NjpcdHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ5Ny1cdFx0XHRcdCAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NJWkUsIDAsIG1lbWZkLCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTUwMz1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9vdmVybGFwcGluZ19wcml2YXRlX21lbW9yeV9yZWdpb25zKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MDgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUwOTpcdHByX2luZm8oXCYjMzQ7VGVzdGluZyBBREQgb2Ygb3ZlcmxhcHBpbmcgS1ZNX01FTV9HVUVTVF9NRU1GRCBtZW1vcnkgcmVnaW9uc1xcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxMC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTE1Olx0dm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE2LVx0XHRcdFx0ICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0laRSAqIDIsIDAsIG1lbWZkLCAwKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTg6XHR2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgTUVNX1JFR0lPTl9TTE9UICYjNDM7IDEsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxOS1cdFx0XHRcdCAgIE1FTV9SRUdJT05fR1BBICogMiwgTUVNX1JFR0lPTl9TSVpFICogMixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyNS1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MjY6XHR2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgTUVNX1JFR0lPTl9TTE9ULCBLVk1fTUVNX0dVRVNUX01FTUZELFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjctXHRcdFx0XHQgICBNRU1fUkVHSU9OX0dQQSwgMCwgTlVMTCwgLTEsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTMyLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUzMzpcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzNC1cdFx0XHRcdFx0IE1FTV9SRUdJT05fR1BBLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTQwLVx0LyogQW5kIG5vdyB0aGUgYmFjayBoYWxmIG9mIHRoZSBvdGhlciBzbG90JiMzOTtzIGd1ZXN0X21lbWZkIGJpbmRpbmcuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU0MTpcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0Mi1cdFx0XHRcdFx0IE1FTV9SRUdJT05fR1BBLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTUyLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjU1MzpcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU1NC1cdFx0XHRcdFx0IE1FTV9SRUdJT05fR1BBICogMiAtIE1FTV9SRUdJT05fU0laRSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU2MC1cdC8qIEFuZCBub3cgdGhlIGJhY2sgaGFsZiBvZiB0aGUgb3RoZXIgc2xvdC4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTYxOlx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTYyLVx0XHRcdFx0XHQgTUVNX1JFR0lPTl9HUEEgKiAyICYjNDM7IE1FTV9SRUdJT05fU0laRSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTYyMz1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNjQ4LVx0fSBlbHNlIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NjQ5Olx0XHRwcl9pbmZvKFwmIzM0O1NraXBwaW5nIHRlc3RzIGZvciBLVk1fTUVNX0dVRVNUX01FTUZEIG1lbW9yeSByZWdpb25zXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNjUwLVx0fVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTM2OT1zdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdmNwdXMsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDAxLVx0XHRcdCAgIEJBU0VfREFUQV9TTE9UICYjNDM7IGksIHNsb3Rfc2l6ZSAvIHZtLVx1MDAzZXBhZ2Vfc2l6ZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jOjQwMjpcdFx0XHQgICBLVk1fTUVNX0dVRVNUX01FTUZELCBtZW1mZCwgc2xvdF9zaXplICogaSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00MDMtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jPTQ3PXN0YXRpYyB2b2lkIHRlc3RfcHJpdmF0ZV9hY2Nlc3NfbWVtc2xvdF9kZWxldGVkKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTYwLVx0XHRcdFx0ICAgIEVYSVRTX1RFU1RfTlBBR0VTLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jOjYxOlx0XHRcdFx0ICAgIEtWTV9NRU1fR1VFU1RfTUVNRkQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTYyLVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NjQzPWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY4NC1cdC8qXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjY4NTpcdCAqIG1lbXNsb3RzIG9mIGZsYWcgS1ZNX01FTV9HVUVTVF9NRU1GRCBhcmUgaW1tdXRhYmxlIHRvIGNoYW5nZSwgc29cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjg2LVx0ICoga3ZtX2dtZW1fYmluZCgpIG11c3Qgb2NjdXIgb24gYSBuZXcgbWVtc2xvdC4gIEJlY2F1c2UgdGhlIG1lbXNsb3Rcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTkzNT1zdGF0aWMgdm9pZCBrdm1fZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbnZpcnQva3ZtL2t2bV9tYWluLmMtOTM2LXtcbnZpcnQva3ZtL2t2bV9tYWluLmM6OTM3Olx0aWYgKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTkzOC1cdFx0a3ZtX2dtZW1fdW5iaW5kKHNsb3QpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTU3Mz1zdGF0aWMgaW50IGNoZWNrX21lbW9yeV9yZWdpb25fZmxhZ3Moc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTU3OC1cdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fR1VFU1RfTUVNRkQpKVxudmlydC9rdm0va3ZtX21haW4uYzoxNTc5Olx0XHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xudmlydC9rdm0va3ZtX21haW4uYy0xNTgwLVxudmlydC9rdm0va3ZtX21haW4uYy0xNTgxLVx0LyogRGlydHkgbG9nZ2luZyBwcml2YXRlIG1lbW9yeSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6MTU4MjpcdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE1ODMtXHRcdHZhbGlkX2ZsYWdzIFx1MDAyNj0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTU5MC1cdGlmIChrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgXHUwMDI2XHUwMDI2XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE1OTE6XHQgICAgIShtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpKVxudmlydC9rdm0va3ZtX21haW4uYy0xNTkyLVx0XHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX1JFQURPTkxZO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTY5Nj1zdGF0aWMgdm9pZCBrdm1fY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTczMi1cdFx0ICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3MzM6XHRcdFdBUk5fT05fT05DRShvbGQtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpO1xudmlydC9rdm0va3ZtX21haW4uYy0xNzM0LVx0XHRmYWxsdGhyb3VnaDtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NDgtXHRcdCAqL1xudmlydC9rdm0va3ZtX21haW4uYzoxNzQ5Olx0XHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NTAtXHRcdFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xOTk0PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMjUtXHRcdHJldHVybiAtRUlOVkFMO1xudmlydC9rdm0va3ZtX21haW4uYzoyMDI2Olx0aWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCBcdTAwMjZcdTAwMjZcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjAyNy1cdCAgICAobWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCBcdTAwMjYgKFBBR0VfU0laRSAtIDEpIHx8XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMDc2LVx0XHQvKiBQcml2YXRlIG1lbXNsb3RzIGFyZSBpbW11dGFibGUsIHRoZXkgY2FuIG9ubHkgYmUgZGVsZXRlZC4gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjA3NzpcdFx0aWYgKG1lbS1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjA3OC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwODAtXHRcdCAgICAobnBhZ2VzICE9IG9sZC1cdTAwM2VucGFnZXMpIHx8XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIwODE6XHRcdCAgICAoKG1lbS1cdTAwM2VmbGFncyBeIG9sZC1cdTAwM2VmbGFncykgXHUwMDI2IChLVk1fTUVNX1JFQURPTkxZIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCkpKVxudmlydC9rdm0va3ZtX21haW4uYy0yMDgyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwNi1cdG5ldy1cdTAwM2V1c2Vyc3BhY2VfYWRkciA9IG1lbS1cdTAwM2V1c2Vyc3BhY2VfYWRkcjtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEwNzpcdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yMTE5LW91dF91bmJpbmQ6XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMjA6XHRpZiAobWVtLVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKVxudmlydC9rdm0va3ZtX21haW4uYy0yMTIxLVx0XHRrdm1fZ21lbV91bmJpbmQobmV3KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTczOQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IEZpbGUgRGVzY3JpcHRvciBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGhlcmUgaXMgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0IGZvciBgQ09ORklHX0tWTV9HVUVTVF9NRU1GRGAuIExldCYjMzk7cyBhc3N1bWUgdGhpcyBpcyBhIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXMgd291bGQgYmUgaW4gdGhlIGB2aXJ0L2t2bS9gIGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHNvdXJjZSwgb3IgcG90ZW50aWFsbHkgYSBzaW1pbGFybHkgbmFtZWQgZGlyZWN0b3J5IGlmIHRoZXJlJiMzOTtzIGFuIGFic3RyYWN0aW9uIGxheWVyLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW5zaWRlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhleSYjMzk7cmUgdGhlIHVzdWFsIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQgb2YgdGhpbmcgaXMgZGVmaW5lZCwgYW5kIGRlcGVuZGVuY2llcyBhcmUgY2xlYXJseSBsaXN0ZWQuIElmIGl0IGlzbiYjMzk7dCBgS2NvbmZpZ2AsIEkgbmVlZCB0byBsb29rIGZvciBhbnkgYC5jb25maWdgIGZpbGUgd2l0aGluIHRoZSBkaXJlY3RvcmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnN5c3RlbS4gSSB3b3VsZCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgYWJvdXQgd2hhdCBmZWF0dXJlcyB0aGlzIGRlcGVuZHMgb24sIHdoYXQgaXQgZW5hYmxlcywgYW5kIHBvdGVudGlhbGx5IHdoaWNoIGFyY2hpdGVjdHVyZXMgb3IgcHJvY2Vzc29ycyB0aGlzIGlzIHJlbGV2YW50IHRvLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLS1cbnZpcnQva3ZtL0tjb25maWctMTA1LVxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjExOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIHByb3ZpZGVkIHRleHQ6CgoqKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgdmlydC9rdm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDEwNi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBLVk0gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdHJ1Y3R1cmVkIGFuZCB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgdGhhdCBwb2ludCBpbiB0aGUgY29kZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBzZXQgb2Ygb3B0aW9uczsgaXQmIzM5O3MgbGlrZWx5IHRoZXkgYXJlIHRoZSBiYXNpY3MgZm9yIHRoZSBtb2R1bGUgdG8gYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAwOlx0Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAxMDE6XHQgICAgICAgYm9vbFxuIDEwMjpcdFxuIDEwMzpcdGNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDEwNDpcdCAgICAgICBib29sXG4gMTA1Olx0XG4gMTA2Olx0Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxuIDEwNzpcdCAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4gMTA4Olx0ICAgICAgIGJvb2xcbiAxMDk6XHRcbiAxMTA6XHRjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX1BSRVBBUkVcbiAxMTE6XHQgICAgICAgYm9vbFxuIDExMjpcdCAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxuIDExMzpcdFxuIDExNDpcdGNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDExNTpcdCAgICAgICBib29sXG4gMTE2Olx0ICAgICAgIGRlcGVuZHMgb24gS1ZNX0dVRVNUX01FTUZEXG4gMTE3Olx0XG4gMTE4Olx0Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDExOTpcdCAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTQ2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLVk1fR1VFU1RfTUVNRkQqKgoKT2theSwgc28gSSYjMzk7dmUgc3R1bWJsZWQgdXBvbiB0aGlzIGBLVk1fR1VFU1RfTUVNRkRgIGJvb2xlYW4sIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzIGhpZGRlbi4gTXkgaW5pdGlhbCBodW5jaCwgZ2l2ZW4gaXRzIG5hbWUgYW5kIGhpZGRlbiBzdGF0dXMsIGlzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHNlbGVjdGVkIGRlZXAgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGV4cG9zZWQgZGlyZWN0bHkgYXQgYSBoaWdoIGxldmVsLiBUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgcHVsbGluZyB0aGlzIGluLiBVbmRlcnN0YW5kaW5nIHRoZSAmIzM0O3NlbGVjdCYjMzQ7IHJlbGF0aW9uc2hpcHMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgdW5kZXJseWluZyByYXRpb25hbGUgYW5kIHdoaWNoIHNwZWNpZmljIGhhcmR3YXJlIG9yIGFyY2hpdGVjdHVyYWwgbnVhbmNlcyBuZWNlc3NpdGF0ZSBpdHMgaW5jbHVzaW9uLiBUaW1lIHRvIGRpdmUgaW50byB0aG9zZSBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS1ZNX0dVRVNUX01FTUZEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5Olx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NjUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgS1ZNIGNoYW5nZSwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Qgc28gZmFyLiBUaGUga2V5IGVuYWJsaW5nIGNvbmZpZyBzZWVtcyB0byBiZSBgS1ZNYCwgYW5kIGl0JiMzOTtzIGJlaW5nIHVzZWQgYWNyb3NzIGJvdGggYXJtNjQgYW5kIHg4Nl82NCBhcmNoaXRlY3R1cmVzIOKAkyBhIGdvb2Qgc2lnbiBvZiB3aWRlciBhcHBsaWNhYmlsaXR5LCBvciBhdCBsZWFzdCBpbnRlbnQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgY2VudGVyZWQgb24gdGhlIGBrdm1fZ21lbV91bmJpbmRgIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIG90aGVyIGFmZmVjdGVkIGZ1bmN0aW9ucywganVzdCB0byBiZSB0aG9yb3VnaC4KCkFoLCBhbmQgSSBzZWUgdGhlIHNlbGYtdGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jYC4gVGhvc2UgYXJlIHB1cmVseSB0ZXN0cyB0aG91Z2gsIG5vdCBrZXJuZWwgY29kZSwgc28gdGhleSBkb24mIzM5O3QgaW1wYWN0IG15IGltbWVkaWF0ZSBmdXp6aW5nIGZvY3VzLgoKUmlnaHQsIHNvIHRoZSBrZXJuZWwgY29kZSBtb2RpZmljYXRpb24gaXMgcmVhbGx5IGp1c3QgYGt2bV9nbWVtX3VuYmluZGAuIFRoYXQmIzM5O3MgYSB2ZXJ5IGZvY3VzZWQgY2hhbmdlLCB3aGljaCBtYWtlcyBpdCBhbiBpZGVhbCB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBrdm1fZ21lbV91bmJpbmRgIGlzIHN0YXRpYyBvciBub3QuIE9rYXksIGxldCYjMzk7cyBzZWU6CgpgYGBjCnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpCmBgYAoKTm8sIGl0JiMzOTtzIG5vdCBzdGF0aWMuIEdvb2QuIFRoaXMgaXMgcHJvYmFibHkgZXhwb3J0ZWQgZm9yIG90aGVyIG1vZHVsZXMgdG8gYWNjZXNzIGl0LgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qa3ZtX2dtZW1fdW5iaW5kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MjgKCQkJCQkJCW91dHB1dDogMTA1CgkJCQkJCQl0aG91Z2h0czogODQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR3Vlc3QgTWVtZmQgVW5iaW5kIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZXZlbiB0aG91Z2ggYGt2bV9nbWVtX3VuYmluZGAgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGl0JiMzOTtzIGEgZ2xvYmFsIGZ1bmN0aW9uIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhlcmVmb3JlLCBpdCYjMzk7cyBwZXJmZWN0bHkgdmFsaWQgdG8gdXNlIGl0IGFzIGEgZm9jdXMgc3ltYm9sIGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKTGV0IG1lIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCB3ZXJlIHRvdWNoZWQuIFRoZSBkaWZmIG9ubHkgbWVudGlvbnMgbW9kaWZpY2F0aW9ucyB0byBga3ZtX2dtZW1fdW5iaW5kYCwgd2hpY2ggY29uZmlybXMgdGhlIHNjb3BlLgoKQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYSBtaXNzaW5nIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgY2FsbC4gUHJldmlvdXNseSwgd2hlbiB0aGUgYGZpbGVgIHBvaW50ZXIgd2FzIE5VTEzigJRpbmRpY2F0aW5nIHRoZSBmaWxlIHdhcyBiZWluZyBjbG9zZWTigJR0aGUgbG9jayB3YXNuJiMzOTt0IGFjcXVpcmVkLiBUaGlzIG9taXNzaW9uIGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbi4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGFsd2F5cyB0YWtpbmcgdGhlIGxvY2ssIGV2ZW4gaWYgdGhlIGZpbGUgaXMgbnVsbC4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gZml4LgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCB0YXJnZXRpbmcgdGhlIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgc3Vycm91bmRpbmcgZ3Vlc3QgbWVtZmQsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEkgd2lsbCBhbHNvIHVzZSBgRm9jdXNTeW1ib2xzPVsmIzM0O2t2bV9nbWVtX3VuYmluZCYjMzQ7XWAgdG8gY29uY2VudHJhdGUgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGaW5hbGx5LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBgRW5hYmxlQ29uZmlncz1bJiMzNDtLVk0mIzM0O11gLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIGVuc3VyZSB0aG9yb3VnaCB0ZXN0aW5nIG9mIHRoaXMgY3JpdGljYWwgS1ZNIGNvbXBvbmVudCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmFjZSBjb25kaXRpb24gbmF0dXJlIG9mIHRoZSBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV91bmJpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX2dtZW1fdW5iaW5kYCB3aGVuIGEgZ3Vlc3RfbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQgYnkgZW5zdXJpbmcgdGhlIGludmFsaWRhdGUgbG9jayBpcyB0YWtlbiBldmVuIGZvciBkeWluZyBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV91bmJpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX2dtZW1fdW5iaW5kYCB3aGVuIGEgZ3Vlc3RfbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQgYnkgZW5zdXJpbmcgdGhlIGludmFsaWRhdGUgbG9jayBpcyB0YWtlbiBldmVuIGZvciBkeWluZyBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDEzOjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBndWVzdF9tZW1mZCBzZWxmdGVzdHMgYW5kIGZpeGVzIGEgbG9ja2luZy9jb25jdXJyZW5jeSBidWcgaW4gYGt2bV9nbWVtX3VuYmluZGAgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGUgYnVnIGZpeCBlbnN1cmVzIHRoYXQgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBpcyB0YWtlbiBldmVuIHdoZW4gdGhlIGZpbGUgaXMgZHlpbmcsIHByZXZlbnRpbmcgYSBtaXNtYXRjaCBpbiBgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3NgIGluY3JlbWVudHMvZGVjcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljL2NvbmN1cnJlbmN5IGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUsIGFuZCBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTMyY2NlZjkxMDQ5ZTZkZjcyMmFjMGMzYTkyMjhhYWEzZGUxNTA5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDEzOjQzOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMKaW5kZXggMjIzM2Q4NzFhMzhmNC4uYWVlODBkZGE2MjI5NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jCkBAIC03NiwzMyAmIzQzOzc2LDUzIEBAIHN0YXRpYyB2b2lkIHRlc3RfbW1hcF9zdXBwb3J0ZWQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAlrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZpbGwgQG5pZHMgd2l0aCB0aGUgZmlyc3QgQG5yX25pZHMgbm9kZXMgaW4gdGhlIGFsbG93ZWQgbWFzay4KJiM0MzsgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBnZXRfbnVtYV9ub2RlX2lkcyhpbnQgKm5pZHMsIGludCBucl9uaWRzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5pZDsKJiM0MzsJaW50IG5yX2ZvdW5kID0gMDsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfc2V0X2JpdChuaWQsICZhbXA7bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7CiYjNDM7CQluaWRzW25yX2ZvdW5kJiM0MzsmIzQzO10gPSBuaWQ7CiYjNDM7CQlpZiAobnJfZm91bmQgPT0gbnJfbmlkcykKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKQogewotCWNvbnN0IHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tfMCA9IDE7IC8qIG5pZDogMCAqLwotCXVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spOwomIzQzOwl1bnNpZ25lZCBsb25nIG5vZGVtYXNrLCBiaW5kX25vZGVtYXNrOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSAmIzQzOyAxOwogCWludCBwb2xpY3k7CiAJY2hhciAqbWVtOwomIzQzOwlpbnQgbmlkOwogCWludCByZXQ7CiAKLQlpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSkKJiM0MzsJaWYgKCFnZXRfbnVtYV9ub2RlX2lkcygmYW1wO25pZCwgMSkpCiAJCXJldHVybjsKIAomIzQzOwliaW5kX25vZGVtYXNrID0gMVVMICZsdDsmbHQ7IG5pZDsKIAltZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7CiAKIAkvKiBUZXN0IE1QT0xfSU5URVJMRUFWRSBwb2xpY3kgKi8KLQlrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsICZhbXA7bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7CiYjNDM7CWt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgJmFtcDtiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTsKIAlrdm1fZ2V0X21lbXBvbGljeSgmYW1wO3BvbGljeSwgJmFtcDtub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7Ci0JVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSAmYW1wOyZhbXA7IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsCiYjNDM7CVRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgJmFtcDsmYW1wOyBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLAogCQkgICAgJiMzNDtXYW50ZWQgTVBPTF9JTlRFUkxFQVZFICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4JiMzNDssCi0JCSAgICBNUE9MX0lOVEVSTEVBVkUsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spOwomIzQzOwkJICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7CiAKIAkvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi8KLQlrdm1fbWJpbmQobWVtICYjNDM7IHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlbWFza18wLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKG1lbSAmIzQzOyBwYWdlX3NpemUgKiAyLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7CiAJa3ZtX2dldF9tZW1wb2xpY3koJmFtcDtwb2xpY3ksICZhbXA7bm9kZW1hc2ssIG1heG5vZGUsIG1lbSAmIzQzOyBwYWdlX3NpemUgKiAyLCBNUE9MX0ZfQUREUik7Ci0JVEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCAmYW1wOyZhbXA7IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsCiYjNDM7CVRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgJmFtcDsmYW1wOyBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLAogCQkgICAgJiMzNDtXYW50ZWQgTVBPTF9CSU5EICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4JiMzNDssCi0JCSAgICBNUE9MX0JJTkQsIG5vZGVtYXNrXzAsIHBvbGljeSwgbm9kZW1hc2spOwomIzQzOwkJICAgIE1QT0xfQklORCwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7CiAKIAkvKiBUZXN0IE1QT0xfREVGQVVMVCBwb2xpY3kgKi8KIAlrdm1fbWJpbmQobWVtLCB0b3RhbF9zaXplLCBNUE9MX0RFRkFVTFQsIE5VTEwsIDAsIDApOwpAQCAtMTEyLDcgJiM0MzsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiAJCSAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spOwogCiAJLyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovCi0JcmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgJmFtcDtub2RlbWFza18wLCBtYXhub2RlLCAwKTsKJiM0MzsJcmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgJmFtcDtiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTsKIAlURVNUX0FTU0VSVChyZXQgPT0gLTEgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5WQUwsCiAJCSAgICAmIzM0O21iaW5kIHdpdGggaW52YWxpZCBwb2xpY3kgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUwmIzM0Oyk7CiAKQEAgLTEyMSwxNyAmIzQzOzE0MSwxOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiAKIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqLwotCXVuc2lnbmVkIGxvbmcgbm9kZTFfbWFzayA9IDI7ICAvKiBOb2RlIDEgKi8KLQl1bnNpZ25lZCBsb25nIG1heG5vZGUgPSA4OwomIzQzOwl1bnNpZ25lZCBsb25nIGJpbmRfbm9kZW1hc2tzWzJdOwomIzQzOwl1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKGJpbmRfbm9kZW1hc2tzWzBdKSAmIzQzOyAxOwogCXZvaWQgKnBhZ2VzWzRdOwomIzQzOwlpbnQgbmlkc1syXTsKIAlpbnQgc3RhdHVzWzRdOwogCWNoYXIgKm1lbTsKIAlpbnQgaTsKIAotCWlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKQomIzQzOwlpZiAoIWdldF9udW1hX25vZGVfaWRzKG5pZHMsIEFSUkFZX1NJWkUobmlkcykpKQogCQlyZXR1cm47CiAKJiM0MzsJYmluZF9ub2RlbWFza3NbMF0gPSAxVUwgJmx0OyZsdDsgbmlkc1swXTsKJiM0MzsJYmluZF9ub2RlbWFza3NbMV0gPSAxVUwgJmx0OyZsdDsgbmlkc1sxXTsKIAltZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgNDsgaSYjNDM7JiM0MzspCkBAIC0xMzksMzQgJiM0MzsxNjEsNDIgQEAgc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSkKIAogCS8qIFNldCBOVU1BIHBvbGljeSBhZnRlciBhbGxvY2F0aW9uICovCiAJbWVtc2V0KG1lbSwgMHhhYSwgcGFnZV9zaXplKTsKLQlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCAmYW1wO25vZGUwX21hc2ssIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCAmYW1wO2JpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTsKIAlrdm1fZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIDAsIHBhZ2Vfc2l6ZSk7CiAKIAkvKiBTZXQgTlVNQSBwb2xpY3kgYmVmb3JlIGFsbG9jYXRpb24gKi8KLQlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlMV9tYXNrLCBtYXhub2RlLCAwKTsKLQlrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlMF9tYXNrLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFza3NbMV0sIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7CiAJbWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7CiAKIAkvKiBWYWxpZGF0ZSBpZiBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHNwZWNpZmllZCBOVU1BIG5vZGVzICovCiAJa3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsICYjMzQ7RXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzBdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMV0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSAwLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1syXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsICYjMzQ7RXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzNdKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IG5pZHNbMV0sCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgbmlkc1sxXSwgc3RhdHVzWzBdKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IG5pZHNbMV0sCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgbmlkc1sxXSwgc3RhdHVzWzFdKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMF0sCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzJdKTsKJiM0MzsJVEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IG5pZHNbMF0sCiYjNDM7CQkgICAgJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgbmlkc1swXSwgc3RhdHVzWzNdKTsKIAogCS8qIFB1bmNoIGhvbGUgZm9yIGFsbCBwYWdlcyAqLwogCWt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgdG90YWxfc2l6ZSk7CiAKIAkvKiBDaGFuZ2UgTlVNQSBwb2xpY3kgbm9kZXMgYW5kIHJlYWxsb2NhdGUgKi8KLQlrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlMF9tYXNrLCBtYXhub2RlLCAwKTsKLQlrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtub2RlMV9tYXNrLCBtYXhub2RlLCAwKTsKJiM0MzsJa3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsICZhbXA7YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApOwomIzQzOwlrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgJmFtcDtiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7CiAJbWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7CiAKIAlrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMCwgJiMzNDtFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbMF0pOwotCVRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAwLCAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkJiMzNDssIHN0YXR1c1sxXSk7Ci0JVEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsICYjMzQ7RXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWQmIzM0Oywgc3RhdHVzWzJdKTsKLQlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMSwgJiMzNDtFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBzdGF0dXNbM10pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMF0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzBdLCBzdGF0dXNbMV0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbMl0pOwomIzQzOwlURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1sxXSwKJiM0MzsJCSAgICAmIzM0O0V4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZCYjMzQ7LCBuaWRzWzFdLCBzdGF0dXNbM10pOwogCiAJa3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaAppbmRleCAyOTU3MmE2ZDc4OWNkLi40YmJiZjMxNGU5ZDc3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaApAQCAtNCw4ICYjNDM7NCw2IEBACiAjaWZuZGVmIFNFTEZURVNUX0tWTV9OVU1BSUZfSAogI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0gKIAotI2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwotCiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcG9saWN5LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7a3ZtX3N5c2NhbGxzLmgmIzM0OwpAQCAtMzAsNTQgJiM0MzsyOCwxNiBAQCBLVk1fU1lTQ0FMTF9ERUZJTkUobWJpbmQsIDYsIHZvaWQgKiwgYWRkciwgdW5zaWduZWQgbG9uZywgc2l6ZSwgaW50LCBtb2RlLAogCQkgICBjb25zdCB1bnNpZ25lZCBsb25nICosIG5vZGVtYXNrLCB1bnNpZ25lZCBsb25nLCBtYXhub2RlLAogCQkgICB1bnNpZ25lZCBpbnQsIGZsYWdzKTsKIAotc3RhdGljIGlubGluZSBpbnQgZ2V0X21heF9udW1hX25vZGUodm9pZCkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X251bWFfbWVtX25vZGVzKHZvaWQpCiB7Ci0Jc3RydWN0IGRpcmVudCAqZGU7Ci0JaW50IG1heF9ub2RlID0gMDsKLQlESVIgKmQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwOwogCi0JLyoKLQkgKiBBc3N1bWUgdGhlcmUmIzM5O3MgYSBzaW5nbGUgbm9kZSBpZiB0aGUga2VybmVsIGRvZXNuJiMzOTt0IHN1cHBvcnQgTlVNQSwKLQkgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuCi0JICovCi0JZCA9IG9wZW5kaXIoJiMzNDsvc3lzL2RldmljZXMvc3lzdGVtL25vZGUmIzM0Oyk7Ci0JaWYgKCFkKQomIzQzOwkvKiBHZXQgc2V0IG9mIGZpcnN0IDY0IG51bWEgbm9kZXMgYXZhaWxhYmxlICovCiYjNDM7CWlmIChnZXRfbWVtcG9saWN5KE5VTEwsICZhbXA7bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBOVUxMLAomIzQzOwkJCSAgTVBPTF9GX01FTVNfQUxMT1dFRCkpCiAJCXJldHVybiAwOwogCi0Jd2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKLQkJaW50IG5vZGVfaWQ7Ci0JCWNoYXIgKmVuZHB0cjsKLQotCQlpZiAoc3RybmNtcChkZS0mZ3Q7ZF9uYW1lLCAmIzM0O25vZGUmIzM0OywgNCkgIT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCW5vZGVfaWQgPSBzdHJ0b2woZGUtJmd0O2RfbmFtZSAmIzQzOyA0LCAmYW1wO2VuZHB0ciwgMTApOwotCQlpZiAoKmVuZHB0ciAhPSAmIzM5O1wwJiMzOTspCi0JCQljb250aW51ZTsKLQotCQlpZiAobm9kZV9pZCAmZ3Q7IG1heF9ub2RlKQotCQkJbWF4X25vZGUgPSBub2RlX2lkOwotCX0KLQljbG9zZWRpcihkKTsKLQotCXJldHVybiBtYXhfbm9kZTsKLX0KLQotc3RhdGljIGJvb2wgaXNfbnVtYV9hdmFpbGFibGUodm9pZCkKLXsKLQkvKgotCSAqIFByb2JlIGZvciBOVU1BIGJ5IGRvaW5nIGEgZHVtbXkgZ2V0X21lbXBvbGljeSgpLiAgSWYgdGhlIHN5c2NhbGwKLQkgKiBmYWlscyB3aXRoIEVOT1NZUywgdGhlbiB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRob3V0IE5VTUEgc3VwcG9ydC4KLQkgKiBpZiB0aGUgc3lzY2FsbCBmYWlscyB3aXRoIEVQRVJNLCB0aGVuIHRoZSBwcm9jZXNzL3VzZXIgbGFja3MgdGhlCi0JICogbmVjZXNzYXJ5IGNhcGFiaWxpdGllcyAoQ0FQX1NZU19OSUNFKS4KLQkgKi8KLQlyZXR1cm4gIWdldF9tZW1wb2xpY3koTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCkgfHwKLQkJKGVycm5vICE9IEVOT1NZUyAmYW1wOyZhbXA7IGVycm5vICE9IEVQRVJNKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0odm9pZCkKLXsKLQlyZXR1cm4gaXNfbnVtYV9hdmFpbGFibGUoKSAmYW1wOyZhbXA7IGdldF9tYXhfbnVtYV9ub2RlKCkgJmd0Oz0gMTsKJiM0MzsJcmV0dXJuIG5vZGVtYXNrOwogfQogCiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX05VTUFJRl9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmMKaW5kZXggMzljZTlhOTM2OWY1Yi4uNjZkY2YzNjM5OGFhYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYwpAQCAtMjUxLDggJiM0MzsyNTEsOCBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcywKIAkJICAgdTY0ICpwaXBpc19yY3ZkKQogewogCWxvbmcgcGFnZXNfbm90X21vdmVkOwotCXVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW3NpemVvZihub2RlbWFzaykgKiA4XTsKJiM0MzsJdW5zaWduZWQgbG9uZyBub2RlbWFzazsKJiM0MzsJdW5zaWduZWQgbG9uZyBub2RlbWFza3NbQklUU19QRVJfVFlQRShub2RlbWFzayldOwogCWludCBub2RlcyA9IDA7CiAJdGltZV90IHN0YXJ0X3RpbWUsIGxhc3RfdXBkYXRlLCBub3c7CiAJdGltZV90IGludGVydmFsX3NlY3MgPSAxOwpAQCAtMjY2LDE5ICYjNDM7MjY2LDE3IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLAogCWZwcmludGYoc3RkZXJyLCAmIzM0O0NhbGxpbmcgbWlncmF0ZV9wYWdlcyBldmVyeSAlZCBtaWNyb3NlY29uZHNcbiYjMzQ7LAogCQlkZWxheV91c2Vjcyk7CiAKLQkvKiBHZXQgc2V0IG9mIGZpcnN0IDY0IG51bWEgbm9kZXMgYXZhaWxhYmxlICovCi0Ja3ZtX2dldF9tZW1wb2xpY3koTlVMTCwgJmFtcDtub2RlbWFzaywgc2l6ZW9mKG5vZGVtYXNrKSAqIDgsCi0JCQkgIDAsIE1QT0xfRl9NRU1TX0FMTE9XRUQpOwomIzQzOwlub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpOwogCiAJZnByaW50ZihzdGRlcnIsICYjMzQ7TnVtYSBub2RlcyBmb3VuZCBhbW9uZ3N0IGZpcnN0ICVsdSBwb3NzaWJsZSBub2RlcyAmIzM0OwogCQkmIzM0OyhlYWNoIDEtYml0IGluZGljYXRlcyBub2RlIGlzIHByZXNlbnQpOiAlI2x4XG4mIzM0OywKLQkJc2l6ZW9mKG5vZGVtYXNrKSAqIDgsIG5vZGVtYXNrKTsKJiM0MzsJCUJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBub2RlbWFzayk7CiAKIAkvKiBJbml0IGFycmF5IG9mIG1hc2tzIGNvbnRhaW5pbmcgYSBzaW5nbGUtYml0IGluIGVhY2gsIG9uZSBmb3IgZWFjaAogCSAqIGF2YWlsYWJsZSBub2RlLiBtaWdyYXRlX3BhZ2VzIGNhbGxlZCBiZWxvdyByZXF1aXJlcyBzcGVjaWZ5aW5nIG5vZGVzCiAJICogYXMgYml0IG1hc2tzLgogCSAqLwotCWZvciAoaSA9IDAsIGJpdCA9IDE7IGkgJmx0OyBzaXplb2Yobm9kZW1hc2spICogODsgaSYjNDM7JiM0MzssIGJpdCAmbHQ7Jmx0Oz0gMSkgewomIzQzOwlmb3IgKGkgPSAwLCBiaXQgPSAxOyBpICZsdDsgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkmIzQzOyYjNDM7LCBiaXQgJmx0OyZsdDs9IDEpIHsKIAkJaWYgKG5vZGVtYXNrICZhbXA7IGJpdCkgewogCQkJbm9kZW1hc2tzW25vZGVzXSA9IG5vZGVtYXNrICZhbXA7IGJpdDsKIAkJCW5vZGVzJiM0MzsmIzQzOzsKQEAgLTMxMCw3ICYjNDM7MzA4LDcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsCiAJCSAqIEtWTV9DUkVBVEVfVkNQVSBpb2N0bC4gSWYgdGhhdCBhc3N1bXB0aW9uIGV2ZXIgY2hhbmdlcyB0aGlzCiAJCSAqIHRlc3QgbWF5IGJyZWFrIG9yIGdpdmUgYSBmYWxzZSBwb3NpdGl2ZSBzaWduYWwuCiAJCSAqLwotCQlwYWdlc19ub3RfbW92ZWQgPSBtaWdyYXRlX3BhZ2VzKDAsIHNpemVvZihub2RlbWFza3NbZnJvbV0pLAomIzQzOwkJcGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrc1tmcm9tXSkgJiM0MzsgMSwKIAkJCQkJCSZhbXA7bm9kZW1hc2tzW2Zyb21dLAogCQkJCQkJJmFtcDtub2RlbWFza3NbdG9dKTsKIAkJaWYgKHBhZ2VzX25vdF9tb3ZlZCAmbHQ7IDApCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwppbmRleCBmMGU1ZGE0OTA4NjYwLi5mODQ4MTIwYWY4NGJlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKQEAgLTcyMSw2ICYjNDM7NzIxLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgc3RydWN0IGdtZW1fZmlsZSAqZikKIAogdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKIHsKJiM0MzsJc3RydWN0IGZpbGUgKmdtZW1fZmlsZTsKJiM0MzsKIAkvKgogCSAqIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHVuZGVybHlpbmcgZmlsZSB3YXMgX2FscmVhZHlfIGNsb3NlZCwgYXMKIAkgKiBrdm1fZ21lbV9yZWxlYXNlKCkgaW52YWxpZGF0ZXMgYW5kIG51bGxpZmllcyBhbGwgYmluZGluZ3MuCkBAIC03MzMsMjEgJiM0Mzs3MzUsMjQgQEAgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKIAkvKgogCSAqIEhvd2V2ZXIsIGlmIHRoZSBmaWxlIGlzIF9iZWluZ18gY2xvc2VkLCB0aGVuIHRoZSBiaW5kaW5ncyBuZWVkIHRvIGJlCiAJICogcmVtb3ZlZCBhcyBrdm1fZ21lbV9yZWxlYXNlKCkgbWlnaHQgbm90IHJ1biB1bnRpbCBhZnRlciB0aGUgbWVtc2xvdAotCSAqIGlzIGZyZWVkLiAgTm90ZSwgbW9kaWZ5aW5nIHRoZSBiaW5kaW5ncyBpcyBzYWZlIGV2ZW4gdGhvdWdoIHRoZSBmaWxlCi0JICogaXMgZHlpbmcgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LSZndDtnbWVtLmZpbGUgdW5kZXIKJiM0MzsJICogaXMgZnJlZWQuICBOb3RlLCBkZXJlZmVyZW5jaW5nIHRoZSBkeWluZyBmaWxlIGlzIHNhZmUgYXMKJiM0MzsJICoga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LSZndDtnbWVtLmZpbGUgdW5kZXIKIAkgKiBzbG90c19sb2NrLCBhbmQgb25seSBwdXRzIGl0cyByZWZlcmVuY2UgdG8gS1ZNIGFmdGVyIGRlc3Ryb3lpbmcgYWxsCiAJICogYmluZGluZ3MuICBJLmUuIHJlYWNoaW5nIHRoaXMgcG9pbnQgbWVhbnMga3ZtX2dtZW1fcmVsZWFzZSgpIGhhc24mIzM5O3QKIAkgKiB5ZXQgZGVzdHJveWVkIHRoZSBiaW5kaW5ncyBvciBmcmVlZCB0aGUgZ21lbV9maWxlLCBhbmQgY2FuJiMzOTt0IGRvIHNvCiAJICogdW50aWwgdGhlIGNhbGxlciBkcm9wcyBzbG90c19sb2NrLgogCSAqLwotCWlmICghZmlsZSkgewotCQlfX2t2bV9nbWVtX3VuYmluZChzbG90LCBzbG90LSZndDtnbWVtLmZpbGUtJmd0O3ByaXZhdGVfZGF0YSk7Ci0JCXJldHVybjsKLQl9CiYjNDM7CWdtZW1fZmlsZSA9IGZpbGUgPzogc2xvdC0mZ3Q7Z21lbS5maWxlOwogCi0JZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZmlsZS0mZ3Q7Zl9tYXBwaW5nKTsKLQlfX2t2bV9nbWVtX3VuYmluZChzbG90LCBmaWxlLSZndDtwcml2YXRlX2RhdGEpOwotCWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZmlsZS0mZ3Q7Zl9tYXBwaW5nKTsKJiM0MzsJLyoKJiM0MzsJICogVGFrZSB0aGUgaW52YWxpZGF0ZSBsb2NrIGV2ZW4gZm9yIGEgZHlpbmcgZmlsZS4gIE90aGVyd2lzZSwKJiM0MzsJICoga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpIGNhbiBmaW5kIHRoZSBiaW5kaW5nIGFuZCBpbmNyZW1lbnQKJiM0MzsJICogbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3Mgd2hpbGUga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoKSBtaXNzZXMKJiM0MzsJICogdGhlIHJlbW92ZWQgYmluZGluZyBhbmQgc2tpcHMgZGVjcmVtZW50LgomIzQzOwkgKi8KJiM0MzsJZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZ21lbV9maWxlLSZndDtmX21hcHBpbmcpOwomIzQzOwlfX2t2bV9nbWVtX3VuYmluZChzbG90LCBnbWVtX2ZpbGUtJmd0O3ByaXZhdGVfZGF0YSk7CiYjNDM7CWZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZ21lbV9maWxlLSZndDtmX21hcHBpbmcpOwogfQogCiAvKiBSZXR1cm5zIGEgbG9ja2VkIGZvbGlvIG9uIHN1Y2Nlc3MuICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4MgoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiA4NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IEZpbGUgVW5iaW5kaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBhIGZldyBmaWxlcy4gVGhlIGNoYW5nZXMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCBkaXJlY3RvcnkgYXJlIGp1c3QgdGVzdCB1cGRhdGVzLCBzbyB0aGV5JiMzOTtyZSBub3QgdGhlIGNvcmUgb2Ygd2hhdCYjMzk7cyBpbnRlcmVzdGluZyBoZXJlLiBUaGUgcmVhbCBtZWF0IGlzIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4KClRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGt2bV9nbWVtX3VuYmluZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgc2NlbmFyaW8gYmVpbmcgYWRkcmVzc2VkLCB3aGVyZSB0aGUgdW5kZXJseWluZyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGd1ZXN0IG1lbW9yeSBzbG90IG1pZ2h0IGJlIGluIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIGZvciBgZmlsZWAgYmVpbmcgTlVMTC4gSWYgaXQgd2FzLCBtZWFuaW5nIHRoZSBmaWxlIHdhcyBjbG9zaW5nLCBpdCB3b3VsZCBkZXJlZmVyZW5jZSBgc2xvdC0mZ3Q7Z21lbS5maWxlYCBpbW1lZGlhdGVseSBhbmQgY2FsbCBgX19rdm1fZ21lbV91bmJpbmRgLiBIb3dldmVyLCBpdCBza2lwcGVkIHRoZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgLgoKVGhlIGZpeCBpbnRyb2R1Y2VzIGEgbG9jYWwgYGdtZW1fZmlsZWAgdmFyaWFibGUgYW5kIHVzZXMgZWl0aGVyIHRoZSBwb3RlbnRpYWxseS1OVUxMIGBmaWxlYCBmcm9tIHRoZSBjaGVjayBvciBgc2xvdC0mZ3Q7Z21lbS5maWxlYCBpbiBjYXNlIGBmaWxlYCBpcyBOVUxMLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIHBhdGNoIG5vdyAqYWx3YXlzKiBhY3F1aXJlcyB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBiZWZvcmUgY2FsbGluZyBgX19rdm1fZ21lbV91bmJpbmRgLCBldmVuIGlmIHRoZSBmaWxlIGlzIGJlaW5nIGNsb3NlZC4KClRoaXMgaXMgYWxsIGFib3V0IHByZXZlbnRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIEtWTSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGxvY2sgaXMgbmVlZGVkIGJlY2F1c2UgYGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKWAgbWlnaHQgYmUgY29uY3VycmVudGx5IGluY3JlbWVudGluZyBgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3NgLCB3aGlsZSB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHJlbW92ZSB0aGUgYmluZGluZy4gV2l0aG91dCB0aGUgbG9jaywgYGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKClgIGNvdWxkIG1pc3MgdGhlIHJlbW92ZWQgYmluZGluZyBhbmQgZmFpbCB0byBkZWNyZW1lbnQgdGhlIGNvdW50ZXIsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgcmVzb3VyY2UgbGVhayBvciwgd29yc2UsIGluY29ycmVjdCBtZW1vcnkgYWNjZXNzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgY29uY3VycmVuY3kgaXNzdWUsIGEgbG9ja2luZyBwcm9ibGVtLCBub3QgYSBtZW1vcnkgc2FmZXR5IG9uZS4gSSBjYW4gY29uZmlybSB0aGlzIGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgaW5mb3JtYXRpb24gbGVhay4gS0FTQU4vTE9DS0RFUC9ldGMuIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgY2F0Y2hpbmcgc2ltaWxhciBpc3N1ZXMsIG9yIGl0IGNvdWxkIGJlIGEgc2ltcGxlIGxvZ2ljYWwgYnVnLiBTbywgY29uc2lkZXJpbmcgdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUsIHRoaXMgZG9lc24mIzM5O3Qgd2FycmFudCBOZWVkc0tNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gZ3Vlc3RfbWVtZmQgc2VsZnRlc3RzIGFuZCBmaXhlcyBhIGxvY2tpbmcvY29uY3VycmVuY3kgYnVnIGluIGBrdm1fZ21lbV91bmJpbmRgIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gVGhlIGJ1ZyBmaXggZW5zdXJlcyB0aGF0IGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgaXMgdGFrZW4gZXZlbiB3aGVuIHRoZSBmaWxlIGlzIGR5aW5nLCBwcmV2ZW50aW5nIGEgbWlzbWF0Y2ggaW4gYG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzYCBpbmNyZW1lbnRzL2RlY3JlbWVudHMuIFRoaXMgaXMgYSBsb2dpYy9jb25jdXJyZW5jeSBpc3N1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0gZ3Vlc3RfbWVtZmQgc2VsZnRlc3RzIGFuZCBmaXhlcyBhIGxvY2tpbmcvY29uY3VycmVuY3kgYnVnIGluIGBrdm1fZ21lbV91bmJpbmRgIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gVGhlIGJ1ZyBmaXggZW5zdXJlcyB0aGF0IGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgaXMgdGFrZW4gZXZlbiB3aGVuIHRoZSBmaWxlIGlzIGR5aW5nLCBwcmV2ZW50aW5nIGEgbWlzbWF0Y2ggaW4gYG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzYCBpbmNyZW1lbnRzL2RlY3JlbWVudHMuIFRoaXMgaXMgYSBsb2dpYy9jb25jdXJyZW5jeSBpc3N1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQzOjQwLjgzMTAwNjQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5OTk2ODU0OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX3VuYmluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIGd1ZXN0X21lbWZkIHNlbGZ0ZXN0cyBhbmQgZml4ZXMgYSBsb2NraW5nL2NvbmN1cnJlbmN5IGJ1ZyBpbiBga3ZtX2dtZW1fdW5iaW5kYCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIFRoZSBidWcgZml4IGVuc3VyZXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIGlzIHRha2VuIGV2ZW4gd2hlbiB0aGUgZmlsZSBpcyBkeWluZywgcHJldmVudGluZyBhIG1pc21hdGNoIGluIGBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzc2AgaW5jcmVtZW50cy9kZWNyZW1lbnRzLiBUaGlzIGlzIGEgbG9naWMvY29uY3VycmVuY3kgaXNzdWUsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhay4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGt2bV9nbWVtX3VuYmluZGAgd2hlbiBhIGd1ZXN0X21lbWZkIGZpbGUgaXMgYmVpbmcgY2xvc2VkIGJ5IGVuc3VyaW5nIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgdGFrZW4gZXZlbiBmb3IgZHlpbmcgZmlsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NDM6NDAuODMxMDE0NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDg5NjE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDEzMmNjZWY5MTA0OWU2ZGY3MjJhYzBjM2E5MjI4YWFhM2RlMTUwOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTM6NDM6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcXG5pbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXFxuQEAgLTc2LDMzICs3Niw1MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21tYXBfc3VwcG9ydGVkKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcXG4gfVxcbiBcXG4rLypcXG4rICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLlxcbisgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIG1hc2sgY29udGFpbnMgZmV3ZXIgdGhhbiBAbnJfbmlkcyBub2Rlcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5pZDtcXG4rXFx0aW50IG5yX2ZvdW5kID0gMDtcXG4rXFxuK1xcdGZvcl9lYWNoX3NldF9iaXQobmlkLCBcXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7XFxuK1xcdFxcdG5pZHNbbnJfZm91bmQrK10gPSBuaWQ7XFxuK1xcdFxcdGlmIChucl9mb3VuZCA9PSBucl9uaWRzKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIHtcXG4tXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBub2RlbWFzaywgYmluZF9ub2RlbWFzaztcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gQklUU19QRVJfVFlQRShub2RlbWFzaykgKyAxO1xcbiBcXHRpbnQgcG9saWN5O1xcbiBcXHRjaGFyICptZW07XFxuK1xcdGludCBuaWQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcXG4rXFx0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhcXHUwMDI2bmlkLCAxKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0YmluZF9ub2RlbWFzayA9IDFVTCBcXHUwMDNjXFx1MDAzYyBuaWQ7XFxuIFxcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcXG4gXFxuIFxcdC8qIFRlc3QgTVBPTF9JTlRFUkxFQVZFIHBvbGljeSAqL1xcbi1cXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFxcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9nZXRfbWVtcG9saWN5KFxcdTAwMjZwb2xpY3ksIFxcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7XFxuLVxcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXFx1MDAyNlxcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcXG4rXFx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcXHUwMDI2XFx1MDAyNiBub2RlbWFzayA9PSBiaW5kX25vZGVtYXNrLFxcbiBcXHRcXHQgICAgXFxcIldhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcXFwiLFxcbi1cXHRcXHQgICAgTVBPTF9JTlRFUkxFQVZFLCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcXG4rXFx0XFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XFxuIFxcbiBcXHQvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi9cXG4tXFx0a3ZtX21iaW5kKG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQobWVtICsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9nZXRfbWVtcG9saWN5KFxcdTAwMjZwb2xpY3ksIFxcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtICsgcGFnZV9zaXplICogMiwgTVBPTF9GX0FERFIpO1xcbi1cXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFxcdTAwMjZcXHUwMDI2IG5vZGVtYXNrID09IG5vZGVtYXNrXzAsXFxuK1xcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXFx1MDAyNlxcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcXG4gXFx0XFx0ICAgIFxcXCJXYW50ZWQgTVBPTF9CSU5EICgldSkgYW5kIG5vZGVtYXNrIDB4JWx4LCBnb3QgJXUgYW5kIDB4JWx4XFxcIixcXG4tXFx0XFx0ICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XFxuK1xcdFxcdCAgICBNUE9MX0JJTkQsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogVGVzdCBNUE9MX0RFRkFVTFQgcG9saWN5ICovXFxuIFxcdGt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7XFxuQEAgLTExMiw3ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcdFxcdCAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovXFxuLVxcdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFxcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcXG4rXFx0cmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgXFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xcbiBcXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVkFMLFxcbiBcXHRcXHQgICAgXFxcIm1iaW5kIHdpdGggaW52YWxpZCBwb2xpY3kgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUxcXFwiKTtcXG4gXFxuQEAgLTEyMSwxNyArMTQxLDE5IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcXG4gXFxuIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqL1xcbi1cXHR1bnNpZ25lZCBsb25nIG5vZGUxX21hc2sgPSAyOyAgLyogTm9kZSAxICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IDg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICsgMTtcXG4gXFx0dm9pZCAqcGFnZXNbNF07XFxuK1xcdGludCBuaWRzWzJdO1xcbiBcXHRpbnQgc3RhdHVzWzRdO1xcbiBcXHRjaGFyICptZW07XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXFxuK1xcdGlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGJpbmRfbm9kZW1hc2tzWzBdID0gMVVMIFxcdTAwM2NcXHUwMDNjIG5pZHNbMF07XFxuK1xcdGJpbmRfbm9kZW1hc2tzWzFdID0gMVVMIFxcdTAwM2NcXHUwMDNjIG5pZHNbMV07XFxuIFxcdG1lbSA9IGt2bV9tbWFwKHRvdGFsX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA0OyBpKyspXFxuQEAgLTEzOSwzNCArMTYxLDQyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXFxuIFxcbiBcXHQvKiBTZXQgTlVNQSBwb2xpY3kgYWZ0ZXIgYWxsb2NhdGlvbiAqL1xcbiBcXHRtZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XFxuK1xcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XFxuIFxcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgcGFnZV9zaXplKTtcXG4gXFxuIFxcdC8qIFNldCBOVU1BIHBvbGljeSBiZWZvcmUgYWxsb2NhdGlvbiAqL1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XFxuIFxcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xcbiBcXG4gXFx0LyogVmFsaWRhdGUgaWYgcGFnZXMgYXJlIGFsbG9jYXRlZCBvbiBzcGVjaWZpZWQgTlVNQSBub2RlcyAqL1xcbiBcXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IDEsIFxcXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1swXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSAxLCBcXFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbMV0pO1xcbi1cXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gMCwgXFxcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXFxcIiwgc3RhdHVzWzJdKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IDAsIFxcXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1szXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSBuaWRzWzFdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMV0sIHN0YXR1c1swXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1sxXSA9PSBuaWRzWzFdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMV0sIHN0YXR1c1sxXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSBuaWRzWzBdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMF0sIHN0YXR1c1syXSk7XFxuK1xcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSBuaWRzWzBdLFxcbitcXHRcXHQgICAgXFxcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIG5pZHNbMF0sIHN0YXR1c1szXSk7XFxuIFxcbiBcXHQvKiBQdW5jaCBob2xlIGZvciBhbGwgcGFnZXMgKi9cXG4gXFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCB0b3RhbF9zaXplKTtcXG4gXFxuIFxcdC8qIENoYW5nZSBOVU1BIHBvbGljeSBub2RlcyBhbmQgcmVhbGxvY2F0ZSAqL1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xcbi1cXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNm5vZGUxX21hc2ssIG1heG5vZGUsIDApO1xcbitcXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcXG4rXFx0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFxcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XFxuIFxcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xcbiBcXG4gXFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCBcXFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbMF0pO1xcbi1cXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMCwgXFxcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXFxcIiwgc3RhdHVzWzFdKTtcXG4tXFx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsIFxcXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFxcXCIsIHN0YXR1c1syXSk7XFxuLVxcdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCBcXFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBzdGF0dXNbM10pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1swXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzBdLCBzdGF0dXNbMF0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzBdLCBzdGF0dXNbMV0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDIgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzFdLCBzdGF0dXNbMl0pO1xcbitcXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1sxXSxcXG4rXFx0XFx0ICAgIFxcXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAlZCwgZ290IGl0IG9uIG5vZGUgJWRcXFwiLCBuaWRzWzFdLCBzdGF0dXNbM10pO1xcbiBcXG4gXFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcXG5pbmRleCAyOTU3MmE2ZDc4OWNkLi40YmJiZjMxNGU5ZDc3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcXG5AQCAtNCw4ICs0LDYgQEBcXG4gI2lmbmRlZiBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcXG4gI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcXG4gXFxuLSNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4tXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJrdm1fc3lzY2FsbHMuaFxcXCJcXG5AQCAtMzAsNTQgKzI4LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXFxuIFxcdFxcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXFxuIFxcdFxcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZ2V0X21heF9udW1hX25vZGUodm9pZClcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9udW1hX21lbV9ub2Rlcyh2b2lkKVxcbiB7XFxuLVxcdHN0cnVjdCBkaXJlbnQgKmRlO1xcbi1cXHRpbnQgbWF4X25vZGUgPSAwO1xcbi1cXHRESVIgKmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogQXNzdW1lIHRoZXJlJ3MgYSBzaW5nbGUgbm9kZSBpZiB0aGUga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBOVU1BLFxcbi1cXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXFxuLVxcdCAqL1xcbi1cXHRkID0gb3BlbmRpcihcXFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlXFxcIik7XFxuLVxcdGlmICghZClcXG4rXFx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xcbitcXHRpZiAoZ2V0X21lbXBvbGljeShOVUxMLCBcXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBOVUxMLFxcbitcXHRcXHRcXHQgIE1QT0xfRl9NRU1TX0FMTE9XRUQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7XFxuLVxcdFxcdGludCBub2RlX2lkO1xcbi1cXHRcXHRjaGFyICplbmRwdHI7XFxuLVxcbi1cXHRcXHRpZiAoc3RybmNtcChkZS1cXHUwMDNlZF9uYW1lLCBcXFwibm9kZVxcXCIsIDQpICE9IDApXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0bm9kZV9pZCA9IHN0cnRvbChkZS1cXHUwMDNlZF9uYW1lICsgNCwgXFx1MDAyNmVuZHB0ciwgMTApO1xcbi1cXHRcXHRpZiAoKmVuZHB0ciAhPSAnXFxcXDAnKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGlmIChub2RlX2lkIFxcdTAwM2UgbWF4X25vZGUpXFxuLVxcdFxcdFxcdG1heF9ub2RlID0gbm9kZV9pZDtcXG4tXFx0fVxcbi1cXHRjbG9zZWRpcihkKTtcXG4tXFxuLVxcdHJldHVybiBtYXhfbm9kZTtcXG4tfVxcbi1cXG4tc3RhdGljIGJvb2wgaXNfbnVtYV9hdmFpbGFibGUodm9pZClcXG4te1xcbi1cXHQvKlxcbi1cXHQgKiBQcm9iZSBmb3IgTlVNQSBieSBkb2luZyBhIGR1bW15IGdldF9tZW1wb2xpY3koKS4gIElmIHRoZSBzeXNjYWxsXFxuLVxcdCAqIGZhaWxzIHdpdGggRU5PU1lTLCB0aGVuIHRoZSBrZXJuZWwgd2FzIGJ1aWx0IHdpdGhvdXQgTlVNQSBzdXBwb3J0Llxcbi1cXHQgKiBpZiB0aGUgc3lzY2FsbCBmYWlscyB3aXRoIEVQRVJNLCB0aGVuIHRoZSBwcm9jZXNzL3VzZXIgbGFja3MgdGhlXFxuLVxcdCAqIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMgKENBUF9TWVNfTklDRSkuXFxuLVxcdCAqL1xcbi1cXHRyZXR1cm4gIWdldF9tZW1wb2xpY3koTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCkgfHxcXG4tXFx0XFx0KGVycm5vICE9IEVOT1NZUyBcXHUwMDI2XFx1MDAyNiBlcnJubyAhPSBFUEVSTSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKHZvaWQpXFxuLXtcXG4tXFx0cmV0dXJuIGlzX251bWFfYXZhaWxhYmxlKCkgXFx1MDAyNlxcdTAwMjYgZ2V0X21heF9udW1hX25vZGUoKSBcXHUwMDNlPSAxO1xcbitcXHRyZXR1cm4gbm9kZW1hc2s7XFxuIH1cXG4gXFxuICNlbmRpZiAvKiBTRUxGVEVTVF9LVk1fTlVNQUlGX0ggKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXFxuaW5kZXggMzljZTlhOTM2OWY1Yi4uNjZkY2YzNjM5OGFhYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcXG5AQCAtMjUxLDggKzI1MSw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxcbiBcXHRcXHQgICB1NjQgKnBpcGlzX3JjdmQpXFxuIHtcXG4gXFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tzaXplb2Yobm9kZW1hc2spICogOF07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2s7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcXG4gXFx0aW50IG5vZGVzID0gMDtcXG4gXFx0dGltZV90IHN0YXJ0X3RpbWUsIGxhc3RfdXBkYXRlLCBub3c7XFxuIFxcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcXG5AQCAtMjY2LDE5ICsyNjYsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXFxuIFxcdGZwcmludGYoc3RkZXJyLCBcXFwiQ2FsbGluZyBtaWdyYXRlX3BhZ2VzIGV2ZXJ5ICVkIG1pY3Jvc2Vjb25kc1xcXFxuXFxcIixcXG4gXFx0XFx0ZGVsYXlfdXNlY3MpO1xcbiBcXG4tXFx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xcbi1cXHRrdm1fZ2V0X21lbXBvbGljeShOVUxMLCBcXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxcbi1cXHRcXHRcXHQgIDAsIE1QT0xfRl9NRU1TX0FMTE9XRUQpO1xcbitcXHRub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xcbiBcXG4gXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJOdW1hIG5vZGVzIGZvdW5kIGFtb25nc3QgZmlyc3QgJWx1IHBvc3NpYmxlIG5vZGVzIFxcXCJcXG4gXFx0XFx0XFxcIihlYWNoIDEtYml0IGluZGljYXRlcyBub2RlIGlzIHByZXNlbnQpOiAlI2x4XFxcXG5cXFwiLFxcbi1cXHRcXHRzaXplb2Yobm9kZW1hc2spICogOCwgbm9kZW1hc2spO1xcbitcXHRcXHRCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgbm9kZW1hc2spO1xcbiBcXG4gXFx0LyogSW5pdCBhcnJheSBvZiBtYXNrcyBjb250YWluaW5nIGEgc2luZ2xlLWJpdCBpbiBlYWNoLCBvbmUgZm9yIGVhY2hcXG4gXFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcXG4gXFx0ICogYXMgYml0IG1hc2tzLlxcbiBcXHQgKi9cXG4tXFx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcXHUwMDNjIHNpemVvZihub2RlbWFzaykgKiA4OyBpKyssIGJpdCBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbitcXHRmb3IgKGkgPSAwLCBiaXQgPSAxOyBpIFxcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkrKywgYml0IFxcdTAwM2NcXHUwMDNjPSAxKSB7XFxuIFxcdFxcdGlmIChub2RlbWFzayBcXHUwMDI2IGJpdCkge1xcbiBcXHRcXHRcXHRub2RlbWFza3Nbbm9kZXNdID0gbm9kZW1hc2sgXFx1MDAyNiBiaXQ7XFxuIFxcdFxcdFxcdG5vZGVzKys7XFxuQEAgLTMxMCw3ICszMDgsNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcXG4gXFx0XFx0ICogS1ZNX0NSRUFURV9WQ1BVIGlvY3RsLiBJZiB0aGF0IGFzc3VtcHRpb24gZXZlciBjaGFuZ2VzIHRoaXNcXG4gXFx0XFx0ICogdGVzdCBtYXkgYnJlYWsgb3IgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlIHNpZ25hbC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgc2l6ZW9mKG5vZGVtYXNrc1tmcm9tXSksXFxuK1xcdFxcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgQklUU19QRVJfVFlQRShub2RlbWFza3NbZnJvbV0pICsgMSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVtYXNrc1tmcm9tXSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVtYXNrc1t0b10pO1xcbiBcXHRcXHRpZiAocGFnZXNfbm90X21vdmVkIFxcdTAwM2MgMClcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG5pbmRleCBmMGU1ZGE0OTA4NjYwLi5mODQ4MTIwYWY4NGJlIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuQEAgLTcyMSw2ICs3MjEsOCBAQCBzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKVxcbiBcXG4gdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4ge1xcbitcXHRzdHJ1Y3QgZmlsZSAqZ21lbV9maWxlO1xcbitcXG4gXFx0LypcXG4gXFx0ICogTm90aGluZyB0byBkbyBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHdhcyBfYWxyZWFkeV8gY2xvc2VkLCBhc1xcbiBcXHQgKiBrdm1fZ21lbV9yZWxlYXNlKCkgaW52YWxpZGF0ZXMgYW5kIG51bGxpZmllcyBhbGwgYmluZGluZ3MuXFxuQEAgLTczMywyMSArNzM1LDI0IEBAIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuIFxcdC8qXFxuIFxcdCAqIEhvd2V2ZXIsIGlmIHRoZSBmaWxlIGlzIF9iZWluZ18gY2xvc2VkLCB0aGVuIHRoZSBiaW5kaW5ncyBuZWVkIHRvIGJlXFxuIFxcdCAqIHJlbW92ZWQgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG1pZ2h0IG5vdCBydW4gdW50aWwgYWZ0ZXIgdGhlIG1lbXNsb3RcXG4tXFx0ICogaXMgZnJlZWQuICBOb3RlLCBtb2RpZnlpbmcgdGhlIGJpbmRpbmdzIGlzIHNhZmUgZXZlbiB0aG91Z2ggdGhlIGZpbGVcXG4tXFx0ICogaXMgZHlpbmcgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LVxcdTAwM2VnbWVtLmZpbGUgdW5kZXJcXG4rXFx0ICogaXMgZnJlZWQuICBOb3RlLCBkZXJlZmVyZW5jaW5nIHRoZSBkeWluZyBmaWxlIGlzIHNhZmUgYXNcXG4rXFx0ICoga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LVxcdTAwM2VnbWVtLmZpbGUgdW5kZXJcXG4gXFx0ICogc2xvdHNfbG9jaywgYW5kIG9ubHkgcHV0cyBpdHMgcmVmZXJlbmNlIHRvIEtWTSBhZnRlciBkZXN0cm95aW5nIGFsbFxcbiBcXHQgKiBiaW5kaW5ncy4gIEkuZS4gcmVhY2hpbmcgdGhpcyBwb2ludCBtZWFucyBrdm1fZ21lbV9yZWxlYXNlKCkgaGFzbid0XFxuIFxcdCAqIHlldCBkZXN0cm95ZWQgdGhlIGJpbmRpbmdzIG9yIGZyZWVkIHRoZSBnbWVtX2ZpbGUsIGFuZCBjYW4ndCBkbyBzb1xcbiBcXHQgKiB1bnRpbCB0aGUgY2FsbGVyIGRyb3BzIHNsb3RzX2xvY2suXFxuIFxcdCAqL1xcbi1cXHRpZiAoIWZpbGUpIHtcXG4tXFx0XFx0X19rdm1fZ21lbV91bmJpbmQoc2xvdCwgc2xvdC1cXHUwMDNlZ21lbS5maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0Z21lbV9maWxlID0gZmlsZSA/OiBzbG90LVxcdTAwM2VnbWVtLmZpbGU7XFxuIFxcbi1cXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhmaWxlLVxcdTAwM2VmX21hcHBpbmcpO1xcbi1cXHRfX2t2bV9nbWVtX3VuYmluZChzbG90LCBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbi1cXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuK1xcdC8qXFxuK1xcdCAqIFRha2UgdGhlIGludmFsaWRhdGUgbG9jayBldmVuIGZvciBhIGR5aW5nIGZpbGUuICBPdGhlcndpc2UsXFxuK1xcdCAqIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKSBjYW4gZmluZCB0aGUgYmluZGluZyBhbmQgaW5jcmVtZW50XFxuK1xcdCAqIG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzIHdoaWxlIGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKCkgbWlzc2VzXFxuK1xcdCAqIHRoZSByZW1vdmVkIGJpbmRpbmcgYW5kIHNraXBzIGRlY3JlbWVudC5cXG4rXFx0ICovXFxuK1xcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGdtZW1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG4rXFx0X19rdm1fZ21lbV91bmJpbmQoc2xvdCwgZ21lbV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpO1xcbitcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGdtZW1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG4gfVxcbiBcXG4gLyogUmV0dXJucyBhIGxvY2tlZCBmb2xpbyBvbiBzdWNjZXNzLiAgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NDM6NDEuMzQyNDc5NjYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDk3NDcwNTA1Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX3VuYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGt2bV9nbWVtX3VuYmluZGAgd2hlbiBhIGd1ZXN0X21lbWZkIGZpbGUgaXMgYmVpbmcgY2xvc2VkIGJ5IGVuc3VyaW5nIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgdGFrZW4gZXZlbiBmb3IgZHlpbmcgZmlsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTMyY2NlZjkxMDQ5ZTZkZjcyMmFjMGMzYTkyMjhhYWEzZGUxNTA5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDEzOjQzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmNcbmluZGV4IDIyMzNkODcxYTM4ZjQuLmFlZTgwZGRhNjIyOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG5AQCAtNzYsMzMgKzc2LDUzIEBAIHN0YXRpYyB2b2lkIHRlc3RfbW1hcF9zdXBwb3J0ZWQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcdGt2bV9tdW5tYXAobWVtLCB0b3RhbF9zaXplKTtcbiB9XG4gXG4rLypcbisgKiBGaWxsIEBuaWRzIHdpdGggdGhlIGZpcnN0IEBucl9uaWRzIG5vZGVzIGluIHRoZSBhbGxvd2VkIG1hc2suXG4rICogUmV0dXJuIGZhbHNlIGlmIHRoZSBtYXNrIGNvbnRhaW5zIGZld2VyIHRoYW4gQG5yX25pZHMgbm9kZXMuXG4rICovXG4rc3RhdGljIGJvb2wgZ2V0X251bWFfbm9kZV9pZHMoaW50ICpuaWRzLCBpbnQgbnJfbmlkcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gZ2V0X251bWFfbWVtX25vZGVzKCk7XG4rXHR1bnNpZ25lZCBsb25nIG5pZDtcbitcdGludCBucl9mb3VuZCA9IDA7XG4rXG4rXHRmb3JfZWFjaF9zZXRfYml0KG5pZCwgXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spKSB7XG4rXHRcdG5pZHNbbnJfZm91bmQrK10gPSBuaWQ7XG4rXHRcdGlmIChucl9mb3VuZCA9PSBucl9uaWRzKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4ge1xuLVx0Y29uc3QgdW5zaWduZWQgbG9uZyBub2RlbWFza18wID0gMTsgLyogbmlkOiAwICovXG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spO1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFzaywgYmluZF9ub2RlbWFzaztcbitcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUobm9kZW1hc2spICsgMTtcbiBcdGludCBwb2xpY3k7XG4gXHRjaGFyICptZW07XG4rXHRpbnQgbmlkO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSgpKVxuK1x0aWYgKCFnZXRfbnVtYV9ub2RlX2lkcyhcdTAwMjZuaWQsIDEpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRiaW5kX25vZGVtYXNrID0gMVVMIFx1MDAzY1x1MDAzYyBuaWQ7XG4gXHRtZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7XG4gXG4gXHQvKiBUZXN0IE1QT0xfSU5URVJMRUFWRSBwb2xpY3kgKi9cbi1cdGt2bV9tYmluZChtZW0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfSU5URVJMRUFWRSwgXHUwMDI2bm9kZW1hc2tfMCwgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0a3ZtX2dldF9tZW1wb2xpY3koXHUwMDI2cG9saWN5LCBcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtLCBNUE9MX0ZfQUREUik7XG4tXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9JTlRFUkxFQVZFIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBub2RlbWFza18wLFxuK1x0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcbiBcdFx0ICAgIFwiV2FudGVkIE1QT0xfSU5URVJMRUFWRSAoJXUpIGFuZCBub2RlbWFzayAweCVseCwgZ290ICV1IGFuZCAweCVseFwiLFxuLVx0XHQgICAgTVBPTF9JTlRFUkxFQVZFLCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcbitcdFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IGJhc2ljIE1QT0xfQklORCBwb2xpY3kgKi9cbi1cdGt2bV9tYmluZChtZW0gKyBwYWdlX3NpemUgKiAyLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKG1lbSArIHBhZ2Vfc2l6ZSAqIDIsIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZ2V0X21lbXBvbGljeShcdTAwMjZwb2xpY3ksIFx1MDAyNm5vZGVtYXNrLCBtYXhub2RlLCBtZW0gKyBwYWdlX3NpemUgKiAyLCBNUE9MX0ZfQUREUik7XG4tXHRURVNUX0FTU0VSVChwb2xpY3kgPT0gTVBPTF9CSU5EIFx1MDAyNlx1MDAyNiBub2RlbWFzayA9PSBub2RlbWFza18wLFxuK1x0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gYmluZF9ub2RlbWFzayxcbiBcdFx0ICAgIFwiV2FudGVkIE1QT0xfQklORCAoJXUpIGFuZCBub2RlbWFzayAweCVseCwgZ290ICV1IGFuZCAweCVseFwiLFxuLVx0XHQgICAgTVBPTF9CSU5ELCBub2RlbWFza18wLCBwb2xpY3ksIG5vZGVtYXNrKTtcbitcdFx0ICAgIE1QT0xfQklORCwgYmluZF9ub2RlbWFzaywgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IE1QT0xfREVGQVVMVCBwb2xpY3kgKi9cbiBcdGt2bV9tYmluZChtZW0sIHRvdGFsX3NpemUsIE1QT0xfREVGQVVMVCwgTlVMTCwgMCwgMCk7XG5AQCAtMTEyLDcgKzEzMiw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfbWJpbmQoaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcdFx0ICAgIE1QT0xfREVGQVVMVCwgcG9saWN5LCBub2RlbWFzayk7XG4gXG4gXHQvKiBUZXN0IHdpdGggaW52YWxpZCBwb2xpY3kgKi9cbi1cdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuK1x0cmV0ID0gbWJpbmQobWVtLCBwYWdlX3NpemUsIDk5OSwgXHUwMDI2YmluZF9ub2RlbWFzaywgbWF4bm9kZSwgMCk7XG4gXHRURVNUX0FTU0VSVChyZXQgPT0gLTEgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlZBTCxcbiBcdFx0ICAgIFwibWJpbmQgd2l0aCBpbnZhbGlkIHBvbGljeSBzaG91bGQgZmFpbCB3aXRoIEVJTlZBTFwiKTtcbiBcbkBAIC0xMjEsMTcgKzE0MSwxOSBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXG4gc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGUwX21hc2sgPSAxOyAgLyogTm9kZSAwICovXG4tXHR1bnNpZ25lZCBsb25nIG5vZGUxX21hc2sgPSAyOyAgLyogTm9kZSAxICovXG4tXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSA4O1xuK1x0dW5zaWduZWQgbG9uZyBiaW5kX25vZGVtYXNrc1syXTtcbitcdHVuc2lnbmVkIGxvbmcgbWF4bm9kZSA9IEJJVFNfUEVSX1RZUEUoYmluZF9ub2RlbWFza3NbMF0pICsgMTtcbiBcdHZvaWQgKnBhZ2VzWzRdO1xuK1x0aW50IG5pZHNbMl07XG4gXHRpbnQgc3RhdHVzWzRdO1xuIFx0Y2hhciAqbWVtO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcbitcdGlmICghZ2V0X251bWFfbm9kZV9pZHMobmlkcywgQVJSQVlfU0laRShuaWRzKSkpXG4gXHRcdHJldHVybjtcbiBcbitcdGJpbmRfbm9kZW1hc2tzWzBdID0gMVVMIFx1MDAzY1x1MDAzYyBuaWRzWzBdO1xuK1x0YmluZF9ub2RlbWFza3NbMV0gPSAxVUwgXHUwMDNjXHUwMDNjIG5pZHNbMV07XG4gXHRtZW0gPSBrdm1fbW1hcCh0b3RhbF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA0OyBpKyspXG5AQCAtMTM5LDM0ICsxNjEsNDIgQEAgc3RhdGljIHZvaWQgdGVzdF9udW1hX2FsbG9jYXRpb24oaW50IGZkLCBzaXplX3QgdG90YWxfc2l6ZSlcbiBcbiBcdC8qIFNldCBOVU1BIHBvbGljeSBhZnRlciBhbGxvY2F0aW9uICovXG4gXHRtZW1zZXQobWVtLCAweGFhLCBwYWdlX3NpemUpO1xuLVx0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4gXHRrdm1fZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIDAsIHBhZ2Vfc2l6ZSk7XG4gXG4gXHQvKiBTZXQgTlVNQSBwb2xpY3kgYmVmb3JlIGFsbG9jYXRpb24gKi9cbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMV9tYXNrLCBtYXhub2RlLCAwKTtcbi1cdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1sxXSwgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuIFx0bWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7XG4gXG4gXHQvKiBWYWxpZGF0ZSBpZiBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIHNwZWNpZmllZCBOVU1BIG5vZGVzICovXG4gXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAxLCBcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1swXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMSwgXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDAsIFwiRXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzJdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAwLCBcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1szXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1sxXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMV0sIHN0YXR1c1swXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1sxXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMV0sIHN0YXR1c1sxXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1swXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMF0sIHN0YXR1c1syXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1swXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMF0sIHN0YXR1c1szXSk7XG4gXG4gXHQvKiBQdW5jaCBob2xlIGZvciBhbGwgcGFnZXMgKi9cbiBcdGt2bV9mYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSwgMCwgdG90YWxfc2l6ZSk7XG4gXG4gXHQvKiBDaGFuZ2UgTlVNQSBwb2xpY3kgbm9kZXMgYW5kIHJlYWxsb2NhdGUgKi9cbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMF9tYXNrLCBtYXhub2RlLCAwKTtcbi1cdGt2bV9tYmluZChwYWdlc1syXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlMV9tYXNrLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZiaW5kX25vZGVtYXNrc1swXSwgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMV0sIG1heG5vZGUsIDApO1xuIFx0bWVtc2V0KG1lbSwgMHhhYSwgdG90YWxfc2l6ZSk7XG4gXG4gXHRrdm1fbW92ZV9wYWdlcygwLCA0LCBwYWdlcywgTlVMTCwgc3RhdHVzLCAwKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1swXSA9PSAwLCBcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1swXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gMCwgXCJFeHBlY3RlZCBwYWdlIDEgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMV0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IDEsIFwiRXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzJdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1szXSA9PSAxLCBcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1szXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gbmlkc1swXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAwIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMF0sIHN0YXR1c1swXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMV0gPT0gbmlkc1swXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMF0sIHN0YXR1c1sxXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbMl0gPT0gbmlkc1sxXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAyIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMV0sIHN0YXR1c1syXSk7XG4rXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gbmlkc1sxXSxcbitcdFx0ICAgIFwiRXhwZWN0ZWQgcGFnZSAzIG9uIG5vZGUgJWQsIGdvdCBpdCBvbiBub2RlICVkXCIsIG5pZHNbMV0sIHN0YXR1c1szXSk7XG4gXG4gXHRrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7XG4gfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcbmluZGV4IDI5NTcyYTZkNzg5Y2QuLjRiYmJmMzE0ZTlkNzcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcbkBAIC00LDggKzQsNiBAQFxuICNpZm5kZWYgU0VMRlRFU1RfS1ZNX05VTUFJRl9IXG4gI2RlZmluZSBTRUxGVEVTVF9LVk1fTlVNQUlGX0hcbiBcbi0jaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuLVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbXBvbGljeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJrdm1fc3lzY2FsbHMuaFwiXG5AQCAtMzAsNTQgKzI4LDE2IEBAIEtWTV9TWVNDQUxMX0RFRklORShtYmluZCwgNiwgdm9pZCAqLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBzaXplLCBpbnQsIG1vZGUsXG4gXHRcdCAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiwgbm9kZW1hc2ssIHVuc2lnbmVkIGxvbmcsIG1heG5vZGUsXG4gXHRcdCAgIHVuc2lnbmVkIGludCwgZmxhZ3MpO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGdldF9tYXhfbnVtYV9ub2RlKHZvaWQpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9udW1hX21lbV9ub2Rlcyh2b2lkKVxuIHtcbi1cdHN0cnVjdCBkaXJlbnQgKmRlO1xuLVx0aW50IG1heF9ub2RlID0gMDtcbi1cdERJUiAqZDtcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xuIFxuLVx0Lypcbi1cdCAqIEFzc3VtZSB0aGVyZSdzIGEgc2luZ2xlIG5vZGUgaWYgdGhlIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgTlVNQSxcbi1cdCAqIG9yIGlmIG5vIG5vZGVzIGFyZSBmb3VuZC5cbi1cdCAqL1xuLVx0ZCA9IG9wZW5kaXIoXCIvc3lzL2RldmljZXMvc3lzdGVtL25vZGVcIik7XG4tXHRpZiAoIWQpXG4rXHQvKiBHZXQgc2V0IG9mIGZpcnN0IDY0IG51bWEgbm9kZXMgYXZhaWxhYmxlICovXG4rXHRpZiAoZ2V0X21lbXBvbGljeShOVUxMLCBcdTAwMjZub2RlbWFzaywgQklUU19QRVJfVFlQRShub2RlbWFzayksIE5VTEwsXG4rXHRcdFx0ICBNUE9MX0ZfTUVNU19BTExPV0VEKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkge1xuLVx0XHRpbnQgbm9kZV9pZDtcbi1cdFx0Y2hhciAqZW5kcHRyO1xuLVxuLVx0XHRpZiAoc3RybmNtcChkZS1cdTAwM2VkX25hbWUsIFwibm9kZVwiLCA0KSAhPSAwKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRub2RlX2lkID0gc3RydG9sKGRlLVx1MDAzZWRfbmFtZSArIDQsIFx1MDAyNmVuZHB0ciwgMTApO1xuLVx0XHRpZiAoKmVuZHB0ciAhPSAnXFwwJylcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKG5vZGVfaWQgXHUwMDNlIG1heF9ub2RlKVxuLVx0XHRcdG1heF9ub2RlID0gbm9kZV9pZDtcbi1cdH1cbi1cdGNsb3NlZGlyKGQpO1xuLVxuLVx0cmV0dXJuIG1heF9ub2RlO1xuLX1cbi1cbi1zdGF0aWMgYm9vbCBpc19udW1hX2F2YWlsYWJsZSh2b2lkKVxuLXtcbi1cdC8qXG4tXHQgKiBQcm9iZSBmb3IgTlVNQSBieSBkb2luZyBhIGR1bW15IGdldF9tZW1wb2xpY3koKS4gIElmIHRoZSBzeXNjYWxsXG4tXHQgKiBmYWlscyB3aXRoIEVOT1NZUywgdGhlbiB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRob3V0IE5VTUEgc3VwcG9ydC5cbi1cdCAqIGlmIHRoZSBzeXNjYWxsIGZhaWxzIHdpdGggRVBFUk0sIHRoZW4gdGhlIHByb2Nlc3MvdXNlciBsYWNrcyB0aGVcbi1cdCAqIG5lY2Vzc2FyeSBjYXBhYmlsaXRpZXMgKENBUF9TWVNfTklDRSkuXG4tXHQgKi9cbi1cdHJldHVybiAhZ2V0X21lbXBvbGljeShOVUxMLCBOVUxMLCAwLCBOVUxMLCAwKSB8fFxuLVx0XHQoZXJybm8gIT0gRU5PU1lTIFx1MDAyNlx1MDAyNiBlcnJubyAhPSBFUEVSTSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKHZvaWQpXG4te1xuLVx0cmV0dXJuIGlzX251bWFfYXZhaWxhYmxlKCkgXHUwMDI2XHUwMDI2IGdldF9tYXhfbnVtYV9ub2RlKCkgXHUwMDNlPSAxO1xuK1x0cmV0dXJuIG5vZGVtYXNrO1xuIH1cbiBcbiAjZW5kaWYgLyogU0VMRlRFU1RfS1ZNX05VTUFJRl9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG5pbmRleCAzOWNlOWE5MzY5ZjViLi42NmRjZjM2Mzk4YWFhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hhcGljX2lwaV90ZXN0LmNcbkBAIC0yNTEsOCArMjUxLDggQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRcdCAgIHU2NCAqcGlwaXNfcmN2ZClcbiB7XG4gXHRsb25nIHBhZ2VzX25vdF9tb3ZlZDtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2sgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBub2RlbWFza3Nbc2l6ZW9mKG5vZGVtYXNrKSAqIDhdO1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFzaztcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW0JJVFNfUEVSX1RZUEUobm9kZW1hc2spXTtcbiBcdGludCBub2RlcyA9IDA7XG4gXHR0aW1lX3Qgc3RhcnRfdGltZSwgbGFzdF91cGRhdGUsIG5vdztcbiBcdHRpbWVfdCBpbnRlcnZhbF9zZWNzID0gMTtcbkBAIC0yNjYsMTkgKzI2NiwxNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcbiBcdGZwcmludGYoc3RkZXJyLCBcIkNhbGxpbmcgbWlncmF0ZV9wYWdlcyBldmVyeSAlZCBtaWNyb3NlY29uZHNcXG5cIixcbiBcdFx0ZGVsYXlfdXNlY3MpO1xuIFxuLVx0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuLVx0a3ZtX2dldF9tZW1wb2xpY3koTlVMTCwgXHUwMDI2bm9kZW1hc2ssIHNpemVvZihub2RlbWFzaykgKiA4LFxuLVx0XHRcdCAgMCwgTVBPTF9GX01FTVNfQUxMT1dFRCk7XG4rXHRub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xuIFxuIFx0ZnByaW50ZihzdGRlcnIsIFwiTnVtYSBub2RlcyBmb3VuZCBhbW9uZ3N0IGZpcnN0ICVsdSBwb3NzaWJsZSBub2RlcyBcIlxuIFx0XHRcIihlYWNoIDEtYml0IGluZGljYXRlcyBub2RlIGlzIHByZXNlbnQpOiAlI2x4XFxuXCIsXG4tXHRcdHNpemVvZihub2RlbWFzaykgKiA4LCBub2RlbWFzayk7XG4rXHRcdEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBub2RlbWFzayk7XG4gXG4gXHQvKiBJbml0IGFycmF5IG9mIG1hc2tzIGNvbnRhaW5pbmcgYSBzaW5nbGUtYml0IGluIGVhY2gsIG9uZSBmb3IgZWFjaFxuIFx0ICogYXZhaWxhYmxlIG5vZGUuIG1pZ3JhdGVfcGFnZXMgY2FsbGVkIGJlbG93IHJlcXVpcmVzIHNwZWNpZnlpbmcgbm9kZXNcbiBcdCAqIGFzIGJpdCBtYXNrcy5cbiBcdCAqL1xuLVx0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2Mgc2l6ZW9mKG5vZGVtYXNrKSAqIDg7IGkrKywgYml0IFx1MDAzY1x1MDAzYz0gMSkge1xuK1x0Zm9yIChpID0gMCwgYml0ID0gMTsgaSBcdTAwM2MgQklUU19QRVJfVFlQRShub2RlbWFzayk7IGkrKywgYml0IFx1MDAzY1x1MDAzYz0gMSkge1xuIFx0XHRpZiAobm9kZW1hc2sgXHUwMDI2IGJpdCkge1xuIFx0XHRcdG5vZGVtYXNrc1tub2Rlc10gPSBub2RlbWFzayBcdTAwMjYgYml0O1xuIFx0XHRcdG5vZGVzKys7XG5AQCAtMzEwLDcgKzMwOCw3IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0XHQgKiBLVk1fQ1JFQVRFX1ZDUFUgaW9jdGwuIElmIHRoYXQgYXNzdW1wdGlvbiBldmVyIGNoYW5nZXMgdGhpc1xuIFx0XHQgKiB0ZXN0IG1heSBicmVhayBvciBnaXZlIGEgZmFsc2UgcG9zaXRpdmUgc2lnbmFsLlxuIFx0XHQgKi9cbi1cdFx0cGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBzaXplb2Yobm9kZW1hc2tzW2Zyb21dKSxcbitcdFx0cGFnZXNfbm90X21vdmVkID0gbWlncmF0ZV9wYWdlcygwLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrc1tmcm9tXSkgKyAxLFxuIFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVtYXNrc1tmcm9tXSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZub2RlbWFza3NbdG9dKTtcbiBcdFx0aWYgKHBhZ2VzX25vdF9tb3ZlZCBcdTAwM2MgMClcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggZjBlNWRhNDkwODY2MC4uZjg0ODEyMGFmODRiZSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC03MjEsNiArNzIxLDggQEAgc3RhdGljIHZvaWQgX19rdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgc3RydWN0IGdtZW1fZmlsZSAqZilcbiBcbiB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuIHtcbitcdHN0cnVjdCBmaWxlICpnbWVtX2ZpbGU7XG4rXG4gXHQvKlxuIFx0ICogTm90aGluZyB0byBkbyBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHdhcyBfYWxyZWFkeV8gY2xvc2VkLCBhc1xuIFx0ICoga3ZtX2dtZW1fcmVsZWFzZSgpIGludmFsaWRhdGVzIGFuZCBudWxsaWZpZXMgYWxsIGJpbmRpbmdzLlxuQEAgLTczMywyMSArNzM1LDI0IEBAIHZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4gXHQvKlxuIFx0ICogSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgX2JlaW5nXyBjbG9zZWQsIHRoZW4gdGhlIGJpbmRpbmdzIG5lZWQgdG8gYmVcbiBcdCAqIHJlbW92ZWQgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG1pZ2h0IG5vdCBydW4gdW50aWwgYWZ0ZXIgdGhlIG1lbXNsb3Rcbi1cdCAqIGlzIGZyZWVkLiAgTm90ZSwgbW9kaWZ5aW5nIHRoZSBiaW5kaW5ncyBpcyBzYWZlIGV2ZW4gdGhvdWdoIHRoZSBmaWxlXG4tXHQgKiBpcyBkeWluZyBhcyBrdm1fZ21lbV9yZWxlYXNlKCkgbnVsbGlmaWVzIHNsb3QtXHUwMDNlZ21lbS5maWxlIHVuZGVyXG4rXHQgKiBpcyBmcmVlZC4gIE5vdGUsIGRlcmVmZXJlbmNpbmcgdGhlIGR5aW5nIGZpbGUgaXMgc2FmZSBhc1xuK1x0ICoga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LVx1MDAzZWdtZW0uZmlsZSB1bmRlclxuIFx0ICogc2xvdHNfbG9jaywgYW5kIG9ubHkgcHV0cyBpdHMgcmVmZXJlbmNlIHRvIEtWTSBhZnRlciBkZXN0cm95aW5nIGFsbFxuIFx0ICogYmluZGluZ3MuICBJLmUuIHJlYWNoaW5nIHRoaXMgcG9pbnQgbWVhbnMga3ZtX2dtZW1fcmVsZWFzZSgpIGhhc24ndFxuIFx0ICogeWV0IGRlc3Ryb3llZCB0aGUgYmluZGluZ3Mgb3IgZnJlZWQgdGhlIGdtZW1fZmlsZSwgYW5kIGNhbid0IGRvIHNvXG4gXHQgKiB1bnRpbCB0aGUgY2FsbGVyIGRyb3BzIHNsb3RzX2xvY2suXG4gXHQgKi9cbi1cdGlmICghZmlsZSkge1xuLVx0XHRfX2t2bV9nbWVtX3VuYmluZChzbG90LCBzbG90LVx1MDAzZWdtZW0uZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4rXHRnbWVtX2ZpbGUgPSBmaWxlID86IHNsb3QtXHUwMDNlZ21lbS5maWxlO1xuIFxuLVx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuLVx0X19rdm1fZ21lbV91bmJpbmQoc2xvdCwgZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuLVx0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhmaWxlLVx1MDAzZWZfbWFwcGluZyk7XG4rXHQvKlxuK1x0ICogVGFrZSB0aGUgaW52YWxpZGF0ZSBsb2NrIGV2ZW4gZm9yIGEgZHlpbmcgZmlsZS4gIE90aGVyd2lzZSxcbitcdCAqIGt2bV9nbWVtX2ludmFsaWRhdGVfc3RhcnQoKSBjYW4gZmluZCB0aGUgYmluZGluZyBhbmQgaW5jcmVtZW50XG4rXHQgKiBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzcyB3aGlsZSBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZCgpIG1pc3Nlc1xuK1x0ICogdGhlIHJlbW92ZWQgYmluZGluZyBhbmQgc2tpcHMgZGVjcmVtZW50LlxuK1x0ICovXG4rXHRmaWxlbWFwX2ludmFsaWRhdGVfbG9jayhnbWVtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbitcdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEpO1xuK1x0ZmlsZW1hcF9pbnZhbGlkYXRlX3VubG9jayhnbWVtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbiB9XG4gXG4gLyogUmV0dXJucyBhIGxvY2tlZCBmb2xpbyBvbiBzdWNjZXNzLiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQzOjQxLjM0MjQ4NTcyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MTQ3MDI2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS1ZNIEd1ZXN0IE1lbWZkIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGEgZmV3IGZpbGVzOiBgZ3Vlc3RfbWVtZmRfdGVzdC5jYCwgYG51bWFpZi5oYCwgYHhhcGljX2lwaV90ZXN0LmNgLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIGBndWVzdF9tZW1mZC5jYC4gVGhlIGNoYW5nZXMgaW4gYGd1ZXN0X21lbWZkLmNgIGFyZSB3aGF0IEknbSBmb2N1c2luZyBvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIGEgYnVnIGZpeCBpbiB0aGUgYGt2bV9nbWVtX3VuYmluZGAgZnVuY3Rpb24sIHdoaWNoIGlzIGNvcmUgS1ZNIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBndWVzdCBtZW1mZC5cblxuVGhlIGdpc3Qgb2YgaXQgaXMgdGhpczogd2hlbiBhIGd1ZXN0IG1lbWZkIGZpbGUgaXMgYmVpbmcgY2xvc2VkLCBhbmQgdGhlIGBmaWxlYCBwb2ludGVyIGlzIG51bGwgKG1lYW5pbmcgdGhlIGZpbGUgaXMgZHlpbmcpIHRoZSBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIHdhc24ndCBiZWluZyB0YWtlbi4gIFRoaXMgaXMgYSBjcml0aWNhbCBvdmVyc2lnaHQuICBJZiB0aGF0IGxvY2sgaXNuJ3QgaGVsZCwgdGhlbiB0aGUgaW52YWxpZGF0ZSBsb2dpYyBjb3VsZCBnZXQgaW50byBhIHJhY2UgY29uZGl0aW9uLiBTcGVjaWZpY2FsbHksIGBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KClgIGNvdWxkIHNlZSBhbiBhY3RpdmUgYmluZGluZywgaW5jcmVtZW50aW5nIGEgY291bnRlciwgd2hpbGUgYGt2bV9nbWVtX2ludmFsaWRhdGVfZW5kKClgIG1pZ2h0IG1pc3MgdGhlIHVuYmluZGluZywgbGVhdmluZyB0aGF0IGNvdW50ZXIgdW5iYWxhbmNlZC4gIFRoaXMgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgaXNzdWVzLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcyBieSBlbnN1cmluZyB0aGF0IHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgYWx3YXlzIHRha2VuIGJlZm9yZSB1bmJpbmRpbmcgdGhlIGd1ZXN0IG1lbWZkIHNsb3QsIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBmaWxlIGlzIGJlaW5nIGNsb3NlZC4gVGhlIGxvZ2ljIG5vdyB1c2VzIGVpdGhlciB0aGUgZXhpc3RpbmcgYGZpbGVgIHBvaW50ZXIgb3IgdXNlcyB0aGUgc2xvdCdzIGBnbWVtLmZpbGVgIGlmIHRoZSBgZmlsZWAgcG9pbnRlciBpcyBudWxsLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIGlzIGhlbGQuXG5cblRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgZml4LCBidXQgaXQncyBhIGNyaXRpY2FsIG9uZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gc2l0cyBpbiB0aGUgaGVhcnQgb2YgaG93IEtWTSBoYW5kbGVzIGd1ZXN0IG1lbWZkLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGNhbiBlYXNpbHkgbGVhZCB0byBtdWNoIG1vcmUgc2VyaW91cyBwcm9ibGVtcy4gSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIHRoZSBjYWxsZXJzIG9mIGBrdm1fZ21lbV91bmJpbmRgIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxODUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo0Mzo0OS43NTcxOTE0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU3MjQxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9nbWVtX3VuYmluZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTY0Mz1pbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTcwNy1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjcwODpzdGF0aWMgdm9pZCBfX2t2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBzdHJ1Y3QgZ21lbV9maWxlICpmKVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzA5LXtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNzIxLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzIyOnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03MjMte1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy03NTMtXFx0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZ21lbV9maWxlLVxcdTAwM2VmX21hcHBpbmcpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NzU0OlxcdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGdtZW1fZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTc1NS1cXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGdtZW1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9OTM1PXN0YXRpYyB2b2lkIGt2bV9mcmVlX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy05MzctXFx0aWYgKHNsb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjkzODpcXHRcXHRrdm1fZ21lbV91bmJpbmQoc2xvdCk7XFxudmlydC9rdm0va3ZtX21haW4uYy05MzktXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE2OTY9c3RhdGljIHZvaWQga3ZtX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTc0OS1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NTA6XFx0XFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xNzUxLVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xOTk0PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyMC1cXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXFxudmlydC9rdm0va3ZtX21haW4uYzoyMTIxOlxcdFxcdGt2bV9nbWVtX3VuYmluZChuZXcpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEyMi1vdXQ6XFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaD03Nz1pbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0va3ZtX21tLmgtNzgtXFx0XFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpO1xcbnZpcnQva3ZtL2t2bV9tbS5oOjc5OnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpO1xcbnZpcnQva3ZtL2t2bV9tbS5oLTgwLSNlbHNlXFxuLS1cXG52aXJ0L2t2bS9rdm1fbW0uaD04Nj1zdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tbS5oLTkzLVxcbnZpcnQva3ZtL2t2bV9tbS5oOjk0OnN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG52aXJ0L2t2bS9rdm1fbW0uaC05NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQzOjUyLjAxNDQzNzUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDM0NjIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgcGlucG9pbnRlZCBhIHByb21pc2luZyB0YXJnZXQuIFRoZSBga3ZtX2dtZW1fdW5iaW5kYCBmdW5jdGlvbiBpbiBga3ZtX21haW4uY2Agc2VlbXMgdG8gYmUgYSBrZXkgYXJlYSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIG11bHRpcGxlIGltcG9ydGFudCBmdW5jdGlvbnMgbGlrZSBga3ZtX2ZyZWVfbWVtc2xvdGAsIGBrdm1fY29tbWl0X21lbW9yeV9yZWdpb25gLCBhbmQgYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAgc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIHBhdGggd2l0aCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzdGFuZGFyZCBLVk0gb3BlcmF0aW9ucywgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGV4cGxvcmluZyB3aXRoIGZ1enppbmcuIE5vdywgbGV0J3Mgc2VlIHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBndWVzdF9tZW1mZCBhbmQgcHJvY2VlZCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NDM6NTUuNjQ4Nzg2NjQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTc3NzUxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX01FTV9HVUVTVF9NRU1GRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjMzNT1hbGxvd3MgbWFwcGluZyBndWVzdF9tZW1mZCBtZW1vcnkgaW50byBhIGd1ZXN0LiAgQWxsIGZpZWxkcyBzaGFyZWQgd2l0aFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2MzM2OktWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlkZW50aWNhbGx5LiAgVXNlcnNwYWNlIGNhbiBzZXQgS1ZNX01FTV9HVUVTVF9NRU1GRFxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02MzM3LWluIGZsYWdzIHRvIGhhdmUgS1ZNIGJpbmQgdGhlIG1lbW9yeSByZWdpb24gdG8gYSBnaXZlbiBndWVzdF9tZW1mZCByYW5nZSBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzNDE9Ym91bmRzIGNoZWNrcyBhcHBseSAodXNlIGNvbW1vbiBzZW5zZSkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1Ni1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM1NzpBIEtWTV9NRU1fR1VFU1RfTUVNRkQgcmVnaW9uIF9tdXN0XyBoYXZlIGEgdmFsaWQgZ3Vlc3RfbWVtZmQgKHByaXZhdGUgbWVtb3J5KSBhbmRcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM1OC11c2Vyc3BhY2VfYWRkciAoc2hhcmVkIG1lbW9yeSkuICBIb3dldmVyLCBcXFwidmFsaWRcXFwiIGZvciB1c2Vyc3BhY2VfYWRkciBzaW1wbHlcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD02MTk9c3RhdGljIGlubGluZSBib29sIGt2bV9zbG90X2hhc19nbWVtKGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTYyMC17XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjYyMTpcXHRyZXR1cm4gc2xvdCBcXHUwMDI2XFx1MDAyNiAoc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNjIyLX1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0zOT1zdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uMiB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNTctI2RlZmluZSBLVk1fTUVNX1JFQURPTkxZXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyAxKVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDo1ODojZGVmaW5lIEtWTV9NRU1fR1VFU1RfTUVNRkRcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIDIpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTU5LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTM5PXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC01Ny0jZGVmaW5lIEtWTV9NRU1fUkVBRE9OTFlcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIDEpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjU4OiNkZWZpbmUgS1ZNX01FTV9HVUVTVF9NRU1GRFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMilcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtNTktXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jPTM3OD1zdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfYmluZGluZyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IGZkLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzgxLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmM6MzgyOlxcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCAwLCBLVk1fTUVNX0dVRVNUX01FTUZELCAwLCBzaXplLCAwLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMtMzgzLVxcdFxcdFxcdFxcdFxcdCBmZCwgQUxJR05fRE9XTihJTlQ2NF9NQVgsIHBhZ2Vfc2l6ZSkpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYz01MzU9c3RhdGljIHZvaWQgdGVzdF9ndWVzdF9tZW1mZF9ndWVzdCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzAtXFx0XFx0XFx0XFx0XFx0ICAgICBHVUVTVF9NRU1GRF9GTEFHX0lOSVRfU0hBUkVEKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jOjU3MTpcXHR2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgc2xvdCwgS1ZNX01FTV9HVUVTVF9NRU1GRCwgZ3BhLCBzaXplLCBOVUxMLCBmZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuYy01NzItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM9NDc5PXN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTUwMC1cXHRpZiAoaXNfZ3Vlc3RfbWVtZmRfcmVxdWlyZWQoc2hhcGUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYzo1MDE6XFx0XFx0ZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtNTAyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTk3OT12b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTA4NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmM6MTA4NTpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jLTEwODYtXFx0XFx0aWYgKGd1ZXN0X21lbWZkIFxcdTAwM2MgMCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jPTEyNzQ9dm9pZCB2bV9ndWVzdF9tZW1fZmFsbG9jYXRlKHN0cnVjdCBrdm1fdm0gKnZtLCB1NjQgYmFzZSwgdTY0IHNpemUsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI4Ny1cXHRcXHRyZWdpb24gPSB1c2Vyc3BhY2VfbWVtX3JlZ2lvbl9maW5kKHZtLCBncGEsIGdwYSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jOjEyODg6XFx0XFx0VEVTVF9BU1NFUlQocmVnaW9uIFxcdTAwMjZcXHUwMDI2IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMtMTI4OS1cXHRcXHRcXHQgICAgXFxcIlByaXZhdGUgbWVtb3J5IHJlZ2lvbiBub3QgZm91bmQgZm9yIEdQQSAweCVseFxcXCIsIGdwYSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM9NjU9c3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy03NS1cXHRcXHQuZ3BhID0gYmFzZV9ncGEsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjc2OlxcdFxcdC5mbGFncyA9IHByaXZhdGUgPyBLVk1fTUVNX0dVRVNUX01FTUZEIDogMCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtNzctXFx0fTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYz0xNjM9c3RhdGljIHZvaWQgX190ZXN0X3ByZV9mYXVsdF9tZW1vcnkodW5zaWduZWQgbG9uZyB2bV90eXBlLCBib29sIHByaXZhdGUpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTgyLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIGdwYSwgVEVTVF9TTE9ULFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYzoxODM6XFx0XFx0XFx0XFx0ICAgIFRFU1RfTlBBR0VTLCBwcml2YXRlID8gS1ZNX01FTV9HVUVTVF9NRU1GRCA6IDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0xODQtXFx0dmlydF9tYXAodm0sIGd2YSwgZ3BhLCBURVNUX05QQUdFUyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTM0Nj1zdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbWVtb3J5X3JlZ2lvbl9mbGFncyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNDgtXFx0dTMyIHN1cHBvcnRlZF9mbGFncyA9IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzQ5OlxcdGNvbnN0IHUzMiB2Ml9vbmx5X2ZsYWdzID0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM1MC1cXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzY0LVxcdGlmIChrdm1fY2hlY2tfY2FwKEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMpIFxcdTAwMjYgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM2NTpcXHRcXHRzdXBwb3J0ZWRfZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM2Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzg1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6Mzg2OlxcdGlmIChzdXBwb3J0ZWRfZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODctXFx0XFx0aW50IGd1ZXN0X21lbWZkID0gdm1fY3JlYXRlX2d1ZXN0X21lbWZkKHZtLCBNRU1fUkVHSU9OX1NJWkUsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zODktXFx0XFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIDAsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozOTA6XFx0XFx0XFx0XFx0XFx0XFx0IEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTIHwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5MS1cXHRcXHRcXHRcXHRcXHRcXHQgMCwgTUVNX1JFR0lPTl9TSVpFLCBOVUxMLCBndWVzdF9tZW1mZCwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTM5NS1cXHRcXHRyID0gX192bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgMCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM5NjpcXHRcXHRcXHRcXHRcXHRcXHQgS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zOTctXFx0XFx0XFx0XFx0XFx0XFx0IDAsIE1FTV9SRUdJT05fU0laRSwgTlVMTCwgZ3Vlc3RfbWVtZmQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz00NTg9c3RhdGljIHZvaWQgdGVzdF9pbnZhbGlkX2d1ZXN0X21lbWZkKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgbWVtZmQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ2MC17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NjE6XFx0aW50IHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NjItXFx0XFx0XFx0XFx0XFx0ICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TSVpFLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz00Njc9c3RhdGljIHZvaWQgdGVzdF9hZGRfcHJpdmF0ZV9tZW1vcnlfcmVnaW9uKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ3MjpcXHRwcl9pbmZvKFxcXCJUZXN0aW5nIEFERCBvZiBLVk1fTUVNX0dVRVNUX01FTUZEIG1lbW9yeSByZWdpb25zXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ3My1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDg2LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDg3OlxcdHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtMiwgTUVNX1JFR0lPTl9TTE9ULCBLVk1fTUVNX0dVRVNUX01FTUZELFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDg4LVxcdFxcdFxcdFxcdCAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NJWkUsIDAsIG1lbWZkLCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDk1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NDk2OlxcdHZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00OTctXFx0XFx0XFx0XFx0ICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0laRSwgMCwgbWVtZmQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MDgtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MDk6XFx0cHJfaW5mbyhcXFwiVGVzdGluZyBBREQgb2Ygb3ZlcmxhcHBpbmcgS1ZNX01FTV9HVUVTVF9NRU1GRCBtZW1vcnkgcmVnaW9uc1xcXFxuXFxcIik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTAtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUxNTpcXHR2bV9zZXRfdXNlcl9tZW1vcnlfcmVnaW9uMih2bSwgTUVNX1JFR0lPTl9TTE9ULCBLVk1fTUVNX0dVRVNUX01FTUZELFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTE2LVxcdFxcdFxcdFxcdCAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NJWkUgKiAyLCAwLCBtZW1mZCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTg6XFx0dm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCArIDEsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTktXFx0XFx0XFx0XFx0ICAgTUVNX1JFR0lPTl9HUEEgKiAyLCBNRU1fUkVHSU9OX1NJWkUgKiAyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MjUtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MjY6XFx0dm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUyNy1cXHRcXHRcXHRcXHQgICBNRU1fUkVHSU9OX0dQQSwgMCwgTlVMTCwgLTEsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MzItXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MzM6XFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUzNC1cXHRcXHRcXHRcXHRcXHQgTUVNX1JFR0lPTl9HUEEsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU0MC1cXHQvKiBBbmQgbm93IHRoZSBiYWNrIGhhbGYgb2YgdGhlIG90aGVyIHNsb3QncyBndWVzdF9tZW1mZCBiaW5kaW5nLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTQxOlxcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NDItXFx0XFx0XFx0XFx0XFx0IE1FTV9SRUdJT05fR1BBLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NTItXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1NTM6XFx0ciA9IF9fdm1fc2V0X3VzZXJfbWVtb3J5X3JlZ2lvbjIodm0sIE1FTV9SRUdJT05fU0xPVCwgS1ZNX01FTV9HVUVTVF9NRU1GRCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTU1NC1cXHRcXHRcXHRcXHRcXHQgTUVNX1JFR0lPTl9HUEEgKiAyIC0gTUVNX1JFR0lPTl9TSVpFLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjAtXFx0LyogQW5kIG5vdyB0aGUgYmFjayBoYWxmIG9mIHRoZSBvdGhlciBzbG90LiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NTYxOlxcdHIgPSBfX3ZtX3NldF91c2VyX21lbW9yeV9yZWdpb24yKHZtLCBNRU1fUkVHSU9OX1NMT1QsIEtWTV9NRU1fR1VFU1RfTUVNRkQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01NjItXFx0XFx0XFx0XFx0XFx0IE1FTV9SRUdJT05fR1BBICogMiArIE1FTV9SRUdJT05fU0laRSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NjIzPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTY0OC1cXHR9IGVsc2Uge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6NjQ5OlxcdFxcdHByX2luZm8oXFxcIlNraXBwaW5nIHRlc3RzIGZvciBLVk1fTUVNX0dVRVNUX01FTUZEIG1lbW9yeSByZWdpb25zXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTY1MC1cXHR9XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz0zNjk9c3RhdGljIHZvaWQgdGVzdF9tZW1fY29udmVyc2lvbnMoZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwgdTMyIG5yX3ZjcHVzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtNDAxLVxcdFxcdFxcdCAgIEJBU0VfREFUQV9TTE9UICsgaSwgc2xvdF9zaXplIC8gdm0tXFx1MDAzZXBhZ2Vfc2l6ZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0MDI6XFx0XFx0XFx0ICAgS1ZNX01FTV9HVUVTVF9NRU1GRCwgbWVtZmQsIHNsb3Rfc2l6ZSAqIGkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQwMy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYz00Nz1zdGF0aWMgdm9pZCB0ZXN0X3ByaXZhdGVfYWNjZXNzX21lbXNsb3RfZGVsZXRlZCh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTYwLVxcdFxcdFxcdFxcdCAgICBFWElUU19URVNUX05QQUdFUyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmM6NjE6XFx0XFx0XFx0XFx0ICAgIEtWTV9NRU1fR1VFU1RfTUVNRkQpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYy02Mi1cXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NjQzPWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjg0LVxcdC8qXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2ODU6XFx0ICogbWVtc2xvdHMgb2YgZmxhZyBLVk1fTUVNX0dVRVNUX01FTUZEIGFyZSBpbW11dGFibGUgdG8gY2hhbmdlLCBzb1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjg2LVxcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTkzNT1zdGF0aWMgdm9pZCBrdm1fZnJlZV9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTkzNi17XFxudmlydC9rdm0va3ZtX21haW4uYzo5Mzc6XFx0aWYgKHNsb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTkzOC1cXHRcXHRrdm1fZ21lbV91bmJpbmQoc2xvdCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE1NzM9c3RhdGljIGludCBjaGVja19tZW1vcnlfcmVnaW9uX2ZsYWdzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTU3OC1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE1Nzk6XFx0XFx0dmFsaWRfZmxhZ3MgfD0gS1ZNX01FTV9HVUVTVF9NRU1GRDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE1ODAtXFxudmlydC9rdm0va3ZtX21haW4uYy0xNTgxLVxcdC8qIERpcnR5IGxvZ2dpbmcgcHJpdmF0ZSBtZW1vcnkgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuICovXFxudmlydC9rdm0va3ZtX21haW4uYzoxNTgyOlxcdGlmIChtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE1ODMtXFx0XFx0dmFsaWRfZmxhZ3MgXFx1MDAyNj0gfktWTV9NRU1fTE9HX0RJUlRZX1BBR0VTO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xNTkwLVxcdGlmIChrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgXFx1MDAyNlxcdTAwMjZcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE1OTE6XFx0ICAgICEobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpKVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTU5Mi1cXHRcXHR2YWxpZF9mbGFncyB8PSBLVk1fTUVNX1JFQURPTkxZO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xNjk2PXN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3MzItXFx0XFx0ICovXFxudmlydC9rdm0va3ZtX21haW4uYzoxNzMzOlxcdFxcdFdBUk5fT05fT05DRShvbGQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0xNzM0LVxcdFxcdGZhbGx0aHJvdWdoO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ4LVxcdFxcdCAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTc0OTpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NTAtXFx0XFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG9sZCk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTQ9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDI1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjAyNjpcXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQgXFx1MDAyNlxcdTAwMjZcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMjctXFx0ICAgIChtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCBcXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDc2LVxcdFxcdC8qIFByaXZhdGUgbWVtc2xvdHMgYXJlIGltbXV0YWJsZSwgdGhleSBjYW4gb25seSBiZSBkZWxldGVkLiAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjA3NzpcXHRcXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDc4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMDgwLVxcdFxcdCAgICAobnBhZ2VzICE9IG9sZC1cXHUwMDNlbnBhZ2VzKSB8fFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjA4MTpcXHRcXHQgICAgKChtZW0tXFx1MDAzZWZsYWdzIF4gb2xkLVxcdTAwM2VmbGFncykgXFx1MDAyNiAoS1ZNX01FTV9SRUFET05MWSB8IEtWTV9NRU1fR1VFU1RfTUVNRkQpKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwODItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMDYtXFx0bmV3LVxcdTAwM2V1c2Vyc3BhY2VfYWRkciA9IG1lbS1cXHUwMDNldXNlcnNwYWNlX2FkZHI7XFxudmlydC9rdm0va3ZtX21haW4uYzoyMTA3OlxcdGlmIChtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRCkge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cXHRcXHRyID0ga3ZtX2dtZW1fYmluZChrdm0sIG5ldywgbWVtLVxcdTAwM2VndWVzdF9tZW1mZCwgbWVtLVxcdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMTE5LW91dF91bmJpbmQ6XFxudmlydC9rdm0va3ZtX21haW4uYzoyMTIwOlxcdGlmIChtZW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX01FTV9HVUVTVF9NRU1GRClcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMjEtXFx0XFx0a3ZtX2dtZW1fdW5iaW5kKG5ldyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQzOjU3LjQ2NjU2NjUxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTU1NTg4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEtWTSBHdWVzdCBNZW1vcnkgRmlsZSBEZXNjcmlwdG9yIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBoZXJlIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29udGV4dCBmb3IgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgLiBMZXQncyBhc3N1bWUgdGhpcyBpcyBhIEtWTSAoS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gVGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXMgd291bGQgYmUgaW4gdGhlIGB2aXJ0L2t2bS9gIGRpcmVjdG9yeSBvZiB0aGUga2VybmVsIHNvdXJjZSwgb3IgcG90ZW50aWFsbHkgYSBzaW1pbGFybHkgbmFtZWQgZGlyZWN0b3J5IGlmIHRoZXJlJ3MgYW4gYWJzdHJhY3Rpb24gbGF5ZXIuIEknbGwgbmVlZCB0byBsb29rIGluc2lkZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkncmUgdGhlIHVzdWFsIHBsYWNlcyB3aGVyZSB0aGlzIGtpbmQgb2YgdGhpbmcgaXMgZGVmaW5lZCwgYW5kIGRlcGVuZGVuY2llcyBhcmUgY2xlYXJseSBsaXN0ZWQuIElmIGl0IGlzbid0IGBLY29uZmlnYCwgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBgLmNvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIGRpcmVjdG9yaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3Vic3lzdGVtLiBJIHdvdWxkIGJlIGxvb2tpbmcgZm9yIGFueSBjbHVlcyBhYm91dCB3aGF0IGZlYXR1cmVzIHRoaXMgZGVwZW5kcyBvbiwgd2hhdCBpdCBlbmFibGVzLCBhbmQgcG90ZW50aWFsbHkgd2hpY2ggYXJjaGl0ZWN0dXJlcyBvciBwcm9jZXNzb3JzIHRoaXMgaXMgcmVsZXZhbnQgdG8uIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTczOSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjQ0OjAxLjAyMjEyODQ3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc4OTcyOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0vS2NvbmZpZz0xMDM9Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cXG52aXJ0L2t2bS9LY29uZmlnOjEwNjpjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMDctICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NDQ6MDIuNzAxMTE1MTE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MjkyOTM5NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYHZpcnQva3ZtL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgdGhhdCBwb2ludCBpbiB0aGUgY29kZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIHNldCBvZiBvcHRpb25zOyBpdCdzIGxpa2VseSB0aGV5IGFyZSB0aGUgYmFzaWNzIGZvciB0aGUgbW9kdWxlIHRvIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjExOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjUwOjU5Ljk5NDA1ODEzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMDpcXHRjb25maWcgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAxMDE6XFx0ICAgICAgIGJvb2xcXG4gMTAyOlxcdFxcbiAxMDM6XFx0Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDEwNDpcXHQgICAgICAgYm9vbFxcbiAxMDU6XFx0XFxuIDEwNjpcXHRjb25maWcgS1ZNX0dVRVNUX01FTUZEXFxuIDEwNzpcXHQgICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxcbiAxMDg6XFx0ICAgICAgIGJvb2xcXG4gMTA5OlxcdFxcbiAxMTA6XFx0Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QUkVQQVJFXFxuIDExMTpcXHQgICAgICAgYm9vbFxcbiAxMTI6XFx0ICAgICAgIGRlcGVuZHMgb24gS1ZNX0dVRVNUX01FTUZEXFxuIDExMzpcXHRcXG4gMTE0OlxcdGNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbiAxMTU6XFx0ICAgICAgIGJvb2xcXG4gMTE2OlxcdCAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxcbiAxMTc6XFx0XFxuIDExODpcXHRjb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDExOTpcXHQgICAgICAgYm9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo1MDo1OS45OTQxMzA0NjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3MjMxMjI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEtWTV9HVUVTVF9NRU1GRCoqXG5cbk9rYXksIHNvIEkndmUgc3R1bWJsZWQgdXBvbiB0aGlzIGBLVk1fR1VFU1RfTUVNRkRgIGJvb2xlYW4sIGFuZCBpdCdzIGZsYWdnZWQgYXMgaGlkZGVuLiBNeSBpbml0aWFsIGh1bmNoLCBnaXZlbiBpdHMgbmFtZSBhbmQgaGlkZGVuIHN0YXR1cywgaXMgdGhhdCBpdCdzIGxpa2VseSBzZWxlY3RlZCBkZWVwIHdpdGhpbiB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIEtWTSBjb25maWd1cmF0aW9uIGZpbGVzLiBJdCdzIG5vdCBzb21ldGhpbmcgSSdkIGV4cGVjdCB0byBzZWUgZXhwb3NlZCBkaXJlY3RseSBhdCBhIGhpZ2ggbGV2ZWwuIFRoZXJlZm9yZSwgbXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqZXhhY3RseSogd2hhdCdzIHB1bGxpbmcgdGhpcyBpbi4gVW5kZXJzdGFuZGluZyB0aGUgXCJzZWxlY3RcIiByZWxhdGlvbnNoaXBzIHdpbGwgZ2l2ZSBtZSBhIGNyaXRpY2FsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHVuZGVybHlpbmcgcmF0aW9uYWxlIGFuZCB3aGljaCBzcGVjaWZpYyBoYXJkd2FyZSBvciBhcmNoaXRlY3R1cmFsIG51YW5jZXMgbmVjZXNzaXRhdGUgaXRzIGluY2x1c2lvbi4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgY29uZmlncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NDYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjUxOjA1Ljc2NjQ0NTI4NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyOTUzNzM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzgtXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozOTpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4Nlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNDktXFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTA6XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NTE6MDcuODk1OTg4Nzc2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjM1MjEwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIEtWTSBjaGFuZ2UsIGFuZCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdCBzbyBmYXIuIFRoZSBrZXkgZW5hYmxpbmcgY29uZmlnIHNlZW1zIHRvIGJlIGBLVk1gLCBhbmQgaXQncyBiZWluZyB1c2VkIGFjcm9zcyBib3RoIGFybTY0IGFuZCB4ODZfNjQgYXJjaGl0ZWN0dXJlcyDigJMgYSBnb29kIHNpZ24gb2Ygd2lkZXIgYXBwbGljYWJpbGl0eSwgb3IgYXQgbGVhc3QgaW50ZW50LlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgY2VudGVyZWQgb24gdGhlIGBrdm1fZ21lbV91bmJpbmRgIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3Igb3RoZXIgYWZmZWN0ZWQgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5BaCwgYW5kIEkgc2VlIHRoZSBzZWxmLXRlc3RzIGhhdmUgYmVlbiB1cGRhdGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY2AuIFRob3NlIGFyZSBwdXJlbHkgdGVzdHMgdGhvdWdoLCBub3Qga2VybmVsIGNvZGUsIHNvIHRoZXkgZG9uJ3QgaW1wYWN0IG15IGltbWVkaWF0ZSBmdXp6aW5nIGZvY3VzLlxuXG5SaWdodCwgc28gdGhlIGtlcm5lbCBjb2RlIG1vZGlmaWNhdGlvbiBpcyByZWFsbHkganVzdCBga3ZtX2dtZW1fdW5iaW5kYC4gVGhhdCdzIGEgdmVyeSBmb2N1c2VkIGNoYW5nZSwgd2hpY2ggbWFrZXMgaXQgYW4gaWRlYWwgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBga3ZtX2dtZW1fdW5iaW5kYCBpcyBzdGF0aWMgb3Igbm90LiBPa2F5LCBsZXQncyBzZWU6XG5cbmBgYGNcbnZvaWQga3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG5gYGBcblxuTm8sIGl0J3Mgbm90IHN0YXRpYy4gR29vZC4gVGhpcyBpcyBwcm9iYWJseSBleHBvcnRlZCBmb3Igb3RoZXIgbW9kdWxlcyB0byBhY2Nlc3MgaXQuXG5cbk5vdywgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgZXhwb3J0ZWQgYW5kIHZpc2libGUgdG8gb3RoZXIgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NjUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NTE6MTUuMjU5NTEyMDgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM3Nzk0ODcwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLiprdm1fZ21lbV91bmJpbmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjUxOjE3LjQ5NzMxNTk3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIzNTg0MDkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEd1ZXN0IE1lbWZkIFVuYmluZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBldmVuIHRob3VnaCBga3ZtX2dtZW1fdW5iaW5kYCBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCBpdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uIHdpdGhpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gVGhlcmVmb3JlLCBpdCdzIHBlcmZlY3RseSB2YWxpZCB0byB1c2UgaXQgYXMgYSBmb2N1cyBzeW1ib2wgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cbkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2Agd2VyZSB0b3VjaGVkLiBUaGUgZGlmZiBvbmx5IG1lbnRpb25zIG1vZGlmaWNhdGlvbnMgdG8gYGt2bV9nbWVtX3VuYmluZGAsIHdoaWNoIGNvbmZpcm1zIHRoZSBzY29wZS5cblxuQWxyaWdodCwgdGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYSBtaXNzaW5nIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgY2FsbC4gUHJldmlvdXNseSwgd2hlbiB0aGUgYGZpbGVgIHBvaW50ZXIgd2FzIE5VTEzigJRpbmRpY2F0aW5nIHRoZSBmaWxlIHdhcyBiZWluZyBjbG9zZWTigJR0aGUgbG9jayB3YXNuJ3QgYWNxdWlyZWQuIFRoaXMgb21pc3Npb24gY3JlYXRlcyBhIHJhY2UgY29uZGl0aW9uLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWx3YXlzIHRha2luZyB0aGUgbG9jaywgZXZlbiBpZiB0aGUgZmlsZSBpcyBudWxsLiBUaGlzIGxvb2tzIGxpa2UgYSByYWNlIGNvbmRpdGlvbiBmaXguXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgdGFyZ2V0aW5nIHRoZSBjb3JlIEtWTSBmdW5jdGlvbmFsaXR5IHN1cnJvdW5kaW5nIGd1ZXN0IG1lbWZkLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEkgd2lsbCBhbHNvIHVzZSBgRm9jdXNTeW1ib2xzPVtcImt2bV9nbWVtX3VuYmluZFwiXWAgdG8gY29uY2VudHJhdGUgdGhlIGZ1enppbmcgZWZmb3J0cyBvbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGaW5hbGx5LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyBgRW5hYmxlQ29uZmlncz1bXCJLVk1cIl1gLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoIHRvIGVuc3VyZSB0aG9yb3VnaCB0ZXN0aW5nIG9mIHRoaXMgY3JpdGljYWwgS1ZNIGNvbXBvbmVudCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcmFjZSBjb25kaXRpb24gbmF0dXJlIG9mIHRoZSBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjI4LCJPdXRwdXRUb2tlbnMiOjEwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo1MTo1OC43MzMxNjAwMThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTgyMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2dtZW1fdW5iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBga3ZtX2dtZW1fdW5iaW5kYCB3aGVuIGEgZ3Vlc3RfbWVtZmQgZmlsZSBpcyBiZWluZyBjbG9zZWQgYnkgZW5zdXJpbmcgdGhlIGludmFsaWRhdGUgbG9jayBpcyB0YWtlbiBldmVuIGZvciBkeWluZyBmaWxlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX3VuYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGt2bV9nbWVtX3VuYmluZGAgd2hlbiBhIGd1ZXN0X21lbWZkIGZpbGUgaXMgYmVpbmcgY2xvc2VkIGJ5IGVuc3VyaW5nIHRoZSBpbnZhbGlkYXRlIGxvY2sgaXMgdGFrZW4gZXZlbiBmb3IgZHlpbmcgZmlsZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEtWTSBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTM6NTE6NTguODEyOTg5NjY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxNDg1OTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDEzOjUxOjU4LjgxMzYzNDc3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjAxNDIwOTM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIGd1ZXN0X21lbWZkIHNlbGZ0ZXN0cyBhbmQgZml4ZXMgYSBsb2NraW5nL2NvbmN1cnJlbmN5IGJ1ZyBpbiBga3ZtX2dtZW1fdW5iaW5kYCBpbiBgdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY2AuIFRoZSBidWcgZml4IGVuc3VyZXMgdGhhdCBgZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2tgIGlzIHRha2VuIGV2ZW4gd2hlbiB0aGUgZmlsZSBpcyBkeWluZywgcHJldmVudGluZyBhIG1pc21hdGNoIGluIGBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzc2AgaW5jcmVtZW50cy9kZWNyZW1lbnRzLiBUaGlzIGlzIGEgbG9naWMvY29uY3VycmVuY3kgaXNzdWUsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm8tbGVhay4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEzMmNjZWY5MTA0OWU2ZGY3MjJhYzBjM2E5MjI4YWFhM2RlMTUwOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxMzo0MzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9ndWVzdF9tZW1mZF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vZ3Vlc3RfbWVtZmRfdGVzdC5jXG5pbmRleCAyMjMzZDg3MWEzOGY0Li5hZWU4MGRkYTYyMjk1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2d1ZXN0X21lbWZkX3Rlc3QuY1xuQEAgLTc2LDMzICs3Niw1MyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21tYXBfc3VwcG9ydGVkKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXHRrdm1fbXVubWFwKG1lbSwgdG90YWxfc2l6ZSk7XG4gfVxuIFxuKy8qXG4rICogRmlsbCBAbmlkcyB3aXRoIHRoZSBmaXJzdCBAbnJfbmlkcyBub2RlcyBpbiB0aGUgYWxsb3dlZCBtYXNrLlxuKyAqIFJldHVybiBmYWxzZSBpZiB0aGUgbWFzayBjb250YWlucyBmZXdlciB0aGFuIEBucl9uaWRzIG5vZGVzLlxuKyAqL1xuK3N0YXRpYyBib29sIGdldF9udW1hX25vZGVfaWRzKGludCAqbmlkcywgaW50IG5yX25pZHMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IGdldF9udW1hX21lbV9ub2RlcygpO1xuK1x0dW5zaWduZWQgbG9uZyBuaWQ7XG4rXHRpbnQgbnJfZm91bmQgPSAwO1xuK1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChuaWQsIFx1MDAyNm5vZGVtYXNrLCBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSkge1xuK1x0XHRuaWRzW25yX2ZvdW5kKytdID0gbmlkO1xuK1x0XHRpZiAobnJfZm91bmQgPT0gbnJfbmlkcylcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tfMCA9IDE7IC8qIG5pZDogMCAqL1xuLVx0dW5zaWduZWQgbG9uZyBub2RlbWFzayA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKTtcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2ssIGJpbmRfbm9kZW1hc2s7XG4rXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSArIDE7XG4gXHRpbnQgcG9saWN5O1xuIFx0Y2hhciAqbWVtO1xuK1x0aW50IG5pZDtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIWlzX211bHRpX251bWFfbm9kZV9zeXN0ZW0oKSlcbitcdGlmICghZ2V0X251bWFfbm9kZV9pZHMoXHUwMDI2bmlkLCAxKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0YmluZF9ub2RlbWFzayA9IDFVTCBcdTAwM2NcdTAwM2MgbmlkO1xuIFx0bWVtID0ga3ZtX21tYXAodG90YWxfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQpO1xuIFxuIFx0LyogVGVzdCBNUE9MX0lOVEVSTEVBVkUgcG9saWN5ICovXG4tXHRrdm1fbWJpbmQobWVtLCBwYWdlX3NpemUgKiAyLCBNUE9MX0lOVEVSTEVBVkUsIFx1MDAyNm5vZGVtYXNrXzAsIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKG1lbSwgcGFnZV9zaXplICogMiwgTVBPTF9JTlRFUkxFQVZFLCBcdTAwMjZiaW5kX25vZGVtYXNrLCBtYXhub2RlLCAwKTtcbiBcdGt2bV9nZXRfbWVtcG9saWN5KFx1MDAyNnBvbGljeSwgXHUwMDI2bm9kZW1hc2ssIG1heG5vZGUsIG1lbSwgTVBPTF9GX0FERFIpO1xuLVx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfSU5URVJMRUFWRSBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcbitcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0lOVEVSTEVBVkUgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssXG4gXHRcdCAgICBcIldhbnRlZCBNUE9MX0lOVEVSTEVBVkUgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcIixcbi1cdFx0ICAgIE1QT0xfSU5URVJMRUFWRSwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XG4rXHRcdCAgICBNUE9MX0lOVEVSTEVBVkUsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCBiYXNpYyBNUE9MX0JJTkQgcG9saWN5ICovXG4tXHRrdm1fbWJpbmQobWVtICsgcGFnZV9zaXplICogMiwgcGFnZV9zaXplICogMiwgTVBPTF9CSU5ELCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbitcdGt2bV9tYmluZChtZW0gKyBwYWdlX3NpemUgKiAyLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0a3ZtX2dldF9tZW1wb2xpY3koXHUwMDI2cG9saWN5LCBcdTAwMjZub2RlbWFzaywgbWF4bm9kZSwgbWVtICsgcGFnZV9zaXplICogMiwgTVBPTF9GX0FERFIpO1xuLVx0VEVTVF9BU1NFUlQocG9saWN5ID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjYgbm9kZW1hc2sgPT0gbm9kZW1hc2tfMCxcbitcdFRFU1RfQVNTRVJUKHBvbGljeSA9PSBNUE9MX0JJTkQgXHUwMDI2XHUwMDI2IG5vZGVtYXNrID09IGJpbmRfbm9kZW1hc2ssXG4gXHRcdCAgICBcIldhbnRlZCBNUE9MX0JJTkQgKCV1KSBhbmQgbm9kZW1hc2sgMHglbHgsIGdvdCAldSBhbmQgMHglbHhcIixcbi1cdFx0ICAgIE1QT0xfQklORCwgbm9kZW1hc2tfMCwgcG9saWN5LCBub2RlbWFzayk7XG4rXHRcdCAgICBNUE9MX0JJTkQsIGJpbmRfbm9kZW1hc2ssIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCBNUE9MX0RFRkFVTFQgcG9saWN5ICovXG4gXHRrdm1fbWJpbmQobWVtLCB0b3RhbF9zaXplLCBNUE9MX0RFRkFVTFQsIE5VTEwsIDAsIDApO1xuQEAgLTExMiw3ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X21iaW5kKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXHRcdCAgICBNUE9MX0RFRkFVTFQsIHBvbGljeSwgbm9kZW1hc2spO1xuIFxuIFx0LyogVGVzdCB3aXRoIGludmFsaWQgcG9saWN5ICovXG4tXHRyZXQgPSBtYmluZChtZW0sIHBhZ2Vfc2l6ZSwgOTk5LCBcdTAwMjZub2RlbWFza18wLCBtYXhub2RlLCAwKTtcbitcdHJldCA9IG1iaW5kKG1lbSwgcGFnZV9zaXplLCA5OTksIFx1MDAyNmJpbmRfbm9kZW1hc2ssIG1heG5vZGUsIDApO1xuIFx0VEVTVF9BU1NFUlQocmV0ID09IC0xIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5WQUwsXG4gXHRcdCAgICBcIm1iaW5kIHdpdGggaW52YWxpZCBwb2xpY3kgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUxcIik7XG4gXG5AQCAtMTIxLDE3ICsxNDEsMTkgQEAgc3RhdGljIHZvaWQgdGVzdF9tYmluZChpbnQgZmQsIHNpemVfdCB0b3RhbF9zaXplKVxuIFxuIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBub2RlMF9tYXNrID0gMTsgIC8qIE5vZGUgMCAqL1xuLVx0dW5zaWduZWQgbG9uZyBub2RlMV9tYXNrID0gMjsgIC8qIE5vZGUgMSAqL1xuLVx0dW5zaWduZWQgbG9uZyBtYXhub2RlID0gODtcbitcdHVuc2lnbmVkIGxvbmcgYmluZF9ub2RlbWFza3NbMl07XG4rXHR1bnNpZ25lZCBsb25nIG1heG5vZGUgPSBCSVRTX1BFUl9UWVBFKGJpbmRfbm9kZW1hc2tzWzBdKSArIDE7XG4gXHR2b2lkICpwYWdlc1s0XTtcbitcdGludCBuaWRzWzJdO1xuIFx0aW50IHN0YXR1c1s0XTtcbiBcdGNoYXIgKm1lbTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKCFpc19tdWx0aV9udW1hX25vZGVfc3lzdGVtKCkpXG4rXHRpZiAoIWdldF9udW1hX25vZGVfaWRzKG5pZHMsIEFSUkFZX1NJWkUobmlkcykpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRiaW5kX25vZGVtYXNrc1swXSA9IDFVTCBcdTAwM2NcdTAwM2Mgbmlkc1swXTtcbitcdGJpbmRfbm9kZW1hc2tzWzFdID0gMVVMIFx1MDAzY1x1MDAzYyBuaWRzWzFdO1xuIFx0bWVtID0ga3ZtX21tYXAodG90YWxfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNDsgaSsrKVxuQEAgLTEzOSwzNCArMTYxLDQyIEBAIHN0YXRpYyB2b2lkIHRlc3RfbnVtYV9hbGxvY2F0aW9uKGludCBmZCwgc2l6ZV90IHRvdGFsX3NpemUpXG4gXG4gXHQvKiBTZXQgTlVNQSBwb2xpY3kgYWZ0ZXIgYWxsb2NhdGlvbiAqL1xuIFx0bWVtc2V0KG1lbSwgMHhhYSwgcGFnZV9zaXplKTtcbi1cdGt2bV9tYmluZChwYWdlc1swXSwgcGFnZV9zaXplLCBNUE9MX0JJTkQsIFx1MDAyNm5vZGUwX21hc2ssIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzBdLCBwYWdlX3NpemUsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuIFx0a3ZtX2ZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCAwLCBwYWdlX3NpemUpO1xuIFxuIFx0LyogU2V0IE5VTUEgcG9saWN5IGJlZm9yZSBhbGxvY2F0aW9uICovXG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTFfbWFzaywgbWF4bm9kZSwgMCk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMV0sIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzBdLCBtYXhub2RlLCAwKTtcbiBcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xuIFxuIFx0LyogVmFsaWRhdGUgaWYgcGFnZXMgYXJlIGFsbG9jYXRlZCBvbiBzcGVjaWZpZWQgTlVNQSBub2RlcyAqL1xuIFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMSwgXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMF0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDEsIFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMSwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzFdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSAwLCBcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDAsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1syXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMCwgXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbM10pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IG5pZHNbMV0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzFdLCBzdGF0dXNbMF0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IG5pZHNbMV0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzFdLCBzdGF0dXNbMV0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMF0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzBdLCBzdGF0dXNbMl0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IG5pZHNbMF0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzBdLCBzdGF0dXNbM10pO1xuIFxuIFx0LyogUHVuY2ggaG9sZSBmb3IgYWxsIHBhZ2VzICovXG4gXHRrdm1fZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIDAsIHRvdGFsX3NpemUpO1xuIFxuIFx0LyogQ2hhbmdlIE5VTUEgcG9saWN5IG5vZGVzIGFuZCByZWFsbG9jYXRlICovXG4tXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTBfbWFzaywgbWF4bm9kZSwgMCk7XG4tXHRrdm1fbWJpbmQocGFnZXNbMl0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2bm9kZTFfbWFzaywgbWF4bm9kZSwgMCk7XG4rXHRrdm1fbWJpbmQocGFnZXNbMF0sIHBhZ2Vfc2l6ZSAqIDIsIE1QT0xfQklORCwgXHUwMDI2YmluZF9ub2RlbWFza3NbMF0sIG1heG5vZGUsIDApO1xuK1x0a3ZtX21iaW5kKHBhZ2VzWzJdLCBwYWdlX3NpemUgKiAyLCBNUE9MX0JJTkQsIFx1MDAyNmJpbmRfbm9kZW1hc2tzWzFdLCBtYXhub2RlLCAwKTtcbiBcdG1lbXNldChtZW0sIDB4YWEsIHRvdGFsX3NpemUpO1xuIFxuIFx0a3ZtX21vdmVfcGFnZXMoMCwgNCwgcGFnZXMsIE5VTEwsIHN0YXR1cywgMCk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbMF0gPT0gMCwgXCJFeHBlY3RlZCBwYWdlIDAgb24gbm9kZSAwLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbMF0pO1xuLVx0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IDAsIFwiRXhwZWN0ZWQgcGFnZSAxIG9uIG5vZGUgMCwgZ290IGl0IG9uIG5vZGUgJWRcIiwgc3RhdHVzWzFdKTtcbi1cdFRFU1RfQVNTRVJUKHN0YXR1c1syXSA9PSAxLCBcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlIDEsIGdvdCBpdCBvbiBub2RlICVkXCIsIHN0YXR1c1syXSk7XG4tXHRURVNUX0FTU0VSVChzdGF0dXNbM10gPT0gMSwgXCJFeHBlY3RlZCBwYWdlIDMgb24gbm9kZSAxLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBzdGF0dXNbM10pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzBdID09IG5pZHNbMF0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMCBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzBdLCBzdGF0dXNbMF0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzFdID09IG5pZHNbMF0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMSBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzBdLCBzdGF0dXNbMV0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzJdID09IG5pZHNbMV0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMiBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzFdLCBzdGF0dXNbMl0pO1xuK1x0VEVTVF9BU1NFUlQoc3RhdHVzWzNdID09IG5pZHNbMV0sXG4rXHRcdCAgICBcIkV4cGVjdGVkIHBhZ2UgMyBvbiBub2RlICVkLCBnb3QgaXQgb24gbm9kZSAlZFwiLCBuaWRzWzFdLCBzdGF0dXNbM10pO1xuIFxuIFx0a3ZtX211bm1hcChtZW0sIHRvdGFsX3NpemUpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9udW1haWYuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG5pbmRleCAyOTU3MmE2ZDc4OWNkLi40YmJiZjMxNGU5ZDc3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvbnVtYWlmLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL251bWFpZi5oXG5AQCAtNCw4ICs0LDYgQEBcbiAjaWZuZGVmIFNFTEZURVNUX0tWTV9OVU1BSUZfSFxuICNkZWZpbmUgU0VMRlRFU1RfS1ZNX05VTUFJRl9IXG4gXG4tI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2Vcbi1cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1wb2xpY3kuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwia3ZtX3N5c2NhbGxzLmhcIlxuQEAgLTMwLDU0ICsyOCwxNiBAQCBLVk1fU1lTQ0FMTF9ERUZJTkUobWJpbmQsIDYsIHZvaWQgKiwgYWRkciwgdW5zaWduZWQgbG9uZywgc2l6ZSwgaW50LCBtb2RlLFxuIFx0XHQgICBjb25zdCB1bnNpZ25lZCBsb25nICosIG5vZGVtYXNrLCB1bnNpZ25lZCBsb25nLCBtYXhub2RlLFxuIFx0XHQgICB1bnNpZ25lZCBpbnQsIGZsYWdzKTtcbiBcbi1zdGF0aWMgaW5saW5lIGludCBnZXRfbWF4X251bWFfbm9kZSh2b2lkKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbnVtYV9tZW1fbm9kZXModm9pZClcbiB7XG4tXHRzdHJ1Y3QgZGlyZW50ICpkZTtcbi1cdGludCBtYXhfbm9kZSA9IDA7XG4tXHRESVIgKmQ7XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbiBcbi1cdC8qXG4tXHQgKiBBc3N1bWUgdGhlcmUncyBhIHNpbmdsZSBub2RlIGlmIHRoZSBrZXJuZWwgZG9lc24ndCBzdXBwb3J0IE5VTUEsXG4tXHQgKiBvciBpZiBubyBub2RlcyBhcmUgZm91bmQuXG4tXHQgKi9cbi1cdGQgPSBvcGVuZGlyKFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlXCIpO1xuLVx0aWYgKCFkKVxuK1x0LyogR2V0IHNldCBvZiBmaXJzdCA2NCBudW1hIG5vZGVzIGF2YWlsYWJsZSAqL1xuK1x0aWYgKGdldF9tZW1wb2xpY3koTlVMTCwgXHUwMDI2bm9kZW1hc2ssIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spLCBOVUxMLFxuK1x0XHRcdCAgTVBPTF9GX01FTVNfQUxMT1dFRCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0d2hpbGUgKChkZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHtcbi1cdFx0aW50IG5vZGVfaWQ7XG4tXHRcdGNoYXIgKmVuZHB0cjtcbi1cbi1cdFx0aWYgKHN0cm5jbXAoZGUtXHUwMDNlZF9uYW1lLCBcIm5vZGVcIiwgNCkgIT0gMClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0bm9kZV9pZCA9IHN0cnRvbChkZS1cdTAwM2VkX25hbWUgKyA0LCBcdTAwMjZlbmRwdHIsIDEwKTtcbi1cdFx0aWYgKCplbmRwdHIgIT0gJ1xcMCcpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChub2RlX2lkIFx1MDAzZSBtYXhfbm9kZSlcbi1cdFx0XHRtYXhfbm9kZSA9IG5vZGVfaWQ7XG4tXHR9XG4tXHRjbG9zZWRpcihkKTtcbi1cbi1cdHJldHVybiBtYXhfbm9kZTtcbi19XG4tXG4tc3RhdGljIGJvb2wgaXNfbnVtYV9hdmFpbGFibGUodm9pZClcbi17XG4tXHQvKlxuLVx0ICogUHJvYmUgZm9yIE5VTUEgYnkgZG9pbmcgYSBkdW1teSBnZXRfbWVtcG9saWN5KCkuICBJZiB0aGUgc3lzY2FsbFxuLVx0ICogZmFpbHMgd2l0aCBFTk9TWVMsIHRoZW4gdGhlIGtlcm5lbCB3YXMgYnVpbHQgd2l0aG91dCBOVU1BIHN1cHBvcnQuXG4tXHQgKiBpZiB0aGUgc3lzY2FsbCBmYWlscyB3aXRoIEVQRVJNLCB0aGVuIHRoZSBwcm9jZXNzL3VzZXIgbGFja3MgdGhlXG4tXHQgKiBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzIChDQVBfU1lTX05JQ0UpLlxuLVx0ICovXG4tXHRyZXR1cm4gIWdldF9tZW1wb2xpY3koTlVMTCwgTlVMTCwgMCwgTlVMTCwgMCkgfHxcbi1cdFx0KGVycm5vICE9IEVOT1NZUyBcdTAwMjZcdTAwMjYgZXJybm8gIT0gRVBFUk0pO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbXVsdGlfbnVtYV9ub2RlX3N5c3RlbSh2b2lkKVxuLXtcbi1cdHJldHVybiBpc19udW1hX2F2YWlsYWJsZSgpIFx1MDAyNlx1MDAyNiBnZXRfbWF4X251bWFfbm9kZSgpIFx1MDAzZT0gMTtcbitcdHJldHVybiBub2RlbWFzaztcbiB9XG4gXG4gI2VuZGlmIC8qIFNFTEZURVNUX0tWTV9OVU1BSUZfSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuaW5kZXggMzljZTlhOTM2OWY1Yi4uNjZkY2YzNjM5OGFhYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGFwaWNfaXBpX3Rlc3QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94YXBpY19pcGlfdGVzdC5jXG5AQCAtMjUxLDggKzI1MSw4IEBAIHZvaWQgZG9fbWlncmF0aW9ucyhzdHJ1Y3QgdGVzdF9kYXRhX3BhZ2UgKmRhdGEsIGludCBydW5fc2VjcywgaW50IGRlbGF5X3VzZWNzLFxuIFx0XHQgICB1NjQgKnBpcGlzX3JjdmQpXG4ge1xuIFx0bG9uZyBwYWdlc19ub3RfbW92ZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2tzW3NpemVvZihub2RlbWFzaykgKiA4XTtcbitcdHVuc2lnbmVkIGxvbmcgbm9kZW1hc2s7XG4rXHR1bnNpZ25lZCBsb25nIG5vZGVtYXNrc1tCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKV07XG4gXHRpbnQgbm9kZXMgPSAwO1xuIFx0dGltZV90IHN0YXJ0X3RpbWUsIGxhc3RfdXBkYXRlLCBub3c7XG4gXHR0aW1lX3QgaW50ZXJ2YWxfc2VjcyA9IDE7XG5AQCAtMjY2LDE5ICsyNjYsMTcgQEAgdm9pZCBkb19taWdyYXRpb25zKHN0cnVjdCB0ZXN0X2RhdGFfcGFnZSAqZGF0YSwgaW50IHJ1bl9zZWNzLCBpbnQgZGVsYXlfdXNlY3MsXG4gXHRmcHJpbnRmKHN0ZGVyciwgXCJDYWxsaW5nIG1pZ3JhdGVfcGFnZXMgZXZlcnkgJWQgbWljcm9zZWNvbmRzXFxuXCIsXG4gXHRcdGRlbGF5X3VzZWNzKTtcbiBcbi1cdC8qIEdldCBzZXQgb2YgZmlyc3QgNjQgbnVtYSBub2RlcyBhdmFpbGFibGUgKi9cbi1cdGt2bV9nZXRfbWVtcG9saWN5KE5VTEwsIFx1MDAyNm5vZGVtYXNrLCBzaXplb2Yobm9kZW1hc2spICogOCxcbi1cdFx0XHQgIDAsIE1QT0xfRl9NRU1TX0FMTE9XRUQpO1xuK1x0bm9kZW1hc2sgPSBnZXRfbnVtYV9tZW1fbm9kZXMoKTtcbiBcbiBcdGZwcmludGYoc3RkZXJyLCBcIk51bWEgbm9kZXMgZm91bmQgYW1vbmdzdCBmaXJzdCAlbHUgcG9zc2libGUgbm9kZXMgXCJcbiBcdFx0XCIoZWFjaCAxLWJpdCBpbmRpY2F0ZXMgbm9kZSBpcyBwcmVzZW50KTogJSNseFxcblwiLFxuLVx0XHRzaXplb2Yobm9kZW1hc2spICogOCwgbm9kZW1hc2spO1xuK1x0XHRCSVRTX1BFUl9UWVBFKG5vZGVtYXNrKSwgbm9kZW1hc2spO1xuIFxuIFx0LyogSW5pdCBhcnJheSBvZiBtYXNrcyBjb250YWluaW5nIGEgc2luZ2xlLWJpdCBpbiBlYWNoLCBvbmUgZm9yIGVhY2hcbiBcdCAqIGF2YWlsYWJsZSBub2RlLiBtaWdyYXRlX3BhZ2VzIGNhbGxlZCBiZWxvdyByZXF1aXJlcyBzcGVjaWZ5aW5nIG5vZGVzXG4gXHQgKiBhcyBiaXQgbWFza3MuXG4gXHQgKi9cbi1cdGZvciAoaSA9IDAsIGJpdCA9IDE7IGkgXHUwMDNjIHNpemVvZihub2RlbWFzaykgKiA4OyBpKyssIGJpdCBcdTAwM2NcdTAwM2M9IDEpIHtcbitcdGZvciAoaSA9IDAsIGJpdCA9IDE7IGkgXHUwMDNjIEJJVFNfUEVSX1RZUEUobm9kZW1hc2spOyBpKyssIGJpdCBcdTAwM2NcdTAwM2M9IDEpIHtcbiBcdFx0aWYgKG5vZGVtYXNrIFx1MDAyNiBiaXQpIHtcbiBcdFx0XHRub2RlbWFza3Nbbm9kZXNdID0gbm9kZW1hc2sgXHUwMDI2IGJpdDtcbiBcdFx0XHRub2RlcysrO1xuQEAgLTMxMCw3ICszMDgsNyBAQCB2b2lkIGRvX21pZ3JhdGlvbnMoc3RydWN0IHRlc3RfZGF0YV9wYWdlICpkYXRhLCBpbnQgcnVuX3NlY3MsIGludCBkZWxheV91c2VjcyxcbiBcdFx0ICogS1ZNX0NSRUFURV9WQ1BVIGlvY3RsLiBJZiB0aGF0IGFzc3VtcHRpb24gZXZlciBjaGFuZ2VzIHRoaXNcbiBcdFx0ICogdGVzdCBtYXkgYnJlYWsgb3IgZ2l2ZSBhIGZhbHNlIHBvc2l0aXZlIHNpZ25hbC5cbiBcdFx0ICovXG4tXHRcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgc2l6ZW9mKG5vZGVtYXNrc1tmcm9tXSksXG4rXHRcdHBhZ2VzX25vdF9tb3ZlZCA9IG1pZ3JhdGVfcGFnZXMoMCwgQklUU19QRVJfVFlQRShub2RlbWFza3NbZnJvbV0pICsgMSxcbiBcdFx0XHRcdFx0XHRcdTAwMjZub2RlbWFza3NbZnJvbV0sXG4gXHRcdFx0XHRcdFx0XHUwMDI2bm9kZW1hc2tzW3RvXSk7XG4gXHRcdGlmIChwYWdlc19ub3RfbW92ZWQgXHUwMDNjIDApXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbmluZGV4IGYwZTVkYTQ5MDg2NjAuLmY4NDgxMjBhZjg0YmUgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG4rKysgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXG5AQCAtNzIxLDYgKzcyMSw4IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2dtZW1fdW5iaW5kKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIHN0cnVjdCBnbWVtX2ZpbGUgKmYpXG4gXG4gdm9pZCBrdm1fZ21lbV91bmJpbmQoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbiB7XG4rXHRzdHJ1Y3QgZmlsZSAqZ21lbV9maWxlO1xuK1xuIFx0LypcbiBcdCAqIE5vdGhpbmcgdG8gZG8gaWYgdGhlIHVuZGVybHlpbmcgZmlsZSB3YXMgX2FscmVhZHlfIGNsb3NlZCwgYXNcbiBcdCAqIGt2bV9nbWVtX3JlbGVhc2UoKSBpbnZhbGlkYXRlcyBhbmQgbnVsbGlmaWVzIGFsbCBiaW5kaW5ncy5cbkBAIC03MzMsMjEgKzczNSwyNCBAQCB2b2lkIGt2bV9nbWVtX3VuYmluZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90KVxuIFx0LypcbiBcdCAqIEhvd2V2ZXIsIGlmIHRoZSBmaWxlIGlzIF9iZWluZ18gY2xvc2VkLCB0aGVuIHRoZSBiaW5kaW5ncyBuZWVkIHRvIGJlXG4gXHQgKiByZW1vdmVkIGFzIGt2bV9nbWVtX3JlbGVhc2UoKSBtaWdodCBub3QgcnVuIHVudGlsIGFmdGVyIHRoZSBtZW1zbG90XG4tXHQgKiBpcyBmcmVlZC4gIE5vdGUsIG1vZGlmeWluZyB0aGUgYmluZGluZ3MgaXMgc2FmZSBldmVuIHRob3VnaCB0aGUgZmlsZVxuLVx0ICogaXMgZHlpbmcgYXMga3ZtX2dtZW1fcmVsZWFzZSgpIG51bGxpZmllcyBzbG90LVx1MDAzZWdtZW0uZmlsZSB1bmRlclxuK1x0ICogaXMgZnJlZWQuICBOb3RlLCBkZXJlZmVyZW5jaW5nIHRoZSBkeWluZyBmaWxlIGlzIHNhZmUgYXNcbitcdCAqIGt2bV9nbWVtX3JlbGVhc2UoKSBudWxsaWZpZXMgc2xvdC1cdTAwM2VnbWVtLmZpbGUgdW5kZXJcbiBcdCAqIHNsb3RzX2xvY2ssIGFuZCBvbmx5IHB1dHMgaXRzIHJlZmVyZW5jZSB0byBLVk0gYWZ0ZXIgZGVzdHJveWluZyBhbGxcbiBcdCAqIGJpbmRpbmdzLiAgSS5lLiByZWFjaGluZyB0aGlzIHBvaW50IG1lYW5zIGt2bV9nbWVtX3JlbGVhc2UoKSBoYXNuJ3RcbiBcdCAqIHlldCBkZXN0cm95ZWQgdGhlIGJpbmRpbmdzIG9yIGZyZWVkIHRoZSBnbWVtX2ZpbGUsIGFuZCBjYW4ndCBkbyBzb1xuIFx0ICogdW50aWwgdGhlIGNhbGxlciBkcm9wcyBzbG90c19sb2NrLlxuIFx0ICovXG4tXHRpZiAoIWZpbGUpIHtcbi1cdFx0X19rdm1fZ21lbV91bmJpbmQoc2xvdCwgc2xvdC1cdTAwM2VnbWVtLmZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuK1x0Z21lbV9maWxlID0gZmlsZSA/OiBzbG90LVx1MDAzZWdtZW0uZmlsZTtcbiBcbi1cdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKGZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbi1cdF9fa3ZtX2dtZW1fdW5iaW5kKHNsb3QsIGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKTtcbi1cdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuK1x0LypcbitcdCAqIFRha2UgdGhlIGludmFsaWRhdGUgbG9jayBldmVuIGZvciBhIGR5aW5nIGZpbGUuICBPdGhlcndpc2UsXG4rXHQgKiBrdm1fZ21lbV9pbnZhbGlkYXRlX3N0YXJ0KCkgY2FuIGZpbmQgdGhlIGJpbmRpbmcgYW5kIGluY3JlbWVudFxuK1x0ICogbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3Mgd2hpbGUga3ZtX2dtZW1faW52YWxpZGF0ZV9lbmQoKSBtaXNzZXNcbitcdCAqIHRoZSByZW1vdmVkIGJpbmRpbmcgYW5kIHNraXBzIGRlY3JlbWVudC5cbitcdCAqL1xuK1x0ZmlsZW1hcF9pbnZhbGlkYXRlX2xvY2soZ21lbV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4rXHRfX2t2bV9nbWVtX3VuYmluZChzbG90LCBnbWVtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhKTtcbitcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soZ21lbV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gfVxuIFxuIC8qIFJldHVybnMgYSBsb2NrZWQgZm9saW8gb24gc3VjY2Vzcy4gICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo1MTo1OC44MTM2MzU0ODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwMTQxNzM3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IEZpbGUgVW5iaW5kaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYSBmZXcgZmlsZXMuIFRoZSBjaGFuZ2VzIGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AgZGlyZWN0b3J5IGFyZSBqdXN0IHRlc3QgdXBkYXRlcywgc28gdGhleSdyZSBub3QgdGhlIGNvcmUgb2Ygd2hhdCdzIGludGVyZXN0aW5nIGhlcmUuIFRoZSByZWFsIG1lYXQgaXMgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBrdm1fZ21lbV91bmJpbmRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGVyZSdzIGEgc3BlY2lmaWMgc2NlbmFyaW8gYmVpbmcgYWRkcmVzc2VkLCB3aGVyZSB0aGUgdW5kZXJseWluZyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhIGd1ZXN0IG1lbW9yeSBzbG90IG1pZ2h0IGJlIGluIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIGZvciBgZmlsZWAgYmVpbmcgTlVMTC4gSWYgaXQgd2FzLCBtZWFuaW5nIHRoZSBmaWxlIHdhcyBjbG9zaW5nLCBpdCB3b3VsZCBkZXJlZmVyZW5jZSBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgIGltbWVkaWF0ZWx5IGFuZCBjYWxsIGBfX2t2bV9nbWVtX3VuYmluZGAuIEhvd2V2ZXIsIGl0IHNraXBwZWQgdGhlIGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AuXG5cblRoZSBmaXggaW50cm9kdWNlcyBhIGxvY2FsIGBnbWVtX2ZpbGVgIHZhcmlhYmxlIGFuZCB1c2VzIGVpdGhlciB0aGUgcG90ZW50aWFsbHktTlVMTCBgZmlsZWAgZnJvbSB0aGUgY2hlY2sgb3IgYHNsb3QtXHUwMDNlZ21lbS5maWxlYCBpbiBjYXNlIGBmaWxlYCBpcyBOVUxMLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIHBhdGNoIG5vdyAqYWx3YXlzKiBhY3F1aXJlcyB0aGUgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBiZWZvcmUgY2FsbGluZyBgX19rdm1fZ21lbV91bmJpbmRgLCBldmVuIGlmIHRoZSBmaWxlIGlzIGJlaW5nIGNsb3NlZC5cblxuVGhpcyBpcyBhbGwgYWJvdXQgcHJldmVudGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgbG9jayBpcyBuZWVkZWQgYmVjYXVzZSBga3ZtX2dtZW1faW52YWxpZGF0ZV9zdGFydCgpYCBtaWdodCBiZSBjb25jdXJyZW50bHkgaW5jcmVtZW50aW5nIGBtbXVfaW52YWxpZGF0ZV9pbl9wcm9ncmVzc2AsIHdoaWxlIHdlJ3JlIHRyeWluZyB0byByZW1vdmUgdGhlIGJpbmRpbmcuIFdpdGhvdXQgdGhlIGxvY2ssIGBrdm1fZ21lbV9pbnZhbGlkYXRlX2VuZCgpYCBjb3VsZCBtaXNzIHRoZSByZW1vdmVkIGJpbmRpbmcgYW5kIGZhaWwgdG8gZGVjcmVtZW50IHRoZSBjb3VudGVyLCBsZWFkaW5nIHRvIGEgcG90ZW50aWFsIHJlc291cmNlIGxlYWsgb3IsIHdvcnNlLCBpbmNvcnJlY3QgbWVtb3J5IGFjY2Vzcy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGEgY29uY3VycmVuY3kgaXNzdWUsIGEgbG9ja2luZyBwcm9ibGVtLCBub3QgYSBtZW1vcnkgc2FmZXR5IG9uZS4gSSBjYW4gY29uZmlybSB0aGlzIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBpbmZvcm1hdGlvbiBsZWFrLiBLQVNBTi9MT0NLREVQL2V0Yy4gbWlnaHQgYmUgdXNlZnVsIGZvciBjYXRjaGluZyBzaW1pbGFyIGlzc3Vlcywgb3IgaXQgY291bGQgYmUgYSBzaW1wbGUgbG9naWNhbCBidWcuIFNvLCBjb25zaWRlcmluZyB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSwgdGhpcyBkb2Vzbid0IHdhcnJhbnQgTmVlZHNLTVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE4MiwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxMzo1MjoxMC44Mjc4MTM5NzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBndWVzdF9tZW1mZCBzZWxmdGVzdHMgYW5kIGZpeGVzIGEgbG9ja2luZy9jb25jdXJyZW5jeSBidWcgaW4gYGt2bV9nbWVtX3VuYmluZGAgaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBUaGUgYnVnIGZpeCBlbnN1cmVzIHRoYXQgYGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrYCBpcyB0YWtlbiBldmVuIHdoZW4gdGhlIGZpbGUgaXMgZHlpbmcsIHByZXZlbnRpbmcgYSBtaXNtYXRjaCBpbiBgbW11X2ludmFsaWRhdGVfaW5fcHJvZ3Jlc3NgIGluY3JlbWVudHMvZGVjcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljL2NvbmN1cnJlbmN5IGlzc3VlLCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvLWxlYWsuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUsIGFuZCBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHRlc3RpbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gZ3Vlc3RfbWVtZmQgc2VsZnRlc3RzIGFuZCBmaXhlcyBhIGxvY2tpbmcvY29uY3VycmVuY3kgYnVnIGluIGBrdm1fZ21lbV91bmJpbmRgIGluIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYC4gVGhlIGJ1ZyBmaXggZW5zdXJlcyB0aGF0IGBmaWxlbWFwX2ludmFsaWRhdGVfbG9ja2AgaXMgdGFrZW4gZXZlbiB3aGVuIHRoZSBmaWxlIGlzIGR5aW5nLCBwcmV2ZW50aW5nIGEgbWlzbWF0Y2ggaW4gYG1tdV9pbnZhbGlkYXRlX2luX3Byb2dyZXNzYCBpbmNyZW1lbnRzL2RlY3JlbWVudHMuIFRoaXMgaXMgYSBsb2dpYy9jb25jdXJyZW5jeSBpc3N1ZSwgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mby1sZWFrLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCB0ZXN0aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2vfhp[1] Phase: Succeeded StartedAt: 2026-08-23 13:52:21 +0000 UTC FinishedAt: 2026-08-23 13:52:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 13:52:21 +0000 UTC FinishedAt: 2026-08-23 13:52:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2] Phase: Succeeded StartedAt: 2026-08-23 13:52:21 +0000 UTC FinishedAt: 2026-08-23 17:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 13:52:21 +0000 UTC FinishedAt: 2026-08-23 17:35:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 13:52:21 +0000 UTC FinishedAt: 2026-08-23 13:52:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 13:52:21 +0000 UTC FinishedAt: 2026-08-23 13:52:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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-workflow2vfhp/series-workflow2vfhp-convert-artifact-2959017248/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 13:52:31 +0000 UTC FinishedAt: 2026-08-23 14:09:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 13:52:31 +0000 UTC FinishedAt: 2026-08-23 14:09:49 +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:*84ca5266-9e20-430a-ab22-973bb698239c,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-workflow2vfhp/series-workflow2vfhp-convert-artifact-2959017248/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": "8e1973c3-2c66-4359-b9ee-b94d33bd4d52", "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-workflow2vfhp/series-workflow2vfhp-build-action-3352290278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 13:52:31 +0000 UTC FinishedAt: 2026-08-23 14:09:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*84ca5266-9e20-430a-ab22-973bb698239c,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-workflow2vfhp/series-workflow2vfhp-convert-artifact-2959017248/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": "8e1973c3-2c66-4359-b9ee-b94d33bd4d52", "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-workflow2vfhp/series-workflow2vfhp-build-action-3352290278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:09:49 +0000 UTC FinishedAt: 2026-08-23 14:09:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:09:49 +0000 UTC FinishedAt: 2026-08-23 14:09:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:09:49 +0000 UTC FinishedAt: 2026-08-23 14:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:09:49 +0000 UTC FinishedAt: 2026-08-23 14:09:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-workflow2vfhp/series-workflow2vfhp-convert-artifact-1140070215/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:09:59 +0000 UTC FinishedAt: 2026-08-23 14:12:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:09:59 +0000 UTC FinishedAt: 2026-08-23 14:11:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e1973c3-2c66-4359-b9ee-b94d33bd4d52,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-workflow2vfhp/series-workflow2vfhp-build-action-3352290278/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-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:12:01 +0000 UTC FinishedAt: 2026-08-23 14:12:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:12:01 +0000 UTC FinishedAt: 2026-08-23 14:12:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:12:01 +0000 UTC FinishedAt: 2026-08-23 14:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:12:01 +0000 UTC FinishedAt: 2026-08-23 14:30:51 +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:*84ca5266-9e20-430a-ab22-973bb698239c,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-workflow2vfhp/series-workflow2vfhp-convert-artifact-1140070215/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": "c62011b8-ad1f-4564-ab06-6f390b1cdb77", "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-workflow2vfhp/series-workflow2vfhp-build-action-617633483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:12:01 +0000 UTC FinishedAt: 2026-08-23 14:30:41 +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:*84ca5266-9e20-430a-ab22-973bb698239c,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-workflow2vfhp/series-workflow2vfhp-convert-artifact-1140070215/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": "c62011b8-ad1f-4564-ab06-6f390b1cdb77", "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-workflow2vfhp/series-workflow2vfhp-build-action-617633483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:30:51 +0000 UTC FinishedAt: 2026-08-23 14:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:30:51 +0000 UTC FinishedAt: 2026-08-23 14:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:30:51 +0000 UTC FinishedAt: 2026-08-23 14:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:30:51 +0000 UTC FinishedAt: 2026-08-23 14:32:46 +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:*c62011b8-ad1f-4564-ab06-6f390b1cdb77,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-workflow2vfhp/series-workflow2vfhp-build-action-617633483/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-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:32:56 +0000 UTC FinishedAt: 2026-08-23 17:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:32:56 +0000 UTC FinishedAt: 2026-08-23 17:35:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"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:*8e1973c3-2c66-4359-b9ee-b94d33bd4d52,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c62011b8-ad1f-4564-ab06-6f390b1cdb77,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-workflow2vfhp/series-workflow2vfhp-build-action-3352290278/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-workflow2vfhp/series-workflow2vfhp-build-action-617633483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:32:56 +0000 UTC FinishedAt: 2026-08-23 14:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:32:56 +0000 UTC FinishedAt: 2026-08-23 14:32:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"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-workflow2vfhp/series-workflow2vfhp-convert-artifact-948128800/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:32:56 +0000 UTC FinishedAt: 2026-08-23 14:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:32:56 +0000 UTC FinishedAt: 2026-08-23 14:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:32:56 +0000 UTC FinishedAt: 2026-08-23 14:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:33:06 +0000 UTC FinishedAt: 2026-08-23 17:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vfhp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"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/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_unbind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2709dd5ae32f0828f386327c76bba9f39f63a1c6","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"cedd7a10-a87c-48d2-a686-33b8281a3d29","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-08-23 14:33:06 +0000 UTC FinishedAt: 2026-08-23 17:35:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e1973c3-2c66-4359-b9ee-b94d33bd4d52,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c62011b8-ad1f-4564-ab06-6f390b1cdb77,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-workflow2vfhp/series-workflow2vfhp-build-action-3352290278/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-workflow2vfhp/series-workflow2vfhp-build-action-617633483/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-workflow2vfhp/series-workflow2vfhp-convert-artifact-948128800/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,}