Name: series-workflowxg7gk Phase: Succeeded StartedAt: 2026-09-05 18:38:34 +0000 UTC FinishedAt: 2026-09-05 22:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[0] Phase: Succeeded StartedAt: 2026-09-05 18:38:34 +0000 UTC FinishedAt: 2026-09-05 18:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 18:38:34 +0000 UTC FinishedAt: 2026-09-05 18:57:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NETFILTER" ], "series_id": "ef6c5675-abde-4263-9666-df1ca495eb8b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_payload_set_init", "nft_payload_set_eval", "nft_payload_csum_th_write_ok", "nft_payload_validate_inet_csum_offset", "nft_payload_csum_write_ok" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuaGFuY2VzIHZhbGlkYXRpb24gb2YgdGhlIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0IChgY3N1bV9vZmZzZXRgKSBpbiBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCBkdXJpbmcgYm90aCBleHByZXNzaW9uIGluaXRpYWxpemF0aW9uIChgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGApIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiAoYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgKS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90OlxuMS4gSW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGluZm8tbGVhayB2ZWN0b3JzLlxuMi4gUmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRlIG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkuXG5cblRoZSBwYXRjaCBzdHJpY3RseSByZXN0cmljdHMgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiBvZmZzZXRzIHRvIHdlbGwtZGVmaW5lZCBMNCBwcm90b2NvbCBjaGVja3N1bSBmaWVsZHMgKFRDUCwgVURQLCBJQ01QLCBJQ01QdjYpLCBwcmV2ZW50aW5nIGluY29ycmVjdCBwYWNrZXQgbWFuZ2xpbmcgLyBvdXQtb2YtYm91bmRzIHBheWxvYWQgd3JpdGVzIG9uIHNrX2J1ZmZzICh3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi9zdGFuZGFyZCBkZXRlY3RvcnMpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgbWFuZ2xpbmcgaW4gbmZfdGFibGVzIChuZnRfcGF5bG9hZCkuIFRoaXMgYWZmZWN0cyBib3RoIHJ1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB2YWxpZGF0aW9uIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiB0aW1lIHZlcmlmaWNhdGlvbi4gVGhlIGNvZGUgaXMgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIHN1YnN5c3RlbSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIG5ldGxpbmsgc29ja2V0cyBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODU5NmY3YmIwNWZmYWRlNDg1MGZhNTU4NGU3ZWE4MTY4NmZiMTUxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTY6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCBlMzE1ZDM1ZjczZDRhLi5mNzMyZTJkNjFmOGM1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3JlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG5AQCAtMTAwOCwxMSAmIzQzOzEwMDksMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCYjMzQ7cmUtdXBkYXRlXCYjMzQ7IG9mIEw0IGNoZWNrc3VtICovXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHQvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4mIzM5O3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcbi1cdFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cbi1cdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuJiM0MztcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbkBAIC0xMDQ2LDYgJiM0MzsxMDQ5LDI3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbiYjNDM7e1xuJiM0MztcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX1RDUDpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fVURQOlxuJiM0MztcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xuJiM0MztcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fSUNNUDpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4ge1xuQEAgLTEwNTUsOSAmIzQzOzEwNzksMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4gXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4mIzQzO1x0XHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxuJiM0MztcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIG1hbmdsaW5nIGluIG5mX3RhYmxlcyAobmZ0X3BheWxvYWQpLiBUaGlzIGFmZmVjdHMgYm90aCBydWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdmFsaWRhdGlvbiB2aWEgbmV0bGluayBhbmQgcGFja2V0IGV2YWx1YXRpb24gdGltZSB2ZXJpZmljYXRpb24uIFRoZSBjb2RlIGlzIGluIHRoZSBjb3JlIG5ldGZpbHRlciBzdWJzeXN0ZW0gYW5kIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1OTZmN2JiMDVmZmFkZTQ4NTBmYTU1ODRlN2VhODE2ODZmYjE1MTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE4OjU2OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IGUzMTVkMzVmNzNkNGEuLmY3MzJlMmQ2MWY4YzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWNtcHY2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CkBAIC0xMDA4LDExICYjNDM7MTAwOSwxMyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCWlmIChwcml2LSZndDtjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgJiMzNDtyZS11cGRhdGUmIzM0OyBvZiBMNCBjaGVja3N1bSAqLwogCQkJcmV0dXJuIGZhbHNlOwogCi0JCS8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbiYjMzk7dCBiZSBuZWdhdGl2ZSBzbyBib2d1cwotCQkgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLgotCQkgKiBXZSBhbHJlYWR5IGFsbG93IGFyYml0cmFyeSBsNC9pbm5lciBwYXlsb2FkIHdyaXRlcy4KLQkJICovCi0JCXJldHVybiB0cnVlOwomIzQzOwkJLyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi8KJiM0MzsJCWlmIChwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAljYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjoKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgpAQCAtMTA0Niw2ICYjNDM7MTA0OSwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCQkJIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQomIzQzO3sKJiM0MzsJaWYgKCEocGt0LSZndDtmbGFncyAmYW1wOyBORlRfUEtUSU5GT19MNFBST1RPKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc3dpdGNoIChwa3QtJmd0O3Rwcm90KSB7CiYjNDM7CWNhc2UgSVBQUk9UT19UQ1A6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fVURQOgomIzQzOwljYXNlIElQUFJPVE9fVURQTElURToKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CiYjNDM7CWNhc2UgSVBQUk9UT19JQ01QVjY6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7CiYjNDM7CWNhc2UgSVBQUk9UT19JQ01QOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdikKIHsKQEAgLTEwNTUsOSAmIzQzOzEwNzksMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAljYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOgogCQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjoKJiM0MzsJCXJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6Ci0JCS8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZQotCQkgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuCiYjNDM7CQkvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZQomIzQzOwkJICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgogCQkgKi8KIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBheWxvYWQgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBhbHdheXMgb24gdW5kZXJzdGFuZGluZyAqd2hhdCogY29kZSBpcyBiZWluZyBtb2RpZmllZCBhbmQgd2h5LiBUaGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTmV0ZmlsdGVyIGFuZCBzcGVjaWZpY2FsbHksIHBheWxvYWQgaW5zcGVjdGlvbi9tYW5pcHVsYXRpb24uIFRoZSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXJlIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgd2hpY2ggaGFzIGxpa2VseSBiZWVuIGFsdGVyZWQsIGFuZCB0aGVzZSBuZXcgYWRkaXRpb25zOiBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIEJhc2VkIG9uIHRoZSBuYW1lcyBhbG9uZSwgSSYjMzk7ZCB3YWdlciB0aGVzZSBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIGNoZWNrc3VtIGNhbGN1bGF0aW9ucywgYW5kIHByb2JhYmx5IGRlYWwgd2l0aCB0aGUgdmFsaWRhdGlvbiBvZiB3cml0ZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggVENQIGFuZCBVRFAgY2hlY2tzdW0gb2Zmc2V0cy4KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmZ0X3BheWxvYWQuY2AgdG8gc2VlIGhvdyB0aGVzZSBuZXcgZnVuY3Rpb25zIGludGVncmF0ZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUgb2xkIGZ1bmN0aW9uIGhhcyBiZWVuIGFsdGVyZWQuIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgZmlsZSBkaXJlY3RseS4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHJldmlldyBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBkaWN0YXRlIHRoaXMgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoZSBwb3J0YWJpbGl0eSBhbmQgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGF0Y2ggYWNyb3NzIGRpZmZlcmVudCBrZXJuZWwgYnVpbGRzIGFuZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwMDpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjEwMDE6XHRcdFx0aWYgKGN0eC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSB7XG4xMDAyOlx0XHRcdFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQpXG4xMDAzOlx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMDQ6XHRcbjEwMDU6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDA2Olx0XHRcdH1cbjEwMDc6XHRcdFx0cmV0dXJuIHRydWU7IC8qIHJ1biB0aW1lIHZhbGlkYXRpb24gcmVxdWlyZWQgKi9cbjEwMDg6XHRcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbjEwMDk6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuMTAxMDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjEwMTE6XHRcbjEwMTI6XHRcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbjEwMTM6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4xMDE0Olx0XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuMTAxNTpcdFx0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbjEwMTY6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMTc6XHRcbjEwMTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAxOTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4xMDIwOlx0XHRcdHJldHVybiB0cnVlO1xuMTAyMTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuMTAyMjpcdFx0XHRicmVhaztcbjEwMjM6XHRcdH1cbjEwMjQ6XHRcbjEwMjU6XHRcdHJldHVybiBmYWxzZTtcbjEwMjY6XHR9XG4xMDI3Olx0XG4xMDI4Olx0LyogZG8gbm90IGFsbG93IGFyYml0cmFyeSBuZXR3b3JrIGhlYWRlciBtYW5nbGluZyB2aWEgYm9ndXMgY3N1bV9vZmYuXG4xMDI5Olx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcbjEwMzA6XHQgKiBwbGFuZS5cbjEwMzE6XHQgKi9cbjEwMzI6XHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4xMDMzOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjEwMzQ6XHR7XG4xMDM1Olx0XHRzd2l0Y2ggKHBrdC1cdTAwM2VzdGF0ZS1cdTAwM2VwZikge1xuMTAzNjpcdFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4xMDM3Olx0XHRcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbiYjMzk7dCByZXR1cm4gdHJ1ZSBoZXJlLiAqL1xuMTAzODpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwMzk6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTA0MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDQxOlx0XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuMTA0MjpcdFx0XHRyZXR1cm4gcGt0LVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4xMDQzOlx0XHRcdCAgICAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xuMTA0NDpcdFx0Y2FzZSBORlBST1RPX05FVERFVjpcbjEwNDU6XHRcdFx0cmV0dXJuIHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuMTA0NjpcdFx0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDc6XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdHJldHVybiBmYWxzZTtcbjEwNTA6XHR9XG4xMDUxOlx0XG4xMDUyOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuMTA1MzpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4xMDU0Olx0e1xuMTA1NTpcdFx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcbjEwNTY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA1NzpcdFxuMTA1ODpcdFx0c3dpdGNoIChwa3QtXHUwMDNldHByb3QpIHtcbjEwNTk6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4xMDYwOlx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbjEwNjE6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMDYyOlx0XHRjYXNlIElQUFJPVE9fVURQTElURTpcbjEwNjM6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xuMTA2NDpcdFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcbjEwNjU6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4xMDY2Olx0XHRjYXNlIElQUFJPVE9fSUNNUDpcbjEwNjc6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcbjEwNjg6XHRcdH1cbjEwNjk6XHRcbjEwNzA6XHRcdHJldHVybiBmYWxzZTtcbjEwNzE6XHR9XG4xMDcyOlx0XG4xMDczOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbjEwNzQ6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDc1Olx0e1xuMTA3NjpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbjEwNzc6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuMTA3ODpcdFx0XHRicmVhaztcbjEwNzk6XHRcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4xMDgwOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgxOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMDgyOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgzOlx0XHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbjEwODQ6XHRcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbjEwODU6XHRcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuMTA4NjpcdFx0XHQgKi9cbjEwODc6XHRcdFx0cmV0dXJuIHRydWU7XG4xMDg4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4xMDg5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTAKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgQ2FsbCBTaXRlczogYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AqKgoKUmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIFRvIHRydWx5IGdyYXNwIHRoZWlyIHNpZ25pZmljYW5jZSwgSSBuZWVkIHRvIHRyYWNlIHRoZWlyIHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGNvZGViYXNlLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBsb2dpYyB0aGV5IGFyZSBpbnRlbmRlZCB0byBzdXBwb3J0LiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBhc3NvY2lhdGVkIGNvZGUgbW9yZSBkZWVwbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldHxuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUtXHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUyPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDczOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3NC1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExMDY9c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcxLVx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzI6XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3My1cdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTk4PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1Ni1cdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNTc6XHRcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBuZnRfcGF5bG9hZC5jYCBpbiB0aGUgQnVpbGQgU3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZnRfcGF5bG9hZC5jYCBpcyBiZWluZyBoYW5kbGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgTWFrZWZpbGVgLCBhcyBpdCYjMzk7cyB0aGUgbW9yZSBkaXJlY3QgcmVwcmVzZW50YXRpb24gb2YgaG93IHRoZSBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byB0aGF0IHNwZWNpZmljIGZpbGUgbmFtZSwgb3IgcG90ZW50aWFsbHkgZm9yIHBhdHRlcm5zIHJlbGF0ZWQgdG8gbmV0d29yayBmaWx0ZXJpbmcgb3IgTmV0ZmlsdGVyLCBpZiB0aGUgbmFtZSBpdHNlbGYgaXNuJiMzOTt0IG9idmlvdXMuIElmIEkgZG9uJiMzOTt0IGZpbmQgYW55dGhpbmcgZGVmaW5pdGl2ZSB0aGVyZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgcGF5bG9hZCBpbnNwZWN0aW9uLCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluY2x1ZGUgb3IgZXhjbHVkZSB0aGUgYG5mdF9wYXlsb2FkLmNgIHNvdXJjZSBmaWxlIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGlzIG1vZHVsZSBpcyBhY3R1YWxseSBidWlsdCBhbmQgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGltYWdlLiBUaGlzIHNob3VsZCBnZXQgbWUgb24gdGhlIHJpZ2h0IHRyYWNrIHByZXR0eSBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXHRcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4OTpcdFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MC1cdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0xMzU9c3RhdGljIGlubGluZSB2b2lkIG5mdF90cmFjZV92ZXJkaWN0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MTQ0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2Zhc3RfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQ1LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0Ny17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MTQ4Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDktXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0LVx1MDAzZXNrYjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxNy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyMTg6XHRYKGUsIG5mdF9wYXlsb2FkX2V2YWwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxOS1cdFgoZSwgbmZ0X2NtcF9ldmFsKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjUwPW5mdF9kb19jaGFpbihzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgdm9pZCAqcHJpdilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjgyLVx0XHRcdFx0bmZ0X2JpdHdpc2VfZmFzdF9ldmFsKGV4cHIsIFx1MDAyNnJlZ3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjI4MzpcdFx0XHRlbHNlIGlmIChleHByLVx1MDAzZW9wcyAhPSBcdTAwMjZuZnRfcGF5bG9hZF9mYXN0X29wcyB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjI4NDpcdFx0XHRcdCAhbmZ0X3BheWxvYWRfZmFzdF9ldmFsKGV4cHIsIFx1MDAyNnJlZ3MsIHBrdCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjg1LVx0XHRcdFx0ZXhwcl9jYWxsX29wc19ldmFsKGV4cHIsIFx1MDAyNnJlZ3MsIHBrdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTM1Mj1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgKm5mdF9iYXNpY190eXBlc1tdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0zNTctXHRcdTAwMjZuZnRfYnl0ZW9yZGVyX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MzU4Olx0XHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0zNTktXHRcdTAwMjZuZnRfZHluc2V0X3R5cGUsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9MTE0PXVuaW9uIG5mdF9jbXBfb2ZmbG9hZF9kYXRhIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMTktXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYzoxMjA6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfbjJoKHVuaW9uIG5mdF9jbXBfb2ZmbG9hZF9kYXRhICpkYXRhLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTIxLVx0XHRcdCAgICBjb25zdCB1OCAqdmFsLCB1MzIgbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTEzOT1zdGF0aWMgaW50IF9fbmZ0X2NtcF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xNTItXHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfT0ZGTE9BRF9GX05FVFdPUksySE9TVCkge1xubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTUzOlx0XHRuZnRfcGF5bG9hZF9uMmgoXHUwMDI2X2RhdGEsICh1OCAqKVx1MDAyNnByaXYtXHUwMDNlZGF0YSwgcmVnLVx1MDAzZWxlbik7XG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYzoxNTQ6XHRcdG5mdF9wYXlsb2FkX24yaChcdTAwMjZfZGF0YW1hc2ssICh1OCAqKVx1MDAyNnJlZy1cdTAwM2VtYXNrLCByZWctXHUwMDNlbGVuKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE1NS1cdFx0ZGF0YSA9ICh1OCAqKVx1MDAyNl9kYXRhO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM9MzY9c3RydWN0IF9fbmZ0X2V4cHIge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzgtXHR1bmlvbiB7XG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjM5Olx0XHRzdHJ1Y3QgbmZ0X3BheWxvYWRcdHBheWxvYWQ7XG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTQwLVx0XHRzdHJ1Y3QgbmZ0X21ldGFcdFx0bWV0YTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTI5MD1zdGF0aWMgdm9pZCBuZnRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTI5NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6Mjk2Olx0aWYgKG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0yOTctXHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzA0LVx0Y2FzZSBORlRfSU5ORVJfRVhQUl9QQVlMT0FEOlxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYzozMDU6XHRcdG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKHN0cnVjdCBuZnRfZXhwciAqKVx1MDAyNnByaXYtXHUwMDNlZXhwciwgcmVncywgcGt0LCBcdTAwMjZ0dW5fY3R4KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzA2LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfcmVidWlsZF92bGFuX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbWFjX29mZixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMC1cdFx0XHRcdFx0IHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NDM9c3RhdGljIGJvb2xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDpuZnRfcGF5bG9hZF9jb3B5X3ZsYW4odTMyICpkLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4pXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9yZWJ1aWxkX3ZsYW5faGRyKHNrYiwgbWFjX29mZiwgXHUwMDI2dmV0aCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NTpzdGF0aWMgaW50IF9fbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0MDppbnQgbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0MS17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTQyLVx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19JTk5FUikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQzOlx0ICAgIF9fbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KChzdHJ1Y3QgbmZ0X3BrdGluZm8gKilwa3QpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0NC1cdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQ5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QodTMyIG9mZnNldCwgdTMyIGxlbilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTYwOnZvaWQgbmZ0X3BheWxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTYxLVx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE2My17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTY0Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjUtXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0LVx1MDAzZXNrYjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTc3LVx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzg6XHRcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXHUwMDNlb2Zmc2V0LCBwcml2LVx1MDAzZWxlbikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzk6XHRcdFx0aWYgKCFuZnRfcGF5bG9hZF9jb3B5X3ZsYW4oZGVzdCwgc2tiLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE4MC1cdFx0XHRcdFx0XHQgICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4pKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xOTQtXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxOTU6XHRcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE5Ni1cdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjExLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3BheWxvYWRfcG9saWN5W05GVEFfUEFZTE9BRF9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjEzLVx0W05GVEFfUEFZTE9BRF9TUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIyMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjQtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjI2LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMjc6XHRzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyOC1cdHUzMiBvZmZzZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNDQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ1LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ2LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNDc6XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI2MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MS1cdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzctXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc4OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc5LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODA6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODUtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODY6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIEVUSF9BTEVOKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODctXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjkzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk5LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDA6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDEtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDctXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA4Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA5LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE1LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMxNjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNy1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyMy1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSAmIzQzOyBzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjUtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzItXHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMzM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ4LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDk6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTQtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgc2FkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM1NTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTYtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNjMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM2NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNjUtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM3MzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg5Olx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzkwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTYtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwNDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDUtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxNC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mjc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjgtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyOTpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzMC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNC1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNTpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM3LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mzg6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM5LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDgtXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDk6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ1NTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1Ni1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc0LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ3NTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzYtXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Nzc6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDgyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4NC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDkwOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkxLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwNC1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTA1Olx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTA2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEwLVx0Y2FzZSBJUFBST1RPX1RDUDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTE6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTMtXHRjYXNlIElQUFJPVE9fVURQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxNDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTUtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjItXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTIzOnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTI0LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTI2LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mjc6XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyOC1cdGludCBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMS1cdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMjpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM0LVx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzU6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNy1cdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mzg6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzktXHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NDg6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ5Olx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTA6XHQuZXZhbFx0XHQ9IG5mdF9wYXlsb2FkX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUxOlx0LmluaXRcdFx0PSBuZnRfcGF5bG9hZF9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MjpcdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTM6XHQub2ZmbG9hZFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1NC19O1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTY6Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTc6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU4Olx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTk6XHQuZXZhbFx0XHQ9IG5mdF9wYXlsb2FkX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYwOlx0LmluaXRcdFx0PSBuZnRfcGF5bG9hZF9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjI6XHQub2ZmbG9hZFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2My19O1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2NC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjU6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2OC17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY5Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NzAtXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0LVx1MDAzZXNrYjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjYxNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2lubmVyX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTctXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE5LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2MjA6XHRzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYyMS1cdHUzMiBiYXNlLCBvZmZzZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY1MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfaW5uZXJfb3BzID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1MjpcdC50eXBlXHRcdD0gXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTM6XHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZCkpLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NDpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5uZXJfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTU6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU2Olx0LyogZGlyZWN0IGNhbGwgdG8gbmZ0X3BheWxvYWRfaW5uZXJfZXZhbCgpLiAqL1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY1Ny19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz02NTk9c3RhdGljIGlubGluZSB2b2lkIG5mdF9jc3VtX3JlcGxhY2UoX19zdW0xNiAqc3VtLCBfX3dzdW0gZnN1bSwgX193c3VtIHRzdW0pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY2NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NjY6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdWRwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02Njcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NzYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Njc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfbDRjc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NzgtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY4OC1cdGNhc2UgSVBQUk9UT19VRFA6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Njg5Olx0XHRpZiAoIW5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShza2IsIG5mdF90aG9mZihwa3QpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02OTAtXHRcdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MDUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzA2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzA3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcxOTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzIwLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MjgtXHQgKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3Mjk6XHRpZiAobmZ0X3BheWxvYWRfbDRjc3VtX29mZnNldChwa3QsIHNrYiwgXHUwMDI2bDRjc3VtX29mZnNldCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzMwLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzU1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc1NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2NzdW1faW5ldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgKnNyYyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NTctXHRcdFx0XHQgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtLCBpbnQgY3N1bV9vZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc3MS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzI6c3RydWN0IG5mdF9wYXlsb2FkX3NldCB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzczOlx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlc1x0YmFzZTo4O1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc3NC1cdHUxNlx0XHRcdG9mZnNldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzgyLS8qIFRoaXMgaXMgbm90IHN0cnVjdCB2bGFuX2hkci4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODM6c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODQtXHRfX2JlMTZcdFx0XHRoX3ZsYW5fcHJvdG87XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTc4OD1zdGF0aWMgYm9vbFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc4OTpuZnRfcGF5bG9hZF9zZXRfdmxhbihjb25zdCB1MzIgKnNyYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG9mZnNldCwgdTggbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5MC1cdFx0ICAgICBpbnQgKnZsYW5faGxlbilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTEte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc5MjpcdHN0cnVjdCBuZnRfcGF5bG9hZF92bGFuX2hkciAqdmxhbmg7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkzLVx0X19iZTE2IHZsYW5fcHJvdG87XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwNi1cdFx0fSBlbHNlIGlmIChsZW4gPT0gNCkge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjgwNzpcdFx0XHR2bGFuaCA9IChzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKilzcmM7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODA4LVx0XHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuaC1cdTAwM2VoX3ZsYW5fcHJvdG8sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTgzNz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjgzODpcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODM5LVx0XHRcdFx0Y29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTg4Mz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjg4NDpcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODg1LVx0XHRcdFx0Y29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5MDU6c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2FycChjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNi17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTkyND1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNTpcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTI2LVx0XHRcdFx0ICAgY29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk0NT1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk0NjpcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTQ3LVx0XHRcdFx0ICAgY29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk2Mz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTY0Olx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk2NS1cdFx0XHQgICAgY29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4Nj1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5NTpcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTk2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTAzMS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDMyOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDMzLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNTEtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA1MjpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA1My1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3OS1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA4MDpcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgxLVx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwODI6XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4My1cdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDk1PXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDk2Olx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwOTcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMDY6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDctXHRcdFx0XHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA5LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTEwOlx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExMS1cdGNvbnN0IHUzMiAqc3JjID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlc3JlZ107XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMjEtXHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMjI6XHRcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXHUwMDNlb2Zmc2V0LCBwcml2LVx1MDAzZWxlbikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTIzOlx0XHRcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEyNC1cdFx0XHRcdFx0XHQgIHByaXYtXHUwMDNlb2Zmc2V0LCBwcml2LVx1MDAzZWxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE0OC1cdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNDk6XHRcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNTAtXHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzEtXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MjpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTczOlx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3NC1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3Ni1cdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncyBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTc3Olx0XHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3OC1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4OC1cdFx0aWYgKHBrdC1cdTAwM2VmcmFnb2ZmID09IDAgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE4OTpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTkwLVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk3LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTg6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTktXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyMDItXHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyMDM6XHRzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjA0LVx0aW50IGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1Ni1cdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNTc6XHRcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3OTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4MC1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjgxLXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjgyOlx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4My1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5OC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX3NldF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpcdC50eXBlXHRcdD0gXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAxOlx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMjpcdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMzpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwNDpcdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwNS19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzICpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA4Om5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzA5LVx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMC17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMxMTpcdGVudW0gbmZ0X3BheWxvYWRfYmFzZXMgYmFzZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzEyLVx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzMzLVx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMzQ6XHRcdHJldHVybiBcdTAwMjZuZnRfcGF5bG9hZF9zZXRfb3BzO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMzUtXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNDktXHQgICAgYmFzZSAhPSBORlRfUEFZTE9BRF9MTF9IRUFERVIgXHUwMDI2XHUwMDI2IGJhc2UgIT0gTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTA6XHRcdHJldHVybiBcdTAwMjZuZnRfcGF5bG9hZF9mYXN0X29wcztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzUxLVx0ZWxzZVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTI6XHRcdHJldHVybiBcdTAwMjZuZnRfcGF5bG9hZF9vcHM7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1My19XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1NC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU1OnN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9wYXlsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU2LVx0Lm5hbWVcdFx0PSBcJiMzNDtwYXlsb2FkXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTc6XHQuc2VsZWN0X29wc1x0PSBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTg6XHQuaW5uZXJfb3BzXHQ9IFx1MDAyNm5mdF9wYXlsb2FkX2lubmVyX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU5Olx0LnBvbGljeVx0XHQ9IG5mdF9wYXlsb2FkX3BvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzYwLVx0Lm1heGF0dHJcdD0gTkZUQV9QQVlMT0FEX01BWCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBuZl90YWJsZXMgYW5kIG5mdF9wYXlsb2FkIGluIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBuZl90YWJsZXNgIGFuZCBzcGVjaWZpY2FsbHkgYG5mdF9wYXlsb2FkYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgZ3Jhc3AgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0byB3YXRjaCBvdXQgZm9yLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGBmaW5kYCBvbiB0aGUgS2NvbmZpZyB0cmVlLCBidXQgSSBhbnRpY2lwYXRlIGhhdmluZyB0byB0cmFjZSB0aHJvdWdoIGEgZmV3IGluY2x1ZGVzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBnb2FsIGlzIGEgcXVpY2sgYW5kIGRpcnR5IGNvbmZpZ3VyYXRpb24gb3ZlcnZpZXcgb2YgdGhlc2UgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzgtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM5Olx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MC1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDc0Olx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDc1Olx0c2VsZWN0IE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc2LVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01NTA9Y29uZmlnIE5GVF9OQVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUyLVx0c2VsZWN0IE5GX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU1MzpcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lQVjQgfHwgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NTQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5hdCBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NTg2PWNvbmZpZyBORlRfUkVKRUNUX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1ODc6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTg4LVx0ZGVmYXVsdCBORlRfUkVKRUNUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTYwOD1jb25maWcgTkZUX0ZJQl9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjA5Olx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxMC1cdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDM6XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Njg5PWNvbmZpZyBORlRfUkVKRUNUX05FVERFVlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02OTgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njk5OmVuZGlmICMgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDE6ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTcxMT1jb25maWcgTkZfRkxPV19UQUJMRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTQtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjcxNTpcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzE2LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA4MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYG5mX3RhYmxlc2AgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG5mX3RhYmxlc2AgaXMgYmVpbmcgY29uc3RydWN0ZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdGhhdCBpcyBnb2luZyB0byBiZSB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRoZSBidWlsZCBydWxlcyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBOZXRmaWx0ZXIg4oCTIGFuZCB0aGVyZWZvcmUgYG5mX3RhYmxlc2Ag4oCTIHRvIHJlc2lkZS4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbW1hbmRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGhvdyBpdCYjMzk7cyBsaW5rZWQsIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgaW5jbHVkZWQsIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIGNvbXBpbGF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGUgYG5mX3RhYmxlc2AgY29tcG9uZW50IGNvbWVzIHRvZ2V0aGVyIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHByb2Nlc3MuIEhvcGVmdWxseSwgaXQmIzM5O3Mgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBlYXN5IHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfdGFibGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg0PW9iai0kKENPTkZJR19ORl9EVVBfTkVUREVWKVx0JiM0Mzs9IG5mX2R1cF9uZXRkZXYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS04NS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODY6IyBuZl90YWJsZXNcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODc6bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg4Olx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODktXHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkxLVx0XHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjkyOlx0XHQgIG5mdF9jaGFpbl9yb3V0ZS5vIG5mX3RhYmxlc19vZmZsb2FkLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTMtXHRcdCAgbmZ0X3NldF9oYXNoLm8gbmZ0X3NldF9iaXRtYXAubyBuZnRfc2V0X3JidHJlZS5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT05Nz1pZm5kZWYgQ09ORklHX1VNTFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5ODpuZl90YWJsZXMtb2JqcyAmIzQzOz0gbmZ0X3NldF9waXBhcG9fYXZ4Mi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTk5LWVuZGlmXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMDM9aWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwNDpuZl90YWJsZXMtb2JqcyAmIzQzOz0gbmZ0X2N0X2Zhc3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDUtZW5kaWZcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTA2PWVuZGlmXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEwNy1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTA4Om9iai0kKENPTkZJR19ORl9UQUJMRVMpXHRcdCYjNDM7PSBuZl90YWJsZXMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDktb2JqLSQoQ09ORklHX05GVF9DT01QQVQpXHQmIzQzOz0gbmZ0X2NvbXBhdC5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzU9b2JqLSQoQ09ORklHX05GVF9OQVQpXHRcdCYjNDM7PSBuZnRfY2hhaW5fbmF0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTM2LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMzc6IyBuZl90YWJsZXMgbmV0ZGV2XG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfTkZUX0RVUF9ORVRERVYpXHQmIzQzOz0gbmZ0X2R1cF9uZXRkZXYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg5NQoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiAxMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBuZXRmaWx0ZXIvbmZfdGFibGVzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIGEgcGF0Y2ggdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBjaGVja3N1bSB2YWxpZGF0aW9uIGFuZCBwYXlsb2FkIG1hbmdsaW5nIGxvZ2ljIHdpdGhpbiB0aGUgYG5mdF9wYXlsb2FkLmNgIGZpbGUgb2YgdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyBjaGFuZ2VzIHdpdGhpbiB0aGUgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKClgIGZ1bmN0aW9ucy4gVGhlIGludHJvZHVjdGlvbiBvZiBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vaygpYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBsb2dpYyB0byBlbnN1cmUgdGhhdCBjaGVja3N1bSBtb2RpZmljYXRpb25zIGFyZSBvbmx5IHBlcm1pdHRlZCBmb3IgdmFsaWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzLCBleHBsaWNpdGx5IGNoZWNraW5nIGFnYWluc3QgVENQLCBVRFAsIFVEUC1MaXRlLCBJQ01QdjYgYW5kIElDTVAgaGVhZGVycy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgcmVhY2hhYmxlPyYjMzQ7LiBBYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgd2hpY2ggbWVhbnMgSSBjYW4gZGlyZWN0bHkgaW5mbHVlbmNlIGl0cyBiZWhhdmlvciB2aWEgYE5GVF9NU0dfTkVXUlVMRWAgYW5kIHNpbWlsYXIgbmV0bGluayBtZXNzYWdlcy4gVGhlIHBhY2tldCBldmFsdWF0aW9uIGl0c2VsZiBvY2N1cnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGguCgomIzM0O0lzIGl0IHdvcnRoIGZ1enppbmc/JiMzNDsuIFdpdGhvdXQgYSBkb3VidC4gQW55IG1vZGlmaWNhdGlvbiB0byBjb3JlIHBhY2tldCBtYW5nbGluZyBsb2dpYyBsaWtlIHRoaXMsIGVzcGVjaWFsbHkgd2hlbiBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rLCBzY3JlYW1zIGZ1enppbmcgdGFyZ2V0LiBUaGUgYG5mX3RhYmxlc2Agc3Vic3lzdGVtIGlzIHdlbGwtZGVmaW5lZCBpbiBzeXprYWxsZXIsIHNvIHRhcmdldGluZyBpdCBmb3IgZnV6emluZyBzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgbmZ0X3BheWxvYWRfc2V0X2luaXRgIChpbml0aWFsaXphdGlvbikKKiAgIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgKGV2YWx1YXRpb24pCiogICBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AgKG5ldyBoZWxwZXIgZnVuY3Rpb24pCiogICBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgKHZhbGlkYXRpb24gZnVuY3Rpb24pCiogICBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgKGNoZWNrc3VtIHdyaXRlIGNoZWNrKQoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGV5IGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG5mdF9wYXlsb2FkLmNgLiBJbiBhIHN0YW5kYXJkIGtlcm5lbCBidWlsZCAoYW1kNjQsIGZvciBpbnN0YW5jZSksIHRoZXNlICp3aWxsKiBiZSBjb21waWxlZCBpbnRvIHN5bWJvbHMgaW4gdm1saW51eCwgdW5sZXNzIGhlYXZpbHkgaW5saW5lZCDigJMgYnV0IEkgZG9uJiMzOTt0IHNlZSB0aGF0IGhhcHBlbmluZyB3aXRoIHRoZSBgc2V0X2luaXRgIGFuZCBgc2V0X2V2YWxgIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgc2VlIGBORl9UQUJMRVNgIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLCB3aGljaCBjb250cm9scyB0aGUgYnVpbGRpbmcgb2YgYG5mX3RhYmxlcy5vYCAod2hpY2ggaW5jbHVkZXMgYG5mdF9wYXlsb2FkLm9gKS4gSXRzIHBhcmVudCBpcyBgTkVURklMVEVSYCwgd2hpY2ggSSYjMzk7bGwgYmUgc3VyZSBpcyBlbmFibGVkLiBJIGFsc28gc2VlIGBzZWxlY3QgTkVURklMVEVSX05FVExJTktgIGFuZCBgZGVwZW5kcyBvbiBORVRGSUxURVJgLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCk9rYXksIGxldCYjMzk7cyBzdW1tYXJpemUgYWxsIHRoaXMgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgcmVwb3J0IGZvcm1hdDoKCiogICBXb3J0aEZ1enppbmc6IGB0cnVlYAoqICAgRW5hYmxlQ29uZmlnczogYFsmIzM0O05GX1RBQkxFUyYjMzQ7LCAmIzM0O05FVEZJTFRFUiYjMzQ7XWAKKiAgIEZvY3VzU3ltYm9sczogYFsmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDssICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2V2YWwmIzM0OywgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssICYjMzQ7bmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldCYjMzQ7LCAmIzM0O25mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2smIzM0O11gCiogICBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24uCgpUaGF0IGNvdmVycyBpdC4gVGltZSB0byBydW4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiBhbmQgcGFja2V0IGV2YWx1YXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgcGF5bG9hZCBtYW5nbGluZyBpbiBuZl90YWJsZXMgKG5mdF9wYXlsb2FkKS4gVGhpcyBhZmZlY3RzIGJvdGggcnVsZSBpbml0aWFsaXphdGlvbiB0aW1lIHZhbGlkYXRpb24gdmlhIG5ldGxpbmsgYW5kIHBhY2tldCBldmFsdWF0aW9uIHRpbWUgdmVyaWZpY2F0aW9uLiBUaGUgY29kZSBpcyBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIGFuZCBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgbmV0bGluayBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiBhbmQgcGFja2V0IGV2YWx1YXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgcGF5bG9hZCBtYW5nbGluZyBpbiBuZl90YWJsZXMgKG5mdF9wYXlsb2FkKS4gVGhpcyBhZmZlY3RzIGJvdGggcnVsZSBpbml0aWFsaXphdGlvbiB0aW1lIHZhbGlkYXRpb24gdmlhIG5ldGxpbmsgYW5kIHBhY2tldCBldmFsdWF0aW9uIHRpbWUgdmVyaWZpY2F0aW9uLiBUaGUgY29kZSBpcyBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIGFuZCBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgbmV0bGluayBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdDpcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cbjIuIFJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0ZSBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggc3RyaWN0bHkgcmVzdHJpY3RzIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gb2Zmc2V0cyB0byB3ZWxsLWRlZmluZWQgTDQgcHJvdG9jb2wgY2hlY2tzdW0gZmllbGRzIChUQ1AsIFVEUCwgSUNNUCwgSUNNUHY2KSwgcHJldmVudGluZyBpbmNvcnJlY3QgcGFja2V0IG1hbmdsaW5nIC8gb3V0LW9mLWJvdW5kcyBwYXlsb2FkIHdyaXRlcyBvbiBza19idWZmcyAod2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NTk2ZjdiYjA1ZmZhZGU0ODUwZmE1NTg0ZTdlYTgxNjg2ZmIxNTEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxODo1NjozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwppbmRleCBlMzE1ZDM1ZjczZDRhLi5mNzMyZTJkNjFmOGM1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9ncmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWNtcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ljbXB2Ni5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwpAQCAtMTAwOCwxMSAmIzQzOzEwMDksMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQlpZiAocHJpdi0mZ3Q7Y3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yICYjMzQ7cmUtdXBkYXRlJiMzNDsgb2YgTDQgY2hlY2tzdW0gKi8KIAkJCXJldHVybiBmYWxzZTsKIAotCQkvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4mIzM5O3QgYmUgbmVnYXRpdmUgc28gYm9ndXMKLQkJICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy4KLQkJICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuCi0JCSAqLwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCS8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovCiYjNDM7CQlpZiAocHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKQEAgLTEwNDYsNiAmIzQzOzEwNDksMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKJiM0Mzt7CiYjNDM7CWlmICghKHBrdC0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX1BLVElORk9fTDRQUk9UTykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGt0LSZndDt0cHJvdCkgewomIzQzOwljYXNlIElQUFJPVE9fVENQOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBJUFBST1RPX1VEUDoKJiM0MzsJY2FzZSBJUFBST1RPX1VEUExJVEU6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUFY2OgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUDoKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiB7CkBAIC0xMDU1LDkgJiM0MzsxMDc5LDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKIAkJcmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTsKIAljYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6CiYjNDM7CQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOgotCQkvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmUKLQkJICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgomIzQzOwkJLyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmUKJiM0MzsJCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KIAkJICovCiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byBhbmFseXplIHRoaXMgTGludXgga2VybmVsIHBhdGNoIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIHRvIGRldGVybWluZSB3aGV0aGVyIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5LCBvciBpZiBLQVNBTiBpcyBzdWZmaWNpZW50LiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHZ1bG5lcmFiaWxpdHkgYXVkaXRpbmcgdGFzaywgYSBiaXQgb2YgZGVmZW5zaXZlIGNvZGUgcmV2aWV3LCBzcGVjaWZpY2FsbHkgY2hvb3NpbmcgdGhlIHJpZ2h0IHNhbml0aXplci4gR29vZCwgbG93IHNldmVyaXR5LCBiZW5pZ24gdGFzayAtIEkgY2FuIGNlcnRhaW5seSBoYW5kbGUgdGhpcy4KCkZpcnN0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyB0b3VjaGluZyBgbmZ0X3BheWxvYWQuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIG5vdyBhIG5ldyBvbmUgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLiBBaCwgZ290IGl0LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRpZ2h0ZW5pbmcgdGhlIHZhbGlkYXRpb24gb2YgYGNzdW1fb2Zmc2V0YCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVJgLiBQcmV2aW91c2x5LCBpdCBzZWVtcyB0aGlzIG9mZnNldCB3YXNuJiMzOTt0IHN0cmljdGx5IGNoZWNrZWQgZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gdXBkYXRlcywgd2hpY2ggY291bGQgb3BlbiBhIGRvb3IgdG8gYXJiaXRyYXJ5IG9mZnNldHMgaW4gTDQvcGF5bG9hZC4gTm93LCB0aGUgY29kZSBpcyB2ZXJpZnlpbmcgdGhhdCB0aGUgYGNzdW1fb2Zmc2V0YCBhbGlnbnMgd2l0aCBrbm93biBMNCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0cy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgdGhlIG9mZnNldCBtYXRjaGVzIHdoZXJlIHRob3NlIGNoZWNrc3VtcyAqc2hvdWxkKiBiZSAodGNwaGRyLCB1ZHBoZHIsIElDTVB2NiBhbmQgSUNNUCkuIFBsdXMsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrIGluIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KWAgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGJhc2UgaXMgYE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVJgLgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRoZSBhdmFpbGFibGUgdG9vbHMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gRnJvbSBoZXJlLCBJIHdpbGwgYmVnaW4gdG8gYW5hbHl6ZSB0aGUgY2hhbmdlcyB0byBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCBvZiBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwMDpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjEwMDE6XHRcdFx0aWYgKGN0eC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSB7XG4xMDAyOlx0XHRcdFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQpXG4xMDAzOlx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMDQ6XHRcbjEwMDU6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDA2Olx0XHRcdH1cbjEwMDc6XHRcdFx0cmV0dXJuIHRydWU7IC8qIHJ1biB0aW1lIHZhbGlkYXRpb24gcmVxdWlyZWQgKi9cbjEwMDg6XHRcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbjEwMDk6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuMTAxMDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjEwMTE6XHRcbjEwMTI6XHRcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbjEwMTM6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4xMDE0Olx0XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuMTAxNTpcdFx0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbjEwMTY6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMTc6XHRcbjEwMTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAxOTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4xMDIwOlx0XHRcdHJldHVybiB0cnVlO1xuMTAyMTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuMTAyMjpcdFx0XHRicmVhaztcbjEwMjM6XHRcdH1cbjEwMjQ6XHRcbjEwMjU6XHRcdHJldHVybiBmYWxzZTtcbjEwMjY6XHR9XG4xMDI3Olx0XG4xMDI4Olx0LyogZG8gbm90IGFsbG93IGFyYml0cmFyeSBuZXR3b3JrIGhlYWRlciBtYW5nbGluZyB2aWEgYm9ndXMgY3N1bV9vZmYuXG4xMDI5Olx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcbjEwMzA6XHQgKiBwbGFuZS5cbjEwMzE6XHQgKi9cbjEwMzI6XHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4xMDMzOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjEwMzQ6XHR7XG4xMDM1Olx0XHRzd2l0Y2ggKHBrdC1cdTAwM2VzdGF0ZS1cdTAwM2VwZikge1xuMTAzNjpcdFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4xMDM3Olx0XHRcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbiYjMzk7dCByZXR1cm4gdHJ1ZSBoZXJlLiAqL1xuMTAzODpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwMzk6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTA0MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDQxOlx0XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuMTA0MjpcdFx0XHRyZXR1cm4gcGt0LVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4xMDQzOlx0XHRcdCAgICAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xuMTA0NDpcdFx0Y2FzZSBORlBST1RPX05FVERFVjpcbjEwNDU6XHRcdFx0cmV0dXJuIHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuMTA0NjpcdFx0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDc6XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdHJldHVybiBmYWxzZTtcbjEwNTA6XHR9XG4xMDUxOlx0XG4xMDUyOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuMTA1MzpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4xMDU0Olx0e1xuMTA1NTpcdFx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcbjEwNTY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA1NzpcdFxuMTA1ODpcdFx0c3dpdGNoIChwa3QtXHUwMDNldHByb3QpIHtcbjEwNTk6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4xMDYwOlx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbjEwNjE6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMDYyOlx0XHRjYXNlIElQUFJPVE9fVURQTElURTpcbjEwNjM6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xuMTA2NDpcdFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcbjEwNjU6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4xMDY2Olx0XHRjYXNlIElQUFJPVE9fSUNNUDpcbjEwNjc6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcbjEwNjg6XHRcdH1cbjEwNjk6XHRcbjEwNzA6XHRcdHJldHVybiBmYWxzZTtcbjEwNzE6XHR9XG4xMDcyOlx0XG4xMDczOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbjEwNzQ6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDc1Olx0e1xuMTA3NjpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbjEwNzc6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuMTA3ODpcdFx0XHRicmVhaztcbjEwNzk6XHRcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4xMDgwOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgxOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMDgyOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgzOlx0XHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbjEwODQ6XHRcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbjEwODU6XHRcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuMTA4NjpcdFx0XHQgKi9cbjEwODc6XHRcdFx0cmV0dXJuIHRydWU7XG4xMDg4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4xMDg5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDMxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBDaGVja3N1bSBWYWxpZGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGFuZCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjaGVja3N1bSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gRXNzZW50aWFsbHksIHdoZXJlIGFyZSB0aGVzZSBzcGVjaWZpYyB2YWxpZGF0aW9uIGFuZCB3cml0ZSBjaGVja3MgYmVpbmcgaW52b2tlZD8gSXMgaXQgaW4gdGhlIGluaXRpYWwgc2V0dXAsIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgb3IgYm90aD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcHVycG9zZSBvZiB0aGVzZSBmdW5jdGlvbnMuIEnigJlsbCBiZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb25zIGhhcHBlbi4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHJlbGV2YW50IHBhY2tldCB0eXBlcywgYW5kIHRoZSBuZXR3b3JrIGxheWVycyB0aGUgY2hlY2tzIGFyZSByZWxldmFudCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNTI9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc0LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTEwNj1zdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzEtXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MjpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTczLVx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgUHJvY2Vzc2luZyBEZXRhaWxzKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGJ1c2luZXNzLiBUaGVzZSBhcmUgb2J2aW91c2x5IGNyaXRpY2FsIHBpZWNlcyBmb3IgaGFuZGxpbmcgbmV0d29yayB0cmFmZmljIHdpdGhpbiB0aGUgYG5mdGFibGVzYCBmcmFtZXdvcmsuIEtub3dpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyBwYWNrZXQgcGF5bG9hZHMgYXJlIG1vZGlmaWVkIGFuZCBjaGVja3N1bXMgYXJlIHZlcmlmaWVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZXNlIGZ1bmN0aW9ucy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBvdmVyYWxsIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4xMTAxOlx0XHRcdHJldHVybiB0cnVlO1xuMTEwMjpcdFxuMTEwMzpcdFx0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZG9mZjtcbjExMDQ6XHR9XG4xMTA1Olx0XG4xMTA2Olx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuMTEwNzpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbjExMDg6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjExMDk6XHR7XG4xMTEwOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbjExMTE6XHRcdGNvbnN0IHUzMiAqc3JjID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlc3JlZ107XG4xMTEyOlx0XHRpbnQgb2Zmc2V0LCBjc3VtX29mZnNldCwgdmxhbl9obGVuID0gMDtcbjExMTM6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXHUwMDNlc2tiO1xuMTExNDpcdFx0X193c3VtIGZzdW0sIHRzdW07XG4xMTE1Olx0XG4xMTE2Olx0XHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuMTExNzpcdFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4xMTE4Olx0XHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuMTExOTpcdFx0XHRcdGdvdG8gZXJyO1xuMTEyMDpcdFxuMTEyMTpcdFx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbjExMjI6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSkge1xuMTEyMzpcdFx0XHRcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXG4xMTI0Olx0XHRcdFx0XHRcdFx0ICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4sXG4xMTI1Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ2bGFuX2hsZW4pKVxuMTEyNjpcdFx0XHRcdFx0Z290byBlcnI7XG4xMTI3Olx0XG4xMTI4Olx0XHRcdFx0aWYgKCF2bGFuX2hsZW4pXG4xMTI5Olx0XHRcdFx0XHRyZXR1cm47XG4xMTMwOlx0XHRcdH1cbjExMzE6XHRcbjExMzI6XHRcdFx0b2Zmc2V0ID0gc2tiX21hY19oZWFkZXIoc2tiKSAtIHNrYi1cdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xuMTEzMzpcdFx0XHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXHUwMDNlbGVuICYjNDM7IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IG9mZnNldCkpXG4xMTM0Olx0XHRcdFx0Z290byBlcnI7XG4xMTM1Olx0XHRcdGJyZWFrO1xuMTEzNjpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjExMzc6XHRcdFx0aWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKVxuMTEzODpcdFx0XHRcdGdvdG8gZXJyO1xuMTEzOTpcdFx0XHRvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbjExNDA6XHRcdFx0YnJlYWs7XG4xMTQxOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMTQyOlx0XHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVx1MDAzZWZyYWdvZmYpXG4xMTQzOlx0XHRcdFx0Z290byBlcnI7XG4xMTQ0Olx0XHRcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXG4xMTQ1Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ2Olx0XHRcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xuMTE0NzpcdFx0XHRicmVhaztcbjExNDg6XHRcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuMTE0OTpcdFx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbjExNTA6XHRcdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbjExNTE6XHRcdFx0XHRnb3RvIGVycjtcbjExNTI6XHRcdFx0YnJlYWs7XG4xMTUzOlx0XHRkZWZhdWx0OlxuMTE1NDpcdFx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKDEpO1xuMTE1NTpcdFx0XHRnb3RvIGVycjtcbjExNTY6XHRcdH1cbjExNTc6XHRcbjExNTg6XHRcdGNzdW1fb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQ7XG4xMTU5Olx0XHRvZmZzZXQgJiM0Mzs9IHByaXYtXHUwMDNlb2Zmc2V0O1xuMTE2MDpcdFxuMTE2MTpcdFx0aWYgKChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgfHwgcHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbjExNjI6XHRcdCAgICAoKHByaXYtXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFx1MDAyNlx1MDAyNlxuMTE2MzpcdFx0ICAgICAgcHJpdi1cdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcbjExNjQ6XHRcdCAgICAgc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSkge1xuMTE2NTpcdFx0XHRpZiAob2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuMTE2NjpcdFx0XHRcdGdvdG8gZXJyO1xuMTE2NzpcdFxuMTE2ODpcdFx0XHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVx1MDAzZWxlbiwgMCk7XG4xMTY5Olx0XHRcdHRzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBwcml2LVx1MDAzZWxlbiwgMCk7XG4xMTcwOlx0XG4xMTcxOlx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG4xMTcyOlx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG4xMTczOlx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcbjExNzQ6XHRcdFx0XHRnb3RvIGVycjtcbjExNzU6XHRcbjExNzY6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncyBcdTAwMjZcdTAwMjZcbjExNzc6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUocGt0LCBza2IsIGZzdW0sIHRzdW0pIFx1MDAzYyAwKVxuMTE3ODpcdFx0XHRcdGdvdG8gZXJyO1xuMTE3OTpcdFx0fVxuMTE4MDpcdFxuMTE4MTpcdFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuLCAwKSkgfHxcbjExODI6XHRcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVx1MDAzZWxlbikgXHUwMDNjIDApXG4xMTgzOlx0XHRcdGdvdG8gZXJyO1xuMTE4NDpcdFxuMTE4NTpcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcdTAwMjZcdTAwMjZcbjExODY6XHRcdCAgICBwa3QtXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFx1MDAyNlx1MDAyNlxuMTE4NzpcdFx0ICAgIHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuMTE4ODpcdFx0XHRpZiAocGt0LVx1MDAzZWZyYWdvZmYgPT0gMCBcdTAwMjZcdTAwMjZcbjExODk6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4OAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIGl0cyB1c2FnZS4gS25vd2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQgZm9yIGl0cyByb2xlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCYjMzk7cyBiZWluZyBjYWxsZWQg4oCTIHdoYXQgc3BlY2lmaWMgbmV0d29yayBjb25kaXRpb25zIG9yIHJ1bGUgY29uZmlndXJhdGlvbnMgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiBUaGlzIGtpbmQgb2YgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcnVjaWFsIGZvciBldmFsdWF0aW5nIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIGFueSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gdGFyZ2V0cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4Nj1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5NS1cdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExOTg9c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU2LVx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX0lORVQ6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI1NzpcdFx0aWYgKCFuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGN0eCwgcHJpdikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1OC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3NgoJCQkJCQkJb3V0cHV0OiAyMjIKCQkJCQkJCXRob3VnaHRzOiA1NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgcGF5bG9hZCBleHByZXNzaW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY2hlY2tzdW0gb2Zmc2V0cyBpbiB0aGUgdHJhbnNwb3J0IGhlYWRlci4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgd2hlbiBzb21lb25lIGRlZmluZXMgYSBydWxlIGludm9sdmluZyBhIGNoZWNrc3VtIG9mZnNldCAoZm9yIFRDUCwgVURQL1VEUExpdGUsIElDTVB2Niwgb3IgSUNNUCksIHdlIHZhbGlkYXRlIHRoYXQgb2Zmc2V0IGlzICphY3R1YWxseSogYSB2YWxpZCBjaGVja3N1bSBmaWVsZCB3aXRoaW4gdGhlIHJlc3BlY3RpdmUgaGVhZGVycy4KCkhlcmUmIzM5O3MgdGhlIGdpc3Q6CgoqICAgKipWYWxpZGF0aW9uIFBoYXNlOioqIER1cmluZyBjb25maWd1cmF0aW9uIChgbmZ0X3BheWxvYWRfc2V0X2luaXRgIHRvIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCksIGlmIHRoZSBiYXNlIGlzIGEgdHJhbnNwb3J0IGhlYWRlciwgaXQgdmVyaWZpZXMgdGhlIHNwZWNpZmllZCBjaGVja3N1bSBvZmZzZXQgYWdhaW5zdCBrbm93biBvZmZzZXRzIGZvciB0aG9zZSBwcm90b2NvbHMgKFRDUCwgVURQLCBJQ01QdjYsIElDTVApLgoqICAgKipFdmFsdWF0aW9uIFBoYXNlOioqIFdoZW4gYSBydWxlIGlzIHRyaWdnZXJlZCAoYG5mdF9wYXlsb2FkX3NldF9ldmFsYCB0byBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2ApLCBpdCB1c2VzIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCB0byBjb25maXJtIHRoYXQgdGhlIHBhY2tldCYjMzk7cyAqYWN0dWFsKiB0cmFuc3BvcnQgcHJvdG9jb2wgbWF0Y2hlcyB0aGUgb2Zmc2V0IHdlJiMzOTtyZSBleHBlY3RpbmcgKGUuZy4sIGlmIHdlJiMzOTtyZSBleHBlY3RpbmcgYSBVRFAgY2hlY2tzdW0sIGl0IGNoZWNrcyB0aGUgcGFja2V0ICppcyogYWN0dWFsbHkgVURQKS4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OgoKMS4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBOb3RoaW5nIGhlcmUgaXMgY29weWluZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBwYWNrZXQgaGVhZGVyIHZhbGlkYXRpb24gZHVyaW5nIHJ1bGUgc2V0dXAgYW5kIGV4ZWN1dGlvbi4gTm8gaW5mbyBsZWFrcyBoZXJlLgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBUaGUgY29kZSByZWxpZXMgb24gZmllbGRzIGxpa2UgYHBrdC0mZ3Q7dHByb3RgLCBgcGt0LSZndDtmbGFnc2AsIGFuZCBgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXRgLCBidXQgdGhlc2UgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBgcGt0aW5mb2AgLyBgbmZ0X3BheWxvYWRfc2V0YCBzdHJ1Y3R1cmVzLiBOb3RoaW5nIGlzIHVuaW5pdGlhbGl6ZWQuCjMuICAqKkRhdGEgU3RydWN0dXJlIEFsbG9jYXRpb246KiogTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLiBUaGlzIGlzIG9wZXJhdGluZyBvbiBleGlzdGluZyBzdHJ1Y3R1cmVzIGR1cmluZyB2YWxpZGF0aW9uIGFuZCBldmFsdWF0aW9uLgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBDcnVjaWFsbHksIHRoZSBwYXRjaCAqcmVzdHJpY3RzKiBgY3N1bV9vZmZzZXRgIHRvIG9ubHkgYWxsb3cgdmFsaWQgTDQgY2hlY2tzdW0gb2Zmc2V0cy4gVGhpcyBpcyBhICpnb29kKiB0aGluZy4gSXQgcHJldmVudHMgd3JpdGluZyB0byBhcmJpdHJhcnkgdHJhbnNwb3J0IHBheWxvYWQgb2Zmc2V0cyBkdXJpbmcgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgd2Ugd2FudCB0byBhdm9pZC4gVGhpcyBrZWVwcyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBmcm9tIGhhcHBlbmluZyBvbiBza2JzLgoKU28sIGdpdmVuIHRoaXMgYW5hbHlzaXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBpbnZvbHZlZCBoZXJlLiBUaGlzIG1lYW5zIEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBqb2IuIEtNU0FOJiMzOTtzIHB1cnBvc2UgaXMgdG8gZmluZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBpcyBhYm91dCAqcHJldmVudGluZyogaW5jb3JyZWN0IG1lbW9yeSBtb2RpZmljYXRpb24uIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIG9yIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIHdoYXQgYXJlIGdvaW5nIHRvIG1hdHRlciBoZXJlLiBUaGVzZSBhcmUgdGhlIHJlbGV2YW50IHRvb2xzIGZvciBmaW5kaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1vcmUgdHlwaWNhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBpZiB0aGVyZSB3ZXJlIGFueSBpc3N1ZXMgaW4gdGhlIHBhdGNoJiMzOTtzIGJvdW5kcyBjaGVja3MuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBhbmQgbm93IGl0JiMzOTtzIGp1c3QgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgbXkgcmVhc29uaW5nLCBhbmQgdGhlIHRvb2xzIEkgbmVlZCB0byB1c2UsIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYE5lZWRzS01TQU5gIGFuZCBgS01TQU5SZWFzb25pbmdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdDpcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cbjIuIFJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0ZSBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggc3RyaWN0bHkgcmVzdHJpY3RzIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gb2Zmc2V0cyB0byB3ZWxsLWRlZmluZWQgTDQgcHJvdG9jb2wgY2hlY2tzdW0gZmllbGRzIChUQ1AsIFVEUCwgSUNNUCwgSUNNUHY2KSwgcHJldmVudGluZyBpbmNvcnJlY3QgcGFja2V0IG1hbmdsaW5nIC8gb3V0LW9mLWJvdW5kcyBwYXlsb2FkIHdyaXRlcyBvbiBza19idWZmcyAod2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdDpcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cbjIuIFJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0ZSBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggc3RyaWN0bHkgcmVzdHJpY3RzIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gb2Zmc2V0cyB0byB3ZWxsLWRlZmluZWQgTDQgcHJvdG9jb2wgY2hlY2tzdW0gZmllbGRzIChUQ1AsIFVEUCwgSUNNUCwgSUNNUHY2KSwgcHJldmVudGluZyBpbmNvcnJlY3QgcGFja2V0IG1hbmdsaW5nIC8gb3V0LW9mLWJvdW5kcyBwYXlsb2FkIHdyaXRlcyBvbiBza19idWZmcyAod2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjM0LjU1NDA1OTk3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzgwODYyOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfc2V0X2luaXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rXCIsXG4gICAgXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90OlxcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cXG4yLiBSZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxcbjMuIEFsbG9jYXRlIG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkuXFxuXFxuVGhlIHBhdGNoIHN0cmljdGx5IHJlc3RyaWN0cyBjaGVja3N1bSByZWNhbGN1bGF0aW9uIG9mZnNldHMgdG8gd2VsbC1kZWZpbmVkIEw0IHByb3RvY29sIGNoZWNrc3VtIGZpZWxkcyAoVENQLCBVRFAsIElDTVAsIElDTVB2NiksIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBhY2tldCBtYW5nbGluZyAvIG91dC1vZi1ib3VuZHMgcGF5bG9hZCB3cml0ZXMgb24gc2tfYnVmZnMgKHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycykuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIG1hbmdsaW5nIGluIG5mX3RhYmxlcyAobmZ0X3BheWxvYWQpLiBUaGlzIGFmZmVjdHMgYm90aCBydWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdmFsaWRhdGlvbiB2aWEgbmV0bGluayBhbmQgcGFja2V0IGV2YWx1YXRpb24gdGltZSB2ZXJpZmljYXRpb24uIFRoZSBjb2RlIGlzIGluIHRoZSBjb3JlIG5ldGZpbHRlciBzdWJzeXN0ZW0gYW5kIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6MzQuNTU0MDY2MTQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTkyOTgwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NTk2ZjdiYjA1ZmZhZGU0ODUwZmE1NTg0ZTdlYTgxNjg2ZmIxNTEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTY6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuaW5kZXggZTMxNWQzNWY3M2Q0YS4uZjczMmUyZDYxZjhjNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG5AQCAtMjAsNiArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91ZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9ncmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXB2Ni5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG5AQCAtMTAwOCwxMSArMTAwOSwxMyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXFxcInJlLXVwZGF0ZVxcXCIgb2YgTDQgY2hlY2tzdW0gKi9cXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0XFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcXG4tXFx0XFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cXG4tXFx0XFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XFxuK1xcdFxcdCAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbkBAIC0xMDQ2LDYgKzEwNDksMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbit7XFxuK1xcdGlmICghKHBrdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0c3dpdGNoIChwa3QtXFx1MDAzZXRwcm90KSB7XFxuK1xcdGNhc2UgSVBQUk9UT19UQ1A6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XFxuK1xcdGNhc2UgSVBQUk9UT19VRFA6XFxuK1xcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xcbitcXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XFxuK1xcdGNhc2UgSVBQUk9UT19JQ01QOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbiB7XFxuQEAgLTEwNTUsOSArMTA3OSwxMCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbiBcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuK1xcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbi1cXHRcXHQvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmVcXG4tXFx0XFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxcbitcXHRcXHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxcbitcXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NjozNC45NTQwMzY0NjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyMjQ4MDIzMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfc2V0X2luaXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rXCIsXG4gICAgXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgbWFuZ2xpbmcgaW4gbmZfdGFibGVzIChuZnRfcGF5bG9hZCkuIFRoaXMgYWZmZWN0cyBib3RoIHJ1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB2YWxpZGF0aW9uIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiB0aW1lIHZlcmlmaWNhdGlvbi4gVGhlIGNvZGUgaXMgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIHN1YnN5c3RlbSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIG5ldGxpbmsgc29ja2V0cyBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1OTZmN2JiMDVmZmFkZTQ4NTBmYTU1ODRlN2VhODE2ODZmYjE1MTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE4OjU2OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCBlMzE1ZDM1ZjczZDRhLi5mNzMyZTJkNjFmOGM1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuQEAgLTEwMDgsMTEgKzEwMDksMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCJyZS11cGRhdGVcIiBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcbi1cdFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cbi1cdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuK1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuQEAgLTEwNDYsNiArMTA0OSwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuK3tcbitcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4rXHRjYXNlIElQUFJPVE9fVENQOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fVURQOlxuK1x0Y2FzZSBJUFBST1RPX1VEUExJVEU6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuK1x0Y2FzZSBJUFBST1RPX0lDTVA6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuIHtcbkBAIC0xMDU1LDkgKzEwNzksMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4gXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4rXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbi1cdFx0LyogbmVpdGhlciBvZmZzZXRzIGFyZSB2YWxpZGF0ZWQsIG9mZnNldHMgY2Fubm90IGJlXG4tXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbitcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbitcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NjozNC45NTQwMzgxODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODA0NjczOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBheWxvYWQgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYuIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHVuZGVyc3RhbmRpbmcgKndoYXQqIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHdoeS4gVGhlIGNoYW5nZXMgYXJlIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggTmV0ZmlsdGVyIGFuZCBzcGVjaWZpY2FsbHksIHBheWxvYWQgaW5zcGVjdGlvbi9tYW5pcHVsYXRpb24uIFRoZSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXJlIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgd2hpY2ggaGFzIGxpa2VseSBiZWVuIGFsdGVyZWQsIGFuZCB0aGVzZSBuZXcgYWRkaXRpb25zOiBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIEJhc2VkIG9uIHRoZSBuYW1lcyBhbG9uZSwgSSdkIHdhZ2VyIHRoZXNlIGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGggY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHRoZSB2YWxpZGF0aW9uIG9mIHdyaXRlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBUQ1AgYW5kIFVEUCBjaGVja3N1bSBvZmZzZXRzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmZ0X3BheWxvYWQuY2AgdG8gc2VlIGhvdyB0aGVzZSBuZXcgZnVuY3Rpb25zIGludGVncmF0ZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUgb2xkIGZ1bmN0aW9uIGhhcyBiZWVuIGFsdGVyZWQuIEknbGwgcHJvYmFibHkgZmlyZSB1cCBgZ3JlcHBlcmAgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LiBJJ2xsIGFsc28gd2FudCB0byByZXZpZXcgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBkaWN0YXRlIHRoaXMgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoZSBwb3J0YWJpbGl0eSBhbmQgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGF0Y2ggYWNyb3NzIGRpZmZlcmVudCBrZXJuZWwgYnVpbGRzIGFuZCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjM5Ljc1ODcxNDIzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwMDE6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xcbjEwMDI6XFx0XFx0XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0KVxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDA2OlxcdFxcdFxcdH1cXG4xMDA3OlxcdFxcdFxcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXFxuMTAwODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTAwOTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuMTAxMDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuMTAxMzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XFxuMTAxNDpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XFxuMTAxNTpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXFxuMTAxNjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwMTk6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuMTAyMDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDIxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG4xMDIyOlxcdFxcdFxcdGJyZWFrO1xcbjEwMjM6XFx0XFx0fVxcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAyNjpcXHR9XFxuMTAyNzpcXHRcXG4xMDI4OlxcdC8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxcbjEwMjk6XFx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcXG4xMDMwOlxcdCAqIHBsYW5lLlxcbjEwMzE6XFx0ICovXFxuMTAzMjpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuMTAzMzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTAzNDpcXHR7XFxuMTAzNTpcXHRcXHRzd2l0Y2ggKHBrdC1cXHUwMDNlc3RhdGUtXFx1MDAzZXBmKSB7XFxuMTAzNjpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4xMDM3OlxcdFxcdFxcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbid0IHJldHVybiB0cnVlIGhlcmUuICovXFxuMTAzODpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTAzOTpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG4xMDQwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDQxOlxcdFxcdGNhc2UgTkZQUk9UT19CUklER0U6XFxuMTA0MjpcXHRcXHRcXHRyZXR1cm4gcGt0LVxcdTAwM2VldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuMTA0MzpcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTA0NDpcXHRcXHRjYXNlIE5GUFJPVE9fTkVUREVWOlxcbjEwNDU6XFx0XFx0XFx0cmV0dXJuIHBrdC1cXHUwMDNlc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG4xMDQ2OlxcdFxcdFxcdCAgICAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4xMDQ3OlxcdFxcdH1cXG4xMDQ4OlxcdFxcbjEwNDk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNTA6XFx0fVxcbjEwNTE6XFx0XFxuMTA1MjpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuMTA1MzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTA1NDpcXHR7XFxuMTA1NTpcXHRcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXFxuMTA1NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA1NzpcXHRcXG4xMDU4OlxcdFxcdHN3aXRjaCAocGt0LVxcdTAwM2V0cHJvdCkge1xcbjEwNTk6XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4xMDYwOlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XFxuMTA2MTpcXHRcXHRjYXNlIElQUFJPVE9fVURQOlxcbjEwNjI6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUExJVEU6XFxuMTA2MzpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xcbjEwNjQ6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4xMDY1OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4xMDY2OlxcdFxcdGNhc2UgSVBQUk9UT19JQ01QOlxcbjEwNjc6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XFxuMTA2ODpcXHRcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDcxOlxcdH1cXG4xMDcyOlxcdFxcbjEwNzM6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4xMDc0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuMTA3NTpcXHR7XFxuMTA3NjpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWJhc2UpIHtcXG4xMDc3OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbjEwNzg6XFx0XFx0XFx0YnJlYWs7XFxuMTA3OTpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwODA6XFx0XFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4xMDgxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4xMDgyOlxcdFxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuMTA4MzpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMDg0OlxcdFxcdFxcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXFxuMTA4NTpcXHRcXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuMTA4NjpcXHRcXHRcXHQgKi9cXG4xMDg3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwODg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbjEwODk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjM5Ljc1ODg1NTk4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDQyMTI0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBDYWxsIFNpdGVzOiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCoqXG5cblJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIHR3byBmdW5jdGlvbnMsIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBUbyB0cnVseSBncmFzcCB0aGVpciBzaWduaWZpY2FuY2UsIEkgbmVlZCB0byB0cmFjZSB0aGVpciB1c2FnZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGNvZGViYXNlLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBsb2dpYyB0aGV5IGFyZSBpbnRlbmRlZCB0byBzdXBwb3J0LiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBhc3NvY2lhdGVkIGNvZGUgbW9yZSBkZWVwbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTAsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjQxLjc2MzA3MTQwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg1MTA2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0fG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUyPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDczOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzQtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTA2PXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcxLVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzI6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTczLVxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTk4PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU2LVxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjU3OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Njo0MS44MTE5NTA5MzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ0NzkyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgbmZ0X3BheWxvYWQuY2AgaW4gdGhlIEJ1aWxkIFN5c3RlbSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZnRfcGF5bG9hZC5jYCBpcyBiZWluZyBoYW5kbGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBNYWtlZmlsZWAsIGFzIGl0J3MgdGhlIG1vcmUgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIGhvdyB0aGUgc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkLiBJJ2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byB0aGF0IHNwZWNpZmljIGZpbGUgbmFtZSwgb3IgcG90ZW50aWFsbHkgZm9yIHBhdHRlcm5zIHJlbGF0ZWQgdG8gbmV0d29yayBmaWx0ZXJpbmcgb3IgTmV0ZmlsdGVyLCBpZiB0aGUgbmFtZSBpdHNlbGYgaXNuJ3Qgb2J2aW91cy4gSWYgSSBkb24ndCBmaW5kIGFueXRoaW5nIGRlZmluaXRpdmUgdGhlcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCBwYXlsb2FkIGluc3BlY3Rpb24sIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW5jbHVkZSBvciBleGNsdWRlIHRoZSBgbmZ0X3BheWxvYWQuY2Agc291cmNlIGZpbGUgYmFzZWQgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IHRoZSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0aGF0IGNvbnRyb2wgd2hldGhlciBvciBub3QgdGhpcyBtb2R1bGUgaXMgYWN0dWFsbHkgYnVpbHQgYW5kIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBpbWFnZS4gVGhpcyBzaG91bGQgZ2V0IG1lIG9uIHRoZSByaWdodCB0cmFjayBwcmV0dHkgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjQzLjg1Njc0NjIzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI3MTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cXHRcXHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XFx0XFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MC1cXHRcXHQgIG5mdF9keW5zZXQubyBuZnRfbWV0YS5vIG5mdF9ydC5vIG5mdF9leHRoZHIubyBuZnRfbGFzdC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0xMzU9c3RhdGljIGlubGluZSB2b2lkIG5mdF90cmFjZV92ZXJkaWN0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MTQ0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2Zhc3RfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDcte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoxNDg6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQ5LVxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXFx1MDAzZXNrYjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0yMDM9c3RhdGljIHZvaWQgZXhwcl9jYWxsX29wc19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMTctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjIxODpcXHRYKGUsIG5mdF9wYXlsb2FkX2V2YWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMTktXFx0WChlLCBuZnRfY21wX2V2YWwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTI1MD1uZnRfZG9fY2hhaW4oc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIHZvaWQgKnByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjgyLVxcdFxcdFxcdFxcdG5mdF9iaXR3aXNlX2Zhc3RfZXZhbChleHByLCBcXHUwMDI2cmVncyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjI4MzpcXHRcXHRcXHRlbHNlIGlmIChleHByLVxcdTAwM2VvcHMgIT0gXFx1MDAyNm5mdF9wYXlsb2FkX2Zhc3Rfb3BzIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjI4NDpcXHRcXHRcXHRcXHQgIW5mdF9wYXlsb2FkX2Zhc3RfZXZhbChleHByLCBcXHUwMDI2cmVncywgcGt0KSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjg1LVxcdFxcdFxcdFxcdGV4cHJfY2FsbF9vcHNfZXZhbChleHByLCBcXHUwMDI2cmVncywgcGt0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0zNTI9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlICpuZnRfYmFzaWNfdHlwZXNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0zNTctXFx0XFx1MDAyNm5mdF9ieXRlb3JkZXJfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MzU4OlxcdFxcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0zNTktXFx0XFx1MDAyNm5mdF9keW5zZXRfdHlwZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTExND11bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMTktXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTIwOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX24yaCh1bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSAqZGF0YSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMjEtXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICp2YWwsIHUzMiBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYz0xMzk9c3RhdGljIGludCBfX25mdF9jbXBfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xNTItXFx0aWYgKHJlZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfT0ZGTE9BRF9GX05FVFdPUksySE9TVCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjE1MzpcXHRcXHRuZnRfcGF5bG9hZF9uMmgoXFx1MDAyNl9kYXRhLCAodTggKilcXHUwMDI2cHJpdi1cXHUwMDNlZGF0YSwgcmVnLVxcdTAwM2VsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjE1NDpcXHRcXHRuZnRfcGF5bG9hZF9uMmgoXFx1MDAyNl9kYXRhbWFzaywgKHU4ICopXFx1MDAyNnJlZy1cXHUwMDNlbWFzaywgcmVnLVxcdTAwM2VsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE1NS1cXHRcXHRkYXRhID0gKHU4ICopXFx1MDAyNl9kYXRhO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYz0zNj1zdHJ1Y3QgX19uZnRfZXhwciB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTM4LVxcdHVuaW9uIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjM5OlxcdFxcdHN0cnVjdCBuZnRfcGF5bG9hZFxcdHBheWxvYWQ7XFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy00MC1cXHRcXHRzdHJ1Y3QgbmZ0X21ldGFcXHRcXHRtZXRhO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYz0yOTA9c3RhdGljIHZvaWQgbmZ0X2lubmVyX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTI5NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjI5NjpcXHRpZiAobmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHBrdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMjk3LVxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0zMDQtXFx0Y2FzZSBORlRfSU5ORVJfRVhQUl9QQVlMT0FEOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6MzA1OlxcdFxcdG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKHN0cnVjdCBuZnRfZXhwciAqKVxcdTAwMjZwcml2LVxcdTAwM2VleHByLCByZWdzLCBwa3QsIFxcdTAwMjZ0dW5fY3R4KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMwNi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfcmVidWlsZF92bGFuX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbWFjX29mZixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz00Mz1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDpuZnRfcGF5bG9hZF9jb3B5X3ZsYW4odTMyICpkLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4pXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9yZWJ1aWxkX3ZsYW5faGRyKHNrYiwgbWFjX29mZiwgXFx1MDAyNnZldGgpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzQtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc1OnN0YXRpYyBpbnQgX19uZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQoc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0MDppbnQgbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDEte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDItXFx0aWYgKCEocGt0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9QS1RJTkZPX0lOTkVSKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNDM6XFx0ICAgIF9fbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KChzdHJ1Y3QgbmZ0X3BrdGluZm8gKilwa3QpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTQ0LVxcdFxcdHJldHVybiAtMTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHUzMiBvZmZzZXQsIHUzMiBsZW4pXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE1MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNjA6dm9pZCBuZnRfcGF5bG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTYxLVxcdFxcdCAgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjMte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNjQ6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTY1LVxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXFx1MDAzZXNrYjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNzctXFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTc4OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzk6XFx0XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9jb3B5X3ZsYW4oZGVzdCwgc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xODAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE5NC1cXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTk1OlxcdFxcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xOTYtXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjExLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTI6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMy1cXHRbTkZUQV9QQVlMT0FEX1NSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMjM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyNC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyNi17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIyNzpcXHRzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjgtXFx0dTMyIG9mZnNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI0NDpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ1LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0Ni17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI0NzpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNjA6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjYxLVxcdFxcdFxcdFxcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc4OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3OS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODA6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg1LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9zb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODY6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIEVUSF9BTEVOKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg3LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIEVUSF9BTEVOKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk0LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzAwOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwMS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA3LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA4OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE1LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzE2OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNy1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzIzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSArIHNpemVvZihzdHJ1Y3Qgdmxhbl9oZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzItXFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMzMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDk6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU0LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM1NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2My1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzczOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg5OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MDQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwNS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MTM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxNC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mjc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyOTpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDMwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzQtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNTpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM3LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzODpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzktXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0OC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ5OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTU6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2My1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzU6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDc3OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDg0LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDkwOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTA0LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwNTpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTA2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTAtXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTExOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEzLVxcdGNhc2UgSVBQUk9UT19VRFA6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxNDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTI0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjYte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mjc6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTI4LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMxLVxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzI6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzMtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNC1cXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzU6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9uaChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNy1cXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzODpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0ODpcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0OTpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MDpcXHQuZXZhbFxcdFxcdD0gbmZ0X3BheWxvYWRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUxOlxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MzpcXHQub2ZmbG9hZFxcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU0LX07XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU2OmNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1NzpcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1ODpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1OTpcXHQuZXZhbFxcdFxcdD0gbmZ0X3BheWxvYWRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYwOlxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjE6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MjpcXHQub2ZmbG9hZFxcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYzLX07XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY1OnZvaWQgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTY2LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01Njgte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Njk6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTcwLVxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXFx1MDAzZXNrYjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjYxNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2lubmVyX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE3LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxOS17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjYyMDpcXHRzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MjEtXFx0dTMyIGJhc2UsIG9mZnNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTAtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1MTpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9pbm5lcl9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1MjpcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1MzpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NDpcXHQuaW5pdFxcdFxcdD0gbmZ0X3BheWxvYWRfaW5uZXJfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU1OlxcdC5kdW1wXFx0XFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTY6XFx0LyogZGlyZWN0IGNhbGwgdG8gbmZ0X3BheWxvYWRfaW5uZXJfZXZhbCgpLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTctfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz02NTk9c3RhdGljIGlubGluZSB2b2lkIG5mdF9jc3VtX3JlcGxhY2UoX19zdW0xNiAqc3VtLCBfX3dzdW0gZnN1bSwgX193c3VtIHRzdW0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjY1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NjY6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdWRwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjY3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NzYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY3OC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjg4LVxcdGNhc2UgSVBQUk9UT19VRFA6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY4OTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShza2IsIG5mdF90aG9mZihwa3QpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjkwLVxcdFxcdFxcdHJldHVybiAtMTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MDUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcwNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2NzdW1fc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MDcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcxOC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzE5OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzIwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MjgtXFx0ICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcyOTpcXHRpZiAobmZ0X3BheWxvYWRfbDRjc3VtX29mZnNldChwa3QsIHNrYiwgXFx1MDAyNmw0Y3N1bV9vZmZzZXQpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzMwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiAqc3JjLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NTctXFx0XFx0XFx0XFx0IF9fd3N1bSBmc3VtLCBfX3dzdW0gdHN1bSwgaW50IGNzdW1fb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc3MS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzcyOnN0cnVjdCBuZnRfcGF5bG9hZF9zZXQge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzM6XFx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlc1xcdGJhc2U6ODtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzc0LVxcdHUxNlxcdFxcdFxcdG9mZnNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODItLyogVGhpcyBpcyBub3Qgc3RydWN0IHZsYW5faGRyLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODM6c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzg0LVxcdF9fYmUxNlxcdFxcdFxcdGhfdmxhbl9wcm90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz03ODg9c3RhdGljIGJvb2xcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Nzg5Om5mdF9wYXlsb2FkX3NldF92bGFuKGNvbnN0IHUzMiAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5MC1cXHRcXHQgICAgIGludCAqdmxhbl9obGVuKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTEte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3OTI6XFx0c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyICp2bGFuaDtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkzLVxcdF9fYmUxNiB2bGFuX3Byb3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwNi1cXHRcXHR9IGVsc2UgaWYgKGxlbiA9PSA0KSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjgwNzpcXHRcXHRcXHR2bGFuaCA9IChzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKilzcmM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwOC1cXHRcXHRcXHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbmgtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04Mzc9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODM4OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgzOS1cXHRcXHRcXHRcXHRjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04ODM9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODg0OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTg4NS1cXHRcXHRcXHRcXHRjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MDQtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkwNTpzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYXJwKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTI0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNTpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjYtXFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ1PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk0NjpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NDctXFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTYzPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTY0OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NjUtXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqc3JjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4Nj1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTU6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzEtICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwMzI6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDMzLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDUxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDUyOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA1My1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzktXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA4MDpcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgxLVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA4MjpcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgzLVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwOTU9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDk2OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDk3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTA2OnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEwNy1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDkte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTEwOlxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTExLVxcdGNvbnN0IHUzMiAqc3JjID0gXFx1MDAyNnJlZ3MtXFx1MDAzZWRhdGFbcHJpdi1cXHUwMDNlc3JlZ107XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEyMS1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTIyOlxcdFxcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTIzOlxcdFxcdFxcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMjQtXFx0XFx0XFx0XFx0XFx0XFx0ICBwcml2LVxcdTAwM2VvZmZzZXQsIHByaXYtXFx1MDAzZWxlbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTQ4LVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTQ5OlxcdFxcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTUwLVxcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzEtXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MjpcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzM6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTc0LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzYtXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3NzpcXHRcXHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTc4LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExODgtXFx0XFx0aWYgKHBrdC1cXHUwMDNlZnJhZ29mZiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExODk6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5MC1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTk4OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5OS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTIwMi1cXHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjAzOlxcdHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjA0LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1Ni1cXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fSU5FVDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI1NzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1OC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc4LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjc5OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4MC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODEte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjgyOlxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjgzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyOTgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyOTk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDE6XFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMjpcXHQuZXZhbFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDM6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA0OlxcdC5kdW1wXFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwNS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgKlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA4Om5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwOS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMTAte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzExOlxcdGVudW0gbmZ0X3BheWxvYWRfYmFzZXMgYmFzZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMi1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzMy1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMzNDpcXHRcXHRyZXR1cm4gXFx1MDAyNm5mdF9wYXlsb2FkX3NldF9vcHM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMzUtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNDktXFx0ICAgIGJhc2UgIT0gTkZUX1BBWUxPQURfTExfSEVBREVSIFxcdTAwMjZcXHUwMDI2IGJhc2UgIT0gTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUwOlxcdFxcdHJldHVybiBcXHUwMDI2bmZ0X3BheWxvYWRfZmFzdF9vcHM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTEtXFx0ZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUyOlxcdFxcdHJldHVybiBcXHUwMDI2bmZ0X3BheWxvYWRfb3BzO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzUzLX1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NTpzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTYtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJwYXlsb2FkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NzpcXHQuc2VsZWN0X29wc1xcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1ODpcXHQuaW5uZXJfb3BzXFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfaW5uZXJfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU5OlxcdC5wb2xpY3lcXHRcXHQ9IG5mdF9wYXlsb2FkX3BvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM2MC1cXHQubWF4YXR0clxcdD0gTkZUQV9QQVlMT0FEX01BWCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6NDMuOTA3MDIxMTI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwNDQzOTIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIG5mX3RhYmxlcyBhbmQgbmZ0X3BheWxvYWQgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgbmZfdGFibGVzYCBhbmQgc3BlY2lmaWNhbGx5IGBuZnRfcGF5bG9hZGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IGdyYXNwIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuIEknbSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0byB3YXRjaCBvdXQgZm9yLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBLY29uZmlnIHRyZWUsIGJ1dCBJIGFudGljaXBhdGUgaGF2aW5nIHRvIHRyYWNlIHRocm91Z2ggYSBmZXcgaW5jbHVkZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgYSBxdWljayBhbmQgZGlydHkgY29uZmlndXJhdGlvbiBvdmVydmlldyBvZiB0aGVzZSBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Njo0Ni4yMTE0NjM4NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDQxNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX1RBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzgtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDAtXFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcxOmlmIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cXHRkZXBlbmRzIG9uIElQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDc0OlxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzU6XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3Ni1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NTUwPWNvbmZpZyBORlRfTkFUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUyLVxcdHNlbGVjdCBORl9OQVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTUzOlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lQVjQgfHwgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTU0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5hdCBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NTg2PWNvbmZpZyBORlRfUkVKRUNUX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTg3OlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTg4LVxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTYwOD1jb25maWcgTkZUX0ZJQl9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYwOTpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxMC1cXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyNy1cXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI4OlxcdHNlbGVjdCBORl9TT0NLRVRfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Mi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQzOlxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0NTpcXHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ2LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjYxLVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY4OT1jb25maWcgTkZUX1JFSkVDVF9ORVRERVZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02OTgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY5OTplbmRpZiAjIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDE6ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTcxMT1jb25maWcgTkZfRkxPV19UQUJMRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxNC1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTU6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzE2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6NDYuMjU3OTA5ODE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTcyNDEyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbmZfdGFibGVzYCBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBuZl90YWJsZXNgIGlzIGJlaW5nIGNvbnN0cnVjdGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgaXMgZ29pbmcgdG8gYmUgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRoZSBidWlsZCBydWxlcyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBOZXRmaWx0ZXIg4oCTIGFuZCB0aGVyZWZvcmUgYG5mX3RhYmxlc2Ag4oCTIHRvIHJlc2lkZS4gSSdsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29tbWFuZHMuIEknbSBsb29raW5nIGZvciBob3cgaXQncyBsaW5rZWQsIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgaW5jbHVkZWQsIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIGNvbXBpbGF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGUgYG5mX3RhYmxlc2AgY29tcG9uZW50IGNvbWVzIHRvZ2V0aGVyIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgcHJvY2Vzcy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgZWFzeSB0byBmb2xsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDgzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6NDguNDE1MTUzMTQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA4MzU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg0PW9iai0kKENPTkZJR19ORl9EVVBfTkVUREVWKVxcdCs9IG5mX2R1cF9uZXRkZXYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODUtXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NjojIG5mX3RhYmxlc1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODc6bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg4OlxcdFxcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OS1cXHRcXHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTEtXFx0XFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MjpcXHRcXHQgIG5mdF9jaGFpbl9yb3V0ZS5vIG5mX3RhYmxlc19vZmZsb2FkLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTMtXFx0XFx0ICBuZnRfc2V0X2hhc2gubyBuZnRfc2V0X2JpdG1hcC5vIG5mdF9zZXRfcmJ0cmVlLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT05Nz1pZm5kZWYgQ09ORklHX1VNTFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTg6bmZfdGFibGVzLW9ianMgKz0gbmZ0X3NldF9waXBhcG9fYXZ4Mi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05OS1lbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMDM9aWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDQ6bmZfdGFibGVzLW9ianMgKz0gbmZ0X2N0X2Zhc3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTA1LWVuZGlmXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMDY9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEwNy1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwODpvYmotJChDT05GSUdfTkZfVEFCTEVTKVxcdFxcdCs9IG5mX3RhYmxlcy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDktb2JqLSQoQ09ORklHX05GVF9DT01QQVQpXFx0Kz0gbmZ0X2NvbXBhdC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzNT1vYmotJChDT05GSUdfTkZUX05BVClcXHRcXHQrPSBuZnRfY2hhaW5fbmF0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzNi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzNzojIG5mX3RhYmxlcyBuZXRkZXZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfTkZUX0RVUF9ORVRERVYpXFx0Kz0gbmZ0X2R1cF9uZXRkZXYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Njo0OC40NjAyNDQ2NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODY1NzgzOTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgbmV0ZmlsdGVyL25mX3RhYmxlcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgYSBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgY2hlY2tzdW0gdmFsaWRhdGlvbiBhbmQgcGF5bG9hZCBtYW5nbGluZyBsb2dpYyB3aXRoaW4gdGhlIGBuZnRfcGF5bG9hZC5jYCBmaWxlIG9mIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyBjaGFuZ2VzIHdpdGhpbiB0aGUgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKClgIGZ1bmN0aW9ucy4gVGhlIGludHJvZHVjdGlvbiBvZiBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vaygpYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0J3MgZXNzZW50aWFsbHkgcmVmaW5pbmcgdGhlIGxvZ2ljIHRvIGVuc3VyZSB0aGF0IGNoZWNrc3VtIG1vZGlmaWNhdGlvbnMgYXJlIG9ubHkgcGVybWl0dGVkIGZvciB2YWxpZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMsIGV4cGxpY2l0bHkgY2hlY2tpbmcgYWdhaW5zdCBUQ1AsIFVEUCwgVURQLUxpdGUsIElDTVB2NiBhbmQgSUNNUCBoZWFkZXJzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIHJlYWNoYWJsZT9cIi4gQWJzb2x1dGVseS4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0ZmlsdGVyIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIG1lYW5zIEkgY2FuIGRpcmVjdGx5IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IgdmlhIGBORlRfTVNHX05FV1JVTEVgIGFuZCBzaW1pbGFyIG5ldGxpbmsgbWVzc2FnZXMuIFRoZSBwYWNrZXQgZXZhbHVhdGlvbiBpdHNlbGYgb2NjdXJzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjaywgc28gaXQncyBhIGNyaXRpY2FsIHBhdGguXG5cblwiSXMgaXQgd29ydGggZnV6emluZz9cIi4gV2l0aG91dCBhIGRvdWJ0LiBBbnkgbW9kaWZpY2F0aW9uIHRvIGNvcmUgcGFja2V0IG1hbmdsaW5nIGxvZ2ljIGxpa2UgdGhpcywgZXNwZWNpYWxseSB3aGVuIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNjcmVhbXMgZnV6emluZyB0YXJnZXQuIFRoZSBgbmZfdGFibGVzYCBzdWJzeXN0ZW0gaXMgd2VsbC1kZWZpbmVkIGluIHN5emthbGxlciwgc28gdGFyZ2V0aW5nIGl0IGZvciBmdXp6aW5nIHNob3VsZCBiZSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSdtIGZvY3VzaW5nIG9uOlxuXG4qICAgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAoaW5pdGlhbGl6YXRpb24pXG4qICAgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCAoZXZhbHVhdGlvbilcbiogICBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AgKG5ldyBoZWxwZXIgZnVuY3Rpb24pXG4qICAgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgICh2YWxpZGF0aW9uIGZ1bmN0aW9uKVxuKiAgIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCAoY2hlY2tzdW0gd3JpdGUgY2hlY2spXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhleSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBuZnRfcGF5bG9hZC5jYC4gSW4gYSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgKGFtZDY0LCBmb3IgaW5zdGFuY2UpLCB0aGVzZSAqd2lsbCogYmUgY29tcGlsZWQgaW50byBzeW1ib2xzIGluIHZtbGludXgsIHVubGVzcyBoZWF2aWx5IGlubGluZWQg4oCTIGJ1dCBJIGRvbid0IHNlZSB0aGF0IGhhcHBlbmluZyB3aXRoIHRoZSBgc2V0X2luaXRgIGFuZCBgc2V0X2V2YWxgIGZ1bmN0aW9ucy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBzZWUgYE5GX1RBQkxFU2AgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIHdoaWNoIGNvbnRyb2xzIHRoZSBidWlsZGluZyBvZiBgbmZfdGFibGVzLm9gICh3aGljaCBpbmNsdWRlcyBgbmZ0X3BheWxvYWQub2ApLiBJdHMgcGFyZW50IGlzIGBORVRGSUxURVJgLCB3aGljaCBJJ2xsIGJlIHN1cmUgaXMgZW5hYmxlZC4gSSBhbHNvIHNlZSBgc2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LYCBhbmQgYGRlcGVuZHMgb24gTkVURklMVEVSYCwgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuT2theSwgbGV0J3Mgc3VtbWFyaXplIGFsbCB0aGlzIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIHJlcG9ydCBmb3JtYXQ6XG5cbiogICBXb3J0aEZ1enppbmc6IGB0cnVlYFxuKiAgIEVuYWJsZUNvbmZpZ3M6IGBbXCJORl9UQUJMRVNcIiwgXCJORVRGSUxURVJcIl1gXG4qICAgRm9jdXNTeW1ib2xzOiBgW1wibmZ0X3BheWxvYWRfc2V0X2luaXRcIiwgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLCBcIm5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tcIiwgXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0XCIsIFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiXWBcbiogICBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24uXG5cblRoYXQgY292ZXJzIGl0LiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg5NSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjU3LjExODA4ODA0OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTY4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va1wiLFxuICAgIFwibmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIG1hbmdsaW5nIGluIG5mX3RhYmxlcyAobmZ0X3BheWxvYWQpLiBUaGlzIGFmZmVjdHMgYm90aCBydWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdmFsaWRhdGlvbiB2aWEgbmV0bGluayBhbmQgcGFja2V0IGV2YWx1YXRpb24gdGltZSB2ZXJpZmljYXRpb24uIFRoZSBjb2RlIGlzIGluIHRoZSBjb3JlIG5ldGZpbHRlciBzdWJzeXN0ZW0gYW5kIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va1wiLFxuICAgIFwibmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIG1hbmdsaW5nIGluIG5mX3RhYmxlcyAobmZ0X3BheWxvYWQpLiBUaGlzIGFmZmVjdHMgYm90aCBydWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdmFsaWRhdGlvbiB2aWEgbmV0bGluayBhbmQgcGFja2V0IGV2YWx1YXRpb24gdGltZSB2ZXJpZmljYXRpb24uIFRoZSBjb2RlIGlzIGluIHRoZSBjb3JlIG5ldGZpbHRlciBzdWJzeXN0ZW0gYW5kIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6NTcuMjAyMDY0NTEyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDEzMjg0ODUxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjU3LjIwMjU1NTc1MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMTMyMzUzMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90OlxcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cXG4yLiBSZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxcbjMuIEFsbG9jYXRlIG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkuXFxuXFxuVGhlIHBhdGNoIHN0cmljdGx5IHJlc3RyaWN0cyBjaGVja3N1bSByZWNhbGN1bGF0aW9uIG9mZnNldHMgdG8gd2VsbC1kZWZpbmVkIEw0IHByb3RvY29sIGNoZWNrc3VtIGZpZWxkcyAoVENQLCBVRFAsIElDTVAsIElDTVB2NiksIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBhY2tldCBtYW5nbGluZyAvIG91dC1vZi1ib3VuZHMgcGF5bG9hZCB3cml0ZXMgb24gc2tfYnVmZnMgKHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycykuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1OTZmN2JiMDVmZmFkZTQ4NTBmYTU1ODRlN2VhODE2ODZmYjE1MTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE4OjU2OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCBlMzE1ZDM1ZjczZDRhLi5mNzMyZTJkNjFmOGM1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuQEAgLTEwMDgsMTEgKzEwMDksMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCJyZS11cGRhdGVcIiBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcbi1cdFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cbi1cdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuK1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuQEAgLTEwNDYsNiArMTA0OSwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuK3tcbitcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4rXHRjYXNlIElQUFJPVE9fVENQOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fVURQOlxuK1x0Y2FzZSBJUFBST1RPX1VEUExJVEU6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuK1x0Y2FzZSBJUFBST1RPX0lDTVA6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuIHtcbkBAIC0xMDU1LDkgKzEwNzksMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4gXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4rXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbi1cdFx0LyogbmVpdGhlciBvZmZzZXRzIGFyZSB2YWxpZGF0ZWQsIG9mZnNldHMgY2Fubm90IGJlXG4tXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbitcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbitcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Njo1Ny4yMDI1NTY3NzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwNDk4MDY5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gYW5hbHl6ZSB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBpbiBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCB0byBkZXRlcm1pbmUgd2hldGhlciBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSwgb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCB2dWxuZXJhYmlsaXR5IGF1ZGl0aW5nIHRhc2ssIGEgYml0IG9mIGRlZmVuc2l2ZSBjb2RlIHJldmlldywgc3BlY2lmaWNhbGx5IGNob29zaW5nIHRoZSByaWdodCBzYW5pdGl6ZXIuIEdvb2QsIGxvdyBzZXZlcml0eSwgYmVuaWduIHRhc2sgLSBJIGNhbiBjZXJ0YWlubHkgaGFuZGxlIHRoaXMuXG5cbkZpcnN0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgdG91Y2hpbmcgYG5mdF9wYXlsb2FkLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBmdW5jdGlvbnMgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgLCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AsIGFuZCBub3cgYSBuZXcgb25lIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYC4gQWgsIGdvdCBpdC4gSXQgbG9va3MgbGlrZSBpdCdzIHRpZ2h0ZW5pbmcgdGhlIHZhbGlkYXRpb24gb2YgYGNzdW1fb2Zmc2V0YCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUmAuIFByZXZpb3VzbHksIGl0IHNlZW1zIHRoaXMgb2Zmc2V0IHdhc24ndCBzdHJpY3RseSBjaGVja2VkIGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIHVwZGF0ZXMsIHdoaWNoIGNvdWxkIG9wZW4gYSBkb29yIHRvIGFyYml0cmFyeSBvZmZzZXRzIGluIEw0L3BheWxvYWQuIE5vdywgdGhlIGNvZGUgaXMgdmVyaWZ5aW5nIHRoYXQgdGhlIGBjc3VtX29mZnNldGAgYWxpZ25zIHdpdGgga25vd24gTDQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldHMuIEl0J3MgZXNzZW50aWFsbHkgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgdGhlIG9mZnNldCBtYXRjaGVzIHdoZXJlIHRob3NlIGNoZWNrc3VtcyAqc2hvdWxkKiBiZSAodGNwaGRyLCB1ZHBoZHIsIElDTVB2NiBhbmQgSUNNUCkuIFBsdXMsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrIGluIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KWAgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGJhc2UgaXMgYE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVJgLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaGVyZS4gSSdsbCBuZWVkIHRvIHVzZSB0aGUgYXZhaWxhYmxlIHRvb2xzIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEZyb20gaGVyZSwgSSB3aWxsIGJlZ2luIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgdG8gZGV0ZXJtaW5lIHRoZSBwb3RlbnRpYWwgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBcblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU3OjA4LjI1MjM2ODYyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwMDE6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xcbjEwMDI6XFx0XFx0XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0KVxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDA2OlxcdFxcdFxcdH1cXG4xMDA3OlxcdFxcdFxcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXFxuMTAwODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTAwOTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuMTAxMDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuMTAxMzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XFxuMTAxNDpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XFxuMTAxNTpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXFxuMTAxNjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwMTk6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuMTAyMDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDIxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG4xMDIyOlxcdFxcdFxcdGJyZWFrO1xcbjEwMjM6XFx0XFx0fVxcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAyNjpcXHR9XFxuMTAyNzpcXHRcXG4xMDI4OlxcdC8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxcbjEwMjk6XFx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcXG4xMDMwOlxcdCAqIHBsYW5lLlxcbjEwMzE6XFx0ICovXFxuMTAzMjpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuMTAzMzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTAzNDpcXHR7XFxuMTAzNTpcXHRcXHRzd2l0Y2ggKHBrdC1cXHUwMDNlc3RhdGUtXFx1MDAzZXBmKSB7XFxuMTAzNjpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4xMDM3OlxcdFxcdFxcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbid0IHJldHVybiB0cnVlIGhlcmUuICovXFxuMTAzODpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTAzOTpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG4xMDQwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDQxOlxcdFxcdGNhc2UgTkZQUk9UT19CUklER0U6XFxuMTA0MjpcXHRcXHRcXHRyZXR1cm4gcGt0LVxcdTAwM2VldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuMTA0MzpcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTA0NDpcXHRcXHRjYXNlIE5GUFJPVE9fTkVUREVWOlxcbjEwNDU6XFx0XFx0XFx0cmV0dXJuIHBrdC1cXHUwMDNlc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG4xMDQ2OlxcdFxcdFxcdCAgICAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4xMDQ3OlxcdFxcdH1cXG4xMDQ4OlxcdFxcbjEwNDk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNTA6XFx0fVxcbjEwNTE6XFx0XFxuMTA1MjpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuMTA1MzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTA1NDpcXHR7XFxuMTA1NTpcXHRcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXFxuMTA1NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA1NzpcXHRcXG4xMDU4OlxcdFxcdHN3aXRjaCAocGt0LVxcdTAwM2V0cHJvdCkge1xcbjEwNTk6XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4xMDYwOlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XFxuMTA2MTpcXHRcXHRjYXNlIElQUFJPVE9fVURQOlxcbjEwNjI6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUExJVEU6XFxuMTA2MzpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xcbjEwNjQ6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4xMDY1OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4xMDY2OlxcdFxcdGNhc2UgSVBQUk9UT19JQ01QOlxcbjEwNjc6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XFxuMTA2ODpcXHRcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDcxOlxcdH1cXG4xMDcyOlxcdFxcbjEwNzM6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4xMDc0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuMTA3NTpcXHR7XFxuMTA3NjpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWJhc2UpIHtcXG4xMDc3OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbjEwNzg6XFx0XFx0XFx0YnJlYWs7XFxuMTA3OTpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwODA6XFx0XFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4xMDgxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4xMDgyOlxcdFxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuMTA4MzpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMDg0OlxcdFxcdFxcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXFxuMTA4NTpcXHRcXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuMTA4NjpcXHRcXHRcXHQgKi9cXG4xMDg3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwODg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbjEwODk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU3OjA4LjI1MjUyOTkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTI5Njk3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENoZWNrc3VtIFZhbGlkYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGFuZCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjaGVja3N1bSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gRXNzZW50aWFsbHksIHdoZXJlIGFyZSB0aGVzZSBzcGVjaWZpYyB2YWxpZGF0aW9uIGFuZCB3cml0ZSBjaGVja3MgYmVpbmcgaW52b2tlZD8gSXMgaXQgaW4gdGhlIGluaXRpYWwgc2V0dXAsIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgb3IgYm90aD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcHVycG9zZSBvZiB0aGVzZSBmdW5jdGlvbnMuIEnigJlsbCBiZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb25zIGhhcHBlbi4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHJlbGV2YW50IHBhY2tldCB0eXBlcywgYW5kIHRoZSBuZXR3b3JrIGxheWVycyB0aGUgY2hlY2tzIGFyZSByZWxldmFudCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU3OjEwLjEwNTUwMjc4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzQyODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUyPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDczOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzQtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTA2PXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcxLVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzI6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTczLVxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTc6MTAuMzEzODUzMDc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTU5MDg3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipEaXZpbmcgaW50byB0aGUgUGFja2V0IFByb2Nlc3NpbmcgRGV0YWlscyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGJ1c2luZXNzLiBUaGVzZSBhcmUgb2J2aW91c2x5IGNyaXRpY2FsIHBpZWNlcyBmb3IgaGFuZGxpbmcgbmV0d29yayB0cmFmZmljIHdpdGhpbiB0aGUgYG5mdGFibGVzYCBmcmFtZXdvcmsuIEtub3dpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyBwYWNrZXQgcGF5bG9hZHMgYXJlIG1vZGlmaWVkIGFuZCBjaGVja3N1bXMgYXJlIHZlcmlmaWVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZXNlIGZ1bmN0aW9ucy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBob3cgdGhleSBpbXBhY3QgdGhlIG92ZXJhbGwgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTg1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTc6MTIuMzA5NzYzOTkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRpZiAocGt0LVxcdTAwM2V0cHJvdCAhPSBJUFBST1RPX1RDUClcXG4xMTAxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlb2Zmc2V0IFxcdTAwM2UgZG9mZiB8fCBwcml2LVxcdTAwM2VvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzYz0gZG9mZjtcXG4xMTA0OlxcdH1cXG4xMTA1OlxcdFxcbjExMDY6XFx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbjExMDc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4xMTA4OlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4xMTA5OlxcdHtcXG4xMTEwOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbjExMTE6XFx0XFx0Y29uc3QgdTMyICpzcmMgPSBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VzcmVnXTtcXG4xMTEyOlxcdFxcdGludCBvZmZzZXQsIGNzdW1fb2Zmc2V0LCB2bGFuX2hsZW4gPSAwO1xcbjExMTM6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbjExMTQ6XFx0XFx0X193c3VtIGZzdW0sIHRzdW07XFxuMTExNTpcXHRcXG4xMTE2OlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbjExMTc6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxuMTExODpcXHRcXHRcXHRpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcXG4xMTE5OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExMjA6XFx0XFxuMTEyMTpcXHRcXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbjExMjI6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxuMTEyMzpcXHRcXHRcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3NldF92bGFuKHNyYywgc2tiLFxcbjExMjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwcml2LVxcdTAwM2VvZmZzZXQsIHByaXYtXFx1MDAzZWxlbixcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnZsYW5faGxlbikpXFxuMTEyNjpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0XFx0XFx0aWYgKCF2bGFuX2hsZW4pXFxuMTEyOTpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTEzMDpcXHRcXHRcXHR9XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdFxcdG9mZnNldCA9IHNrYl9tYWNfaGVhZGVyKHNrYikgLSBza2ItXFx1MDAzZWRhdGEgLSB2bGFuX2hsZW47XFxuMTEzMzpcXHRcXHRcXHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXFx1MDAzZWxlbiArIHByaXYtXFx1MDAzZW9mZnNldCArIG9mZnNldCkpXFxuMTEzNDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTM1OlxcdFxcdFxcdGJyZWFrO1xcbjExMzY6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4xMTM3OlxcdFxcdFxcdGlmICghbmZ0X25oX3dyaXRlX29rKHBrdCwgcHJpdiwgc3JjKSlcXG4xMTM4OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExMzk6XFx0XFx0XFx0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XFxuMTE0MDpcXHRcXHRcXHRicmVhaztcXG4xMTQxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4xMTQyOlxcdFxcdFxcdGlmICghKHBrdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSB8fCBwa3QtXFx1MDAzZWZyYWdvZmYpXFxuMTE0MzpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQ0OlxcdFxcdFxcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXFxuMTE0NTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQ2OlxcdFxcdFxcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xcbjExNDc6XFx0XFx0XFx0YnJlYWs7XFxuMTE0ODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMTQ5OlxcdFxcdFxcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xcbjExNTA6XFx0XFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuMTE1MTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTUyOlxcdFxcdFxcdGJyZWFrO1xcbjExNTM6XFx0XFx0ZGVmYXVsdDpcXG4xMTU0OlxcdFxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XFxuMTE1NTpcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTU2OlxcdFxcdH1cXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0Y3N1bV9vZmZzZXQgPSBvZmZzZXQgKyBwcml2LVxcdTAwM2Vjc3VtX29mZnNldDtcXG4xMTU5OlxcdFxcdG9mZnNldCArPSBwcml2LVxcdTAwM2VvZmZzZXQ7XFxuMTE2MDpcXHRcXG4xMTYxOlxcdFxcdGlmICgocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCB8fCBwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbjExNjI6XFx0XFx0ICAgICgocHJpdi1cXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFxcdTAwMjZcXHUwMDI2XFxuMTE2MzpcXHRcXHQgICAgICBwcml2LVxcdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcXG4xMTY0OlxcdFxcdCAgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHtcXG4xMTY1OlxcdFxcdFxcdGlmIChvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4xMTY2OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExNjc6XFx0XFxuMTE2ODpcXHRcXHRcXHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4sIDApO1xcbjExNjk6XFx0XFx0XFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXFx1MDAzZWxlbiwgMCk7XFxuMTE3MDpcXHRcXG4xMTcxOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMTE3MjpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxuMTE3MzpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxuMTE3NDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTc1OlxcdFxcbjExNzY6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG4xMTc3OlxcdFxcdFxcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcXHUwMDNjIDApXFxuMTE3ODpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTc5OlxcdFxcdH1cXG4xMTgwOlxcdFxcbjExODE6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuLCAwKSkgfHxcXG4xMTgyOlxcdFxcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVxcdTAwM2VsZW4pIFxcdTAwM2MgMClcXG4xMTgzOlxcdFxcdFxcdGdvdG8gZXJyO1xcbjExODQ6XFx0XFxuMTE4NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcXHUwMDI2XFx1MDAyNlxcbjExODY6XFx0XFx0ICAgIHBrdC1cXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFxcdTAwMjZcXHUwMDI2XFxuMTE4NzpcXHRcXHQgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbjExODg6XFx0XFx0XFx0aWYgKHBrdC1cXHUwMDNlZnJhZ29mZiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuMTE4OTpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NzoxMi4zMDk4ODg1OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc0NjMwNjQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIGl0cyB1c2FnZS4gS25vd2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQgZm9yIGl0cyByb2xlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCdzIGJlaW5nIGNhbGxlZCDigJMgd2hhdCBzcGVjaWZpYyBuZXR3b3JrIGNvbmRpdGlvbnMgb3IgcnVsZSBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIGl0cyBleGVjdXRpb24uIFRoaXMga2luZCBvZiBkZXBlbmRlbmN5IGFuYWx5c2lzIGlzIGNydWNpYWwgZm9yIGV2YWx1YXRpbmcgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgYW55IHBvc3NpYmxlIG9wdGltaXphdGlvbiB0YXJnZXRzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NzoxNC4wNTYxOTc3NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTQyMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTk4PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU2LVxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjU3OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NzoxNC4xMTE3NDY0MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzIyMzEzODk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgcGF5bG9hZCBleHByZXNzaW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY2hlY2tzdW0gb2Zmc2V0cyBpbiB0aGUgdHJhbnNwb3J0IGhlYWRlci4gRXNzZW50aWFsbHksIGl0J3MgYWJvdXQgbWFraW5nIHN1cmUgdGhhdCB3aGVuIHNvbWVvbmUgZGVmaW5lcyBhIHJ1bGUgaW52b2x2aW5nIGEgY2hlY2tzdW0gb2Zmc2V0IChmb3IgVENQLCBVRFAvVURQTGl0ZSwgSUNNUHY2LCBvciBJQ01QKSwgd2UgdmFsaWRhdGUgdGhhdCBvZmZzZXQgaXMgKmFjdHVhbGx5KiBhIHZhbGlkIGNoZWNrc3VtIGZpZWxkIHdpdGhpbiB0aGUgcmVzcGVjdGl2ZSBoZWFkZXJzLlxuXG5IZXJlJ3MgdGhlIGdpc3Q6XG5cbiogICAqKlZhbGlkYXRpb24gUGhhc2U6KiogRHVyaW5nIGNvbmZpZ3VyYXRpb24gKGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgdG8gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSwgaWYgdGhlIGJhc2UgaXMgYSB0cmFuc3BvcnQgaGVhZGVyLCBpdCB2ZXJpZmllcyB0aGUgc3BlY2lmaWVkIGNoZWNrc3VtIG9mZnNldCBhZ2FpbnN0IGtub3duIG9mZnNldHMgZm9yIHRob3NlIHByb3RvY29scyAoVENQLCBVRFAsIElDTVB2NiwgSUNNUCkuXG4qICAgKipFdmFsdWF0aW9uIFBoYXNlOioqIFdoZW4gYSBydWxlIGlzIHRyaWdnZXJlZCAoYG5mdF9wYXlsb2FkX3NldF9ldmFsYCB0byBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2ApLCBpdCB1c2VzIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCB0byBjb25maXJtIHRoYXQgdGhlIHBhY2tldCdzICphY3R1YWwqIHRyYW5zcG9ydCBwcm90b2NvbCBtYXRjaGVzIHRoZSBvZmZzZXQgd2UncmUgZXhwZWN0aW5nIChlLmcuLCBpZiB3ZSdyZSBleHBlY3RpbmcgYSBVRFAgY2hlY2tzdW0sIGl0IGNoZWNrcyB0aGUgcGFja2V0ICppcyogYWN0dWFsbHkgVURQKS5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXMsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gSSd2ZSBnb25lIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDpcblxuMS4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBOb3RoaW5nIGhlcmUgaXMgY29weWluZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBwYWNrZXQgaGVhZGVyIHZhbGlkYXRpb24gZHVyaW5nIHJ1bGUgc2V0dXAgYW5kIGV4ZWN1dGlvbi4gTm8gaW5mbyBsZWFrcyBoZXJlLlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogVGhlIGNvZGUgcmVsaWVzIG9uIGZpZWxkcyBsaWtlIGBwa3QtXHUwMDNldHByb3RgLCBgcGt0LVx1MDAzZWZsYWdzYCwgYW5kIGBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0YCwgYnV0IHRoZXNlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGhpbiB0aGUgYHBrdGluZm9gIC8gYG5mdF9wYXlsb2FkX3NldGAgc3RydWN0dXJlcy4gTm90aGluZyBpcyB1bmluaXRpYWxpemVkLlxuMy4gICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbjoqKiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQuIFRoaXMgaXMgb3BlcmF0aW5nIG9uIGV4aXN0aW5nIHN0cnVjdHVyZXMgZHVyaW5nIHZhbGlkYXRpb24gYW5kIGV2YWx1YXRpb24uXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBDcnVjaWFsbHksIHRoZSBwYXRjaCAqcmVzdHJpY3RzKiBgY3N1bV9vZmZzZXRgIHRvIG9ubHkgYWxsb3cgdmFsaWQgTDQgY2hlY2tzdW0gb2Zmc2V0cy4gVGhpcyBpcyBhICpnb29kKiB0aGluZy4gSXQgcHJldmVudHMgd3JpdGluZyB0byBhcmJpdHJhcnkgdHJhbnNwb3J0IHBheWxvYWQgb2Zmc2V0cyBkdXJpbmcgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgd2Ugd2FudCB0byBhdm9pZC4gVGhpcyBrZWVwcyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBmcm9tIGhhcHBlbmluZyBvbiBza2JzLlxuXG5TbywgZ2l2ZW4gdGhpcyBhbmFseXNpcywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwb3RlbnRpYWwgaW5mbyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIGludm9sdmVkIGhlcmUuIFRoaXMgbWVhbnMgS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgam9iLiBLTVNBTidzIHB1cnBvc2UgaXMgdG8gZmluZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBpcyBhYm91dCAqcHJldmVudGluZyogaW5jb3JyZWN0IG1lbW9yeSBtb2RpZmljYXRpb24uIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIG9yIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIHdoYXQgYXJlIGdvaW5nIHRvIG1hdHRlciBoZXJlLiBUaGVzZSBhcmUgdGhlIHJlbGV2YW50IHRvb2xzIGZvciBmaW5kaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1vcmUgdHlwaWNhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBpZiB0aGVyZSB3ZXJlIGFueSBpc3N1ZXMgaW4gdGhlIHBhdGNoJ3MgYm91bmRzIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBhbmQgbm93IGl0J3MganVzdCBhIHF1aWNrIGNoZWNrIHRvIG1ha2Ugc3VyZSBteSByZWFzb25pbmcsIGFuZCB0aGUgdG9vbHMgSSBuZWVkIHRvIHVzZSwgYXJlIGNvcnJlY3QuIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTmAgYW5kIGBLTVNBTlJlYXNvbmluZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NzYsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU3OjI3LjMzNDg4ODI0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5oYW5jZXMgdmFsaWRhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGR1cmluZyBib3RoIGV4cHJlc3Npb24gaW5pdGlhbGl6YXRpb24gKGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCkgYW5kIHBhY2tldCBldmFsdWF0aW9uIChgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2ApLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdDpcXG4xLiBJbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgaW5mby1sZWFrIHZlY3RvcnMuXFxuMi4gUmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy5cXG4zLiBBbGxvY2F0ZSBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LlxcblxcblRoZSBwYXRjaCBzdHJpY3RseSByZXN0cmljdHMgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiBvZmZzZXRzIHRvIHdlbGwtZGVmaW5lZCBMNCBwcm90b2NvbCBjaGVja3N1bSBmaWVsZHMgKFRDUCwgVURQLCBJQ01QLCBJQ01QdjYpLCBwcmV2ZW50aW5nIGluY29ycmVjdCBwYWNrZXQgbWFuZ2xpbmcgLyBvdXQtb2YtYm91bmRzIHBheWxvYWQgd3JpdGVzIG9uIHNrX2J1ZmZzICh3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi9zdGFuZGFyZCBkZXRlY3RvcnMpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90OlxcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cXG4yLiBSZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxcbjMuIEFsbG9jYXRlIG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkuXFxuXFxuVGhlIHBhdGNoIHN0cmljdGx5IHJlc3RyaWN0cyBjaGVja3N1bSByZWNhbGN1bGF0aW9uIG9mZnNldHMgdG8gd2VsbC1kZWZpbmVkIEw0IHByb3RvY29sIGNoZWNrc3VtIGZpZWxkcyAoVENQLCBVRFAsIElDTVAsIElDTVB2NiksIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBhY2tldCBtYW5nbGluZyAvIG91dC1vZi1ib3VuZHMgcGF5bG9hZCB3cml0ZXMgb24gc2tfYnVmZnMgKHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycykuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 18:38:34 +0000 UTC FinishedAt: 2026-09-05 18:57:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NETFILTER" ], "series_id": "ef6c5675-abde-4263-9666-df1ca495eb8b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_payload_set_init", "nft_payload_set_eval", "nft_payload_csum_th_write_ok", "nft_payload_validate_inet_csum_offset", "nft_payload_csum_write_ok" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuaGFuY2VzIHZhbGlkYXRpb24gb2YgdGhlIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0IChgY3N1bV9vZmZzZXRgKSBpbiBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCBkdXJpbmcgYm90aCBleHByZXNzaW9uIGluaXRpYWxpemF0aW9uIChgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGApIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiAoYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgKS4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90OlxuMS4gSW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGluZm8tbGVhayB2ZWN0b3JzLlxuMi4gUmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRlIG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkuXG5cblRoZSBwYXRjaCBzdHJpY3RseSByZXN0cmljdHMgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiBvZmZzZXRzIHRvIHdlbGwtZGVmaW5lZCBMNCBwcm90b2NvbCBjaGVja3N1bSBmaWVsZHMgKFRDUCwgVURQLCBJQ01QLCBJQ01QdjYpLCBwcmV2ZW50aW5nIGluY29ycmVjdCBwYWNrZXQgbWFuZ2xpbmcgLyBvdXQtb2YtYm91bmRzIHBheWxvYWQgd3JpdGVzIG9uIHNrX2J1ZmZzICh3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi9zdGFuZGFyZCBkZXRlY3RvcnMpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgbWFuZ2xpbmcgaW4gbmZfdGFibGVzIChuZnRfcGF5bG9hZCkuIFRoaXMgYWZmZWN0cyBib3RoIHJ1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB2YWxpZGF0aW9uIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiB0aW1lIHZlcmlmaWNhdGlvbi4gVGhlIGNvZGUgaXMgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIHN1YnN5c3RlbSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIG5ldGxpbmsgc29ja2V0cyBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODU5NmY3YmIwNWZmYWRlNDg1MGZhNTU4NGU3ZWE4MTY4NmZiMTUxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTY6MzMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCBlMzE1ZDM1ZjczZDRhLi5mNzMyZTJkNjFmOGM1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZ3JlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWNtcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG5AQCAtMTAwOCwxMSAmIzQzOzEwMDksMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCYjMzQ7cmUtdXBkYXRlXCYjMzQ7IG9mIEw0IGNoZWNrc3VtICovXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHQvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4mIzM5O3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcbi1cdFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cbi1cdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHxcbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuJiM0MztcdFx0ICAgIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcbkBAIC0xMDQ2LDYgJiM0MzsxMDQ5LDI3IEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbiYjNDM7e1xuJiM0MztcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4mIzQzO1x0Y2FzZSBJUFBST1RPX1RDUDpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fVURQOlxuJiM0MztcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxuJiM0MztcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xuJiM0MztcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4mIzQzO1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcbiYjNDM7XHRjYXNlIElQUFJPVE9fSUNNUDpcbiYjNDM7XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4ge1xuQEAgLTEwNTUsOSAmIzQzOzEwNzksMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4gXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4mIzQzO1x0XHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4tXHRcdC8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZVxuLVx0XHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXG4mIzQzO1x0XHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxuJiM0MztcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3NldF9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIG1hbmdsaW5nIGluIG5mX3RhYmxlcyAobmZ0X3BheWxvYWQpLiBUaGlzIGFmZmVjdHMgYm90aCBydWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdmFsaWRhdGlvbiB2aWEgbmV0bGluayBhbmQgcGFja2V0IGV2YWx1YXRpb24gdGltZSB2ZXJpZmljYXRpb24uIFRoZSBjb2RlIGlzIGluIHRoZSBjb3JlIG5ldGZpbHRlciBzdWJzeXN0ZW0gYW5kIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg1OTZmN2JiMDVmZmFkZTQ4NTBmYTU1ODRlN2VhODE2ODZmYjE1MTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDE4OjU2OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IGUzMTVkMzVmNzNkNGEuLmY3MzJlMmQ2MWY4YzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWRwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dyZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWNtcHY2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcHY2LmgmZ3Q7CkBAIC0xMDA4LDExICYjNDM7MTAwOSwxMyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCWlmIChwcml2LSZndDtjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgJiMzNDtyZS11cGRhdGUmIzM0OyBvZiBMNCBjaGVja3N1bSAqLwogCQkJcmV0dXJuIGZhbHNlOwogCi0JCS8qIG5vIGZ1cnRoZXIgY2hlY2sgaGVyZTsgb2Zmc2V0IGNhbiYjMzk7dCBiZSBuZWdhdGl2ZSBzbyBib2d1cwotCQkgKiBvZmZzZXRzIGNhbiBjb3JydXB0IEw0IG9yIHBheWxvYWQgYnV0IG5vdCBsMyBoZWFkZXJzLgotCQkgKiBXZSBhbHJlYWR5IGFsbG93IGFyYml0cmFyeSBsNC9pbm5lciBwYXlsb2FkIHdyaXRlcy4KLQkJICovCi0JCXJldHVybiB0cnVlOwomIzQzOwkJLyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi8KJiM0MzsJCWlmIChwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgfHwKJiM0MzsJCSAgICBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAljYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjoKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgpAQCAtMTA0Niw2ICYjNDM7MTA0OSwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAomIzQzOwkJCQkJIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQomIzQzO3sKJiM0MzsJaWYgKCEocGt0LSZndDtmbGFncyAmYW1wOyBORlRfUEtUSU5GT19MNFBST1RPKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc3dpdGNoIChwa3QtJmd0O3Rwcm90KSB7CiYjNDM7CWNhc2UgSVBQUk9UT19UQ1A6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fVURQOgomIzQzOwljYXNlIElQUFJPVE9fVURQTElURToKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CiYjNDM7CWNhc2UgSVBQUk9UT19JQ01QVjY6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7CiYjNDM7CWNhc2UgSVBQUk9UT19JQ01QOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdikKIHsKQEAgLTEwNTUsOSAmIzQzOzEwNzksMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKIAljYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOgogCQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjoKJiM0MzsJCXJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6Ci0JCS8qIG5laXRoZXIgb2Zmc2V0cyBhcmUgdmFsaWRhdGVkLCBvZmZzZXRzIGNhbm5vdCBiZQotCQkgKiBuZWdhdGl2ZSBzbyByZWFsIGwzIGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuCiYjNDM7CQkvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZQomIzQzOwkJICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgogCQkgKi8KIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBheWxvYWQgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBhbHdheXMgb24gdW5kZXJzdGFuZGluZyAqd2hhdCogY29kZSBpcyBiZWluZyBtb2RpZmllZCBhbmQgd2h5LiBUaGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTmV0ZmlsdGVyIGFuZCBzcGVjaWZpY2FsbHksIHBheWxvYWQgaW5zcGVjdGlvbi9tYW5pcHVsYXRpb24uIFRoZSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXJlIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgd2hpY2ggaGFzIGxpa2VseSBiZWVuIGFsdGVyZWQsIGFuZCB0aGVzZSBuZXcgYWRkaXRpb25zOiBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIEJhc2VkIG9uIHRoZSBuYW1lcyBhbG9uZSwgSSYjMzk7ZCB3YWdlciB0aGVzZSBoYXZlIHNvbWV0aGluZyB0byBkbyB3aXRoIGNoZWNrc3VtIGNhbGN1bGF0aW9ucywgYW5kIHByb2JhYmx5IGRlYWwgd2l0aCB0aGUgdmFsaWRhdGlvbiBvZiB3cml0ZSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggVENQIGFuZCBVRFAgY2hlY2tzdW0gb2Zmc2V0cy4KCk15IG5leHQgc3RlcCBpcyB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmZ0X3BheWxvYWQuY2AgdG8gc2VlIGhvdyB0aGVzZSBuZXcgZnVuY3Rpb25zIGludGVncmF0ZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUgb2xkIGZ1bmN0aW9uIGhhcyBiZWVuIGFsdGVyZWQuIEkmIzM5O2xsIHByb2JhYmx5IGZpcmUgdXAgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgZmlsZSBkaXJlY3RseS4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHJldmlldyBLY29uZmlnIGRlcGVuZGVuY2llcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBkaWN0YXRlIHRoaXMgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoZSBwb3J0YWJpbGl0eSBhbmQgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGF0Y2ggYWNyb3NzIGRpZmZlcmVudCBrZXJuZWwgYnVpbGRzIGFuZCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwMDpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjEwMDE6XHRcdFx0aWYgKGN0eC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSB7XG4xMDAyOlx0XHRcdFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQpXG4xMDAzOlx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMDQ6XHRcbjEwMDU6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDA2Olx0XHRcdH1cbjEwMDc6XHRcdFx0cmV0dXJuIHRydWU7IC8qIHJ1biB0aW1lIHZhbGlkYXRpb24gcmVxdWlyZWQgKi9cbjEwMDg6XHRcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbjEwMDk6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuMTAxMDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjEwMTE6XHRcbjEwMTI6XHRcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbjEwMTM6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4xMDE0Olx0XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuMTAxNTpcdFx0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbjEwMTY6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMTc6XHRcbjEwMTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAxOTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4xMDIwOlx0XHRcdHJldHVybiB0cnVlO1xuMTAyMTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuMTAyMjpcdFx0XHRicmVhaztcbjEwMjM6XHRcdH1cbjEwMjQ6XHRcbjEwMjU6XHRcdHJldHVybiBmYWxzZTtcbjEwMjY6XHR9XG4xMDI3Olx0XG4xMDI4Olx0LyogZG8gbm90IGFsbG93IGFyYml0cmFyeSBuZXR3b3JrIGhlYWRlciBtYW5nbGluZyB2aWEgYm9ndXMgY3N1bV9vZmYuXG4xMDI5Olx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcbjEwMzA6XHQgKiBwbGFuZS5cbjEwMzE6XHQgKi9cbjEwMzI6XHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4xMDMzOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjEwMzQ6XHR7XG4xMDM1Olx0XHRzd2l0Y2ggKHBrdC1cdTAwM2VzdGF0ZS1cdTAwM2VwZikge1xuMTAzNjpcdFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4xMDM3Olx0XHRcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbiYjMzk7dCByZXR1cm4gdHJ1ZSBoZXJlLiAqL1xuMTAzODpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwMzk6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTA0MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDQxOlx0XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuMTA0MjpcdFx0XHRyZXR1cm4gcGt0LVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4xMDQzOlx0XHRcdCAgICAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xuMTA0NDpcdFx0Y2FzZSBORlBST1RPX05FVERFVjpcbjEwNDU6XHRcdFx0cmV0dXJuIHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuMTA0NjpcdFx0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDc6XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdHJldHVybiBmYWxzZTtcbjEwNTA6XHR9XG4xMDUxOlx0XG4xMDUyOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuMTA1MzpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4xMDU0Olx0e1xuMTA1NTpcdFx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcbjEwNTY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA1NzpcdFxuMTA1ODpcdFx0c3dpdGNoIChwa3QtXHUwMDNldHByb3QpIHtcbjEwNTk6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4xMDYwOlx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbjEwNjE6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMDYyOlx0XHRjYXNlIElQUFJPVE9fVURQTElURTpcbjEwNjM6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xuMTA2NDpcdFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcbjEwNjU6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4xMDY2Olx0XHRjYXNlIElQUFJPVE9fSUNNUDpcbjEwNjc6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcbjEwNjg6XHRcdH1cbjEwNjk6XHRcbjEwNzA6XHRcdHJldHVybiBmYWxzZTtcbjEwNzE6XHR9XG4xMDcyOlx0XG4xMDczOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbjEwNzQ6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDc1Olx0e1xuMTA3NjpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbjEwNzc6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuMTA3ODpcdFx0XHRicmVhaztcbjEwNzk6XHRcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4xMDgwOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgxOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMDgyOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgzOlx0XHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbjEwODQ6XHRcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbjEwODU6XHRcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuMTA4NjpcdFx0XHQgKi9cbjEwODc6XHRcdFx0cmV0dXJuIHRydWU7XG4xMDg4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4xMDg5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTAKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgQ2FsbCBTaXRlczogYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AqKgoKUmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIFRvIHRydWx5IGdyYXNwIHRoZWlyIHNpZ25pZmljYW5jZSwgSSBuZWVkIHRvIHRyYWNlIHRoZWlyIHVzYWdlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGNvZGViYXNlLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBsb2dpYyB0aGV5IGFyZSBpbnRlbmRlZCB0byBzdXBwb3J0LiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBhc3NvY2lhdGVkIGNvZGUgbW9yZSBkZWVwbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldHxuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTMtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTUtXHRcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUyPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDczOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3NC1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExMDY9c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcxLVx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzI6XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3My1cdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTk4PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1Ni1cdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNTc6XHRcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBuZnRfcGF5bG9hZC5jYCBpbiB0aGUgQnVpbGQgU3lzdGVtKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZnRfcGF5bG9hZC5jYCBpcyBiZWluZyBoYW5kbGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgTWFrZWZpbGVgLCBhcyBpdCYjMzk7cyB0aGUgbW9yZSBkaXJlY3QgcmVwcmVzZW50YXRpb24gb2YgaG93IHRoZSBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byB0aGF0IHNwZWNpZmljIGZpbGUgbmFtZSwgb3IgcG90ZW50aWFsbHkgZm9yIHBhdHRlcm5zIHJlbGF0ZWQgdG8gbmV0d29yayBmaWx0ZXJpbmcgb3IgTmV0ZmlsdGVyLCBpZiB0aGUgbmFtZSBpdHNlbGYgaXNuJiMzOTt0IG9idmlvdXMuIElmIEkgZG9uJiMzOTt0IGZpbmQgYW55dGhpbmcgZGVmaW5pdGl2ZSB0aGVyZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgcGF5bG9hZCBpbnNwZWN0aW9uLCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluY2x1ZGUgb3IgZXhjbHVkZSB0aGUgYG5mdF9wYXlsb2FkLmNgIHNvdXJjZSBmaWxlIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBob3BpbmcgdG8gaWRlbnRpZnkgdGhlIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRoYXQgY29udHJvbCB3aGV0aGVyIG9yIG5vdCB0aGlzIG1vZHVsZSBpcyBhY3R1YWxseSBidWlsdCBhbmQgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIGltYWdlLiBUaGlzIHNob3VsZCBnZXQgbWUgb24gdGhlIHJpZ2h0IHRyYWNrIHByZXR0eSBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXHRcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4OTpcdFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MC1cdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0xMzU9c3RhdGljIGlubGluZSB2b2lkIG5mdF90cmFjZV92ZXJkaWN0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MTQ0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2Zhc3RfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQ1LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0Ny17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MTQ4Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDktXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0LVx1MDAzZXNrYjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjAzPXN0YXRpYyB2b2lkIGV4cHJfY2FsbF9vcHNfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxNy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoyMTg6XHRYKGUsIG5mdF9wYXlsb2FkX2V2YWwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTIxOS1cdFgoZSwgbmZ0X2NtcF9ldmFsKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM9MjUwPW5mdF9kb19jaGFpbihzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgdm9pZCAqcHJpdilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjgyLVx0XHRcdFx0bmZ0X2JpdHdpc2VfZmFzdF9ldmFsKGV4cHIsIFx1MDAyNnJlZ3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjI4MzpcdFx0XHRlbHNlIGlmIChleHByLVx1MDAzZW9wcyAhPSBcdTAwMjZuZnRfcGF5bG9hZF9mYXN0X29wcyB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjI4NDpcdFx0XHRcdCAhbmZ0X3BheWxvYWRfZmFzdF9ldmFsKGV4cHIsIFx1MDAyNnJlZ3MsIHBrdCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjg1LVx0XHRcdFx0ZXhwcl9jYWxsX29wc19ldmFsKGV4cHIsIFx1MDAyNnJlZ3MsIHBrdCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTM1Mj1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgKm5mdF9iYXNpY190eXBlc1tdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0zNTctXHRcdTAwMjZuZnRfYnl0ZW9yZGVyX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MzU4Olx0XHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0zNTktXHRcdTAwMjZuZnRfZHluc2V0X3R5cGUsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9MTE0PXVuaW9uIG5mdF9jbXBfb2ZmbG9hZF9kYXRhIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMTktXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYzoxMjA6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfbjJoKHVuaW9uIG5mdF9jbXBfb2ZmbG9hZF9kYXRhICpkYXRhLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTIxLVx0XHRcdCAgICBjb25zdCB1OCAqdmFsLCB1MzIgbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTEzOT1zdGF0aWMgaW50IF9fbmZ0X2NtcF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xNTItXHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfT0ZGTE9BRF9GX05FVFdPUksySE9TVCkge1xubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTUzOlx0XHRuZnRfcGF5bG9hZF9uMmgoXHUwMDI2X2RhdGEsICh1OCAqKVx1MDAyNnByaXYtXHUwMDNlZGF0YSwgcmVnLVx1MDAzZWxlbik7XG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYzoxNTQ6XHRcdG5mdF9wYXlsb2FkX24yaChcdTAwMjZfZGF0YW1hc2ssICh1OCAqKVx1MDAyNnJlZy1cdTAwM2VtYXNrLCByZWctXHUwMDNlbGVuKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE1NS1cdFx0ZGF0YSA9ICh1OCAqKVx1MDAyNl9kYXRhO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM9MzY9c3RydWN0IF9fbmZ0X2V4cHIge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzgtXHR1bmlvbiB7XG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjM5Olx0XHRzdHJ1Y3QgbmZ0X3BheWxvYWRcdHBheWxvYWQ7XG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTQwLVx0XHRzdHJ1Y3QgbmZ0X21ldGFcdFx0bWV0YTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jPTI5MD1zdGF0aWMgdm9pZCBuZnRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTI5NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6Mjk2Olx0aWYgKG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0yOTctXHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzA0LVx0Y2FzZSBORlRfSU5ORVJfRVhQUl9QQVlMT0FEOlxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYzozMDU6XHRcdG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKHN0cnVjdCBuZnRfZXhwciAqKVx1MDAyNnByaXYtXHUwMDNlZXhwciwgcmVncywgcGt0LCBcdTAwMjZ0dW5fY3R4KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMzA2LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfcmVidWlsZF92bGFuX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbWFjX29mZixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMC1cdFx0XHRcdFx0IHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NDM9c3RhdGljIGJvb2xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDpuZnRfcGF5bG9hZF9jb3B5X3ZsYW4odTMyICpkLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4pXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9yZWJ1aWxkX3ZsYW5faGRyKHNrYiwgbWFjX29mZiwgXHUwMDI2dmV0aCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NTpzdGF0aWMgaW50IF9fbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0MDppbnQgbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0MS17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTQyLVx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19JTk5FUikgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQzOlx0ICAgIF9fbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KChzdHJ1Y3QgbmZ0X3BrdGluZm8gKilwa3QpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE0NC1cdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTQ5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QodTMyIG9mZnNldCwgdTMyIGxlbilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNTktXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTYwOnZvaWQgbmZ0X3BheWxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTYxLVx0XHQgICAgICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE2My17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTY0Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjUtXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0LVx1MDAzZXNrYjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTc3LVx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzg6XHRcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXHUwMDNlb2Zmc2V0LCBwcml2LVx1MDAzZWxlbikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzk6XHRcdFx0aWYgKCFuZnRfcGF5bG9hZF9jb3B5X3ZsYW4oZGVzdCwgc2tiLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE4MC1cdFx0XHRcdFx0XHQgICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4pKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xOTQtXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxOTU6XHRcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE5Ni1cdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjExLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIxMjpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X3BheWxvYWRfcG9saWN5W05GVEFfUEFZTE9BRF9NQVggJiM0MzsgMV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjEzLVx0W05GVEFfUEFZTE9BRF9TUkVHXVx0XHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9CRTMyLCBORlRfUkVHMzJfTUFYKSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIyMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjQtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjI2LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMjc6XHRzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyOC1cdHUzMiBvZmZzZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNDQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ1LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ2LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNDc6XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0OC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU5LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI2MDpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MS1cdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzctXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc4OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc5LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODA6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODUtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODY6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIEVUSF9BTEVOKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODctXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjkzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk5LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDA6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDEtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDctXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA4Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA5LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE1LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMxNjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNy1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyMy1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSAmIzQzOyBzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjUtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzItXHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMzM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNDYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ4LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDk6XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTAte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTQtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgc2FkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM1NTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNTYtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNjMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM2NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNjUtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM3MzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4OC1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg5Olx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzkwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTYtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwNDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDUtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxNC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNi1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mjc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjgtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyOTpcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzMC17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNC1cdGNhc2UgaHRvbnMoRVRIX1BfSVApOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNTpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM3LVx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mzg6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM5LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ2LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDgtXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDk6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUwLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ1NTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1Ni1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc0LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ3NTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzYtXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Nzc6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDgyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4NC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDkwOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkxLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwNC1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTA1Olx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTA2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEwLVx0Y2FzZSBJUFBST1RPX1RDUDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTE6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTMtXHRjYXNlIElQUFJPVE9fVURQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxNDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTUtXHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjItXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTIzOnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTI0LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTI2LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mjc6XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyOC1cdGludCBlcnI7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMS1cdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMjpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cdFx0YnJlYWs7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM0LVx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzU6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNy1cdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mzg6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzktXHRcdGJyZWFrO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NDg6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ5Olx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTA6XHQuZXZhbFx0XHQ9IG5mdF9wYXlsb2FkX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUxOlx0LmluaXRcdFx0PSBuZnRfcGF5bG9hZF9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MjpcdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTM6XHQub2ZmbG9hZFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1NC19O1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTY6Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTc6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU4Olx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWQpKSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTk6XHQuZXZhbFx0XHQ9IG5mdF9wYXlsb2FkX2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYwOlx0LmluaXRcdFx0PSBuZnRfcGF5bG9hZF9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjI6XHQub2ZmbG9hZFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2My19O1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2NC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjU6dm9pZCBuZnRfcGF5bG9hZF9pbm5lcl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2Ni1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2OC17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY5Olx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NzAtXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0LVx1MDAzZXNrYjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjYxNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2lubmVyX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTctXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE5LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2MjA6XHRzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYyMS1cdHUzMiBiYXNlLCBvZmZzZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY1MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTE6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfaW5uZXJfb3BzID0ge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1MjpcdC50eXBlXHRcdD0gXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTM6XHQuc2l6ZVx0XHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZCkpLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NDpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfaW5uZXJfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTU6XHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU2Olx0LyogZGlyZWN0IGNhbGwgdG8gbmZ0X3BheWxvYWRfaW5uZXJfZXZhbCgpLiAqL1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY1Ny19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz02NTk9c3RhdGljIGlubGluZSB2b2lkIG5mdF9jc3VtX3JlcGxhY2UoX19zdW0xNiAqc3VtLCBfX3dzdW0gZnN1bSwgX193c3VtIHRzdW0pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY2NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NjY6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdWRwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02Njcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NzYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Njc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfbDRjc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NzgtXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY4OC1cdGNhc2UgSVBQUk9UT19VRFA6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Njg5Olx0XHRpZiAoIW5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShza2IsIG5mdF90aG9mZihwa3QpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02OTAtXHRcdFx0cmV0dXJuIC0xO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MDUtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzA2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzA3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzE4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcxOTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzIwLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MjgtXHQgKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3Mjk6XHRpZiAobmZ0X3BheWxvYWRfbDRjc3VtX29mZnNldChwa3QsIHNrYiwgXHUwMDI2bDRjc3VtX29mZnNldCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzMwLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzU1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc1NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2NzdW1faW5ldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1MzIgKnNyYyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NTctXHRcdFx0XHQgX193c3VtIGZzdW0sIF9fd3N1bSB0c3VtLCBpbnQgY3N1bV9vZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc3MS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzI6c3RydWN0IG5mdF9wYXlsb2FkX3NldCB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzczOlx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlc1x0YmFzZTo4O1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc3NC1cdHUxNlx0XHRcdG9mZnNldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzgyLS8qIFRoaXMgaXMgbm90IHN0cnVjdCB2bGFuX2hkci4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODM6c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODQtXHRfX2JlMTZcdFx0XHRoX3ZsYW5fcHJvdG87XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTc4OD1zdGF0aWMgYm9vbFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc4OTpuZnRfcGF5bG9hZF9zZXRfdmxhbihjb25zdCB1MzIgKnNyYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IG9mZnNldCwgdTggbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5MC1cdFx0ICAgICBpbnQgKnZsYW5faGxlbilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTEte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc5MjpcdHN0cnVjdCBuZnRfcGF5bG9hZF92bGFuX2hkciAqdmxhbmg7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkzLVx0X19iZTE2IHZsYW5fcHJvdG87XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwNi1cdFx0fSBlbHNlIGlmIChsZW4gPT0gNCkge1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjgwNzpcdFx0XHR2bGFuaCA9IChzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKilzcmM7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODA4LVx0XHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuaC1cdTAwM2VoX3ZsYW5fcHJvdG8sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTgzNz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjgzODpcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODM5LVx0XHRcdFx0Y29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTg4Mz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfaXA2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjg4NDpcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtODg1LVx0XHRcdFx0Y29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5MDU6c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2FycChjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNi17XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTkyND1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNTpcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTI2LVx0XHRcdFx0ICAgY29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk0NT1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYnJpZGdlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk0NjpcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTQ3LVx0XHRcdFx0ICAgY29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk2Mz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTY0Olx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk2NS1cdFx0XHQgICAgY29uc3QgdTMyICpzcmMpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4Nj1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk5NTpcdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTk2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTAzMS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDMyOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDMzLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNTEtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA1MjpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA1My1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc1LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3OS1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA4MDpcdFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgxLVx0Y2FzZSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwODI6XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA4My1cdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDk1PXN0YXRpYyBib29sIG5mdF90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDk2Olx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwOTcte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMDY6c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDctXHRcdFx0XHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA5LXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTEwOlx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTExMS1cdGNvbnN0IHUzMiAqc3JjID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlc3JlZ107XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMjEtXHRcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExMjI6XHRcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXHUwMDNlb2Zmc2V0LCBwcml2LVx1MDAzZWxlbikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTIzOlx0XHRcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEyNC1cdFx0XHRcdFx0XHQgIHByaXYtXHUwMDNlb2Zmc2V0LCBwcml2LVx1MDAzZWxlbixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE0OC1cdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNDk6XHRcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNTAtXHRcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzEtXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MjpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTczOlx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3NC1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3Ni1cdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncyBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTc3Olx0XHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE3OC1cdFx0XHRnb3RvIGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE4OC1cdFx0aWYgKHBrdC1cdTAwM2VmcmFnb2ZmID09IDAgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE4OTpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTkwLVx0XHRcdGdvdG8gZXJyO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk3LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExOTg6c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExOTktXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyMDItXHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyMDM6XHRzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjA0LVx0aW50IGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1Ni1cdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyNTc6XHRcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNTgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyNzgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI3OTpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX3NldF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4MC1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwgYm9vbCByZXNldClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjgxLXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjgyOlx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4My1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI5OC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX3NldF9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpcdC50eXBlXHRcdD0gXHUwMDI2bmZ0X3BheWxvYWRfdHlwZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzAxOlx0LnNpemVcdFx0PSBORlRfRVhQUl9TSVpFKHNpemVvZihzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0KSksXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMjpcdC5ldmFsXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMzpcdC5pbml0XHRcdD0gbmZ0X3BheWxvYWRfc2V0X2luaXQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwNDpcdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfc2V0X2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwNS19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzICpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA4Om5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzA5LVx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMC17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMxMTpcdGVudW0gbmZ0X3BheWxvYWRfYmFzZXMgYmFzZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzEyLVx0dW5zaWduZWQgaW50IG9mZnNldCwgbGVuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzMzLVx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMzQ6XHRcdHJldHVybiBcdTAwMjZuZnRfcGF5bG9hZF9zZXRfb3BzO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMzUtXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNDktXHQgICAgYmFzZSAhPSBORlRfUEFZTE9BRF9MTF9IRUFERVIgXHUwMDI2XHUwMDI2IGJhc2UgIT0gTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTA6XHRcdHJldHVybiBcdTAwMjZuZnRfcGF5bG9hZF9mYXN0X29wcztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzUxLVx0ZWxzZVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTI6XHRcdHJldHVybiBcdTAwMjZuZnRfcGF5bG9hZF9vcHM7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1My19XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1NC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU1OnN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9wYXlsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzU2LVx0Lm5hbWVcdFx0PSBcJiMzNDtwYXlsb2FkXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTc6XHQuc2VsZWN0X29wc1x0PSBuZnRfcGF5bG9hZF9zZWxlY3Rfb3BzLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzNTg6XHQuaW5uZXJfb3BzXHQ9IFx1MDAyNm5mdF9wYXlsb2FkX2lubmVyX29wcyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU5Olx0LnBvbGljeVx0XHQ9IG5mdF9wYXlsb2FkX3BvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzYwLVx0Lm1heGF0dHJcdD0gTkZUQV9QQVlMT0FEX01BWCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBuZl90YWJsZXMgYW5kIG5mdF9wYXlsb2FkIGluIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBuZl90YWJsZXNgIGFuZCBzcGVjaWZpY2FsbHkgYG5mdF9wYXlsb2FkYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzLCBhbmQgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgZ3Jhc3AgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0byB3YXRjaCBvdXQgZm9yLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGBmaW5kYCBvbiB0aGUgS2NvbmZpZyB0cmVlLCBidXQgSSBhbnRpY2lwYXRlIGhhdmluZyB0byB0cmFjZSB0aHJvdWdoIGEgZmV3IGluY2x1ZGVzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBnb2FsIGlzIGEgcXVpY2sgYW5kIGRpcnR5IGNvbmZpZ3VyYXRpb24gb3ZlcnZpZXcgb2YgdGhlc2UgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzgtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM5Olx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MC1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3MTppZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDc0Olx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDc1Olx0c2VsZWN0IE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc2LVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01NTA9Y29uZmlnIE5GVF9OQVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUyLVx0c2VsZWN0IE5GX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU1MzpcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lQVjQgfHwgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NTQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5hdCBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NTg2PWNvbmZpZyBORlRfUkVKRUNUX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1ODc6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTg4LVx0ZGVmYXVsdCBORlRfUkVKRUNUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTYwOD1jb25maWcgTkZUX0ZJQl9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjA5Olx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxMC1cdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjctXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgTkZfU09DS0VUX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDItXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDM6XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDU6XHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDYtXHRoZWxwXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTY2MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Njg5PWNvbmZpZyBORlRfUkVKRUNUX05FVERFVlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02OTgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njk5OmVuZGlmICMgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDE6ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTcxMT1jb25maWcgTkZfRkxPV19UQUJMRVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTQtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnOjcxNTpcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzE2LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA4MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYG5mX3RhYmxlc2AgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG5mX3RhYmxlc2AgaXMgYmVpbmcgY29uc3RydWN0ZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdGhhdCBpcyBnb2luZyB0byBiZSB0aGUgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRoZSBidWlsZCBydWxlcyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBOZXRmaWx0ZXIg4oCTIGFuZCB0aGVyZWZvcmUgYG5mX3RhYmxlc2Ag4oCTIHRvIHJlc2lkZS4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbW1hbmRzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGhvdyBpdCYjMzk7cyBsaW5rZWQsIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgaW5jbHVkZWQsIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIGNvbXBpbGF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGUgYG5mX3RhYmxlc2AgY29tcG9uZW50IGNvbWVzIHRvZ2V0aGVyIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHByb2Nlc3MuIEhvcGVmdWxseSwgaXQmIzM5O3Mgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBlYXN5IHRvIGZvbGxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfdGFibGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg0PW9iai0kKENPTkZJR19ORl9EVVBfTkVUREVWKVx0JiM0Mzs9IG5mX2R1cF9uZXRkZXYub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS04NS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODY6IyBuZl90YWJsZXNcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODc6bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg4Olx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODktXHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkxLVx0XHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjkyOlx0XHQgIG5mdF9jaGFpbl9yb3V0ZS5vIG5mX3RhYmxlc19vZmZsb2FkLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTMtXHRcdCAgbmZ0X3NldF9oYXNoLm8gbmZ0X3NldF9iaXRtYXAubyBuZnRfc2V0X3JidHJlZS5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT05Nz1pZm5kZWYgQ09ORklHX1VNTFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5ODpuZl90YWJsZXMtb2JqcyAmIzQzOz0gbmZ0X3NldF9waXBhcG9fYXZ4Mi5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTk5LWVuZGlmXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMDM9aWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwNDpuZl90YWJsZXMtb2JqcyAmIzQzOz0gbmZ0X2N0X2Zhc3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDUtZW5kaWZcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTA2PWVuZGlmXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEwNy1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTA4Om9iai0kKENPTkZJR19ORl9UQUJMRVMpXHRcdCYjNDM7PSBuZl90YWJsZXMub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDktb2JqLSQoQ09ORklHX05GVF9DT01QQVQpXHQmIzQzOz0gbmZ0X2NvbXBhdC5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzU9b2JqLSQoQ09ORklHX05GVF9OQVQpXHRcdCYjNDM7PSBuZnRfY2hhaW5fbmF0Lm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTM2LVxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMzc6IyBuZl90YWJsZXMgbmV0ZGV2XG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfTkZUX0RVUF9ORVRERVYpXHQmIzQzOz0gbmZ0X2R1cF9uZXRkZXYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg5NQoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiAxMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBuZXRmaWx0ZXIvbmZfdGFibGVzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIGEgcGF0Y2ggdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBjaGVja3N1bSB2YWxpZGF0aW9uIGFuZCBwYXlsb2FkIG1hbmdsaW5nIGxvZ2ljIHdpdGhpbiB0aGUgYG5mdF9wYXlsb2FkLmNgIGZpbGUgb2YgdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyBjaGFuZ2VzIHdpdGhpbiB0aGUgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKClgIGZ1bmN0aW9ucy4gVGhlIGludHJvZHVjdGlvbiBvZiBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vaygpYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmluaW5nIHRoZSBsb2dpYyB0byBlbnN1cmUgdGhhdCBjaGVja3N1bSBtb2RpZmljYXRpb25zIGFyZSBvbmx5IHBlcm1pdHRlZCBmb3IgdmFsaWQgdHJhbnNwb3J0IGhlYWRlciBvZmZzZXRzLCBleHBsaWNpdGx5IGNoZWNraW5nIGFnYWluc3QgVENQLCBVRFAsIFVEUC1MaXRlLCBJQ01QdjYgYW5kIElDTVAgaGVhZGVycy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgcmVhY2hhYmxlPyYjMzQ7LiBBYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgd2hpY2ggbWVhbnMgSSBjYW4gZGlyZWN0bHkgaW5mbHVlbmNlIGl0cyBiZWhhdmlvciB2aWEgYE5GVF9NU0dfTkVXUlVMRWAgYW5kIHNpbWlsYXIgbmV0bGluayBtZXNzYWdlcy4gVGhlIHBhY2tldCBldmFsdWF0aW9uIGl0c2VsZiBvY2N1cnMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIHBhdGguCgomIzM0O0lzIGl0IHdvcnRoIGZ1enppbmc/JiMzNDsuIFdpdGhvdXQgYSBkb3VidC4gQW55IG1vZGlmaWNhdGlvbiB0byBjb3JlIHBhY2tldCBtYW5nbGluZyBsb2dpYyBsaWtlIHRoaXMsIGVzcGVjaWFsbHkgd2hlbiBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rLCBzY3JlYW1zIGZ1enppbmcgdGFyZ2V0LiBUaGUgYG5mX3RhYmxlc2Agc3Vic3lzdGVtIGlzIHdlbGwtZGVmaW5lZCBpbiBzeXprYWxsZXIsIHNvIHRhcmdldGluZyBpdCBmb3IgZnV6emluZyBzaG91bGQgYmUgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgbmZ0X3BheWxvYWRfc2V0X2luaXRgIChpbml0aWFsaXphdGlvbikKKiAgIGBuZnRfcGF5bG9hZF9zZXRfZXZhbGAgKGV2YWx1YXRpb24pCiogICBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AgKG5ldyBoZWxwZXIgZnVuY3Rpb24pCiogICBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgKHZhbGlkYXRpb24gZnVuY3Rpb24pCiogICBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AgKGNoZWNrc3VtIHdyaXRlIGNoZWNrKQoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGV5IGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG5mdF9wYXlsb2FkLmNgLiBJbiBhIHN0YW5kYXJkIGtlcm5lbCBidWlsZCAoYW1kNjQsIGZvciBpbnN0YW5jZSksIHRoZXNlICp3aWxsKiBiZSBjb21waWxlZCBpbnRvIHN5bWJvbHMgaW4gdm1saW51eCwgdW5sZXNzIGhlYXZpbHkgaW5saW5lZCDigJMgYnV0IEkgZG9uJiMzOTt0IHNlZSB0aGF0IGhhcHBlbmluZyB3aXRoIHRoZSBgc2V0X2luaXRgIGFuZCBgc2V0X2V2YWxgIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgc2VlIGBORl9UQUJMRVNgIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLCB3aGljaCBjb250cm9scyB0aGUgYnVpbGRpbmcgb2YgYG5mX3RhYmxlcy5vYCAod2hpY2ggaW5jbHVkZXMgYG5mdF9wYXlsb2FkLm9gKS4gSXRzIHBhcmVudCBpcyBgTkVURklMVEVSYCwgd2hpY2ggSSYjMzk7bGwgYmUgc3VyZSBpcyBlbmFibGVkLiBJIGFsc28gc2VlIGBzZWxlY3QgTkVURklMVEVSX05FVExJTktgIGFuZCBgZGVwZW5kcyBvbiBORVRGSUxURVJgLCBzbyBJJiMzOTtsbCBrZWVwIHRoYXQgaW4gbWluZC4KCk9rYXksIGxldCYjMzk7cyBzdW1tYXJpemUgYWxsIHRoaXMgaW4gdGhlIHN0YW5kYXJkIGZ1enppbmcgcmVwb3J0IGZvcm1hdDoKCiogICBXb3J0aEZ1enppbmc6IGB0cnVlYAoqICAgRW5hYmxlQ29uZmlnczogYFsmIzM0O05GX1RBQkxFUyYjMzQ7LCAmIzM0O05FVEZJTFRFUiYjMzQ7XWAKKiAgIEZvY3VzU3ltYm9sczogYFsmIzM0O25mdF9wYXlsb2FkX3NldF9pbml0JiMzNDssICYjMzQ7bmZ0X3BheWxvYWRfc2V0X2V2YWwmIzM0OywgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssICYjMzQ7bmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldCYjMzQ7LCAmIzM0O25mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2smIzM0O11gCiogICBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24uCgpUaGF0IGNvdmVycyBpdC4gVGltZSB0byBydW4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiBhbmQgcGFja2V0IGV2YWx1YXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgcGF5bG9hZCBtYW5nbGluZyBpbiBuZl90YWJsZXMgKG5mdF9wYXlsb2FkKS4gVGhpcyBhZmZlY3RzIGJvdGggcnVsZSBpbml0aWFsaXphdGlvbiB0aW1lIHZhbGlkYXRpb24gdmlhIG5ldGxpbmsgYW5kIHBhY2tldCBldmFsdWF0aW9uIHRpbWUgdmVyaWZpY2F0aW9uLiBUaGUgY29kZSBpcyBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIGFuZCBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgbmV0bGluayBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9zZXRfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjaGVja3N1bSBvZmZzZXQgdmFsaWRhdGlvbiBhbmQgcGFja2V0IGV2YWx1YXRpb24gZm9yIHRyYW5zcG9ydCBoZWFkZXIgcGF5bG9hZCBtYW5nbGluZyBpbiBuZl90YWJsZXMgKG5mdF9wYXlsb2FkKS4gVGhpcyBhZmZlY3RzIGJvdGggcnVsZSBpbml0aWFsaXphdGlvbiB0aW1lIHZhbGlkYXRpb24gdmlhIG5ldGxpbmsgYW5kIHBhY2tldCBldmFsdWF0aW9uIHRpbWUgdmVyaWZpY2F0aW9uLiBUaGUgY29kZSBpcyBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIGFuZCBlYXNpbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRmaWx0ZXIgbmV0bGluayBzb2NrZXRzIGFuZCBuZXR3b3JrIHBhY2tldCBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdDpcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cbjIuIFJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0ZSBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggc3RyaWN0bHkgcmVzdHJpY3RzIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gb2Zmc2V0cyB0byB3ZWxsLWRlZmluZWQgTDQgcHJvdG9jb2wgY2hlY2tzdW0gZmllbGRzIChUQ1AsIFVEUCwgSUNNUCwgSUNNUHY2KSwgcHJldmVudGluZyBpbmNvcnJlY3QgcGFja2V0IG1hbmdsaW5nIC8gb3V0LW9mLWJvdW5kcyBwYXlsb2FkIHdyaXRlcyBvbiBza19idWZmcyAod2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NTk2ZjdiYjA1ZmZhZGU0ODUwZmE1NTg0ZTdlYTgxNjg2ZmIxNTEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxODo1NjozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwppbmRleCBlMzE1ZDM1ZjczZDRhLi5mNzMyZTJkNjFmOGM1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9ncmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWNtcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ljbXB2Ni5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwpAQCAtMTAwOCwxMSAmIzQzOzEwMDksMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQlpZiAocHJpdi0mZ3Q7Y3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yICYjMzQ7cmUtdXBkYXRlJiMzNDsgb2YgTDQgY2hlY2tzdW0gKi8KIAkJCXJldHVybiBmYWxzZTsKIAotCQkvKiBubyBmdXJ0aGVyIGNoZWNrIGhlcmU7IG9mZnNldCBjYW4mIzM5O3QgYmUgbmVnYXRpdmUgc28gYm9ndXMKLQkJICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy4KLQkJICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuCi0JCSAqLwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCS8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovCiYjNDM7CQlpZiAocHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8CiYjNDM7CQkgICAgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6CiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKQEAgLTEwNDYsNiAmIzQzOzEwNDksMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LAogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdiwKJiM0MzsJCQkJCSBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCkKJiM0Mzt7CiYjNDM7CWlmICghKHBrdC0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX1BLVElORk9fTDRQUk9UTykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGt0LSZndDt0cHJvdCkgewomIzQzOwljYXNlIElQUFJPVE9fVENQOgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKJiM0MzsJY2FzZSBJUFBST1RPX1VEUDoKJiM0MzsJY2FzZSBJUFBST1RPX1VEUExJVEU6CiYjNDM7CQlyZXR1cm4gcHJpdi0mZ3Q7Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUFY2OgomIzQzOwkJcmV0dXJuIHByaXYtJmd0O2NzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pOwomIzQzOwljYXNlIElQUFJPVE9fSUNNUDoKJiM0MzsJCXJldHVybiBwcml2LSZndDtjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcGhkciwgY2hlY2tzdW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpCiB7CkBAIC0xMDU1LDkgJiM0MzsxMDc5LDEwIEBAIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJY2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjoKIAkJcmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTsKIAljYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6CiYjNDM7CQlyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpOwogCWNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOgotCQkvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmUKLQkJICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLgomIzQzOwkJLyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmUKJiM0MzsJCSAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMvbDQgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC4KIAkJICovCiAJCXJldHVybiB0cnVlOwogCWNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byBhbmFseXplIHRoaXMgTGludXgga2VybmVsIHBhdGNoIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIHRvIGRldGVybWluZSB3aGV0aGVyIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5LCBvciBpZiBLQVNBTiBpcyBzdWZmaWNpZW50LiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHZ1bG5lcmFiaWxpdHkgYXVkaXRpbmcgdGFzaywgYSBiaXQgb2YgZGVmZW5zaXZlIGNvZGUgcmV2aWV3LCBzcGVjaWZpY2FsbHkgY2hvb3NpbmcgdGhlIHJpZ2h0IHNhbml0aXplci4gR29vZCwgbG93IHNldmVyaXR5LCBiZW5pZ24gdGFzayAtIEkgY2FuIGNlcnRhaW5seSBoYW5kbGUgdGhpcy4KCkZpcnN0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyB0b3VjaGluZyBgbmZ0X3BheWxvYWQuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAsIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYW5kIG5vdyBhIG5ldyBvbmUgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tgLiBBaCwgZ290IGl0LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRpZ2h0ZW5pbmcgdGhlIHZhbGlkYXRpb24gb2YgYGNzdW1fb2Zmc2V0YCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVJgLiBQcmV2aW91c2x5LCBpdCBzZWVtcyB0aGlzIG9mZnNldCB3YXNuJiMzOTt0IHN0cmljdGx5IGNoZWNrZWQgZm9yIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW0gdXBkYXRlcywgd2hpY2ggY291bGQgb3BlbiBhIGRvb3IgdG8gYXJiaXRyYXJ5IG9mZnNldHMgaW4gTDQvcGF5bG9hZC4gTm93LCB0aGUgY29kZSBpcyB2ZXJpZnlpbmcgdGhhdCB0aGUgYGNzdW1fb2Zmc2V0YCBhbGlnbnMgd2l0aCBrbm93biBMNCBoZWFkZXIgY2hlY2tzdW0gb2Zmc2V0cy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgdGhlIG9mZnNldCBtYXRjaGVzIHdoZXJlIHRob3NlIGNoZWNrc3VtcyAqc2hvdWxkKiBiZSAodGNwaGRyLCB1ZHBoZHIsIElDTVB2NiBhbmQgSUNNUCkuIFBsdXMsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrIGluIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KWAgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGJhc2UgaXMgYE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVJgLgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIHRoZSBhdmFpbGFibGUgdG9vbHMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gRnJvbSBoZXJlLCBJIHdpbGwgYmVnaW4gdG8gYW5hbHl6ZSB0aGUgY2hhbmdlcyB0byBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCBvZiBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAwMDpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjEwMDE6XHRcdFx0aWYgKGN0eC1cdTAwM2VmYW1pbHkgPT0gTkZQUk9UT19JUFY0KSB7XG4xMDAyOlx0XHRcdFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQpXG4xMDAzOlx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMDQ6XHRcbjEwMDU6XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDA2Olx0XHRcdH1cbjEwMDc6XHRcdFx0cmV0dXJuIHRydWU7IC8qIHJ1biB0aW1lIHZhbGlkYXRpb24gcmVxdWlyZWQgKi9cbjEwMDg6XHRcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcbjEwMDk6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFwmIzM0O3JlLXVwZGF0ZVwmIzM0OyBvZiBMNCBjaGVja3N1bSAqL1xuMTAxMDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjEwMTE6XHRcbjEwMTI6XHRcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbjEwMTM6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4xMDE0Olx0XHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuMTAxNTpcdFx0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbjEwMTY6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjEwMTc6XHRcbjEwMTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTAxOTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4xMDIwOlx0XHRcdHJldHVybiB0cnVlO1xuMTAyMTpcdFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuMTAyMjpcdFx0XHRicmVhaztcbjEwMjM6XHRcdH1cbjEwMjQ6XHRcbjEwMjU6XHRcdHJldHVybiBmYWxzZTtcbjEwMjY6XHR9XG4xMDI3Olx0XG4xMDI4Olx0LyogZG8gbm90IGFsbG93IGFyYml0cmFyeSBuZXR3b3JrIGhlYWRlciBtYW5nbGluZyB2aWEgYm9ndXMgY3N1bV9vZmYuXG4xMDI5Olx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcbjEwMzA6XHQgKiBwbGFuZS5cbjEwMzE6XHQgKi9cbjEwMzI6XHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4xMDMzOlx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjEwMzQ6XHR7XG4xMDM1Olx0XHRzd2l0Y2ggKHBrdC1cdTAwM2VzdGF0ZS1cdTAwM2VwZikge1xuMTAzNjpcdFx0Y2FzZSBORlBST1RPX0lQVjQ6XG4xMDM3Olx0XHRcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbiYjMzk7dCByZXR1cm4gdHJ1ZSBoZXJlLiAqL1xuMTAzODpcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwMzk6XHRcdGNhc2UgTkZQUk9UT19JUFY2OlxuMTA0MDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDQxOlx0XHRjYXNlIE5GUFJPVE9fQlJJREdFOlxuMTA0MjpcdFx0XHRyZXR1cm4gcGt0LVx1MDAzZWV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2XG4xMDQzOlx0XHRcdCAgICAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spO1xuMTA0NDpcdFx0Y2FzZSBORlBST1RPX05FVERFVjpcbjEwNDU6XHRcdFx0cmV0dXJuIHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNlxuMTA0NjpcdFx0XHQgICAgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcbjEwNDc6XHRcdH1cbjEwNDg6XHRcbjEwNDk6XHRcdHJldHVybiBmYWxzZTtcbjEwNTA6XHR9XG4xMDUxOlx0XG4xMDUyOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuMTA1MzpcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXG4xMDU0Olx0e1xuMTA1NTpcdFx0aWYgKCEocGt0LVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcbjEwNTY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA1NzpcdFxuMTA1ODpcdFx0c3dpdGNoIChwa3QtXHUwMDNldHByb3QpIHtcbjEwNTk6XHRcdGNhc2UgSVBQUk9UT19UQ1A6XG4xMDYwOlx0XHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbjEwNjE6XHRcdGNhc2UgSVBQUk9UT19VRFA6XG4xMDYyOlx0XHRjYXNlIElQUFJPVE9fVURQTElURTpcbjEwNjM6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xuMTA2NDpcdFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcbjEwNjU6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4xMDY2Olx0XHRjYXNlIElQUFJPVE9fSUNNUDpcbjEwNjc6XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcbjEwNjg6XHRcdH1cbjEwNjk6XHRcbjEwNzA6XHRcdHJldHVybiBmYWxzZTtcbjEwNzE6XHR9XG4xMDcyOlx0XG4xMDczOlx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbjEwNzQ6XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4xMDc1Olx0e1xuMTA3NjpcdFx0c3dpdGNoIChwcml2LVx1MDAzZWJhc2UpIHtcbjEwNzc6XHRcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxuMTA3ODpcdFx0XHRicmVhaztcbjEwNzk6XHRcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4xMDgwOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgxOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMDgyOlx0XHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4xMDgzOlx0XHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbjEwODQ6XHRcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbjEwODU6XHRcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuMTA4NjpcdFx0XHQgKi9cbjEwODc6XHRcdFx0cmV0dXJuIHRydWU7XG4xMDg4Olx0XHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4xMDg5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDMxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGF0IHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBDaGVja3N1bSBWYWxpZGF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGFuZCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjaGVja3N1bSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gRXNzZW50aWFsbHksIHdoZXJlIGFyZSB0aGVzZSBzcGVjaWZpYyB2YWxpZGF0aW9uIGFuZCB3cml0ZSBjaGVja3MgYmVpbmcgaW52b2tlZD8gSXMgaXQgaW4gdGhlIGluaXRpYWwgc2V0dXAsIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgb3IgYm90aD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcHVycG9zZSBvZiB0aGVzZSBmdW5jdGlvbnMuIEnigJlsbCBiZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb25zIGhhcHBlbi4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHJlbGV2YW50IHBhY2tldCB0eXBlcywgYW5kIHRoZSBuZXR3b3JrIGxheWVycyB0aGUgY2hlY2tzIGFyZSByZWxldmFudCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwNTI9c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcyLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwNzM6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDc0LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MTEwNj1zdGF0aWMgdm9pZCBuZnRfcGF5bG9hZF9zZXRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzEtXHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MjpcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTczLVx0XHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1ODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgUHJvY2Vzc2luZyBEZXRhaWxzKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGJ1c2luZXNzLiBUaGVzZSBhcmUgb2J2aW91c2x5IGNyaXRpY2FsIHBpZWNlcyBmb3IgaGFuZGxpbmcgbmV0d29yayB0cmFmZmljIHdpdGhpbiB0aGUgYG5mdGFibGVzYCBmcmFtZXdvcmsuIEtub3dpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyBwYWNrZXQgcGF5bG9hZHMgYXJlIG1vZGlmaWVkIGFuZCBjaGVja3N1bXMgYXJlIHZlcmlmaWVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZXNlIGZ1bmN0aW9ucy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IHRoZXkgaW1wYWN0IHRoZSBvdmVyYWxsIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdGlmIChwa3QtXHUwMDNldHByb3QgIT0gSVBQUk9UT19UQ1ApXG4xMTAxOlx0XHRcdHJldHVybiB0cnVlO1xuMTEwMjpcdFxuMTEwMzpcdFx0cmV0dXJuIHByaXYtXHUwMDNlb2Zmc2V0IFx1MDAzZSBkb2ZmIHx8IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzYz0gZG9mZjtcbjExMDQ6XHR9XG4xMTA1Olx0XG4xMTA2Olx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuMTEwNzpcdFx0XHRcdFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcbjExMDg6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcbjExMDk6XHR7XG4xMTEwOlx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbjExMTE6XHRcdGNvbnN0IHUzMiAqc3JjID0gXHUwMDI2cmVncy1cdTAwM2VkYXRhW3ByaXYtXHUwMDNlc3JlZ107XG4xMTEyOlx0XHRpbnQgb2Zmc2V0LCBjc3VtX29mZnNldCwgdmxhbl9obGVuID0gMDtcbjExMTM6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXHUwMDNlc2tiO1xuMTExNDpcdFx0X193c3VtIGZzdW0sIHRzdW07XG4xMTE1Olx0XG4xMTE2Olx0XHRzd2l0Y2ggKHByaXYtXHUwMDNlYmFzZSkge1xuMTExNzpcdFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XG4xMTE4Olx0XHRcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuMTExOTpcdFx0XHRcdGdvdG8gZXJyO1xuMTEyMDpcdFxuMTEyMTpcdFx0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcdTAwMjZcdTAwMjZcbjExMjI6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cdTAwM2VvZmZzZXQsIHByaXYtXHUwMDNlbGVuKSkge1xuMTEyMzpcdFx0XHRcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXG4xMTI0Olx0XHRcdFx0XHRcdFx0ICBwcml2LVx1MDAzZW9mZnNldCwgcHJpdi1cdTAwM2VsZW4sXG4xMTI1Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ2bGFuX2hsZW4pKVxuMTEyNjpcdFx0XHRcdFx0Z290byBlcnI7XG4xMTI3Olx0XG4xMTI4Olx0XHRcdFx0aWYgKCF2bGFuX2hsZW4pXG4xMTI5Olx0XHRcdFx0XHRyZXR1cm47XG4xMTMwOlx0XHRcdH1cbjExMzE6XHRcbjExMzI6XHRcdFx0b2Zmc2V0ID0gc2tiX21hY19oZWFkZXIoc2tiKSAtIHNrYi1cdTAwM2VkYXRhIC0gdmxhbl9obGVuO1xuMTEzMzpcdFx0XHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXHUwMDNlbGVuICYjNDM7IHByaXYtXHUwMDNlb2Zmc2V0ICYjNDM7IG9mZnNldCkpXG4xMTM0Olx0XHRcdFx0Z290byBlcnI7XG4xMTM1Olx0XHRcdGJyZWFrO1xuMTEzNjpcdFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcbjExMzc6XHRcdFx0aWYgKCFuZnRfbmhfd3JpdGVfb2socGt0LCBwcml2LCBzcmMpKVxuMTEzODpcdFx0XHRcdGdvdG8gZXJyO1xuMTEzOTpcdFx0XHRvZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcbjExNDA6XHRcdFx0YnJlYWs7XG4xMTQxOlx0XHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4xMTQyOlx0XHRcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykgfHwgcGt0LVx1MDAzZWZyYWdvZmYpXG4xMTQzOlx0XHRcdFx0Z290byBlcnI7XG4xMTQ0Olx0XHRcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXG4xMTQ1Olx0XHRcdFx0Z290byBlcnI7XG4xMTQ2Olx0XHRcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xuMTE0NzpcdFx0XHRicmVhaztcbjExNDg6XHRcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxuMTE0OTpcdFx0XHRvZmZzZXQgPSBuZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQocGt0KTtcbjExNTA6XHRcdFx0aWYgKG9mZnNldCBcdTAwM2MgMClcbjExNTE6XHRcdFx0XHRnb3RvIGVycjtcbjExNTI6XHRcdFx0YnJlYWs7XG4xMTUzOlx0XHRkZWZhdWx0OlxuMTE1NDpcdFx0XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKDEpO1xuMTE1NTpcdFx0XHRnb3RvIGVycjtcbjExNTY6XHRcdH1cbjExNTc6XHRcbjExNTg6XHRcdGNzdW1fb2Zmc2V0ID0gb2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlY3N1bV9vZmZzZXQ7XG4xMTU5Olx0XHRvZmZzZXQgJiM0Mzs9IHByaXYtXHUwMDNlb2Zmc2V0O1xuMTE2MDpcdFxuMTE2MTpcdFx0aWYgKChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgfHwgcHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbjExNjI6XHRcdCAgICAoKHByaXYtXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFx1MDAyNlx1MDAyNlxuMTE2MzpcdFx0ICAgICAgcHJpdi1cdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcbjExNjQ6XHRcdCAgICAgc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSkge1xuMTE2NTpcdFx0XHRpZiAob2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuKVxuMTE2NjpcdFx0XHRcdGdvdG8gZXJyO1xuMTE2NzpcdFxuMTE2ODpcdFx0XHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVx1MDAzZWxlbiwgMCk7XG4xMTY5Olx0XHRcdHRzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBwcml2LVx1MDAzZWxlbiwgMCk7XG4xMTcwOlx0XG4xMTcxOlx0XHRcdGlmIChwcml2LVx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXHUwMDI2XHUwMDI2XG4xMTcyOlx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKHBrdCwgcHJpdikgXHUwMDI2XHUwMDI2XG4xMTczOlx0XHRcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcbjExNzQ6XHRcdFx0XHRnb3RvIGVycjtcbjExNzU6XHRcbjExNzY6XHRcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9mbGFncyBcdTAwMjZcdTAwMjZcbjExNzc6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2w0Y3N1bV91cGRhdGUocGt0LCBza2IsIGZzdW0sIHRzdW0pIFx1MDAzYyAwKVxuMTE3ODpcdFx0XHRcdGdvdG8gZXJyO1xuMTE3OTpcdFx0fVxuMTE4MDpcdFxuMTE4MTpcdFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICYjNDM7IHByaXYtXHUwMDNlbGVuLCAwKSkgfHxcbjExODI6XHRcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVx1MDAzZWxlbikgXHUwMDNjIDApXG4xMTgzOlx0XHRcdGdvdG8gZXJyO1xuMTE4NDpcdFxuMTE4NTpcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcdTAwMjZcdTAwMjZcbjExODY6XHRcdCAgICBwa3QtXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFx1MDAyNlx1MDAyNlxuMTE4NzpcdFx0ICAgIHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuMTE4ODpcdFx0XHRpZiAocGt0LVx1MDAzZWZyYWdvZmYgPT0gMCBcdTAwMjZcdTAwMjZcbjExODk6XHRcdFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4OAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggZm9yIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIGl0cyB1c2FnZS4gS25vd2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQgZm9yIGl0cyByb2xlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCYjMzk7cyBiZWluZyBjYWxsZWQg4oCTIHdoYXQgc3BlY2lmaWMgbmV0d29yayBjb25kaXRpb25zIG9yIHJ1bGUgY29uZmlndXJhdGlvbnMgdHJpZ2dlciBpdHMgZXhlY3V0aW9uLiBUaGlzIGtpbmQgb2YgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcnVjaWFsIGZvciBldmFsdWF0aW5nIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIG9yIGFueSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gdGFyZ2V0cy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4Nj1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5NS1cdFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTExOTg9c3RhdGljIGludCBuZnRfcGF5bG9hZF9zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU2LVx0Y2FzZSBORlRfUEFZTE9BRF9DU1VNX0lORVQ6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI1NzpcdFx0aWYgKCFuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGN0eCwgcHJpdikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1OC1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3NgoJCQkJCQkJb3V0cHV0OiAyMjIKCQkJCQkJCXRob3VnaHRzOiA1NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgcGF5bG9hZCBleHByZXNzaW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY2hlY2tzdW0gb2Zmc2V0cyBpbiB0aGUgdHJhbnNwb3J0IGhlYWRlci4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgd2hlbiBzb21lb25lIGRlZmluZXMgYSBydWxlIGludm9sdmluZyBhIGNoZWNrc3VtIG9mZnNldCAoZm9yIFRDUCwgVURQL1VEUExpdGUsIElDTVB2Niwgb3IgSUNNUCksIHdlIHZhbGlkYXRlIHRoYXQgb2Zmc2V0IGlzICphY3R1YWxseSogYSB2YWxpZCBjaGVja3N1bSBmaWVsZCB3aXRoaW4gdGhlIHJlc3BlY3RpdmUgaGVhZGVycy4KCkhlcmUmIzM5O3MgdGhlIGdpc3Q6CgoqICAgKipWYWxpZGF0aW9uIFBoYXNlOioqIER1cmluZyBjb25maWd1cmF0aW9uIChgbmZ0X3BheWxvYWRfc2V0X2luaXRgIHRvIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCksIGlmIHRoZSBiYXNlIGlzIGEgdHJhbnNwb3J0IGhlYWRlciwgaXQgdmVyaWZpZXMgdGhlIHNwZWNpZmllZCBjaGVja3N1bSBvZmZzZXQgYWdhaW5zdCBrbm93biBvZmZzZXRzIGZvciB0aG9zZSBwcm90b2NvbHMgKFRDUCwgVURQLCBJQ01QdjYsIElDTVApLgoqICAgKipFdmFsdWF0aW9uIFBoYXNlOioqIFdoZW4gYSBydWxlIGlzIHRyaWdnZXJlZCAoYG5mdF9wYXlsb2FkX3NldF9ldmFsYCB0byBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2ApLCBpdCB1c2VzIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCB0byBjb25maXJtIHRoYXQgdGhlIHBhY2tldCYjMzk7cyAqYWN0dWFsKiB0cmFuc3BvcnQgcHJvdG9jb2wgbWF0Y2hlcyB0aGUgb2Zmc2V0IHdlJiMzOTtyZSBleHBlY3RpbmcgKGUuZy4sIGlmIHdlJiMzOTtyZSBleHBlY3RpbmcgYSBVRFAgY2hlY2tzdW0sIGl0IGNoZWNrcyB0aGUgcGFja2V0ICppcyogYWN0dWFsbHkgVURQKS4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OgoKMS4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBOb3RoaW5nIGhlcmUgaXMgY29weWluZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBwYWNrZXQgaGVhZGVyIHZhbGlkYXRpb24gZHVyaW5nIHJ1bGUgc2V0dXAgYW5kIGV4ZWN1dGlvbi4gTm8gaW5mbyBsZWFrcyBoZXJlLgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBUaGUgY29kZSByZWxpZXMgb24gZmllbGRzIGxpa2UgYHBrdC0mZ3Q7dHByb3RgLCBgcGt0LSZndDtmbGFnc2AsIGFuZCBgcHJpdi0mZ3Q7Y3N1bV9vZmZzZXRgLCBidXQgdGhlc2UgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBgcGt0aW5mb2AgLyBgbmZ0X3BheWxvYWRfc2V0YCBzdHJ1Y3R1cmVzLiBOb3RoaW5nIGlzIHVuaW5pdGlhbGl6ZWQuCjMuICAqKkRhdGEgU3RydWN0dXJlIEFsbG9jYXRpb246KiogTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLiBUaGlzIGlzIG9wZXJhdGluZyBvbiBleGlzdGluZyBzdHJ1Y3R1cmVzIGR1cmluZyB2YWxpZGF0aW9uIGFuZCBldmFsdWF0aW9uLgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBDcnVjaWFsbHksIHRoZSBwYXRjaCAqcmVzdHJpY3RzKiBgY3N1bV9vZmZzZXRgIHRvIG9ubHkgYWxsb3cgdmFsaWQgTDQgY2hlY2tzdW0gb2Zmc2V0cy4gVGhpcyBpcyBhICpnb29kKiB0aGluZy4gSXQgcHJldmVudHMgd3JpdGluZyB0byBhcmJpdHJhcnkgdHJhbnNwb3J0IHBheWxvYWQgb2Zmc2V0cyBkdXJpbmcgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgd2Ugd2FudCB0byBhdm9pZC4gVGhpcyBrZWVwcyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBmcm9tIGhhcHBlbmluZyBvbiBza2JzLgoKU28sIGdpdmVuIHRoaXMgYW5hbHlzaXMsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGluZm8gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBpbnZvbHZlZCBoZXJlLiBUaGlzIG1lYW5zIEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhpcyBqb2IuIEtNU0FOJiMzOTtzIHB1cnBvc2UgaXMgdG8gZmluZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBpcyBhYm91dCAqcHJldmVudGluZyogaW5jb3JyZWN0IG1lbW9yeSBtb2RpZmljYXRpb24uIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIG9yIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIHdoYXQgYXJlIGdvaW5nIHRvIG1hdHRlciBoZXJlLiBUaGVzZSBhcmUgdGhlIHJlbGV2YW50IHRvb2xzIGZvciBmaW5kaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1vcmUgdHlwaWNhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBpZiB0aGVyZSB3ZXJlIGFueSBpc3N1ZXMgaW4gdGhlIHBhdGNoJiMzOTtzIGJvdW5kcyBjaGVja3MuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBXZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBhbmQgbm93IGl0JiMzOTtzIGp1c3QgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgbXkgcmVhc29uaW5nLCBhbmQgdGhlIHRvb2xzIEkgbmVlZCB0byB1c2UsIGFyZSBjb3JyZWN0LiBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYE5lZWRzS01TQU5gIGFuZCBgS01TQU5SZWFzb25pbmdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdDpcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cbjIuIFJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0ZSBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggc3RyaWN0bHkgcmVzdHJpY3RzIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gb2Zmc2V0cyB0byB3ZWxsLWRlZmluZWQgTDQgcHJvdG9jb2wgY2hlY2tzdW0gZmllbGRzIChUQ1AsIFVEUCwgSUNNUCwgSUNNUHY2KSwgcHJldmVudGluZyBpbmNvcnJlY3QgcGFja2V0IG1hbmdsaW5nIC8gb3V0LW9mLWJvdW5kcyBwYXlsb2FkIHdyaXRlcyBvbiBza19idWZmcyAod2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdDpcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cbjIuIFJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0ZSBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggc3RyaWN0bHkgcmVzdHJpY3RzIGNoZWNrc3VtIHJlY2FsY3VsYXRpb24gb2Zmc2V0cyB0byB3ZWxsLWRlZmluZWQgTDQgcHJvdG9jb2wgY2hlY2tzdW0gZmllbGRzIChUQ1AsIFVEUCwgSUNNUCwgSUNNUHY2KSwgcHJldmVudGluZyBpbmNvcnJlY3QgcGFja2V0IG1hbmdsaW5nIC8gb3V0LW9mLWJvdW5kcyBwYXlsb2FkIHdyaXRlcyBvbiBza19idWZmcyAod2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjM0LjU1NDA1OTk3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzgwODYyOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfc2V0X2luaXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rXCIsXG4gICAgXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90OlxcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cXG4yLiBSZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxcbjMuIEFsbG9jYXRlIG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkuXFxuXFxuVGhlIHBhdGNoIHN0cmljdGx5IHJlc3RyaWN0cyBjaGVja3N1bSByZWNhbGN1bGF0aW9uIG9mZnNldHMgdG8gd2VsbC1kZWZpbmVkIEw0IHByb3RvY29sIGNoZWNrc3VtIGZpZWxkcyAoVENQLCBVRFAsIElDTVAsIElDTVB2NiksIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBhY2tldCBtYW5nbGluZyAvIG91dC1vZi1ib3VuZHMgcGF5bG9hZCB3cml0ZXMgb24gc2tfYnVmZnMgKHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycykuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIG1hbmdsaW5nIGluIG5mX3RhYmxlcyAobmZ0X3BheWxvYWQpLiBUaGlzIGFmZmVjdHMgYm90aCBydWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdmFsaWRhdGlvbiB2aWEgbmV0bGluayBhbmQgcGFja2V0IGV2YWx1YXRpb24gdGltZSB2ZXJpZmljYXRpb24uIFRoZSBjb2RlIGlzIGluIHRoZSBjb3JlIG5ldGZpbHRlciBzdWJzeXN0ZW0gYW5kIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6MzQuNTU0MDY2MTQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTkyOTgwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4NTk2ZjdiYjA1ZmZhZGU0ODUwZmE1NTg0ZTdlYTgxNjg2ZmIxNTEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTg6NTY6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuaW5kZXggZTMxNWQzNWY3M2Q0YS4uZjczMmUyZDYxZjhjNSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcXG5AQCAtMjAsNiArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91ZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9ncmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ljbXB2Ni5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG5AQCAtMTAwOCwxMSArMTAwOSwxMyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXFxcInJlLXVwZGF0ZVxcXCIgb2YgTDQgY2hlY2tzdW0gKi9cXG4gXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0XFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcXG4tXFx0XFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cXG4tXFx0XFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSB8fFxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XFxuK1xcdFxcdCAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbkBAIC0xMDQ2LDYgKzEwNDksMjcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbit7XFxuK1xcdGlmICghKHBrdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0c3dpdGNoIChwa3QtXFx1MDAzZXRwcm90KSB7XFxuK1xcdGNhc2UgSVBQUk9UT19UQ1A6XFxuK1xcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XFxuK1xcdGNhc2UgSVBQUk9UT19VRFA6XFxuK1xcdGNhc2UgSVBQUk9UT19VRFBMSVRFOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xcbitcXHRjYXNlIElQUFJPVE9fSUNNUFY2OlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XFxuK1xcdGNhc2UgSVBQUk9UT19JQ01QOlxcbitcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXBoZHIsIGNoZWNrc3VtKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbiB7XFxuQEAgLTEwNTUsOSArMTA3OSwxMCBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbiBcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xcbiBcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuK1xcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuIFxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbi1cXHRcXHQvKiBuZWl0aGVyIG9mZnNldHMgYXJlIHZhbGlkYXRlZCwgb2Zmc2V0cyBjYW5ub3QgYmVcXG4tXFx0XFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMyBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxcbitcXHRcXHQvKiBvZmZzZXQgaXMgbm90IHZhbGlkYXRlZCwgb2Zmc2V0IGNhbm5vdCBiZVxcbitcXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NjozNC45NTQwMzY0NjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyMjQ4MDIzMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3BheWxvYWRfc2V0X2luaXRcIixcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9ldmFsXCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rXCIsXG4gICAgXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2hlY2tzdW0gb2Zmc2V0IHZhbGlkYXRpb24gYW5kIHBhY2tldCBldmFsdWF0aW9uIGZvciB0cmFuc3BvcnQgaGVhZGVyIHBheWxvYWQgbWFuZ2xpbmcgaW4gbmZfdGFibGVzIChuZnRfcGF5bG9hZCkuIFRoaXMgYWZmZWN0cyBib3RoIHJ1bGUgaW5pdGlhbGl6YXRpb24gdGltZSB2YWxpZGF0aW9uIHZpYSBuZXRsaW5rIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiB0aW1lIHZlcmlmaWNhdGlvbi4gVGhlIGNvZGUgaXMgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIHN1YnN5c3RlbSBhbmQgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0ZmlsdGVyIG5ldGxpbmsgc29ja2V0cyBhbmQgbmV0d29yayBwYWNrZXQgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1OTZmN2JiMDVmZmFkZTQ4NTBmYTU1ODRlN2VhODE2ODZmYjE1MTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE4OjU2OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCBlMzE1ZDM1ZjczZDRhLi5mNzMyZTJkNjFmOGM1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuQEAgLTEwMDgsMTEgKzEwMDksMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCJyZS11cGRhdGVcIiBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcbi1cdFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cbi1cdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuK1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuQEAgLTEwNDYsNiArMTA0OSwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuK3tcbitcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4rXHRjYXNlIElQUFJPVE9fVENQOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fVURQOlxuK1x0Y2FzZSBJUFBST1RPX1VEUExJVEU6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuK1x0Y2FzZSBJUFBST1RPX0lDTVA6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuIHtcbkBAIC0xMDU1LDkgKzEwNzksMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4gXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4rXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbi1cdFx0LyogbmVpdGhlciBvZmZzZXRzIGFyZSB2YWxpZGF0ZWQsIG9mZnNldHMgY2Fubm90IGJlXG4tXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbitcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbitcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NjozNC45NTQwMzgxODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODA0NjczOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBheWxvYWQgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGRpZmYuIE15IGluaXRpYWwgZm9jdXMgaXMgYWx3YXlzIG9uIHVuZGVyc3RhbmRpbmcgKndoYXQqIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgYW5kIHdoeS4gVGhlIGNoYW5nZXMgYXJlIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggTmV0ZmlsdGVyIGFuZCBzcGVjaWZpY2FsbHksIHBheWxvYWQgaW5zcGVjdGlvbi9tYW5pcHVsYXRpb24uIFRoZSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXJlIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCwgd2hpY2ggaGFzIGxpa2VseSBiZWVuIGFsdGVyZWQsIGFuZCB0aGVzZSBuZXcgYWRkaXRpb25zOiBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AsIGFuZCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AuIEJhc2VkIG9uIHRoZSBuYW1lcyBhbG9uZSwgSSdkIHdhZ2VyIHRoZXNlIGhhdmUgc29tZXRoaW5nIHRvIGRvIHdpdGggY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBhbmQgcHJvYmFibHkgZGVhbCB3aXRoIHRoZSB2YWxpZGF0aW9uIG9mIHdyaXRlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBUQ1AgYW5kIFVEUCBjaGVja3N1bSBvZmZzZXRzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmZ0X3BheWxvYWQuY2AgdG8gc2VlIGhvdyB0aGVzZSBuZXcgZnVuY3Rpb25zIGludGVncmF0ZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUgb2xkIGZ1bmN0aW9uIGhhcyBiZWVuIGFsdGVyZWQuIEknbGwgcHJvYmFibHkgZmlyZSB1cCBgZ3JlcHBlcmAgb3IganVzdCByZWFkIHRoZSBmaWxlIGRpcmVjdGx5LiBJJ2xsIGFsc28gd2FudCB0byByZXZpZXcgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBkaWN0YXRlIHRoaXMgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoZSBwb3J0YWJpbGl0eSBhbmQgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGF0Y2ggYWNyb3NzIGRpZmZlcmVudCBrZXJuZWwgYnVpbGRzIGFuZCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjM5Ljc1ODcxNDIzM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwMDE6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xcbjEwMDI6XFx0XFx0XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0KVxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDA2OlxcdFxcdFxcdH1cXG4xMDA3OlxcdFxcdFxcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXFxuMTAwODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTAwOTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuMTAxMDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuMTAxMzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XFxuMTAxNDpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XFxuMTAxNTpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXFxuMTAxNjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwMTk6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuMTAyMDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDIxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG4xMDIyOlxcdFxcdFxcdGJyZWFrO1xcbjEwMjM6XFx0XFx0fVxcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAyNjpcXHR9XFxuMTAyNzpcXHRcXG4xMDI4OlxcdC8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxcbjEwMjk6XFx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcXG4xMDMwOlxcdCAqIHBsYW5lLlxcbjEwMzE6XFx0ICovXFxuMTAzMjpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuMTAzMzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTAzNDpcXHR7XFxuMTAzNTpcXHRcXHRzd2l0Y2ggKHBrdC1cXHUwMDNlc3RhdGUtXFx1MDAzZXBmKSB7XFxuMTAzNjpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4xMDM3OlxcdFxcdFxcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbid0IHJldHVybiB0cnVlIGhlcmUuICovXFxuMTAzODpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTAzOTpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG4xMDQwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDQxOlxcdFxcdGNhc2UgTkZQUk9UT19CUklER0U6XFxuMTA0MjpcXHRcXHRcXHRyZXR1cm4gcGt0LVxcdTAwM2VldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuMTA0MzpcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTA0NDpcXHRcXHRjYXNlIE5GUFJPVE9fTkVUREVWOlxcbjEwNDU6XFx0XFx0XFx0cmV0dXJuIHBrdC1cXHUwMDNlc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG4xMDQ2OlxcdFxcdFxcdCAgICAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4xMDQ3OlxcdFxcdH1cXG4xMDQ4OlxcdFxcbjEwNDk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNTA6XFx0fVxcbjEwNTE6XFx0XFxuMTA1MjpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuMTA1MzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTA1NDpcXHR7XFxuMTA1NTpcXHRcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXFxuMTA1NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA1NzpcXHRcXG4xMDU4OlxcdFxcdHN3aXRjaCAocGt0LVxcdTAwM2V0cHJvdCkge1xcbjEwNTk6XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4xMDYwOlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XFxuMTA2MTpcXHRcXHRjYXNlIElQUFJPVE9fVURQOlxcbjEwNjI6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUExJVEU6XFxuMTA2MzpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xcbjEwNjQ6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4xMDY1OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4xMDY2OlxcdFxcdGNhc2UgSVBQUk9UT19JQ01QOlxcbjEwNjc6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XFxuMTA2ODpcXHRcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDcxOlxcdH1cXG4xMDcyOlxcdFxcbjEwNzM6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4xMDc0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuMTA3NTpcXHR7XFxuMTA3NjpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWJhc2UpIHtcXG4xMDc3OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbjEwNzg6XFx0XFx0XFx0YnJlYWs7XFxuMTA3OTpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwODA6XFx0XFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4xMDgxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4xMDgyOlxcdFxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuMTA4MzpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMDg0OlxcdFxcdFxcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXFxuMTA4NTpcXHRcXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuMTA4NjpcXHRcXHRcXHQgKi9cXG4xMDg3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwODg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbjEwODk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjM5Ljc1ODg1NTk4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMDQyMTI0NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBDYWxsIFNpdGVzOiBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCoqXG5cblJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIHR3byBmdW5jdGlvbnMsIGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCBhbmQgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgLiBUbyB0cnVseSBncmFzcCB0aGVpciBzaWduaWZpY2FuY2UsIEkgbmVlZCB0byB0cmFjZSB0aGVpciB1c2FnZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqY2FsbGVkKiB3aXRoaW4gdGhlIGNvZGViYXNlLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBsb2dpYyB0aGV5IGFyZSBpbnRlbmRlZCB0byBzdXBwb3J0LiBUaGlzIGlzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBhc3NvY2lhdGVkIGNvZGUgbW9yZSBkZWVwbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTAsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjQxLjc2MzA3MTQwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg1MTA2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0fG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUyPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDczOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzQtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTA2PXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcxLVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzI6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTczLVxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTk4PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU2LVxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjU3OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Njo0MS44MTE5NTA5MzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ0NzkyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgbmZ0X3BheWxvYWQuY2AgaW4gdGhlIEJ1aWxkIFN5c3RlbSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZnRfcGF5bG9hZC5jYCBpcyBiZWluZyBoYW5kbGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBNYWtlZmlsZWAsIGFzIGl0J3MgdGhlIG1vcmUgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIGhvdyB0aGUgc291cmNlIGZpbGVzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkLiBJJ2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byB0aGF0IHNwZWNpZmljIGZpbGUgbmFtZSwgb3IgcG90ZW50aWFsbHkgZm9yIHBhdHRlcm5zIHJlbGF0ZWQgdG8gbmV0d29yayBmaWx0ZXJpbmcgb3IgTmV0ZmlsdGVyLCBpZiB0aGUgbmFtZSBpdHNlbGYgaXNuJ3Qgb2J2aW91cy4gSWYgSSBkb24ndCBmaW5kIGFueXRoaW5nIGRlZmluaXRpdmUgdGhlcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCdzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCBwYXlsb2FkIGluc3BlY3Rpb24sIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW5jbHVkZSBvciBleGNsdWRlIHRoZSBgbmZ0X3BheWxvYWQuY2Agc291cmNlIGZpbGUgYmFzZWQgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IHRoZSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0aGF0IGNvbnRyb2wgd2hldGhlciBvciBub3QgdGhpcyBtb2R1bGUgaXMgYWN0dWFsbHkgYnVpbHQgYW5kIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBpbWFnZS4gVGhpcyBzaG91bGQgZ2V0IG1lIG9uIHRoZSByaWdodCB0cmFjayBwcmV0dHkgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjQzLjg1Njc0NjIzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI3MTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cXHRcXHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XFx0XFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MC1cXHRcXHQgIG5mdF9keW5zZXQubyBuZnRfbWV0YS5vIG5mdF9ydC5vIG5mdF9leHRoZHIubyBuZnRfbGFzdC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0xMzU9c3RhdGljIGlubGluZSB2b2lkIG5mdF90cmFjZV92ZXJkaWN0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MTQ0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2Zhc3RfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jLTE0NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0xNDcte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYzoxNDg6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMTQ5LVxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXFx1MDAzZXNrYjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0yMDM9c3RhdGljIHZvaWQgZXhwcl9jYWxsX29wc19ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMTctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjIxODpcXHRYKGUsIG5mdF9wYXlsb2FkX2V2YWwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0yMTktXFx0WChlLCBuZnRfY21wX2V2YWwpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jPTI1MD1uZnRfZG9fY2hhaW4oc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIHZvaWQgKnByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjgyLVxcdFxcdFxcdFxcdG5mdF9iaXR3aXNlX2Zhc3RfZXZhbChleHByLCBcXHUwMDI2cmVncyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjI4MzpcXHRcXHRcXHRlbHNlIGlmIChleHByLVxcdTAwM2VvcHMgIT0gXFx1MDAyNm5mdF9wYXlsb2FkX2Zhc3Rfb3BzIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfY29yZS5jOjI4NDpcXHRcXHRcXHRcXHQgIW5mdF9wYXlsb2FkX2Zhc3RfZXZhbChleHByLCBcXHUwMDI2cmVncywgcGt0KSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmMtMjg1LVxcdFxcdFxcdFxcdGV4cHJfY2FsbF9vcHNfZXZhbChleHByLCBcXHUwMDI2cmVncywgcGt0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYz0zNTI9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlICpuZnRfYmFzaWNfdHlwZXNbXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0zNTctXFx0XFx1MDAyNm5mdF9ieXRlb3JkZXJfdHlwZSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19jb3JlLmM6MzU4OlxcdFxcdTAwMjZuZnRfcGF5bG9hZF90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2NvcmUuYy0zNTktXFx0XFx1MDAyNm5mdF9keW5zZXRfdHlwZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTExND11bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMTktXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTIwOnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX24yaCh1bmlvbiBuZnRfY21wX29mZmxvYWRfZGF0YSAqZGF0YSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xMjEtXFx0XFx0XFx0ICAgIGNvbnN0IHU4ICp2YWwsIHUzMiBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYz0xMzk9c3RhdGljIGludCBfX25mdF9jbXBfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0xNTItXFx0aWYgKHJlZy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfT0ZGTE9BRF9GX05FVFdPUksySE9TVCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjE1MzpcXHRcXHRuZnRfcGF5bG9hZF9uMmgoXFx1MDAyNl9kYXRhLCAodTggKilcXHUwMDI2cHJpdi1cXHUwMDNlZGF0YSwgcmVnLVxcdTAwM2VsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjE1NDpcXHRcXHRuZnRfcGF5bG9hZF9uMmgoXFx1MDAyNl9kYXRhbWFzaywgKHU4ICopXFx1MDAyNnJlZy1cXHUwMDNlbWFzaywgcmVnLVxcdTAwM2VsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE1NS1cXHRcXHRkYXRhID0gKHU4ICopXFx1MDAyNl9kYXRhO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYz0zNj1zdHJ1Y3QgX19uZnRfZXhwciB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTM4LVxcdHVuaW9uIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjM5OlxcdFxcdHN0cnVjdCBuZnRfcGF5bG9hZFxcdHBheWxvYWQ7XFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy00MC1cXHRcXHRzdHJ1Y3QgbmZ0X21ldGFcXHRcXHRtZXRhO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYz0yOTA9c3RhdGljIHZvaWQgbmZ0X2lubmVyX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLCBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTI5NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jOjI5NjpcXHRpZiAobmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KHBrdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmMtMjk3LVxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfaW5uZXIuYy0zMDQtXFx0Y2FzZSBORlRfSU5ORVJfRVhQUl9QQVlMT0FEOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2lubmVyLmM6MzA1OlxcdFxcdG5mdF9wYXlsb2FkX2lubmVyX2V2YWwoKHN0cnVjdCBuZnRfZXhwciAqKVxcdTAwMjZwcml2LVxcdTAwM2VleHByLCByZWdzLCBwa3QsIFxcdTAwMjZ0dW5fY3R4KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbm5lci5jLTMwNi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfcmVidWlsZF92bGFuX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbWFjX29mZixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAtXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz00Mz1zdGF0aWMgYm9vbFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDpuZnRfcGF5bG9hZF9jb3B5X3ZsYW4odTMyICpkLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4pXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9yZWJ1aWxkX3ZsYW5faGRyKHNrYiwgbWFjX29mZiwgXFx1MDAyNnZldGgpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzQtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjc1OnN0YXRpYyBpbnQgX19uZnRfcGF5bG9hZF9pbm5lcl9vZmZzZXQoc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzktXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0MDppbnQgbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDEte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDItXFx0aWYgKCEocGt0LVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9QS1RJTkZPX0lOTkVSKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNDM6XFx0ICAgIF9fbmZ0X3BheWxvYWRfaW5uZXJfb2Zmc2V0KChzdHJ1Y3QgbmZ0X3BrdGluZm8gKilwa3QpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTQ0LVxcdFxcdHJldHVybiAtMTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNDgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjE0OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHUzMiBvZmZzZXQsIHUzMiBsZW4pXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE1MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNjA6dm9pZCBuZnRfcGF5bG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTYxLVxcdFxcdCAgICAgIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNjMte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNjQ6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTY1LVxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXFx1MDAzZXNrYjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xNzctXFx0XFx0aWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTc4OlxcdFxcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxNzk6XFx0XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9jb3B5X3ZsYW4oZGVzdCwgc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xODAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgcHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTE5NC1cXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTk1OlxcdFxcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xOTYtXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjExLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMTI6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9wYXlsb2FkX3BvbGljeVtORlRBX1BBWUxPQURfTUFYICsgMV0gPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIxMy1cXHRbTkZUQV9QQVlMT0FEX1NSRUddXFx0XFx0PSBOTEFfUE9MSUNZX01BWChOTEFfQkUzMiwgTkZUX1JFRzMyX01BWCksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjIyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyMjM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyNC1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTIyNi17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjIyNzpcXHRzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yMjgtXFx0dTMyIG9mZnNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI0NDpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjQ1LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI0Ni17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI0NzpcXHRjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNDgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNjA6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjYxLVxcdFxcdFxcdFxcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3Ny1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc4OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI3OS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODA6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI4MS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg1LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9zb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODY6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIEVUSF9BTEVOKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg3LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIEVUSF9BTEVOKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk0LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzAwOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwMS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA3LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA4OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE1LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzE2OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNy1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzIzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSArIHNpemVvZihzdHJ1Y3Qgdmxhbl9oZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzItXFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMzMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDk6XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1MC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU0LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM1NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2My1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzczOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg5OlxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzk2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MDQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwNS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MTM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxNC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0Mjc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDI4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyOTpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDMwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzQtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNTpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM3LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzODpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzktXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0OC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDQ5OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDUwLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTU6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2My1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzU6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDc3OlxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc4LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDg0LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODktXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDkwOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTA0LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwNTpcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZCAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTA2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTAtXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTExOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEzLVxcdGNhc2UgSVBQUk9UT19VRFA6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxNDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjM6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTI0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjYte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Mjc6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTI4LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMxLVxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzI6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzMtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNC1cXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzU6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9uaChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNy1cXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzODpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzOS1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NDYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0ODpcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU0OTpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MDpcXHQuZXZhbFxcdFxcdD0gbmZ0X3BheWxvYWRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUxOlxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MzpcXHQub2ZmbG9hZFxcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTU0LX07XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTU2OmNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1NzpcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1ODpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1OTpcXHQuZXZhbFxcdFxcdD0gbmZ0X3BheWxvYWRfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYwOlxcdC5pbml0XFx0XFx0PSBuZnRfcGF5bG9hZF9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjE6XFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MjpcXHQub2ZmbG9hZFxcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYzLX07XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTY1OnZvaWQgbmZ0X3BheWxvYWRfaW5uZXJfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTY2LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01Njgte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1Njk6XFx0Y29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTcwLVxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtXFx1MDAzZXNrYjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MTUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjYxNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2lubmVyX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjE3LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTYxOS17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjYyMDpcXHRzdHJ1Y3QgbmZ0X3BheWxvYWQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02MjEtXFx0dTMyIGJhc2UsIG9mZnNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTAtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1MTpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9pbm5lcl9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1MjpcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1MzpcXHQuc2l6ZVxcdFxcdD0gTkZUX0VYUFJfU0laRShzaXplb2Yoc3RydWN0IG5mdF9wYXlsb2FkKSksXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY1NDpcXHQuaW5pdFxcdFxcdD0gbmZ0X3BheWxvYWRfaW5uZXJfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NjU1OlxcdC5kdW1wXFx0XFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NTY6XFx0LyogZGlyZWN0IGNhbGwgdG8gbmZ0X3BheWxvYWRfaW5uZXJfZXZhbCgpLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NTctfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz02NTk9c3RhdGljIGlubGluZSB2b2lkIG5mdF9jc3VtX3JlcGxhY2UoX19zdW0xNiAqc3VtLCBfX3dzdW0gZnN1bSwgX193c3VtIHRzdW0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjY1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo2NjY6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdWRwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB0aG9mZilcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjY3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy02NzYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2w0Y3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTY3OC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjg4LVxcdGNhc2UgSVBQUk9UT19VRFA6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjY4OTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3VkcF9jaGVja3N1bShza2IsIG5mdF90aG9mZihwa3QpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNjkwLVxcdFxcdFxcdHJldHVybiAtMTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MDUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcwNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2NzdW1fc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MDcte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTcxOC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzE5OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzIwLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03MjgtXFx0ICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjcyOTpcXHRpZiAobmZ0X3BheWxvYWRfbDRjc3VtX29mZnNldChwa3QsIHNrYiwgXFx1MDAyNmw0Y3N1bV9vZmZzZXQpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzMwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc1NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzU2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHUzMiAqc3JjLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03NTctXFx0XFx0XFx0XFx0IF9fd3N1bSBmc3VtLCBfX3dzdW0gdHN1bSwgaW50IGNzdW1fb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc3MS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NzcyOnN0cnVjdCBuZnRfcGF5bG9hZF9zZXQge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3NzM6XFx0ZW51bSBuZnRfcGF5bG9hZF9iYXNlc1xcdGJhc2U6ODtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzc0LVxcdHUxNlxcdFxcdFxcdG9mZnNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03ODItLyogVGhpcyBpcyBub3Qgc3RydWN0IHZsYW5faGRyLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3ODM6c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzg0LVxcdF9fYmUxNlxcdFxcdFxcdGhfdmxhbl9wcm90bztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz03ODg9c3RhdGljIGJvb2xcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Nzg5Om5mdF9wYXlsb2FkX3NldF92bGFuKGNvbnN0IHUzMiAqc3JjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgb2Zmc2V0LCB1OCBsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTc5MC1cXHRcXHQgICAgIGludCAqdmxhbl9obGVuKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy03OTEte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo3OTI6XFx0c3RydWN0IG5mdF9wYXlsb2FkX3ZsYW5faGRyICp2bGFuaDtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNzkzLVxcdF9fYmUxNiB2bGFuX3Byb3RvO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwNi1cXHRcXHR9IGVsc2UgaWYgKGxlbiA9PSA0KSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjgwNzpcXHRcXHRcXHR2bGFuaCA9IChzdHJ1Y3QgbmZ0X3BheWxvYWRfdmxhbl9oZHIgKilzcmM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgwOC1cXHRcXHRcXHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgdmxhbmgtXFx1MDAzZWhfdmxhbl9wcm90byxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04Mzc9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODM4OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTgzOS1cXHRcXHRcXHRcXHRjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz04ODM9c3RhdGljIGJvb2wgbmZ0X25oX3dyaXRlX29rX2lwNihjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6ODg0OlxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTg4NS1cXHRcXHRcXHRcXHRjb25zdCB1MzIgKnNyYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MDQtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkwNTpzdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfYXJwKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkwNi17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTI0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19uZXRkZXYoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNTpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjYtXFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ1PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjk0NjpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NDctXFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICpzcmMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTYzPXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTY0OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NjUtXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqc3JjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTk4Nj1zdGF0aWMgYm9vbCBuZnRfbGxfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGludCBvZmZzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTQ6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo5OTU6XFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05OTYte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwMzEtICovXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEwMzI6c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDMzLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDUxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDUyOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA1My1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTA3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA3MzpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDc0OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzUte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzktXFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA4MDpcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV9uaF93cml0ZV9vayhwcml2LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgxLVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTA4MjpcXHRcXHRyZXR1cm4gbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vayhwcml2LCBwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDgzLVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEwOTU9c3RhdGljIGJvb2wgbmZ0X3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDk2OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDk3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTA1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTA2OnN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEwNy1cXHRcXHRcXHRcXHQgc3RydWN0IG5mdF9yZWdzICpyZWdzLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMDkte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTEwOlxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTExLVxcdGNvbnN0IHUzMiAqc3JjID0gXFx1MDAyNnJlZ3MtXFx1MDAzZWRhdGFbcHJpdi1cXHUwMDNlc3JlZ107XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTEyMS1cXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTIyOlxcdFxcdCAgICBuZnRfcGF5bG9hZF9uZWVkX3ZsYW5fYWRqdXN0KHByaXYtXFx1MDAzZW9mZnNldCwgcHJpdi1cXHUwMDNlbGVuKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTIzOlxcdFxcdFxcdGlmICghbmZ0X3BheWxvYWRfc2V0X3ZsYW4oc3JjLCBza2IsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExMjQtXFx0XFx0XFx0XFx0XFx0XFx0ICBwcml2LVxcdTAwM2VvZmZzZXQsIHByaXYtXFx1MDAzZWxlbixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTQ4LVxcdGNhc2UgTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTQ5OlxcdFxcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTUwLVxcdFxcdGlmIChvZmZzZXQgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzEtXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fdHlwZSA9PSBORlRfUEFZTE9BRF9DU1VNX0lORVQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3MjpcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzM6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1faW5ldChza2IsIHNyYywgZnN1bSwgdHN1bSwgY3N1bV9vZmZzZXQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTc0LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExNzYtXFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTE3NzpcXHRcXHQgICAgbmZ0X3BheWxvYWRfbDRjc3VtX3VwZGF0ZShwa3QsIHNrYiwgZnN1bSwgdHN1bSkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTc4LVxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTExODgtXFx0XFx0aWYgKHBrdC1cXHUwMDNlZnJhZ29mZiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExODk6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fc2N0cChza2IsIG5mdF90aG9mZihwa3QpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5MC1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTk3LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMTk4OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTE5OS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTIwMi1cXHR1MzIgY3N1bV9vZmZzZXQsIG9mZnNldCwgY3N1bV90eXBlID0gTkZUX1BBWUxPQURfQ1NVTV9OT05FO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjAzOlxcdHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjA0LVxcdGludCBlcnI7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1Ni1cXHRjYXNlIE5GVF9QQVlMT0FEX0NTVU1fSU5FVDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTI1NzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY3R4LCBwcml2KSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI1OC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjc4LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjc5OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTI4MC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsIGJvb2wgcmVzZXQpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyODEte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjgyOlxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjgzLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEyOTgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEyOTk6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfc2V0X29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMDpcXHQudHlwZVxcdFxcdD0gXFx1MDAyNm5mdF9wYXlsb2FkX3R5cGUsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDE6XFx0LnNpemVcXHRcXHQ9IE5GVF9FWFBSX1NJWkUoc2l6ZW9mKHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQpKSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMwMjpcXHQuZXZhbFxcdFxcdD0gbmZ0X3BheWxvYWRfc2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjEzMDM6XFx0LmluaXRcXHRcXHQ9IG5mdF9wYXlsb2FkX3NldF9pbml0LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA0OlxcdC5kdW1wXFx0XFx0PSBuZnRfcGF5bG9hZF9zZXRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwNS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTEzMDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgKlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzA4Om5mdF9wYXlsb2FkX3NlbGVjdF9vcHMoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMwOS1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMTAte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzExOlxcdGVudW0gbmZ0X3BheWxvYWRfYmFzZXMgYmFzZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMxMi1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBsZW47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTMzMy1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTMzNDpcXHRcXHRyZXR1cm4gXFx1MDAyNm5mdF9wYXlsb2FkX3NldF9vcHM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzMzUtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNDktXFx0ICAgIGJhc2UgIT0gTkZUX1BBWUxPQURfTExfSEVBREVSIFxcdTAwMjZcXHUwMDI2IGJhc2UgIT0gTkZUX1BBWUxPQURfSU5ORVJfSEVBREVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUwOlxcdFxcdHJldHVybiBcXHUwMDI2bmZ0X3BheWxvYWRfZmFzdF9vcHM7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTEtXFx0ZWxzZVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzUyOlxcdFxcdHJldHVybiBcXHUwMDI2bmZ0X3BheWxvYWRfb3BzO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMzUzLX1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM1NC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NTpzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfcGF5bG9hZF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEzNTYtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJwYXlsb2FkXFxcIixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1NzpcXHQuc2VsZWN0X29wc1xcdD0gbmZ0X3BheWxvYWRfc2VsZWN0X29wcyxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MTM1ODpcXHQuaW5uZXJfb3BzXFx0PSBcXHUwMDI2bmZ0X3BheWxvYWRfaW5uZXJfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMzU5OlxcdC5wb2xpY3lcXHRcXHQ9IG5mdF9wYXlsb2FkX3BvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMTM2MC1cXHQubWF4YXR0clxcdD0gTkZUQV9QQVlMT0FEX01BWCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6NDMuOTA3MDIxMTI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwNDQzOTIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIG5mX3RhYmxlcyBhbmQgbmZ0X3BheWxvYWQgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgbmZfdGFibGVzYCBhbmQgc3BlY2lmaWNhbGx5IGBuZnRfcGF5bG9hZGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IGdyYXNwIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuIEknbSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYENPTkZJR19gIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB0byB3YXRjaCBvdXQgZm9yLiBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBLY29uZmlnIHRyZWUsIGJ1dCBJIGFudGljaXBhdGUgaGF2aW5nIHRvIHRyYWNlIHRocm91Z2ggYSBmZXcgaW5jbHVkZXMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGdvYWwgaXMgYSBxdWljayBhbmQgZGlydHkgY29uZmlndXJhdGlvbiBvdmVydmlldyBvZiB0aGVzZSBmZWF0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NzIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Njo0Ni4yMTE0NjM4NjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDQxNDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX1RBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzgtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDAtXFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcxOmlmIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cXHRkZXBlbmRzIG9uIElQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDc0OlxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzU6XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3Ni1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG1peGVkIElQdjQvSVB2NiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NTUwPWNvbmZpZyBORlRfTkFUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTUyLVxcdHNlbGVjdCBORl9OQVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTUzOlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lQVjQgfHwgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTU0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5hdCBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NTg2PWNvbmZpZyBORlRfUkVKRUNUX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTg3OlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTg4LVxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTYwOD1jb25maWcgTkZUX0ZJQl9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYwOTpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxMC1cXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTYyNT1jb25maWcgTkZUX1NPQ0tFVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyNy1cXHRzZWxlY3QgTkZfU09DS0VUX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI4OlxcdHNlbGVjdCBORl9TT0NLRVRfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MjktXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0MD1jb25maWcgTkZUX1RQUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0Mi1cXHRzZWxlY3QgTkZfREVGUkFHX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQzOlxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDQtXFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY0NTpcXHRzZWxlY3QgTkZfVFBST1hZX0lQVjYgaWYgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ2LVxcdGhlbHBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY1OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjYxLVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY4OT1jb25maWcgTkZUX1JFSkVDVF9ORVRERVZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02OTgtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjY5OTplbmRpZiAjIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDE6ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTcxMT1jb25maWcgTkZfRkxPV19UQUJMRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxNC1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTU6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzE2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6NDYuMjU3OTA5ODE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTcyNDEyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbmZfdGFibGVzYCBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBuZl90YWJsZXNgIGlzIGJlaW5nIGNvbnN0cnVjdGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQgaXMgZ29pbmcgdG8gYmUgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRoZSBidWlsZCBydWxlcyBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBOZXRmaWx0ZXIg4oCTIGFuZCB0aGVyZWZvcmUgYG5mX3RhYmxlc2Ag4oCTIHRvIHJlc2lkZS4gSSdsbCBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIGFuZCBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29tbWFuZHMuIEknbSBsb29raW5nIGZvciBob3cgaXQncyBsaW5rZWQsIHdoaWNoIG9iamVjdCBmaWxlcyBhcmUgaW5jbHVkZWQsIGFuZCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBpbmZsdWVuY2UgaXRzIGNvbXBpbGF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgaGFuZGxlIG9uIGhvdyB0aGUgYG5mX3RhYmxlc2AgY29tcG9uZW50IGNvbWVzIHRvZ2V0aGVyIHdpdGhpbiB0aGUga2VybmVsJ3MgYnVpbGQgcHJvY2Vzcy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgZWFzeSB0byBmb2xsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDgzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6NDguNDE1MTUzMTQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA4MzU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg0PW9iai0kKENPTkZJR19ORl9EVVBfTkVUREVWKVxcdCs9IG5mX2R1cF9uZXRkZXYub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODUtXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NjojIG5mX3RhYmxlc1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODc6bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg4OlxcdFxcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OS1cXHRcXHQgIG5mdF9iaXR3aXNlLm8gbmZ0X2J5dGVvcmRlci5vIG5mdF9wYXlsb2FkLm8gbmZ0X2xvb2t1cC5vIFxcXFxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTEtXFx0XFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MjpcXHRcXHQgIG5mdF9jaGFpbl9yb3V0ZS5vIG5mX3RhYmxlc19vZmZsb2FkLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTMtXFx0XFx0ICBuZnRfc2V0X2hhc2gubyBuZnRfc2V0X2JpdG1hcC5vIG5mdF9zZXRfcmJ0cmVlLm8gXFxcXFxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT05Nz1pZm5kZWYgQ09ORklHX1VNTFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTg6bmZfdGFibGVzLW9ianMgKz0gbmZ0X3NldF9waXBhcG9fYXZ4Mi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05OS1lbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMDM9aWZkZWYgQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMDQ6bmZfdGFibGVzLW9ianMgKz0gbmZ0X2N0X2Zhc3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTA1LWVuZGlmXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMDY9ZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEwNy1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEwODpvYmotJChDT05GSUdfTkZfVEFCTEVTKVxcdFxcdCs9IG5mX3RhYmxlcy5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMDktb2JqLSQoQ09ORklHX05GVF9DT01QQVQpXFx0Kz0gbmZ0X2NvbXBhdC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTEzNT1vYmotJChDT05GSUdfTkZUX05BVClcXHRcXHQrPSBuZnRfY2hhaW5fbmF0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzNi1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzNzojIG5mX3RhYmxlcyBuZXRkZXZcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfTkZUX0RVUF9ORVRERVYpXFx0Kz0gbmZ0X2R1cF9uZXRkZXYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Njo0OC40NjAyNDQ2NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODY1NzgzOTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgbmV0ZmlsdGVyL25mX3RhYmxlcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgYSBwYXRjaCB0aGF0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyB0aGUgY2hlY2tzdW0gdmFsaWRhdGlvbiBhbmQgcGF5bG9hZCBtYW5nbGluZyBsb2dpYyB3aXRoaW4gdGhlIGBuZnRfcGF5bG9hZC5jYCBmaWxlIG9mIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyBjaGFuZ2VzIHdpdGhpbiB0aGUgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoKWAgYW5kIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rKClgIGZ1bmN0aW9ucy4gVGhlIGludHJvZHVjdGlvbiBvZiBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9vaygpYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEl0J3MgZXNzZW50aWFsbHkgcmVmaW5pbmcgdGhlIGxvZ2ljIHRvIGVuc3VyZSB0aGF0IGNoZWNrc3VtIG1vZGlmaWNhdGlvbnMgYXJlIG9ubHkgcGVybWl0dGVkIGZvciB2YWxpZCB0cmFuc3BvcnQgaGVhZGVyIG9mZnNldHMsIGV4cGxpY2l0bHkgY2hlY2tpbmcgYWdhaW5zdCBUQ1AsIFVEUCwgVURQLUxpdGUsIElDTVB2NiBhbmQgSUNNUCBoZWFkZXJzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIHJlYWNoYWJsZT9cIi4gQWJzb2x1dGVseS4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0ZmlsdGVyIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIHdoaWNoIG1lYW5zIEkgY2FuIGRpcmVjdGx5IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IgdmlhIGBORlRfTVNHX05FV1JVTEVgIGFuZCBzaW1pbGFyIG5ldGxpbmsgbWVzc2FnZXMuIFRoZSBwYWNrZXQgZXZhbHVhdGlvbiBpdHNlbGYgb2NjdXJzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjaywgc28gaXQncyBhIGNyaXRpY2FsIHBhdGguXG5cblwiSXMgaXQgd29ydGggZnV6emluZz9cIi4gV2l0aG91dCBhIGRvdWJ0LiBBbnkgbW9kaWZpY2F0aW9uIHRvIGNvcmUgcGFja2V0IG1hbmdsaW5nIGxvZ2ljIGxpa2UgdGhpcywgZXNwZWNpYWxseSB3aGVuIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNjcmVhbXMgZnV6emluZyB0YXJnZXQuIFRoZSBgbmZfdGFibGVzYCBzdWJzeXN0ZW0gaXMgd2VsbC1kZWZpbmVkIGluIHN5emthbGxlciwgc28gdGFyZ2V0aW5nIGl0IGZvciBmdXp6aW5nIHNob3VsZCBiZSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSdtIGZvY3VzaW5nIG9uOlxuXG4qICAgYG5mdF9wYXlsb2FkX3NldF9pbml0YCAoaW5pdGlhbGl6YXRpb24pXG4qICAgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCAoZXZhbHVhdGlvbilcbiogICBgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2AgKG5ldyBoZWxwZXIgZnVuY3Rpb24pXG4qICAgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgICh2YWxpZGF0aW9uIGZ1bmN0aW9uKVxuKiAgIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCAoY2hlY2tzdW0gd3JpdGUgY2hlY2spXG5cbkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhleSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBuZnRfcGF5bG9hZC5jYC4gSW4gYSBzdGFuZGFyZCBrZXJuZWwgYnVpbGQgKGFtZDY0LCBmb3IgaW5zdGFuY2UpLCB0aGVzZSAqd2lsbCogYmUgY29tcGlsZWQgaW50byBzeW1ib2xzIGluIHZtbGludXgsIHVubGVzcyBoZWF2aWx5IGlubGluZWQg4oCTIGJ1dCBJIGRvbid0IHNlZSB0aGF0IGhhcHBlbmluZyB3aXRoIHRoZSBgc2V0X2luaXRgIGFuZCBgc2V0X2V2YWxgIGZ1bmN0aW9ucy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gSSBzZWUgYE5GX1RBQkxFU2AgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AsIHdoaWNoIGNvbnRyb2xzIHRoZSBidWlsZGluZyBvZiBgbmZfdGFibGVzLm9gICh3aGljaCBpbmNsdWRlcyBgbmZ0X3BheWxvYWQub2ApLiBJdHMgcGFyZW50IGlzIGBORVRGSUxURVJgLCB3aGljaCBJJ2xsIGJlIHN1cmUgaXMgZW5hYmxlZC4gSSBhbHNvIHNlZSBgc2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LYCBhbmQgYGRlcGVuZHMgb24gTkVURklMVEVSYCwgc28gSSdsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuT2theSwgbGV0J3Mgc3VtbWFyaXplIGFsbCB0aGlzIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIHJlcG9ydCBmb3JtYXQ6XG5cbiogICBXb3J0aEZ1enppbmc6IGB0cnVlYFxuKiAgIEVuYWJsZUNvbmZpZ3M6IGBbXCJORl9UQUJMRVNcIiwgXCJORVRGSUxURVJcIl1gXG4qICAgRm9jdXNTeW1ib2xzOiBgW1wibmZ0X3BheWxvYWRfc2V0X2luaXRcIiwgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLCBcIm5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2tcIiwgXCJuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0XCIsIFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiXWBcbiogICBSZWFzb25pbmc6IENvbmNpc2UgZXhwbGFuYXRpb24uXG5cblRoYXQgY292ZXJzIGl0LiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg5NSwiT3V0cHV0VG9rZW5zIjoxNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjU3LjExODA4ODA0OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzOTY4NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va1wiLFxuICAgIFwibmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIG1hbmdsaW5nIGluIG5mX3RhYmxlcyAobmZ0X3BheWxvYWQpLiBUaGlzIGFmZmVjdHMgYm90aCBydWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdmFsaWRhdGlvbiB2aWEgbmV0bGluayBhbmQgcGFja2V0IGV2YWx1YXRpb24gdGltZSB2ZXJpZmljYXRpb24uIFRoZSBjb2RlIGlzIGluIHRoZSBjb3JlIG5ldGZpbHRlciBzdWJzeXN0ZW0gYW5kIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX3NldF9pbml0XCIsXG4gICAgXCJuZnRfcGF5bG9hZF9zZXRfZXZhbFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va1wiLFxuICAgIFwibmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldFwiLFxuICAgIFwibmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNoZWNrc3VtIG9mZnNldCB2YWxpZGF0aW9uIGFuZCBwYWNrZXQgZXZhbHVhdGlvbiBmb3IgdHJhbnNwb3J0IGhlYWRlciBwYXlsb2FkIG1hbmdsaW5nIGluIG5mX3RhYmxlcyAobmZ0X3BheWxvYWQpLiBUaGlzIGFmZmVjdHMgYm90aCBydWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdmFsaWRhdGlvbiB2aWEgbmV0bGluayBhbmQgcGFja2V0IGV2YWx1YXRpb24gdGltZSB2ZXJpZmljYXRpb24uIFRoZSBjb2RlIGlzIGluIHRoZSBjb3JlIG5ldGZpbHRlciBzdWJzeXN0ZW0gYW5kIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgYW5kIG5ldHdvcmsgcGFja2V0IGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTY6NTcuMjAyMDY0NTEyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDEzMjg0ODUxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU2OjU3LjIwMjU1NTc1MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwMTMyMzUzMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90OlxcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cXG4yLiBSZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxcbjMuIEFsbG9jYXRlIG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkuXFxuXFxuVGhlIHBhdGNoIHN0cmljdGx5IHJlc3RyaWN0cyBjaGVja3N1bSByZWNhbGN1bGF0aW9uIG9mZnNldHMgdG8gd2VsbC1kZWZpbmVkIEw0IHByb3RvY29sIGNoZWNrc3VtIGZpZWxkcyAoVENQLCBVRFAsIElDTVAsIElDTVB2NiksIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBhY2tldCBtYW5nbGluZyAvIG91dC1vZi1ib3VuZHMgcGF5bG9hZCB3cml0ZXMgb24gc2tfYnVmZnMgKHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycykuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg1OTZmN2JiMDVmZmFkZTQ4NTBmYTU1ODRlN2VhODE2ODZmYjE1MTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE4OjU2OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCBlMzE1ZDM1ZjczZDRhLi5mNzMyZTJkNjFmOGM1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9ncmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ljbXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuQEAgLTEwMDgsMTEgKzEwMDksMTMgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRpZiAocHJpdi1cdTAwM2Vjc3VtX2ZsYWdzKSAvKiBtYWtlcyBubyBzZW5zZSwgYXNrcyBmb3IgXCJyZS11cGRhdGVcIiBvZiBMNCBjaGVja3N1bSAqL1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0Lyogbm8gZnVydGhlciBjaGVjayBoZXJlOyBvZmZzZXQgY2FuJ3QgYmUgbmVnYXRpdmUgc28gYm9ndXNcbi1cdFx0ICogb2Zmc2V0cyBjYW4gY29ycnVwdCBMNCBvciBwYXlsb2FkIGJ1dCBub3QgbDMgaGVhZGVycy5cbi1cdFx0ICogV2UgYWxyZWFkeSBhbGxvdyBhcmJpdHJhcnkgbDQvaW5uZXIgcGF5bG9hZCB3cml0ZXMuXG4tXHRcdCAqL1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0LyogVmFsaWRhdGUgY3N1bV9vZmZzZXQgaXMgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bXMgKi9cbitcdFx0aWYgKHByaXYtXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XG4rXHRcdCAgICBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fFxuK1x0XHQgICAgcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxuQEAgLTEwNDYsNiArMTA0OSwyNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuK3tcbitcdGlmICghKHBrdC1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHN3aXRjaCAocGt0LVx1MDAzZXRwcm90KSB7XG4rXHRjYXNlIElQUFJPVE9fVENQOlxuK1x0XHRyZXR1cm4gcHJpdi1cdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4rXHRjYXNlIElQUFJPVE9fVURQOlxuK1x0Y2FzZSBJUFBST1RPX1VEUExJVEU6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTtcbitcdGNhc2UgSVBQUk9UT19JQ01QVjY6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21wNmhkciwgaWNtcDZfY2tzdW0pO1xuK1x0Y2FzZSBJUFBST1RPX0lDTVA6XG4rXHRcdHJldHVybiBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3BheWxvYWRfc2V0ICpwcml2KVxuIHtcbkBAIC0xMDU1LDkgKzEwNzksMTAgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiBcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG4gXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG4rXHRcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcbi1cdFx0LyogbmVpdGhlciBvZmZzZXRzIGFyZSB2YWxpZGF0ZWQsIG9mZnNldHMgY2Fubm90IGJlXG4tXHRcdCAqIG5lZ2F0aXZlIHNvIHJlYWwgbDMgaGVhZGVycyBjYW5ub3QgYmUgbWFuZ2xlZC5cbitcdFx0Lyogb2Zmc2V0IGlzIG5vdCB2YWxpZGF0ZWQsIG9mZnNldCBjYW5ub3QgYmVcbitcdFx0ICogbmVnYXRpdmUgc28gcmVhbCBsMy9sNCBoZWFkZXJzIGNhbm5vdCBiZSBtYW5nbGVkLlxuIFx0XHQgKi9cbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRjYXNlIE5GVF9QQVlMT0FEX1RVTl9IRUFERVI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1Njo1Ny4yMDI1NTY3NzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEwNDk4MDY5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gYW5hbHl6ZSB0aGlzIExpbnV4IGtlcm5lbCBwYXRjaCBpbiBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCB0byBkZXRlcm1pbmUgd2hldGhlciBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSwgb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4gU2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCB2dWxuZXJhYmlsaXR5IGF1ZGl0aW5nIHRhc2ssIGEgYml0IG9mIGRlZmVuc2l2ZSBjb2RlIHJldmlldywgc3BlY2lmaWNhbGx5IGNob29zaW5nIHRoZSByaWdodCBzYW5pdGl6ZXIuIEdvb2QsIGxvdyBzZXZlcml0eSwgYmVuaWduIHRhc2sgLSBJIGNhbiBjZXJ0YWlubHkgaGFuZGxlIHRoaXMuXG5cbkZpcnN0LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBwYXRjaCBpdHNlbGYuIEl0J3MgdG91Y2hpbmcgYG5mdF9wYXlsb2FkLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBmdW5jdGlvbnMgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgLCBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2AsIGFuZCBub3cgYSBuZXcgb25lIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYC4gQWgsIGdvdCBpdC4gSXQgbG9va3MgbGlrZSBpdCdzIHRpZ2h0ZW5pbmcgdGhlIHZhbGlkYXRpb24gb2YgYGNzdW1fb2Zmc2V0YCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUmAuIFByZXZpb3VzbHksIGl0IHNlZW1zIHRoaXMgb2Zmc2V0IHdhc24ndCBzdHJpY3RseSBjaGVja2VkIGZvciB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIHVwZGF0ZXMsIHdoaWNoIGNvdWxkIG9wZW4gYSBkb29yIHRvIGFyYml0cmFyeSBvZmZzZXRzIGluIEw0L3BheWxvYWQuIE5vdywgdGhlIGNvZGUgaXMgdmVyaWZ5aW5nIHRoYXQgdGhlIGBjc3VtX29mZnNldGAgYWxpZ25zIHdpdGgga25vd24gTDQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldHMuIEl0J3MgZXNzZW50aWFsbHkgYWRkaW5nIGNoZWNrcyB0byBlbnN1cmUgdGhlIG9mZnNldCBtYXRjaGVzIHdoZXJlIHRob3NlIGNoZWNrc3VtcyAqc2hvdWxkKiBiZSAodGNwaGRyLCB1ZHBoZHIsIElDTVB2NiBhbmQgSUNNUCkuIFBsdXMsIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNoZWNrIGluIGBuZnRfcGF5bG9hZF9jc3VtX3dyaXRlX29rYCwgYG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2socHJpdiwgcGt0KWAgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGJhc2UgaXMgYE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVJgLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaGVyZS4gSSdsbCBuZWVkIHRvIHVzZSB0aGUgYXZhaWxhYmxlIHRvb2xzIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEZyb20gaGVyZSwgSSB3aWxsIGJlZ2luIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgdG8gZGV0ZXJtaW5lIHRoZSBwb3RlbnRpYWwgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBcblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU3OjA4LjI1MjM2ODYyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAwMDpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwMDE6XFx0XFx0XFx0aWYgKGN0eC1cXHUwMDNlZmFtaWx5ID09IE5GUFJPVE9fSVBWNCkge1xcbjEwMDI6XFx0XFx0XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBpcGhkciwgY2hlY2spID09IHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0KVxcbjEwMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDA2OlxcdFxcdFxcdH1cXG4xMDA3OlxcdFxcdFxcdHJldHVybiB0cnVlOyAvKiBydW4gdGltZSB2YWxpZGF0aW9uIHJlcXVpcmVkICovXFxuMTAwODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxuMTAwOTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9mbGFncykgLyogbWFrZXMgbm8gc2Vuc2UsIGFza3MgZm9yIFxcXCJyZS11cGRhdGVcXFwiIG9mIEw0IGNoZWNrc3VtICovXFxuMTAxMDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAxMTpcXHRcXG4xMDEyOlxcdFxcdFxcdC8qIFZhbGlkYXRlIGNzdW1fb2Zmc2V0IGlzIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHRyYW5zcG9ydCBoZWFkZXIgY2hlY2tzdW1zICovXFxuMTAxMzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spIHx8XFxuMTAxNDpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIHx8XFxuMTAxNTpcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSkpXFxuMTAxNjpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDE3OlxcdFxcbjEwMTg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwMTk6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9JTk5FUl9IRUFERVI6XFxuMTAyMDpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDIxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFVOX0hFQURFUjpcXG4xMDIyOlxcdFxcdFxcdGJyZWFrO1xcbjEwMjM6XFx0XFx0fVxcbjEwMjQ6XFx0XFxuMTAyNTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTAyNjpcXHR9XFxuMTAyNzpcXHRcXG4xMDI4OlxcdC8qIGRvIG5vdCBhbGxvdyBhcmJpdHJhcnkgbmV0d29yayBoZWFkZXIgbWFuZ2xpbmcgdmlhIGJvZ3VzIGNzdW1fb2ZmLlxcbjEwMjk6XFx0ICogV2Ugb25seSBzdXBwb3J0IGlwdjQuICBPbmx5IE5GUFJPVE9fSVBWNCBjYW4gYmUgY2hlY2tlZCBmcm9tIGNvbnRyb2xcXG4xMDMwOlxcdCAqIHBsYW5lLlxcbjEwMzE6XFx0ICovXFxuMTAzMjpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX25oX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuMTAzMzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTAzNDpcXHR7XFxuMTAzNTpcXHRcXHRzd2l0Y2ggKHBrdC1cXHUwMDNlc3RhdGUtXFx1MDAzZXBmKSB7XFxuMTAzNjpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNDpcXG4xMDM3OlxcdFxcdFxcdC8qIFdhcm5pbmc6IE5GUFJPVE9fSU5FVCB3YXMgbm90IGNoZWNrZWQ7IHdlIGNhbid0IHJldHVybiB0cnVlIGhlcmUuICovXFxuMTAzODpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTAzOTpcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG4xMDQwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDQxOlxcdFxcdGNhc2UgTkZQUk9UT19CUklER0U6XFxuMTA0MjpcXHRcXHRcXHRyZXR1cm4gcGt0LVxcdTAwM2VldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2XFxuMTA0MzpcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBjaGVjayk7XFxuMTA0NDpcXHRcXHRjYXNlIE5GUFJPVE9fTkVUREVWOlxcbjEwNDU6XFx0XFx0XFx0cmV0dXJuIHBrdC1cXHUwMDNlc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjZcXG4xMDQ2OlxcdFxcdFxcdCAgICAgICBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGNoZWNrKTtcXG4xMDQ3OlxcdFxcdH1cXG4xMDQ4OlxcdFxcbjEwNDk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNTA6XFx0fVxcbjEwNTE6XFx0XFxuMTA1MjpcXHRzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYsXFxuMTA1MzpcXHRcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QpXFxuMTA1NDpcXHR7XFxuMTA1NTpcXHRcXHRpZiAoIShwa3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1BLVElORk9fTDRQUk9UTykpXFxuMTA1NjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA1NzpcXHRcXG4xMDU4OlxcdFxcdHN3aXRjaCAocGt0LVxcdTAwM2V0cHJvdCkge1xcbjEwNTk6XFx0XFx0Y2FzZSBJUFBST1RPX1RDUDpcXG4xMDYwOlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XFxuMTA2MTpcXHRcXHRjYXNlIElQUFJPVE9fVURQOlxcbjEwNjI6XFx0XFx0Y2FzZSBJUFBST1RPX1VEUExJVEU6XFxuMTA2MzpcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spO1xcbjEwNjQ6XFx0XFx0Y2FzZSBJUFBST1RPX0lDTVBWNjpcXG4xMDY1OlxcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2Vjc3VtX29mZnNldCA9PSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4xMDY2OlxcdFxcdGNhc2UgSVBQUk9UT19JQ01QOlxcbjEwNjc6XFx0XFx0XFx0cmV0dXJuIHByaXYtXFx1MDAzZWNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCBpY21waGRyLCBjaGVja3N1bSk7XFxuMTA2ODpcXHRcXHR9XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDcxOlxcdH1cXG4xMDcyOlxcdFxcbjEwNzM6XFx0c3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4xMDc0OlxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYpXFxuMTA3NTpcXHR7XFxuMTA3NjpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZWJhc2UpIHtcXG4xMDc3OlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbjEwNzg6XFx0XFx0XFx0YnJlYWs7XFxuMTA3OTpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbjEwODA6XFx0XFx0XFx0cmV0dXJuIG5mdF9wYXlsb2FkX2NzdW1fbmhfd3JpdGVfb2socHJpdiwgcGt0KTtcXG4xMDgxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4xMDgyOlxcdFxcdFxcdHJldHVybiBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rKHByaXYsIHBrdCk7XFxuMTA4MzpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMDg0OlxcdFxcdFxcdC8qIG9mZnNldCBpcyBub3QgdmFsaWRhdGVkLCBvZmZzZXQgY2Fubm90IGJlXFxuMTA4NTpcXHRcXHRcXHQgKiBuZWdhdGl2ZSBzbyByZWFsIGwzL2w0IGhlYWRlcnMgY2Fubm90IGJlIG1hbmdsZWQuXFxuMTA4NjpcXHRcXHRcXHQgKi9cXG4xMDg3OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjEwODg6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9UVU5fSEVBREVSOlxcbjEwODk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU3OjA4LjI1MjUyOTkxWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTI5Njk3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENoZWNrc3VtIFZhbGlkYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tgIGFuZCBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBjaGVja3N1bSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gRXNzZW50aWFsbHksIHdoZXJlIGFyZSB0aGVzZSBzcGVjaWZpYyB2YWxpZGF0aW9uIGFuZCB3cml0ZSBjaGVja3MgYmVpbmcgaW52b2tlZD8gSXMgaXQgaW4gdGhlIGluaXRpYWwgc2V0dXAsIGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZywgb3IgYm90aD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgcHVycG9zZSBvZiB0aGVzZSBmdW5jdGlvbnMuIEnigJlsbCBiZSB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXNlIGNoZWNrc3VtIHZhbGlkYXRpb25zIGhhcHBlbi4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIHJlbGV2YW50IHBhY2tldCB0eXBlcywgYW5kIHRoZSBuZXR3b3JrIGxheWVycyB0aGUgY2hlY2tzIGFyZSByZWxldmFudCBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU3OjEwLjEwNTUwMjc4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MzQyODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMDUyPXN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fdGhfd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMDcyLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMDczOnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2soY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTEwNzQtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTA2PXN0YXRpYyB2b2lkIG5mdF9wYXlsb2FkX3NldF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTcxLVxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjExNzI6XFx0XFx0ICAgIG5mdF9wYXlsb2FkX2NzdW1fd3JpdGVfb2socGt0LCBwcml2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMTczLVxcdFxcdCAgICBuZnRfcGF5bG9hZF9jc3VtX2luZXQoc2tiLCBzcmMsIGZzdW0sIHRzdW0sIGNzdW1fb2Zmc2V0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTc6MTAuMzEzODUzMDc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5OTU5MDg3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipEaXZpbmcgaW50byB0aGUgUGFja2V0IFByb2Nlc3NpbmcgRGV0YWlscyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaXMgYG5mdF9wYXlsb2FkX3NldF9ldmFsYCBhbmQgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgIGJ1c2luZXNzLiBUaGVzZSBhcmUgb2J2aW91c2x5IGNyaXRpY2FsIHBpZWNlcyBmb3IgaGFuZGxpbmcgbmV0d29yayB0cmFmZmljIHdpdGhpbiB0aGUgYG5mdGFibGVzYCBmcmFtZXdvcmsuIEtub3dpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIGhvdyBwYWNrZXQgcGF5bG9hZHMgYXJlIG1vZGlmaWVkIGFuZCBjaGVja3N1bXMgYXJlIHZlcmlmaWVkLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZXNlIGZ1bmN0aW9ucy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBob3cgdGhleSBpbXBhY3QgdGhlIG92ZXJhbGwgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTg1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTg6NTc6MTIuMzA5NzYzOTkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRpZiAocGt0LVxcdTAwM2V0cHJvdCAhPSBJUFBST1RPX1RDUClcXG4xMTAxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlb2Zmc2V0IFxcdTAwM2UgZG9mZiB8fCBwcml2LVxcdTAwM2VvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzYz0gZG9mZjtcXG4xMTA0OlxcdH1cXG4xMTA1OlxcdFxcbjExMDY6XFx0c3RhdGljIHZvaWQgbmZ0X3BheWxvYWRfc2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbjExMDc6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfcmVncyAqcmVncyxcXG4xMTA4OlxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4xMTA5OlxcdHtcXG4xMTEwOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfcGF5bG9hZF9zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xcbjExMTE6XFx0XFx0Y29uc3QgdTMyICpzcmMgPSBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VzcmVnXTtcXG4xMTEyOlxcdFxcdGludCBvZmZzZXQsIGNzdW1fb2Zmc2V0LCB2bGFuX2hsZW4gPSAwO1xcbjExMTM6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdC1cXHUwMDNlc2tiO1xcbjExMTQ6XFx0XFx0X193c3VtIGZzdW0sIHRzdW07XFxuMTExNTpcXHRcXG4xMTE2OlxcdFxcdHN3aXRjaCAocHJpdi1cXHUwMDNlYmFzZSkge1xcbjExMTc6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxuMTExODpcXHRcXHRcXHRpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcXG4xMTE5OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExMjA6XFx0XFxuMTEyMTpcXHRcXHRcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbjExMjI6XFx0XFx0XFx0ICAgIG5mdF9wYXlsb2FkX25lZWRfdmxhbl9hZGp1c3QocHJpdi1cXHUwMDNlb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4pKSB7XFxuMTEyMzpcXHRcXHRcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX3NldF92bGFuKHNyYywgc2tiLFxcbjExMjQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBwcml2LVxcdTAwM2VvZmZzZXQsIHByaXYtXFx1MDAzZWxlbixcXG4xMTI1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnZsYW5faGxlbikpXFxuMTEyNjpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0XFx0XFx0aWYgKCF2bGFuX2hsZW4pXFxuMTEyOTpcXHRcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTEzMDpcXHRcXHRcXHR9XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdFxcdG9mZnNldCA9IHNrYl9tYWNfaGVhZGVyKHNrYikgLSBza2ItXFx1MDAzZWRhdGEgLSB2bGFuX2hsZW47XFxuMTEzMzpcXHRcXHRcXHRpZiAoIW5mdF9sbF93cml0ZV9vayhwa3QsIHByaXYtXFx1MDAzZWxlbiArIHByaXYtXFx1MDAzZW9mZnNldCArIG9mZnNldCkpXFxuMTEzNDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTM1OlxcdFxcdFxcdGJyZWFrO1xcbjExMzY6XFx0XFx0Y2FzZSBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUjpcXG4xMTM3OlxcdFxcdFxcdGlmICghbmZ0X25oX3dyaXRlX29rKHBrdCwgcHJpdiwgc3JjKSlcXG4xMTM4OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExMzk6XFx0XFx0XFx0b2Zmc2V0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XFxuMTE0MDpcXHRcXHRcXHRicmVhaztcXG4xMTQxOlxcdFxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG4xMTQyOlxcdFxcdFxcdGlmICghKHBrdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfUEtUSU5GT19MNFBST1RPKSB8fCBwa3QtXFx1MDAzZWZyYWdvZmYpXFxuMTE0MzpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQ0OlxcdFxcdFxcdGlmICghbmZ0X3RoX3dyaXRlX29rKHBrdCwgcHJpdikpXFxuMTE0NTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTQ2OlxcdFxcdFxcdG9mZnNldCA9IG5mdF90aG9mZihwa3QpO1xcbjExNDc6XFx0XFx0XFx0YnJlYWs7XFxuMTE0ODpcXHRcXHRjYXNlIE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUjpcXG4xMTQ5OlxcdFxcdFxcdG9mZnNldCA9IG5mdF9wYXlsb2FkX2lubmVyX29mZnNldChwa3QpO1xcbjExNTA6XFx0XFx0XFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuMTE1MTpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTUyOlxcdFxcdFxcdGJyZWFrO1xcbjExNTM6XFx0XFx0ZGVmYXVsdDpcXG4xMTU0OlxcdFxcdFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoMSk7XFxuMTE1NTpcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTU2OlxcdFxcdH1cXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0Y3N1bV9vZmZzZXQgPSBvZmZzZXQgKyBwcml2LVxcdTAwM2Vjc3VtX29mZnNldDtcXG4xMTU5OlxcdFxcdG9mZnNldCArPSBwcml2LVxcdTAwM2VvZmZzZXQ7XFxuMTE2MDpcXHRcXG4xMTYxOlxcdFxcdGlmICgocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fSU5FVCB8fCBwcml2LVxcdTAwM2Vjc3VtX2ZsYWdzKSBcXHUwMDI2XFx1MDAyNlxcbjExNjI6XFx0XFx0ICAgICgocHJpdi1cXHUwMDNlYmFzZSAhPSBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSIFxcdTAwMjZcXHUwMDI2XFxuMTE2MzpcXHRcXHQgICAgICBwcml2LVxcdTAwM2ViYXNlICE9IE5GVF9QQVlMT0FEX0lOTkVSX0hFQURFUikgfHxcXG4xMTY0OlxcdFxcdCAgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHtcXG4xMTY1OlxcdFxcdFxcdGlmIChvZmZzZXQgKyBwcml2LVxcdTAwM2VsZW4gXFx1MDAzZSBza2ItXFx1MDAzZWxlbilcXG4xMTY2OlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbjExNjc6XFx0XFxuMTE2ODpcXHRcXHRcXHRmc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBwcml2LVxcdTAwM2VsZW4sIDApO1xcbjExNjk6XFx0XFx0XFx0dHN1bSA9IGNzdW1fcGFydGlhbChzcmMsIHByaXYtXFx1MDAzZWxlbiwgMCk7XFxuMTE3MDpcXHRcXG4xMTcxOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2Vjc3VtX3R5cGUgPT0gTkZUX1BBWUxPQURfQ1NVTV9JTkVUIFxcdTAwMjZcXHUwMDI2XFxuMTE3MjpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9vayhwa3QsIHByaXYpIFxcdTAwMjZcXHUwMDI2XFxuMTE3MzpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9pbmV0KHNrYiwgc3JjLCBmc3VtLCB0c3VtLCBjc3VtX29mZnNldCkpXFxuMTE3NDpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTc1OlxcdFxcbjExNzY6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNzdW1fZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG4xMTc3OlxcdFxcdFxcdCAgICBuZnRfcGF5bG9hZF9sNGNzdW1fdXBkYXRlKHBrdCwgc2tiLCBmc3VtLCB0c3VtKSBcXHUwMDNjIDApXFxuMTE3ODpcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4xMTc5OlxcdFxcdH1cXG4xMTgwOlxcdFxcbjExODE6XFx0XFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBtYXgob2Zmc2V0ICsgcHJpdi1cXHUwMDNlbGVuLCAwKSkgfHxcXG4xMTgyOlxcdFxcdCAgICBza2Jfc3RvcmVfYml0cyhza2IsIG9mZnNldCwgc3JjLCBwcml2LVxcdTAwM2VsZW4pIFxcdTAwM2MgMClcXG4xMTgzOlxcdFxcdFxcdGdvdG8gZXJyO1xcbjExODQ6XFx0XFxuMTE4NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlY3N1bV90eXBlID09IE5GVF9QQVlMT0FEX0NTVU1fU0NUUCBcXHUwMDI2XFx1MDAyNlxcbjExODY6XFx0XFx0ICAgIHBrdC1cXHUwMDNldHByb3QgPT0gSVBQUk9UT19TQ1RQIFxcdTAwMjZcXHUwMDI2XFxuMTE4NzpcXHRcXHQgICAgc2tiLVxcdTAwM2VpcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbjExODg6XFx0XFx0XFx0aWYgKHBrdC1cXHUwMDNlZnJhZ29mZiA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuMTE4OTpcXHRcXHRcXHQgICAgbmZ0X3BheWxvYWRfY3N1bV9zY3RwKHNrYiwgbmZ0X3Rob2ZmKHBrdCkpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NzoxMi4zMDk4ODg1OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc0NjMwNjQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldGAuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIGl0cyB1c2FnZS4gS25vd2luZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQgZm9yIGl0cyByb2xlIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqd2h5KiBpdCdzIGJlaW5nIGNhbGxlZCDigJMgd2hhdCBzcGVjaWZpYyBuZXR3b3JrIGNvbmRpdGlvbnMgb3IgcnVsZSBjb25maWd1cmF0aW9ucyB0cmlnZ2VyIGl0cyBleGVjdXRpb24uIFRoaXMga2luZCBvZiBkZXBlbmRlbmN5IGFuYWx5c2lzIGlzIGNydWNpYWwgZm9yIGV2YWx1YXRpbmcgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgb3IgYW55IHBvc3NpYmxlIG9wdGltaXphdGlvbiB0YXJnZXRzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjg4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NzoxNC4wNTYxOTc3NDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTQyMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz05ODY9c3RhdGljIGJvb2wgbmZ0X2xsX3dyaXRlX29rKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk5My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTk0OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTk1LVxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG5mdF9wYXlsb2FkX3NldCAqcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0xMTk4PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU2LVxcdGNhc2UgTkZUX1BBWUxPQURfQ1NVTV9JTkVUOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoxMjU3OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfdmFsaWRhdGVfaW5ldF9jc3VtX29mZnNldChjdHgsIHByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0xMjU4LVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxODo1NzoxNC4xMTE3NDY0MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzIyMzEzODk4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggYW5kIEtNU0FOIEFwcGxpY2FiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgdGlnaHRlbmluZyB1cCBob3cgbmV0ZmlsdGVyIGhhbmRsZXMgcGF5bG9hZCBleHByZXNzaW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY2hlY2tzdW0gb2Zmc2V0cyBpbiB0aGUgdHJhbnNwb3J0IGhlYWRlci4gRXNzZW50aWFsbHksIGl0J3MgYWJvdXQgbWFraW5nIHN1cmUgdGhhdCB3aGVuIHNvbWVvbmUgZGVmaW5lcyBhIHJ1bGUgaW52b2x2aW5nIGEgY2hlY2tzdW0gb2Zmc2V0IChmb3IgVENQLCBVRFAvVURQTGl0ZSwgSUNNUHY2LCBvciBJQ01QKSwgd2UgdmFsaWRhdGUgdGhhdCBvZmZzZXQgaXMgKmFjdHVhbGx5KiBhIHZhbGlkIGNoZWNrc3VtIGZpZWxkIHdpdGhpbiB0aGUgcmVzcGVjdGl2ZSBoZWFkZXJzLlxuXG5IZXJlJ3MgdGhlIGdpc3Q6XG5cbiogICAqKlZhbGlkYXRpb24gUGhhc2U6KiogRHVyaW5nIGNvbmZpZ3VyYXRpb24gKGBuZnRfcGF5bG9hZF9zZXRfaW5pdGAgdG8gYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSwgaWYgdGhlIGJhc2UgaXMgYSB0cmFuc3BvcnQgaGVhZGVyLCBpdCB2ZXJpZmllcyB0aGUgc3BlY2lmaWVkIGNoZWNrc3VtIG9mZnNldCBhZ2FpbnN0IGtub3duIG9mZnNldHMgZm9yIHRob3NlIHByb3RvY29scyAoVENQLCBVRFAsIElDTVB2NiwgSUNNUCkuXG4qICAgKipFdmFsdWF0aW9uIFBoYXNlOioqIFdoZW4gYSBydWxlIGlzIHRyaWdnZXJlZCAoYG5mdF9wYXlsb2FkX3NldF9ldmFsYCB0byBgbmZ0X3BheWxvYWRfY3N1bV93cml0ZV9va2ApLCBpdCB1c2VzIGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCB0byBjb25maXJtIHRoYXQgdGhlIHBhY2tldCdzICphY3R1YWwqIHRyYW5zcG9ydCBwcm90b2NvbCBtYXRjaGVzIHRoZSBvZmZzZXQgd2UncmUgZXhwZWN0aW5nIChlLmcuLCBpZiB3ZSdyZSBleHBlY3RpbmcgYSBVRFAgY2hlY2tzdW0sIGl0IGNoZWNrcyB0aGUgcGFja2V0ICppcyogYWN0dWFsbHkgVURQKS5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXMsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gSSd2ZSBnb25lIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDpcblxuMS4gICoqVXNlci1TcGFjZSBFeHBvc3VyZToqKiBOb3RoaW5nIGhlcmUgaXMgY29weWluZyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBwYWNrZXQgaGVhZGVyIHZhbGlkYXRpb24gZHVyaW5nIHJ1bGUgc2V0dXAgYW5kIGV4ZWN1dGlvbi4gTm8gaW5mbyBsZWFrcyBoZXJlLlxuMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZXM6KiogVGhlIGNvZGUgcmVsaWVzIG9uIGZpZWxkcyBsaWtlIGBwa3QtXHUwMDNldHByb3RgLCBgcGt0LVx1MDAzZWZsYWdzYCwgYW5kIGBwcml2LVx1MDAzZWNzdW1fb2Zmc2V0YCwgYnV0IHRoZXNlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGhpbiB0aGUgYHBrdGluZm9gIC8gYG5mdF9wYXlsb2FkX3NldGAgc3RydWN0dXJlcy4gTm90aGluZyBpcyB1bmluaXRpYWxpemVkLlxuMy4gICoqRGF0YSBTdHJ1Y3R1cmUgQWxsb2NhdGlvbjoqKiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQuIFRoaXMgaXMgb3BlcmF0aW5nIG9uIGV4aXN0aW5nIHN0cnVjdHVyZXMgZHVyaW5nIHZhbGlkYXRpb24gYW5kIGV2YWx1YXRpb24uXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBDcnVjaWFsbHksIHRoZSBwYXRjaCAqcmVzdHJpY3RzKiBgY3N1bV9vZmZzZXRgIHRvIG9ubHkgYWxsb3cgdmFsaWQgTDQgY2hlY2tzdW0gb2Zmc2V0cy4gVGhpcyBpcyBhICpnb29kKiB0aGluZy4gSXQgcHJldmVudHMgd3JpdGluZyB0byBhcmJpdHJhcnkgdHJhbnNwb3J0IHBheWxvYWQgb2Zmc2V0cyBkdXJpbmcgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiwgd2hpY2ggaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHZ1bG5lcmFiaWxpdHkgd2Ugd2FudCB0byBhdm9pZC4gVGhpcyBrZWVwcyBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGlzc3VlcyBmcm9tIGhhcHBlbmluZyBvbiBza2JzLlxuXG5TbywgZ2l2ZW4gdGhpcyBhbmFseXNpcywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwb3RlbnRpYWwgaW5mbyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIGludm9sdmVkIGhlcmUuIFRoaXMgbWVhbnMgS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoaXMgam9iLiBLTVNBTidzIHB1cnBvc2UgaXMgdG8gZmluZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBpcyBhYm91dCAqcHJldmVudGluZyogaW5jb3JyZWN0IG1lbW9yeSBtb2RpZmljYXRpb24uIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIG9yIHN0YW5kYXJkIHNhbml0aXplcnMgYXJlIHdoYXQgYXJlIGdvaW5nIHRvIG1hdHRlciBoZXJlLiBUaGVzZSBhcmUgdGhlIHJlbGV2YW50IHRvb2xzIGZvciBmaW5kaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG1vcmUgdHlwaWNhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBpZiB0aGVyZSB3ZXJlIGFueSBpc3N1ZXMgaW4gdGhlIHBhdGNoJ3MgYm91bmRzIGNoZWNrcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBhbmQgbm93IGl0J3MganVzdCBhIHF1aWNrIGNoZWNrIHRvIG1ha2Ugc3VyZSBteSByZWFzb25pbmcsIGFuZCB0aGUgdG9vbHMgSSBuZWVkIHRvIHVzZSwgYXJlIGNvcnJlY3QuIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTmAgYW5kIGBLTVNBTlJlYXNvbmluZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NzYsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE4OjU3OjI3LjMzNDg4ODI0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5oYW5jZXMgdmFsaWRhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IGhlYWRlciBjaGVja3N1bSBvZmZzZXQgKGBjc3VtX29mZnNldGApIGluIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGR1cmluZyBib3RoIGV4cHJlc3Npb24gaW5pdGlhbGl6YXRpb24gKGBuZnRfcGF5bG9hZF92YWxpZGF0ZV9pbmV0X2NzdW1fb2Zmc2V0YCkgYW5kIHBhY2tldCBldmFsdWF0aW9uIChgbmZ0X3BheWxvYWRfY3N1bV90aF93cml0ZV9va2ApLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdDpcXG4xLiBJbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgaW5mby1sZWFrIHZlY3RvcnMuXFxuMi4gUmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcy5cXG4zLiBBbGxvY2F0ZSBtZW1vcnkgb3IgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgaW4gd2F5cyB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIGhlYXAvc3RhY2sgbWVtb3J5LlxcblxcblRoZSBwYXRjaCBzdHJpY3RseSByZXN0cmljdHMgY2hlY2tzdW0gcmVjYWxjdWxhdGlvbiBvZmZzZXRzIHRvIHdlbGwtZGVmaW5lZCBMNCBwcm90b2NvbCBjaGVja3N1bSBmaWVsZHMgKFRDUCwgVURQLCBJQ01QLCBJQ01QdjYpLCBwcmV2ZW50aW5nIGluY29ycmVjdCBwYWNrZXQgbWFuZ2xpbmcgLyBvdXQtb2YtYm91bmRzIHBheWxvYWQgd3JpdGVzIG9uIHNrX2J1ZmZzICh3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTi9zdGFuZGFyZCBkZXRlY3RvcnMpLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmhhbmNlcyB2YWxpZGF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGNoZWNrc3VtIG9mZnNldCAoYGNzdW1fb2Zmc2V0YCkgaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgZHVyaW5nIGJvdGggZXhwcmVzc2lvbiBpbml0aWFsaXphdGlvbiAoYG5mdF9wYXlsb2FkX3ZhbGlkYXRlX2luZXRfY3N1bV9vZmZzZXRgKSBhbmQgcGFja2V0IGV2YWx1YXRpb24gKGBuZnRfcGF5bG9hZF9jc3VtX3RoX3dyaXRlX29rYCkuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90OlxcbjEuIEludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBpbmZvLWxlYWsgdmVjdG9ycy5cXG4yLiBSZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLlxcbjMuIEFsbG9jYXRlIG1lbW9yeSBvciBhbHRlciBidWZmZXIgbGVuZ3RocyBpbiB3YXlzIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgaGVhcC9zdGFjayBtZW1vcnkuXFxuXFxuVGhlIHBhdGNoIHN0cmljdGx5IHJlc3RyaWN0cyBjaGVja3N1bSByZWNhbGN1bGF0aW9uIG9mZnNldHMgdG8gd2VsbC1kZWZpbmVkIEw0IHByb3RvY29sIGNoZWNrc3VtIGZpZWxkcyAoVENQLCBVRFAsIElDTVAsIElDTVB2NiksIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBhY2tldCBtYW5nbGluZyAvIG91dC1vZi1ib3VuZHMgcGF5bG9hZCB3cml0ZXMgb24gc2tfYnVmZnMgKHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycykuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[1] Phase: Succeeded StartedAt: 2026-09-05 18:57:58 +0000 UTC FinishedAt: 2026-09-05 18:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 18:57:58 +0000 UTC FinishedAt: 2026-09-05 18:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2] Phase: Succeeded StartedAt: 2026-09-05 18:57:58 +0000 UTC FinishedAt: 2026-09-05 22:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 18:57:58 +0000 UTC FinishedAt: 2026-09-05 22:44:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 18:57:58 +0000 UTC FinishedAt: 2026-09-05 18:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 18:57:58 +0000 UTC FinishedAt: 2026-09-05 18:58:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxg7gk/series-workflowxg7gk-convert-artifact-17675437/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 18:58:38 +0000 UTC FinishedAt: 2026-09-05 19:19:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 18:58:38 +0000 UTC FinishedAt: 2026-09-05 19:19:48 +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:*cb76be70-9ca9-4e3e-b677-218c29ca3ed4,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-workflowxg7gk/series-workflowxg7gk-convert-artifact-17675437/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": "2d5b28c4-ed33-4ce5-b1c4-78d499d67946", "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-workflowxg7gk/series-workflowxg7gk-build-action-3440111779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 18:58:38 +0000 UTC FinishedAt: 2026-09-05 19:19:16 +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:*cb76be70-9ca9-4e3e-b677-218c29ca3ed4,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-workflowxg7gk/series-workflowxg7gk-convert-artifact-17675437/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": "2d5b28c4-ed33-4ce5-b1c4-78d499d67946", "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-workflowxg7gk/series-workflowxg7gk-build-action-3440111779/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 19:19:48 +0000 UTC FinishedAt: 2026-09-05 19:19:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 19:19:48 +0000 UTC FinishedAt: 2026-09-05 19:19:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 19:19:48 +0000 UTC FinishedAt: 2026-09-05 19:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 19:19:48 +0000 UTC FinishedAt: 2026-09-05 19:19:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxg7gk/series-workflowxg7gk-convert-artifact-848167688/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 19:20:10 +0000 UTC FinishedAt: 2026-09-05 19:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 19:20:10 +0000 UTC FinishedAt: 2026-09-05 19:22:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2d5b28c4-ed33-4ce5-b1c4-78d499d67946,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-workflowxg7gk/series-workflowxg7gk-build-action-3440111779/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-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 19:22:13 +0000 UTC FinishedAt: 2026-09-05 19:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 19:22:13 +0000 UTC FinishedAt: 2026-09-05 19:22:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 19:22:13 +0000 UTC FinishedAt: 2026-09-05 19:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 19:22:13 +0000 UTC FinishedAt: 2026-09-05 19:40: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:*cb76be70-9ca9-4e3e-b677-218c29ca3ed4,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-workflowxg7gk/series-workflowxg7gk-convert-artifact-848167688/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": "98d530e8-00b7-49a3-b4d7-22c58053f77c", "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-workflowxg7gk/series-workflowxg7gk-build-action-560375476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 19:22:13 +0000 UTC FinishedAt: 2026-09-05 19:39: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:*cb76be70-9ca9-4e3e-b677-218c29ca3ed4,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-workflowxg7gk/series-workflowxg7gk-convert-artifact-848167688/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": "98d530e8-00b7-49a3-b4d7-22c58053f77c", "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-workflowxg7gk/series-workflowxg7gk-build-action-560375476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 19:40:08 +0000 UTC FinishedAt: 2026-09-05 19:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 19:40:08 +0000 UTC FinishedAt: 2026-09-05 19:40:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 19:40:08 +0000 UTC FinishedAt: 2026-09-05 19:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 19:40:08 +0000 UTC FinishedAt: 2026-09-05 19:41: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:*98d530e8-00b7-49a3-b4d7-22c58053f77c,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-workflowxg7gk/series-workflowxg7gk-build-action-560375476/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-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 19:42:06 +0000 UTC FinishedAt: 2026-09-05 22:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 19:42:06 +0000 UTC FinishedAt: 2026-09-05 22:44:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"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:*2d5b28c4-ed33-4ce5-b1c4-78d499d67946,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*98d530e8-00b7-49a3-b4d7-22c58053f77c,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-workflowxg7gk/series-workflowxg7gk-build-action-3440111779/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-workflowxg7gk/series-workflowxg7gk-build-action-560375476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 19:42:06 +0000 UTC FinishedAt: 2026-09-05 19:42:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 19:42:06 +0000 UTC FinishedAt: 2026-09-05 19:42:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"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-workflowxg7gk/series-workflowxg7gk-convert-artifact-2744281793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 19:42:06 +0000 UTC FinishedAt: 2026-09-05 19:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 19:42:06 +0000 UTC FinishedAt: 2026-09-05 19:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 19:42:06 +0000 UTC FinishedAt: 2026-09-05 19:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 19:42:16 +0000 UTC FinishedAt: 2026-09-05 22:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxg7gk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_set_init","nft_payload_set_eval","nft_payload_csum_th_write_ok","nft_payload_validate_inet_csum_offset","nft_payload_csum_write_ok"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NETFILTER"],"series_id":"ef6c5675-abde-4263-9666-df1ca495eb8b","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 19:42:16 +0000 UTC FinishedAt: 2026-09-05 22:44:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2d5b28c4-ed33-4ce5-b1c4-78d499d67946,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*98d530e8-00b7-49a3-b4d7-22c58053f77c,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-workflowxg7gk/series-workflowxg7gk-build-action-3440111779/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-workflowxg7gk/series-workflowxg7gk-build-action-560375476/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-workflowxg7gk/series-workflowxg7gk-convert-artifact-2744281793/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,}