Name: series-workflowc5bf6 Phase: Succeeded StartedAt: 2026-08-14 07:06:43 +0000 UTC FinishedAt: 2026-08-14 11:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[0] Phase: Succeeded StartedAt: 2026-08-14 07:06:43 +0000 UTC FinishedAt: 2026-08-14 07:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 07:06:43 +0000 UTC FinishedAt: 2026-08-14 07:27:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "562d0031f6090df27be9fe1d48d50c892895fa16", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "562d0031f6090df27be9fe1d48d50c892895fa16", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "6630ac52-7e73-4546-8ca4-1fb6b2a162d5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_set", "ext4_xattr_set_handle", "ext4_expand_extra_isize_ea" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RVhUNF9GU19TRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfeGF0dHJfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfc2V0X2hhbmRsZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmRvIGxvZ2ljIGluIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHNldHRpbmcgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIHByb3BlciBjbGVhbnVwIChmcmVlaW5nIHF1b3RhLCBkcm9wcGluZyBpbm9kZSByZWZlcmVuY2VzLCBhbmQgdW5kb2luZyBibG9jayByZXVzZSkgd2hlbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgYW5kIHF1b3RhIGlzc3Vlcywgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NF94YXR0cl9ibG9ja19zZXQgd2hlbiBkcm9wcGluZyBhIHJlZmVyZW5jZSB0byBhbiBFQSBpbm9kZSBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB4YXR0ciBzeXNjYWxscyBhbmQgaW5vZGUgZXhwYW5zaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmE3ODNkM2ZiZGVlYzRjZmE4NjljZDk4ZjZiYjkwOWE0ZTJjODkwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA3OjI2OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uMGNlOTM3ZDg5MDA0MiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTM2Miw2ICYjNDM7MTM2MiwxNyBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybjtcbiB9XG4gXG4mIzQzOy8qIFVuZG8gdGhlIGxvY2FsbHktb3duZWQgcGFydCBvZiBhIGNhY2hlZC1ibG9jayByZXVzZS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZXh0NF94YXR0cl9yZXVzZV91bmRvKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiYjNDM7XHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbiYjNDM7XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZlxuICAqIGJ5dGVzIHVzZWQgYnkgRUEgZW50cmllcy5cbkBAIC0yMTA3LDYgJiM0MzsyMTE4LDM5IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0bWJfY2FjaGVfZW50cnlfdG91Y2goZWFfYmxvY2tfY2FjaGUsIGNlKTtcbiBcdFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbiBcdFx0XHRjZSA9IE5VTEw7XG4mIzQzO1x0XHRcdGlmICghKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWJhc2UgPT0gYnMtXHUwMDNlYmgtXHUwMDNlYl9kYXRhKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGVhX2lub2RlKSB7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBUaGUgcmV1c2VkIGJsb2NrIGFscmVhZHkgaG9sZHMgaXRzIG93blxuJiM0MztcdFx0XHRcdCAqIHJlZmVyZW5jZTsgZHJvcCB0aGUgZXh0cmEgb25lIHVubGVzcyB0aGVcbiYjNDM7XHRcdFx0XHQgKiBlbnRyeSB3ZW50IGludG8gdGhlIG9sZCBidWZmZXIgZGlyZWN0bHkuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0IGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdFx0XHRcdC8qXG4mIzQzO1x0XHRcdFx0XHQgKiBUaGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmUgcnVuO1xuJiM0MztcdFx0XHRcdFx0ICogZG8gbm90IHJldHJ5IGl0OiBmcmVlIHRoZSBjaGFyZ2UsXG4mIzQzO1x0XHRcdFx0XHQgKiB1bmRvIHRoZSByZXVzZSwgYW5kIGZhaWwgdGhlIG9wLlxuJiM0MztcdFx0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0XHRleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgX19MSU5FX18sIDAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XCYjMzQ7ZGVjIHJlZiBlcnJvcj0lZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgZXJyb3IpO1xuJiM0MztcdFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIGVhX2lub2RlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4mIzQzO1x0XHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRcdGlmIChuZXdfYmggIT0gYnMtXHUwMDNlYmgpXG4mIzQzO1x0XHRcdFx0XHRcdGV4dDRfeGF0dHJfcmV1c2VfdW5kbyhoYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgICBpbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgIG5ld19iaCk7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWJhc2UgPT0gYnMtXHUwMDNlYmgtXHUwMDNlYl9kYXRhKSB7XG4gXHRcdFx0LyogV2Ugd2VyZSBtb2RpZnlpbmcgdGhpcyBibG9jayBpbi1wbGFjZS4gKi9cbiBcdFx0XHRlYV9iZGVidWcoYnMtXHUwMDNlYmgsIFwmIzM0O2tlZXBpbmcgdGhpcyBibG9ja1wmIzM0Oyk7XG5AQCAtMjE0MywxMyAmIzQzOzIxODcsMjEgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0XHRnb3RvIGdldGJsa19mYWlsZWQ7XG4gXHRcdFx0aWYgKGVhX2lub2RlKSB7XG4tXHRcdFx0XHQvKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGUuICovXG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGU7IG9uXG4mIzQzO1x0XHRcdFx0ICogZmFpbHVyZSB0aGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmVcbiYjNDM7XHRcdFx0XHQgKiBydW4sIHNvIGp1c3QgZmFpbCBhbmQgZnJlZSB0aGUgYmxvY2suXG4mIzQzO1x0XHRcdFx0ICovXG4gXHRcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsXG4gXHRcdFx0XHRcdFx0XHRcdCBlYV9pbm9kZSk7XG4tXHRcdFx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0XHRcdCAgIFwmIzM0O2RlYyByZWYgZXJyb3I9JWRcJiMzNDssXG4tXHRcdFx0XHRcdFx0XHQgICBlcnJvcik7XG4mIzQzO1x0XHRcdFx0aWYgKGVycm9yKSB7XG4mIzQzO1x0XHRcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgZWFfaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiYjNDM7XHRcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuJiM0MztcdFx0XHRcdFx0Z290byBnZXRibGtfZmFpbGVkO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfaGFuZGxlJiMzNDssCiAgICAmIzM0O2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGV4dDRfeGF0dHJfYmxvY2tfc2V0IHdoZW4gZHJvcHBpbmcgYSByZWZlcmVuY2UgdG8gYW4gRUEgaW5vZGUgZmFpbHMuIFRoaXMgaXMgY29yZSBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgeGF0dHIgc3lzY2FsbHMgYW5kIGlub2RlIGV4cGFuc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJhNzgzZDNmYmRlZWM0Y2ZhODY5Y2Q5OGY2YmI5MDlhNGUyYzg5MDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzoyNjowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCA5ODJhMWY4MzFlMjI4Li4wY2U5MzdkODkwMDQyIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jCkBAIC0xMzYyLDYgJiM0MzsxMzYyLDE3IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybjsKIH0KIAomIzQzOy8qIFVuZG8gdGhlIGxvY2FsbHktb3duZWQgcGFydCBvZiBhIGNhY2hlZC1ibG9jayByZXVzZS4gKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQomIzQzO3sKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKJiM0MzsKJiM0MzsJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCAmYW1wO2VhX2lub2RlX2FycmF5LAomIzQzOwkJCQkgMCAvKiBleHRyYV9jcmVkaXRzICovKTsKJiM0MzsJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKJiM0Mzt9CiYjNDM7CiAvKgogICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZgogICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLgpAQCAtMjEwNyw2ICYjNDM7MjExOCwzOSBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJbWJfY2FjaGVfZW50cnlfdG91Y2goZWFfYmxvY2tfY2FjaGUsIGNlKTsKIAkJCW1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgY2UpOwogCQkJY2UgPSBOVUxMOwomIzQzOwkJCWlmICghKGJzLSZndDtiaCAmYW1wOyZhbXA7IHMtJmd0O2Jhc2UgPT0gYnMtJmd0O2JoLSZndDtiX2RhdGEpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgZWFfaW5vZGUpIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogVGhlIHJldXNlZCBibG9jayBhbHJlYWR5IGhvbGRzIGl0cyBvd24KJiM0MzsJCQkJICogcmVmZXJlbmNlOyBkcm9wIHRoZSBleHRyYSBvbmUgdW5sZXNzIHRoZQomIzQzOwkJCQkgKiBlbnRyeSB3ZW50IGludG8gdGhlIG9sZCBidWZmZXIgZGlyZWN0bHkuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQllcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsCiYjNDM7CQkJCQkJCQkgZWFfaW5vZGUpOwomIzQzOwkJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJCS8qCiYjNDM7CQkJCQkgKiBUaGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmUgcnVuOwomIzQzOwkJCQkJICogZG8gbm90IHJldHJ5IGl0OiBmcmVlIHRoZSBjaGFyZ2UsCiYjNDM7CQkJCQkgKiB1bmRvIHRoZSByZXVzZSwgYW5kIGZhaWwgdGhlIG9wLgomIzQzOwkJCQkJICovCiYjNDM7CQkJCQlleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXywKJiM0MzsJCQkJCQkJIF9fTElORV9fLCAwLAomIzQzOwkJCQkJCQkmIzM0O2RlYyByZWYgZXJyb3I9JWQmIzM0OywKJiM0MzsJCQkJCQkJIGVycm9yKTsKJiM0MzsJCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwKJiM0MzsJCQkJCQkJCSAgICBlYV9pbm9kZSwKJiM0MzsJCQkJCQkJCSAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpOwomIzQzOwkJCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCQllYV9pbm9kZSA9IE5VTEw7CiYjNDM7CQkJCQlpZiAobmV3X2JoICE9IGJzLSZndDtiaCkKJiM0MzsJCQkJCQlleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlLAomIzQzOwkJCQkJCQkJICAgICAgaW5vZGUsCiYjNDM7CQkJCQkJCQkgICAgICBuZXdfYmgpOwomIzQzOwkJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCQl9CiYjNDM7CQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQllYV9pbm9kZSA9IE5VTEw7CiYjNDM7CQkJfQogCQl9IGVsc2UgaWYgKGJzLSZndDtiaCAmYW1wOyZhbXA7IHMtJmd0O2Jhc2UgPT0gYnMtJmd0O2JoLSZndDtiX2RhdGEpIHsKIAkJCS8qIFdlIHdlcmUgbW9kaWZ5aW5nIHRoaXMgYmxvY2sgaW4tcGxhY2UuICovCiAJCQllYV9iZGVidWcoYnMtJmd0O2JoLCAmIzM0O2tlZXBpbmcgdGhpcyBibG9jayYjMzQ7KTsKQEAgLTIxNDMsMTMgJiM0MzsyMTg3LDIxIEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBnZXRibGtfZmFpbGVkOwogCQkJaWYgKGVhX2lub2RlKSB7Ci0JCQkJLyogRHJvcCB0aGUgZXh0cmEgcmVmIG9uIGVhX2lub2RlLiAqLwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGU7IG9uCiYjNDM7CQkJCSAqIGZhaWx1cmUgdGhlIGRlY3JlbWVudCBtYXkgYWxyZWFkeSBoYXZlCiYjNDM7CQkJCSAqIHJ1biwgc28ganVzdCBmYWlsIGFuZCBmcmVlIHRoZSBibG9jay4KJiM0MzsJCQkJICovCiAJCQkJZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLAogCQkJCQkJCQkgZWFfaW5vZGUpOwotCQkJCWlmIChlcnJvcikKLQkJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkJCSAgICYjMzQ7ZGVjIHJlZiBlcnJvcj0lZCYjMzQ7LAotCQkJCQkJCSAgIGVycm9yKTsKJiM0MzsJCQkJaWYgKGVycm9yKSB7CiYjNDM7CQkJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsCiYjNDM7CQkJCQkJCQkgICAgZWFfaW5vZGUsCiYjNDM7CQkJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKJiM0MzsJCQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQkJZWFfaW5vZGUgPSBOVUxMOwomIzQzOwkJCQkJZ290byBnZXRibGtfZmFpbGVkOwomIzQzOwkJCQl9CiAJCQkJaXB1dChlYV9pbm9kZSk7CiAJCQkJZWFfaW5vZGUgPSBOVUxMOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIGV4dDQgRXh0ZW5kZWQgQXR0cmlidXRlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIGBmcy9leHQ0L3hhdHRyLmNgLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYGV4dDRfeGF0dHJfcmV1c2VfdW5kb2AsIGFuZCBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBJIHNlZSBpdCYjMzk7cyBhbHNvIHR3ZWFraW5nIHRoZSBlcnJvciBoYW5kbGluZyB3aGVuIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZgIGZhaWxzLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgY29yZSBleHQ0IGxvZ2ljLCBteSBpbnRlcmVzdCBpcyBwaXF1ZWQgaW1tZWRpYXRlbHkuIFRoZXNlIGtpbmRzIG9mIG1vZGlmaWNhdGlvbnMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rIGFuZCwgZnJhbmtseSwgcmlwZSBmb3IgZnV6emluZy4KClRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoJiMzOTtzIGZ1bGwgaW1wYWN0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMsIHNvIEnigJltIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIHRoaXMgbmV3IGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gIGZ1bmN0aW9uLgoKTm93LCBiZWZvcmUgSSBqdW1wIGludG8gYSBkZWVwIGNvZGUgZGl2ZSwgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgdGhpcy4gU2luY2UgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLCBvZiBjb3Vyc2UuIFRoZW4sIGxldCYjMzk7cyBsb29rIGZvciBhbnkgc3BlY2lmaWMgZXh0ZW5kZWQgYXR0cmlidXRlIGNvbmZpZ3VyYXRpb25zIOKAkyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUgY29kZS4gVGhhdCB3aWxsIGhlbHAgbWUgc2V0IHVwIGEgZ29vZCB0ZXN0aW5nIGVudmlyb25tZW50IGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyBTdXBwb3J0KioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGV4cGxpY2l0IG1lbnRpb24gb2YgYEVYVDRfRlNfWEFUVFJgIG9yIGEgc2ltaWxhciBmbGFnIG9yIGlkZW50aWZpZXIuIEkga25vdyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBhIGNvcmUgcGFydCBvZiB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgY2FwYWJpbGl0aWVzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSB0aGUgc3BlY2lmaWNzLiBXZSBuZWVkIHRvIGtub3cgaWYgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byBsZXZlcmFnZSB0aGVzZSBmZWF0dXJlcy4gTGV0IG1lIHNlZSB3aGF0JiMzOTtzIG91dCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTX1hBVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJbnRlcnBsYXkgb2YgRVhUNCBGZWF0dXJlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCB3aXRoaW4gZXh0NCwgYW5kIGl0IGp1c3QgaGl0IG1lOiB0aGV5ICpyZWx5KiBvbiB4YXR0cnMuIEJ1dCB0aGVuIGFnYWluLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgeGF0dHJzIG1pZ2h0IGFjdHVhbGx5IGJlIHBlcm1hbmVudGx5IGVuYWJsZWQgaW4gZXh0NCB0aGVzZSBkYXlzLiBIbW0uIEkgbmVlZCB0byBnZXQgc29tZSBjbGFyaWZpY2F0aW9uIG9uIHRoaXMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgaXMgZGVmaW5pdGVseSB0aGUgYGZzL2V4dDQvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlciBJIG5lZWQgYWJvdXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhdHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxuZnMvZXh0NC9NYWtlZmlsZT0xNT1leHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcdFx0XHRcdCYjNDM7PSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjgzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYnJlYWtpbmcgZG93biB0aGUgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBFWFQ0IFhhdHRyIENvbXBpbGF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgYHhhdHRyLm9gIGlzICphbHdheXMqIGJyb3VnaHQgaW50byB0aGUgYnVpbGQgaWYgYEVYVDRfRlNgIGlzIGRlZmluZWQuIFRoaXMgY29uZmlybXMgdGhhdCBgRVhUNF9GU2AgaXMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRyaXZlcyB0aGlzIGluY2x1c2lvbi4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLCBidXQgZ29vZCB0byBoYXZlIHRoYXQgY29uZmlybWVkIGFzIHRoZSBzdGFydGluZyBwb2ludC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSByZWZlcmVuY2VzIG1vZGlmaWNhdGlvbnMgdG8gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YC4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB0aGF0IGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgaW52b2tlZCB3aWxsIHRlbGwgbWUgd2hhdCBzeXN0ZW1zLCB3b3JrZmxvd3MsIG9yIHByb2Nlc3NlcyBhcmUgbW9zdCBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBUaGlzIGlzIGhvdyBJJiMzOTtsbCB1bmRlcnN0YW5kIHRoZSByaXBwbGUgZWZmZWN0cyBvZiB0aGUgdXBkYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MTI3Mj1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTI5NC1cdFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcbmZzL2V4dDQveGF0dHIuYzoxMjk1Olx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xuZnMvZXh0NC94YXR0ci5jLTEyOTYtXHRcdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xOTA5PXN0YXRpYyBpbnRcbmZzL2V4dDQveGF0dHIuYzoxOTEwOmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTkxMS1cdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xOTU1LVx0XHRcdCAqIFRoaXMgbXVzdCBoYXBwZW4gdW5kZXIgYnVmZmVyIGxvY2sgZm9yXG5mcy9leHQ0L3hhdHRyLmM6MTk1NjpcdFx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxuZnMvZXh0NC94YXR0ci5jLTE5NTctXHRcdFx0ICogYmxvY2tcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjQwMT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI0ODQtXHRcdGVsc2UgaWYgKCFicy5zLm5vdF9mb3VuZClcbmZzL2V4dDQveGF0dHIuYzoyNDg1Olx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2YnMpO1xuZnMvZXh0NC94YXR0ci5jLTI0ODYtXHR9IGVsc2Uge1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTAxLVx0XHRcdGkudmFsdWUgPSBOVUxMO1xuZnMvZXh0NC94YXR0ci5jOjI1MDI6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjUwMy1cdFx0fSBlbHNlIGlmIChlcnJvciA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1MTAtXHRcdFx0fVxuZnMvZXh0NC94YXR0ci5jOjI1MTE6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjUxMi1cdFx0XHRpZiAoIWVycm9yIFx1MDAyNlx1MDAyNiAhaXMucy5ub3RfZm91bmQpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjY1Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNzIyLVx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xuZnMvZXh0NC94YXR0ci5jOjI3MjM6XHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmksIGJzKTtcbmZzL2V4dDQveGF0dHIuYy0yNzI0LVx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhlIGV4dDQgZmlsZXN5c3RlbToKCioqRGl2aW5nIGludG8geGF0dHIgU2V0dGluZyBpbiBleHQ0KioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHNldHRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSBrbm93IGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGlzICp0aGUqIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoYXQuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgdG8gdW5kZXJzdGFuZCBhbGwgb2YgdGhlIHVzZSBjYXNlcywgaWRlbnRpZnkgd2hpY2ggcHJvY2Vzc2VzIHVzZSBpdCBhbmQgaW4gd2hhdCB3YXkuIFdoZXJlIGluIHRoZSBjb2RlYmFzZSBpcyB0aGlzIHBpdm90YWwgZnVuY3Rpb24gYWN0dWFsbHkgKmNhbGxlZCogZnJvbT8gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyBsaWUsIGFuZCB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2FjbC5jPTE4OT1fX2V4dDRfc2V0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbi0tXG5mcy9leHQ0L2FjbC5jLTIxNi1cbmZzL2V4dDQvYWNsLmM6MjE3Olx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgXCYjMzQ7XCYjMzQ7LFxuZnMvZXh0NC9hY2wuYy0yMTgtXHRcdFx0XHQgICAgICB2YWx1ZSwgc2l6ZSwgeGF0dHJfZmxhZ3MpO1xuLS1cbmZzL2V4dDQvY3J5cHRvLmM9MTMyPXN0YXRpYyBpbnQgZXh0NF9zZXRfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpjdHgsIHNpemVfdCBsZW4sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xNzItXHRcdCAqL1xuZnMvZXh0NC9jcnlwdG8uYzoxNzM6XHRcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC9jcnlwdG8uYy0xNzQtXHRcdFx0XHRcdCAgICBFWFQ0X1hBVFRSX0lOREVYX0VOQ1JZUFRJT04sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0yMDItXG5mcy9leHQ0L2NyeXB0by5jOjIwMzpcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX0VOQ1JZUFRJT04sXG5mcy9leHQ0L2NyeXB0by5jLTIwNC1cdFx0XHRcdCAgICBFWFQ0X1hBVFRSX05BTUVfRU5DUllQVElPTl9DT05URVhULFxuLS1cbmZzL2V4dDQveGF0dHIuYz0yMzcwPXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfeGF0dHJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTIzODgtLypcbmZzL2V4dDQveGF0dHIuYzoyMzg5OiAqIGV4dDRfeGF0dHJfc2V0X2hhbmRsZSgpXG5mcy9leHQ0L3hhdHRyLmMtMjM5MC0gKlxuLS1cbmZzL2V4dDQveGF0dHIuYz0yNDAwPWludFxuZnMvZXh0NC94YXR0ci5jOjI0MDE6ZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LFxuZnMvZXh0NC94YXR0ci5jLTI0MDItXHRcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0yNTUzPWludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1ODItICpcbmZzL2V4dDQveGF0dHIuYzoyNTgzOiAqIExpa2UgZXh0NF94YXR0cl9zZXRfaGFuZGxlLCBidXQgc3RhcnQgZnJvbSBhbiBpbm9kZS4gVGhpcyBleHRlbmRlZFxuZnMvZXh0NC94YXR0ci5jLTI1ODQtICogYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBpcyBhIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gYnkgaXRzZWxmLlxuLS1cbmZzL2V4dDQveGF0dHIuYz0yNTg5PWV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNjEyLVxuZnMvZXh0NC94YXR0ci5jOjI2MTM6XHRcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsXG5mcy9leHQ0L3hhdHRyLmMtMjYxNC1cdFx0XHRcdFx0ICAgICAgdmFsdWUsIHZhbHVlX2xlbiwgZmxhZ3MpO1xuLS1cbmZzL2V4dDQveGF0dHIuaD0xODE9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xuZnMvZXh0NC94YXR0ci5oOjE4MjpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xuZnMvZXh0NC94YXR0ci5oLTE4My1leHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM9MzY9ZXh0NF9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJfYXJyYXksXG4tLVxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTQzLVx0Zm9yICh4YXR0ciA9IHhhdHRyX2FycmF5OyB4YXR0ci1cdTAwM2VuYW1lICE9IE5VTEw7IHhhdHRyJiM0MzsmIzQzOykge1xuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jOjQ0Olx0XHRlcnIgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSxcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy00NS1cdFx0XHRcdFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBleHQ0X3hhdHRyX3NldGAgRnVuY3Rpb24qKgoKT2theSwgc28gYGV4dDRfeGF0dHJfc2V0YCBpcyB0aGUgYmlnIGthaHVuYSwgdGhlIHRvcC1sZXZlbCBmdW5jdGlvbiBmb3Igc2V0dGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIG9uIGFuIGV4dDQgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaW52b2tlZCBmcm9tIHdpdGhpbiB0aGUga2VybmVsLCBhbmQgd2hhdCBhcmUgdGhlIGNvbnRleHRzIG9mIHRob3NlIGNhbGxzPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCAqd2h5KiBgZXh0NF94YXR0cl9zZXRgIGlzIGJlaW5nIGNhbGxlZCBhbmQgdGhlIHR5cGljYWwgc2NlbmFyaW9zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjcml0aWNhbCB1bmRlcnN0YW5kaW5nIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcgYW5kIG9wdGltaXNhdGlvbiBsYXRlciBvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0yNTUzPWludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1ODAtLypcbmZzL2V4dDQveGF0dHIuYzoyNTgxOiAqIGV4dDRfeGF0dHJfc2V0KClcbmZzL2V4dDQveGF0dHIuYy0yNTgyLSAqXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1ODg9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjU4OTpleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCwgY29uc3QgY2hhciAqbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNTkwLVx0ICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC94YXR0ci5oPTE4MD1leHRlcm4gaW50IGV4dDRfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpO1xuZnMvZXh0NC94YXR0ci5oOjE4MTpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XG5mcy9leHQ0L3hhdHRyLmgtMTgyLWV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XG4tLVxuZnMvZXh0NC94YXR0cl9odXJkLmM9MzQ9ZXh0NF94YXR0cl9odXJkX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00Mi1cbmZzL2V4dDQveGF0dHJfaHVyZC5jOjQzOlx0cmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX0hVUkQsXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00NC1cdFx0XHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xuLS1cbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYz0yNT1leHQ0X3hhdHRyX3NlY3VyaXR5X3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtMzAte1xuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jOjMxOlx0cmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTMyLVx0XHRcdCAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7XG4tLVxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmM9MzI9ZXh0NF94YXR0cl90cnVzdGVkX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYy0zNy17XG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYzozODpcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVELFxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmMtMzktXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbi0tXG5mcy9leHQ0L3hhdHRyX3VzZXIuYz0zMz1leHQ0X3hhdHRyX3VzZXJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHJfdXNlci5jLTQwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5mcy9leHQ0L3hhdHRyX3VzZXIuYzo0MTpcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9VU0VSLFxuZnMvZXh0NC94YXR0cl91c2VyLmMtNDItXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgYGV4dDRgIEZpbGVzeXN0ZW0gWGF0dHIgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gYGV4dDRgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgZXh0NF94YXR0cl9zZXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZyb20gdGhlIFZGUyB4YXR0ciBoYW5kbGVycywgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBleHQ0X3hhdHRyX3NldGAsIHRoZSB3aG9sZSBjYWxsIGNoYWluIHNlZW1zIHNpZ25pZmljYW50LgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgcHJpbWFyaWx5IG9uIGBleHQ0X3hhdHRyX3NldGAg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXMgYSBmb2N1cyBzeW1ib2wgYXMgd2VsbC4gV2hpbGUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBzdGF0aWMsIG1lYW5pbmcgaXQgY2FuJiMzOTt0IGJlIGRpcmVjdGx5IHRhcmdldGVkIGlmIGlubGluZWQsIGl0JiMzOTtzIGEgbGFyZ2UgZnVuY3Rpb24gc28gdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB0aGF0IGl0IGlzIG5vdC4gSG93ZXZlciwgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXJlIGJvdGggZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSB3YXkgdG8gZ28uCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gT2J2aW91c2x5LCBgQ09ORklHX0VYVDRfRlNgIGlzIGVzc2VudGlhbCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBUbyBwb3RlbnRpYWxseSB1bmxvY2sgbW9yZSB4YXR0ci1yZWxhdGVkIGNvZGUgcGF0aHMsIEkgc2hvdWxkIGFsc28gZW5hYmxlIGBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlgLiBBZGRpbmcgYWxsIG9mIHRob3NlIHdpbGwgYmUgbmVjZXNzYXJ5LgoKSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIHBhdGNoIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSBzZWUgdGhhdCBgZXh0NF94YXR0cl9yZXVzZV91bmRvYCBpcyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24uIEkmIzM5O3ZlIGFscmVhZHkgbm90ZWQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBTbywgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXJlIHRoZSBtYWluIGNhbGxlcnMuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYGV4dDRfeGF0dHJfc2V0YCBpcyBpbiBgZnMvZXh0NC94YXR0ci5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gVGhlIHNhbWUgZ29lcyBmb3IgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgLSBhbHNvIGV4cG9ydGVkIGFuZCBub3Qgc3RhdGljLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgKm90aGVyKiBjYWxsZXJzIG9mIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAuIEl0IGxvb2tzIGxpa2UgYGV4dDRfeGF0dHJfbW92ZV90b19ibG9ja2AgYWxzbyBjYWxscyBpdCwgc28gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgIGlzIGNhbGxlZCBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MjYzMj1zdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3NoaWZ0X2VudHJpZXMoc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNjU2LSAqL1xuZnMvZXh0NC94YXR0ci5jOjI2NTc6c3RhdGljIGludCBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yNjU4LVx0XHRcdFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI3NDY9c3RhdGljIGludCBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjc5Ny1cdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG5mcy9leHQ0L3hhdHRyLmM6Mjc5ODpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2soaGFuZGxlLCBpbm9kZSwgcmF3X2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTI3OTktXHRcdFx0XHRcdFx0IGVudHJ5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgWGF0dHIgU3BhY2UgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSB3aGVuIHRoZXkgbmVlZCB0byBiZSBtb3ZlZCB0byBibG9jayBzcGFjZS4gSXQgbG9va3MgbGlrZSBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhpcyBwcm9jZXNzLCBjYWxsaW5nIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgLiBUaGF0JiMzOTtzIHRoZSBrZXkgdHJhbnNpdGlvbiBwb2ludC4KCk5vdywgbXkgaW1tZWRpYXRlIG5leHQgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2VgIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKnRyaWdnZXJzKiBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzLiBJcyBpdCB3aGVuIGFuIHhhdHRyJiMzOTtzIGRhdGEgZ2V0cyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgaW5vZGUgaXRzZWxmPyBJcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBzcGVjaWZpYyBvcGVyYXRpb24sIGxpa2UgYSBzZXR4YXR0ciBjYWxsLCBvciBzb21ldGhpbmcgaW50ZXJuYWw/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgYGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZWAgaXMgY3J1Y2lhbCB0byBmdWxseSBncmFzcCB0aGUgeGF0dHIgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgZXZlbiBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBzdWNoIGFzIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBtb3ZlbWVudCBvZiBkYXRhLiBUaGlzIGNhbGwgY2hhaW4gaXMgd2hhdCBJIG5lZWQgdG8gdHJhY2UgYW5kIHVuZGVyc3RhbmQgdG8gZ2FpbiBhIGJldHRlciBhcHByZWNpYXRpb24gb2Ygd2hhdCBleHQ0IGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MjY1Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNzQ1LVxuZnMvZXh0NC94YXR0ci5jOjI3NDY6c3RhdGljIGludCBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yNzQ3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI4MTU9aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI4ODUtXG5mcy9leHQ0L3hhdHRyLmM6Mjg4NjpcdGVycm9yID0gZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZSwgaW5vZGUsIHJhd19pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yODg3LVx0XHRcdFx0XHQgICAgaXNpemVfZGlmZiwgaWZyZWUsIGJmcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBpbnZva2VkPyBXaGF0JiMzOTtzIHRoZSBjYWxsIGdyYXBoPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaGFuZGxpbmcsIGFuZCBleHBhbnNpb24gaW1wbGllcyBhIHNpemUgY2hhbmdlLiBJIG5lZWQgdG8ga25vdyAqd2h5KiB0aGUgZXhwYW5zaW9uIGlzIGhhcHBlbmluZyB0byBmdWxseSBncmFzcCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBhbmQgaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIG9yIG1ldGhvZHMuIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSXMgdGhpcyByZWxhdGVkIHRvIGZpbGUgY3JlYXRpb24sIG1vZGlmaWNhdGlvbiwgb3IgbWV0YWRhdGEgdXBkYXRlcz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBwYXJhbW91bnQgdG8gYXZvaWQgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGxpa2UgRUEgc2l6aW5nLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgY2FsbCB0cmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jPTY0Mzk9c3RhdGljIGludCBfX2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTY0ODUtXHQvKiB0cnkgdG8gZXhwYW5kIHdpdGggRUFzIHByZXNlbnQgKi9cbmZzL2V4dDQvaW5vZGUuYzo2NDg2Olx0ZXJyb3IgPSBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShpbm9kZSwgbmV3X2V4dHJhX2lzaXplLFxuZnMvZXh0NC9pbm9kZS5jLTY0ODctXHRcdFx0XHRcdCAgIHJhd19pbm9kZSwgaGFuZGxlKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9Mjc0Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODE0LSAqL1xuZnMvZXh0NC94YXR0ci5jOjI4MTU6aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG5mcy9leHQ0L3hhdHRyLmMtMjgxNi1cdFx0XHQgICAgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmg9MTkyPWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xuZnMvZXh0NC94YXR0ci5oLTE5My1cbmZzL2V4dDQveGF0dHIuaDoxOTQ6ZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuZnMvZXh0NC94YXR0ci5oLTE5NS1cdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzYxCgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDMyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRXh0NCBFeHRlbmRlZCBBdHRyaWJ1dGUgTG9naWMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHNwZWNpZmljYWxseSwgaG93IGl0IGhhbmRsZXMgZXJyb3JzIHdoZW4gbWFuYWdpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBleHQ0IGZpbGVzeXN0ZW1zLiBJdCBzZWVtcyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGdldHMgY2FsbGVkIGZyb20gYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlLiBUaGVyZWZvcmUsIGBleHQ0X3hhdHRyX3NldGAsIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBhcmUgZGVmaW5pdGVseSB3b3J0aCBmb2N1c2luZyBvbiBpbiBteSBmdXp6aW5nIGVmZm9ydHMuIEkgbmVlZCB0byBrZWVwIHRoZXNlIGZ1bmN0aW9ucyBhdCB0aGUgZm9yZWZyb250LgoKTm93LCBiZWZvcmUgSSBwcm9jZWVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHNldCB1cC4gYEVYVDRfRlNgIGlzIG9idmlvdXNseSBjcml0aWNhbC4gYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSBsaWtlbHkgYmVuZWZpY2lhbCwgdG9vLCB0byBjb3ZlciBhcyBtdWNoIGdyb3VuZCBhcyBwb3NzaWJsZSBkdXJpbmcgdGVzdGluZy4KCkhlcmUmIzM5O3MgYSBxdWljayBzdW1tYXJ5IG9mIG15IGZpbmRpbmdzOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGRlZmluaXRlbHkgYSB2dWxuZXJhYmlsaXR5LXByb25lIGFyZWEuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgZXh0NF94YXR0cl9zZXRgLCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCwgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYAoqICAgKipFbmFibGVDb25maWdzOioqIGBFWFQ0X0ZTYCwgYEVYVDRfRlNfUE9TSVhfQUNMYCwgYEVYVDRfRlNfU0VDVVJJVFlgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggdG91Y2hlcyBlcnJvciBoYW5kbGluZyBzcGVjaWZpY2FsbHkgd2l0aGluIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgd2hlbiBhbiBFQSBpbm9kZSByZWZlcmVuY2UgZHJvcCBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljLiBHaXZlbiB0aGF0IHhhdHRyIHN5c2NhbGxzIGFyZSB1c2VyLWFjY2Vzc2libGUgYW5kIGlub2RlIGV4cGFuc2lvbiB0cmlnZ2VycyB0aGlzIGxvZ2ljLCBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCkkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBhcmVuJiMzOTt0IHN0YXRpYy4gWWVzLCB0aGV5IGFyZSBleHBvcnRlZCBpbiBgZnMvZXh0NC94YXR0ci5oYCwgYXMgSSBleHBlY3RlZC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgcmVzdWx0cyB3aXRoIHRoYXQgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfU0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAgICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NF94YXR0cl9ibG9ja19zZXQgd2hlbiBkcm9wcGluZyBhIHJlZmVyZW5jZSB0byBhbiBFQSBpbm9kZSBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB4YXR0ciBzeXNjYWxscyBhbmQgaW5vZGUgZXhwYW5zaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfU0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAgICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NF94YXR0cl9ibG9ja19zZXQgd2hlbiBkcm9wcGluZyBhIHJlZmVyZW5jZSB0byBhbiBFQSBpbm9kZSBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB4YXR0ciBzeXNjYWxscyBhbmQgaW5vZGUgZXhwYW5zaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmRvIGxvZ2ljIGluIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHNldHRpbmcgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIHByb3BlciBjbGVhbnVwIChmcmVlaW5nIHF1b3RhLCBkcm9wcGluZyBpbm9kZSByZWZlcmVuY2VzLCBhbmQgdW5kb2luZyBibG9jayByZXVzZSkgd2hlbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgYW5kIHF1b3RhIGlzc3Vlcywgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmE3ODNkM2ZiZGVlYzRjZmE4NjljZDk4ZjZiYjkwOWE0ZTJjODkwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDA3OjI2OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjguLjBjZTkzN2Q4OTAwNDIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTEzNjIsNiAmIzQzOzEzNjIsMTcgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuOwogfQogCiYjNDM7LyogVW5kbyB0aGUgbG9jYWxseS1vd25lZCBwYXJ0IG9mIGEgY2FjaGVkLWJsb2NrIHJldXNlLiAqLwomIzQzO3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfcmV1c2VfdW5kbyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwomIzQzOwomIzQzOwlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsICZhbXA7ZWFfaW5vZGVfYXJyYXksCiYjNDM7CQkJCSAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pOwomIzQzOwlleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mCiAgKiBieXRlcyB1c2VkIGJ5IEVBIGVudHJpZXMuCkBAIC0yMTA3LDYgJiM0MzsyMTE4LDM5IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQltYl9jYWNoZV9lbnRyeV90b3VjaChlYV9ibG9ja19jYWNoZSwgY2UpOwogCQkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CiAJCQljZSA9IE5VTEw7CiYjNDM7CQkJaWYgKCEoYnMtJmd0O2JoICZhbXA7JmFtcDsgcy0mZ3Q7YmFzZSA9PSBicy0mZ3Q7YmgtJmd0O2JfZGF0YSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBlYV9pbm9kZSkgewomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBUaGUgcmV1c2VkIGJsb2NrIGFscmVhZHkgaG9sZHMgaXRzIG93bgomIzQzOwkJCQkgKiByZWZlcmVuY2U7IGRyb3AgdGhlIGV4dHJhIG9uZSB1bmxlc3MgdGhlCiYjNDM7CQkJCSAqIGVudHJ5IHdlbnQgaW50byB0aGUgb2xkIGJ1ZmZlciBkaXJlY3RseS4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWVycm9yID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwKJiM0MzsJCQkJCQkJCSBlYV9pbm9kZSk7CiYjNDM7CQkJCWlmIChlcnJvcikgewomIzQzOwkJCQkJLyoKJiM0MzsJCQkJCSAqIFRoZSBkZWNyZW1lbnQgbWF5IGFscmVhZHkgaGF2ZSBydW47CiYjNDM7CQkJCQkgKiBkbyBub3QgcmV0cnkgaXQ6IGZyZWUgdGhlIGNoYXJnZSwKJiM0MzsJCQkJCSAqIHVuZG8gdGhlIHJldXNlLCBhbmQgZmFpbCB0aGUgb3AuCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCWV4dDRfZXJyb3JfaW5vZGUoaW5vZGUsIF9fZnVuY19fLAomIzQzOwkJCQkJCQkgX19MSU5FX18sIDAsCiYjNDM7CQkJCQkJCSYjMzQ7ZGVjIHJlZiBlcnJvcj0lZCYjMzQ7LAomIzQzOwkJCQkJCQkgZXJyb3IpOwomIzQzOwkJCQkJZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLAomIzQzOwkJCQkJCQkJICAgIGVhX2lub2RlLAomIzQzOwkJCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7CiYjNDM7CQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJCWVhX2lub2RlID0gTlVMTDsKJiM0MzsJCQkJCWlmIChuZXdfYmggIT0gYnMtJmd0O2JoKQomIzQzOwkJCQkJCWV4dDRfeGF0dHJfcmV1c2VfdW5kbyhoYW5kbGUsCiYjNDM7CQkJCQkJCQkgICAgICBpbm9kZSwKJiM0MzsJCQkJCQkJCSAgICAgIG5ld19iaCk7CiYjNDM7CQkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQkJCX0KJiM0MzsJCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCWVhX2lub2RlID0gTlVMTDsKJiM0MzsJCQl9CiAJCX0gZWxzZSBpZiAoYnMtJmd0O2JoICZhbXA7JmFtcDsgcy0mZ3Q7YmFzZSA9PSBicy0mZ3Q7YmgtJmd0O2JfZGF0YSkgewogCQkJLyogV2Ugd2VyZSBtb2RpZnlpbmcgdGhpcyBibG9jayBpbi1wbGFjZS4gKi8KIAkJCWVhX2JkZWJ1Zyhicy0mZ3Q7YmgsICYjMzQ7a2VlcGluZyB0aGlzIGJsb2NrJiMzNDspOwpAQCAtMjE0MywxMyAmIzQzOzIxODcsMjEgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGdldGJsa19mYWlsZWQ7CiAJCQlpZiAoZWFfaW5vZGUpIHsKLQkJCQkvKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGUuICovCiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIERyb3AgdGhlIGV4dHJhIHJlZiBvbiBlYV9pbm9kZTsgb24KJiM0MzsJCQkJICogZmFpbHVyZSB0aGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmUKJiM0MzsJCQkJICogcnVuLCBzbyBqdXN0IGZhaWwgYW5kIGZyZWUgdGhlIGJsb2NrLgomIzQzOwkJCQkgKi8KIAkJCQllcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsCiAJCQkJCQkJCSBlYV9pbm9kZSk7Ci0JCQkJaWYgKGVycm9yKQotCQkJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsCi0JCQkJCQkJICAgJiMzNDtkZWMgcmVmIGVycm9yPSVkJiMzNDssCi0JCQkJCQkJICAgZXJyb3IpOwomIzQzOwkJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwKJiM0MzsJCQkJCQkJCSAgICBlYV9pbm9kZSwKJiM0MzsJCQkJCQkJCSAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpOwomIzQzOwkJCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCQllYV9pbm9kZSA9IE5VTEw7CiYjNDM7CQkJCQlnb3RvIGdldGJsa19mYWlsZWQ7CiYjNDM7CQkJCX0KIAkJCQlpcHV0KGVhX2lub2RlKTsKIAkJCQllYV9pbm9kZSA9IE5VTEw7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM2CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDQ4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFWFQ0IFhhdHRyIFBhdGNoKioKCk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaW4gYGZzL2V4dDQveGF0dHIuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSByZWZlcmVuY2UgY291bnRpbmcgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgY2VudGVyZWQgYXJvdW5kIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIHRoYXQgbWF5IGFyaXNlIGR1cmluZyB4YXR0ciBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIGJsb2NrIHJldXNlIGFuZCBhbGxvY2F0aW9uIGZhaWx1cmVzLgoKVGhlIGtleSBhZGRpdGlvbiBzZWVtcyB0byBiZSB0aGUgYGV4dDRfeGF0dHJfcmV1c2VfdW5kb2AgZnVuY3Rpb24uIEl0IHByb3ZpZGVzIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHJvbGxpbmcgYmFjayBvcGVyYXRpb25zIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IHJlbGVhc2VzIHRoZSBibG9jayAoYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2ApIGFuZCBmcmVlcyB0aGUgYXNzb2NpYXRlZCBpbm9kZSBhcnJheSAoYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZWApLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBhbmQgbmVjZXNzYXJ5IHBhdHRlcm4gZm9yIHVuZG9pbmcgcG90ZW50aWFsbHkgaW5jb21wbGV0ZSB4YXR0ciB1cGRhdGVzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHRoZSBzbmlwcGV0IHdpdGhpbiBgZXh0NF94YXR0cl9ibG9ja19zZXRgOgoKYGBgYwoJCQlpZiAoIShicy0mZ3Q7YmggJmFtcDsmYW1wOyBzLSZndDtiYXNlID09IGJzLSZndDtiaC0mZ3Q7Yl9kYXRhKSAmYW1wOyZhbXA7CgkJCSAgICBlYV9pbm9kZSkgewoJCQkJLyoKCQkJCSAqIFRoZSByZXVzZWQgYmxvY2sgYWxyZWFkeSBob2xkcyBpdHMgb3duCgkJCQkgKiByZWZlcmVuY2U7IGRyb3AgdGhlIGV4dHJhIG9uZSB1bmxlc3MgdGhlCgkJCQkgKiBlbnRyeSB3ZW50IGludG8gdGhlIG9sZCBidWZmZXIgZGlyZWN0bHkuCgkJCQkgKi8KCQkJCWVycm9yID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwKCQkJCQkJCQkgZWFfaW5vZGUpOwoJCQkJaWYgKGVycm9yKSB7Ci4uLgpgYGAKClRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBpbXByZXNzaW9uLiBJdCYjMzk7cyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvIHdpdGhpbiB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHByb2Nlc3MuIFRoZXJlJiMzOTtzIG5vIGhpbnQgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgdHlwZSBvZiBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbi4gSXQgZm9jdXNlcyBvbiB0aGUgY3J1Y2lhbCBhc3BlY3Qgb2YgZGVjcmVtZW50aW5nIHJlZmVyZW5jZSBjb3VudHMgKCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCksIGVuc3VyaW5nIHRoYXQgd2UgZG9uJiMzOTt0IGVuZCB1cCB3aXRoIGRhbmdsaW5nIHBvaW50ZXJzIG9yIHJlc291cmNlIGV4aGF1c3Rpb24uCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBhbmQgY29uc2lkZXJpbmcgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgdG9vbGluZywgS0FTQU4vTE9DS0RFUC9LTUVNTEVBSyBhcmUgYmV0dGVyIHN1aXRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgbWVtb3J5IGlzc3Vlcy4gS01TQU4gZG9lc24mIzM5O3Qgc2VlbSByZWxldmFudCBoZXJlLiBUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgY29ycmVjdG5lc3MgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQsIG5vdCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCByZWFkcy4gSXQgYWRkcmVzc2VzIHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIHF1b3RhIGxlYWtzLCBidXQgbm90IG1lbW9yeSBzYWZldHkgaXNzdWVzIHBlciBzZS4gSXQmIzM5O3MgYSBzb2xpZCwgdGFyZ2V0ZWQgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5kbyBsb2dpYyBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBzZXR0aW5nIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBwcm9wZXIgY2xlYW51cCAoZnJlZWluZyBxdW90YSwgZHJvcHBpbmcgaW5vZGUgcmVmZXJlbmNlcywgYW5kIHVuZG9pbmcgYmxvY2sgcmV1c2UpIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcywgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIGFuZCBxdW90YSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5kbyBsb2dpYyBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBzZXR0aW5nIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBwcm9wZXIgY2xlYW51cCAoZnJlZWluZyBxdW90YSwgZHJvcHBpbmcgaW5vZGUgcmVmZXJlbmNlcywgYW5kIHVuZG9pbmcgYmxvY2sgcmV1c2UpIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcywgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIGFuZCBxdW90YSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjA5Ljg4MDIzNjk3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzkwNjE1MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDRfRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJFWFQ0X0ZTX1NFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICAgIFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmRvIGxvZ2ljIGluIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHNldHRpbmcgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIHByb3BlciBjbGVhbnVwIChmcmVlaW5nIHF1b3RhLCBkcm9wcGluZyBpbm9kZSByZWZlcmVuY2VzLCBhbmQgdW5kb2luZyBibG9jayByZXVzZSkgd2hlbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgYW5kIHF1b3RhIGlzc3Vlcywgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0X3hhdHRyX2Jsb2NrX3NldCB3aGVuIGRyb3BwaW5nIGEgcmVmZXJlbmNlIHRvIGFuIEVBIGlub2RlIGZhaWxzLiBUaGlzIGlzIGNvcmUgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHhhdHRyIHN5c2NhbGxzIGFuZCBpbm9kZSBleHBhbnNpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjA5Ljg4MDI0NDg5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDE0MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmE3ODNkM2ZiZGVlYzRjZmE4NjljZDk4ZjZiYjkwOWE0ZTJjODkwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzoyNjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcXG5pbmRleCA5ODJhMWY4MzFlMjI4Li4wY2U5MzdkODkwMDQyIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xcbkBAIC0xMzYyLDYgKzEzNjIsMTcgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybjtcXG4gfVxcbiBcXG4rLyogVW5kbyB0aGUgbG9jYWxseS1vd25lZCBwYXJ0IG9mIGEgY2FjaGVkLWJsb2NrIHJldXNlLiAqL1xcbitzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbit7XFxuK1xcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XFxuK1xcbitcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIFxcdTAwMjZlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0XFx0XFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XFxuK1xcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIEZpbmQgdGhlIGF2YWlsYWJsZSBmcmVlIHNwYWNlIGZvciBFQXMuIFRoaXMgYWxzbyByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2ZcXG4gICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLlxcbkBAIC0yMTA3LDYgKzIxMTgsMzkgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0bWJfY2FjaGVfZW50cnlfdG91Y2goZWFfYmxvY2tfY2FjaGUsIGNlKTtcXG4gXFx0XFx0XFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XFxuIFxcdFxcdFxcdGNlID0gTlVMTDtcXG4rXFx0XFx0XFx0aWYgKCEoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IHMtXFx1MDAzZWJhc2UgPT0gYnMtXFx1MDAzZWJoLVxcdTAwM2ViX2RhdGEpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBlYV9pbm9kZSkge1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBUaGUgcmV1c2VkIGJsb2NrIGFscmVhZHkgaG9sZHMgaXRzIG93blxcbitcXHRcXHRcXHRcXHQgKiByZWZlcmVuY2U7IGRyb3AgdGhlIGV4dHJhIG9uZSB1bmxlc3MgdGhlXFxuK1xcdFxcdFxcdFxcdCAqIGVudHJ5IHdlbnQgaW50byB0aGUgb2xkIGJ1ZmZlciBkaXJlY3RseS5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdFxcdCAqIFRoZSBkZWNyZW1lbnQgbWF5IGFscmVhZHkgaGF2ZSBydW47XFxuK1xcdFxcdFxcdFxcdFxcdCAqIGRvIG5vdCByZXRyeSBpdDogZnJlZSB0aGUgY2hhcmdlLFxcbitcXHRcXHRcXHRcXHRcXHQgKiB1bmRvIHRoZSByZXVzZSwgYW5kIGZhaWwgdGhlIG9wLlxcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0ZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgX19mdW5jX18sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBfX0xJTkVfXywgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZXJyb3IpO1xcbitcXHRcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBlYV9pbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuK1xcdFxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuK1xcdFxcdFxcdFxcdFxcdGlmIChuZXdfYmggIT0gYnMtXFx1MDAzZWJoKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmV3X2JoKTtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIGlmIChicy1cXHUwMDNlYmggXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlYmFzZSA9PSBicy1cXHUwMDNlYmgtXFx1MDAzZWJfZGF0YSkge1xcbiBcXHRcXHRcXHQvKiBXZSB3ZXJlIG1vZGlmeWluZyB0aGlzIGJsb2NrIGluLXBsYWNlLiAqL1xcbiBcXHRcXHRcXHRlYV9iZGVidWcoYnMtXFx1MDAzZWJoLCBcXFwia2VlcGluZyB0aGlzIGJsb2NrXFxcIik7XFxuQEAgLTIxNDMsMTMgKzIxODcsMjEgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGdldGJsa19mYWlsZWQ7XFxuIFxcdFxcdFxcdGlmIChlYV9pbm9kZSkge1xcbi1cXHRcXHRcXHRcXHQvKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGUuICovXFxuK1xcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdCAqIERyb3AgdGhlIGV4dHJhIHJlZiBvbiBlYV9pbm9kZTsgb25cXG4rXFx0XFx0XFx0XFx0ICogZmFpbHVyZSB0aGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmVcXG4rXFx0XFx0XFx0XFx0ICogcnVuLCBzbyBqdXN0IGZhaWwgYW5kIGZyZWUgdGhlIGJsb2NrLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZWFfaW5vZGUpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZXJyb3IpXFxuLVxcdFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBlcnJvcik7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnJvcikge1xcbitcXHRcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBlYV9pbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuK1xcdFxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZ2V0YmxrX2ZhaWxlZDtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0ZWFfaW5vZGUgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjEwLjMzMjA0MjU1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2MTM1NTA0NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDRfRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJFWFQ0X0ZTX1NFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICAgIFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0X3hhdHRyX2Jsb2NrX3NldCB3aGVuIGRyb3BwaW5nIGEgcmVmZXJlbmNlIHRvIGFuIEVBIGlub2RlIGZhaWxzLiBUaGlzIGlzIGNvcmUgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHhhdHRyIHN5c2NhbGxzIGFuZCBpbm9kZSBleHBhbnNpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJhNzgzZDNmYmRlZWM0Y2ZhODY5Y2Q5OGY2YmI5MDlhNGUyYzg5MDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzoyNjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uMGNlOTM3ZDg5MDA0MiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTM2Miw2ICsxMzYyLDE3IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuO1xuIH1cbiBcbisvKiBVbmRvIHRoZSBsb2NhbGx5LW93bmVkIHBhcnQgb2YgYSBjYWNoZWQtYmxvY2sgcmV1c2UuICovXG4rc3RhdGljIHZvaWQgZXh0NF94YXR0cl9yZXVzZV91bmRvKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4re1xuK1x0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbitcbitcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4rXHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbitcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4rfVxuK1xuIC8qXG4gICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZlxuICAqIGJ5dGVzIHVzZWQgYnkgRUEgZW50cmllcy5cbkBAIC0yMTA3LDYgKzIxMTgsMzkgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRtYl9jYWNoZV9lbnRyeV90b3VjaChlYV9ibG9ja19jYWNoZSwgY2UpO1xuIFx0XHRcdG1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgY2UpO1xuIFx0XHRcdGNlID0gTlVMTDtcbitcdFx0XHRpZiAoIShicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgcy1cdTAwM2ViYXNlID09IGJzLVx1MDAzZWJoLVx1MDAzZWJfZGF0YSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGVhX2lub2RlKSB7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogVGhlIHJldXNlZCBibG9jayBhbHJlYWR5IGhvbGRzIGl0cyBvd25cbitcdFx0XHRcdCAqIHJlZmVyZW5jZTsgZHJvcCB0aGUgZXh0cmEgb25lIHVubGVzcyB0aGVcbitcdFx0XHRcdCAqIGVudHJ5IHdlbnQgaW50byB0aGUgb2xkIGJ1ZmZlciBkaXJlY3RseS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLFxuK1x0XHRcdFx0XHRcdFx0XHQgZWFfaW5vZGUpO1xuK1x0XHRcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0XHRcdC8qXG4rXHRcdFx0XHRcdCAqIFRoZSBkZWNyZW1lbnQgbWF5IGFscmVhZHkgaGF2ZSBydW47XG4rXHRcdFx0XHRcdCAqIGRvIG5vdCByZXRyeSBpdDogZnJlZSB0aGUgY2hhcmdlLFxuK1x0XHRcdFx0XHQgKiB1bmRvIHRoZSByZXVzZSwgYW5kIGZhaWwgdGhlIG9wLlxuK1x0XHRcdFx0XHQgKi9cbitcdFx0XHRcdFx0ZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgX19mdW5jX18sXG4rXHRcdFx0XHRcdFx0XHQgX19MSU5FX18sIDAsXG4rXHRcdFx0XHRcdFx0XHRcImRlYyByZWYgZXJyb3I9JWRcIixcbitcdFx0XHRcdFx0XHRcdCBlcnJvcik7XG4rXHRcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgIGVhX2lub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbitcdFx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbitcdFx0XHRcdFx0aWYgKG5ld19iaCAhPSBicy1cdTAwM2ViaClcbitcdFx0XHRcdFx0XHRleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgICBpbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgbmV3X2JoKTtcbitcdFx0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4rXHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWJhc2UgPT0gYnMtXHUwMDNlYmgtXHUwMDNlYl9kYXRhKSB7XG4gXHRcdFx0LyogV2Ugd2VyZSBtb2RpZnlpbmcgdGhpcyBibG9jayBpbi1wbGFjZS4gKi9cbiBcdFx0XHRlYV9iZGVidWcoYnMtXHUwMDNlYmgsIFwia2VlcGluZyB0aGlzIGJsb2NrXCIpO1xuQEAgLTIxNDMsMTMgKzIxODcsMjEgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0XHRnb3RvIGdldGJsa19mYWlsZWQ7XG4gXHRcdFx0aWYgKGVhX2lub2RlKSB7XG4tXHRcdFx0XHQvKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGUuICovXG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogRHJvcCB0aGUgZXh0cmEgcmVmIG9uIGVhX2lub2RlOyBvblxuK1x0XHRcdFx0ICogZmFpbHVyZSB0aGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmVcbitcdFx0XHRcdCAqIHJ1biwgc28ganVzdCBmYWlsIGFuZCBmcmVlIHRoZSBibG9jay5cbitcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLFxuIFx0XHRcdFx0XHRcdFx0XHQgZWFfaW5vZGUpO1xuLVx0XHRcdFx0aWYgKGVycm9yKVxuLVx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4tXHRcdFx0XHRcdFx0XHQgICBcImRlYyByZWYgZXJyb3I9JWRcIixcbi1cdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbitcdFx0XHRcdGlmIChlcnJvcikge1xuK1x0XHRcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICBlYV9pbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4rXHRcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4rXHRcdFx0XHRcdGdvdG8gZ2V0YmxrX2ZhaWxlZDtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjEwLjMzMjA0Mzg1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDQzNTEzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gZXh0NCBFeHRlbmRlZCBBdHRyaWJ1dGUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gYGZzL2V4dDQveGF0dHIuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gLCBhbmQgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YC4gSSBzZWUgaXQncyBhbHNvIHR3ZWFraW5nIHRoZSBlcnJvciBoYW5kbGluZyB3aGVuIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZgIGZhaWxzLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEdpdmVuIHRoYXQgaXQncyBhbHRlcmluZyBjb3JlIGV4dDQgbG9naWMsIG15IGludGVyZXN0IGlzIHBpcXVlZCBpbW1lZGlhdGVseS4gVGhlc2Uga2luZHMgb2YgbW9kaWZpY2F0aW9ucyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2sgYW5kLCBmcmFua2x5LCByaXBlIGZvciBmdXp6aW5nLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBwYXRjaCdzIGZ1bGwgaW1wYWN0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMsIHNvIEnigJltIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIHRoaXMgbmV3IGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gIGZ1bmN0aW9uLlxuXG5Ob3csIGJlZm9yZSBJIGp1bXAgaW50byBhIGRlZXAgY29kZSBkaXZlLCBsZXQncyBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIGNvbnRleHQgZm9yIHRoaXMuIFNpbmNlIGl0J3MgZGVhbGluZyB3aXRoIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcywgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0VYVDRfRlNgIGlzIGVuYWJsZWQsIG9mIGNvdXJzZS4gVGhlbiwgbGV0J3MgbG9vayBmb3IgYW55IHNwZWNpZmljIGV4dGVuZGVkIGF0dHJpYnV0ZSBjb25maWd1cmF0aW9ucyDigJMgSSdsbCBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUgY29kZS4gVGhhdCB3aWxsIGhlbHAgbWUgc2V0IHVwIGEgZ29vZCB0ZXN0aW5nIGVudmlyb25tZW50IGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MTYuODc2Mzk4MTg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzA3ODI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MTcuMDc5NDgxMTk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MjE2NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUncyBhbnkgZXhwbGljaXQgbWVudGlvbiBvZiBgRVhUNF9GU19YQVRUUmAgb3IgYSBzaW1pbGFyIGZsYWcgb3IgaWRlbnRpZmllci4gSSBrbm93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGEgY29yZSBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbSdzIGNhcGFiaWxpdGllcywgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSB0aGUgc3BlY2lmaWNzLiBXZSBuZWVkIHRvIGtub3cgaWYgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byBsZXZlcmFnZSB0aGVzZSBmZWF0dXJlcy4gTGV0IG1lIHNlZSB3aGF0J3Mgb3V0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MTkuODUxNjUzNTA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODgwNzM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU19YQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjE5LjkwNDU0MTUxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTIwMjQwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJbnRlcnBsYXkgb2YgRVhUNCBGZWF0dXJlcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgd2l0aGluIGV4dDQsIGFuZCBpdCBqdXN0IGhpdCBtZTogdGhleSAqcmVseSogb24geGF0dHJzLiBCdXQgdGhlbiBhZ2FpbiwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHhhdHRycyBtaWdodCBhY3R1YWxseSBiZSBwZXJtYW5lbnRseSBlbmFibGVkIGluIGV4dDQgdGhlc2UgZGF5cy4gSG1tLiBJIG5lZWQgdG8gZ2V0IHNvbWUgY2xhcmlmaWNhdGlvbiBvbiB0aGlzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIGlzIGRlZmluaXRlbHkgdGhlIGBmcy9leHQ0L01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgSSBuZWVkIGFib3V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MjMuMjE2NTY5MTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTIxMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhdHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEzOlxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjIzLjI2NzA5NTEzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzgwMzkyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBicmVha2luZyBkb3duIHRoZSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgRVhUNCBYYXR0ciBDb21waWxhdGlvbiBhbmQgRnVuY3Rpb24gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgYHhhdHRyLm9gIGlzICphbHdheXMqIGJyb3VnaHQgaW50byB0aGUgYnVpbGQgaWYgYEVYVDRfRlNgIGlzIGRlZmluZWQuIFRoaXMgY29uZmlybXMgdGhhdCBgRVhUNF9GU2AgaXMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRyaXZlcyB0aGlzIGluY2x1c2lvbi4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLCBidXQgZ29vZCB0byBoYXZlIHRoYXQgY29uZmlybWVkIGFzIHRoZSBzdGFydGluZyBwb2ludC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGltcGFjdCBvZiB0aGUgY2hhbmdlLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHJlZmVyZW5jZXMgbW9kaWZpY2F0aW9ucyB0byBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHRoYXQgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgd2hlcmUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBpbnZva2VkIHdpbGwgdGVsbCBtZSB3aGF0IHN5c3RlbXMsIHdvcmtmbG93cywgb3IgcHJvY2Vzc2VzIGFyZSBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2guIFRoaXMgaXMgaG93IEknbGwgdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMgb2YgdGhlIHVwZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjI2LjY0NTEzODQyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0NzQ5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xMjcyPWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyOTQtXFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTI5NTpcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xcbmZzL2V4dDQveGF0dHIuYy0xMjk2LVxcdFxcdCAqL1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE5MDk9c3RhdGljIGludFxcbmZzL2V4dDQveGF0dHIuYzoxOTEwOmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5MTEtXFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE5NTUtXFx0XFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTk1NjpcXHRcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxcbmZzL2V4dDQveGF0dHIuYy0xOTU3LVxcdFxcdFxcdCAqIGJsb2NrXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjQwMT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjQ4NC1cXHRcXHRlbHNlIGlmICghYnMucy5ub3RfZm91bmQpXFxuZnMvZXh0NC94YXR0ci5jOjI0ODU6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjQ4Ni1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1MDEtXFx0XFx0XFx0aS52YWx1ZSA9IE5VTEw7XFxuZnMvZXh0NC94YXR0ci5jOjI1MDI6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjUwMy1cXHRcXHR9IGVsc2UgaWYgKGVycm9yID09IC1FTk9TUEMpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTEwLVxcdFxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjUxMTpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2YnMpO1xcbmZzL2V4dDQveGF0dHIuYy0yNTEyLVxcdFxcdFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgIWlzLnMubm90X2ZvdW5kKSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjY1Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3MjItXFx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xcbmZzL2V4dDQveGF0dHIuYzoyNzIzOlxcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIGJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjcyNC1cXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjI2LjY5ODYyMTIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDYwMTQ5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGUgZXh0NCBmaWxlc3lzdGVtOlxuXG4qKkRpdmluZyBpbnRvIHhhdHRyIFNldHRpbmcgaW4gZXh0NCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyBzZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkga25vdyBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBpcyAqdGhlKiBtYWluIGVudHJ5IHBvaW50IGZvciB0aGF0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIHRvIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB1c2UgY2FzZXMsIGlkZW50aWZ5IHdoaWNoIHByb2Nlc3NlcyB1c2UgaXQgYW5kIGluIHdoYXQgd2F5LiBXaGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBwaXZvdGFsIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20/IFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyBsaWUsIGFuZCB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MzAuNjQ0NjQxMTY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjMzOTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3NldF9oYW5kbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9hY2wuYz0xODk9X19leHQ0X3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXFxuLS1cXG5mcy9leHQ0L2FjbC5jLTIxNi1cXG5mcy9leHQ0L2FjbC5jOjIxNzpcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBcXFwiXFxcIixcXG5mcy9leHQ0L2FjbC5jLTIxOC1cXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgc2l6ZSwgeGF0dHJfZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYz0xMzI9c3RhdGljIGludCBleHQ0X3NldF9jb250ZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKmN0eCwgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2V4dDQvY3J5cHRvLmMtMTcyLVxcdFxcdCAqL1xcbmZzL2V4dDQvY3J5cHRvLmM6MTczOlxcdFxcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLFxcbmZzL2V4dDQvY3J5cHRvLmMtMTc0LVxcdFxcdFxcdFxcdFxcdCAgICBFWFQ0X1hBVFRSX0lOREVYX0VOQ1JZUFRJT04sXFxuLS1cXG5mcy9leHQ0L2NyeXB0by5jLTIwMi1cXG5mcy9leHQ0L2NyeXB0by5jOjIwMzpcXHRyZXMgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9FTkNSWVBUSU9OLFxcbmZzL2V4dDQvY3J5cHRvLmMtMjA0LVxcdFxcdFxcdFxcdCAgICBFWFQ0X1hBVFRSX05BTUVfRU5DUllQVElPTl9DT05URVhULFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIzNzA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMzg4LS8qXFxuZnMvZXh0NC94YXR0ci5jOjIzODk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcXG5mcy9leHQ0L3hhdHRyLmMtMjM5MC0gKlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI0MDA9aW50XFxuZnMvZXh0NC94YXR0ci5jOjI0MDE6ZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LFxcbmZzL2V4dDQveGF0dHIuYy0yNDAyLVxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI1NTM9aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTgyLSAqXFxuZnMvZXh0NC94YXR0ci5jOjI1ODM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXFxuZnMvZXh0NC94YXR0ci5jLTI1ODQtICogYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBpcyBhIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gYnkgaXRzZWxmLlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI1ODk9ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjYxMi1cXG5mcy9leHQ0L3hhdHRyLmM6MjYxMzpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNjE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCB2YWx1ZV9sZW4sIGZsYWdzKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD0xODE9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xcbmZzL2V4dDQveGF0dHIuaDoxODI6ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTtcXG5mcy9leHQ0L3hhdHRyLmgtMTgzLWV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTM2PWV4dDRfaW5pdHhhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRyX2FycmF5LFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTQzLVxcdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXFx1MDAzZW5hbWUgIT0gTlVMTDsgeGF0dHIrKykge1xcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYzo0NDpcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSxcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtNDUtXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjMwLjY5Njk4Njk5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg3MDczMjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBleHQ0X3hhdHRyX3NldGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgZXh0NF94YXR0cl9zZXRgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIGZvciBzZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb24gYW4gZXh0NCBmaWxlc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB3aGF0IGFyZSB0aGUgY29udGV4dHMgb2YgdGhvc2UgY2FsbHM/IEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0ICp3aHkqIGBleHQ0X3hhdHRyX3NldGAgaXMgYmVpbmcgY2FsbGVkIGFuZCB0aGUgdHlwaWNhbCBzY2VuYXJpb3MgaXQncyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZyBmb3IgdGhpbmdzIGxpa2UgZGVidWdnaW5nIGFuZCBvcHRpbWlzYXRpb24gbGF0ZXIgb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjM0LjM4NDA2NTA1N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NDI0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9zZXRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9MjU1Mz1pbnQgZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1ODAtLypcXG5mcy9leHQ0L3hhdHRyLmM6MjU4MTogKiBleHQ0X3hhdHRyX3NldCgpXFxuZnMvZXh0NC94YXR0ci5jLTI1ODItICpcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNTg4PWludFxcbmZzL2V4dDQveGF0dHIuYzoyNTg5OmV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNTkwLVxcdCAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5oPTE4MD1leHRlcm4gaW50IGV4dDRfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpO1xcbmZzL2V4dDQveGF0dHIuaDoxODE6ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xcbmZzL2V4dDQveGF0dHIuaC0xODItZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTtcXG4tLVxcbmZzL2V4dDQveGF0dHJfaHVyZC5jPTM0PWV4dDRfeGF0dHJfaHVyZF9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00Mi1cXG5mcy9leHQ0L3hhdHRyX2h1cmQuYzo0MzpcXHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfSFVSRCxcXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00NC1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTI1PWV4dDRfeGF0dHJfc2VjdXJpdHlfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTMwLXtcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM6MzE6XFx0cmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy0zMi1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmM9MzI9ZXh0NF94YXR0cl90cnVzdGVkX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcXG4tLVxcbmZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jLTM3LXtcXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYzozODpcXHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfVFJVU1RFRCxcXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYy0zOS1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl91c2VyLmM9MzM9ZXh0NF94YXR0cl91c2VyX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcXG4tLVxcbmZzL2V4dDQveGF0dHJfdXNlci5jLTQwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5mcy9leHQ0L3hhdHRyX3VzZXIuYzo0MTpcXHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfVVNFUixcXG5mcy9leHQ0L3hhdHRyX3VzZXIuYy00Mi1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzoyNjozNC40MzY1MTMwMDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMyNDA4NTg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgYGV4dDRgIEZpbGVzeXN0ZW0gWGF0dHIgSGFuZGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGBleHQ0YC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGV4dDRfeGF0dHJfc2V0YCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmcm9tIHRoZSBWRlMgeGF0dHIgaGFuZGxlcnMsIHNvIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBleHQ0X3hhdHRyX3NldGAsIHRoZSB3aG9sZSBjYWxsIGNoYWluIHNlZW1zIHNpZ25pZmljYW50LlxuXG5UaGVyZWZvcmUsIEknbGwgZm9jdXMgZnV6emluZyBlZmZvcnRzIHByaW1hcmlseSBvbiBgZXh0NF94YXR0cl9zZXRgIOKAkyB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXMgYSBmb2N1cyBzeW1ib2wgYXMgd2VsbC4gV2hpbGUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBzdGF0aWMsIG1lYW5pbmcgaXQgY2FuJ3QgYmUgZGlyZWN0bHkgdGFyZ2V0ZWQgaWYgaW5saW5lZCwgaXQncyBhIGxhcmdlIGZ1bmN0aW9uIHNvIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCBpdCBpcyBub3QuIEhvd2V2ZXIsIGBleHQ0X3hhdHRyX3NldGAgYW5kIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFyZSBib3RoIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBzbyB0aG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgd2F5IHRvIGdvLlxuXG5Ob3csIGxldCdzIGV4cGxvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfRVhUNF9GU2AgaXMgZXNzZW50aWFsLCB0aGF0J3MgYSBnaXZlbi4gVG8gcG90ZW50aWFsbHkgdW5sb2NrIG1vcmUgeGF0dHItcmVsYXRlZCBjb2RlIHBhdGhzLCBJIHNob3VsZCBhbHNvIGVuYWJsZSBgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZYC4gQWRkaW5nIGFsbCBvZiB0aG9zZSB3aWxsIGJlIG5lY2Vzc2FyeS5cblxuSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIHBhdGNoIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIHNlZSB0aGF0IGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gIGlzIGEgbmV3IHN0YXRpYyBmdW5jdGlvbi4gSSd2ZSBhbHJlYWR5IG5vdGVkIHRoZSBtb2RpZmljYXRpb24gb2YgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YC4gU28sIGBleHQ0X3hhdHRyX3NldGAgYW5kIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFyZSB0aGUgbWFpbiBjYWxsZXJzLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYGV4dDRfeGF0dHJfc2V0YCBpcyBpbiBgZnMvZXh0NC94YXR0ci5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gVGhlIHNhbWUgZ29lcyBmb3IgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgLSBhbHNvIGV4cG9ydGVkIGFuZCBub3Qgc3RhdGljLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSAqb3RoZXIqIGNhbGxlcnMgb2YgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YC4gSXQgbG9va3MgbGlrZSBgZXh0NF94YXR0cl9tb3ZlX3RvX2Jsb2NrYCBhbHNvIGNhbGxzIGl0LCBzbyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGV4dDRfeGF0dHJfbW92ZV90b19ibG9ja2AgaXMgY2FsbGVkIGZyb20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6NDEuNzYwNjAyMjczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ1NjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTI2MzI9c3RhdGljIHZvaWQgZXh0NF94YXR0cl9zaGlmdF9lbnRyaWVzKHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNjU2LSAqL1xcbmZzL2V4dDQveGF0dHIuYzoyNjU3OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9tb3ZlX3RvX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTI2NTgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Mjc0Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3OTctXFx0XFx0XFx0XFx0XFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xcbmZzL2V4dDQveGF0dHIuYzoyNzk4OlxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9tb3ZlX3RvX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIHJhd19pbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjc5OS1cXHRcXHRcXHRcXHRcXHRcXHQgZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzoyNjo0MS44MTMwNjUyOTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyODk3MDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBYYXR0ciBTcGFjZSBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSB3aGVuIHRoZXkgbmVlZCB0byBiZSBtb3ZlZCB0byBibG9jayBzcGFjZS4gSXQgbG9va3MgbGlrZSBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhpcyBwcm9jZXNzLCBjYWxsaW5nIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgLiBUaGF0J3MgdGhlIGtleSB0cmFuc2l0aW9uIHBvaW50LlxuXG5Ob3csIG15IGltbWVkaWF0ZSBuZXh0IHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYCBiZWluZyBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp0cmlnZ2VycyogZm9yIHRoaXMgd2hvbGUgcHJvY2Vzcy4gSXMgaXQgd2hlbiBhbiB4YXR0cidzIGRhdGEgZ2V0cyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgaW5vZGUgaXRzZWxmPyBJcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBzcGVjaWZpYyBvcGVyYXRpb24sIGxpa2UgYSBzZXR4YXR0ciBjYWxsLCBvciBzb21ldGhpbmcgaW50ZXJuYWw/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgYGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZWAgaXMgY3J1Y2lhbCB0byBmdWxseSBncmFzcCB0aGUgeGF0dHIgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgZXZlbiBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBzdWNoIGFzIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBtb3ZlbWVudCBvZiBkYXRhLiBUaGlzIGNhbGwgY2hhaW4gaXMgd2hhdCBJIG5lZWQgdG8gdHJhY2UgYW5kIHVuZGVyc3RhbmQgdG8gZ2FpbiBhIGJldHRlciBhcHByZWNpYXRpb24gb2Ygd2hhdCBleHQ0IGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6NDYuMDQyMDM5MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDI2NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9MjY1Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3NDUtXFxuZnMvZXh0NC94YXR0ci5jOjI3NDY6c3RhdGljIGludCBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjc0Ny1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yODE1PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4ODUtXFxuZnMvZXh0NC94YXR0ci5jOjI4ODY6XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlLCBpbm9kZSwgcmF3X2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0yODg3LVxcdFxcdFxcdFxcdFxcdCAgICBpc2l6ZV9kaWZmLCBpZnJlZSwgYmZyZWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjQ2LjA5NTA3ODU4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIwMzc1MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBpbnZva2VkPyBXaGF0J3MgdGhlIGNhbGwgZ3JhcGg/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBoYW5kbGluZywgYW5kIGV4cGFuc2lvbiBpbXBsaWVzIGEgc2l6ZSBjaGFuZ2UuIEkgbmVlZCB0byBrbm93ICp3aHkqIHRoZSBleHBhbnNpb24gaXMgaGFwcGVuaW5nIHRvIGZ1bGx5IGdyYXNwIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgYW5kIGlkZW50aWZ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvciBtZXRob2RzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIElzIHRoaXMgcmVsYXRlZCB0byBmaWxlIGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIG9yIG1ldGFkYXRhIHVwZGF0ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgcGFyYW1vdW50IHRvIGF2b2lkIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlIEVBIHNpemluZy4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGNhbGwgdHJhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6NTAuMDE1NDYxMjg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI3NjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NjQzOT1zdGF0aWMgaW50IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02NDg1LVxcdC8qIHRyeSB0byBleHBhbmQgd2l0aCBFQXMgcHJlc2VudCAqL1xcbmZzL2V4dDQvaW5vZGUuYzo2NDg2OlxcdGVycm9yID0gZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSxcXG5mcy9leHQ0L2lub2RlLmMtNjQ4Ny1cXHRcXHRcXHRcXHRcXHQgICByYXdfaW5vZGUsIGhhbmRsZSk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Mjc0Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4MTQtICovXFxuZnMvZXh0NC94YXR0ci5jOjI4MTU6aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuZnMvZXh0NC94YXR0ci5jLTI4MTYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmg9MTkyPWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xcbmZzL2V4dDQveGF0dHIuaC0xOTMtXFxuZnMvZXh0NC94YXR0ci5oOjE5NDpleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuZnMvZXh0NC94YXR0ci5oLTE5NS1cXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjUwLjA2ODc0NDkwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzAyNTMwMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBMb2dpYyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHNwZWNpZmljYWxseSwgaG93IGl0IGhhbmRsZXMgZXJyb3JzIHdoZW4gbWFuYWdpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBleHQ0IGZpbGVzeXN0ZW1zLiBJdCBzZWVtcyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGdldHMgY2FsbGVkIGZyb20gYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSd2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgdGhpcyBpcyByZWFjaGFibGUuIFRoZXJlZm9yZSwgYGV4dDRfeGF0dHJfc2V0YCwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGZvY3VzaW5nIG9uIGluIG15IGZ1enppbmcgZWZmb3J0cy4gSSBuZWVkIHRvIGtlZXAgdGhlc2UgZnVuY3Rpb25zIGF0IHRoZSBmb3JlZnJvbnQuXG5cbk5vdywgYmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHNldCB1cC4gYEVYVDRfRlNgIGlzIG9idmlvdXNseSBjcml0aWNhbC4gYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSBsaWtlbHkgYmVuZWZpY2lhbCwgdG9vLCB0byBjb3ZlciBhcyBtdWNoIGdyb3VuZCBhcyBwb3NzaWJsZSBkdXJpbmcgdGVzdGluZy5cblxuSGVyZSdzIGEgcXVpY2sgc3VtbWFyeSBvZiBteSBmaW5kaW5nczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGRlZmluaXRlbHkgYSB2dWxuZXJhYmlsaXR5LXByb25lIGFyZWEuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGV4dDRfeGF0dHJfc2V0YCwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEVYVDRfRlNgLCBgRVhUNF9GU19QT1NJWF9BQ0xgLCBgRVhUNF9GU19TRUNVUklUWWBcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggdG91Y2hlcyBlcnJvciBoYW5kbGluZyBzcGVjaWZpY2FsbHkgd2l0aGluIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgd2hlbiBhbiBFQSBpbm9kZSByZWZlcmVuY2UgZHJvcCBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljLiBHaXZlbiB0aGF0IHhhdHRyIHN5c2NhbGxzIGFyZSB1c2VyLWFjY2Vzc2libGUgYW5kIGlub2RlIGV4cGFuc2lvbiB0cmlnZ2VycyB0aGlzIGxvZ2ljLCBpdCdzIGEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5JJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBhcmVuJ3Qgc3RhdGljLiBZZXMsIHRoZXkgYXJlIGV4cG9ydGVkIGluIGBmcy9leHQ0L3hhdHRyLmhgLCBhcyBJIGV4cGVjdGVkLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCB0aGUgcmVzdWx0cyB3aXRoIHRoYXQgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzYxLCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzoyNjo1Ni4zNzEyODA5NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjYwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfeGF0dHJfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX3NldF9oYW5kbGVcIixcbiAgICBcImV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NF94YXR0cl9ibG9ja19zZXQgd2hlbiBkcm9wcGluZyBhIHJlZmVyZW5jZSB0byBhbiBFQSBpbm9kZSBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB4YXR0ciBzeXNjYWxscyBhbmQgaW5vZGUgZXhwYW5zaW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDRfRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJFWFQ0X0ZTX1NFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICAgIFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0X3hhdHRyX2Jsb2NrX3NldCB3aGVuIGRyb3BwaW5nIGEgcmVmZXJlbmNlIHRvIGFuIEVBIGlub2RlIGZhaWxzLiBUaGlzIGlzIGNvcmUgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHhhdHRyIHN5c2NhbGxzIGFuZCBpbm9kZSBleHBhbnNpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjU2LjQ2NzU1MjM0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwMzI4NjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjU2LjQ2ODI5NjQ4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3ODAyNTM2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5kbyBsb2dpYyBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBzZXR0aW5nIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBwcm9wZXIgY2xlYW51cCAoZnJlZWluZyBxdW90YSwgZHJvcHBpbmcgaW5vZGUgcmVmZXJlbmNlcywgYW5kIHVuZG9pbmcgYmxvY2sgcmV1c2UpIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcywgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIGFuZCBxdW90YSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmE3ODNkM2ZiZGVlYzRjZmE4NjljZDk4ZjZiYjkwOWE0ZTJjODkwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA3OjI2OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Li4wY2U5MzdkODkwMDQyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMzYyLDYgKzEzNjIsMTcgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm47XG4gfVxuIFxuKy8qIFVuZG8gdGhlIGxvY2FsbHktb3duZWQgcGFydCBvZiBhIGNhY2hlZC1ibG9jayByZXVzZS4gKi9cbitzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbit7XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuK1xuK1x0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbitcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuK1x0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbit9XG4rXG4gLypcbiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mXG4gICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLlxuQEAgLTIxMDcsNiArMjExOCwzOSBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdG1iX2NhY2hlX2VudHJ5X3RvdWNoKGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG4gXHRcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG4gXHRcdFx0Y2UgPSBOVUxMO1xuK1x0XHRcdGlmICghKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWJhc2UgPT0gYnMtXHUwMDNlYmgtXHUwMDNlYl9kYXRhKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgZWFfaW5vZGUpIHtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBUaGUgcmV1c2VkIGJsb2NrIGFscmVhZHkgaG9sZHMgaXRzIG93blxuK1x0XHRcdFx0ICogcmVmZXJlbmNlOyBkcm9wIHRoZSBleHRyYSBvbmUgdW5sZXNzIHRoZVxuK1x0XHRcdFx0ICogZW50cnkgd2VudCBpbnRvIHRoZSBvbGQgYnVmZmVyIGRpcmVjdGx5LlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsXG4rXHRcdFx0XHRcdFx0XHRcdCBlYV9pbm9kZSk7XG4rXHRcdFx0XHRpZiAoZXJyb3IpIHtcbitcdFx0XHRcdFx0LypcbitcdFx0XHRcdFx0ICogVGhlIGRlY3JlbWVudCBtYXkgYWxyZWFkeSBoYXZlIHJ1bjtcbitcdFx0XHRcdFx0ICogZG8gbm90IHJldHJ5IGl0OiBmcmVlIHRoZSBjaGFyZ2UsXG4rXHRcdFx0XHRcdCAqIHVuZG8gdGhlIHJldXNlLCBhbmQgZmFpbCB0aGUgb3AuXG4rXHRcdFx0XHRcdCAqL1xuK1x0XHRcdFx0XHRleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXyxcbitcdFx0XHRcdFx0XHRcdCBfX0xJTkVfXywgMCxcbitcdFx0XHRcdFx0XHRcdFwiZGVjIHJlZiBlcnJvcj0lZFwiLFxuK1x0XHRcdFx0XHRcdFx0IGVycm9yKTtcbitcdFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgZWFfaW5vZGUsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuK1x0XHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuK1x0XHRcdFx0XHRpZiAobmV3X2JoICE9IGJzLVx1MDAzZWJoKVxuK1x0XHRcdFx0XHRcdGV4dDRfeGF0dHJfcmV1c2VfdW5kbyhoYW5kbGUsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgIGlub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgICBuZXdfYmgpO1xuK1x0XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbitcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoYnMtXHUwMDNlYmggXHUwMDI2XHUwMDI2IHMtXHUwMDNlYmFzZSA9PSBicy1cdTAwM2ViaC1cdTAwM2ViX2RhdGEpIHtcbiBcdFx0XHQvKiBXZSB3ZXJlIG1vZGlmeWluZyB0aGlzIGJsb2NrIGluLXBsYWNlLiAqL1xuIFx0XHRcdGVhX2JkZWJ1Zyhicy1cdTAwM2ViaCwgXCJrZWVwaW5nIHRoaXMgYmxvY2tcIik7XG5AQCAtMjE0MywxMyArMjE4NywyMSBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGlmIChlcnJvcilcbiBcdFx0XHRcdGdvdG8gZ2V0YmxrX2ZhaWxlZDtcbiBcdFx0XHRpZiAoZWFfaW5vZGUpIHtcbi1cdFx0XHRcdC8qIERyb3AgdGhlIGV4dHJhIHJlZiBvbiBlYV9pbm9kZS4gKi9cbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGU7IG9uXG4rXHRcdFx0XHQgKiBmYWlsdXJlIHRoZSBkZWNyZW1lbnQgbWF5IGFscmVhZHkgaGF2ZVxuK1x0XHRcdFx0ICogcnVuLCBzbyBqdXN0IGZhaWwgYW5kIGZyZWUgdGhlIGJsb2NrLlxuK1x0XHRcdFx0ICovXG4gXHRcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsXG4gXHRcdFx0XHRcdFx0XHRcdCBlYV9pbm9kZSk7XG4tXHRcdFx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0XHRcdCAgIFwiZGVjIHJlZiBlcnJvcj0lZFwiLFxuLVx0XHRcdFx0XHRcdFx0ICAgZXJyb3IpO1xuK1x0XHRcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgIGVhX2lub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbitcdFx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbitcdFx0XHRcdFx0Z290byBnZXRibGtfZmFpbGVkO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4gXHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6NTYuNDY4Mjk4MDg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDI0OTAxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRVhUNCBYYXR0ciBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaW4gYGZzL2V4dDQveGF0dHIuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGVuc3VyaW5nIHByb3BlciBjbGVhbnVwLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiBpcyBjZW50ZXJlZCBhcm91bmQgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MgdGhhdCBtYXkgYXJpc2UgZHVyaW5nIHhhdHRyIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgYmxvY2sgcmV1c2UgYW5kIGFsbG9jYXRpb24gZmFpbHVyZXMuXG5cblRoZSBrZXkgYWRkaXRpb24gc2VlbXMgdG8gYmUgdGhlIGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gIGZ1bmN0aW9uLiBJdCBwcm92aWRlcyBhIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciByb2xsaW5nIGJhY2sgb3BlcmF0aW9ucyB3aGVuIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZgIGZhaWxzLiBUaGlzIGZ1bmN0aW9uIGNhcmVmdWxseSByZWxlYXNlcyB0aGUgYmxvY2sgKGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgKSBhbmQgZnJlZXMgdGhlIGFzc29jaWF0ZWQgaW5vZGUgYXJyYXkgKGBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWVgKS4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgYW5kIG5lY2Vzc2FyeSBwYXR0ZXJuIGZvciB1bmRvaW5nIHBvdGVudGlhbGx5IGluY29tcGxldGUgeGF0dHIgdXBkYXRlcy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHRoZSBzbmlwcGV0IHdpdGhpbiBgZXh0NF94YXR0cl9ibG9ja19zZXRgOlxuXG5gYGBjXG5cdFx0XHRpZiAoIShicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgcy1cdTAwM2ViYXNlID09IGJzLVx1MDAzZWJoLVx1MDAzZWJfZGF0YSkgXHUwMDI2XHUwMDI2XG5cdFx0XHQgICAgZWFfaW5vZGUpIHtcblx0XHRcdFx0Lypcblx0XHRcdFx0ICogVGhlIHJldXNlZCBibG9jayBhbHJlYWR5IGhvbGRzIGl0cyBvd25cblx0XHRcdFx0ICogcmVmZXJlbmNlOyBkcm9wIHRoZSBleHRyYSBvbmUgdW5sZXNzIHRoZVxuXHRcdFx0XHQgKiBlbnRyeSB3ZW50IGludG8gdGhlIG9sZCBidWZmZXIgZGlyZWN0bHkuXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0IGVhX2lub2RlKTtcblx0XHRcdFx0aWYgKGVycm9yKSB7XG4uLi5cbmBgYFxuXG5UaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgaW1wcmVzc2lvbi4gSXQncyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvIHdpdGhpbiB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHByb2Nlc3MuIFRoZXJlJ3Mgbm8gaGludCBvZiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueSBvdGhlciB0eXBlIG9mIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9uLiBJdCBmb2N1c2VzIG9uIHRoZSBjcnVjaWFsIGFzcGVjdCBvZiBkZWNyZW1lbnRpbmcgcmVmZXJlbmNlIGNvdW50cyAoIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZgKSwgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBlbmQgdXAgd2l0aCBkYW5nbGluZyBwb2ludGVycyBvciByZXNvdXJjZSBleGhhdXN0aW9uLlxuXG5HaXZlbiB0aGlzIGFuYWx5c2lzLCBhbmQgY29uc2lkZXJpbmcgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgdG9vbGluZywgS0FTQU4vTE9DS0RFUC9LTUVNTEVBSyBhcmUgYmV0dGVyIHN1aXRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgbWVtb3J5IGlzc3Vlcy4gS01TQU4gZG9lc24ndCBzZWVtIHJlbGV2YW50IGhlcmUuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBzZXQgdG8gYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhYm91dCBjb3JyZWN0bmVzcyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgbm90IGRldGVjdGluZyB1bmluaXRpYWxpemVkIHJlYWRzLiBJdCBhZGRyZXNzZXMgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgb3IgcXVvdGEgbGVha3MsIGJ1dCBub3QgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcGVyIHNlLiBJdCdzIGEgc29saWQsIHRhcmdldGVkIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNiwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzoyNzowNC4yNzA4MDgyNzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmRvIGxvZ2ljIGluIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHNldHRpbmcgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIHByb3BlciBjbGVhbnVwIChmcmVlaW5nIHF1b3RhLCBkcm9wcGluZyBpbm9kZSByZWZlcmVuY2VzLCBhbmQgdW5kb2luZyBibG9jayByZXVzZSkgd2hlbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgYW5kIHF1b3RhIGlzc3Vlcywgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5kbyBsb2dpYyBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBzZXR0aW5nIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBwcm9wZXIgY2xlYW51cCAoZnJlZWluZyBxdW90YSwgZHJvcHBpbmcgaW5vZGUgcmVmZXJlbmNlcywgYW5kIHVuZG9pbmcgYmxvY2sgcmV1c2UpIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcywgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIGFuZCBxdW90YSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowc5bf6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 07:06:43 +0000 UTC FinishedAt: 2026-08-14 07:27:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "562d0031f6090df27be9fe1d48d50c892895fa16", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "562d0031f6090df27be9fe1d48d50c892895fa16", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "EXT4_FS_POSIX_ACL", "EXT4_FS_SECURITY" ], "series_id": "6630ac52-7e73-4546-8ca4-1fb6b2a162d5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_set", "ext4_xattr_set_handle", "ext4_expand_extra_isize_ea" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RVhUNF9GU19QT1NJWF9BQ0wmIzM0OywKICAgICYjMzQ7RVhUNF9GU19TRUNVUklUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfeGF0dHJfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfc2V0X2hhbmRsZSYjMzQ7LAogICAgJiMzNDtleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmRvIGxvZ2ljIGluIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHNldHRpbmcgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIHByb3BlciBjbGVhbnVwIChmcmVlaW5nIHF1b3RhLCBkcm9wcGluZyBpbm9kZSByZWZlcmVuY2VzLCBhbmQgdW5kb2luZyBibG9jayByZXVzZSkgd2hlbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgYW5kIHF1b3RhIGlzc3Vlcywgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NF94YXR0cl9ibG9ja19zZXQgd2hlbiBkcm9wcGluZyBhIHJlZmVyZW5jZSB0byBhbiBFQSBpbm9kZSBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB4YXR0ciBzeXNjYWxscyBhbmQgaW5vZGUgZXhwYW5zaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmE3ODNkM2ZiZGVlYzRjZmE4NjljZDk4ZjZiYjkwOWE0ZTJjODkwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA3OjI2OjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uMGNlOTM3ZDg5MDA0MiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTM2Miw2ICYjNDM7MTM2MiwxNyBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybjtcbiB9XG4gXG4mIzQzOy8qIFVuZG8gdGhlIGxvY2FsbHktb3duZWQgcGFydCBvZiBhIGNhY2hlZC1ibG9jayByZXVzZS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZXh0NF94YXR0cl9yZXVzZV91bmRvKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbiYjNDM7XHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbiYjNDM7XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZlxuICAqIGJ5dGVzIHVzZWQgYnkgRUEgZW50cmllcy5cbkBAIC0yMTA3LDYgJiM0MzsyMTE4LDM5IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0bWJfY2FjaGVfZW50cnlfdG91Y2goZWFfYmxvY2tfY2FjaGUsIGNlKTtcbiBcdFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbiBcdFx0XHRjZSA9IE5VTEw7XG4mIzQzO1x0XHRcdGlmICghKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWJhc2UgPT0gYnMtXHUwMDNlYmgtXHUwMDNlYl9kYXRhKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGVhX2lub2RlKSB7XG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBUaGUgcmV1c2VkIGJsb2NrIGFscmVhZHkgaG9sZHMgaXRzIG93blxuJiM0MztcdFx0XHRcdCAqIHJlZmVyZW5jZTsgZHJvcCB0aGUgZXh0cmEgb25lIHVubGVzcyB0aGVcbiYjNDM7XHRcdFx0XHQgKiBlbnRyeSB3ZW50IGludG8gdGhlIG9sZCBidWZmZXIgZGlyZWN0bHkuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0IGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdFx0XHRcdC8qXG4mIzQzO1x0XHRcdFx0XHQgKiBUaGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmUgcnVuO1xuJiM0MztcdFx0XHRcdFx0ICogZG8gbm90IHJldHJ5IGl0OiBmcmVlIHRoZSBjaGFyZ2UsXG4mIzQzO1x0XHRcdFx0XHQgKiB1bmRvIHRoZSByZXVzZSwgYW5kIGZhaWwgdGhlIG9wLlxuJiM0MztcdFx0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0XHRleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgX19MSU5FX18sIDAsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XCYjMzQ7ZGVjIHJlZiBlcnJvcj0lZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgZXJyb3IpO1xuJiM0MztcdFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIGVhX2lub2RlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4mIzQzO1x0XHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRcdGlmIChuZXdfYmggIT0gYnMtXHUwMDNlYmgpXG4mIzQzO1x0XHRcdFx0XHRcdGV4dDRfeGF0dHJfcmV1c2VfdW5kbyhoYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgICBpbm9kZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCAgICAgIG5ld19iaCk7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWJhc2UgPT0gYnMtXHUwMDNlYmgtXHUwMDNlYl9kYXRhKSB7XG4gXHRcdFx0LyogV2Ugd2VyZSBtb2RpZnlpbmcgdGhpcyBibG9jayBpbi1wbGFjZS4gKi9cbiBcdFx0XHRlYV9iZGVidWcoYnMtXHUwMDNlYmgsIFwmIzM0O2tlZXBpbmcgdGhpcyBibG9ja1wmIzM0Oyk7XG5AQCAtMjE0MywxMyAmIzQzOzIxODcsMjEgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0XHRnb3RvIGdldGJsa19mYWlsZWQ7XG4gXHRcdFx0aWYgKGVhX2lub2RlKSB7XG4tXHRcdFx0XHQvKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGUuICovXG4mIzQzO1x0XHRcdFx0LypcbiYjNDM7XHRcdFx0XHQgKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGU7IG9uXG4mIzQzO1x0XHRcdFx0ICogZmFpbHVyZSB0aGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmVcbiYjNDM7XHRcdFx0XHQgKiBydW4sIHNvIGp1c3QgZmFpbCBhbmQgZnJlZSB0aGUgYmxvY2suXG4mIzQzO1x0XHRcdFx0ICovXG4gXHRcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsXG4gXHRcdFx0XHRcdFx0XHRcdCBlYV9pbm9kZSk7XG4tXHRcdFx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0XHRcdCAgIFwmIzM0O2RlYyByZWYgZXJyb3I9JWRcJiMzNDssXG4tXHRcdFx0XHRcdFx0XHQgICBlcnJvcik7XG4mIzQzO1x0XHRcdFx0aWYgKGVycm9yKSB7XG4mIzQzO1x0XHRcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgZWFfaW5vZGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiYjNDM7XHRcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuJiM0MztcdFx0XHRcdFx0Z290byBnZXRibGtfZmFpbGVkO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1BPU0lYX0FDTCYjMzQ7LAogICAgJiMzNDtFWFQ0X0ZTX1NFQ1VSSVRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9zZXRfaGFuZGxlJiMzNDssCiAgICAmIzM0O2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIGluIGV4dDRfeGF0dHJfYmxvY2tfc2V0IHdoZW4gZHJvcHBpbmcgYSByZWZlcmVuY2UgdG8gYW4gRUEgaW5vZGUgZmFpbHMuIFRoaXMgaXMgY29yZSBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgeGF0dHIgc3lzY2FsbHMgYW5kIGlub2RlIGV4cGFuc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJhNzgzZDNmYmRlZWM0Y2ZhODY5Y2Q5OGY2YmI5MDlhNGUyYzg5MDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzoyNjowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCA5ODJhMWY4MzFlMjI4Li4wY2U5MzdkODkwMDQyIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jCkBAIC0xMzYyLDYgJiM0MzsxMzYyLDE3IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybjsKIH0KIAomIzQzOy8qIFVuZG8gdGhlIGxvY2FsbHktb3duZWQgcGFydCBvZiBhIGNhY2hlZC1ibG9jayByZXVzZS4gKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQomIzQzO3sKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKJiM0MzsKJiM0MzsJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCAmYW1wO2VhX2lub2RlX2FycmF5LAomIzQzOwkJCQkgMCAvKiBleHRyYV9jcmVkaXRzICovKTsKJiM0MzsJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKJiM0Mzt9CiYjNDM7CiAvKgogICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZgogICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLgpAQCAtMjEwNyw2ICYjNDM7MjExOCwzOSBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJbWJfY2FjaGVfZW50cnlfdG91Y2goZWFfYmxvY2tfY2FjaGUsIGNlKTsKIAkJCW1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgY2UpOwogCQkJY2UgPSBOVUxMOwomIzQzOwkJCWlmICghKGJzLSZndDtiaCAmYW1wOyZhbXA7IHMtJmd0O2Jhc2UgPT0gYnMtJmd0O2JoLSZndDtiX2RhdGEpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgZWFfaW5vZGUpIHsKJiM0MzsJCQkJLyoKJiM0MzsJCQkJICogVGhlIHJldXNlZCBibG9jayBhbHJlYWR5IGhvbGRzIGl0cyBvd24KJiM0MzsJCQkJICogcmVmZXJlbmNlOyBkcm9wIHRoZSBleHRyYSBvbmUgdW5sZXNzIHRoZQomIzQzOwkJCQkgKiBlbnRyeSB3ZW50IGludG8gdGhlIG9sZCBidWZmZXIgZGlyZWN0bHkuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQllcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsCiYjNDM7CQkJCQkJCQkgZWFfaW5vZGUpOwomIzQzOwkJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJCS8qCiYjNDM7CQkJCQkgKiBUaGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmUgcnVuOwomIzQzOwkJCQkJICogZG8gbm90IHJldHJ5IGl0OiBmcmVlIHRoZSBjaGFyZ2UsCiYjNDM7CQkJCQkgKiB1bmRvIHRoZSByZXVzZSwgYW5kIGZhaWwgdGhlIG9wLgomIzQzOwkJCQkJICovCiYjNDM7CQkJCQlleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXywKJiM0MzsJCQkJCQkJIF9fTElORV9fLCAwLAomIzQzOwkJCQkJCQkmIzM0O2RlYyByZWYgZXJyb3I9JWQmIzM0OywKJiM0MzsJCQkJCQkJIGVycm9yKTsKJiM0MzsJCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwKJiM0MzsJCQkJCQkJCSAgICBlYV9pbm9kZSwKJiM0MzsJCQkJCQkJCSAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpOwomIzQzOwkJCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCQllYV9pbm9kZSA9IE5VTEw7CiYjNDM7CQkJCQlpZiAobmV3X2JoICE9IGJzLSZndDtiaCkKJiM0MzsJCQkJCQlleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlLAomIzQzOwkJCQkJCQkJICAgICAgaW5vZGUsCiYjNDM7CQkJCQkJCQkgICAgICBuZXdfYmgpOwomIzQzOwkJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCQl9CiYjNDM7CQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQllYV9pbm9kZSA9IE5VTEw7CiYjNDM7CQkJfQogCQl9IGVsc2UgaWYgKGJzLSZndDtiaCAmYW1wOyZhbXA7IHMtJmd0O2Jhc2UgPT0gYnMtJmd0O2JoLSZndDtiX2RhdGEpIHsKIAkJCS8qIFdlIHdlcmUgbW9kaWZ5aW5nIHRoaXMgYmxvY2sgaW4tcGxhY2UuICovCiAJCQllYV9iZGVidWcoYnMtJmd0O2JoLCAmIzM0O2tlZXBpbmcgdGhpcyBibG9jayYjMzQ7KTsKQEAgLTIxNDMsMTMgJiM0MzsyMTg3LDIxIEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBnZXRibGtfZmFpbGVkOwogCQkJaWYgKGVhX2lub2RlKSB7Ci0JCQkJLyogRHJvcCB0aGUgZXh0cmEgcmVmIG9uIGVhX2lub2RlLiAqLwomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGU7IG9uCiYjNDM7CQkJCSAqIGZhaWx1cmUgdGhlIGRlY3JlbWVudCBtYXkgYWxyZWFkeSBoYXZlCiYjNDM7CQkJCSAqIHJ1biwgc28ganVzdCBmYWlsIGFuZCBmcmVlIHRoZSBibG9jay4KJiM0MzsJCQkJICovCiAJCQkJZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLAogCQkJCQkJCQkgZWFfaW5vZGUpOwotCQkJCWlmIChlcnJvcikKLQkJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkJCSAgICYjMzQ7ZGVjIHJlZiBlcnJvcj0lZCYjMzQ7LAotCQkJCQkJCSAgIGVycm9yKTsKJiM0MzsJCQkJaWYgKGVycm9yKSB7CiYjNDM7CQkJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsCiYjNDM7CQkJCQkJCQkgICAgZWFfaW5vZGUsCiYjNDM7CQkJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKJiM0MzsJCQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQkJZWFfaW5vZGUgPSBOVUxMOwomIzQzOwkJCQkJZ290byBnZXRibGtfZmFpbGVkOwomIzQzOwkJCQl9CiAJCQkJaXB1dChlYV9pbm9kZSk7CiAJCQkJZWFfaW5vZGUgPSBOVUxMOwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIGV4dDQgRXh0ZW5kZWQgQXR0cmlidXRlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIGBmcy9leHQ0L3hhdHRyLmNgLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYGV4dDRfeGF0dHJfcmV1c2VfdW5kb2AsIGFuZCBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBJIHNlZSBpdCYjMzk7cyBhbHNvIHR3ZWFraW5nIHRoZSBlcnJvciBoYW5kbGluZyB3aGVuIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZgIGZhaWxzLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgY29yZSBleHQ0IGxvZ2ljLCBteSBpbnRlcmVzdCBpcyBwaXF1ZWQgaW1tZWRpYXRlbHkuIFRoZXNlIGtpbmRzIG9mIG1vZGlmaWNhdGlvbnMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rIGFuZCwgZnJhbmtseSwgcmlwZSBmb3IgZnV6emluZy4KClRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoJiMzOTtzIGZ1bGwgaW1wYWN0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMsIHNvIEnigJltIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIHRoaXMgbmV3IGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gIGZ1bmN0aW9uLgoKTm93LCBiZWZvcmUgSSBqdW1wIGludG8gYSBkZWVwIGNvZGUgZGl2ZSwgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gY29udGV4dCBmb3IgdGhpcy4gU2luY2UgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLCBvZiBjb3Vyc2UuIFRoZW4sIGxldCYjMzk7cyBsb29rIGZvciBhbnkgc3BlY2lmaWMgZXh0ZW5kZWQgYXR0cmlidXRlIGNvbmZpZ3VyYXRpb25zIOKAkyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUgY29kZS4gVGhhdCB3aWxsIGhlbHAgbWUgc2V0IHVwIGEgZ29vZCB0ZXN0aW5nIGVudmlyb25tZW50IGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBmb3IgRXh0ZW5kZWQgQXR0cmlidXRlcyBTdXBwb3J0KioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGV4cGxpY2l0IG1lbnRpb24gb2YgYEVYVDRfRlNfWEFUVFJgIG9yIGEgc2ltaWxhciBmbGFnIG9yIGlkZW50aWZpZXIuIEkga25vdyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBhIGNvcmUgcGFydCBvZiB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgY2FwYWJpbGl0aWVzLCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSB0aGUgc3BlY2lmaWNzLiBXZSBuZWVkIHRvIGtub3cgaWYgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byBsZXZlcmFnZSB0aGVzZSBmZWF0dXJlcy4gTGV0IG1lIHNlZSB3aGF0JiMzOTtzIG91dCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTX1hBVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJbnRlcnBsYXkgb2YgRVhUNCBGZWF0dXJlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCB3aXRoaW4gZXh0NCwgYW5kIGl0IGp1c3QgaGl0IG1lOiB0aGV5ICpyZWx5KiBvbiB4YXR0cnMuIEJ1dCB0aGVuIGFnYWluLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgeGF0dHJzIG1pZ2h0IGFjdHVhbGx5IGJlIHBlcm1hbmVudGx5IGVuYWJsZWQgaW4gZXh0NCB0aGVzZSBkYXlzLiBIbW0uIEkgbmVlZCB0byBnZXQgc29tZSBjbGFyaWZpY2F0aW9uIG9uIHRoaXMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgaXMgZGVmaW5pdGVseSB0aGUgYGZzL2V4dDQvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlciBJIG5lZWQgYWJvdXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHRlbGxzIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhdHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxuZnMvZXh0NC9NYWtlZmlsZT0xNT1leHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcdFx0XHRcdCYjNDM7PSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjgzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYnJlYWtpbmcgZG93biB0aGUgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBFWFQ0IFhhdHRyIENvbXBpbGF0aW9uIGFuZCBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgYHhhdHRyLm9gIGlzICphbHdheXMqIGJyb3VnaHQgaW50byB0aGUgYnVpbGQgaWYgYEVYVDRfRlNgIGlzIGRlZmluZWQuIFRoaXMgY29uZmlybXMgdGhhdCBgRVhUNF9GU2AgaXMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRyaXZlcyB0aGlzIGluY2x1c2lvbi4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLCBidXQgZ29vZCB0byBoYXZlIHRoYXQgY29uZmlybWVkIGFzIHRoZSBzdGFydGluZyBwb2ludC4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSByZWZlcmVuY2VzIG1vZGlmaWNhdGlvbnMgdG8gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YC4gVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB0aGF0IGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaXMgaW52b2tlZCB3aWxsIHRlbGwgbWUgd2hhdCBzeXN0ZW1zLCB3b3JrZmxvd3MsIG9yIHByb2Nlc3NlcyBhcmUgbW9zdCBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBUaGlzIGlzIGhvdyBJJiMzOTtsbCB1bmRlcnN0YW5kIHRoZSByaXBwbGUgZWZmZWN0cyBvZiB0aGUgdXBkYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MTI3Mj1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTI5NC1cdFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcbmZzL2V4dDQveGF0dHIuYzoxMjk1Olx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xuZnMvZXh0NC94YXR0ci5jLTEyOTYtXHRcdCAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xOTA5PXN0YXRpYyBpbnRcbmZzL2V4dDQveGF0dHIuYzoxOTEwOmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L3hhdHRyLmMtMTkxMS1cdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xOTU1LVx0XHRcdCAqIFRoaXMgbXVzdCBoYXBwZW4gdW5kZXIgYnVmZmVyIGxvY2sgZm9yXG5mcy9leHQ0L3hhdHRyLmM6MTk1NjpcdFx0XHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxuZnMvZXh0NC94YXR0ci5jLTE5NTctXHRcdFx0ICogYmxvY2tcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjQwMT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI0ODQtXHRcdGVsc2UgaWYgKCFicy5zLm5vdF9mb3VuZClcbmZzL2V4dDQveGF0dHIuYzoyNDg1Olx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2YnMpO1xuZnMvZXh0NC94YXR0ci5jLTI0ODYtXHR9IGVsc2Uge1xuLS1cbmZzL2V4dDQveGF0dHIuYy0yNTAxLVx0XHRcdGkudmFsdWUgPSBOVUxMO1xuZnMvZXh0NC94YXR0ci5jOjI1MDI6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjUwMy1cdFx0fSBlbHNlIGlmIChlcnJvciA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1MTAtXHRcdFx0fVxuZnMvZXh0NC94YXR0ci5jOjI1MTE6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZicyk7XG5mcy9leHQ0L3hhdHRyLmMtMjUxMi1cdFx0XHRpZiAoIWVycm9yIFx1MDAyNlx1MDAyNiAhaXMucy5ub3RfZm91bmQpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjY1Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNzIyLVx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xuZnMvZXh0NC94YXR0ci5jOjI3MjM6XHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmksIGJzKTtcbmZzL2V4dDQveGF0dHIuYy0yNzI0LVx0aWYgKGVycm9yKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzMyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggdGhlIGV4dDQgZmlsZXN5c3RlbToKCioqRGl2aW5nIGludG8geGF0dHIgU2V0dGluZyBpbiBleHQ0KioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHNldHRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSBrbm93IGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGlzICp0aGUqIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoYXQuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgdG8gdW5kZXJzdGFuZCBhbGwgb2YgdGhlIHVzZSBjYXNlcywgaWRlbnRpZnkgd2hpY2ggcHJvY2Vzc2VzIHVzZSBpdCBhbmQgaW4gd2hhdCB3YXkuIFdoZXJlIGluIHRoZSBjb2RlYmFzZSBpcyB0aGlzIHBpdm90YWwgZnVuY3Rpb24gYWN0dWFsbHkgKmNhbGxlZCogZnJvbT8gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyBsaWUsIGFuZCB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2FjbC5jPTE4OT1fX2V4dDRfc2V0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbi0tXG5mcy9leHQ0L2FjbC5jLTIxNi1cbmZzL2V4dDQvYWNsLmM6MjE3Olx0ZXJyb3IgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgbmFtZV9pbmRleCwgXCYjMzQ7XCYjMzQ7LFxuZnMvZXh0NC9hY2wuYy0yMTgtXHRcdFx0XHQgICAgICB2YWx1ZSwgc2l6ZSwgeGF0dHJfZmxhZ3MpO1xuLS1cbmZzL2V4dDQvY3J5cHRvLmM9MTMyPXN0YXRpYyBpbnQgZXh0NF9zZXRfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpjdHgsIHNpemVfdCBsZW4sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xNzItXHRcdCAqL1xuZnMvZXh0NC9jcnlwdG8uYzoxNzM6XHRcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC9jcnlwdG8uYy0xNzQtXHRcdFx0XHRcdCAgICBFWFQ0X1hBVFRSX0lOREVYX0VOQ1JZUFRJT04sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0yMDItXG5mcy9leHQ0L2NyeXB0by5jOjIwMzpcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX0VOQ1JZUFRJT04sXG5mcy9leHQ0L2NyeXB0by5jLTIwNC1cdFx0XHRcdCAgICBFWFQ0X1hBVFRSX05BTUVfRU5DUllQVElPTl9DT05URVhULFxuLS1cbmZzL2V4dDQveGF0dHIuYz0yMzcwPXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfeGF0dHJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC94YXR0ci5jLTIzODgtLypcbmZzL2V4dDQveGF0dHIuYzoyMzg5OiAqIGV4dDRfeGF0dHJfc2V0X2hhbmRsZSgpXG5mcy9leHQ0L3hhdHRyLmMtMjM5MC0gKlxuLS1cbmZzL2V4dDQveGF0dHIuYz0yNDAwPWludFxuZnMvZXh0NC94YXR0ci5jOjI0MDE6ZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LFxuZnMvZXh0NC94YXR0ci5jLTI0MDItXHRcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0yNTUzPWludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1ODItICpcbmZzL2V4dDQveGF0dHIuYzoyNTgzOiAqIExpa2UgZXh0NF94YXR0cl9zZXRfaGFuZGxlLCBidXQgc3RhcnQgZnJvbSBhbiBpbm9kZS4gVGhpcyBleHRlbmRlZFxuZnMvZXh0NC94YXR0ci5jLTI1ODQtICogYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBpcyBhIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gYnkgaXRzZWxmLlxuLS1cbmZzL2V4dDQveGF0dHIuYz0yNTg5PWV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNjEyLVxuZnMvZXh0NC94YXR0ci5jOjI2MTM6XHRcdGVycm9yID0gZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsXG5mcy9leHQ0L3hhdHRyLmMtMjYxNC1cdFx0XHRcdFx0ICAgICAgdmFsdWUsIHZhbHVlX2xlbiwgZmxhZ3MpO1xuLS1cbmZzL2V4dDQveGF0dHIuaD0xODE9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xuZnMvZXh0NC94YXR0ci5oOjE4MjpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xuZnMvZXh0NC94YXR0ci5oLTE4My1leHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcbi0tXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM9MzY9ZXh0NF9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJfYXJyYXksXG4tLVxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTQzLVx0Zm9yICh4YXR0ciA9IHhhdHRyX2FycmF5OyB4YXR0ci1cdTAwM2VuYW1lICE9IE5VTEw7IHhhdHRyJiM0MzsmIzQzOykge1xuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jOjQ0Olx0XHRlcnIgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSxcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy00NS1cdFx0XHRcdFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBleHQ0X3hhdHRyX3NldGAgRnVuY3Rpb24qKgoKT2theSwgc28gYGV4dDRfeGF0dHJfc2V0YCBpcyB0aGUgYmlnIGthaHVuYSwgdGhlIHRvcC1sZXZlbCBmdW5jdGlvbiBmb3Igc2V0dGluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIG9uIGFuIGV4dDQgZmlsZXN5c3RlbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgaW52b2tlZCBmcm9tIHdpdGhpbiB0aGUga2VybmVsLCBhbmQgd2hhdCBhcmUgdGhlIGNvbnRleHRzIG9mIHRob3NlIGNhbGxzPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCAqd2h5KiBgZXh0NF94YXR0cl9zZXRgIGlzIGJlaW5nIGNhbGxlZCBhbmQgdGhlIHR5cGljYWwgc2NlbmFyaW9zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGhhbmRsZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjcml0aWNhbCB1bmRlcnN0YW5kaW5nIGZvciB0aGluZ3MgbGlrZSBkZWJ1Z2dpbmcgYW5kIG9wdGltaXNhdGlvbiBsYXRlciBvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX3NldFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0yNTUzPWludCBleHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCB2YWx1ZV9sZW4sXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI1ODAtLypcbmZzL2V4dDQveGF0dHIuYzoyNTgxOiAqIGV4dDRfeGF0dHJfc2V0KClcbmZzL2V4dDQveGF0dHIuYy0yNTgyLSAqXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI1ODg9aW50XG5mcy9leHQ0L3hhdHRyLmM6MjU4OTpleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmFtZV9pbmRleCwgY29uc3QgY2hhciAqbmFtZSxcbmZzL2V4dDQveGF0dHIuYy0yNTkwLVx0ICAgICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC94YXR0ci5oPTE4MD1leHRlcm4gaW50IGV4dDRfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpO1xuZnMvZXh0NC94YXR0ci5oOjE4MTpleHRlcm4gaW50IGV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XG5mcy9leHQ0L3hhdHRyLmgtMTgyLWV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7XG4tLVxuZnMvZXh0NC94YXR0cl9odXJkLmM9MzQ9ZXh0NF94YXR0cl9odXJkX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00Mi1cbmZzL2V4dDQveGF0dHJfaHVyZC5jOjQzOlx0cmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX0hVUkQsXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00NC1cdFx0XHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xuLS1cbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYz0yNT1leHQ0X3hhdHRyX3NlY3VyaXR5X3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtMzAte1xuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jOjMxOlx0cmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTMyLVx0XHRcdCAgICAgIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7XG4tLVxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmM9MzI9ZXh0NF94YXR0cl90cnVzdGVkX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYy0zNy17XG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYzozODpcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9UUlVTVEVELFxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmMtMzktXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbi0tXG5mcy9leHQ0L3hhdHRyX3VzZXIuYz0zMz1leHQ0X3hhdHRyX3VzZXJfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuLS1cbmZzL2V4dDQveGF0dHJfdXNlci5jLTQwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5mcy9leHQ0L3hhdHRyX3VzZXIuYzo0MTpcdHJldHVybiBleHQ0X3hhdHRyX3NldChpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9VU0VSLFxuZnMvZXh0NC94YXR0cl91c2VyLmMtNDItXHRcdFx0ICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgYGV4dDRgIEZpbGVzeXN0ZW0gWGF0dHIgSGFuZGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaW4gYGV4dDRgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgZXh0NF94YXR0cl9zZXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZyb20gdGhlIFZGUyB4YXR0ciBoYW5kbGVycywgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBleHQ0X3hhdHRyX3NldGAsIHRoZSB3aG9sZSBjYWxsIGNoYWluIHNlZW1zIHNpZ25pZmljYW50LgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgcHJpbWFyaWx5IG9uIGBleHQ0X3hhdHRyX3NldGAg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXMgYSBmb2N1cyBzeW1ib2wgYXMgd2VsbC4gV2hpbGUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBzdGF0aWMsIG1lYW5pbmcgaXQgY2FuJiMzOTt0IGJlIGRpcmVjdGx5IHRhcmdldGVkIGlmIGlubGluZWQsIGl0JiMzOTtzIGEgbGFyZ2UgZnVuY3Rpb24gc28gdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB0aGF0IGl0IGlzIG5vdC4gSG93ZXZlciwgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXJlIGJvdGggZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSB3YXkgdG8gZ28uCgpOb3csIGxldCYjMzk7cyBleHBsb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gT2J2aW91c2x5LCBgQ09ORklHX0VYVDRfRlNgIGlzIGVzc2VudGlhbCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBUbyBwb3RlbnRpYWxseSB1bmxvY2sgbW9yZSB4YXR0ci1yZWxhdGVkIGNvZGUgcGF0aHMsIEkgc2hvdWxkIGFsc28gZW5hYmxlIGBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFlgLiBBZGRpbmcgYWxsIG9mIHRob3NlIHdpbGwgYmUgbmVjZXNzYXJ5LgoKSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIHBhdGNoIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSBzZWUgdGhhdCBgZXh0NF94YXR0cl9yZXVzZV91bmRvYCBpcyBhIG5ldyBzdGF0aWMgZnVuY3Rpb24uIEkmIzM5O3ZlIGFscmVhZHkgbm90ZWQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBTbywgYGV4dDRfeGF0dHJfc2V0YCBhbmQgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXJlIHRoZSBtYWluIGNhbGxlcnMuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYGV4dDRfeGF0dHJfc2V0YCBpcyBpbiBgZnMvZXh0NC94YXR0ci5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gVGhlIHNhbWUgZ29lcyBmb3IgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgLSBhbHNvIGV4cG9ydGVkIGFuZCBub3Qgc3RhdGljLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgKm90aGVyKiBjYWxsZXJzIG9mIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAuIEl0IGxvb2tzIGxpa2UgYGV4dDRfeGF0dHJfbW92ZV90b19ibG9ja2AgYWxzbyBjYWxscyBpdCwgc28gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgIGlzIGNhbGxlZCBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MjYzMj1zdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3NoaWZ0X2VudHJpZXMoc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNjU2LSAqL1xuZnMvZXh0NC94YXR0ci5jOjI2NTc6c3RhdGljIGludCBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yNjU4LVx0XHRcdFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI3NDY9c3RhdGljIGludCBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjc5Ny1cdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG5mcy9leHQ0L3hhdHRyLmM6Mjc5ODpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2soaGFuZGxlLCBpbm9kZSwgcmF3X2lub2RlLFxuZnMvZXh0NC94YXR0ci5jLTI3OTktXHRcdFx0XHRcdFx0IGVudHJ5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA3MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgWGF0dHIgU3BhY2UgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSB3aGVuIHRoZXkgbmVlZCB0byBiZSBtb3ZlZCB0byBibG9jayBzcGFjZS4gSXQgbG9va3MgbGlrZSBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhpcyBwcm9jZXNzLCBjYWxsaW5nIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgLiBUaGF0JiMzOTtzIHRoZSBrZXkgdHJhbnNpdGlvbiBwb2ludC4KCk5vdywgbXkgaW1tZWRpYXRlIG5leHQgcXVlc3Rpb24gaXM6IHdoZXJlIGlzIGBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2VgIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKnRyaWdnZXJzKiBmb3IgdGhpcyB3aG9sZSBwcm9jZXNzLiBJcyBpdCB3aGVuIGFuIHhhdHRyJiMzOTtzIGRhdGEgZ2V0cyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgaW5vZGUgaXRzZWxmPyBJcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBzcGVjaWZpYyBvcGVyYXRpb24sIGxpa2UgYSBzZXR4YXR0ciBjYWxsLCBvciBzb21ldGhpbmcgaW50ZXJuYWw/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgYGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZWAgaXMgY3J1Y2lhbCB0byBmdWxseSBncmFzcCB0aGUgeGF0dHIgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgZXZlbiBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBzdWNoIGFzIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBtb3ZlbWVudCBvZiBkYXRhLiBUaGlzIGNhbGwgY2hhaW4gaXMgd2hhdCBJIG5lZWQgdG8gdHJhY2UgYW5kIHVuZGVyc3RhbmQgdG8gZ2FpbiBhIGJldHRlciBhcHByZWNpYXRpb24gb2Ygd2hhdCBleHQ0IGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MjY1Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yNzQ1LVxuZnMvZXh0NC94YXR0ci5jOjI3NDY6c3RhdGljIGludCBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yNzQ3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTI4MTU9aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTI4ODUtXG5mcy9leHQ0L3hhdHRyLmM6Mjg4NjpcdGVycm9yID0gZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlKGhhbmRsZSwgaW5vZGUsIHJhd19pbm9kZSxcbmZzL2V4dDQveGF0dHIuYy0yODg3LVx0XHRcdFx0XHQgICAgaXNpemVfZGlmZiwgaWZyZWUsIGJmcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjgwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIHRoZSBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBpbnZva2VkPyBXaGF0JiMzOTtzIHRoZSBjYWxsIGdyYXBoPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaGFuZGxpbmcsIGFuZCBleHBhbnNpb24gaW1wbGllcyBhIHNpemUgY2hhbmdlLiBJIG5lZWQgdG8ga25vdyAqd2h5KiB0aGUgZXhwYW5zaW9uIGlzIGhhcHBlbmluZyB0byBmdWxseSBncmFzcCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBhbmQgaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIG9yIG1ldGhvZHMuIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSXMgdGhpcyByZWxhdGVkIHRvIGZpbGUgY3JlYXRpb24sIG1vZGlmaWNhdGlvbiwgb3IgbWV0YWRhdGEgdXBkYXRlcz8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBwYXJhbW91bnQgdG8gYXZvaWQgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGxpa2UgRUEgc2l6aW5nLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgY2FsbCB0cmFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jPTY0Mzk9c3RhdGljIGludCBfX2V4dDRfZXhwYW5kX2V4dHJhX2lzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTY0ODUtXHQvKiB0cnkgdG8gZXhwYW5kIHdpdGggRUFzIHByZXNlbnQgKi9cbmZzL2V4dDQvaW5vZGUuYzo2NDg2Olx0ZXJyb3IgPSBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShpbm9kZSwgbmV3X2V4dHJhX2lzaXplLFxuZnMvZXh0NC9pbm9kZS5jLTY0ODctXHRcdFx0XHRcdCAgIHJhd19pbm9kZSwgaGFuZGxlKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9Mjc0Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODE0LSAqL1xuZnMvZXh0NC94YXR0ci5jOjI4MTU6aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG5mcy9leHQ0L3hhdHRyLmMtMjgxNi1cdFx0XHQgICAgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmg9MTkyPWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xuZnMvZXh0NC94YXR0ci5oLTE5My1cbmZzL2V4dDQveGF0dHIuaDoxOTQ6ZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuZnMvZXh0NC94YXR0ci5oLTE5NS1cdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzYxCgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDMyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRXh0NCBFeHRlbmRlZCBBdHRyaWJ1dGUgTG9naWMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHNwZWNpZmljYWxseSwgaG93IGl0IGhhbmRsZXMgZXJyb3JzIHdoZW4gbWFuYWdpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBleHQ0IGZpbGVzeXN0ZW1zLiBJdCBzZWVtcyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGdldHMgY2FsbGVkIGZyb20gYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSYjMzk7dmUgYWxzbyB2ZXJpZmllZCB0aGF0IHRoaXMgaXMgcmVhY2hhYmxlLiBUaGVyZWZvcmUsIGBleHQ0X3hhdHRyX3NldGAsIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgLCBhbmQgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYCBhcmUgZGVmaW5pdGVseSB3b3J0aCBmb2N1c2luZyBvbiBpbiBteSBmdXp6aW5nIGVmZm9ydHMuIEkgbmVlZCB0byBrZWVwIHRoZXNlIGZ1bmN0aW9ucyBhdCB0aGUgZm9yZWZyb250LgoKTm93LCBiZWZvcmUgSSBwcm9jZWVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHNldCB1cC4gYEVYVDRfRlNgIGlzIG9idmlvdXNseSBjcml0aWNhbC4gYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSBsaWtlbHkgYmVuZWZpY2lhbCwgdG9vLCB0byBjb3ZlciBhcyBtdWNoIGdyb3VuZCBhcyBwb3NzaWJsZSBkdXJpbmcgdGVzdGluZy4KCkhlcmUmIzM5O3MgYSBxdWljayBzdW1tYXJ5IG9mIG15IGZpbmRpbmdzOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGRlZmluaXRlbHkgYSB2dWxuZXJhYmlsaXR5LXByb25lIGFyZWEuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgZXh0NF94YXR0cl9zZXRgLCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCwgYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYAoqICAgKipFbmFibGVDb25maWdzOioqIGBFWFQ0X0ZTYCwgYEVYVDRfRlNfUE9TSVhfQUNMYCwgYEVYVDRfRlNfU0VDVVJJVFlgCiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggdG91Y2hlcyBlcnJvciBoYW5kbGluZyBzcGVjaWZpY2FsbHkgd2l0aGluIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgd2hlbiBhbiBFQSBpbm9kZSByZWZlcmVuY2UgZHJvcCBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljLiBHaXZlbiB0aGF0IHhhdHRyIHN5c2NhbGxzIGFyZSB1c2VyLWFjY2Vzc2libGUgYW5kIGlub2RlIGV4cGFuc2lvbiB0cmlnZ2VycyB0aGlzIGxvZ2ljLCBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCkkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBhcmVuJiMzOTt0IHN0YXRpYy4gWWVzLCB0aGV5IGFyZSBleHBvcnRlZCBpbiBgZnMvZXh0NC94YXR0ci5oYCwgYXMgSSBleHBlY3RlZC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY2FsbCB0aGUgcmVzdWx0cyB3aXRoIHRoYXQgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfU0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAgICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NF94YXR0cl9ibG9ja19zZXQgd2hlbiBkcm9wcGluZyBhIHJlZmVyZW5jZSB0byBhbiBFQSBpbm9kZSBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB4YXR0ciBzeXNjYWxscyBhbmQgaW5vZGUgZXhwYW5zaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfUE9TSVhfQUNMJiMzNDssCiAgICAmIzM0O0VYVDRfRlNfU0VDVVJJVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAgICYjMzQ7ZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NF94YXR0cl9ibG9ja19zZXQgd2hlbiBkcm9wcGluZyBhIHJlZmVyZW5jZSB0byBhbiBFQSBpbm9kZSBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB4YXR0ciBzeXNjYWxscyBhbmQgaW5vZGUgZXhwYW5zaW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmRvIGxvZ2ljIGluIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHNldHRpbmcgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIHByb3BlciBjbGVhbnVwIChmcmVlaW5nIHF1b3RhLCBkcm9wcGluZyBpbm9kZSByZWZlcmVuY2VzLCBhbmQgdW5kb2luZyBibG9jayByZXVzZSkgd2hlbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgYW5kIHF1b3RhIGlzc3Vlcywgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmE3ODNkM2ZiZGVlYzRjZmE4NjljZDk4ZjZiYjkwOWE0ZTJjODkwNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDA3OjI2OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjguLjBjZTkzN2Q4OTAwNDIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTEzNjIsNiAmIzQzOzEzNjIsMTcgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuOwogfQogCiYjNDM7LyogVW5kbyB0aGUgbG9jYWxseS1vd25lZCBwYXJ0IG9mIGEgY2FjaGVkLWJsb2NrIHJldXNlLiAqLwomIzQzO3N0YXRpYyB2b2lkIGV4dDRfeGF0dHJfcmV1c2VfdW5kbyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMOwomIzQzOwomIzQzOwlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsICZhbXA7ZWFfaW5vZGVfYXJyYXksCiYjNDM7CQkJCSAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pOwomIzQzOwlleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mCiAgKiBieXRlcyB1c2VkIGJ5IEVBIGVudHJpZXMuCkBAIC0yMTA3LDYgJiM0MzsyMTE4LDM5IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQltYl9jYWNoZV9lbnRyeV90b3VjaChlYV9ibG9ja19jYWNoZSwgY2UpOwogCQkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CiAJCQljZSA9IE5VTEw7CiYjNDM7CQkJaWYgKCEoYnMtJmd0O2JoICZhbXA7JmFtcDsgcy0mZ3Q7YmFzZSA9PSBicy0mZ3Q7YmgtJmd0O2JfZGF0YSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBlYV9pbm9kZSkgewomIzQzOwkJCQkvKgomIzQzOwkJCQkgKiBUaGUgcmV1c2VkIGJsb2NrIGFscmVhZHkgaG9sZHMgaXRzIG93bgomIzQzOwkJCQkgKiByZWZlcmVuY2U7IGRyb3AgdGhlIGV4dHJhIG9uZSB1bmxlc3MgdGhlCiYjNDM7CQkJCSAqIGVudHJ5IHdlbnQgaW50byB0aGUgb2xkIGJ1ZmZlciBkaXJlY3RseS4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWVycm9yID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwKJiM0MzsJCQkJCQkJCSBlYV9pbm9kZSk7CiYjNDM7CQkJCWlmIChlcnJvcikgewomIzQzOwkJCQkJLyoKJiM0MzsJCQkJCSAqIFRoZSBkZWNyZW1lbnQgbWF5IGFscmVhZHkgaGF2ZSBydW47CiYjNDM7CQkJCQkgKiBkbyBub3QgcmV0cnkgaXQ6IGZyZWUgdGhlIGNoYXJnZSwKJiM0MzsJCQkJCSAqIHVuZG8gdGhlIHJldXNlLCBhbmQgZmFpbCB0aGUgb3AuCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCWV4dDRfZXJyb3JfaW5vZGUoaW5vZGUsIF9fZnVuY19fLAomIzQzOwkJCQkJCQkgX19MSU5FX18sIDAsCiYjNDM7CQkJCQkJCSYjMzQ7ZGVjIHJlZiBlcnJvcj0lZCYjMzQ7LAomIzQzOwkJCQkJCQkgZXJyb3IpOwomIzQzOwkJCQkJZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLAomIzQzOwkJCQkJCQkJICAgIGVhX2lub2RlLAomIzQzOwkJCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7CiYjNDM7CQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJCWVhX2lub2RlID0gTlVMTDsKJiM0MzsJCQkJCWlmIChuZXdfYmggIT0gYnMtJmd0O2JoKQomIzQzOwkJCQkJCWV4dDRfeGF0dHJfcmV1c2VfdW5kbyhoYW5kbGUsCiYjNDM7CQkJCQkJCQkgICAgICBpbm9kZSwKJiM0MzsJCQkJCQkJCSAgICAgIG5ld19iaCk7CiYjNDM7CQkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQkJCX0KJiM0MzsJCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCWVhX2lub2RlID0gTlVMTDsKJiM0MzsJCQl9CiAJCX0gZWxzZSBpZiAoYnMtJmd0O2JoICZhbXA7JmFtcDsgcy0mZ3Q7YmFzZSA9PSBicy0mZ3Q7YmgtJmd0O2JfZGF0YSkgewogCQkJLyogV2Ugd2VyZSBtb2RpZnlpbmcgdGhpcyBibG9jayBpbi1wbGFjZS4gKi8KIAkJCWVhX2JkZWJ1Zyhicy0mZ3Q7YmgsICYjMzQ7a2VlcGluZyB0aGlzIGJsb2NrJiMzNDspOwpAQCAtMjE0MywxMyAmIzQzOzIxODcsMjEgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGdldGJsa19mYWlsZWQ7CiAJCQlpZiAoZWFfaW5vZGUpIHsKLQkJCQkvKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGUuICovCiYjNDM7CQkJCS8qCiYjNDM7CQkJCSAqIERyb3AgdGhlIGV4dHJhIHJlZiBvbiBlYV9pbm9kZTsgb24KJiM0MzsJCQkJICogZmFpbHVyZSB0aGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmUKJiM0MzsJCQkJICogcnVuLCBzbyBqdXN0IGZhaWwgYW5kIGZyZWUgdGhlIGJsb2NrLgomIzQzOwkJCQkgKi8KIAkJCQllcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsCiAJCQkJCQkJCSBlYV9pbm9kZSk7Ci0JCQkJaWYgKGVycm9yKQotCQkJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsCi0JCQkJCQkJICAgJiMzNDtkZWMgcmVmIGVycm9yPSVkJiMzNDssCi0JCQkJCQkJICAgZXJyb3IpOwomIzQzOwkJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwKJiM0MzsJCQkJCQkJCSAgICBlYV9pbm9kZSwKJiM0MzsJCQkJCQkJCSAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpOwomIzQzOwkJCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJCQllYV9pbm9kZSA9IE5VTEw7CiYjNDM7CQkJCQlnb3RvIGdldGJsa19mYWlsZWQ7CiYjNDM7CQkJCX0KIAkJCQlpcHV0KGVhX2lub2RlKTsKIAkJCQllYV9pbm9kZSA9IE5VTEw7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM2CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDQ4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFWFQ0IFhhdHRyIFBhdGNoKioKCk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaW4gYGZzL2V4dDQveGF0dHIuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSByZWZlcmVuY2UgY291bnRpbmcgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgY2VudGVyZWQgYXJvdW5kIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIHRoYXQgbWF5IGFyaXNlIGR1cmluZyB4YXR0ciBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gdGhlIGhhbmRsaW5nIG9mIGJsb2NrIHJldXNlIGFuZCBhbGxvY2F0aW9uIGZhaWx1cmVzLgoKVGhlIGtleSBhZGRpdGlvbiBzZWVtcyB0byBiZSB0aGUgYGV4dDRfeGF0dHJfcmV1c2VfdW5kb2AgZnVuY3Rpb24uIEl0IHByb3ZpZGVzIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHJvbGxpbmcgYmFjayBvcGVyYXRpb25zIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IHJlbGVhc2VzIHRoZSBibG9jayAoYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2ApIGFuZCBmcmVlcyB0aGUgYXNzb2NpYXRlZCBpbm9kZSBhcnJheSAoYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZWApLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBhbmQgbmVjZXNzYXJ5IHBhdHRlcm4gZm9yIHVuZG9pbmcgcG90ZW50aWFsbHkgaW5jb21wbGV0ZSB4YXR0ciB1cGRhdGVzLgoKTG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHRoZSBzbmlwcGV0IHdpdGhpbiBgZXh0NF94YXR0cl9ibG9ja19zZXRgOgoKYGBgYwoJCQlpZiAoIShicy0mZ3Q7YmggJmFtcDsmYW1wOyBzLSZndDtiYXNlID09IGJzLSZndDtiaC0mZ3Q7Yl9kYXRhKSAmYW1wOyZhbXA7CgkJCSAgICBlYV9pbm9kZSkgewoJCQkJLyoKCQkJCSAqIFRoZSByZXVzZWQgYmxvY2sgYWxyZWFkeSBob2xkcyBpdHMgb3duCgkJCQkgKiByZWZlcmVuY2U7IGRyb3AgdGhlIGV4dHJhIG9uZSB1bmxlc3MgdGhlCgkJCQkgKiBlbnRyeSB3ZW50IGludG8gdGhlIG9sZCBidWZmZXIgZGlyZWN0bHkuCgkJCQkgKi8KCQkJCWVycm9yID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwKCQkJCQkJCQkgZWFfaW5vZGUpOwoJCQkJaWYgKGVycm9yKSB7Ci4uLgpgYGAKClRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBpbXByZXNzaW9uLiBJdCYjMzk7cyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvIHdpdGhpbiB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHByb2Nlc3MuIFRoZXJlJiMzOTtzIG5vIGhpbnQgb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgdHlwZSBvZiBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbi4gSXQgZm9jdXNlcyBvbiB0aGUgY3J1Y2lhbCBhc3BlY3Qgb2YgZGVjcmVtZW50aW5nIHJlZmVyZW5jZSBjb3VudHMgKCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCksIGVuc3VyaW5nIHRoYXQgd2UgZG9uJiMzOTt0IGVuZCB1cCB3aXRoIGRhbmdsaW5nIHBvaW50ZXJzIG9yIHJlc291cmNlIGV4aGF1c3Rpb24uCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBhbmQgY29uc2lkZXJpbmcgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgdG9vbGluZywgS0FTQU4vTE9DS0RFUC9LTUVNTEVBSyBhcmUgYmV0dGVyIHN1aXRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgbWVtb3J5IGlzc3Vlcy4gS01TQU4gZG9lc24mIzM5O3Qgc2VlbSByZWxldmFudCBoZXJlLiBUaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgY29ycmVjdG5lc3MgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQsIG5vdCBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCByZWFkcy4gSXQgYWRkcmVzc2VzIHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIG9yIHF1b3RhIGxlYWtzLCBidXQgbm90IG1lbW9yeSBzYWZldHkgaXNzdWVzIHBlciBzZS4gSXQmIzM5O3MgYSBzb2xpZCwgdGFyZ2V0ZWQgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5kbyBsb2dpYyBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBzZXR0aW5nIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBwcm9wZXIgY2xlYW51cCAoZnJlZWluZyBxdW90YSwgZHJvcHBpbmcgaW5vZGUgcmVmZXJlbmNlcywgYW5kIHVuZG9pbmcgYmxvY2sgcmV1c2UpIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcywgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIGFuZCBxdW90YSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5kbyBsb2dpYyBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBzZXR0aW5nIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBwcm9wZXIgY2xlYW51cCAoZnJlZWluZyBxdW90YSwgZHJvcHBpbmcgaW5vZGUgcmVmZXJlbmNlcywgYW5kIHVuZG9pbmcgYmxvY2sgcmV1c2UpIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcywgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIGFuZCBxdW90YSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjA5Ljg4MDIzNjk3N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzkwNjE1MTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDRfRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJFWFQ0X0ZTX1NFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICAgIFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmRvIGxvZ2ljIGluIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHNldHRpbmcgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIHByb3BlciBjbGVhbnVwIChmcmVlaW5nIHF1b3RhLCBkcm9wcGluZyBpbm9kZSByZWZlcmVuY2VzLCBhbmQgdW5kb2luZyBibG9jayByZXVzZSkgd2hlbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgYW5kIHF1b3RhIGlzc3Vlcywgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0X3hhdHRyX2Jsb2NrX3NldCB3aGVuIGRyb3BwaW5nIGEgcmVmZXJlbmNlIHRvIGFuIEVBIGlub2RlIGZhaWxzLiBUaGlzIGlzIGNvcmUgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHhhdHRyIHN5c2NhbGxzIGFuZCBpbm9kZSBleHBhbnNpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjA5Ljg4MDI0NDg5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDE0MTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmE3ODNkM2ZiZGVlYzRjZmE4NjljZDk4ZjZiYjkwOWE0ZTJjODkwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzoyNjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcXG5pbmRleCA5ODJhMWY4MzFlMjI4Li4wY2U5MzdkODkwMDQyIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xcbkBAIC0xMzYyLDYgKzEzNjIsMTcgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybjtcXG4gfVxcbiBcXG4rLyogVW5kbyB0aGUgbG9jYWxseS1vd25lZCBwYXJ0IG9mIGEgY2FjaGVkLWJsb2NrIHJldXNlLiAqL1xcbitzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbit7XFxuK1xcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XFxuK1xcbitcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIFxcdTAwMjZlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0XFx0XFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XFxuK1xcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIEZpbmQgdGhlIGF2YWlsYWJsZSBmcmVlIHNwYWNlIGZvciBFQXMuIFRoaXMgYWxzbyByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2ZcXG4gICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLlxcbkBAIC0yMTA3LDYgKzIxMTgsMzkgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0bWJfY2FjaGVfZW50cnlfdG91Y2goZWFfYmxvY2tfY2FjaGUsIGNlKTtcXG4gXFx0XFx0XFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XFxuIFxcdFxcdFxcdGNlID0gTlVMTDtcXG4rXFx0XFx0XFx0aWYgKCEoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IHMtXFx1MDAzZWJhc2UgPT0gYnMtXFx1MDAzZWJoLVxcdTAwM2ViX2RhdGEpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBlYV9pbm9kZSkge1xcbitcXHRcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHRcXHQgKiBUaGUgcmV1c2VkIGJsb2NrIGFscmVhZHkgaG9sZHMgaXRzIG93blxcbitcXHRcXHRcXHRcXHQgKiByZWZlcmVuY2U7IGRyb3AgdGhlIGV4dHJhIG9uZSB1bmxlc3MgdGhlXFxuK1xcdFxcdFxcdFxcdCAqIGVudHJ5IHdlbnQgaW50byB0aGUgb2xkIGJ1ZmZlciBkaXJlY3RseS5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdFxcdCAqIFRoZSBkZWNyZW1lbnQgbWF5IGFscmVhZHkgaGF2ZSBydW47XFxuK1xcdFxcdFxcdFxcdFxcdCAqIGRvIG5vdCByZXRyeSBpdDogZnJlZSB0aGUgY2hhcmdlLFxcbitcXHRcXHRcXHRcXHRcXHQgKiB1bmRvIHRoZSByZXVzZSwgYW5kIGZhaWwgdGhlIG9wLlxcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0ZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgX19mdW5jX18sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBfX0xJTkVfXywgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZXJyb3IpO1xcbitcXHRcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBlYV9pbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuK1xcdFxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuK1xcdFxcdFxcdFxcdFxcdGlmIChuZXdfYmggIT0gYnMtXFx1MDAzZWJoKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmV3X2JoKTtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIGlmIChicy1cXHUwMDNlYmggXFx1MDAyNlxcdTAwMjYgcy1cXHUwMDNlYmFzZSA9PSBicy1cXHUwMDNlYmgtXFx1MDAzZWJfZGF0YSkge1xcbiBcXHRcXHRcXHQvKiBXZSB3ZXJlIG1vZGlmeWluZyB0aGlzIGJsb2NrIGluLXBsYWNlLiAqL1xcbiBcXHRcXHRcXHRlYV9iZGVidWcoYnMtXFx1MDAzZWJoLCBcXFwia2VlcGluZyB0aGlzIGJsb2NrXFxcIik7XFxuQEAgLTIxNDMsMTMgKzIxODcsMjEgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGdldGJsa19mYWlsZWQ7XFxuIFxcdFxcdFxcdGlmIChlYV9pbm9kZSkge1xcbi1cXHRcXHRcXHRcXHQvKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGUuICovXFxuK1xcdFxcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdFxcdCAqIERyb3AgdGhlIGV4dHJhIHJlZiBvbiBlYV9pbm9kZTsgb25cXG4rXFx0XFx0XFx0XFx0ICogZmFpbHVyZSB0aGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmVcXG4rXFx0XFx0XFx0XFx0ICogcnVuLCBzbyBqdXN0IGZhaWwgYW5kIGZyZWUgdGhlIGJsb2NrLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZWFfaW5vZGUpO1xcbi1cXHRcXHRcXHRcXHRpZiAoZXJyb3IpXFxuLVxcdFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBlcnJvcik7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnJvcikge1xcbitcXHRcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBlYV9pbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuK1xcdFxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZ2V0YmxrX2ZhaWxlZDtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0ZWFfaW5vZGUgPSBOVUxMO1xcbiBcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjEwLjMzMjA0MjU1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2MTM1NTA0NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDRfRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJFWFQ0X0ZTX1NFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICAgIFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0X3hhdHRyX2Jsb2NrX3NldCB3aGVuIGRyb3BwaW5nIGEgcmVmZXJlbmNlIHRvIGFuIEVBIGlub2RlIGZhaWxzLiBUaGlzIGlzIGNvcmUgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHhhdHRyIHN5c2NhbGxzIGFuZCBpbm9kZSBleHBhbnNpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJhNzgzZDNmYmRlZWM0Y2ZhODY5Y2Q5OGY2YmI5MDlhNGUyYzg5MDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzoyNjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyOC4uMGNlOTM3ZDg5MDA0MiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTM2Miw2ICsxMzYyLDE3IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuO1xuIH1cbiBcbisvKiBVbmRvIHRoZSBsb2NhbGx5LW93bmVkIHBhcnQgb2YgYSBjYWNoZWQtYmxvY2sgcmV1c2UuICovXG4rc3RhdGljIHZvaWQgZXh0NF94YXR0cl9yZXVzZV91bmRvKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4re1xuK1x0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbitcbitcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4rXHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbitcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4rfVxuK1xuIC8qXG4gICogRmluZCB0aGUgYXZhaWxhYmxlIGZyZWUgc3BhY2UgZm9yIEVBcy4gVGhpcyBhbHNvIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZlxuICAqIGJ5dGVzIHVzZWQgYnkgRUEgZW50cmllcy5cbkBAIC0yMTA3LDYgKzIxMTgsMzkgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRtYl9jYWNoZV9lbnRyeV90b3VjaChlYV9ibG9ja19jYWNoZSwgY2UpO1xuIFx0XHRcdG1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgY2UpO1xuIFx0XHRcdGNlID0gTlVMTDtcbitcdFx0XHRpZiAoIShicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgcy1cdTAwM2ViYXNlID09IGJzLVx1MDAzZWJoLVx1MDAzZWJfZGF0YSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGVhX2lub2RlKSB7XG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogVGhlIHJldXNlZCBibG9jayBhbHJlYWR5IGhvbGRzIGl0cyBvd25cbitcdFx0XHRcdCAqIHJlZmVyZW5jZTsgZHJvcCB0aGUgZXh0cmEgb25lIHVubGVzcyB0aGVcbitcdFx0XHRcdCAqIGVudHJ5IHdlbnQgaW50byB0aGUgb2xkIGJ1ZmZlciBkaXJlY3RseS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLFxuK1x0XHRcdFx0XHRcdFx0XHQgZWFfaW5vZGUpO1xuK1x0XHRcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0XHRcdC8qXG4rXHRcdFx0XHRcdCAqIFRoZSBkZWNyZW1lbnQgbWF5IGFscmVhZHkgaGF2ZSBydW47XG4rXHRcdFx0XHRcdCAqIGRvIG5vdCByZXRyeSBpdDogZnJlZSB0aGUgY2hhcmdlLFxuK1x0XHRcdFx0XHQgKiB1bmRvIHRoZSByZXVzZSwgYW5kIGZhaWwgdGhlIG9wLlxuK1x0XHRcdFx0XHQgKi9cbitcdFx0XHRcdFx0ZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgX19mdW5jX18sXG4rXHRcdFx0XHRcdFx0XHQgX19MSU5FX18sIDAsXG4rXHRcdFx0XHRcdFx0XHRcImRlYyByZWYgZXJyb3I9JWRcIixcbitcdFx0XHRcdFx0XHRcdCBlcnJvcik7XG4rXHRcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgIGVhX2lub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbitcdFx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbitcdFx0XHRcdFx0aWYgKG5ld19iaCAhPSBicy1cdTAwM2ViaClcbitcdFx0XHRcdFx0XHRleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgICBpbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgbmV3X2JoKTtcbitcdFx0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4rXHRcdFx0fVxuIFx0XHR9IGVsc2UgaWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWJhc2UgPT0gYnMtXHUwMDNlYmgtXHUwMDNlYl9kYXRhKSB7XG4gXHRcdFx0LyogV2Ugd2VyZSBtb2RpZnlpbmcgdGhpcyBibG9jayBpbi1wbGFjZS4gKi9cbiBcdFx0XHRlYV9iZGVidWcoYnMtXHUwMDNlYmgsIFwia2VlcGluZyB0aGlzIGJsb2NrXCIpO1xuQEAgLTIxNDMsMTMgKzIxODcsMjEgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0XHRnb3RvIGdldGJsa19mYWlsZWQ7XG4gXHRcdFx0aWYgKGVhX2lub2RlKSB7XG4tXHRcdFx0XHQvKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGUuICovXG4rXHRcdFx0XHQvKlxuK1x0XHRcdFx0ICogRHJvcCB0aGUgZXh0cmEgcmVmIG9uIGVhX2lub2RlOyBvblxuK1x0XHRcdFx0ICogZmFpbHVyZSB0aGUgZGVjcmVtZW50IG1heSBhbHJlYWR5IGhhdmVcbitcdFx0XHRcdCAqIHJ1biwgc28ganVzdCBmYWlsIGFuZCBmcmVlIHRoZSBibG9jay5cbitcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLFxuIFx0XHRcdFx0XHRcdFx0XHQgZWFfaW5vZGUpO1xuLVx0XHRcdFx0aWYgKGVycm9yKVxuLVx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4tXHRcdFx0XHRcdFx0XHQgICBcImRlYyByZWYgZXJyb3I9JWRcIixcbi1cdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbitcdFx0XHRcdGlmIChlcnJvcikge1xuK1x0XHRcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICBlYV9pbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4rXHRcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4rXHRcdFx0XHRcdGdvdG8gZ2V0YmxrX2ZhaWxlZDtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjEwLjMzMjA0Mzg1NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDQzNTEzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gZXh0NCBFeHRlbmRlZCBBdHRyaWJ1dGUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gYGZzL2V4dDQveGF0dHIuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gLCBhbmQgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gYGV4dDRfeGF0dHJfYmxvY2tfc2V0YC4gSSBzZWUgaXQncyBhbHNvIHR3ZWFraW5nIHRoZSBlcnJvciBoYW5kbGluZyB3aGVuIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZgIGZhaWxzLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEdpdmVuIHRoYXQgaXQncyBhbHRlcmluZyBjb3JlIGV4dDQgbG9naWMsIG15IGludGVyZXN0IGlzIHBpcXVlZCBpbW1lZGlhdGVseS4gVGhlc2Uga2luZHMgb2YgbW9kaWZpY2F0aW9ucyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2sgYW5kLCBmcmFua2x5LCByaXBlIGZvciBmdXp6aW5nLlxuXG5UbyB1bmRlcnN0YW5kIHRoZSBwYXRjaCdzIGZ1bGwgaW1wYWN0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGFjdHVhbCBjb2RlIGNoYW5nZXMsIHNvIEnigJltIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIHRoaXMgbmV3IGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gIGZ1bmN0aW9uLlxuXG5Ob3csIGJlZm9yZSBJIGp1bXAgaW50byBhIGRlZXAgY29kZSBkaXZlLCBsZXQncyBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWd1cmF0aW9uIGNvbnRleHQgZm9yIHRoaXMuIFNpbmNlIGl0J3MgZGVhbGluZyB3aXRoIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlcywgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0VYVDRfRlNgIGlzIGVuYWJsZWQsIG9mIGNvdXJzZS4gVGhlbiwgbGV0J3MgbG9vayBmb3IgYW55IHNwZWNpZmljIGV4dGVuZGVkIGF0dHJpYnV0ZSBjb25maWd1cmF0aW9ucyDigJMgSSdsbCBuZWVkIHRvIGNoZWNrIGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUgY29kZS4gVGhhdCB3aWxsIGhlbHAgbWUgc2V0IHVwIGEgZ29vZCB0ZXN0aW5nIGVudmlyb25tZW50IGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODM5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MTYuODc2Mzk4MTg0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzA3ODI0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcXG5mcy9leHQ0L0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNDUtXFxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvS2NvbmZpZy00Ny1cXHRib29sIFxcXCJFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTU1LVxcbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQvS2NvbmZpZy01Ny1cXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MTcuMDc5NDgxMTk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MjE2NzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGZvciBFeHRlbmRlZCBBdHRyaWJ1dGVzIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIHRha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gdGhyb3VnaCB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUncyBhbnkgZXhwbGljaXQgbWVudGlvbiBvZiBgRVhUNF9GU19YQVRUUmAgb3IgYSBzaW1pbGFyIGZsYWcgb3IgaWRlbnRpZmllci4gSSBrbm93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGEgY29yZSBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbSdzIGNhcGFiaWxpdGllcywgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSB0aGUgc3BlY2lmaWNzLiBXZSBuZWVkIHRvIGtub3cgaWYgdGhlIHN5c3RlbSBpcyBkZXNpZ25lZCB0byBsZXZlcmFnZSB0aGVzZSBmZWF0dXJlcy4gTGV0IG1lIHNlZSB3aGF0J3Mgb3V0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MTkuODUxNjUzNTA4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODgwNzM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU19YQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjE5LjkwNDU0MTUxN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTIwMjQwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBJbnRlcnBsYXkgb2YgRVhUNCBGZWF0dXJlcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgd2l0aGluIGV4dDQsIGFuZCBpdCBqdXN0IGhpdCBtZTogdGhleSAqcmVseSogb24geGF0dHJzLiBCdXQgdGhlbiBhZ2FpbiwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHhhdHRycyBtaWdodCBhY3R1YWxseSBiZSBwZXJtYW5lbnRseSBlbmFibGVkIGluIGV4dDQgdGhlc2UgZGF5cy4gSG1tLiBJIG5lZWQgdG8gZ2V0IHNvbWUgY2xhcmlmaWNhdGlvbiBvbiB0aGlzLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIGlzIGRlZmluaXRlbHkgdGhlIGBmcy9leHQ0L01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgSSBuZWVkIGFib3V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIG1ha2VmaWxlIHRlbGxzIHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MjMuMjE2NTY5MTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTIxMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhdHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEzOlxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjIzLjI2NzA5NTEzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzgwMzkyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBicmVha2luZyBkb3duIHRoZSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgRVhUNCBYYXR0ciBDb21waWxhdGlvbiBhbmQgRnVuY3Rpb24gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgYHhhdHRyLm9gIGlzICphbHdheXMqIGJyb3VnaHQgaW50byB0aGUgYnVpbGQgaWYgYEVYVDRfRlNgIGlzIGRlZmluZWQuIFRoaXMgY29uZmlybXMgdGhhdCBgRVhUNF9GU2AgaXMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGRyaXZlcyB0aGlzIGluY2x1c2lvbi4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLCBidXQgZ29vZCB0byBoYXZlIHRoYXQgY29uZmlybWVkIGFzIHRoZSBzdGFydGluZyBwb2ludC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGltcGFjdCBvZiB0aGUgY2hhbmdlLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHJlZmVyZW5jZXMgbW9kaWZpY2F0aW9ucyB0byBgZXh0NF94YXR0cl9ibG9ja19zZXRgLiBUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIHRoYXQgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgd2hlcmUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBpbnZva2VkIHdpbGwgdGVsbCBtZSB3aGF0IHN5c3RlbXMsIHdvcmtmbG93cywgb3IgcHJvY2Vzc2VzIGFyZSBtb3N0IGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoaXMgcGF0Y2guIFRoaXMgaXMgaG93IEknbGwgdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMgb2YgdGhlIHVwZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjI2LjY0NTEzODQyMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0NzQ5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xMjcyPWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTEyOTQtXFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTI5NTpcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBmcmVlZCBibG9ja1xcbmZzL2V4dDQveGF0dHIuYy0xMjk2LVxcdFxcdCAqL1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE5MDk9c3RhdGljIGludFxcbmZzL2V4dDQveGF0dHIuYzoxOTEwOmV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5MTEtXFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE5NTUtXFx0XFx0XFx0ICogVGhpcyBtdXN0IGhhcHBlbiB1bmRlciBidWZmZXIgbG9jayBmb3JcXG5mcy9leHQ0L3hhdHRyLmM6MTk1NjpcXHRcXHRcXHQgKiBleHQ0X3hhdHRyX2Jsb2NrX3NldCgpIHRvIHJlbGlhYmx5IGRldGVjdCBtb2RpZmllZFxcbmZzL2V4dDQveGF0dHIuYy0xOTU3LVxcdFxcdFxcdCAqIGJsb2NrXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjQwMT1leHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjQ4NC1cXHRcXHRlbHNlIGlmICghYnMucy5ub3RfZm91bmQpXFxuZnMvZXh0NC94YXR0ci5jOjI0ODU6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjQ4Ni1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1MDEtXFx0XFx0XFx0aS52YWx1ZSA9IE5VTEw7XFxuZnMvZXh0NC94YXR0ci5jOjI1MDI6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjUwMy1cXHRcXHR9IGVsc2UgaWYgKGVycm9yID09IC1FTk9TUEMpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTEwLVxcdFxcdFxcdH1cXG5mcy9leHQ0L3hhdHRyLmM6MjUxMTpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2YnMpO1xcbmZzL2V4dDQveGF0dHIuYy0yNTEyLVxcdFxcdFxcdGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgIWlzLnMubm90X2ZvdW5kKSB7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjY1Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3MjItXFx0LyogTW92ZSBlYSBlbnRyeSBmcm9tIHRoZSBpbm9kZSBpbnRvIHRoZSBibG9jayAqL1xcbmZzL2V4dDQveGF0dHIuYzoyNzIzOlxcdGVycm9yID0gZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIGJzKTtcXG5mcy9leHQ0L3hhdHRyLmMtMjcyNC1cXHRpZiAoZXJyb3IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjI2LjY5ODYyMTIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDYwMTQ5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCB0aGUgZXh0NCBmaWxlc3lzdGVtOlxuXG4qKkRpdmluZyBpbnRvIHhhdHRyIFNldHRpbmcgaW4gZXh0NCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyBzZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkga25vdyBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBpcyAqdGhlKiBtYWluIGVudHJ5IHBvaW50IGZvciB0aGF0LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIHRvIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB1c2UgY2FzZXMsIGlkZW50aWZ5IHdoaWNoIHByb2Nlc3NlcyB1c2UgaXQgYW5kIGluIHdoYXQgd2F5LiBXaGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBwaXZvdGFsIGZ1bmN0aW9uIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20/IFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyBsaWUsIGFuZCB0aGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB0byBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6MzAuNjQ0NjQxMTY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjMzOTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3NldF9oYW5kbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9hY2wuYz0xODk9X19leHQ0X3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXFxuLS1cXG5mcy9leHQ0L2FjbC5jLTIxNi1cXG5mcy9leHQ0L2FjbC5jOjIxNzpcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBcXFwiXFxcIixcXG5mcy9leHQ0L2FjbC5jLTIxOC1cXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgc2l6ZSwgeGF0dHJfZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYz0xMzI9c3RhdGljIGludCBleHQ0X3NldF9jb250ZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKmN0eCwgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2V4dDQvY3J5cHRvLmMtMTcyLVxcdFxcdCAqL1xcbmZzL2V4dDQvY3J5cHRvLmM6MTczOlxcdFxcdHJlcyA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLFxcbmZzL2V4dDQvY3J5cHRvLmMtMTc0LVxcdFxcdFxcdFxcdFxcdCAgICBFWFQ0X1hBVFRSX0lOREVYX0VOQ1JZUFRJT04sXFxuLS1cXG5mcy9leHQ0L2NyeXB0by5jLTIwMi1cXG5mcy9leHQ0L2NyeXB0by5jOjIwMzpcXHRyZXMgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgRVhUNF9YQVRUUl9JTkRFWF9FTkNSWVBUSU9OLFxcbmZzL2V4dDQvY3J5cHRvLmMtMjA0LVxcdFxcdFxcdFxcdCAgICBFWFQ0X1hBVFRSX05BTUVfRU5DUllQVElPTl9DT05URVhULFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTIzNzA9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF94YXR0cl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMzg4LS8qXFxuZnMvZXh0NC94YXR0ci5jOjIzODk6ICogZXh0NF94YXR0cl9zZXRfaGFuZGxlKClcXG5mcy9leHQ0L3hhdHRyLmMtMjM5MC0gKlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI0MDA9aW50XFxuZnMvZXh0NC94YXR0ci5jOjI0MDE6ZXh0NF94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LFxcbmZzL2V4dDQveGF0dHIuYy0yNDAyLVxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI1NTM9aW50IGV4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IHZhbHVlX2xlbixcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNTgyLSAqXFxuZnMvZXh0NC94YXR0ci5jOjI1ODM6ICogTGlrZSBleHQ0X3hhdHRyX3NldF9oYW5kbGUsIGJ1dCBzdGFydCBmcm9tIGFuIGlub2RlLiBUaGlzIGV4dGVuZGVkXFxuZnMvZXh0NC94YXR0ci5jLTI1ODQtICogYXR0cmlidXRlIG1vZGlmaWNhdGlvbiBpcyBhIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gYnkgaXRzZWxmLlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI1ODk9ZXh0NF94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5hbWVfaW5kZXgsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjYxMi1cXG5mcy9leHQ0L3hhdHRyLmM6MjYxMzpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNjE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCB2YWx1ZV9sZW4sIGZsYWdzKTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuaD0xODE9ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xcbmZzL2V4dDQveGF0dHIuaDoxODI6ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTtcXG5mcy9leHQ0L3hhdHRyLmgtMTgzLWV4dGVybiBpbnQgZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTM2PWV4dDRfaW5pdHhhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRyX2FycmF5LFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTQzLVxcdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXFx1MDAzZW5hbWUgIT0gTlVMTDsgeGF0dHIrKykge1xcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYzo0NDpcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSxcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmMtNDUtXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfWEFUVFJfSU5ERVhfU0VDVVJJVFksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjMwLjY5Njk4Njk5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg3MDczMjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBleHQ0X3hhdHRyX3NldGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBgZXh0NF94YXR0cl9zZXRgIGlzIHRoZSBiaWcga2FodW5hLCB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIGZvciBzZXR0aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb24gYW4gZXh0NCBmaWxlc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBpbnZva2VkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwsIGFuZCB3aGF0IGFyZSB0aGUgY29udGV4dHMgb2YgdGhvc2UgY2FsbHM/IEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0ICp3aHkqIGBleHQ0X3hhdHRyX3NldGAgaXMgYmVpbmcgY2FsbGVkIGFuZCB0aGUgdHlwaWNhbCBzY2VuYXJpb3MgaXQncyBkZXNpZ25lZCB0byBoYW5kbGUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZyBmb3IgdGhpbmdzIGxpa2UgZGVidWdnaW5nIGFuZCBvcHRpbWlzYXRpb24gbGF0ZXIgb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjM0LjM4NDA2NTA1N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0NDI0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9zZXRcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9MjU1Mz1pbnQgZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzaXplX3QgdmFsdWVfbGVuLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI1ODAtLypcXG5mcy9leHQ0L3hhdHRyLmM6MjU4MTogKiBleHQ0X3hhdHRyX3NldCgpXFxuZnMvZXh0NC94YXR0ci5jLTI1ODItICpcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yNTg4PWludFxcbmZzL2V4dDQveGF0dHIuYzoyNTg5OmV4dDRfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuYW1lX2luZGV4LCBjb25zdCBjaGFyICpuYW1lLFxcbmZzL2V4dDQveGF0dHIuYy0yNTkwLVxcdCAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbiwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5oPTE4MD1leHRlcm4gaW50IGV4dDRfeGF0dHJfZ2V0KHN0cnVjdCBpbm9kZSAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpO1xcbmZzL2V4dDQveGF0dHIuaDoxODE6ZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpO1xcbmZzL2V4dDQveGF0dHIuaC0xODItZXh0ZXJuIGludCBleHQ0X3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTtcXG4tLVxcbmZzL2V4dDQveGF0dHJfaHVyZC5jPTM0PWV4dDRfeGF0dHJfaHVyZF9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00Mi1cXG5mcy9leHQ0L3hhdHRyX2h1cmQuYzo0MzpcXHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfSFVSRCxcXG5mcy9leHQ0L3hhdHRyX2h1cmQuYy00NC1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jPTI1PWV4dDRfeGF0dHJfc2VjdXJpdHlfc2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0cl9zZWN1cml0eS5jLTMwLXtcXG5mcy9leHQ0L3hhdHRyX3NlY3VyaXR5LmM6MzE6XFx0cmV0dXJuIGV4dDRfeGF0dHJfc2V0KGlub2RlLCBFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxcbmZzL2V4dDQveGF0dHJfc2VjdXJpdHkuYy0zMi1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl90cnVzdGVkLmM9MzI9ZXh0NF94YXR0cl90cnVzdGVkX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcXG4tLVxcbmZzL2V4dDQveGF0dHJfdHJ1c3RlZC5jLTM3LXtcXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYzozODpcXHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfVFJVU1RFRCxcXG5mcy9leHQ0L3hhdHRyX3RydXN0ZWQuYy0zOS1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC94YXR0cl91c2VyLmM9MzM9ZXh0NF94YXR0cl91c2VyX3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcXG4tLVxcbmZzL2V4dDQveGF0dHJfdXNlci5jLTQwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5mcy9leHQ0L3hhdHRyX3VzZXIuYzo0MTpcXHRyZXR1cm4gZXh0NF94YXR0cl9zZXQoaW5vZGUsIEVYVDRfWEFUVFJfSU5ERVhfVVNFUixcXG5mcy9leHQ0L3hhdHRyX3VzZXIuYy00Mi1cXHRcXHRcXHQgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzoyNjozNC40MzY1MTMwMDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMyNDA4NTg5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciB0aGUgYGV4dDRgIEZpbGVzeXN0ZW0gWGF0dHIgSGFuZGxlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzIGluIGBleHQ0YC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGV4dDRfeGF0dHJfc2V0YCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmcm9tIHRoZSBWRlMgeGF0dHIgaGFuZGxlcnMsIHNvIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBleHQ0X3hhdHRyX3NldGAsIHRoZSB3aG9sZSBjYWxsIGNoYWluIHNlZW1zIHNpZ25pZmljYW50LlxuXG5UaGVyZWZvcmUsIEknbGwgZm9jdXMgZnV6emluZyBlZmZvcnRzIHByaW1hcmlseSBvbiBgZXh0NF94YXR0cl9zZXRgIOKAkyB0aGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgYXMgYSBmb2N1cyBzeW1ib2wgYXMgd2VsbC4gV2hpbGUgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBpcyBzdGF0aWMsIG1lYW5pbmcgaXQgY2FuJ3QgYmUgZGlyZWN0bHkgdGFyZ2V0ZWQgaWYgaW5saW5lZCwgaXQncyBhIGxhcmdlIGZ1bmN0aW9uIHNvIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCBpdCBpcyBub3QuIEhvd2V2ZXIsIGBleHQ0X3hhdHRyX3NldGAgYW5kIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFyZSBib3RoIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBzbyB0aG9zZSBhcmUgZGVmaW5pdGVseSB0aGUgd2F5IHRvIGdvLlxuXG5Ob3csIGxldCdzIGV4cGxvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBPYnZpb3VzbHksIGBDT05GSUdfRVhUNF9GU2AgaXMgZXNzZW50aWFsLCB0aGF0J3MgYSBnaXZlbi4gVG8gcG90ZW50aWFsbHkgdW5sb2NrIG1vcmUgeGF0dHItcmVsYXRlZCBjb2RlIHBhdGhzLCBJIHNob3VsZCBhbHNvIGVuYWJsZSBgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZYC4gQWRkaW5nIGFsbCBvZiB0aG9zZSB3aWxsIGJlIG5lY2Vzc2FyeS5cblxuSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIHBhdGNoIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJIHNlZSB0aGF0IGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gIGlzIGEgbmV3IHN0YXRpYyBmdW5jdGlvbi4gSSd2ZSBhbHJlYWR5IG5vdGVkIHRoZSBtb2RpZmljYXRpb24gb2YgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YC4gU28sIGBleHQ0X3hhdHRyX3NldGAgYW5kIGBleHQ0X3hhdHRyX3NldF9oYW5kbGVgIGFyZSB0aGUgbWFpbiBjYWxsZXJzLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucy4gYGV4dDRfeGF0dHJfc2V0YCBpcyBpbiBgZnMvZXh0NC94YXR0ci5jYCBhbmQgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgaW4gYGZzL2V4dDQveGF0dHIuaGAsIHNvIGRlZmluaXRlbHkgbm90IHN0YXRpYy4gVGhlIHNhbWUgZ29lcyBmb3IgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAgLSBhbHNvIGV4cG9ydGVkIGFuZCBub3Qgc3RhdGljLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSAqb3RoZXIqIGNhbGxlcnMgb2YgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YC4gSXQgbG9va3MgbGlrZSBgZXh0NF94YXR0cl9tb3ZlX3RvX2Jsb2NrYCBhbHNvIGNhbGxzIGl0LCBzbyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGV4dDRfeGF0dHJfbW92ZV90b19ibG9ja2AgaXMgY2FsbGVkIGZyb20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6NDEuNzYwNjAyMjczWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ1NjQzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTI2MzI9c3RhdGljIHZvaWQgZXh0NF94YXR0cl9zaGlmdF9lbnRyaWVzKHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yNjU2LSAqL1xcbmZzL2V4dDQveGF0dHIuYzoyNjU3OnN0YXRpYyBpbnQgZXh0NF94YXR0cl9tb3ZlX3RvX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTI2NTgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Mjc0Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3OTctXFx0XFx0XFx0XFx0XFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xcbmZzL2V4dDQveGF0dHIuYzoyNzk4OlxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9tb3ZlX3RvX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIHJhd19pbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjc5OS1cXHRcXHRcXHRcXHRcXHRcXHQgZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzoyNjo0MS44MTMwNjUyOTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyODk3MDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBYYXR0ciBTcGFjZSBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgZXh0NCBoYW5kbGVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSB3aGVuIHRoZXkgbmVlZCB0byBiZSBtb3ZlZCB0byBibG9jayBzcGFjZS4gSXQgbG9va3MgbGlrZSBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWF0ZXMgdGhpcyBwcm9jZXNzLCBjYWxsaW5nIGBleHQ0X3hhdHRyX21vdmVfdG9fYmxvY2tgLiBUaGF0J3MgdGhlIGtleSB0cmFuc2l0aW9uIHBvaW50LlxuXG5Ob3csIG15IGltbWVkaWF0ZSBuZXh0IHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyBgZXh0NF94YXR0cl9tYWtlX2lub2RlX3NwYWNlYCBiZWluZyBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp0cmlnZ2VycyogZm9yIHRoaXMgd2hvbGUgcHJvY2Vzcy4gSXMgaXQgd2hlbiBhbiB4YXR0cidzIGRhdGEgZ2V0cyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgaW5vZGUgaXRzZWxmPyBJcyBpdCB0cmlnZ2VyZWQgYnkgc29tZSBzcGVjaWZpYyBvcGVyYXRpb24sIGxpa2UgYSBzZXR4YXR0ciBjYWxsLCBvciBzb21ldGhpbmcgaW50ZXJuYWw/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgYGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZWAgaXMgY3J1Y2lhbCB0byBmdWxseSBncmFzcCB0aGUgeGF0dHIgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgZXZlbiBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBzdWNoIGFzIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHRoZSBtb3ZlbWVudCBvZiBkYXRhLiBUaGlzIGNhbGwgY2hhaW4gaXMgd2hhdCBJIG5lZWQgdG8gdHJhY2UgYW5kIHVuZGVyc3RhbmQgdG8gZ2FpbiBhIGJldHRlciBhcHByZWNpYXRpb24gb2Ygd2hhdCBleHQ0IGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDcyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6NDYuMDQyMDM5MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDI2NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9MjY1Nz1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbW92ZV90b19ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI3NDUtXFxuZnMvZXh0NC94YXR0ci5jOjI3NDY6c3RhdGljIGludCBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMjc0Ny1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0yODE1PWludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4ODUtXFxuZnMvZXh0NC94YXR0ci5jOjI4ODY6XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX21ha2VfaW5vZGVfc3BhY2UoaGFuZGxlLCBpbm9kZSwgcmF3X2lub2RlLFxcbmZzL2V4dDQveGF0dHIuYy0yODg3LVxcdFxcdFxcdFxcdFxcdCAgICBpc2l6ZV9kaWZmLCBpZnJlZSwgYmZyZWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjQ2LjA5NTA3ODU4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIwMzc1MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggYGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBpbnZva2VkPyBXaGF0J3MgdGhlIGNhbGwgZ3JhcGg/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBoYW5kbGluZywgYW5kIGV4cGFuc2lvbiBpbXBsaWVzIGEgc2l6ZSBjaGFuZ2UuIEkgbmVlZCB0byBrbm93ICp3aHkqIHRoZSBleHBhbnNpb24gaXMgaGFwcGVuaW5nIHRvIGZ1bGx5IGdyYXNwIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWAgYW5kIGlkZW50aWZ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBvciBtZXRob2RzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIElzIHRoaXMgcmVsYXRlZCB0byBmaWxlIGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIG9yIG1ldGFkYXRhIHVwZGF0ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgcGFyYW1vdW50IHRvIGF2b2lkIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHdoZW4gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlIEVBIHNpemluZy4gVGltZSB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGNhbGwgdHJhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6NTAuMDE1NDYxMjg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzI3NjYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NjQzOT1zdGF0aWMgaW50IF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02NDg1LVxcdC8qIHRyeSB0byBleHBhbmQgd2l0aCBFQXMgcHJlc2VudCAqL1xcbmZzL2V4dDQvaW5vZGUuYzo2NDg2OlxcdGVycm9yID0gZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoaW5vZGUsIG5ld19leHRyYV9pc2l6ZSxcXG5mcy9leHQ0L2lub2RlLmMtNjQ4Ny1cXHRcXHRcXHRcXHRcXHQgICByYXdfaW5vZGUsIGhhbmRsZSk7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Mjc0Nj1zdGF0aWMgaW50IGV4dDRfeGF0dHJfbWFrZV9pbm9kZV9zcGFjZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI4MTQtICovXFxuZnMvZXh0NC94YXR0ci5jOjI4MTU6aW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuZnMvZXh0NC94YXR0ci5jLTI4MTYtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmg9MTkyPWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xcbmZzL2V4dDQveGF0dHIuaC0xOTMtXFxuZnMvZXh0NC94YXR0ci5oOjE5NDpleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuZnMvZXh0NC94YXR0ci5oLTE5NS1cXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjUwLjA2ODc0NDkwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzAyNTMwMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBMb2dpYyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHNwZWNpZmljYWxseSwgaG93IGl0IGhhbmRsZXMgZXJyb3JzIHdoZW4gbWFuYWdpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyBpbiBleHQ0IGZpbGVzeXN0ZW1zLiBJdCBzZWVtcyBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGdldHMgY2FsbGVkIGZyb20gYF9fZXh0NF9leHBhbmRfZXh0cmFfaXNpemVgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSd2ZSBhbHNvIHZlcmlmaWVkIHRoYXQgdGhpcyBpcyByZWFjaGFibGUuIFRoZXJlZm9yZSwgYGV4dDRfeGF0dHJfc2V0YCwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFgIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGZvY3VzaW5nIG9uIGluIG15IGZ1enppbmcgZWZmb3J0cy4gSSBuZWVkIHRvIGtlZXAgdGhlc2UgZnVuY3Rpb25zIGF0IHRoZSBmb3JlZnJvbnQuXG5cbk5vdywgYmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHNldCB1cC4gYEVYVDRfRlNgIGlzIG9idmlvdXNseSBjcml0aWNhbC4gYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSBsaWtlbHkgYmVuZWZpY2lhbCwgdG9vLCB0byBjb3ZlciBhcyBtdWNoIGdyb3VuZCBhcyBwb3NzaWJsZSBkdXJpbmcgdGVzdGluZy5cblxuSGVyZSdzIGEgcXVpY2sgc3VtbWFyeSBvZiBteSBmaW5kaW5nczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUgLSBUaGlzIGlzIGRlZmluaXRlbHkgYSB2dWxuZXJhYmlsaXR5LXByb25lIGFyZWEuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGV4dDRfeGF0dHJfc2V0YCwgYGV4dDRfeGF0dHJfc2V0X2hhbmRsZWAsIGBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYWBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEVYVDRfRlNgLCBgRVhUNF9GU19QT1NJWF9BQ0xgLCBgRVhUNF9GU19TRUNVUklUWWBcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggdG91Y2hlcyBlcnJvciBoYW5kbGluZyBzcGVjaWZpY2FsbHkgd2l0aGluIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgd2hlbiBhbiBFQSBpbm9kZSByZWZlcmVuY2UgZHJvcCBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljLiBHaXZlbiB0aGF0IHhhdHRyIHN5c2NhbGxzIGFyZSB1c2VyLWFjY2Vzc2libGUgYW5kIGlub2RlIGV4cGFuc2lvbiB0cmlnZ2VycyB0aGlzIGxvZ2ljLCBpdCdzIGEgZ29vZCBwbGFjZSB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5JJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgZXh0NF94YXR0cl9zZXRgIGFuZCBgZXh0NF94YXR0cl9zZXRfaGFuZGxlYCBhcmVuJ3Qgc3RhdGljLiBZZXMsIHRoZXkgYXJlIGV4cG9ydGVkIGluIGBmcy9leHQ0L3hhdHRyLmhgLCBhcyBJIGV4cGVjdGVkLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCB0aGUgcmVzdWx0cyB3aXRoIHRoYXQgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzYxLCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzoyNjo1Ni4zNzEyODA5NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjYwOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJFWFQ0X0ZTX1BPU0lYX0FDTFwiLFxuICAgIFwiRVhUNF9GU19TRUNVUklUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfeGF0dHJfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX3NldF9oYW5kbGVcIixcbiAgICBcImV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gZXh0NF94YXR0cl9ibG9ja19zZXQgd2hlbiBkcm9wcGluZyBhIHJlZmVyZW5jZSB0byBhbiBFQSBpbm9kZSBmYWlscy4gVGhpcyBpcyBjb3JlIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB4YXR0ciBzeXNjYWxscyBhbmQgaW5vZGUgZXhwYW5zaW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkVYVDRfRlNfUE9TSVhfQUNMXCIsXG4gICAgXCJFWFQ0X0ZTX1NFQ1VSSVRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICAgIFwiZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiBleHQ0X3hhdHRyX2Jsb2NrX3NldCB3aGVuIGRyb3BwaW5nIGEgcmVmZXJlbmNlIHRvIGFuIEVBIGlub2RlIGZhaWxzLiBUaGlzIGlzIGNvcmUgZXh0NCBleHRlbmRlZCBhdHRyaWJ1dGUgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHhhdHRyIHN5c2NhbGxzIGFuZCBpbm9kZSBleHBhbnNpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjU2LjQ2NzU1MjM0N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwMzI4NjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjI2OjU2LjQ2ODI5NjQ4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3ODAyNTM2NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5kbyBsb2dpYyBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBzZXR0aW5nIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBwcm9wZXIgY2xlYW51cCAoZnJlZWluZyBxdW90YSwgZHJvcHBpbmcgaW5vZGUgcmVmZXJlbmNlcywgYW5kIHVuZG9pbmcgYmxvY2sgcmV1c2UpIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcywgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIGFuZCBxdW90YSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmE3ODNkM2ZiZGVlYzRjZmE4NjljZDk4ZjZiYjkwOWE0ZTJjODkwNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA3OjI2OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Li4wY2U5MzdkODkwMDQyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMzYyLDYgKzEzNjIsMTcgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm47XG4gfVxuIFxuKy8qIFVuZG8gdGhlIGxvY2FsbHktb3duZWQgcGFydCBvZiBhIGNhY2hlZC1ibG9jayByZXVzZS4gKi9cbitzdGF0aWMgdm9pZCBleHQ0X3hhdHRyX3JldXNlX3VuZG8oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbit7XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuK1xuK1x0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbitcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuK1x0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbit9XG4rXG4gLypcbiAgKiBGaW5kIHRoZSBhdmFpbGFibGUgZnJlZSBzcGFjZSBmb3IgRUFzLiBUaGlzIGFsc28gcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mXG4gICogYnl0ZXMgdXNlZCBieSBFQSBlbnRyaWVzLlxuQEAgLTIxMDcsNiArMjExOCwzOSBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdG1iX2NhY2hlX2VudHJ5X3RvdWNoKGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG4gXHRcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG4gXHRcdFx0Y2UgPSBOVUxMO1xuK1x0XHRcdGlmICghKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBzLVx1MDAzZWJhc2UgPT0gYnMtXHUwMDNlYmgtXHUwMDNlYl9kYXRhKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgZWFfaW5vZGUpIHtcbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBUaGUgcmV1c2VkIGJsb2NrIGFscmVhZHkgaG9sZHMgaXRzIG93blxuK1x0XHRcdFx0ICogcmVmZXJlbmNlOyBkcm9wIHRoZSBleHRyYSBvbmUgdW5sZXNzIHRoZVxuK1x0XHRcdFx0ICogZW50cnkgd2VudCBpbnRvIHRoZSBvbGQgYnVmZmVyIGRpcmVjdGx5LlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsXG4rXHRcdFx0XHRcdFx0XHRcdCBlYV9pbm9kZSk7XG4rXHRcdFx0XHRpZiAoZXJyb3IpIHtcbitcdFx0XHRcdFx0LypcbitcdFx0XHRcdFx0ICogVGhlIGRlY3JlbWVudCBtYXkgYWxyZWFkeSBoYXZlIHJ1bjtcbitcdFx0XHRcdFx0ICogZG8gbm90IHJldHJ5IGl0OiBmcmVlIHRoZSBjaGFyZ2UsXG4rXHRcdFx0XHRcdCAqIHVuZG8gdGhlIHJldXNlLCBhbmQgZmFpbCB0aGUgb3AuXG4rXHRcdFx0XHRcdCAqL1xuK1x0XHRcdFx0XHRleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBfX2Z1bmNfXyxcbitcdFx0XHRcdFx0XHRcdCBfX0xJTkVfXywgMCxcbitcdFx0XHRcdFx0XHRcdFwiZGVjIHJlZiBlcnJvcj0lZFwiLFxuK1x0XHRcdFx0XHRcdFx0IGVycm9yKTtcbitcdFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgZWFfaW5vZGUsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuK1x0XHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuK1x0XHRcdFx0XHRpZiAobmV3X2JoICE9IGJzLVx1MDAzZWJoKVxuK1x0XHRcdFx0XHRcdGV4dDRfeGF0dHJfcmV1c2VfdW5kbyhoYW5kbGUsXG4rXHRcdFx0XHRcdFx0XHRcdCAgICAgIGlub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgICBuZXdfYmgpO1xuK1x0XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbitcdFx0XHR9XG4gXHRcdH0gZWxzZSBpZiAoYnMtXHUwMDNlYmggXHUwMDI2XHUwMDI2IHMtXHUwMDNlYmFzZSA9PSBicy1cdTAwM2ViaC1cdTAwM2ViX2RhdGEpIHtcbiBcdFx0XHQvKiBXZSB3ZXJlIG1vZGlmeWluZyB0aGlzIGJsb2NrIGluLXBsYWNlLiAqL1xuIFx0XHRcdGVhX2JkZWJ1Zyhicy1cdTAwM2ViaCwgXCJrZWVwaW5nIHRoaXMgYmxvY2tcIik7XG5AQCAtMjE0MywxMyArMjE4NywyMSBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGlmIChlcnJvcilcbiBcdFx0XHRcdGdvdG8gZ2V0YmxrX2ZhaWxlZDtcbiBcdFx0XHRpZiAoZWFfaW5vZGUpIHtcbi1cdFx0XHRcdC8qIERyb3AgdGhlIGV4dHJhIHJlZiBvbiBlYV9pbm9kZS4gKi9cbitcdFx0XHRcdC8qXG4rXHRcdFx0XHQgKiBEcm9wIHRoZSBleHRyYSByZWYgb24gZWFfaW5vZGU7IG9uXG4rXHRcdFx0XHQgKiBmYWlsdXJlIHRoZSBkZWNyZW1lbnQgbWF5IGFscmVhZHkgaGF2ZVxuK1x0XHRcdFx0ICogcnVuLCBzbyBqdXN0IGZhaWwgYW5kIGZyZWUgdGhlIGJsb2NrLlxuK1x0XHRcdFx0ICovXG4gXHRcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsXG4gXHRcdFx0XHRcdFx0XHRcdCBlYV9pbm9kZSk7XG4tXHRcdFx0XHRpZiAoZXJyb3IpXG4tXHRcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0XHRcdCAgIFwiZGVjIHJlZiBlcnJvcj0lZFwiLFxuLVx0XHRcdFx0XHRcdFx0ICAgZXJyb3IpO1xuK1x0XHRcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgIGVhX2lub2RlLFxuK1x0XHRcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbitcdFx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbitcdFx0XHRcdFx0Z290byBnZXRibGtfZmFpbGVkO1xuK1x0XHRcdFx0fVxuIFx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4gXHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MjY6NTYuNDY4Mjk4MDg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDI0OTAxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRVhUNCBYYXR0ciBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgaW4gYGZzL2V4dDQveGF0dHIuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGVuc3VyaW5nIHByb3BlciBjbGVhbnVwLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIHJlZmVyZW5jZSBjb3VudGluZyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiBpcyBjZW50ZXJlZCBhcm91bmQgYWRkcmVzc2luZyBwb3RlbnRpYWwgcmVzb3VyY2UgbGVha3MgdGhhdCBtYXkgYXJpc2UgZHVyaW5nIHhhdHRyIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgYmxvY2sgcmV1c2UgYW5kIGFsbG9jYXRpb24gZmFpbHVyZXMuXG5cblRoZSBrZXkgYWRkaXRpb24gc2VlbXMgdG8gYmUgdGhlIGBleHQ0X3hhdHRyX3JldXNlX3VuZG9gIGZ1bmN0aW9uLiBJdCBwcm92aWRlcyBhIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciByb2xsaW5nIGJhY2sgb3BlcmF0aW9ucyB3aGVuIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZgIGZhaWxzLiBUaGlzIGZ1bmN0aW9uIGNhcmVmdWxseSByZWxlYXNlcyB0aGUgYmxvY2sgKGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgKSBhbmQgZnJlZXMgdGhlIGFzc29jaWF0ZWQgaW5vZGUgYXJyYXkgKGBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWVgKS4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgYW5kIG5lY2Vzc2FyeSBwYXR0ZXJuIGZvciB1bmRvaW5nIHBvdGVudGlhbGx5IGluY29tcGxldGUgeGF0dHIgdXBkYXRlcy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IHRoZSBzbmlwcGV0IHdpdGhpbiBgZXh0NF94YXR0cl9ibG9ja19zZXRgOlxuXG5gYGBjXG5cdFx0XHRpZiAoIShicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgcy1cdTAwM2ViYXNlID09IGJzLVx1MDAzZWJoLVx1MDAzZWJfZGF0YSkgXHUwMDI2XHUwMDI2XG5cdFx0XHQgICAgZWFfaW5vZGUpIHtcblx0XHRcdFx0Lypcblx0XHRcdFx0ICogVGhlIHJldXNlZCBibG9jayBhbHJlYWR5IGhvbGRzIGl0cyBvd25cblx0XHRcdFx0ICogcmVmZXJlbmNlOyBkcm9wIHRoZSBleHRyYSBvbmUgdW5sZXNzIHRoZVxuXHRcdFx0XHQgKiBlbnRyeSB3ZW50IGludG8gdGhlIG9sZCBidWZmZXIgZGlyZWN0bHkuXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsXG5cdFx0XHRcdFx0XHRcdFx0IGVhX2lub2RlKTtcblx0XHRcdFx0aWYgKGVycm9yKSB7XG4uLi5cbmBgYFxuXG5UaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgaW1wcmVzc2lvbi4gSXQncyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNwZWNpZmljIGVycm9yIHNjZW5hcmlvIHdpdGhpbiB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHByb2Nlc3MuIFRoZXJlJ3Mgbm8gaGludCBvZiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaW5mb3JtYXRpb24gbGVha3MsIG9yIGFueSBvdGhlciB0eXBlIG9mIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9uLiBJdCBmb2N1c2VzIG9uIHRoZSBjcnVjaWFsIGFzcGVjdCBvZiBkZWNyZW1lbnRpbmcgcmVmZXJlbmNlIGNvdW50cyAoIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZgKSwgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCBlbmQgdXAgd2l0aCBkYW5nbGluZyBwb2ludGVycyBvciByZXNvdXJjZSBleGhhdXN0aW9uLlxuXG5HaXZlbiB0aGlzIGFuYWx5c2lzLCBhbmQgY29uc2lkZXJpbmcgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgdG9vbGluZywgS0FTQU4vTE9DS0RFUC9LTUVNTEVBSyBhcmUgYmV0dGVyIHN1aXRlZCBmb3Igb3RoZXIgdHlwZXMgb2YgbWVtb3J5IGlzc3Vlcy4gS01TQU4gZG9lc24ndCBzZWVtIHJlbGV2YW50IGhlcmUuIFRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBzZXQgdG8gYGZhbHNlYC4gVGhpcyBwYXRjaCBpcyBhYm91dCBjb3JyZWN0bmVzcyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCwgbm90IGRldGVjdGluZyB1bmluaXRpYWxpemVkIHJlYWRzLiBJdCBhZGRyZXNzZXMgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgb3IgcXVvdGEgbGVha3MsIGJ1dCBub3QgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgcGVyIHNlLiBJdCdzIGEgc29saWQsIHRhcmdldGVkIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNiwiT3V0cHV0VG9rZW5zIjoxNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzoyNzowNC4yNzA4MDgyNzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB1bmRvIGxvZ2ljIGluIGV4dDQgZXh0ZW5kZWQgYXR0cmlidXRlIGJsb2NrIHNldHRpbmcgKGBleHQ0X3hhdHRyX2Jsb2NrX3NldGApLiBJdCBhZGRzIHByb3BlciBjbGVhbnVwIChmcmVlaW5nIHF1b3RhLCBkcm9wcGluZyBpbm9kZSByZWZlcmVuY2VzLCBhbmQgdW5kb2luZyBibG9jayByZXVzZSkgd2hlbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmYCBmYWlscy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgYW5kIHF1b3RhIGlzc3Vlcywgd2hpY2ggYXJlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBhbmQgdW5kbyBsb2dpYyBpbiBleHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayBzZXR0aW5nIChgZXh0NF94YXR0cl9ibG9ja19zZXRgKS4gSXQgYWRkcyBwcm9wZXIgY2xlYW51cCAoZnJlZWluZyBxdW90YSwgZHJvcHBpbmcgaW5vZGUgcmVmZXJlbmNlcywgYW5kIHVuZG9pbmcgYmxvY2sgcmV1c2UpIHdoZW4gYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZmAgZmFpbHMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcywgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIGFuZCBxdW90YSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowc5bf6[1] Phase: Succeeded StartedAt: 2026-08-14 07:27:14 +0000 UTC FinishedAt: 2026-08-14 07:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 07:27:14 +0000 UTC FinishedAt: 2026-08-14 07:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2] Phase: Succeeded StartedAt: 2026-08-14 07:27:14 +0000 UTC FinishedAt: 2026-08-14 11:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 07:27:14 +0000 UTC FinishedAt: 2026-08-14 11:07:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 07:27:14 +0000 UTC FinishedAt: 2026-08-14 07:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 07:27:14 +0000 UTC FinishedAt: 2026-08-14 07:27:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowc5bf6/series-workflowc5bf6-convert-artifact-1866130503/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 07:27:25 +0000 UTC FinishedAt: 2026-08-14 07:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 07:27:25 +0000 UTC FinishedAt: 2026-08-14 07:43:35 +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:*6f995759-bf41-483b-bb6c-1aeca6f07325,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-workflowc5bf6/series-workflowc5bf6-convert-artifact-1866130503/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": "935e8d88-6f0b-4c66-91bd-319fc94a684b", "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-workflowc5bf6/series-workflowc5bf6-build-action-1055255773/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 07:27:25 +0000 UTC FinishedAt: 2026-08-14 07:43:25 +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:*6f995759-bf41-483b-bb6c-1aeca6f07325,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-workflowc5bf6/series-workflowc5bf6-convert-artifact-1866130503/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": "935e8d88-6f0b-4c66-91bd-319fc94a684b", "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-workflowc5bf6/series-workflowc5bf6-build-action-1055255773/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 07:43:35 +0000 UTC FinishedAt: 2026-08-14 07:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 07:43:35 +0000 UTC FinishedAt: 2026-08-14 07:43:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 07:43:35 +0000 UTC FinishedAt: 2026-08-14 07:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 07:43:35 +0000 UTC FinishedAt: 2026-08-14 07:43:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowc5bf6/series-workflowc5bf6-convert-artifact-1218961014/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 07:43:46 +0000 UTC FinishedAt: 2026-08-14 07:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 07:43:46 +0000 UTC FinishedAt: 2026-08-14 07:45:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*935e8d88-6f0b-4c66-91bd-319fc94a684b,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-workflowc5bf6/series-workflowc5bf6-build-action-1055255773/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-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 07:45:42 +0000 UTC FinishedAt: 2026-08-14 07:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 07:45:42 +0000 UTC FinishedAt: 2026-08-14 07:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 07:45:42 +0000 UTC FinishedAt: 2026-08-14 08:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 07:45:42 +0000 UTC FinishedAt: 2026-08-14 08:02:08 +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:*6f995759-bf41-483b-bb6c-1aeca6f07325,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-workflowc5bf6/series-workflowc5bf6-convert-artifact-1218961014/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": "e8b53e2f-6bab-404d-bc14-bad44200390e", "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-workflowc5bf6/series-workflowc5bf6-build-action-2704868730/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 07:45:42 +0000 UTC FinishedAt: 2026-08-14 08:01:58 +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:*6f995759-bf41-483b-bb6c-1aeca6f07325,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-workflowc5bf6/series-workflowc5bf6-convert-artifact-1218961014/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": "e8b53e2f-6bab-404d-bc14-bad44200390e", "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-workflowc5bf6/series-workflowc5bf6-build-action-2704868730/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 08:02:08 +0000 UTC FinishedAt: 2026-08-14 08:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 08:02:08 +0000 UTC FinishedAt: 2026-08-14 08:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 08:02:08 +0000 UTC FinishedAt: 2026-08-14 08:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 08:02:08 +0000 UTC FinishedAt: 2026-08-14 08:03:56 +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:*e8b53e2f-6bab-404d-bc14-bad44200390e,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-workflowc5bf6/series-workflowc5bf6-build-action-2704868730/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-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 08:04:06 +0000 UTC FinishedAt: 2026-08-14 11:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 08:04:06 +0000 UTC FinishedAt: 2026-08-14 11:07:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"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:*935e8d88-6f0b-4c66-91bd-319fc94a684b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8b53e2f-6bab-404d-bc14-bad44200390e,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-workflowc5bf6/series-workflowc5bf6-build-action-1055255773/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-workflowc5bf6/series-workflowc5bf6-build-action-2704868730/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 08:04:06 +0000 UTC FinishedAt: 2026-08-14 08:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 08:04:06 +0000 UTC FinishedAt: 2026-08-14 08:04:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"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-workflowc5bf6/series-workflowc5bf6-convert-artifact-1248926363/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 08:04:06 +0000 UTC FinishedAt: 2026-08-14 08:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 08:04:06 +0000 UTC FinishedAt: 2026-08-14 08:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 08:04:06 +0000 UTC FinishedAt: 2026-08-14 08:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 08:04:16 +0000 UTC FinishedAt: 2026-08-14 11:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc5bf6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_set","ext4_xattr_set_handle","ext4_expand_extra_isize_ea"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"562d0031f6090df27be9fe1d48d50c892895fa16","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","EXT4_FS_POSIX_ACL","EXT4_FS_SECURITY"],"series_id":"6630ac52-7e73-4546-8ca4-1fb6b2a162d5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 08:04:16 +0000 UTC FinishedAt: 2026-08-14 11:07:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*935e8d88-6f0b-4c66-91bd-319fc94a684b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8b53e2f-6bab-404d-bc14-bad44200390e,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-workflowc5bf6/series-workflowc5bf6-build-action-1055255773/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-workflowc5bf6/series-workflowc5bf6-build-action-2704868730/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-workflowc5bf6/series-workflowc5bf6-convert-artifact-1248926363/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,}