Name: series-workflowgnldj Phase: Succeeded StartedAt: 2026-08-18 12:04:45 +0000 UTC FinishedAt: 2026-08-18 16:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[0] Phase: Succeeded StartedAt: 2026-08-18 12:04:45 +0000 UTC FinishedAt: 2026-08-18 12:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 12:04:45 +0000 UTC FinishedAt: 2026-08-18 12:59:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "326d49039c10b65522ac7277b19b9b5c42ed1aeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "326d49039c10b65522ac7277b19b9b5c42ed1aeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "1bcd5abe-c2e0-47b9-b7fc-188586f25b3c" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_waitid", "io_waitid_cancel", "io_waitid_remove_all" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDssCiAgICAmIzM0O2lvX3dhaXRpZF9jYW5jZWwmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkX3JlbW92ZV9hbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGFuZCBjb21wbGV0aW9uIHBhdGhzIG9mIHRoZSBpb191cmluZyB3YWl0aWQgY29tbWFuZCB0byBjb25kaXRpb25hbGx5IHNraXAgY29weWluZyBgc2lnaW5mb2AgZGF0YSB0byB1c2VyIHNwYWNlIChgaW9fd2FpdGlkX2NvcHlfc2lgKSB3aGVuIHRoZSByZXF1ZXN0IGlzIGJlaW5nIGNhbmNlbGVkIG9yIHdoZW4gdGhlcmUgaXMgbm8gdmFsaWQgdGFzayBjb250ZXh0LiBUaGUgZGF0YSBiZWluZyBjb3BpZWQgKGBpdy1cdTAwM2VpbmZvYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVybyBpbiBgaW9fd2FpdGlkX3ByZXBgIHZpYSBgbWVtc2V0KFx1MDAyNml3LVx1MDAzZWluZm8sIDAsIHNpemVvZihpdy1cdTAwM2VpbmZvKSk7YCwgYW5kIHRoZSBjb3B5IG9wZXJhdGlvbiB1c2VzIGB1bnNhZmVfcHV0X3VzZXJgIHRvIHdyaXRlIGluZGl2aWR1YWwgZmllbGRzIHJhdGhlciB0aGFuIGNvcHlpbmcgYSBzdHJ1Y3Qgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIGxpa2VseSByZWxhdGVkIHRvIGludmFsaWQgdXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIChlLmcuLCB3cml0aW5nIHRvIGEgd3Jvbmcgb3IgZGVzdHJveWVkIGFkZHJlc3Mgc3BhY2UgZHVyaW5nIHRhc2sgZXhpdC9yaW5nIHRlYXJkb3duKSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIG9yIG1lbW9yeSBzYWZldHkgaXNzdWUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgZm9yIHRoZSBJT1JJTkdfT1BfV0FJVElEIG9wZXJhdGlvbiBpbiBpb191cmluZywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHdoZXRoZXIgc2lnaW5mbyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBkdXJpbmcgY2FuY2VsbGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzZGUxZGE4Yjk5NjlhMGU2M2E1ZTJlNTlmMGRjOTQyNmJkNjc0MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMjo1NjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi4xMjExZjkwNWE5ZGIyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMTI1LDcgJiM0MzsxMjUsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfcmVtb3ZlX3dxKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpXG4mIzQzO3N0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCwgYm9vbCBjb3B5X3NpKVxuIHtcbiBcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XG4gXG5AQCAtMTM3LDEzICYjNDM7MTM3LDE2IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbiBcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUpO1xuIFx0aW9fd2FpdGlkX3JlbW92ZV93cShyZXEpO1xuIFxuLVx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4mIzQzO1x0aWYgKGNvcHlfc2kpXG4mIzQzO1x0XHRyZXQgPSBpb193YWl0aWRfZmluaXNoKHJlcSwgcmV0KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRpb193YWl0aWRfZnJlZShyZXEpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmVxX3NldF9mYWlsKHJlcSk7XG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbiYjNDM7c3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCBib29sIGNvcHlfc2kpXG4ge1xuIFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcbiBcbkBAIC0xNTksMjEgJiM0MzsxNjIsMzIgQEAgc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIFx0aWYgKGF0b21pY19mZXRjaF9pbmMoXHUwMDI2aXctXHUwMDNlcmVmcykgXHUwMDI2IElPX1dBSVRJRF9SRUZfTUFTSylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7XG4mIzQzO1x0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgY29weV9zaSk7XG4gXHRpb19yZXFfcXVldWVfdHdfY29tcGxldGUocmVxLCAtRUNBTkNFTEVEKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NhbmNlbF9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2lvX3dhaXRpZF9jYW5jZWwocmVxLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NhbmNlbF9ub2NvcHlfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiB7XG4tXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZShjdHgsIGNkLCBpc3N1ZV9mbGFncywgXHUwMDI2Y3R4LVx1MDAzZXdhaXRpZF9saXN0LCBfX2lvX3dhaXRpZF9jYW5jZWwpO1xuJiM0MztcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xuIH1cbiBcbiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbiBcdFx0XHQgIGJvb2wgY2FuY2VsX2FsbClcbiB7XG4tXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsIF9faW9fd2FpdGlkX2NhbmNlbCk7XG4mIzQzO1x0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgXHUwMDI2Y3R4LVx1MDAzZXdhaXRpZF9saXN0LCBjYW5jZWxfYWxsLFxuJiM0MztcdFx0XHRcdCAgICAgICB0Y3R4ID8gaW9fd2FpdGlkX2NhbmNlbF9jYiA6IGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGlvX3dhaXRpZF9kcm9wX2lzc3VlX3JlZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbkBAIC0yMDIsNiAmIzQzOzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRpbnQgcmV0O1xuIFxuIFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcbiYjNDM7XHRpZiAodW5saWtlbHkodHcuY2FuY2VsKSkge1xuJiM0MztcdFx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgZmFsc2UpO1xuJiM0MztcdFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gX19kb193YWl0KFx1MDAyNml3YS1cdTAwM2V3byk7XG4gXG5AQCAtMjI5LDcgJiM0MzsyNDgsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIHJldCk7XG4mIzQzO1x0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgcmV0LCB0cnVlKTtcbiBcdGlvX3JlcV90YXNrX2NvbXBsZXRlKHR3X3JlcSwgdHcpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb193YWl0aWQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtpb193YWl0aWRfcmVtb3ZlX2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIGZvciB0aGUgSU9SSU5HX09QX1dBSVRJRCBvcGVyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGV0aGVyIHNpZ2luZm8gaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhM2RlMWRhOGI5OTY5YTBlNjNhNWUyZTU5ZjBkYzk0MjZiZDY3NDA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTI6NTY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jCmluZGV4IDMyZjY4ZmQ3ZmNkZGEuLjEyMTFmOTA1YTlkYjIgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3dhaXRpZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3dhaXRpZC5jCkBAIC0xMjUsNyAmIzQzOzEyNSw3IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9yZW1vdmVfd3Eoc3RydWN0IGlvX2tpb2NiICpyZXEpCiAJfQogfQogCi1zdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpCiYjNDM7c3RhdGljIHZvaWQgaW9fd2FpdGlkX2NvbXBsZXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0LCBib29sIGNvcHlfc2kpCiB7CiAJc3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTsKIApAQCAtMTM3LDEzICYjNDM7MTM3LDE2IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCkKIAlobGlzdF9kZWxfaW5pdCgmYW1wO3JlcS0mZ3Q7aGFzaF9ub2RlKTsKIAlpb193YWl0aWRfcmVtb3ZlX3dxKHJlcSk7CiAKLQlyZXQgPSBpb193YWl0aWRfZmluaXNoKHJlcSwgcmV0KTsKJiM0MzsJaWYgKGNvcHlfc2kpCiYjNDM7CQlyZXQgPSBpb193YWl0aWRfZmluaXNoKHJlcSwgcmV0KTsKJiM0MzsJZWxzZQomIzQzOwkJaW9fd2FpdGlkX2ZyZWUocmVxKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmVxX3NldF9mYWlsKHJlcSk7CiAJaW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApOwogfQogCi1zdGF0aWMgYm9vbCBfX2lvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX2tpb2NiICpyZXEpCiYjNDM7c3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCBib29sIGNvcHlfc2kpCiB7CiAJc3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTsKIApAQCAtMTU5LDIxICYjNDM7MTYyLDMyIEBAIHN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKIAlpZiAoYXRvbWljX2ZldGNoX2luYygmYW1wO2l3LSZndDtyZWZzKSAmYW1wOyBJT19XQUlUSURfUkVGX01BU0spCiAJCXJldHVybiBmYWxzZTsKIAotCWlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQpOwomIzQzOwlpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBjb3B5X3NpKTsKIAlpb19yZXFfcXVldWVfdHdfY29tcGxldGUocmVxLCAtRUNBTkNFTEVEKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiKHN0cnVjdCBpb19raW9jYiAqcmVxKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCwKIAkJICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiB7Ci0JcmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsICZhbXA7Y3R4LSZndDt3YWl0aWRfbGlzdCwgX19pb193YWl0aWRfY2FuY2VsKTsKJiM0MzsJcmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsICZhbXA7Y3R4LSZndDt3YWl0aWRfbGlzdCwgaW9fd2FpdGlkX2NhbmNlbF9jYik7CiB9CiAKIGJvb2wgaW9fd2FpdGlkX3JlbW92ZV9hbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LAogCQkJICBib29sIGNhbmNlbF9hbGwpCiB7Ci0JcmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgJmFtcDtjdHgtJmd0O3dhaXRpZF9saXN0LCBjYW5jZWxfYWxsLCBfX2lvX3dhaXRpZF9jYW5jZWwpOwomIzQzOwlyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCAmYW1wO2N0eC0mZ3Q7d2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsCiYjNDM7CQkJCSAgICAgICB0Y3R4ID8gaW9fd2FpdGlkX2NhbmNlbF9jYiA6IGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlvX3dhaXRpZF9kcm9wX2lzc3VlX3JlZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKQEAgLTIwMiw2ICYjNDM7MjE2LDExIEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAlpbnQgcmV0OwogCiAJaW9fdHdfbG9jayhjdHgsIHR3KTsKJiM0MzsJaWYgKHVubGlrZWx5KHR3LmNhbmNlbCkpIHsKJiM0MzsJCWlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQsIGZhbHNlKTsKJiM0MzsJCWlvX3JlcV90YXNrX2NvbXBsZXRlKHR3X3JlcSwgdHcpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKIAlyZXQgPSBfX2RvX3dhaXQoJmFtcDtpd2EtJmd0O3dvKTsKIApAQCAtMjI5LDcgJiM0MzsyNDgsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJCX0KIAl9CiAKLQlpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQpOwomIzQzOwlpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQsIHRydWUpOwogCWlvX3JlcV90YXNrX2NvbXBsZXRlKHR3X3JlcSwgdHcpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBXYWl0aWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy93YWl0aWQuY2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZm9jdXNlZCBtb2RpZmljYXRpb24sIHdpdGggc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIGhvdyBgd2FpdGlkYCBjb21wbGV0aW9uIGFuZCBjYW5jZWxsYXRpb24gYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGBib29sIGNvcHlfc2lgIGFyZ3VtZW50IHRvIGJvdGggYGlvX3dhaXRpZF9jb21wbGV0ZWAgYW5kIGBfX2lvX3dhaXRpZF9jYW5jZWxgLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIHRoZXNlIGBpb193YWl0aWRfY2FuY2VsX2NiYCBhbmQgYGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiYCBjYWxsYmFja3MuIFRoZSBleGlzdGluZyBgaW9fd2FpdGlkX2NhbmNlbGAsIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgZnVuY3Rpb25zIGhhdmUgYWxzbyBiZWVuIGFsdGVyZWQuIEFuZCBmaW5hbGx5LCBgaW9fd2FpdGlkX2NiYCBpcyBtb2RpZmllZCB0byBtYW5hZ2UgY2FuY2VsbGF0aW9ucyBzaWduYWxlZCB0aHJvdWdoIGB0dy5jYW5jZWxgIGFuZCwgY3J1Y2lhbGx5LCB0byBjYWxsIGBpb193YWl0aWRfY29tcGxldGVgIHdpdGggYC1FQ0FOQ0VMRURgIGFuZCBgZmFsc2VgIGZvciBgY29weV9zaWAgaW4gdGhvc2UgY2FzZXMuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBjaGFuZ2UgaW4gdGhlIGlvX3VyaW5nIHdhaXRpZCBpbXBsZW1lbnRhdGlvbi4gU2luY2UgaXQgZGVhbHMgd2l0aCBjb21wbGV0aW9uIGFuZCBjYW5jZWxsYXRpb24sIEkmIzM5O2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBmdXp6LiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgdGhlcmUgYXJlIG5vIG5ldyBlZGdlIGNhc2VzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggaW9fdXJpbmcuIEkgYmVsaWV2ZSB0aGUgcHJpbWFyeSBvbmUgaXMgYENPTkZJR19JT19VUklOR2AsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byB2ZXJpZnkuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgZnVuY3Rpb25zIHN1Y2ggYXMgYGlvX3dhaXRpZF9jYW5jZWxgLCBgaW9fd2FpdGlkX3JlbW92ZV9hbGxgLCBgaW9fd2FpdGlkX2NiYCwgYGlvX3dhaXRpZF9jb21wbGV0ZWAsIGFuZCBgX19pb193YWl0aWRfY2FuY2VsYCBpbiBgaW9fdXJpbmcvd2FpdGlkLmNgLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQuCgpGaW5hbGx5LCBJJiMzOTtsbCBwZXJmb3JtIGEgc2VhcmNoIHdpdGhpbiBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBvdGhlciBmaWxlcyBmb3IgaW5zdGFuY2VzIG9mIGBpb193YWl0aWRfY2FuY2VsYCBhbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlaXIgdXNhZ2UgYW5kIGhvdyB0aGUgcGF0Y2ggaW1wYWN0cyB0aGUgd2lkZXIgY29kZSBiYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dhaXRpZF9jYW5jZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvY2FuY2VsLmM9MTA1PWludCBpb190cnlfY2FuY2VsKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTEyNC1cbmlvX3VyaW5nL2NhbmNlbC5jOjEyNTpcdHJldCA9IGlvX3dhaXRpZF9jYW5jZWwoY3R4LCBjZCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvY2FuY2VsLmMtMTI2LVx0aWYgKHJldCAhPSAtRU5PRU5UKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jPTEyOD1zdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQsIGJvb2wgY29weV9zaSlcbi0tXG5pb191cmluZy93YWl0aWQuYy0xNDgtXG5pb191cmluZy93YWl0aWQuYzoxNDk6c3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCBib29sIGNvcHlfc2kpXG5pb191cmluZy93YWl0aWQuYy0xNTAte1xuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTE2OS1cbmlvX3VyaW5nL3dhaXRpZC5jOjE3MDpzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX2NiKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvd2FpdGlkLmMtMTcxLXtcbmlvX3VyaW5nL3dhaXRpZC5jOjE3MjpcdHJldHVybiBfX2lvX3dhaXRpZF9jYW5jZWwocmVxLCB0cnVlKTtcbmlvX3VyaW5nL3dhaXRpZC5jLTE3My19XG5pb191cmluZy93YWl0aWQuYy0xNzQtXG5pb191cmluZy93YWl0aWQuYzoxNzU6c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NhbmNlbF9ub2NvcHlfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy93YWl0aWQuYy0xNzYte1xuaW9fdXJpbmcvd2FpdGlkLmM6MTc3Olx0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIGZhbHNlKTtcbmlvX3VyaW5nL3dhaXRpZC5jLTE3OC19XG5pb191cmluZy93YWl0aWQuYy0xNzktXG5pb191cmluZy93YWl0aWQuYzoxODA6aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy93YWl0aWQuYy0xODEtXHRcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvd2FpdGlkLmMtMTgyLXtcbmlvX3VyaW5nL3dhaXRpZC5jOjE4MzpcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xuaW9fdXJpbmcvd2FpdGlkLmMtMTg0LX1cbi0tXG5pb191cmluZy93YWl0aWQuYz0xODY9Ym9vbCBpb193YWl0aWRfcmVtb3ZlX2FsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtMTg5LVx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgXHUwMDI2Y3R4LVx1MDAzZXdhaXRpZF9saXN0LCBjYW5jZWxfYWxsLFxuaW9fdXJpbmcvd2FpdGlkLmM6MTkwOlx0XHRcdFx0ICAgICAgIHRjdHggPyBpb193YWl0aWRfY2FuY2VsX2NiIDogaW9fd2FpdGlkX2NhbmNlbF9ub2NvcHlfY2IpO1xuaW9fdXJpbmcvd2FpdGlkLmMtMTkxLX1cbi0tXG5pb191cmluZy93YWl0aWQuaD0xMT1pbnQgaW9fd2FpdGlkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvd2FpdGlkLmg6MTI6aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy93YWl0aWQuaC0xMy1cdFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIHdhaXRpZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZGlnZ2luZyBpbnRvIHRoZSBgaW9fd2FpdGlkYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgaW9fd2FpdGlkX2NhbmNlbGAsIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAsIGFuZCBgaW9fd2FpdGlkX2NiYC4gVGhvc2UgYXJlIGNydWNpYWwgZnVuY3Rpb25zLCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNsZWFudXAgb2Ygd2FpdCBvcGVyYXRpb25zIGluaXRpYXRlZCB0aHJvdWdoIGBpb193YWl0aWRgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgd2lsbCBiZSBhaW1lZCBhdCBpbXByb3ZpbmcgdGhlIGhhbmRsaW5nIG9mIHdhaXRpbmcgZm9yIGkvbyBjb21wbGV0aW9ucywgcG9zc2libHkgYWRkaW5nIG1vcmUgcm9idXN0IGNhbmNlbGxhdGlvbiBtZWNoYW5pc21zLCBvciBtYXliZSBkZWFsaW5nIHdpdGggc29tZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBjYWxsYmFja3MgYW5kIGNvbXBsZXRpb24gZXZlbnRzIGFyZSBoYW5kbGVkLgoKYGlvX3dhaXRpZGAgaXRzZWxmIGlzLCBvZiBjb3Vyc2UsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgYHdhaXRpZGAgZnVuY3Rpb25hbGl0eSB3aXRoaW4gaW9fdXJpbmc7IHRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBvcmlnaW5hdGVzLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIGhvdyB0aGVzZSBtb2RpZmljYXRpb25zIGltcGFjdCB0aGUgb3ZlcmFsbCBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGRldmlsIGlzIGhpZGluZywgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgbG9ja2luZyBpc3N1ZXMsIHNpZ25hbCBoYW5kbGluZyBvciBhbnl0aGluZyB0byBkbyB3aXRoIGhvdyB0aGUgdXNlciBwcm9ncmFtIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpb193YWl0aWRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvd2FpdGlkLmM9Mjc5PWludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTMwMC1cbmlvX3VyaW5nL3dhaXRpZC5jOjMwMTppbnQgaW9fd2FpdGlkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy93YWl0aWQuYy0zMDIte1xuLS1cbmlvX3VyaW5nL3dhaXRpZC5oPTEwPWludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL3dhaXRpZC5oOjExOmludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy93YWl0aWQuaC0xMi1pbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzOgoKKipGb2N1c2luZyBJbiBvbiBJTyBXYWl0IE1hbmFnZW1lbnQqKgoKUmlnaHQsIGBpb193YWl0aWRgIGFuZCBgaW9fd2FpdGlkX2NhbmNlbGAg4oCTIHRob3NlIHR3byBhcmUgZGVmaW5pdGVseSBrZXkuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgdGhlIGNvcmUgcHJpbWl0aXZlcyBmb3IsIHdlbGwsIHdhaXRpbmcgZm9yIEkvTyBjb21wbGV0aW9uIGluIGEgbW9yZSBncmFudWxhciB3YXksIGxpa2VseSB0byBhdm9pZCBibG9ja2luZyB0aGUgd2hvbGUgcHJvY2Vzcy4gQW5kIG9mIGNvdXJzZSwgdGhlIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgZnVuY3Rpb24uLi4gdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBiZXQgaXQgaXMgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBjbGVhbi11cCBvZiBwZW5kaW5nIHdhaXRzLiBHb3R0YSBzZWUgaG93IHRoaXMgb25lIGdldHMgdXNlZCBpbiBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193YWl0aWRfcmVtb3ZlX2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9jYW5jZWwuYz01MTU9X19jb2xkIGJvb2wgaW9fdXJpbmdfdHJ5X2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy01NjAtXHRyZXQgfD0gaW9fcG9sbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgY2FuY2VsX2FsbCk7XG5pb191cmluZy9jYW5jZWwuYzo1NjE6XHRyZXQgfD0gaW9fd2FpdGlkX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBjYW5jZWxfYWxsKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTU2Mi1cdHJldCB8PSBpb19mdXRleF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgY2FuY2VsX2FsbCk7XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmM9MTgwPWludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTE4NS1cbmlvX3VyaW5nL3dhaXRpZC5jOjE4Njpib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbmlvX3VyaW5nL3dhaXRpZC5jLTE4Ny1cdFx0XHQgIGJvb2wgY2FuY2VsX2FsbClcbi0tXG5pb191cmluZy93YWl0aWQuaD0xMj1pbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbmlvX3VyaW5nL3dhaXRpZC5oLTEzLVx0XHQgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy93YWl0aWQuaDoxNDpib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbmlvX3VyaW5nL3dhaXRpZC5oLTE1LVx0XHRcdCAgYm9vbCBjYW5jZWxfYWxsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODEwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGlvX3VyaW5nIENhbmNlbGxhdGlvbiBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiBgaW9fdXJpbmdgLiBJdCBsb29rcyBsaWtlIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgaXMgdGhlIGNsZWFudXAgZnVuY3Rpb24gdHJpZ2dlcmVkIHdoZW4gd2UgdHJ5IHRvIGNhbmNlbCByZXF1ZXN0cyBmcm9tIGBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzYC4gRnVydGhlciBkb3duIHRoZSBjaGFpbiwgYGlvX3dhaXRpZF9jYW5jZWxgIGdldHMgY2FsbGVkIGZyb20gYGlvX3RyeV9jYW5jZWxgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGUgY2FuY2VsbGF0aW9uIGl0c2VsZi4gQW5kIEkgc2VlIHRoYXQgdGhlIGBpb193YWl0aWRgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgd2hlbiBleGVjdXRpbmcgdGhlIGlvX3VyaW5nIG9wY29kZXMuCgpOb3csIGJlZm9yZSBJIGdvIGRlZXBlciBpbnRvIHRoaXMsIGxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gQmVzaWRlcyB0aGUgb2J2aW91cyBvbmUsIGBDT05GSUdfSU9fVVJJTkdgLCBhcmUgdGhlcmUgYW55IG90aGVyIHNldHRpbmdzIG9yIGZsYWdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMgY2FuY2VsbGF0aW9uIGJlaGF2aW9yPyBJdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gY292ZXIgYWxsIGJhc2VzIHdoZW4gZGlzc2VjdGluZyBhIGNyaXRpY2FsIHBhdGggbGlrZSB0aGlzIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1VSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTEwPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkxNy1cbmluaXQvS2NvbmZpZzoxOTE4OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MTktXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTI3PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTkzOS1cbmluaXQvS2NvbmZpZzoxOTQwOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTQxLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxNwoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGggYElPX1VSSU5HYCBhbmQga2VybmVsIGludGVybmFscy4KCioqQW5hbHl6aW5nIHRoZSBgSU9fVVJJTkdgIFdhaXRJRCBCdWcgRml4KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBgSU9fVVJJTkdgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgZGVzY3JpcHRpb24gaW5kaWNhdGVzIGEgYnVnZml4IHdpdGhpbiB0aGUgYGlvX3dhaXRpZF9jb21wbGV0ZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHNpZ25hbCBpbmZvcm1hdGlvbiAoYHNpZ2luZm9gKSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB1bm5lY2Vzc2FyaWx5IG9yIGF0IGFuIHVuc2FmZSB0aW1lLCBsaWtlbHkgZHVyaW5nIGFuIG9wZXJhdGlvbiBjYW5jZWxsYXRpb24uIFRoaXMgaXMgYSBjb21tb24gY2xhc3Mgb2YgcHJvYmxlbSwgYW5kIEkgYXBwcmVjaWF0ZSB0aGUgZGV0YWlsIGdpdmVuLiBUaGUgcGF0Y2ggaXMgZnVuY3Rpb25hbGx5IGZvY3VzZWQgb24gdGhlIGNvcmUgYGlvX3VyaW5nYCB3YWl0aWQgbG9naWMuIFRoaXMgaXMgZ29vZCBhcyBpdCBrZWVwcyB0aGUgY2hhbmdlIGNvbmNpc2UgYW5kIHRhcmdldGVkLiBUaGUgJiMzNDtXb3J0aEZ1enppbmc6IHRydWUmIzM0OyBmbGFnIGlzIGEgd2VsY29tZSBpbmRpY2F0b3IuIEl0IGRlbW9uc3RyYXRlcyB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgaXMgYSBhcmVhIHRoYXQgY291bGQgaGF2ZSBzdWJ0bGUgYnVncy4KClRoZSBzdWdnZXN0ZWQgZm9jdXMgc3ltYm9scywgYGlvX3dhaXRpZGAsIGBpb193YWl0aWRfY2FuY2VsYCwgYW5kIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAsIHNlZW0gYXBwcm9wcmlhdGUgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZGVzY3JpYmVkIGJ1Zy4gSXQgaXMgaW1wb3J0YW50IHRvIGNvbmZpcm0gYGlvX3dhaXRpZGAgaXMsIGluIGZhY3QsIHRoZSBjb3JyZWN0IGVudHJ5IHBvaW50LCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlLCBhcyBpdCBoYW5kbGVzIHRoZSBgSU9SSU5HX09QX1dBSVRJRGAgb3BlcmF0aW9uLiBUaGUgcmVtaW5kZXIgdG8gY29uZmlybSBgaW9fd2FpdGlkX2NhbmNlbGAgYW5kIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgYXJlIG5vdCBzdGF0aWMgaXMgcmVsZXZhbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGV4dGVybmFsIHBvaW50cyBvZiBjb250ZW50aW9uLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIG5vdCwgd2hpY2ggaXMgZ29vZCB0byBrbm93IGZvciBicm9hZGVyIGltcGFjdCBhbmFseXNpcy4KCkJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHJlYXNvbmFibGUgdG8gcHJvY2VlZCB3aXRoIHVzaW5nIHRoZSBzZXQtcmVzdWx0cy4gSXQgbG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHNhZmV0eSBpc3N1ZSBhbmQgaXMgd2VsbC1kb2N1bWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb193YWl0aWQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtpb193YWl0aWRfcmVtb3ZlX2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIGZvciB0aGUgSU9SSU5HX09QX1dBSVRJRCBvcGVyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGV0aGVyIHNpZ2luZm8gaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDssCiAgICAmIzM0O2lvX3dhaXRpZF9jYW5jZWwmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkX3JlbW92ZV9hbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbmNlbGxhdGlvbiBsb2dpYyBmb3IgdGhlIElPUklOR19PUF9XQUlUSUQgb3BlcmF0aW9uIGluIGlvX3VyaW5nLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgd2hldGhlciBzaWdpbmZvIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIGR1cmluZyBjYW5jZWxsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNvbXBsZXRpb24gcGF0aHMgb2YgdGhlIGlvX3VyaW5nIHdhaXRpZCBjb21tYW5kIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBjb3B5aW5nIGBzaWdpbmZvYCBkYXRhIHRvIHVzZXIgc3BhY2UgKGBpb193YWl0aWRfY29weV9zaWApIHdoZW4gdGhlIHJlcXVlc3QgaXMgYmVpbmcgY2FuY2VsZWQgb3Igd2hlbiB0aGVyZSBpcyBubyB2YWxpZCB0YXNrIGNvbnRleHQuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCAoYGl3LVx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXHUwMDI2aXctXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTNkZTFkYThiOTk2OWEwZTYzYTVlMmU1OWYwZGM5NDI2YmQ2NzQwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEyOjU2OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvd2FpdGlkLmMgYi9pb191cmluZy93YWl0aWQuYwppbmRleCAzMmY2OGZkN2ZjZGRhLi4xMjExZjkwNWE5ZGIyIDEwMDY0NAotLS0gYS9pb191cmluZy93YWl0aWQuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy93YWl0aWQuYwpAQCAtMTI1LDcgJiM0MzsxMjUsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfcmVtb3ZlX3dxKHN0cnVjdCBpb19raW9jYiAqcmVxKQogCX0KIH0KIAotc3RhdGljIHZvaWQgaW9fd2FpdGlkX2NvbXBsZXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0KQomIzQzO3N0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCwgYm9vbCBjb3B5X3NpKQogewogCXN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7CiAKQEAgLTEzNywxMyAmIzQzOzEzNywxNiBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpCiAJaGxpc3RfZGVsX2luaXQoJmFtcDtyZXEtJmd0O2hhc2hfbm9kZSk7CiAJaW9fd2FpdGlkX3JlbW92ZV93cShyZXEpOwogCi0JcmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7CiYjNDM7CWlmIChjb3B5X3NpKQomIzQzOwkJcmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7CiYjNDM7CWVsc2UKJiM0MzsJCWlvX3dhaXRpZF9mcmVlKHJlcSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJlcV9zZXRfZmFpbChyZXEpOwogCWlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTsKIH0KIAotc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKQomIzQzO3N0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgYm9vbCBjb3B5X3NpKQogewogCXN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7CiAKQEAgLTE1OSwyMSAmIzQzOzE2MiwzMiBAQCBzdGF0aWMgYm9vbCBfX2lvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX2tpb2NiICpyZXEpCiAJaWYgKGF0b21pY19mZXRjaF9pbmMoJmFtcDtpdy0mZ3Q7cmVmcykgJmFtcDsgSU9fV0FJVElEX1JFRl9NQVNLKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVEKTsKJiM0MzsJaW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgY29weV9zaSk7CiAJaW9fcmVxX3F1ZXVlX3R3X2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX2NiKHN0cnVjdCBpb19raW9jYiAqcmVxKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2lvX3dhaXRpZF9jYW5jZWwocmVxLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogaW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsCiAJCSAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogewotCXJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCAmYW1wO2N0eC0mZ3Q7d2FpdGlkX2xpc3QsIF9faW9fd2FpdGlkX2NhbmNlbCk7CiYjNDM7CXJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCAmYW1wO2N0eC0mZ3Q7d2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpOwogfQogCiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCwKIAkJCSAgYm9vbCBjYW5jZWxfYWxsKQogewotCXJldHVybiBpb19jYW5jZWxfcmVtb3ZlX2FsbChjdHgsIHRjdHgsICZhbXA7Y3R4LSZndDt3YWl0aWRfbGlzdCwgY2FuY2VsX2FsbCwgX19pb193YWl0aWRfY2FuY2VsKTsKJiM0MzsJcmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgJmFtcDtjdHgtJmd0O3dhaXRpZF9saXN0LCBjYW5jZWxfYWxsLAomIzQzOwkJCQkgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpb193YWl0aWRfZHJvcF9pc3N1ZV9yZWYoc3RydWN0IGlvX2tpb2NiICpyZXEpCkBAIC0yMDIsNiAmIzQzOzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJaW50IHJldDsKIAogCWlvX3R3X2xvY2soY3R4LCB0dyk7CiYjNDM7CWlmICh1bmxpa2VseSh0dy5jYW5jZWwpKSB7CiYjNDM7CQlpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBmYWxzZSk7CiYjNDM7CQlpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJcmV0ID0gX19kb193YWl0KCZhbXA7aXdhLSZndDt3byk7CiAKQEAgLTIyOSw3ICYjNDM7MjQ4LDcgQEAgc3RhdGljIHZvaWQgaW9fd2FpdGlkX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KQogCQl9CiAJfQogCi0JaW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgcmV0KTsKJiM0MzsJaW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgcmV0LCB0cnVlKTsKIAlpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIHdhaXRpZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGlvX3VyaW5nL3dhaXRpZC5jYCBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGEgbmV3IGJvb2xlYW4gcGFyYW1ldGVyLCBgY29weV9zaWAsIGJlaW5nIGludHJvZHVjZWQgaW50byB0aGUgYGlvX3dhaXRpZF9jb21wbGV0ZWAgZnVuY3Rpb24uIFJpZ2h0LCBzbyBpZiBgY29weV9zaWAgaXMgdHJ1ZSwgdGhlbiBgaW9fd2FpdGlkX2ZpbmlzaGAgZ2V0cyBjYWxsZWQgd2l0aCB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIGNvZGUuIEFuZCBpZiBpdCYjMzk7cyBmYWxzZSwgdGhlbiBpdCYjMzk7cyBgaW9fd2FpdGlkX2ZyZWVgLCBnb3QgaXQuIFRoYXQgaW1tZWRpYXRlbHkgaW1wbGllcyBhIHNwbGl0IGluIGhvdyB0aGUgcmVxdWVzdCBpcyBoYW5kbGVkIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGBzaWdpbmZvYCBkYXRhIG5lZWRzIHRvIGJlIGNvcGllZCBvdXQuCgpOb3csIHdoZXJlIGVsc2UgZG8gd2Ugc2VlIHRoaXMgYGNvcHlfc2lgIHBhcmFtZXRlcj8gQWgsIGBfX2lvX3dhaXRpZF9jYW5jZWxgIHRha2VzIGl0IHRvbywgd2hpY2ggbWFrZXMgc2Vuc2UsIGFzIHRoZSBjYW5jZWwgbG9naWMgbmVlZHMgdG8gYWxpZ24gd2l0aCB0aGUgY29tcGxldGlvbiBsb2dpYy4gRnVydGhlciBkb3duLCBgaW9fd2FpdGlkX2NhbmNlbF9jYmAgcGFzc2VzIGB0cnVlYCDigJMgaXQgY29waWVzIHRoZSBgc2lnaW5mb2AsIHdoaWxlIGBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYmAgcGFzc2VzIGBmYWxzZWAuIEdvdGNoYS4gQW5kIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgY2xldmVybHkgdXNlcyB0aGUgYG5vY29weV9jYmAgaWYgdGhlIHRhc2sgY29udGV4dCBpcyBOVUxMLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiByZW1vdmFsLgoKSG1tLCB0aGlzIGBpb193YWl0aWRfY2JgIGlzIGludGVyZXN0aW5nLiBJdCBoYW5kbGVzIHRoZSBgdHcuY2FuY2VsYCBldmVudCBieSBjYWxsaW5nIGBpb193YWl0aWRfY29tcGxldGVgIHdpdGggYSBjYW5jZWxsYXRpb24gZXJyb3IgYW5kLCBpbXBvcnRhbnRseSwgYGZhbHNlYCBmb3IgYGNvcHlfc2lgLiBTbywgbm8gY29weWluZyBvZiB0aGUgYHNpZ2luZm9gIHVwb24gY2FuY2VsbGF0aW9uLiBUaGF0JiMzOTtzIGdvb2QsIG5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgYGlvX3dhaXRpZF9maW5pc2hgIGRvZXMuLi4gdGhhdCB3aWxsIGxpa2VseSBnaXZlIGZ1cnRoZXIgaW5zaWdodCBvbiB0aGUgdXNlIG9mIGBjb3B5X3NpYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fd2FpdGlkX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3dhaXRpZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3dhaXRpZC5jPTY4PXN0YXRpYyBib29sIGlvX3dhaXRpZF9jb3B5X3NpKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgc2lnbm8pXG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtOTYtXG5pb191cmluZy93YWl0aWQuYzo5NzpzdGF0aWMgaW50IGlvX3dhaXRpZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpXG5pb191cmluZy93YWl0aWQuYy05OC17XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmM9MTI4PXN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCwgYm9vbCBjb3B5X3NpKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTE0MC1cdGlmIChjb3B5X3NpKVxuaW9fdXJpbmcvd2FpdGlkLmM6MTQxOlx0XHRyZXQgPSBpb193YWl0aWRfZmluaXNoKHJlcSwgcmV0KTtcbmlvX3VyaW5nL3dhaXRpZC5jLTE0Mi1cdGVsc2Vcbi0tXG5pb191cmluZy93YWl0aWQuYz0zMDE9aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTM1OS1cdGlvX3dhaXRpZF9yZW1vdmVfd3EocmVxKTtcbmlvX3VyaW5nL3dhaXRpZC5jOjM2MDpcdHJldCA9IGlvX3dhaXRpZF9maW5pc2gocmVxLCByZXQpO1xuaW9fdXJpbmcvd2FpdGlkLmMtMzYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOgoKKipEZWNvbnN0cnVjdGluZyBpb193YWl0aWRfZmluaXNoIGFuZCBpb193YWl0aWRfY29weV9zaSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhlc2UgZG93bi4gV2hlbiBJIHNlZSBgaW9fd2FpdGlkX2ZpbmlzaGAsIG15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgY3VsbWluYXRpb24gb2Ygc29tZSBJL08gb3BlcmF0aW9uIHdhaXRpbmcuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGluZ3MgYXJlIGZpbmFsaXplZCwgdGhlIHNpZ25hbCBpcyByZWNlaXZlZCwgdGhlIHJlc3VsdHMgYXJlIHJlYWR5IHRvIGJlIGRlYWx0IHdpdGguIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNsZWFudXAgY3JldyBhZnRlciB0aGUgYXN5bmNocm9ub3VzIEkvTyBmaXJld29ya3MuIFdl4oCZdmUgYmVlbiBwYXRpZW50bHkgd2FpdGluZywgYW5kICp0aGlzKiBpcyB0aGUgY2FsbCB0aGF0IHRpZGllcyBldmVyeXRoaW5nIHVwLiBEaWQgYW4gZXZlbnQgb2NjdXI/IERpZCBzb21ldGhpbmcgZ28gd3Jvbmc/IFRoaXMgaXMgd2hlcmUgd2UgbGVhcm4gdGhlIG91dGNvbWUuIEkmIzM5O20gYW50aWNpcGF0aW5nIGVycm9yIGhhbmRsaW5nLCBzdGF0dXMgcmV0cmlldmFsLCBhbmQgcG9zc2libHkgZnJlZWluZyB1cCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcGVyYXRpb24uIEl0JiMzOTtzIHRoZSAmIzM0O3JlcG9ydCBjYXJkJiMzNDsgZnVuY3Rpb24sIGxldHRpbmcgdXMga25vdyBpZiB0aGUgSS9PIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwsIGZhaWxlZCwgb3IgdGVybWluYXRlZCBpbiBzb21lIG90aGVyIHdheSwgcGVyaGFwcyBkdWUgdG8gYSBzaWduYWwuCgpOb3csIGBpb193YWl0aWRfY29weV9zaWAuLi4gdGhpcyBzZWVtcyB0byBiZSBhIHN1YnRsZSwgYnV0IGltcG9ydGFudCB2YXJpYXRpb24uIFRoZSBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZSBjb3B5aW5nIG9mIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGV2ZW50IOKAkyBzcGVjaWZpY2FsbHksIGluZm9ybWF0aW9uIGhlbGQgaW4gYSBgc2lnaW5mb190YCBzdHJ1Y3R1cmUuIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIHRha2luZyB0aGUgZGV0YWlscyBvZiB0aGUgSS9PIGV2ZW50IGZyb20ga2VybmVsIHNwYWNlIGFuZCBwbGFjaW5nIGl0IHNvbWV3aGVyZSBhY2Nlc3NpYmxlIHRvIHVzZXIgc3BhY2UuIEl0IHNvdW5kcyBsaWtlIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBzaGFyZWQgbWVtb3J5IG9yIGFuIElQQyBtZWNoYW5pc20gdG8gZ2V0IGEgc2FmZSBhbmQgY29uc2lzdGVudCBjb3B5IG9mIHRoZSBgc2lnaW5mb190YCBzdHJ1Y3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgaXQmIzM5O3MgcHJvYmFibHkgbGVzcyBhYm91dCB0aGUgY29yZSBwcm9jZXNzIHdhaXQgaXRzZWxmICh0aGF0JiMzOTtzIGBpb193YWl0aWRfZmluaXNoYCYjMzk7cyBqb2IpLCBhbmQgbW9yZSBhYm91dCAqd2hhdCogdGhhdCB3YWl0IHNpZ25hbGVkLiBJJiMzOTttIGltYWdpbmluZyBpdCBkZWFscyB3aXRoIGV4dHJhY3RpbmcgYW55IHNwZWNpZmljIGRldGFpbHMsIHN1Y2ggYXMgdGhlIHNpZ25hbCBudW1iZXIsIHRoZSBzb3VyY2Ugb2YgdGhlIHNpZ25hbCwgb3IgdGhlIHJlYXNvbiBmb3IgdGhlIHdhaXQgdGVybWluYXRpbmcuIFRoZSAmIzM0O3NpJiMzNDsgc3VmZml4IGhpbnRzIGF0IHNpZ25hbCBpbmZvcm1hdGlvbiwgc28gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gcHJvdmlkZSBtb3JlIGdyYW51bGFyIGRhdGEgYWJvdXQgKndoeSogdGhlIEkvTyB3YWl0IGlzIGRvbmUuIEl0JiMzOTtzIGFsbCBhYm91dCBwcm92aWRpbmcgcmljaCBkZXRhaWwgdG8gdGhlIGNhbGxlci4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXRhaWxzIGlzIGNyaXRpY2FsIHRvIHRoZSByb2J1c3QgaGFuZGxpbmcgb2YgYXN5bmNocm9ub3VzIEkvTywgYWxsb3dpbmcgZGV2ZWxvcGVycyB0byBtYW5hZ2UgZXJyb3JzLCByZWNvdmVyeSBhbmQgcHJvdmlkZSByZWxldmFudCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL3dhaXRpZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2ODpcdHN0YXRpYyBib29sIGlvX3dhaXRpZF9jb3B5X3NpKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgc2lnbm8pXG4gIDY5Olx0e1xuICA3MDpcdFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcbiAgNzE6XHRcdGJvb2wgcmV0O1xuICA3MjpcdFxuICA3MzpcdFx0aWYgKCFpdy1cdTAwM2VpbmZvcClcbiAgNzQ6XHRcdFx0cmV0dXJuIHRydWU7XG4gIDc1Olx0XG4gIDc2Olx0XHRpZiAoaW9faXNfY29tcGF0KHJlcS1cdTAwM2VjdHgpKVxuICA3NzpcdFx0XHRyZXR1cm4gaW9fd2FpdGlkX2NvbXBhdF9jb3B5X3NpKGl3LCBzaWdubyk7XG4gIDc4Olx0XG4gIDc5Olx0XHRpZiAoIXVzZXJfd3JpdGVfYWNjZXNzX2JlZ2luKGl3LVx1MDAzZWluZm9wLCBzaXplb2YoKml3LVx1MDAzZWluZm9wKSkpXG4gIDgwOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgODE6XHRcbiAgODI6XHRcdHVuc2FmZV9wdXRfdXNlcihzaWdubywgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfc2lnbm8sIEVmYXVsdCk7XG4gIDgzOlx0XHR1bnNhZmVfcHV0X3VzZXIoMCwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfZXJybm8sIEVmYXVsdCk7XG4gIDg0Olx0XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5jYXVzZSwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfY29kZSwgRWZhdWx0KTtcbiAgODU6XHRcdHVuc2FmZV9wdXRfdXNlcihpdy1cdTAwM2VpbmZvLnBpZCwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfcGlkLCBFZmF1bHQpO1xuICA4NjpcdFx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8udWlkLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV91aWQsIEVmYXVsdCk7XG4gIDg3Olx0XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5zdGF0dXMsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX3N0YXR1cywgRWZhdWx0KTtcbiAgODg6XHRcdHJldCA9IHRydWU7XG4gIDg5Olx0ZG9uZTpcbiAgOTA6XHRcdHVzZXJfd3JpdGVfYWNjZXNzX2VuZCgpO1xuICA5MTpcdFx0cmV0dXJuIHJldDtcbiAgOTI6XHRFZmF1bHQ6XG4gIDkzOlx0XHRyZXQgPSBmYWxzZTtcbiAgOTQ6XHRcdGdvdG8gZG9uZTtcbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIGludCBpb193YWl0aWRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0KVxuICA5ODpcdHtcbiAgOTk6XHRcdGludCBzaWdubyA9IDA7XG4gMTAwOlx0XG4gMTAxOlx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4gMTAyOlx0XHRcdHNpZ25vID0gU0lHQ0hMRDtcbiAxMDM6XHRcdFx0cmV0ID0gMDtcbiAxMDQ6XHRcdH1cbiAxMDU6XHRcbiAxMDY6XHRcdGlmICghaW9fd2FpdGlkX2NvcHlfc2kocmVxLCBzaWdubykpXG4gMTA3Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gMTA4Olx0XHRpb193YWl0aWRfZnJlZShyZXEpO1xuIDEwOTpcdFx0cmV0dXJuIHJldDtcbiAxMTA6XHR9XG4gMTExOlx0XG4gMTEyOlx0c3RhdGljIHZvaWQgaW9fd2FpdGlkX3JlbW92ZV93cShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbiAxMTM6XHR7XG4gMTE0Olx0XHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xuIDExNTpcdFx0c3RydWN0IHdhaXRfcXVldWVfaGVhZCAqaGVhZDtcbiAxMTY6XHRcbiAxMTc6XHRcdGhlYWQgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNml3LVx1MDAzZWhlYWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjM4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBLZXJuZWwgTWVtb3J5IExlYWsqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBwcmV2ZW50aW5nIGBpb193YWl0aWRfY29weV9zaWAgZnJvbSBiZWluZyBjYWxsZWQgaW4gc3BlY2lmaWMgc2NlbmFyaW9zLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCBmb2N1c2VzIG9uIHNpdHVhdGlvbnMgd2hlcmUgd2UmIzM5O3JlIGFscmVhZHkgY2FuY2VsaW5nIHRoZSB3YWl0IG9yIHdoZW4gdGhlIHRhc2sgY29udGV4dCBpcyBudWxsIGR1cmluZyByZW1vdmFsLiBFc3NlbnRpYWxseSwgaXQgYXBwZWFycyB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGF2b2lkIGEgY2FsbCB3aGVuIGBjb3B5X3NpYCBpcyBmYWxzZS4gTWFrZXMgc2Vuc2UsIHRoYXQgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBjb3B5aW5nIG9mIHNpZ25hbCBpbmZvLgoKVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIHRoYXQgYGlvX3dhaXRpZF9jb3B5X3NpYCB1c2VzIGB1bnNhZmVfcHV0X3VzZXJgIHRvIHdyaXRlIGRhdGEgaW50byB1c2VyIHNwYWNlLiBBbmQgdGhpcyB3b3JyaWVzIG1lLiBJdCBzcGVjaWZpY2FsbHkgd3JpdGVzIGBzaWdub2AsIGAwYCwgYGl3LSZndDtpbmZvLmNhdXNlYCwgYGl3LSZndDtpbmZvLnBpZGAsIGBpdy0mZ3Q7aW5mby51aWRgLCBhbmQgYGl3LSZndDtpbmZvLnN0YXR1c2AuICBUaGVzZSBhcmUgZmllbGRzIHdpdGhpbiBgaXctJmd0O2luZm9gLiAgSWYgYGl3LSZndDtpbmZvYCBpcyAqdW5pbml0aWFsaXplZCogYXQgdGhlIHBvaW50IHdoZXJlIHRoaXMgd3JpdGUgaGFwcGVucywgd2UgY291bGQgYmUgbGVha2luZyBwb3RlbnRpYWxseSBzZW5zaXRpdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIHVzZXIuIFRoYXTigJlzIGFsd2F5cyBhIHNlY3VyaXR5IHJpc2sgd2UgbmVlZCB0byBhdm9pZC4KCkJ1dCB3YWl0LCBhIGJpdCBvZiBjcml0aWNhbCB0aGlua2luZzogYHVuc2FmZV9wdXRfdXNlcmAgaXNuJiMzOTt0IHdyaXRpbmcgdGhlICplbnRpcmUqIGB3YWl0aWRfaW5mb2Agc3RydWN0dXJlLiBJdCYjMzk7cyBvbmx5IHdyaXRpbmcgc3BlY2lmaWMgKmZpZWxkcyogb2YgaXQuIFNvIHdoaWxlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBhIGNvbmNlcm4sIHdlIHByb2JhYmx5IGFyZW4mIzM5O3QgbGVha2luZyBhbnkgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdCwganVzdCB0aGVzZSBkaXNjcmV0ZSB2YWx1ZXMuIE9rYXksIHNvIHdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiBvZiBgd2FpdGlkX2luZm9gLiBMZXQgbWUgY2hlY2sgdGhhdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgd2FpdGlkX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvd2FpdGlkLmM9MjQ9c3RydWN0IGlvX3dhaXRpZCB7XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtMzEtXHRzdHJ1Y3Qgc2lnaW5mbyBfX3VzZXIgKmluZm9wO1xuaW9fdXJpbmcvd2FpdGlkLmM6MzI6XHRzdHJ1Y3Qgd2FpdGlkX2luZm8gaW5mbztcbmlvX3VyaW5nL3dhaXRpZC5jLTMzLX07XG4tLVxua2VybmVsL2V4aXQuYz0xMjA2PXN0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9leGl0LmMtMTIxMC1cdHVpZF90IHVpZCA9IGZyb21fa3VpZF9tdW5nZWQoY3VycmVudF91c2VyX25zKCksIHRhc2tfdWlkKHApKTtcbmtlcm5lbC9leGl0LmM6MTIxMTpcdHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3A7XG5rZXJuZWwvZXhpdC5jLTEyMTItXG4tLVxua2VybmVsL2V4aXQuYz0xMzYyPXN0YXRpYyBpbnQgd2FpdF90YXNrX3N0b3BwZWQoc3RydWN0IHdhaXRfb3B0cyAqd28sXG4tLVxua2VybmVsL2V4aXQuYy0xMzY0LXtcbmtlcm5lbC9leGl0LmM6MTM2NTpcdHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3A7XG5rZXJuZWwvZXhpdC5jLTEzNjYtXHRpbnQgZXhpdF9jb2RlLCAqcF9jb2RlLCB3aHk7XG4tLVxua2VybmVsL2V4aXQuYz0xNDM0PXN0YXRpYyBpbnQgd2FpdF90YXNrX2NvbnRpbnVlZChzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxua2VybmVsL2V4aXQuYy0xNDM1LXtcbmtlcm5lbC9leGl0LmM6MTQzNjpcdHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3A7XG5rZXJuZWwvZXhpdC5jLTE0MzctXHRwaWRfdCBwaWQ7XG4tLVxua2VybmVsL2V4aXQuYz0xNzY4PWludCBrZXJuZWxfd2FpdGlkX3ByZXBhcmUoc3RydWN0IHdhaXRfb3B0cyAqd28sIGludCB3aGljaCwgcGlkX3QgdXBpZCxcbmtlcm5lbC9leGl0LmM6MTc2OTpcdFx0XHQgIHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3AsIGludCBvcHRpb25zLFxua2VybmVsL2V4aXQuYy0xNzcwLVx0XHRcdCAgc3RydWN0IHJ1c2FnZSAqcnUpXG4tLVxua2VybmVsL2V4aXQuYy0xODI3LVxua2VybmVsL2V4aXQuYzoxODI4OnN0YXRpYyBsb25nIGtlcm5lbF93YWl0aWQoaW50IHdoaWNoLCBwaWRfdCB1cGlkLCBzdHJ1Y3Qgd2FpdGlkX2luZm8gKmluZm9wLFxua2VybmVsL2V4aXQuYy0xODI5LVx0XHRcdCAgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKnJ1KVxuLS1cbmtlcm5lbC9leGl0LmM9MTg0Nj1TWVNDQUxMX0RFRklORTUod2FpdGlkLCBpbnQsIHdoaWNoLCBwaWRfdCwgdXBpZCwgc3RydWN0IHNpZ2luZm8gX191c2VyICosXG4tLVxua2VybmVsL2V4aXQuYy0xODQ5LVx0c3RydWN0IHJ1c2FnZSByO1xua2VybmVsL2V4aXQuYzoxODUwOlx0c3RydWN0IHdhaXRpZF9pbmZvIGluZm8gPSB7LnN0YXR1cyA9IDB9O1xua2VybmVsL2V4aXQuYy0xODUxLVx0bG9uZyBlcnIgPSBrZXJuZWxfd2FpdGlkKHdoaWNoLCB1cGlkLCBcdTAwMjZpbmZvLCBvcHRpb25zLCBydSA/IFx1MDAyNnIgOiBOVUxMKTtcbi0tXG5rZXJuZWwvZXhpdC5jPTE5ODA9Q09NUEFUX1NZU0NBTExfREVGSU5FNSh3YWl0aWQsXG4tLVxua2VybmVsL2V4aXQuYy0xOTg1LVx0c3RydWN0IHJ1c2FnZSBydTtcbmtlcm5lbC9leGl0LmM6MTk4NjpcdHN0cnVjdCB3YWl0aWRfaW5mbyBpbmZvID0gey5zdGF0dXMgPSAwfTtcbmtlcm5lbC9leGl0LmMtMTk4Ny1cdGxvbmcgZXJyID0ga2VybmVsX3dhaXRpZCh3aGljaCwgcGlkLCBcdTAwMjZpbmZvLCBvcHRpb25zLCB1cnUgPyBcdTAwMjZydSA6IE5VTEwpO1xuLS1cbmtlcm5lbC9leGl0LmgtNC1cbmtlcm5lbC9leGl0Lmg6NTpzdHJ1Y3Qgd2FpdGlkX2luZm8ge1xua2VybmVsL2V4aXQuaC02LVx0cGlkX3QgcGlkO1xuLS1cbmtlcm5lbC9leGl0Lmg9MTI9c3RydWN0IHdhaXRfb3B0cyB7XG4tLVxua2VybmVsL2V4aXQuaC0xNi1cbmtlcm5lbC9leGl0Lmg6MTc6XHRzdHJ1Y3Qgd2FpdGlkX2luZm9cdCp3b19pbmZvO1xua2VybmVsL2V4aXQuaC0xOC1cdGludFx0XHRcdHdvX3N0YXQ7XG4tLVxua2VybmVsL2V4aXQuaD0yNz1pbnQga2VybmVsX3dhaXRpZF9wcmVwYXJlKHN0cnVjdCB3YWl0X29wdHMgKndvLCBpbnQgd2hpY2gsIHBpZF90IHVwaWQsXG5rZXJuZWwvZXhpdC5oOjI4Olx0XHRcdCAgc3RydWN0IHdhaXRpZF9pbmZvICppbmZvcCwgaW50IG9wdGlvbnMsXG5rZXJuZWwvZXhpdC5oLTI5LVx0XHRcdCAgc3RydWN0IHJ1c2FnZSAqcnUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3Qgd2FpdGlkX2luZm9gKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHdhaXQgaW5mb3JtYXRpb24sIHNwZWNpZmljYWxseSwgaG93IGl0IHN0b3JlcyBkZXRhaWxzIHJlbGF0ZWQgdG8gYSBwcm9jZXNzJiMzOTtzIGV4aXQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBrZXJuZWwvZXhpdC5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qgd2FpdGlkX2luZm9gLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgc3RydWN0IHdpbGwgY29udGFpbiB0aGUgY3JpdGljYWwgZGF0YSBJJiMzOTttIGludGVyZXN0ZWQgaW46IHRoZSBleGl0IHN0YXR1cywgc2lnbmFsIGluZm9ybWF0aW9uLCByZXNvdXJjZSB1c2FnZSBzdGF0aXN0aWNzLCBhbmQgbWF5YmUgZXZlbiBhIHBvaW50ZXIgYmFjayB0byB0aGUgcHJvY2VzcyBjb250cm9sIGJsb2NrLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4gZm9yIGhvdyBgd2FpdGlkYCBhbmQgb3RoZXIgd2FpdC1yZWxhdGVkIHN5c3RlbSBjYWxscyBvcGVyYXRlLiBJJiMzOTttIGtlZW4gdG8gZGlzc2VjdCBpdCwgZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggbWVtYmVyLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcHJvY2VzcyBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9leGl0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I2lmbmRlZiBMSU5VWF9XQUlUSURfSFxuICAgMzpcdCNkZWZpbmUgTElOVVhfV0FJVElEX0hcbiAgIDQ6XHRcbiAgIDU6XHRzdHJ1Y3Qgd2FpdGlkX2luZm8ge1xuICAgNjpcdFx0cGlkX3QgcGlkO1xuICAgNzpcdFx0dWlkX3QgdWlkO1xuICAgODpcdFx0aW50IHN0YXR1cztcbiAgIDk6XHRcdGludCBjYXVzZTtcbiAgMTA6XHR9O1xuICAxMTpcdFxuICAxMjpcdHN0cnVjdCB3YWl0X29wdHMge1xuICAxMzpcdFx0ZW51bSBwaWRfdHlwZVx0XHR3b190eXBlO1xuICAxNDpcdFx0aW50XHRcdFx0d29fZmxhZ3M7XG4gIDE1Olx0XHRzdHJ1Y3QgcGlkXHRcdCp3b19waWQ7XG4gIDE2Olx0XG4gIDE3Olx0XHRzdHJ1Y3Qgd2FpdGlkX2luZm9cdCp3b19pbmZvO1xuICAxODpcdFx0aW50XHRcdFx0d29fc3RhdDtcbiAgMTk6XHRcdHN0cnVjdCBydXNhZ2VcdFx0KndvX3J1c2FnZTtcbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgaW9fd2FpdGlkX2NvcHlfc2lgIGFuZCBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCB3YWl0aWRfaW5mb2Agc3RydWN0dXJlLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBob2xkcyBrZXkgcGllY2VzIG9mIGluZm9ybWF0aW9uOiBgcGlkYCwgYHVpZGAsIGBzdGF0dXNgLCBhbmQgYGNhdXNlYC4gTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGlzIGZ1bmN0aW9uLCBgaW9fd2FpdGlkX2NvcHlfc2lgLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBjb3B5aW5nIGRhdGEgZnJvbSBhbiBgaXctJmd0O2luZm9gIHN0cnVjdCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgYGl3LSZndDtpbmZvcGAuIFRoZSBjb2RlIHNuaXBwZXQgdXNlcyBgdW5zYWZlX3B1dF91c2VyYCBmb3IgZWFjaCBmaWVsZDoKCmBgYGMKCXVuc2FmZV9wdXRfdXNlcihzaWdubywgJmFtcDtpdy0mZ3Q7aW5mb3AtJmd0O3NpX3NpZ25vLCBFZmF1bHQpOwoJdW5zYWZlX3B1dF91c2VyKDAsICZhbXA7aXctJmd0O2luZm9wLSZndDtzaV9lcnJubywgRWZhdWx0KTsKCXVuc2FmZV9wdXRfdXNlcihpdy0mZ3Q7aW5mby5jYXVzZSwgJmFtcDtpdy0mZ3Q7aW5mb3AtJmd0O3NpX2NvZGUsIEVmYXVsdCk7Cgl1bnNhZmVfcHV0X3VzZXIoaXctJmd0O2luZm8ucGlkLCAmYW1wO2l3LSZndDtpbmZvcC0mZ3Q7c2lfcGlkLCBFZmF1bHQpOwoJdW5zYWZlX3B1dF91c2VyKGl3LSZndDtpbmZvLnVpZCwgJmFtcDtpdy0mZ3Q7aW5mb3AtJmd0O3NpX3VpZCwgRWZhdWx0KTsKCXVuc2FmZV9wdXRfdXNlcihpdy0mZ3Q7aW5mby5zdGF0dXMsICZhbXA7aXctJmd0O2luZm9wLSZndDtzaV9zdGF0dXMsIEVmYXVsdCk7CmBgYAoKVGhlIHByb2JsZW0gaXMgaW1tZWRpYXRlbHkgY2xlYXIgdG8gbWUuIElmLCBhbmQgdGhpcyBpcyBhIGJpZyBpZiwgYGl3LSZndDtpbmZvYCBoYXNuJiMzOTt0IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRvIHVzZXIgc3BhY2UuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYW5kIHNvbWV0aGluZyBJJiMzOTtkIHdhbnQgdG8gYXVkaXQgcmlnaHQgYXdheS4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGl3LSZndDtpbmZvYCBpcyBhY3R1YWxseSBpbml0aWFsaXplZCwgSSYjMzk7bGwgdHJhY2UgaXRzIHVzYWdlIGluIGBpb191cmluZy93YWl0aWQuY2AgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIGNvcnJlY3Qgc3RhdGUsIHRvIGF2b2lkIHRoYXQgbWVtb3J5IGxlYWsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l3LVx1MDAzZWluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy93YWl0aWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy93YWl0aWQuYz00Mz1zdGF0aWMgYm9vbCBpb193YWl0aWRfY29tcGF0X2NvcHlfc2koc3RydWN0IGlvX3dhaXRpZCAqaXcsIGludCBzaWdubylcbi0tXG5pb191cmluZy93YWl0aWQuYy00Ny1cbmlvX3VyaW5nL3dhaXRpZC5jOjQ4Olx0aW5mb3AgPSAoc3RydWN0IGNvbXBhdF9zaWdpbmZvIF9fdXNlciAqKSBpdy1cdTAwM2VpbmZvcDtcbmlvX3VyaW5nL3dhaXRpZC5jLTQ5LVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTU0LVx0dW5zYWZlX3B1dF91c2VyKDAsIFx1MDAyNmluZm9wLVx1MDAzZXNpX2Vycm5vLCBFZmF1bHQpO1xuaW9fdXJpbmcvd2FpdGlkLmM6NTU6XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5jYXVzZSwgXHUwMDI2aW5mb3AtXHUwMDNlc2lfY29kZSwgRWZhdWx0KTtcbmlvX3VyaW5nL3dhaXRpZC5jOjU2Olx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8ucGlkLCBcdTAwMjZpbmZvcC1cdTAwM2VzaV9waWQsIEVmYXVsdCk7XG5pb191cmluZy93YWl0aWQuYzo1NzpcdHVuc2FmZV9wdXRfdXNlcihpdy1cdTAwM2VpbmZvLnVpZCwgXHUwMDI2aW5mb3AtXHUwMDNlc2lfdWlkLCBFZmF1bHQpO1xuaW9fdXJpbmcvd2FpdGlkLmM6NTg6XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5zdGF0dXMsIFx1MDAyNmluZm9wLVx1MDAzZXNpX3N0YXR1cywgRWZhdWx0KTtcbmlvX3VyaW5nL3dhaXRpZC5jLTU5LVx0cmV0ID0gdHJ1ZTtcbi0tXG5pb191cmluZy93YWl0aWQuYz02OD1zdGF0aWMgYm9vbCBpb193YWl0aWRfY29weV9zaShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHNpZ25vKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTcyLVxuaW9fdXJpbmcvd2FpdGlkLmM6NzM6XHRpZiAoIWl3LVx1MDAzZWluZm9wKVxuaW9fdXJpbmcvd2FpdGlkLmMtNzQtXHRcdHJldHVybiB0cnVlO1xuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTc4LVxuaW9fdXJpbmcvd2FpdGlkLmM6Nzk6XHRpZiAoIXVzZXJfd3JpdGVfYWNjZXNzX2JlZ2luKGl3LVx1MDAzZWluZm9wLCBzaXplb2YoKml3LVx1MDAzZWluZm9wKSkpXG5pb191cmluZy93YWl0aWQuYy04MC1cdFx0cmV0dXJuIGZhbHNlO1xuaW9fdXJpbmcvd2FpdGlkLmMtODEtXG5pb191cmluZy93YWl0aWQuYzo4MjpcdHVuc2FmZV9wdXRfdXNlcihzaWdubywgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfc2lnbm8sIEVmYXVsdCk7XG5pb191cmluZy93YWl0aWQuYzo4MzpcdHVuc2FmZV9wdXRfdXNlcigwLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9lcnJubywgRWZhdWx0KTtcbmlvX3VyaW5nL3dhaXRpZC5jOjg0Olx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8uY2F1c2UsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX2NvZGUsIEVmYXVsdCk7XG5pb191cmluZy93YWl0aWQuYzo4NTpcdHVuc2FmZV9wdXRfdXNlcihpdy1cdTAwM2VpbmZvLnBpZCwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfcGlkLCBFZmF1bHQpO1xuaW9fdXJpbmcvd2FpdGlkLmM6ODY6XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby51aWQsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX3VpZCwgRWZhdWx0KTtcbmlvX3VyaW5nL3dhaXRpZC5jOjg3Olx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8uc3RhdHVzLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9zdGF0dXMsIEVmYXVsdCk7XG5pb191cmluZy93YWl0aWQuYy04OC1cdHJldCA9IHRydWU7XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmM9Mjc5PWludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTI5NS1cdGl3LVx1MDAzZWhlYWQgPSBOVUxMO1xuaW9fdXJpbmcvd2FpdGlkLmM6Mjk2Olx0aXctXHUwMDNlaW5mb3AgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKHNxZS1cdTAwM2VhZGRyMikpO1xuaW9fdXJpbmcvd2FpdGlkLmM6Mjk3Olx0bWVtc2V0KFx1MDAyNml3LVx1MDAzZWluZm8sIDAsIHNpemVvZihpdy1cdTAwM2VpbmZvKSk7XG5pb191cmluZy93YWl0aWQuYy0yOTgtXHRyZXR1cm4gMDtcbi0tXG5pb191cmluZy93YWl0aWQuYz0zMDE9aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTMwNy1cbmlvX3VyaW5nL3dhaXRpZC5jOjMwODpcdHJldCA9IGtlcm5lbF93YWl0aWRfcHJlcGFyZShcdTAwMjZpd2EtXHUwMDNld28sIGl3LVx1MDAzZXdoaWNoLCBpdy1cdTAwM2V1cGlkLCBcdTAwMjZpdy1cdTAwM2VpbmZvLFxuaW9fdXJpbmcvd2FpdGlkLmMtMzA5LVx0XHRcdFx0XHRpdy1cdTAwM2VvcHRpb25zLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHBsYXlpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBpb193YWl0aWRfcHJlcCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtZW1zZXQoJmFtcDtpdy0mZ3Q7aW5mbywgMCwgc2l6ZW9mKGl3LSZndDtpbmZvKSk7YCB3aXRoaW4gdGhlIGBpb193YWl0aWRfcHJlcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGluZSBjb21wbGV0ZWx5IHplcm9zIG91dCB0aGUgYGl3LSZndDtpbmZvYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24uIEl0ICpzaG91bGQqIG1lYW4gdGhhdCBhbnkgc3Vic2VxdWVudCB1c2Ugb2YgYGl3LSZndDtpbmZvYCB3b24mIzM5O3QgYmUgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBmdWxseSBpbml0aWFsaXplcyBpdCB0byB6ZXJvLiBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IEkgd2FudCB0byBzZWUgdG8gYXZvaWQgYW55IG5hc3R5LCB1bmRlZmluZWQgYmVoYXZpb3Igb3IgcG90ZW50aWFsIGxlYWtzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogZ2l2ZW4gdGhhdCBpbml0aWFsaXphdGlvbiBpcyBoYXBwZW5pbmcsIGlzIHRoZXJlIHRydWx5IGEgbGVhayBvciBub3Q/IFRoZSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBgaW9fd2FpdGlkX3ByZXBgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNvbnRleHQgdG8gYmUgc3VyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvd2FpdGlkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3OTpcdGludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuIDI4MDpcdHtcbiAyODE6XHRcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XG4gMjgyOlx0XHRzdHJ1Y3QgaW9fd2FpdGlkX2FzeW5jICppd2E7XG4gMjgzOlx0XG4gMjg0Olx0XHRpZiAoc3FlLVx1MDAzZWFkZHIgfHwgc3FlLVx1MDAzZWJ1Zl9pbmRleCB8fCBzcWUtXHUwMDNlYWRkcjMgfHwgc3FlLVx1MDAzZXdhaXRpZF9mbGFncylcbiAyODU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjg2Olx0XG4gMjg3Olx0XHRpd2EgPSBpb191cmluZ19hbGxvY19hc3luY19kYXRhKE5VTEwsIHJlcSk7XG4gMjg4Olx0XHRpZiAodW5saWtlbHkoIWl3YSkpXG4gMjg5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI5MDpcdFx0aXdhLVx1MDAzZXJlcSA9IHJlcTtcbiAyOTE6XHRcbiAyOTI6XHRcdGl3LVx1MDAzZXdoaWNoID0gUkVBRF9PTkNFKHNxZS1cdTAwM2VsZW4pO1xuIDI5MzpcdFx0aXctXHUwMDNldXBpZCA9IFJFQURfT05DRShzcWUtXHUwMDNlZmQpO1xuIDI5NDpcdFx0aXctXHUwMDNlb3B0aW9ucyA9IFJFQURfT05DRShzcWUtXHUwMDNlZmlsZV9pbmRleCk7XG4gMjk1Olx0XHRpdy1cdTAwM2VoZWFkID0gTlVMTDtcbiAyOTY6XHRcdGl3LVx1MDAzZWluZm9wID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShzcWUtXHUwMDNlYWRkcjIpKTtcbiAyOTc6XHRcdG1lbXNldChcdTAwMjZpdy1cdTAwM2VpbmZvLCAwLCBzaXplb2YoaXctXHUwMDNlaW5mbykpO1xuIDI5ODpcdFx0cmV0dXJuIDA7XG4gMjk5Olx0fVxuIDMwMDpcdFxuIDMwMTpcdGludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiAzMDI6XHR7XG4gMzAzOlx0XHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzM5CgkJCQkJCQlvdXRwdXQ6IDIyMQoJCQkJCQkJdGhvdWdodHM6IDE1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIGlvX3dhaXRpZCBQYXRjaCBhbmQgVW5pbml0aWFsaXplZCBNZW1vcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb193YWl0aWRfY29tcGxldGVgIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBpcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2FnZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGhlcmU/IFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYSBgY29weV9zaWAgZmxhZyB0byBgaW9fd2FpdGlkX2NvbXBsZXRlYCwgYWxsb3dpbmcgaXQgdG8gc2tpcCB0aGUgYGlvX3dhaXRpZF9maW5pc2hgIGZ1bmN0aW9uIGVudGlyZWx5LCBhbmQgZ28gc3RyYWlnaHQgdG8gYGlvX3dhaXRpZF9mcmVlYCB3aGVuIGBjb3B5X3NpYCBpcyBmYWxzZS4gYGlvX3dhaXRpZF9maW5pc2hgIGlzIHRoZSBvbmUgdGhhdCBjYWxscyBgaW9fd2FpdGlkX2NvcHlfc2lgLCB3aGljaCBwZXJmb3JtcyB0aGUgdXNlci1zcGFjZSB3cml0ZS4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoeSB0aGV5JiMzOTtyZSBieXBhc3NpbmcgdGhlIHVzZXItc3BhY2Ugd3JpdGUuIFRoZSBjb2RlIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gY2FuY2VsbGF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gYHR3LmNhbmNlbGAgaXMgdHJ1ZSBvciB3aGVuIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgaXMgY2FsbGVkIHdpdGhvdXQgYSB0YXNrIGNvbnRleHQgKGB0Y3R4YCBpcyBOVUxMKS4gVGhlIHJhdGlvbmFsZSBpcyBsaWtlbHkgdGhhdCB3cml0aW5nIHRvIHVzZXIgc3BhY2UgcmVxdWlyZXMgYSB2YWxpZCBwcm9jZXNzIGNvbnRleHQuIElmIHRoZSB0YXNrIGlzIGJlaW5nIGNhbmNlbGVkIG9yIHRoZSBvcGVyYXRpb24gaXMgb2NjdXJyaW5nIG91dHNpZGUgdGhlIGV4cGVjdGVkIGNvbnRleHQgKGxpa2UgYSByaW5nIGV4aXQgb3IgY2FuY2VsbGF0aW9uIGZyb20gYW5vdGhlciB0YXNrKSwgd3JpdGluZyB0byB1c2VyIHNwYWNlIGNvdWxkIGVpdGhlciB3cml0ZSB0byB0aGUgd3JvbmcgcHJvY2VzcyYjMzk7cyBtZW1vcnkgKG1lbW9yeSBjb3JydXB0aW9uL291dC1vZi1ib3VuZHMgYWNjZXNzKSBvciBsZWFkIHRvIGEgZmF1bHQuCgpNeSBpbW1lZGlhdGUgY2hlY2sgaXMgd2hldGhlciB0aGlzIHBhdGNoICpleHBvc2VzKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgcXVpY2tseSBydWxlIG91dCBgaXctJmd0O2luZm9gIGJlY2F1c2UgYGlvX3dhaXRpZF9wcmVwYCBleHBsaWNpdGx5IHplcm9lcyBpdCBvdXQuIEkgZG91YmxlLWNoZWNrZWQgdGhpcywgYW5kIGBtZW1zZXQoJmFtcDtpdy0mZ3Q7aW5mbywgMCwgc2l6ZW9mKGl3LSZndDtpbmZvKSk7YCBpcyBpbiBwbGFjZS4gTm8gcHJvYmxlbSB0aGVyZS4gSSBhbHNvIGNoZWNrIGBzaWdub2AsIHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGlvX3dhaXRpZF9maW5pc2hgLCBvciBgU0lHQ0hMRGAuIEFuZCB0aGUgYGl3LSZndDtpbmZvcC0mZ3Q7c2lfc2lnbm9gIGZpZWxkIHdoaWNoIGlzIHVzZXIgc3BhY2UgbWVtb3J5IGFuZCB0aGVyZWZvcmUgbm90IGEgY29uY2Vybi4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgZW50aXJlbHkgYWJvdXQgYXZvaWRpbmcgYGlvX3dhaXRpZF9maW5pc2hgICh3aGljaCBpbmNsdWRlcyBgaW9fd2FpdGlkX2NvcHlfc2lgKSB3aGVuIGBjb3B5X3NpYCBpcyBmYWxzZS4gQW5kIGBjb3B5X3NpYCBpcyBmYWxzZSBpbiB0aGUgYGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiYCBjYXNlLCBhbmQgdGhlIGBpb193YWl0aWRfY2JgIGlmIGB0dy5jYW5jZWxgIGlzIHRydWUuIGB0dy5jYW5jZWxgIG1lYW5zIHRhc2sgd29yayBjYW5jZWxsYXRpb24sIGxpa2Ugd2hlbiB0aGUgdGFzayBleGl0cyBvciB0aGUgcmluZyBpcyB0b3JuIGRvd24uIFRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IHdyaXRpbmcgdG8gdXNlciBzcGFjZSBpZiBpdCYjMzk7cyBpbnZhbGlkIG9yIHVuc2FmZS4KClRoaXMgaXMgYSBidWcgZml4LCBpdCYjMzk7cyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCBhIHNjZW5hcmlvIHdoZXJlIGBpb193YWl0aWRgIHRyaWVzIHRvIGNvcHkgYHNpZ2luZm9gIGR1cmluZyBjYW5jZWxsYXRpb24gd2hlbiB0aGUgdXNlciBtZW1vcnkgbWlnaHQgbm90IGJlIHZhbGlkLCB3aGljaCBjb3VsZCBjYXVzZSBhIHBhZ2UgZmF1bHQgb3IgYSB3cml0ZSB0byB0aGUgd3JvbmcgYWRkcmVzcyBzcGFjZS4KCkkgbm93IG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjb21lcyB2aXNpYmxlIGluIHRoZSBgaXctJmd0O2luZm9gIHN0cnVjdC4gYGlvX3dhaXRpZF9wcmVwYCB0YWtlcyBjYXJlIG9mIHRoZSBpbml0aWFsaXphdGlvbi4gQnV0IGNvdWxkIGBrZXJuZWxfd2FpdGlkX3ByZXBhcmVgIG9yIGBfX2RvX3dhaXRgIG1vZGlmeSBgaXctJmd0O2luZm9gIHN1Y2ggdGhhdCB0aGVyZSBpcyB1bmluaXRpYWxpemVkIHBhZGRpbmc/IE5vLiBgaXctJmd0O2luZm9gIGlzOgoKYGBgYwpzdHJ1Y3Qgd2FpdGlkX2luZm8gewoJcGlkX3QgcGlkOwoJdWlkX3QgdWlkOwoJaW50IHN0YXR1czsKCWludCBjYXVzZTsKfTsKYGBgCgpgcGlkX3RgIGlzIGBpbnRgLCBgdWlkX3RgIGlzIGB1bnNpZ25lZCBpbnRgLCBgc3RhdHVzYCBhbmQgYGNhdXNlYCBhcmUgYGludGBzLiBUaGlzIGlzIGEgdG90YWwgc2l6ZSBvZiAxNiBieXRlcy4gTm8gcGFkZGluZyBpcyBwcmVzZW50LiBBbmQgZXZlbiBpZiB0aGVyZSB3ZXJlLCB0aGUgY29kZSB3cml0ZXMgdG8gaW5kaXZpZHVhbCBmaWVsZHMgYW5kIG5vdCB0aGUgc3RydWN0IGFzIGEgd2hvbGUsIHNvIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgcGFkZGluZyBiZWluZyBsZWFrZWQgaXMgZWZmZWN0aXZlbHkgemVyby4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZml4IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdXNlci1zcGFjZSBtZW1vcnkgYWNjZXNzIG9jY3VycyBkdXJpbmcgY2FuY2VsbGF0aW9uLCBhbmQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgdGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBidWcgd291bGQgbGlrZWx5IGNhdXNlIGEgdXNlLWFmdGVyLWZyZWUgb2YgdXNlci1zcGFjZSBtZW1vcnksIG9yIGEgd3JpdGUgdG8gYW4gaW5jb3JyZWN0IG1tIGFuZCBLTVNBTiB3b3VsZCBub3QgY2F0Y2ggdGhpcy4KCkkgcmV2aWV3IHRoZSBgaW9fd2FpdGlkX2NiYCBjaGFuZ2U6CgpgYGBjCkBAIC0yMDIsNiAmIzQzOzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJaW50IHJldDsKIAogCWlvX3R3X2xvY2soY3R4LCB0dyk7CiYjNDM7CWlmICh1bmxpa2VseSh0dy5jYW5jZWwpKSB7CiYjNDM7CQlpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBmYWxzZSk7CiYjNDM7CQlpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQpgYGAKClRoaXMgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNvbXBsZXRpb24gcGF0aHMgb2YgdGhlIGlvX3VyaW5nIHdhaXRpZCBjb21tYW5kIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBjb3B5aW5nIGBzaWdpbmZvYCBkYXRhIHRvIHVzZXIgc3BhY2UgKGBpb193YWl0aWRfY29weV9zaWApIHdoZW4gdGhlIHJlcXVlc3QgaXMgYmVpbmcgY2FuY2VsZWQgb3Igd2hlbiB0aGVyZSBpcyBubyB2YWxpZCB0YXNrIGNvbnRleHQuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCAoYGl3LVx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXHUwMDI2aXctXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNvbXBsZXRpb24gcGF0aHMgb2YgdGhlIGlvX3VyaW5nIHdhaXRpZCBjb21tYW5kIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBjb3B5aW5nIGBzaWdpbmZvYCBkYXRhIHRvIHVzZXIgc3BhY2UgKGBpb193YWl0aWRfY29weV9zaWApIHdoZW4gdGhlIHJlcXVlc3QgaXMgYmVpbmcgY2FuY2VsZWQgb3Igd2hlbiB0aGVyZSBpcyBubyB2YWxpZCB0YXNrIGNvbnRleHQuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCAoYGl3LVx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXHUwMDI2aXctXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6MDMuMzg2Nzg4MTcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MDU3NDI1Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fd2FpdGlkXCIsXG4gICAgXCJpb193YWl0aWRfY2FuY2VsXCIsXG4gICAgXCJpb193YWl0aWRfcmVtb3ZlX2FsbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbmNlbGxhdGlvbiBhbmQgY29tcGxldGlvbiBwYXRocyBvZiB0aGUgaW9fdXJpbmcgd2FpdGlkIGNvbW1hbmQgdG8gY29uZGl0aW9uYWxseSBza2lwIGNvcHlpbmcgYHNpZ2luZm9gIGRhdGEgdG8gdXNlciBzcGFjZSAoYGlvX3dhaXRpZF9jb3B5X3NpYCkgd2hlbiB0aGUgcmVxdWVzdCBpcyBiZWluZyBjYW5jZWxlZCBvciB3aGVuIHRoZXJlIGlzIG5vIHZhbGlkIHRhc2sgY29udGV4dC4gVGhlIGRhdGEgYmVpbmcgY29waWVkIChgaXctXFx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXFx1MDAyNml3LVxcdTAwM2VpbmZvLCAwLCBzaXplb2YoaXctXFx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIGZvciB0aGUgSU9SSU5HX09QX1dBSVRJRCBvcGVyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGV0aGVyIHNpZ2luZm8gaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjAzLjM4Njc5NDY3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTQ4MzQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzZGUxZGE4Yjk5NjlhMGU2M2E1ZTJlNTlmMGRjOTQyNmJkNjc0MDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTI6NTY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvd2FpdGlkLmMgYi9pb191cmluZy93YWl0aWQuY1xcbmluZGV4IDMyZjY4ZmQ3ZmNkZGEuLjEyMTFmOTA1YTlkYjIgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcXG4rKysgYi9pb191cmluZy93YWl0aWQuY1xcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIHZvaWQgaW9fd2FpdGlkX3JlbW92ZV93cShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpXFxuK3N0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCwgYm9vbCBjb3B5X3NpKVxcbiB7XFxuIFxcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XFxuIFxcbkBAIC0xMzcsMTMgKzEzNywxNiBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpXFxuIFxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZyZXEtXFx1MDAzZWhhc2hfbm9kZSk7XFxuIFxcdGlvX3dhaXRpZF9yZW1vdmVfd3EocmVxKTtcXG4gXFxuLVxcdHJldCA9IGlvX3dhaXRpZF9maW5pc2gocmVxLCByZXQpO1xcbitcXHRpZiAoY29weV9zaSlcXG4rXFx0XFx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aW9fd2FpdGlkX2ZyZWUocmVxKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbiBcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4rc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCBib29sIGNvcHlfc2kpXFxuIHtcXG4gXFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcXG4gXFxuQEAgLTE1OSwyMSArMTYyLDMyIEBAIHN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4gXFx0aWYgKGF0b21pY19mZXRjaF9pbmMoXFx1MDAyNml3LVxcdTAwM2VyZWZzKSBcXHUwMDI2IElPX1dBSVRJRF9SRUZfTUFTSylcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7XFxuK1xcdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQsIGNvcHlfc2kpO1xcbiBcXHRpb19yZXFfcXVldWVfdHdfY29tcGxldGUocmVxLCAtRUNBTkNFTEVEKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuK3tcXG4rXFx0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4re1xcbitcXHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xcbit9XFxuK1xcbiBpbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcXG4gXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIHtcXG4tXFx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFxcdTAwMjZjdHgtXFx1MDAzZXdhaXRpZF9saXN0LCBfX2lvX3dhaXRpZF9jYW5jZWwpO1xcbitcXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZShjdHgsIGNkLCBpc3N1ZV9mbGFncywgXFx1MDAyNmN0eC1cXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xcbiB9XFxuIFxcbiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcXG4gXFx0XFx0XFx0ICBib29sIGNhbmNlbF9hbGwpXFxuIHtcXG4tXFx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgXFx1MDAyNmN0eC1cXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsIF9faW9fd2FpdGlkX2NhbmNlbCk7XFxuK1xcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXdhaXRpZF9saXN0LCBjYW5jZWxfYWxsLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpb193YWl0aWRfZHJvcF9pc3N1ZV9yZWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuQEAgLTIwMiw2ICsyMTYsMTEgQEAgc3RhdGljIHZvaWQgaW9fd2FpdGlkX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcXG4rXFx0aWYgKHVubGlrZWx5KHR3LmNhbmNlbCkpIHtcXG4rXFx0XFx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgZmFsc2UpO1xcbitcXHRcXHRpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHRyZXQgPSBfX2RvX3dhaXQoXFx1MDAyNml3YS1cXHUwMDNld28pO1xcbiBcXG5AQCAtMjI5LDcgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQpO1xcbitcXHRpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQsIHRydWUpO1xcbiBcXHRpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6MDQuODQzMTk5MDI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTcyODcyMzA5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb193YWl0aWRcIixcbiAgICBcImlvX3dhaXRpZF9jYW5jZWxcIixcbiAgICBcImlvX3dhaXRpZF9yZW1vdmVfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbmNlbGxhdGlvbiBsb2dpYyBmb3IgdGhlIElPUklOR19PUF9XQUlUSUQgb3BlcmF0aW9uIGluIGlvX3VyaW5nLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgd2hldGhlciBzaWdpbmZvIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIGR1cmluZyBjYW5jZWxsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhM2RlMWRhOGI5OTY5YTBlNjNhNWUyZTU5ZjBkYzk0MjZiZDY3NDA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTI6NTY6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi4xMjExZjkwNWE5ZGIyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbisrKyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9yZW1vdmVfd3Eoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbitzdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQsIGJvb2wgY29weV9zaSlcbiB7XG4gXHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xuIFxuQEAgLTEzNywxMyArMTM3LDE2IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbiBcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUpO1xuIFx0aW9fd2FpdGlkX3JlbW92ZV93cShyZXEpO1xuIFxuLVx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4rXHRpZiAoY29weV9zaSlcbitcdFx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4rXHRlbHNlXG4rXHRcdGlvX3dhaXRpZF9mcmVlKHJlcSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuK3N0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgYm9vbCBjb3B5X3NpKVxuIHtcbiBcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XG4gXG5AQCAtMTU5LDIxICsxNjIsMzIgQEAgc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIFx0aWYgKGF0b21pY19mZXRjaF9pbmMoXHUwMDI2aXctXHUwMDNlcmVmcykgXHUwMDI2IElPX1dBSVRJRF9SRUZfTUFTSylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7XG4rXHRpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBjb3B5X3NpKTtcbiBcdGlvX3JlcV9xdWV1ZV90d19jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXG4re1xuK1x0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbit7XG4rXHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xuK31cbitcbiBpbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4ge1xuLVx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFx1MDAyNmN0eC1cdTAwM2V3YWl0aWRfbGlzdCwgX19pb193YWl0aWRfY2FuY2VsKTtcbitcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xuIH1cbiBcbiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbiBcdFx0XHQgIGJvb2wgY2FuY2VsX2FsbClcbiB7XG4tXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsIF9faW9fd2FpdGlkX2NhbmNlbCk7XG4rXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsXG4rXHRcdFx0XHQgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpb193YWl0aWRfZHJvcF9pc3N1ZV9yZWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5AQCAtMjAyLDYgKzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRpbnQgcmV0O1xuIFxuIFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcbitcdGlmICh1bmxpa2VseSh0dy5jYW5jZWwpKSB7XG4rXHRcdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQsIGZhbHNlKTtcbitcdFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdHJldCA9IF9fZG9fd2FpdChcdTAwMjZpd2EtXHUwMDNld28pO1xuIFxuQEAgLTIyOSw3ICsyNDgsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIHJldCk7XG4rXHRpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQsIHRydWUpO1xuIFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6MDQuODQzMjAwNzc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE0OTE4NjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFdhaXRpZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy93YWl0aWQuY2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZm9jdXNlZCBtb2RpZmljYXRpb24sIHdpdGggc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIGhvdyBgd2FpdGlkYCBjb21wbGV0aW9uIGFuZCBjYW5jZWxsYXRpb24gYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgYGJvb2wgY29weV9zaWAgYXJndW1lbnQgdG8gYm90aCBgaW9fd2FpdGlkX2NvbXBsZXRlYCBhbmQgYF9faW9fd2FpdGlkX2NhbmNlbGAuIFRoZXkndmUgYWxzbyBhZGRlZCB0aGVzZSBgaW9fd2FpdGlkX2NhbmNlbF9jYmAgYW5kIGBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYmAgY2FsbGJhY2tzLiBUaGUgZXhpc3RpbmcgYGlvX3dhaXRpZF9jYW5jZWxgLCBgaW9fd2FpdGlkX3JlbW92ZV9hbGxgIGZ1bmN0aW9ucyBoYXZlIGFsc28gYmVlbiBhbHRlcmVkLiBBbmQgZmluYWxseSwgYGlvX3dhaXRpZF9jYmAgaXMgbW9kaWZpZWQgdG8gbWFuYWdlIGNhbmNlbGxhdGlvbnMgc2lnbmFsZWQgdGhyb3VnaCBgdHcuY2FuY2VsYCBhbmQsIGNydWNpYWxseSwgdG8gY2FsbCBgaW9fd2FpdGlkX2NvbXBsZXRlYCB3aXRoIGAtRUNBTkNFTEVEYCBhbmQgYGZhbHNlYCBmb3IgYGNvcHlfc2lgIGluIHRob3NlIGNhc2VzLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBjaGFuZ2UgaW4gdGhlIGlvX3VyaW5nIHdhaXRpZCBpbXBsZW1lbnRhdGlvbi4gU2luY2UgaXQgZGVhbHMgd2l0aCBjb21wbGV0aW9uIGFuZCBjYW5jZWxsYXRpb24sIEknZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgYW5kIHRoZXJlIGFyZSBubyBuZXcgZWRnZSBjYXNlcy5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBpb191cmluZy4gSSBiZWxpZXZlIHRoZSBwcmltYXJ5IG9uZSBpcyBgQ09ORklHX0lPX1VSSU5HYCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gdmVyaWZ5LlxuXG5Ob3csIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBmdW5jdGlvbnMgc3VjaCBhcyBgaW9fd2FpdGlkX2NhbmNlbGAsIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAsIGBpb193YWl0aWRfY2JgLCBgaW9fd2FpdGlkX2NvbXBsZXRlYCwgYW5kIGBfX2lvX3dhaXRpZF9jYW5jZWxgIGluIGBpb191cmluZy93YWl0aWQuY2AsIGFzIHRoZXNlIGFyZSB0aGUgb25lcyBiZWluZyBkaXJlY3RseSBtb2RpZmllZC5cblxuRmluYWxseSwgSSdsbCBwZXJmb3JtIGEgc2VhcmNoIHdpdGhpbiBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBvdGhlciBmaWxlcyBmb3IgaW5zdGFuY2VzIG9mIGBpb193YWl0aWRfY2FuY2VsYCBhbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlaXIgdXNhZ2UgYW5kIGhvdyB0aGUgcGF0Y2ggaW1wYWN0cyB0aGUgd2lkZXIgY29kZSBiYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6MTAuOTkyMzk4MTQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTQyMDgxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fd2FpdGlkX2NhbmNlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9jYW5jZWwuYz0xMDU9aW50IGlvX3RyeV9jYW5jZWwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy0xMjQtXFxuaW9fdXJpbmcvY2FuY2VsLmM6MTI1OlxcdHJldCA9IGlvX3dhaXRpZF9jYW5jZWwoY3R4LCBjZCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTEyNi1cXHRpZiAocmV0ICE9IC1FTk9FTlQpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0xMjg9c3RhdGljIHZvaWQgaW9fd2FpdGlkX2NvbXBsZXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0LCBib29sIGNvcHlfc2kpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xNDgtXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTQ5OnN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgYm9vbCBjb3B5X3NpKVxcbmlvX3VyaW5nL3dhaXRpZC5jLTE1MC17XFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xNjktXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTcwOnN0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvd2FpdGlkLmMtMTcxLXtcXG5pb191cmluZy93YWl0aWQuYzoxNzI6XFx0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTE3My19XFxuaW9fdXJpbmcvd2FpdGlkLmMtMTc0LVxcbmlvX3VyaW5nL3dhaXRpZC5jOjE3NTpzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy93YWl0aWQuYy0xNzYte1xcbmlvX3VyaW5nL3dhaXRpZC5jOjE3NzpcXHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTE3OC19XFxuaW9fdXJpbmcvd2FpdGlkLmMtMTc5LVxcbmlvX3VyaW5nL3dhaXRpZC5jOjE4MDppbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcXG5pb191cmluZy93YWl0aWQuYy0xODEtXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvd2FpdGlkLmMtMTgyLXtcXG5pb191cmluZy93YWl0aWQuYzoxODM6XFx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFxcdTAwMjZjdHgtXFx1MDAzZXdhaXRpZF9saXN0LCBpb193YWl0aWRfY2FuY2VsX2NiKTtcXG5pb191cmluZy93YWl0aWQuYy0xODQtfVxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmM9MTg2PWJvb2wgaW9fd2FpdGlkX3JlbW92ZV9hbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtMTg5LVxcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXdhaXRpZF9saXN0LCBjYW5jZWxfYWxsLFxcbmlvX3VyaW5nL3dhaXRpZC5jOjE5MDpcXHRcXHRcXHRcXHQgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7XFxuaW9fdXJpbmcvd2FpdGlkLmMtMTkxLX1cXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5oPTExPWludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvd2FpdGlkLmg6MTI6aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuaW9fdXJpbmcvd2FpdGlkLmgtMTMtXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NjoxMy41MDY2MTI1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTkwODQwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIHRoZSBpb191cmluZyB3YWl0aWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZGlnZ2luZyBpbnRvIHRoZSBgaW9fd2FpdGlkYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgaW9fd2FpdGlkX2NhbmNlbGAsIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAsIGFuZCBgaW9fd2FpdGlkX2NiYC4gVGhvc2UgYXJlIGNydWNpYWwgZnVuY3Rpb25zLCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNsZWFudXAgb2Ygd2FpdCBvcGVyYXRpb25zIGluaXRpYXRlZCB0aHJvdWdoIGBpb193YWl0aWRgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgd2lsbCBiZSBhaW1lZCBhdCBpbXByb3ZpbmcgdGhlIGhhbmRsaW5nIG9mIHdhaXRpbmcgZm9yIGkvbyBjb21wbGV0aW9ucywgcG9zc2libHkgYWRkaW5nIG1vcmUgcm9idXN0IGNhbmNlbGxhdGlvbiBtZWNoYW5pc21zLCBvciBtYXliZSBkZWFsaW5nIHdpdGggc29tZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBjYWxsYmFja3MgYW5kIGNvbXBsZXRpb24gZXZlbnRzIGFyZSBoYW5kbGVkLlxuXG5gaW9fd2FpdGlkYCBpdHNlbGYgaXMsIG9mIGNvdXJzZSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBgd2FpdGlkYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBpb191cmluZzsgdGhhdCdzIHdoZXJlIGFsbCB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgb3JpZ2luYXRlcy4gU28sIGxldCdzIGRpdmUgaW50byBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgY2hhbmdlZCBhbmQgaG93IHRoZXNlIG1vZGlmaWNhdGlvbnMgaW1wYWN0IHRoZSBvdmVyYWxsIGZsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZGV2aWwgaXMgaGlkaW5nLCB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byBzb21lIGxvY2tpbmcgaXNzdWVzLCBzaWduYWwgaGFuZGxpbmcgb3IgYW55dGhpbmcgdG8gZG8gd2l0aCBob3cgdGhlIHVzZXIgcHJvZ3JhbSBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU5MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjE5LjAwNTY5ODkwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzExNTAxODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBpb193YWl0aWRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy93YWl0aWQuYz0yNzk9aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0zMDAtXFxuaW9fdXJpbmcvd2FpdGlkLmM6MzAxOmludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy93YWl0aWQuYy0zMDIte1xcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmg9MTA9aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xcbmlvX3VyaW5nL3dhaXRpZC5oOjExOmludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvd2FpdGlkLmgtMTItaW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjIxLjcxNzIwODY1NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTU1OTQ2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHM6XG5cbioqRm9jdXNpbmcgSW4gb24gSU8gV2FpdCBNYW5hZ2VtZW50KipcblxuUmlnaHQsIGBpb193YWl0aWRgIGFuZCBgaW9fd2FpdGlkX2NhbmNlbGAg4oCTIHRob3NlIHR3byBhcmUgZGVmaW5pdGVseSBrZXkuIFNlZW1zIGxpa2UgdGhleSdyZSB0aGUgY29yZSBwcmltaXRpdmVzIGZvciwgd2VsbCwgd2FpdGluZyBmb3IgSS9PIGNvbXBsZXRpb24gaW4gYSBtb3JlIGdyYW51bGFyIHdheSwgbGlrZWx5IHRvIGF2b2lkIGJsb2NraW5nIHRoZSB3aG9sZSBwcm9jZXNzLiBBbmQgb2YgY291cnNlLCB0aGUgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBmdW5jdGlvbi4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgYmV0IGl0IGlzIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgY2xlYW4tdXAgb2YgcGVuZGluZyB3YWl0cy4gR290dGEgc2VlIGhvdyB0aGlzIG9uZSBnZXRzIHVzZWQgaW4gcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NjoyNS4yNzI4MDYxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEzMTUwODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dhaXRpZF9yZW1vdmVfYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNTYwLVxcdHJldCB8PSBpb19wb2xsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBjYW5jZWxfYWxsKTtcXG5pb191cmluZy9jYW5jZWwuYzo1NjE6XFx0cmV0IHw9IGlvX3dhaXRpZF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgY2FuY2VsX2FsbCk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtNTYyLVxcdHJldCB8PSBpb19mdXRleF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgY2FuY2VsX2FsbCk7XFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0xODA9aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xODUtXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTg2OmJvb2wgaW9fd2FpdGlkX3JlbW92ZV9hbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbmlvX3VyaW5nL3dhaXRpZC5jLTE4Ny1cXHRcXHRcXHQgIGJvb2wgY2FuY2VsX2FsbClcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5oPTEyPWludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL3dhaXRpZC5oLTEzLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy93YWl0aWQuaDoxNDpib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcXG5pb191cmluZy93YWl0aWQuaC0xNS1cXHRcXHRcXHQgIGJvb2wgY2FuY2VsX2FsbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjI4LjE4NTk2NTgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk3NDU1MTYzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBpb191cmluZyBDYW5jZWxsYXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgd2l0aGluIGBpb191cmluZ2AuIEl0IGxvb2tzIGxpa2UgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBpcyB0aGUgY2xlYW51cCBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiB3ZSB0cnkgdG8gY2FuY2VsIHJlcXVlc3RzIGZyb20gYGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHNgLiBGdXJ0aGVyIGRvd24gdGhlIGNoYWluLCBgaW9fd2FpdGlkX2NhbmNlbGAgZ2V0cyBjYWxsZWQgZnJvbSBgaW9fdHJ5X2NhbmNlbGAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRoZSBjYW5jZWxsYXRpb24gaXRzZWxmLiBBbmQgSSBzZWUgdGhhdCB0aGUgYGlvX3dhaXRpZGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aGVuIGV4ZWN1dGluZyB0aGUgaW9fdXJpbmcgb3Bjb2Rlcy5cblxuTm93LCBiZWZvcmUgSSBnbyBkZWVwZXIgaW50byB0aGlzLCBsZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEJlc2lkZXMgdGhlIG9idmlvdXMgb25lLCBgQ09ORklHX0lPX1VSSU5HYCwgYXJlIHRoZXJlIGFueSBvdGhlciBzZXR0aW5ncyBvciBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzIGNhbmNlbGxhdGlvbiBiZWhhdmlvcj8gSXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gY292ZXIgYWxsIGJhc2VzIHdoZW4gZGlzc2VjdGluZyBhIGNyaXRpY2FsIHBhdGggbGlrZSB0aGlzIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxMCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjQ3LjkzMTQ4NTI3NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTUwNjYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTctXFxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQxLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6NTAuMTcxMDAxMTU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODM4NDY0MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGggYElPX1VSSU5HYCBhbmQga2VybmVsIGludGVybmFscy5cblxuKipBbmFseXppbmcgdGhlIGBJT19VUklOR2AgV2FpdElEIEJ1ZyBGaXgqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgb24gYElPX1VSSU5HYCBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGRlc2NyaXB0aW9uIGluZGljYXRlcyBhIGJ1Z2ZpeCB3aXRoaW4gdGhlIGBpb193YWl0aWRfY29tcGxldGVgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHNpZ25hbCBpbmZvcm1hdGlvbiAoYHNpZ2luZm9gKSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB1bm5lY2Vzc2FyaWx5IG9yIGF0IGFuIHVuc2FmZSB0aW1lLCBsaWtlbHkgZHVyaW5nIGFuIG9wZXJhdGlvbiBjYW5jZWxsYXRpb24uIFRoaXMgaXMgYSBjb21tb24gY2xhc3Mgb2YgcHJvYmxlbSwgYW5kIEkgYXBwcmVjaWF0ZSB0aGUgZGV0YWlsIGdpdmVuLiBUaGUgcGF0Y2ggaXMgZnVuY3Rpb25hbGx5IGZvY3VzZWQgb24gdGhlIGNvcmUgYGlvX3VyaW5nYCB3YWl0aWQgbG9naWMuIFRoaXMgaXMgZ29vZCBhcyBpdCBrZWVwcyB0aGUgY2hhbmdlIGNvbmNpc2UgYW5kIHRhcmdldGVkLiBUaGUgXCJXb3J0aEZ1enppbmc6IHRydWVcIiBmbGFnIGlzIGEgd2VsY29tZSBpbmRpY2F0b3IuIEl0IGRlbW9uc3RyYXRlcyB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgaXMgYSBhcmVhIHRoYXQgY291bGQgaGF2ZSBzdWJ0bGUgYnVncy5cblxuVGhlIHN1Z2dlc3RlZCBmb2N1cyBzeW1ib2xzLCBgaW9fd2FpdGlkYCwgYGlvX3dhaXRpZF9jYW5jZWxgLCBhbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCwgc2VlbSBhcHByb3ByaWF0ZSBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBkZXNjcmliZWQgYnVnLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybSBgaW9fd2FpdGlkYCBpcywgaW4gZmFjdCwgdGhlIGNvcnJlY3QgZW50cnkgcG9pbnQsIHdoaWNoIGl0IGFwcGVhcnMgdG8gYmUsIGFzIGl0IGhhbmRsZXMgdGhlIGBJT1JJTkdfT1BfV0FJVElEYCBvcGVyYXRpb24uIFRoZSByZW1pbmRlciB0byBjb25maXJtIGBpb193YWl0aWRfY2FuY2VsYCBhbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBhcmUgbm90IHN0YXRpYyBpcyByZWxldmFudCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGVyZSBhcmUgZXh0ZXJuYWwgcG9pbnRzIG9mIGNvbnRlbnRpb24uIExvb2tzIGxpa2UgdGhleSdyZSBub3QsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyBmb3IgYnJvYWRlciBpbXBhY3QgYW5hbHlzaXMuXG5cbkJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHJlYXNvbmFibGUgdG8gcHJvY2VlZCB3aXRoIHVzaW5nIHRoZSBzZXQtcmVzdWx0cy4gSXQgbG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHNhZmV0eSBpc3N1ZSBhbmQgaXMgd2VsbC1kb2N1bWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDE3LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NzowMi4wMDk0Njc1NDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NTkyNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fd2FpdGlkXCIsXG4gICAgXCJpb193YWl0aWRfY2FuY2VsXCIsXG4gICAgXCJpb193YWl0aWRfcmVtb3ZlX2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgZm9yIHRoZSBJT1JJTkdfT1BfV0FJVElEIG9wZXJhdGlvbiBpbiBpb191cmluZywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHdoZXRoZXIgc2lnaW5mbyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBkdXJpbmcgY2FuY2VsbGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3dhaXRpZFwiLFxuICAgIFwiaW9fd2FpdGlkX2NhbmNlbFwiLFxuICAgIFwiaW9fd2FpdGlkX3JlbW92ZV9hbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIGZvciB0aGUgSU9SSU5HX09QX1dBSVRJRCBvcGVyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGV0aGVyIHNpZ2luZm8gaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU3OjAyLjEzMDQzNDU2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzEzNzY4OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTc6MDIuMTMwOTc5NjI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNzMxMzIxOTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbmNlbGxhdGlvbiBhbmQgY29tcGxldGlvbiBwYXRocyBvZiB0aGUgaW9fdXJpbmcgd2FpdGlkIGNvbW1hbmQgdG8gY29uZGl0aW9uYWxseSBza2lwIGNvcHlpbmcgYHNpZ2luZm9gIGRhdGEgdG8gdXNlciBzcGFjZSAoYGlvX3dhaXRpZF9jb3B5X3NpYCkgd2hlbiB0aGUgcmVxdWVzdCBpcyBiZWluZyBjYW5jZWxlZCBvciB3aGVuIHRoZXJlIGlzIG5vIHZhbGlkIHRhc2sgY29udGV4dC4gVGhlIGRhdGEgYmVpbmcgY29waWVkIChgaXctXFx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXFx1MDAyNml3LVxcdTAwM2VpbmZvLCAwLCBzaXplb2YoaXctXFx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhM2RlMWRhOGI5OTY5YTBlNjNhNWUyZTU5ZjBkYzk0MjZiZDY3NDA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTI6NTY6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi4xMjExZjkwNWE5ZGIyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbisrKyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9yZW1vdmVfd3Eoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbitzdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQsIGJvb2wgY29weV9zaSlcbiB7XG4gXHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xuIFxuQEAgLTEzNywxMyArMTM3LDE2IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbiBcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUpO1xuIFx0aW9fd2FpdGlkX3JlbW92ZV93cShyZXEpO1xuIFxuLVx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4rXHRpZiAoY29weV9zaSlcbitcdFx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4rXHRlbHNlXG4rXHRcdGlvX3dhaXRpZF9mcmVlKHJlcSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuK3N0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgYm9vbCBjb3B5X3NpKVxuIHtcbiBcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XG4gXG5AQCAtMTU5LDIxICsxNjIsMzIgQEAgc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIFx0aWYgKGF0b21pY19mZXRjaF9pbmMoXHUwMDI2aXctXHUwMDNlcmVmcykgXHUwMDI2IElPX1dBSVRJRF9SRUZfTUFTSylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7XG4rXHRpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBjb3B5X3NpKTtcbiBcdGlvX3JlcV9xdWV1ZV90d19jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXG4re1xuK1x0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbit7XG4rXHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xuK31cbitcbiBpbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4ge1xuLVx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFx1MDAyNmN0eC1cdTAwM2V3YWl0aWRfbGlzdCwgX19pb193YWl0aWRfY2FuY2VsKTtcbitcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xuIH1cbiBcbiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbiBcdFx0XHQgIGJvb2wgY2FuY2VsX2FsbClcbiB7XG4tXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsIF9faW9fd2FpdGlkX2NhbmNlbCk7XG4rXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsXG4rXHRcdFx0XHQgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpb193YWl0aWRfZHJvcF9pc3N1ZV9yZWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5AQCAtMjAyLDYgKzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRpbnQgcmV0O1xuIFxuIFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcbitcdGlmICh1bmxpa2VseSh0dy5jYW5jZWwpKSB7XG4rXHRcdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQsIGZhbHNlKTtcbitcdFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdHJldCA9IF9fZG9fd2FpdChcdTAwMjZpd2EtXHUwMDNld28pO1xuIFxuQEAgLTIyOSw3ICsyNDgsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIHJldCk7XG4rXHRpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQsIHRydWUpO1xuIFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTc6MDIuMTMwOTgxNzI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTEwODA5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyB3YWl0aWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaW9fdXJpbmcvd2FpdGlkLmNgIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYSBuZXcgYm9vbGVhbiBwYXJhbWV0ZXIsIGBjb3B5X3NpYCwgYmVpbmcgaW50cm9kdWNlZCBpbnRvIHRoZSBgaW9fd2FpdGlkX2NvbXBsZXRlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIGlmIGBjb3B5X3NpYCBpcyB0cnVlLCB0aGVuIGBpb193YWl0aWRfZmluaXNoYCBnZXRzIGNhbGxlZCB3aXRoIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gY29kZS4gQW5kIGlmIGl0J3MgZmFsc2UsIHRoZW4gaXQncyBgaW9fd2FpdGlkX2ZyZWVgLCBnb3QgaXQuIFRoYXQgaW1tZWRpYXRlbHkgaW1wbGllcyBhIHNwbGl0IGluIGhvdyB0aGUgcmVxdWVzdCBpcyBoYW5kbGVkIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGBzaWdpbmZvYCBkYXRhIG5lZWRzIHRvIGJlIGNvcGllZCBvdXQuXG5cbk5vdywgd2hlcmUgZWxzZSBkbyB3ZSBzZWUgdGhpcyBgY29weV9zaWAgcGFyYW1ldGVyPyBBaCwgYF9faW9fd2FpdGlkX2NhbmNlbGAgdGFrZXMgaXQgdG9vLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgdGhlIGNhbmNlbCBsb2dpYyBuZWVkcyB0byBhbGlnbiB3aXRoIHRoZSBjb21wbGV0aW9uIGxvZ2ljLiBGdXJ0aGVyIGRvd24sIGBpb193YWl0aWRfY2FuY2VsX2NiYCBwYXNzZXMgYHRydWVgIOKAkyBpdCBjb3BpZXMgdGhlIGBzaWdpbmZvYCwgd2hpbGUgYGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiYCBwYXNzZXMgYGZhbHNlYC4gR290Y2hhLiBBbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBjbGV2ZXJseSB1c2VzIHRoZSBgbm9jb3B5X2NiYCBpZiB0aGUgdGFzayBjb250ZXh0IGlzIE5VTEwsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIHJlbW92YWwuXG5cbkhtbSwgdGhpcyBgaW9fd2FpdGlkX2NiYCBpcyBpbnRlcmVzdGluZy4gSXQgaGFuZGxlcyB0aGUgYHR3LmNhbmNlbGAgZXZlbnQgYnkgY2FsbGluZyBgaW9fd2FpdGlkX2NvbXBsZXRlYCB3aXRoIGEgY2FuY2VsbGF0aW9uIGVycm9yIGFuZCwgaW1wb3J0YW50bHksIGBmYWxzZWAgZm9yIGBjb3B5X3NpYC4gU28sIG5vIGNvcHlpbmcgb2YgdGhlIGBzaWdpbmZvYCB1cG9uIGNhbmNlbGxhdGlvbi4gVGhhdCdzIGdvb2QsIG5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgYGlvX3dhaXRpZF9maW5pc2hgIGRvZXMuLi4gdGhhdCB3aWxsIGxpa2VseSBnaXZlIGZ1cnRoZXIgaW5zaWdodCBvbiB0aGUgdXNlIG9mIGBjb3B5X3NpYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU3OjA3LjU0MjA3NjIyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwOTUzODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dhaXRpZF9maW5pc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvd2FpdGlkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvd2FpdGlkLmM9Njg9c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NvcHlfc2koc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBzaWdubylcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jLTk2LVxcbmlvX3VyaW5nL3dhaXRpZC5jOjk3OnN0YXRpYyBpbnQgaW9fd2FpdGlkX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcXG5pb191cmluZy93YWl0aWQuYy05OC17XFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0xMjg9c3RhdGljIHZvaWQgaW9fd2FpdGlkX2NvbXBsZXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0LCBib29sIGNvcHlfc2kpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xNDAtXFx0aWYgKGNvcHlfc2kpXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTQxOlxcdFxcdHJldCA9IGlvX3dhaXRpZF9maW5pc2gocmVxLCByZXQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTE0Mi1cXHRlbHNlXFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0zMDE9aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtMzU5LVxcdGlvX3dhaXRpZF9yZW1vdmVfd3EocmVxKTtcXG5pb191cmluZy93YWl0aWQuYzozNjA6XFx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XFxuaW9fdXJpbmcvd2FpdGlkLmMtMzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NzowOC4yMjMwNDE0NTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM1MDcwNzkzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0IHRocm91Z2g6XG5cbioqRGVjb25zdHJ1Y3RpbmcgaW9fd2FpdGlkX2ZpbmlzaCBhbmQgaW9fd2FpdGlkX2NvcHlfc2kqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGVzZSBkb3duLiBXaGVuIEkgc2VlIGBpb193YWl0aWRfZmluaXNoYCwgbXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBjdWxtaW5hdGlvbiBvZiBzb21lIEkvTyBvcGVyYXRpb24gd2FpdGluZy4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhpbmdzIGFyZSBmaW5hbGl6ZWQsIHRoZSBzaWduYWwgaXMgcmVjZWl2ZWQsIHRoZSByZXN1bHRzIGFyZSByZWFkeSB0byBiZSBkZWFsdCB3aXRoLiBJJ20gdGhpbmtpbmcsIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNsZWFudXAgY3JldyBhZnRlciB0aGUgYXN5bmNocm9ub3VzIEkvTyBmaXJld29ya3MuIFdl4oCZdmUgYmVlbiBwYXRpZW50bHkgd2FpdGluZywgYW5kICp0aGlzKiBpcyB0aGUgY2FsbCB0aGF0IHRpZGllcyBldmVyeXRoaW5nIHVwLiBEaWQgYW4gZXZlbnQgb2NjdXI/IERpZCBzb21ldGhpbmcgZ28gd3Jvbmc/IFRoaXMgaXMgd2hlcmUgd2UgbGVhcm4gdGhlIG91dGNvbWUuIEknbSBhbnRpY2lwYXRpbmcgZXJyb3IgaGFuZGxpbmcsIHN0YXR1cyByZXRyaWV2YWwsIGFuZCBwb3NzaWJseSBmcmVlaW5nIHVwIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9wZXJhdGlvbi4gSXQncyB0aGUgXCJyZXBvcnQgY2FyZFwiIGZ1bmN0aW9uLCBsZXR0aW5nIHVzIGtub3cgaWYgdGhlIEkvTyByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLCBmYWlsZWQsIG9yIHRlcm1pbmF0ZWQgaW4gc29tZSBvdGhlciB3YXksIHBlcmhhcHMgZHVlIHRvIGEgc2lnbmFsLlxuXG5Ob3csIGBpb193YWl0aWRfY29weV9zaWAuLi4gdGhpcyBzZWVtcyB0byBiZSBhIHN1YnRsZSwgYnV0IGltcG9ydGFudCB2YXJpYXRpb24uIFRoZSBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZSBjb3B5aW5nIG9mIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGV2ZW50IOKAkyBzcGVjaWZpY2FsbHksIGluZm9ybWF0aW9uIGhlbGQgaW4gYSBgc2lnaW5mb190YCBzdHJ1Y3R1cmUuIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIHRha2luZyB0aGUgZGV0YWlscyBvZiB0aGUgSS9PIGV2ZW50IGZyb20ga2VybmVsIHNwYWNlIGFuZCBwbGFjaW5nIGl0IHNvbWV3aGVyZSBhY2Nlc3NpYmxlIHRvIHVzZXIgc3BhY2UuIEl0IHNvdW5kcyBsaWtlIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBzaGFyZWQgbWVtb3J5IG9yIGFuIElQQyBtZWNoYW5pc20gdG8gZ2V0IGEgc2FmZSBhbmQgY29uc2lzdGVudCBjb3B5IG9mIHRoZSBgc2lnaW5mb190YCBzdHJ1Y3R1cmUuIEknbSB0aGlua2luZyBpdCdzIHByb2JhYmx5IGxlc3MgYWJvdXQgdGhlIGNvcmUgcHJvY2VzcyB3YWl0IGl0c2VsZiAodGhhdCdzIGBpb193YWl0aWRfZmluaXNoYCdzIGpvYiksIGFuZCBtb3JlIGFib3V0ICp3aGF0KiB0aGF0IHdhaXQgc2lnbmFsZWQuIEknbSBpbWFnaW5pbmcgaXQgZGVhbHMgd2l0aCBleHRyYWN0aW5nIGFueSBzcGVjaWZpYyBkZXRhaWxzLCBzdWNoIGFzIHRoZSBzaWduYWwgbnVtYmVyLCB0aGUgc291cmNlIG9mIHRoZSBzaWduYWwsIG9yIHRoZSByZWFzb24gZm9yIHRoZSB3YWl0IHRlcm1pbmF0aW5nLiBUaGUgXCJzaVwiIHN1ZmZpeCBoaW50cyBhdCBzaWduYWwgaW5mb3JtYXRpb24sIHNvIEknbSBleHBlY3RpbmcgaXQgdG8gcHJvdmlkZSBtb3JlIGdyYW51bGFyIGRhdGEgYWJvdXQgKndoeSogdGhlIEkvTyB3YWl0IGlzIGRvbmUuIEl0J3MgYWxsIGFib3V0IHByb3ZpZGluZyByaWNoIGRldGFpbCB0byB0aGUgY2FsbGVyLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgaXMgY3JpdGljYWwgdG8gdGhlIHJvYnVzdCBoYW5kbGluZyBvZiBhc3luY2hyb25vdXMgSS9PLCBhbGxvd2luZyBkZXZlbG9wZXJzIHRvIG1hbmFnZSBlcnJvcnMsIHJlY292ZXJ5IGFuZCBwcm92aWRlIHJlbGV2YW50IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NzozMS43MzAxMjQyMTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3dhaXRpZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY4OlxcdHN0YXRpYyBib29sIGlvX3dhaXRpZF9jb3B5X3NpKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgc2lnbm8pXFxuICA2OTpcXHR7XFxuICA3MDpcXHRcXHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xcbiAgNzE6XFx0XFx0Ym9vbCByZXQ7XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdGlmICghaXctXFx1MDAzZWluZm9wKVxcbiAgNzQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGlmIChpb19pc19jb21wYXQocmVxLVxcdTAwM2VjdHgpKVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIGlvX3dhaXRpZF9jb21wYXRfY29weV9zaShpdywgc2lnbm8pO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRpZiAoIXVzZXJfd3JpdGVfYWNjZXNzX2JlZ2luKGl3LVxcdTAwM2VpbmZvcCwgc2l6ZW9mKCppdy1cXHUwMDNlaW5mb3ApKSlcXG4gIDgwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0dW5zYWZlX3B1dF91c2VyKHNpZ25vLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV9zaWdubywgRWZhdWx0KTtcXG4gIDgzOlxcdFxcdHVuc2FmZV9wdXRfdXNlcigwLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV9lcnJubywgRWZhdWx0KTtcXG4gIDg0OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5jYXVzZSwgXFx1MDAyNml3LVxcdTAwM2VpbmZvcC1cXHUwMDNlc2lfY29kZSwgRWZhdWx0KTtcXG4gIDg1OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5waWQsIFxcdTAwMjZpdy1cXHUwMDNlaW5mb3AtXFx1MDAzZXNpX3BpZCwgRWZhdWx0KTtcXG4gIDg2OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby51aWQsIFxcdTAwMjZpdy1cXHUwMDNlaW5mb3AtXFx1MDAzZXNpX3VpZCwgRWZhdWx0KTtcXG4gIDg3OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5zdGF0dXMsIFxcdTAwMjZpdy1cXHUwMDNlaW5mb3AtXFx1MDAzZXNpX3N0YXR1cywgRWZhdWx0KTtcXG4gIDg4OlxcdFxcdHJldCA9IHRydWU7XFxuICA4OTpcXHRkb25lOlxcbiAgOTA6XFx0XFx0dXNlcl93cml0ZV9hY2Nlc3NfZW5kKCk7XFxuICA5MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAgOTI6XFx0RWZhdWx0OlxcbiAgOTM6XFx0XFx0cmV0ID0gZmFsc2U7XFxuICA5NDpcXHRcXHRnb3RvIGRvbmU7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBpbnQgaW9fd2FpdGlkX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcXG4gIDk4OlxcdHtcXG4gIDk5OlxcdFxcdGludCBzaWdubyA9IDA7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuIDEwMjpcXHRcXHRcXHRzaWdubyA9IFNJR0NITEQ7XFxuIDEwMzpcXHRcXHRcXHRyZXQgPSAwO1xcbiAxMDQ6XFx0XFx0fVxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRpZiAoIWlvX3dhaXRpZF9jb3B5X3NpKHJlcSwgc2lnbm8pKVxcbiAxMDc6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gMTA4OlxcdFxcdGlvX3dhaXRpZF9mcmVlKHJlcSk7XFxuIDEwOTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMTA6XFx0fVxcbiAxMTE6XFx0XFxuIDExMjpcXHRzdGF0aWMgdm9pZCBpb193YWl0aWRfcmVtb3ZlX3dxKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbiAxMTM6XFx0e1xcbiAxMTQ6XFx0XFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcXG4gMTE1OlxcdFxcdHN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQgKmhlYWQ7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdGhlYWQgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZpdy1cXHUwMDNlaGVhZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU3OjMxLjczMDI5MDc0NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjY2NTk5NzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2VybmVsIE1lbW9yeSBMZWFrKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBwcmV2ZW50aW5nIGBpb193YWl0aWRfY29weV9zaWAgZnJvbSBiZWluZyBjYWxsZWQgaW4gc3BlY2lmaWMgc2NlbmFyaW9zLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCBmb2N1c2VzIG9uIHNpdHVhdGlvbnMgd2hlcmUgd2UncmUgYWxyZWFkeSBjYW5jZWxpbmcgdGhlIHdhaXQgb3Igd2hlbiB0aGUgdGFzayBjb250ZXh0IGlzIG51bGwgZHVyaW5nIHJlbW92YWwuIEVzc2VudGlhbGx5LCBpdCBhcHBlYXJzIHdlJ3JlIHRyeWluZyB0byBhdm9pZCBhIGNhbGwgd2hlbiBgY29weV9zaWAgaXMgZmFsc2UuIE1ha2VzIHNlbnNlLCB0aGF0IHBhcmFtZXRlciBjb250cm9scyB0aGUgY29weWluZyBvZiBzaWduYWwgaW5mby5cblxuVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIHRoYXQgYGlvX3dhaXRpZF9jb3B5X3NpYCB1c2VzIGB1bnNhZmVfcHV0X3VzZXJgIHRvIHdyaXRlIGRhdGEgaW50byB1c2VyIHNwYWNlLiBBbmQgdGhpcyB3b3JyaWVzIG1lLiBJdCBzcGVjaWZpY2FsbHkgd3JpdGVzIGBzaWdub2AsIGAwYCwgYGl3LVx1MDAzZWluZm8uY2F1c2VgLCBgaXctXHUwMDNlaW5mby5waWRgLCBgaXctXHUwMDNlaW5mby51aWRgLCBhbmQgYGl3LVx1MDAzZWluZm8uc3RhdHVzYC4gIFRoZXNlIGFyZSBmaWVsZHMgd2l0aGluIGBpdy1cdTAwM2VpbmZvYC4gIElmIGBpdy1cdTAwM2VpbmZvYCBpcyAqdW5pbml0aWFsaXplZCogYXQgdGhlIHBvaW50IHdoZXJlIHRoaXMgd3JpdGUgaGFwcGVucywgd2UgY291bGQgYmUgbGVha2luZyBwb3RlbnRpYWxseSBzZW5zaXRpdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIHVzZXIuIFRoYXTigJlzIGFsd2F5cyBhIHNlY3VyaXR5IHJpc2sgd2UgbmVlZCB0byBhdm9pZC5cblxuQnV0IHdhaXQsIGEgYml0IG9mIGNyaXRpY2FsIHRoaW5raW5nOiBgdW5zYWZlX3B1dF91c2VyYCBpc24ndCB3cml0aW5nIHRoZSAqZW50aXJlKiBgd2FpdGlkX2luZm9gIHN0cnVjdHVyZS4gSXQncyBvbmx5IHdyaXRpbmcgc3BlY2lmaWMgKmZpZWxkcyogb2YgaXQuIFNvIHdoaWxlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBhIGNvbmNlcm4sIHdlIHByb2JhYmx5IGFyZW4ndCBsZWFraW5nIGFueSBwYWRkaW5nIHdpdGhpbiB0aGUgc3RydWN0LCBqdXN0IHRoZXNlIGRpc2NyZXRlIHZhbHVlcy4gT2theSwgc28gd2UgbmVlZCB0byB2ZXJpZnkgdGhlIHN0cnVjdCBkZWZpbml0aW9uIG9mIGB3YWl0aWRfaW5mb2AuIExldCBtZSBjaGVjayB0aGF0IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1Nzo1NC4zOTYyOTE1NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjEzNTI4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHdhaXRpZF9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy93YWl0aWQuYz0yND1zdHJ1Y3QgaW9fd2FpdGlkIHtcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jLTMxLVxcdHN0cnVjdCBzaWdpbmZvIF9fdXNlciAqaW5mb3A7XFxuaW9fdXJpbmcvd2FpdGlkLmM6MzI6XFx0c3RydWN0IHdhaXRpZF9pbmZvIGluZm87XFxuaW9fdXJpbmcvd2FpdGlkLmMtMzMtfTtcXG4tLVxcbmtlcm5lbC9leGl0LmM9MTIwNj1zdGF0aWMgaW50IHdhaXRfdGFza196b21iaWUoc3RydWN0IHdhaXRfb3B0cyAqd28sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9leGl0LmMtMTIxMC1cXHR1aWRfdCB1aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCB0YXNrX3VpZChwKSk7XFxua2VybmVsL2V4aXQuYzoxMjExOlxcdHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3A7XFxua2VybmVsL2V4aXQuYy0xMjEyLVxcbi0tXFxua2VybmVsL2V4aXQuYz0xMzYyPXN0YXRpYyBpbnQgd2FpdF90YXNrX3N0b3BwZWQoc3RydWN0IHdhaXRfb3B0cyAqd28sXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTEzNjQte1xcbmtlcm5lbC9leGl0LmM6MTM2NTpcXHRzdHJ1Y3Qgd2FpdGlkX2luZm8gKmluZm9wO1xcbmtlcm5lbC9leGl0LmMtMTM2Ni1cXHRpbnQgZXhpdF9jb2RlLCAqcF9jb2RlLCB3aHk7XFxuLS1cXG5rZXJuZWwvZXhpdC5jPTE0MzQ9c3RhdGljIGludCB3YWl0X3Rhc2tfY29udGludWVkKHN0cnVjdCB3YWl0X29wdHMgKndvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxua2VybmVsL2V4aXQuYy0xNDM1LXtcXG5rZXJuZWwvZXhpdC5jOjE0MzY6XFx0c3RydWN0IHdhaXRpZF9pbmZvICppbmZvcDtcXG5rZXJuZWwvZXhpdC5jLTE0MzctXFx0cGlkX3QgcGlkO1xcbi0tXFxua2VybmVsL2V4aXQuYz0xNzY4PWludCBrZXJuZWxfd2FpdGlkX3ByZXBhcmUoc3RydWN0IHdhaXRfb3B0cyAqd28sIGludCB3aGljaCwgcGlkX3QgdXBpZCxcXG5rZXJuZWwvZXhpdC5jOjE3Njk6XFx0XFx0XFx0ICBzdHJ1Y3Qgd2FpdGlkX2luZm8gKmluZm9wLCBpbnQgb3B0aW9ucyxcXG5rZXJuZWwvZXhpdC5jLTE3NzAtXFx0XFx0XFx0ICBzdHJ1Y3QgcnVzYWdlICpydSlcXG4tLVxcbmtlcm5lbC9leGl0LmMtMTgyNy1cXG5rZXJuZWwvZXhpdC5jOjE4Mjg6c3RhdGljIGxvbmcga2VybmVsX3dhaXRpZChpbnQgd2hpY2gsIHBpZF90IHVwaWQsIHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3AsXFxua2VybmVsL2V4aXQuYy0xODI5LVxcdFxcdFxcdCAgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKnJ1KVxcbi0tXFxua2VybmVsL2V4aXQuYz0xODQ2PVNZU0NBTExfREVGSU5FNSh3YWl0aWQsIGludCwgd2hpY2gsIHBpZF90LCB1cGlkLCBzdHJ1Y3Qgc2lnaW5mbyBfX3VzZXIgKixcXG4tLVxcbmtlcm5lbC9leGl0LmMtMTg0OS1cXHRzdHJ1Y3QgcnVzYWdlIHI7XFxua2VybmVsL2V4aXQuYzoxODUwOlxcdHN0cnVjdCB3YWl0aWRfaW5mbyBpbmZvID0gey5zdGF0dXMgPSAwfTtcXG5rZXJuZWwvZXhpdC5jLTE4NTEtXFx0bG9uZyBlcnIgPSBrZXJuZWxfd2FpdGlkKHdoaWNoLCB1cGlkLCBcXHUwMDI2aW5mbywgb3B0aW9ucywgcnUgPyBcXHUwMDI2ciA6IE5VTEwpO1xcbi0tXFxua2VybmVsL2V4aXQuYz0xOTgwPUNPTVBBVF9TWVNDQUxMX0RFRklORTUod2FpdGlkLFxcbi0tXFxua2VybmVsL2V4aXQuYy0xOTg1LVxcdHN0cnVjdCBydXNhZ2UgcnU7XFxua2VybmVsL2V4aXQuYzoxOTg2OlxcdHN0cnVjdCB3YWl0aWRfaW5mbyBpbmZvID0gey5zdGF0dXMgPSAwfTtcXG5rZXJuZWwvZXhpdC5jLTE5ODctXFx0bG9uZyBlcnIgPSBrZXJuZWxfd2FpdGlkKHdoaWNoLCBwaWQsIFxcdTAwMjZpbmZvLCBvcHRpb25zLCB1cnUgPyBcXHUwMDI2cnUgOiBOVUxMKTtcXG4tLVxcbmtlcm5lbC9leGl0LmgtNC1cXG5rZXJuZWwvZXhpdC5oOjU6c3RydWN0IHdhaXRpZF9pbmZvIHtcXG5rZXJuZWwvZXhpdC5oLTYtXFx0cGlkX3QgcGlkO1xcbi0tXFxua2VybmVsL2V4aXQuaD0xMj1zdHJ1Y3Qgd2FpdF9vcHRzIHtcXG4tLVxcbmtlcm5lbC9leGl0LmgtMTYtXFxua2VybmVsL2V4aXQuaDoxNzpcXHRzdHJ1Y3Qgd2FpdGlkX2luZm9cXHQqd29faW5mbztcXG5rZXJuZWwvZXhpdC5oLTE4LVxcdGludFxcdFxcdFxcdHdvX3N0YXQ7XFxuLS1cXG5rZXJuZWwvZXhpdC5oPTI3PWludCBrZXJuZWxfd2FpdGlkX3ByZXBhcmUoc3RydWN0IHdhaXRfb3B0cyAqd28sIGludCB3aGljaCwgcGlkX3QgdXBpZCxcXG5rZXJuZWwvZXhpdC5oOjI4OlxcdFxcdFxcdCAgc3RydWN0IHdhaXRpZF9pbmZvICppbmZvcCwgaW50IG9wdGlvbnMsXFxua2VybmVsL2V4aXQuaC0yOS1cXHRcXHRcXHQgIHN0cnVjdCBydXNhZ2UgKnJ1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTc6NTYuNzE3NjUxOTMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTkzNTY0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3Qgd2FpdGlkX2luZm9gKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgd2FpdCBpbmZvcm1hdGlvbiwgc3BlY2lmaWNhbGx5LCBob3cgaXQgc3RvcmVzIGRldGFpbHMgcmVsYXRlZCB0byBhIHByb2Nlc3MncyBleGl0LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYGtlcm5lbC9leGl0LmhgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHdhaXRpZF9pbmZvYC4gSSdtIGd1ZXNzaW5nIHRoYXQgc3RydWN0IHdpbGwgY29udGFpbiB0aGUgY3JpdGljYWwgZGF0YSBJJ20gaW50ZXJlc3RlZCBpbjogdGhlIGV4aXQgc3RhdHVzLCBzaWduYWwgaW5mb3JtYXRpb24sIHJlc291cmNlIHVzYWdlIHN0YXRpc3RpY3MsIGFuZCBtYXliZSBldmVuIGEgcG9pbnRlciBiYWNrIHRvIHRoZSBwcm9jZXNzIGNvbnRyb2wgYmxvY2suIEl0J3MgdGhlIGx5bmNocGluIGZvciBob3cgYHdhaXRpZGAgYW5kIG90aGVyIHdhaXQtcmVsYXRlZCBzeXN0ZW0gY2FsbHMgb3BlcmF0ZS4gSSdtIGtlZW4gdG8gZGlzc2VjdCBpdCwgZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggbWVtYmVyLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcHJvY2VzcyBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6Njc1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU4OjAzLjI3NzAxMTM2NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZXhpdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I2lmbmRlZiBMSU5VWF9XQUlUSURfSFxcbiAgIDM6XFx0I2RlZmluZSBMSU5VWF9XQUlUSURfSFxcbiAgIDQ6XFx0XFxuICAgNTpcXHRzdHJ1Y3Qgd2FpdGlkX2luZm8ge1xcbiAgIDY6XFx0XFx0cGlkX3QgcGlkO1xcbiAgIDc6XFx0XFx0dWlkX3QgdWlkO1xcbiAgIDg6XFx0XFx0aW50IHN0YXR1cztcXG4gICA5OlxcdFxcdGludCBjYXVzZTtcXG4gIDEwOlxcdH07XFxuICAxMTpcXHRcXG4gIDEyOlxcdHN0cnVjdCB3YWl0X29wdHMge1xcbiAgMTM6XFx0XFx0ZW51bSBwaWRfdHlwZVxcdFxcdHdvX3R5cGU7XFxuICAxNDpcXHRcXHRpbnRcXHRcXHRcXHR3b19mbGFncztcXG4gIDE1OlxcdFxcdHN0cnVjdCBwaWRcXHRcXHQqd29fcGlkO1xcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHRzdHJ1Y3Qgd2FpdGlkX2luZm9cXHQqd29faW5mbztcXG4gIDE4OlxcdFxcdGludFxcdFxcdFxcdHdvX3N0YXQ7XFxuICAxOTpcXHRcXHRzdHJ1Y3QgcnVzYWdlXFx0XFx0KndvX3J1c2FnZTtcXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1ODowMy4yNzcwNzA3MjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzMDk5MzgwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGlvX3dhaXRpZF9jb3B5X3NpYCBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHdhaXRpZF9pbmZvYCBzdHJ1Y3R1cmUsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGhvbGRzIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb246IGBwaWRgLCBgdWlkYCwgYHN0YXR1c2AsIGFuZCBgY2F1c2VgLiBOb3csIEknbSBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhpcyBmdW5jdGlvbiwgYGlvX3dhaXRpZF9jb3B5X3NpYC4gSXQgc2VlbXMgbGlrZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBjb3B5aW5nIGRhdGEgZnJvbSBhbiBgaXctXHUwMDNlaW5mb2Agc3RydWN0IHRvIHRoZSB1c2VyIHNwYWNlIGJ1ZmZlciBgaXctXHUwMDNlaW5mb3BgLiBUaGUgY29kZSBzbmlwcGV0IHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgZm9yIGVhY2ggZmllbGQ6XG5cbmBgYGNcblx0dW5zYWZlX3B1dF91c2VyKHNpZ25vLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9zaWdubywgRWZhdWx0KTtcblx0dW5zYWZlX3B1dF91c2VyKDAsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX2Vycm5vLCBFZmF1bHQpO1xuXHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5jYXVzZSwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfY29kZSwgRWZhdWx0KTtcblx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8ucGlkLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9waWQsIEVmYXVsdCk7XG5cdHVuc2FmZV9wdXRfdXNlcihpdy1cdTAwM2VpbmZvLnVpZCwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfdWlkLCBFZmF1bHQpO1xuXHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5zdGF0dXMsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX3N0YXR1cywgRWZhdWx0KTtcbmBgYFxuXG5UaGUgcHJvYmxlbSBpcyBpbW1lZGlhdGVseSBjbGVhciB0byBtZS4gSWYsIGFuZCB0aGlzIGlzIGEgYmlnIGlmLCBgaXctXHUwMDNlaW5mb2AgaGFzbid0IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSdyZSBnb2luZyB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludG8gdXNlciBzcGFjZS4gVGhhdCdzIGEgY2xhc3NpYyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFuZCBzb21ldGhpbmcgSSdkIHdhbnQgdG8gYXVkaXQgcmlnaHQgYXdheS4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGl3LVx1MDAzZWluZm9gIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkLCBJJ2xsIHRyYWNlIGl0cyB1c2FnZSBpbiBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBjb3JyZWN0IHN0YXRlLCB0byBhdm9pZCB0aGF0IG1lbW9yeSBsZWFrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTg6MTguNTg3MDEzMDg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjUxMzI2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXctXFx1MDAzZWluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvd2FpdGlkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvd2FpdGlkLmM9NDM9c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NvbXBhdF9jb3B5X3NpKHN0cnVjdCBpb193YWl0aWQgKml3LCBpbnQgc2lnbm8pXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy00Ny1cXG5pb191cmluZy93YWl0aWQuYzo0ODpcXHRpbmZvcCA9IChzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gX191c2VyICopIGl3LVxcdTAwM2VpbmZvcDtcXG5pb191cmluZy93YWl0aWQuYy00OS1cXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jLTU0LVxcdHVuc2FmZV9wdXRfdXNlcigwLCBcXHUwMDI2aW5mb3AtXFx1MDAzZXNpX2Vycm5vLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjU1OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5jYXVzZSwgXFx1MDAyNmluZm9wLVxcdTAwM2VzaV9jb2RlLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjU2OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5waWQsIFxcdTAwMjZpbmZvcC1cXHUwMDNlc2lfcGlkLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjU3OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby51aWQsIFxcdTAwMjZpbmZvcC1cXHUwMDNlc2lfdWlkLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjU4OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5zdGF0dXMsIFxcdTAwMjZpbmZvcC1cXHUwMDNlc2lfc3RhdHVzLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTU5LVxcdHJldCA9IHRydWU7XFxuLS1cXG5pb191cmluZy93YWl0aWQuYz02OD1zdGF0aWMgYm9vbCBpb193YWl0aWRfY29weV9zaShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHNpZ25vKVxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtNzItXFxuaW9fdXJpbmcvd2FpdGlkLmM6NzM6XFx0aWYgKCFpdy1cXHUwMDNlaW5mb3ApXFxuaW9fdXJpbmcvd2FpdGlkLmMtNzQtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pb191cmluZy93YWl0aWQuYy03OC1cXG5pb191cmluZy93YWl0aWQuYzo3OTpcXHRpZiAoIXVzZXJfd3JpdGVfYWNjZXNzX2JlZ2luKGl3LVxcdTAwM2VpbmZvcCwgc2l6ZW9mKCppdy1cXHUwMDNlaW5mb3ApKSlcXG5pb191cmluZy93YWl0aWQuYy04MC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuaW9fdXJpbmcvd2FpdGlkLmMtODEtXFxuaW9fdXJpbmcvd2FpdGlkLmM6ODI6XFx0dW5zYWZlX3B1dF91c2VyKHNpZ25vLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV9zaWdubywgRWZhdWx0KTtcXG5pb191cmluZy93YWl0aWQuYzo4MzpcXHR1bnNhZmVfcHV0X3VzZXIoMCwgXFx1MDAyNml3LVxcdTAwM2VpbmZvcC1cXHUwMDNlc2lfZXJybm8sIEVmYXVsdCk7XFxuaW9fdXJpbmcvd2FpdGlkLmM6ODQ6XFx0dW5zYWZlX3B1dF91c2VyKGl3LVxcdTAwM2VpbmZvLmNhdXNlLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV9jb2RlLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjg1OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5waWQsIFxcdTAwMjZpdy1cXHUwMDNlaW5mb3AtXFx1MDAzZXNpX3BpZCwgRWZhdWx0KTtcXG5pb191cmluZy93YWl0aWQuYzo4NjpcXHR1bnNhZmVfcHV0X3VzZXIoaXctXFx1MDAzZWluZm8udWlkLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV91aWQsIEVmYXVsdCk7XFxuaW9fdXJpbmcvd2FpdGlkLmM6ODc6XFx0dW5zYWZlX3B1dF91c2VyKGl3LVxcdTAwM2VpbmZvLnN0YXR1cywgXFx1MDAyNml3LVxcdTAwM2VpbmZvcC1cXHUwMDNlc2lfc3RhdHVzLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTg4LVxcdHJldCA9IHRydWU7XFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0yNzk9aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0yOTUtXFx0aXctXFx1MDAzZWhlYWQgPSBOVUxMO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjI5NjpcXHRpdy1cXHUwMDNlaW5mb3AgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKHNxZS1cXHUwMDNlYWRkcjIpKTtcXG5pb191cmluZy93YWl0aWQuYzoyOTc6XFx0bWVtc2V0KFxcdTAwMjZpdy1cXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVxcdTAwM2VpbmZvKSk7XFxuaW9fdXJpbmcvd2FpdGlkLmMtMjk4LVxcdHJldHVybiAwO1xcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmM9MzAxPWludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jLTMwNy1cXG5pb191cmluZy93YWl0aWQuYzozMDg6XFx0cmV0ID0ga2VybmVsX3dhaXRpZF9wcmVwYXJlKFxcdTAwMjZpd2EtXFx1MDAzZXdvLCBpdy1cXHUwMDNld2hpY2gsIGl3LVxcdTAwM2V1cGlkLCBcXHUwMDI2aXctXFx1MDAzZWluZm8sXFxuaW9fdXJpbmcvd2FpdGlkLmMtMzA5LVxcdFxcdFxcdFxcdFxcdGl3LVxcdTAwM2VvcHRpb25zLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTg6MTkuMjEyMTUxNjc1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzOTc1ODYwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwbGF5aW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBpb193YWl0aWRfcHJlcCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgbWVtc2V0KFx1MDAyNml3LVx1MDAzZWluZm8sIDAsIHNpemVvZihpdy1cdTAwM2VpbmZvKSk7YCB3aXRoaW4gdGhlIGBpb193YWl0aWRfcHJlcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGluZSBjb21wbGV0ZWx5IHplcm9zIG91dCB0aGUgYGl3LVx1MDAzZWluZm9gIHN0cnVjdHVyZS4gVGhhdCdzIGEgZ29vZCBzaWduLiBJdCAqc2hvdWxkKiBtZWFuIHRoYXQgYW55IHN1YnNlcXVlbnQgdXNlIG9mIGBpdy1cdTAwM2VpbmZvYCB3b24ndCBiZSByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IGZ1bGx5IGluaXRpYWxpemVzIGl0IHRvIHplcm8uIFRoYXQncyBwcmVjaXNlbHkgd2hhdCBJIHdhbnQgdG8gc2VlIHRvIGF2b2lkIGFueSBuYXN0eSwgdW5kZWZpbmVkIGJlaGF2aW9yIG9yIHBvdGVudGlhbCBsZWFrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGdpdmVuIHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nLCBpcyB0aGVyZSB0cnVseSBhIGxlYWsgb3Igbm90PyBUaGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgYGlvX3dhaXRpZF9wcmVwYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb250ZXh0IHRvIGJlIHN1cmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU4OjI4LjYwOTc0MTQxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy93YWl0aWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzksXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzk6XFx0aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuIDI4MDpcXHR7XFxuIDI4MTpcXHRcXHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xcbiAyODI6XFx0XFx0c3RydWN0IGlvX3dhaXRpZF9hc3luYyAqaXdhO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRpZiAoc3FlLVxcdTAwM2VhZGRyIHx8IHNxZS1cXHUwMDNlYnVmX2luZGV4IHx8IHNxZS1cXHUwMDNlYWRkcjMgfHwgc3FlLVxcdTAwM2V3YWl0aWRfZmxhZ3MpXFxuIDI4NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0aXdhID0gaW9fdXJpbmdfYWxsb2NfYXN5bmNfZGF0YShOVUxMLCByZXEpO1xcbiAyODg6XFx0XFx0aWYgKHVubGlrZWx5KCFpd2EpKVxcbiAyODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI5MDpcXHRcXHRpd2EtXFx1MDAzZXJlcSA9IHJlcTtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0aXctXFx1MDAzZXdoaWNoID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlbGVuKTtcXG4gMjkzOlxcdFxcdGl3LVxcdTAwM2V1cGlkID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlZmQpO1xcbiAyOTQ6XFx0XFx0aXctXFx1MDAzZW9wdGlvbnMgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VmaWxlX2luZGV4KTtcXG4gMjk1OlxcdFxcdGl3LVxcdTAwM2VoZWFkID0gTlVMTDtcXG4gMjk2OlxcdFxcdGl3LVxcdTAwM2VpbmZvcCA9IHU2NF90b191c2VyX3B0cihSRUFEX09OQ0Uoc3FlLVxcdTAwM2VhZGRyMikpO1xcbiAyOTc6XFx0XFx0bWVtc2V0KFxcdTAwMjZpdy1cXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVxcdTAwM2VpbmZvKSk7XFxuIDI5ODpcXHRcXHRyZXR1cm4gMDtcXG4gMjk5OlxcdH1cXG4gMzAwOlxcdFxcbiAzMDE6XFx0aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiAzMDI6XFx0e1xcbiAzMDM6XFx0XFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTg6MjguNjA5ODEzODU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwODM0MzYyMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBpb193YWl0aWQgUGF0Y2ggYW5kIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3dhaXRpZF9jb21wbGV0ZWAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZT8gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGBjb3B5X3NpYCBmbGFnIHRvIGBpb193YWl0aWRfY29tcGxldGVgLCBhbGxvd2luZyBpdCB0byBza2lwIHRoZSBgaW9fd2FpdGlkX2ZpbmlzaGAgZnVuY3Rpb24gZW50aXJlbHksIGFuZCBnbyBzdHJhaWdodCB0byBgaW9fd2FpdGlkX2ZyZWVgIHdoZW4gYGNvcHlfc2lgIGlzIGZhbHNlLiBgaW9fd2FpdGlkX2ZpbmlzaGAgaXMgdGhlIG9uZSB0aGF0IGNhbGxzIGBpb193YWl0aWRfY29weV9zaWAsIHdoaWNoIHBlcmZvcm1zIHRoZSB1c2VyLXNwYWNlIHdyaXRlLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aHkgdGhleSdyZSBieXBhc3NpbmcgdGhlIHVzZXItc3BhY2Ugd3JpdGUuIFRoZSBjb2RlIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBjYW5jZWxsYXRpb24g4oCTIHNwZWNpZmljYWxseSwgd2hlbiBgdHcuY2FuY2VsYCBpcyB0cnVlIG9yIHdoZW4gYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBpcyBjYWxsZWQgd2l0aG91dCBhIHRhc2sgY29udGV4dCAoYHRjdHhgIGlzIE5VTEwpLiBUaGUgcmF0aW9uYWxlIGlzIGxpa2VseSB0aGF0IHdyaXRpbmcgdG8gdXNlciBzcGFjZSByZXF1aXJlcyBhIHZhbGlkIHByb2Nlc3MgY29udGV4dC4gSWYgdGhlIHRhc2sgaXMgYmVpbmcgY2FuY2VsZWQgb3IgdGhlIG9wZXJhdGlvbiBpcyBvY2N1cnJpbmcgb3V0c2lkZSB0aGUgZXhwZWN0ZWQgY29udGV4dCAobGlrZSBhIHJpbmcgZXhpdCBvciBjYW5jZWxsYXRpb24gZnJvbSBhbm90aGVyIHRhc2spLCB3cml0aW5nIHRvIHVzZXIgc3BhY2UgY291bGQgZWl0aGVyIHdyaXRlIHRvIHRoZSB3cm9uZyBwcm9jZXNzJ3MgbWVtb3J5IChtZW1vcnkgY29ycnVwdGlvbi9vdXQtb2YtYm91bmRzIGFjY2Vzcykgb3IgbGVhZCB0byBhIGZhdWx0LlxuXG5NeSBpbW1lZGlhdGUgY2hlY2sgaXMgd2hldGhlciB0aGlzIHBhdGNoICpleHBvc2VzKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgcXVpY2tseSBydWxlIG91dCBgaXctXHUwMDNlaW5mb2AgYmVjYXVzZSBgaW9fd2FpdGlkX3ByZXBgIGV4cGxpY2l0bHkgemVyb2VzIGl0IG91dC4gSSBkb3VibGUtY2hlY2tlZCB0aGlzLCBhbmQgYG1lbXNldChcdTAwMjZpdy1cdTAwM2VpbmZvLCAwLCBzaXplb2YoaXctXHUwMDNlaW5mbykpO2AgaXMgaW4gcGxhY2UuIE5vIHByb2JsZW0gdGhlcmUuIEkgYWxzbyBjaGVjayBgc2lnbm9gLCB3aGljaCBpcyBpbml0aWFsaXplZCB0byAwIGluIGBpb193YWl0aWRfZmluaXNoYCwgb3IgYFNJR0NITERgLiBBbmQgdGhlIGBpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9zaWdub2AgZmllbGQgd2hpY2ggaXMgdXNlciBzcGFjZSBtZW1vcnkgYW5kIHRoZXJlZm9yZSBub3QgYSBjb25jZXJuLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0IGF2b2lkaW5nIGBpb193YWl0aWRfZmluaXNoYCAod2hpY2ggaW5jbHVkZXMgYGlvX3dhaXRpZF9jb3B5X3NpYCkgd2hlbiBgY29weV9zaWAgaXMgZmFsc2UuIEFuZCBgY29weV9zaWAgaXMgZmFsc2UgaW4gdGhlIGBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYmAgY2FzZSwgYW5kIHRoZSBgaW9fd2FpdGlkX2NiYCBpZiBgdHcuY2FuY2VsYCBpcyB0cnVlLiBgdHcuY2FuY2VsYCBtZWFucyB0YXNrIHdvcmsgY2FuY2VsbGF0aW9uLCBsaWtlIHdoZW4gdGhlIHRhc2sgZXhpdHMgb3IgdGhlIHJpbmcgaXMgdG9ybiBkb3duLiBUaGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IHdyaXRpbmcgdG8gdXNlciBzcGFjZSBpZiBpdCdzIGludmFsaWQgb3IgdW5zYWZlLlxuXG5UaGlzIGlzIGEgYnVnIGZpeCwgaXQncyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IGEgc2NlbmFyaW8gd2hlcmUgYGlvX3dhaXRpZGAgdHJpZXMgdG8gY29weSBgc2lnaW5mb2AgZHVyaW5nIGNhbmNlbGxhdGlvbiB3aGVuIHRoZSB1c2VyIG1lbW9yeSBtaWdodCBub3QgYmUgdmFsaWQsIHdoaWNoIGNvdWxkIGNhdXNlIGEgcGFnZSBmYXVsdCBvciBhIHdyaXRlIHRvIHRoZSB3cm9uZyBhZGRyZXNzIHNwYWNlLlxuXG5JIG5vdyBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY29tZXMgdmlzaWJsZSBpbiB0aGUgYGl3LVx1MDAzZWluZm9gIHN0cnVjdC4gYGlvX3dhaXRpZF9wcmVwYCB0YWtlcyBjYXJlIG9mIHRoZSBpbml0aWFsaXphdGlvbi4gQnV0IGNvdWxkIGBrZXJuZWxfd2FpdGlkX3ByZXBhcmVgIG9yIGBfX2RvX3dhaXRgIG1vZGlmeSBgaXctXHUwMDNlaW5mb2Agc3VjaCB0aGF0IHRoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgcGFkZGluZz8gTm8uIGBpdy1cdTAwM2VpbmZvYCBpczpcblxuYGBgY1xuc3RydWN0IHdhaXRpZF9pbmZvIHtcblx0cGlkX3QgcGlkO1xuXHR1aWRfdCB1aWQ7XG5cdGludCBzdGF0dXM7XG5cdGludCBjYXVzZTtcbn07XG5gYGBcblxuYHBpZF90YCBpcyBgaW50YCwgYHVpZF90YCBpcyBgdW5zaWduZWQgaW50YCwgYHN0YXR1c2AgYW5kIGBjYXVzZWAgYXJlIGBpbnRgcy4gVGhpcyBpcyBhIHRvdGFsIHNpemUgb2YgMTYgYnl0ZXMuIE5vIHBhZGRpbmcgaXMgcHJlc2VudC4gQW5kIGV2ZW4gaWYgdGhlcmUgd2VyZSwgdGhlIGNvZGUgd3JpdGVzIHRvIGluZGl2aWR1YWwgZmllbGRzIGFuZCBub3QgdGhlIHN0cnVjdCBhcyBhIHdob2xlLCBzbyB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIHBhZGRpbmcgYmVpbmcgbGVha2VkIGlzIGVmZmVjdGl2ZWx5IHplcm8uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBmaXggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBmaXhlcyBhIGJ1ZyB3aGVyZSB1c2VyLXNwYWNlIG1lbW9yeSBhY2Nlc3Mgb2NjdXJzIGR1cmluZyBjYW5jZWxsYXRpb24sIGFuZCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGlzIGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgYnVnIHdvdWxkIGxpa2VseSBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIG9mIHVzZXItc3BhY2UgbWVtb3J5LCBvciBhIHdyaXRlIHRvIGFuIGluY29ycmVjdCBtbSBhbmQgS01TQU4gd291bGQgbm90IGNhdGNoIHRoaXMuXG5cbkkgcmV2aWV3IHRoZSBgaW9fd2FpdGlkX2NiYCBjaGFuZ2U6XG5cbmBgYGNcbkBAIC0yMDIsNiArMjE2LDExIEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdGludCByZXQ7XG4gXG4gXHRpb190d19sb2NrKGN0eCwgdHcpO1xuK1x0aWYgKHVubGlrZWx5KHR3LmNhbmNlbCkpIHtcbitcdFx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgZmFsc2UpO1xuK1x0XHRpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuYGBgXG5cblRoaXMgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZ1xuXG4iLCJJbnB1dFRva2VucyI6OTczOSwiT3V0cHV0VG9rZW5zIjoyMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTg6NDkuNDQ0MTc4MjI2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGFuZCBjb21wbGV0aW9uIHBhdGhzIG9mIHRoZSBpb191cmluZyB3YWl0aWQgY29tbWFuZCB0byBjb25kaXRpb25hbGx5IHNraXAgY29weWluZyBgc2lnaW5mb2AgZGF0YSB0byB1c2VyIHNwYWNlIChgaW9fd2FpdGlkX2NvcHlfc2lgKSB3aGVuIHRoZSByZXF1ZXN0IGlzIGJlaW5nIGNhbmNlbGVkIG9yIHdoZW4gdGhlcmUgaXMgbm8gdmFsaWQgdGFzayBjb250ZXh0LiBUaGUgZGF0YSBiZWluZyBjb3BpZWQgKGBpdy1cXHUwMDNlaW5mb2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIHRvIHplcm8gaW4gYGlvX3dhaXRpZF9wcmVwYCB2aWEgYG1lbXNldChcXHUwMDI2aXctXFx1MDAzZWluZm8sIDAsIHNpemVvZihpdy1cXHUwMDNlaW5mbykpO2AsIGFuZCB0aGUgY29weSBvcGVyYXRpb24gdXNlcyBgdW5zYWZlX3B1dF91c2VyYCB0byB3cml0ZSBpbmRpdmlkdWFsIGZpZWxkcyByYXRoZXIgdGhhbiBjb3B5aW5nIGEgc3RydWN0IHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBsaWtlbHkgcmVsYXRlZCB0byBpbnZhbGlkIHVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyAoZS5nLiwgd3JpdGluZyB0byBhIHdyb25nIG9yIGRlc3Ryb3llZCBhZGRyZXNzIHNwYWNlIGR1cmluZyB0YXNrIGV4aXQvcmluZyB0ZWFyZG93biksIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBvciBtZW1vcnkgc2FmZXR5IGlzc3VlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNvbXBsZXRpb24gcGF0aHMgb2YgdGhlIGlvX3VyaW5nIHdhaXRpZCBjb21tYW5kIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBjb3B5aW5nIGBzaWdpbmZvYCBkYXRhIHRvIHVzZXIgc3BhY2UgKGBpb193YWl0aWRfY29weV9zaWApIHdoZW4gdGhlIHJlcXVlc3QgaXMgYmVpbmcgY2FuY2VsZWQgb3Igd2hlbiB0aGVyZSBpcyBubyB2YWxpZCB0YXNrIGNvbnRleHQuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCAoYGl3LVxcdTAwM2VpbmZvYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVybyBpbiBgaW9fd2FpdGlkX3ByZXBgIHZpYSBgbWVtc2V0KFxcdTAwMjZpdy1cXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVxcdTAwM2VpbmZvKSk7YCwgYW5kIHRoZSBjb3B5IG9wZXJhdGlvbiB1c2VzIGB1bnNhZmVfcHV0X3VzZXJgIHRvIHdyaXRlIGluZGl2aWR1YWwgZmllbGRzIHJhdGhlciB0aGFuIGNvcHlpbmcgYSBzdHJ1Y3Qgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIGxpa2VseSByZWxhdGVkIHRvIGludmFsaWQgdXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIChlLmcuLCB3cml0aW5nIHRvIGEgd3Jvbmcgb3IgZGVzdHJveWVkIGFkZHJlc3Mgc3BhY2UgZHVyaW5nIHRhc2sgZXhpdC9yaW5nIHRlYXJkb3duKSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIG9yIG1lbW9yeSBzYWZldHkgaXNzdWUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 12:04:45 +0000 UTC FinishedAt: 2026-08-18 12:58:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "326d49039c10b65522ac7277b19b9b5c42ed1aeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "326d49039c10b65522ac7277b19b9b5c42ed1aeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "1bcd5abe-c2e0-47b9-b7fc-188586f25b3c" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_waitid", "io_waitid_cancel", "io_waitid_remove_all" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDssCiAgICAmIzM0O2lvX3dhaXRpZF9jYW5jZWwmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkX3JlbW92ZV9hbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGFuZCBjb21wbGV0aW9uIHBhdGhzIG9mIHRoZSBpb191cmluZyB3YWl0aWQgY29tbWFuZCB0byBjb25kaXRpb25hbGx5IHNraXAgY29weWluZyBgc2lnaW5mb2AgZGF0YSB0byB1c2VyIHNwYWNlIChgaW9fd2FpdGlkX2NvcHlfc2lgKSB3aGVuIHRoZSByZXF1ZXN0IGlzIGJlaW5nIGNhbmNlbGVkIG9yIHdoZW4gdGhlcmUgaXMgbm8gdmFsaWQgdGFzayBjb250ZXh0LiBUaGUgZGF0YSBiZWluZyBjb3BpZWQgKGBpdy1cdTAwM2VpbmZvYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVybyBpbiBgaW9fd2FpdGlkX3ByZXBgIHZpYSBgbWVtc2V0KFx1MDAyNml3LVx1MDAzZWluZm8sIDAsIHNpemVvZihpdy1cdTAwM2VpbmZvKSk7YCwgYW5kIHRoZSBjb3B5IG9wZXJhdGlvbiB1c2VzIGB1bnNhZmVfcHV0X3VzZXJgIHRvIHdyaXRlIGluZGl2aWR1YWwgZmllbGRzIHJhdGhlciB0aGFuIGNvcHlpbmcgYSBzdHJ1Y3Qgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIGxpa2VseSByZWxhdGVkIHRvIGludmFsaWQgdXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIChlLmcuLCB3cml0aW5nIHRvIGEgd3Jvbmcgb3IgZGVzdHJveWVkIGFkZHJlc3Mgc3BhY2UgZHVyaW5nIHRhc2sgZXhpdC9yaW5nIHRlYXJkb3duKSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIG9yIG1lbW9yeSBzYWZldHkgaXNzdWUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgZm9yIHRoZSBJT1JJTkdfT1BfV0FJVElEIG9wZXJhdGlvbiBpbiBpb191cmluZywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHdoZXRoZXIgc2lnaW5mbyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBkdXJpbmcgY2FuY2VsbGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzZGUxZGE4Yjk5NjlhMGU2M2E1ZTJlNTlmMGRjOTQyNmJkNjc0MDVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMjo1NjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi4xMjExZjkwNWE5ZGIyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMTI1LDcgJiM0MzsxMjUsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfcmVtb3ZlX3dxKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpXG4mIzQzO3N0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCwgYm9vbCBjb3B5X3NpKVxuIHtcbiBcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XG4gXG5AQCAtMTM3LDEzICYjNDM7MTM3LDE2IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbiBcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUpO1xuIFx0aW9fd2FpdGlkX3JlbW92ZV93cShyZXEpO1xuIFxuLVx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4mIzQzO1x0aWYgKGNvcHlfc2kpXG4mIzQzO1x0XHRyZXQgPSBpb193YWl0aWRfZmluaXNoKHJlcSwgcmV0KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRpb193YWl0aWRfZnJlZShyZXEpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmVxX3NldF9mYWlsKHJlcSk7XG4gXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XG4gfVxuIFxuLXN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbiYjNDM7c3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCBib29sIGNvcHlfc2kpXG4ge1xuIFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcbiBcbkBAIC0xNTksMjEgJiM0MzsxNjIsMzIgQEAgc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIFx0aWYgKGF0b21pY19mZXRjaF9pbmMoXHUwMDI2aXctXHUwMDNlcmVmcykgXHUwMDI2IElPX1dBSVRJRF9SRUZfTUFTSylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7XG4mIzQzO1x0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgY29weV9zaSk7XG4gXHRpb19yZXFfcXVldWVfdHdfY29tcGxldGUocmVxLCAtRUNBTkNFTEVEKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NhbmNlbF9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX2lvX3dhaXRpZF9jYW5jZWwocmVxLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NhbmNlbF9ub2NvcHlfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiB7XG4tXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZShjdHgsIGNkLCBpc3N1ZV9mbGFncywgXHUwMDI2Y3R4LVx1MDAzZXdhaXRpZF9saXN0LCBfX2lvX3dhaXRpZF9jYW5jZWwpO1xuJiM0MztcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xuIH1cbiBcbiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbiBcdFx0XHQgIGJvb2wgY2FuY2VsX2FsbClcbiB7XG4tXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsIF9faW9fd2FpdGlkX2NhbmNlbCk7XG4mIzQzO1x0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgXHUwMDI2Y3R4LVx1MDAzZXdhaXRpZF9saXN0LCBjYW5jZWxfYWxsLFxuJiM0MztcdFx0XHRcdCAgICAgICB0Y3R4ID8gaW9fd2FpdGlkX2NhbmNlbF9jYiA6IGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGlvX3dhaXRpZF9kcm9wX2lzc3VlX3JlZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbkBAIC0yMDIsNiAmIzQzOzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRpbnQgcmV0O1xuIFxuIFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcbiYjNDM7XHRpZiAodW5saWtlbHkodHcuY2FuY2VsKSkge1xuJiM0MztcdFx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgZmFsc2UpO1xuJiM0MztcdFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gX19kb193YWl0KFx1MDAyNml3YS1cdTAwM2V3byk7XG4gXG5AQCAtMjI5LDcgJiM0MzsyNDgsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIHJldCk7XG4mIzQzO1x0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgcmV0LCB0cnVlKTtcbiBcdGlvX3JlcV90YXNrX2NvbXBsZXRlKHR3X3JlcSwgdHcpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb193YWl0aWQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtpb193YWl0aWRfcmVtb3ZlX2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIGZvciB0aGUgSU9SSU5HX09QX1dBSVRJRCBvcGVyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGV0aGVyIHNpZ2luZm8gaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhM2RlMWRhOGI5OTY5YTBlNjNhNWUyZTU5ZjBkYzk0MjZiZDY3NDA1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTI6NTY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jCmluZGV4IDMyZjY4ZmQ3ZmNkZGEuLjEyMTFmOTA1YTlkYjIgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3dhaXRpZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3dhaXRpZC5jCkBAIC0xMjUsNyAmIzQzOzEyNSw3IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9yZW1vdmVfd3Eoc3RydWN0IGlvX2tpb2NiICpyZXEpCiAJfQogfQogCi1zdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpCiYjNDM7c3RhdGljIHZvaWQgaW9fd2FpdGlkX2NvbXBsZXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0LCBib29sIGNvcHlfc2kpCiB7CiAJc3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTsKIApAQCAtMTM3LDEzICYjNDM7MTM3LDE2IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCkKIAlobGlzdF9kZWxfaW5pdCgmYW1wO3JlcS0mZ3Q7aGFzaF9ub2RlKTsKIAlpb193YWl0aWRfcmVtb3ZlX3dxKHJlcSk7CiAKLQlyZXQgPSBpb193YWl0aWRfZmluaXNoKHJlcSwgcmV0KTsKJiM0MzsJaWYgKGNvcHlfc2kpCiYjNDM7CQlyZXQgPSBpb193YWl0aWRfZmluaXNoKHJlcSwgcmV0KTsKJiM0MzsJZWxzZQomIzQzOwkJaW9fd2FpdGlkX2ZyZWUocmVxKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmVxX3NldF9mYWlsKHJlcSk7CiAJaW9fcmVxX3NldF9yZXMocmVxLCByZXQsIDApOwogfQogCi1zdGF0aWMgYm9vbCBfX2lvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX2tpb2NiICpyZXEpCiYjNDM7c3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCBib29sIGNvcHlfc2kpCiB7CiAJc3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTsKIApAQCAtMTU5LDIxICYjNDM7MTYyLDMyIEBAIHN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKIAlpZiAoYXRvbWljX2ZldGNoX2luYygmYW1wO2l3LSZndDtyZWZzKSAmYW1wOyBJT19XQUlUSURfUkVGX01BU0spCiAJCXJldHVybiBmYWxzZTsKIAotCWlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQpOwomIzQzOwlpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBjb3B5X3NpKTsKIAlpb19yZXFfcXVldWVfdHdfY29tcGxldGUocmVxLCAtRUNBTkNFTEVEKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiKHN0cnVjdCBpb19raW9jYiAqcmVxKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBpbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCwKIAkJICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpCiB7Ci0JcmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsICZhbXA7Y3R4LSZndDt3YWl0aWRfbGlzdCwgX19pb193YWl0aWRfY2FuY2VsKTsKJiM0MzsJcmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsICZhbXA7Y3R4LSZndDt3YWl0aWRfbGlzdCwgaW9fd2FpdGlkX2NhbmNlbF9jYik7CiB9CiAKIGJvb2wgaW9fd2FpdGlkX3JlbW92ZV9hbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LAogCQkJICBib29sIGNhbmNlbF9hbGwpCiB7Ci0JcmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgJmFtcDtjdHgtJmd0O3dhaXRpZF9saXN0LCBjYW5jZWxfYWxsLCBfX2lvX3dhaXRpZF9jYW5jZWwpOwomIzQzOwlyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCAmYW1wO2N0eC0mZ3Q7d2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsCiYjNDM7CQkJCSAgICAgICB0Y3R4ID8gaW9fd2FpdGlkX2NhbmNlbF9jYiA6IGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlvX3dhaXRpZF9kcm9wX2lzc3VlX3JlZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKQEAgLTIwMiw2ICYjNDM7MjE2LDExIEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dykKIAlpbnQgcmV0OwogCiAJaW9fdHdfbG9jayhjdHgsIHR3KTsKJiM0MzsJaWYgKHVubGlrZWx5KHR3LmNhbmNlbCkpIHsKJiM0MzsJCWlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQsIGZhbHNlKTsKJiM0MzsJCWlvX3JlcV90YXNrX2NvbXBsZXRlKHR3X3JlcSwgdHcpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKIAlyZXQgPSBfX2RvX3dhaXQoJmFtcDtpd2EtJmd0O3dvKTsKIApAQCAtMjI5LDcgJiM0MzsyNDgsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJCX0KIAl9CiAKLQlpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQpOwomIzQzOwlpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQsIHRydWUpOwogCWlvX3JlcV90YXNrX2NvbXBsZXRlKHR3X3JlcSwgdHcpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBpb191cmluZyBXYWl0aWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy93YWl0aWQuY2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZm9jdXNlZCBtb2RpZmljYXRpb24sIHdpdGggc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIGhvdyBgd2FpdGlkYCBjb21wbGV0aW9uIGFuZCBjYW5jZWxsYXRpb24gYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGBib29sIGNvcHlfc2lgIGFyZ3VtZW50IHRvIGJvdGggYGlvX3dhaXRpZF9jb21wbGV0ZWAgYW5kIGBfX2lvX3dhaXRpZF9jYW5jZWxgLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIHRoZXNlIGBpb193YWl0aWRfY2FuY2VsX2NiYCBhbmQgYGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiYCBjYWxsYmFja3MuIFRoZSBleGlzdGluZyBgaW9fd2FpdGlkX2NhbmNlbGAsIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgZnVuY3Rpb25zIGhhdmUgYWxzbyBiZWVuIGFsdGVyZWQuIEFuZCBmaW5hbGx5LCBgaW9fd2FpdGlkX2NiYCBpcyBtb2RpZmllZCB0byBtYW5hZ2UgY2FuY2VsbGF0aW9ucyBzaWduYWxlZCB0aHJvdWdoIGB0dy5jYW5jZWxgIGFuZCwgY3J1Y2lhbGx5LCB0byBjYWxsIGBpb193YWl0aWRfY29tcGxldGVgIHdpdGggYC1FQ0FOQ0VMRURgIGFuZCBgZmFsc2VgIGZvciBgY29weV9zaWAgaW4gdGhvc2UgY2FzZXMuCgpGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBjaGFuZ2UgaW4gdGhlIGlvX3VyaW5nIHdhaXRpZCBpbXBsZW1lbnRhdGlvbi4gU2luY2UgaXQgZGVhbHMgd2l0aCBjb21wbGV0aW9uIGFuZCBjYW5jZWxsYXRpb24sIEkmIzM5O2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBmdXp6LiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgdGhlcmUgYXJlIG5vIG5ldyBlZGdlIGNhc2VzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggaW9fdXJpbmcuIEkgYmVsaWV2ZSB0aGUgcHJpbWFyeSBvbmUgaXMgYENPTkZJR19JT19VUklOR2AsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byB2ZXJpZnkuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgZnVuY3Rpb25zIHN1Y2ggYXMgYGlvX3dhaXRpZF9jYW5jZWxgLCBgaW9fd2FpdGlkX3JlbW92ZV9hbGxgLCBgaW9fd2FpdGlkX2NiYCwgYGlvX3dhaXRpZF9jb21wbGV0ZWAsIGFuZCBgX19pb193YWl0aWRfY2FuY2VsYCBpbiBgaW9fdXJpbmcvd2FpdGlkLmNgLCBhcyB0aGVzZSBhcmUgdGhlIG9uZXMgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQuCgpGaW5hbGx5LCBJJiMzOTtsbCBwZXJmb3JtIGEgc2VhcmNoIHdpdGhpbiBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBvdGhlciBmaWxlcyBmb3IgaW5zdGFuY2VzIG9mIGBpb193YWl0aWRfY2FuY2VsYCBhbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlaXIgdXNhZ2UgYW5kIGhvdyB0aGUgcGF0Y2ggaW1wYWN0cyB0aGUgd2lkZXIgY29kZSBiYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3dhaXRpZF9jYW5jZWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvY2FuY2VsLmM9MTA1PWludCBpb190cnlfY2FuY2VsKHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuLS1cbmlvX3VyaW5nL2NhbmNlbC5jLTEyNC1cbmlvX3VyaW5nL2NhbmNlbC5jOjEyNTpcdHJldCA9IGlvX3dhaXRpZF9jYW5jZWwoY3R4LCBjZCwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvY2FuY2VsLmMtMTI2LVx0aWYgKHJldCAhPSAtRU5PRU5UKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jPTEyOD1zdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQsIGJvb2wgY29weV9zaSlcbi0tXG5pb191cmluZy93YWl0aWQuYy0xNDgtXG5pb191cmluZy93YWl0aWQuYzoxNDk6c3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCBib29sIGNvcHlfc2kpXG5pb191cmluZy93YWl0aWQuYy0xNTAte1xuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTE2OS1cbmlvX3VyaW5nL3dhaXRpZC5jOjE3MDpzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX2NiKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuaW9fdXJpbmcvd2FpdGlkLmMtMTcxLXtcbmlvX3VyaW5nL3dhaXRpZC5jOjE3MjpcdHJldHVybiBfX2lvX3dhaXRpZF9jYW5jZWwocmVxLCB0cnVlKTtcbmlvX3VyaW5nL3dhaXRpZC5jLTE3My19XG5pb191cmluZy93YWl0aWQuYy0xNzQtXG5pb191cmluZy93YWl0aWQuYzoxNzU6c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NhbmNlbF9ub2NvcHlfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXG5pb191cmluZy93YWl0aWQuYy0xNzYte1xuaW9fdXJpbmcvd2FpdGlkLmM6MTc3Olx0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIGZhbHNlKTtcbmlvX3VyaW5nL3dhaXRpZC5jLTE3OC19XG5pb191cmluZy93YWl0aWQuYy0xNzktXG5pb191cmluZy93YWl0aWQuYzoxODA6aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy93YWl0aWQuYy0xODEtXHRcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuaW9fdXJpbmcvd2FpdGlkLmMtMTgyLXtcbmlvX3VyaW5nL3dhaXRpZC5jOjE4MzpcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xuaW9fdXJpbmcvd2FpdGlkLmMtMTg0LX1cbi0tXG5pb191cmluZy93YWl0aWQuYz0xODY9Ym9vbCBpb193YWl0aWRfcmVtb3ZlX2FsbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsXG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtMTg5LVx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgXHUwMDI2Y3R4LVx1MDAzZXdhaXRpZF9saXN0LCBjYW5jZWxfYWxsLFxuaW9fdXJpbmcvd2FpdGlkLmM6MTkwOlx0XHRcdFx0ICAgICAgIHRjdHggPyBpb193YWl0aWRfY2FuY2VsX2NiIDogaW9fd2FpdGlkX2NhbmNlbF9ub2NvcHlfY2IpO1xuaW9fdXJpbmcvd2FpdGlkLmMtMTkxLX1cbi0tXG5pb191cmluZy93YWl0aWQuaD0xMT1pbnQgaW9fd2FpdGlkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvd2FpdGlkLmg6MTI6aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXG5pb191cmluZy93YWl0aWQuaC0xMy1cdFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIHdhaXRpZCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZGlnZ2luZyBpbnRvIHRoZSBgaW9fd2FpdGlkYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgaW9fd2FpdGlkX2NhbmNlbGAsIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAsIGFuZCBgaW9fd2FpdGlkX2NiYC4gVGhvc2UgYXJlIGNydWNpYWwgZnVuY3Rpb25zLCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNsZWFudXAgb2Ygd2FpdCBvcGVyYXRpb25zIGluaXRpYXRlZCB0aHJvdWdoIGBpb193YWl0aWRgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgd2lsbCBiZSBhaW1lZCBhdCBpbXByb3ZpbmcgdGhlIGhhbmRsaW5nIG9mIHdhaXRpbmcgZm9yIGkvbyBjb21wbGV0aW9ucywgcG9zc2libHkgYWRkaW5nIG1vcmUgcm9idXN0IGNhbmNlbGxhdGlvbiBtZWNoYW5pc21zLCBvciBtYXliZSBkZWFsaW5nIHdpdGggc29tZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBjYWxsYmFja3MgYW5kIGNvbXBsZXRpb24gZXZlbnRzIGFyZSBoYW5kbGVkLgoKYGlvX3dhaXRpZGAgaXRzZWxmIGlzLCBvZiBjb3Vyc2UsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgYHdhaXRpZGAgZnVuY3Rpb25hbGl0eSB3aXRoaW4gaW9fdXJpbmc7IHRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBvcmlnaW5hdGVzLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIGhvdyB0aGVzZSBtb2RpZmljYXRpb25zIGltcGFjdCB0aGUgb3ZlcmFsbCBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIGRldmlsIGlzIGhpZGluZywgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgbG9ja2luZyBpc3N1ZXMsIHNpZ25hbCBoYW5kbGluZyBvciBhbnl0aGluZyB0byBkbyB3aXRoIGhvdyB0aGUgdXNlciBwcm9ncmFtIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpb193YWl0aWRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvd2FpdGlkLmM9Mjc5PWludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTMwMC1cbmlvX3VyaW5nL3dhaXRpZC5jOjMwMTppbnQgaW9fd2FpdGlkKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG5pb191cmluZy93YWl0aWQuYy0zMDIte1xuLS1cbmlvX3VyaW5nL3dhaXRpZC5oPTEwPWludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKTtcbmlvX3VyaW5nL3dhaXRpZC5oOjExOmludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy93YWl0aWQuaC0xMi1pbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBzeW1ib2xzOgoKKipGb2N1c2luZyBJbiBvbiBJTyBXYWl0IE1hbmFnZW1lbnQqKgoKUmlnaHQsIGBpb193YWl0aWRgIGFuZCBgaW9fd2FpdGlkX2NhbmNlbGAg4oCTIHRob3NlIHR3byBhcmUgZGVmaW5pdGVseSBrZXkuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgdGhlIGNvcmUgcHJpbWl0aXZlcyBmb3IsIHdlbGwsIHdhaXRpbmcgZm9yIEkvTyBjb21wbGV0aW9uIGluIGEgbW9yZSBncmFudWxhciB3YXksIGxpa2VseSB0byBhdm9pZCBibG9ja2luZyB0aGUgd2hvbGUgcHJvY2Vzcy4gQW5kIG9mIGNvdXJzZSwgdGhlIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgZnVuY3Rpb24uLi4gdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBiZXQgaXQgaXMgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBjbGVhbi11cCBvZiBwZW5kaW5nIHdhaXRzLiBHb3R0YSBzZWUgaG93IHRoaXMgb25lIGdldHMgdXNlZCBpbiBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb193YWl0aWRfcmVtb3ZlX2FsbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9jYW5jZWwuYz01MTU9X19jb2xkIGJvb2wgaW9fdXJpbmdfdHJ5X2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9jYW5jZWwuYy01NjAtXHRyZXQgfD0gaW9fcG9sbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgY2FuY2VsX2FsbCk7XG5pb191cmluZy9jYW5jZWwuYzo1NjE6XHRyZXQgfD0gaW9fd2FpdGlkX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBjYW5jZWxfYWxsKTtcbmlvX3VyaW5nL2NhbmNlbC5jLTU2Mi1cdHJldCB8PSBpb19mdXRleF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgY2FuY2VsX2FsbCk7XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmM9MTgwPWludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTE4NS1cbmlvX3VyaW5nL3dhaXRpZC5jOjE4Njpib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbmlvX3VyaW5nL3dhaXRpZC5jLTE4Ny1cdFx0XHQgIGJvb2wgY2FuY2VsX2FsbClcbi0tXG5pb191cmluZy93YWl0aWQuaD0xMj1pbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbmlvX3VyaW5nL3dhaXRpZC5oLTEzLVx0XHQgICAgIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy93YWl0aWQuaDoxNDpib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbmlvX3VyaW5nL3dhaXRpZC5oLTE1LVx0XHRcdCAgYm9vbCBjYW5jZWxfYWxsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODEwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGlvX3VyaW5nIENhbmNlbGxhdGlvbiBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIHdpdGhpbiBgaW9fdXJpbmdgLiBJdCBsb29rcyBsaWtlIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgaXMgdGhlIGNsZWFudXAgZnVuY3Rpb24gdHJpZ2dlcmVkIHdoZW4gd2UgdHJ5IHRvIGNhbmNlbCByZXF1ZXN0cyBmcm9tIGBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzYC4gRnVydGhlciBkb3duIHRoZSBjaGFpbiwgYGlvX3dhaXRpZF9jYW5jZWxgIGdldHMgY2FsbGVkIGZyb20gYGlvX3RyeV9jYW5jZWxgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGUgY2FuY2VsbGF0aW9uIGl0c2VsZi4gQW5kIEkgc2VlIHRoYXQgdGhlIGBpb193YWl0aWRgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgd2hlbiBleGVjdXRpbmcgdGhlIGlvX3VyaW5nIG9wY29kZXMuCgpOb3csIGJlZm9yZSBJIGdvIGRlZXBlciBpbnRvIHRoaXMsIGxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gQmVzaWRlcyB0aGUgb2J2aW91cyBvbmUsIGBDT05GSUdfSU9fVVJJTkdgLCBhcmUgdGhlcmUgYW55IG90aGVyIHNldHRpbmdzIG9yIGZsYWdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMgY2FuY2VsbGF0aW9uIGJlaGF2aW9yPyBJdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gY292ZXIgYWxsIGJhc2VzIHdoZW4gZGlzc2VjdGluZyBhIGNyaXRpY2FsIHBhdGggbGlrZSB0aGlzIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPX1VSSU5HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xOTEwPWNvbmZpZyBBSU9cbi0tXG5pbml0L0tjb25maWctMTkxNy1cbmluaXQvS2NvbmZpZzoxOTE4OmNvbmZpZyBJT19VUklOR1xuaW5pdC9LY29uZmlnLTE5MTktXHRib29sIFwmIzM0O0VuYWJsZSBJTyB1cmluZyBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuLS1cbmluaXQvS2NvbmZpZz0xOTI3PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbi0tXG5pbml0L0tjb25maWctMTkzOS1cbmluaXQvS2NvbmZpZzoxOTQwOmNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcbmluaXQvS2NvbmZpZy0xOTQxLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGlvX3VyaW5nIG1vY2sgZmlsZXMgKEV4cGVyaW1lbnRhbClcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW9fdXJpbmcvS2NvbmZpZy01LVxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXG5pb191cmluZy9LY29uZmlnLTctXHRkZWZfYm9vbCB5XG4tLVxuaW9fdXJpbmcvS2NvbmZpZy0xMi1cbmlvX3VyaW5nL0tjb25maWc6MTM6Y29uZmlnIElPX1VSSU5HX0JQRlxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTE3LVxuaW9fdXJpbmcvS2NvbmZpZzoxODpjb25maWcgSU9fVVJJTkdfQlBGX09QU1xuaW9fdXJpbmcvS2NvbmZpZy0xOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxNwoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiAyMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGggYElPX1VSSU5HYCBhbmQga2VybmVsIGludGVybmFscy4KCioqQW5hbHl6aW5nIHRoZSBgSU9fVVJJTkdgIFdhaXRJRCBCdWcgRml4KioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggY2VudGVycyBvbiBgSU9fVVJJTkdgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgZGVzY3JpcHRpb24gaW5kaWNhdGVzIGEgYnVnZml4IHdpdGhpbiB0aGUgYGlvX3dhaXRpZF9jb21wbGV0ZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHNpZ25hbCBpbmZvcm1hdGlvbiAoYHNpZ2luZm9gKSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB1bm5lY2Vzc2FyaWx5IG9yIGF0IGFuIHVuc2FmZSB0aW1lLCBsaWtlbHkgZHVyaW5nIGFuIG9wZXJhdGlvbiBjYW5jZWxsYXRpb24uIFRoaXMgaXMgYSBjb21tb24gY2xhc3Mgb2YgcHJvYmxlbSwgYW5kIEkgYXBwcmVjaWF0ZSB0aGUgZGV0YWlsIGdpdmVuLiBUaGUgcGF0Y2ggaXMgZnVuY3Rpb25hbGx5IGZvY3VzZWQgb24gdGhlIGNvcmUgYGlvX3VyaW5nYCB3YWl0aWQgbG9naWMuIFRoaXMgaXMgZ29vZCBhcyBpdCBrZWVwcyB0aGUgY2hhbmdlIGNvbmNpc2UgYW5kIHRhcmdldGVkLiBUaGUgJiMzNDtXb3J0aEZ1enppbmc6IHRydWUmIzM0OyBmbGFnIGlzIGEgd2VsY29tZSBpbmRpY2F0b3IuIEl0IGRlbW9uc3RyYXRlcyB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgaXMgYSBhcmVhIHRoYXQgY291bGQgaGF2ZSBzdWJ0bGUgYnVncy4KClRoZSBzdWdnZXN0ZWQgZm9jdXMgc3ltYm9scywgYGlvX3dhaXRpZGAsIGBpb193YWl0aWRfY2FuY2VsYCwgYW5kIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAsIHNlZW0gYXBwcm9wcmlhdGUgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZGVzY3JpYmVkIGJ1Zy4gSXQgaXMgaW1wb3J0YW50IHRvIGNvbmZpcm0gYGlvX3dhaXRpZGAgaXMsIGluIGZhY3QsIHRoZSBjb3JyZWN0IGVudHJ5IHBvaW50LCB3aGljaCBpdCBhcHBlYXJzIHRvIGJlLCBhcyBpdCBoYW5kbGVzIHRoZSBgSU9SSU5HX09QX1dBSVRJRGAgb3BlcmF0aW9uLiBUaGUgcmVtaW5kZXIgdG8gY29uZmlybSBgaW9fd2FpdGlkX2NhbmNlbGAgYW5kIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgYXJlIG5vdCBzdGF0aWMgaXMgcmVsZXZhbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGV4dGVybmFsIHBvaW50cyBvZiBjb250ZW50aW9uLiBMb29rcyBsaWtlIHRoZXkmIzM5O3JlIG5vdCwgd2hpY2ggaXMgZ29vZCB0byBrbm93IGZvciBicm9hZGVyIGltcGFjdCBhbmFseXNpcy4KCkJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHJlYXNvbmFibGUgdG8gcHJvY2VlZCB3aXRoIHVzaW5nIHRoZSBzZXQtcmVzdWx0cy4gSXQgbG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHNhZmV0eSBpc3N1ZSBhbmQgaXMgd2VsbC1kb2N1bWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb193YWl0aWQmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtpb193YWl0aWRfcmVtb3ZlX2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIGZvciB0aGUgSU9SSU5HX09QX1dBSVRJRCBvcGVyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGV0aGVyIHNpZ2luZm8gaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fd2FpdGlkJiMzNDssCiAgICAmIzM0O2lvX3dhaXRpZF9jYW5jZWwmIzM0OywKICAgICYjMzQ7aW9fd2FpdGlkX3JlbW92ZV9hbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbmNlbGxhdGlvbiBsb2dpYyBmb3IgdGhlIElPUklOR19PUF9XQUlUSUQgb3BlcmF0aW9uIGluIGlvX3VyaW5nLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgd2hldGhlciBzaWdpbmZvIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIGR1cmluZyBjYW5jZWxsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNvbXBsZXRpb24gcGF0aHMgb2YgdGhlIGlvX3VyaW5nIHdhaXRpZCBjb21tYW5kIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBjb3B5aW5nIGBzaWdpbmZvYCBkYXRhIHRvIHVzZXIgc3BhY2UgKGBpb193YWl0aWRfY29weV9zaWApIHdoZW4gdGhlIHJlcXVlc3QgaXMgYmVpbmcgY2FuY2VsZWQgb3Igd2hlbiB0aGVyZSBpcyBubyB2YWxpZCB0YXNrIGNvbnRleHQuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCAoYGl3LVx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXHUwMDI2aXctXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTNkZTFkYThiOTk2OWEwZTYzYTVlMmU1OWYwZGM5NDI2YmQ2NzQwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEyOjU2OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvd2FpdGlkLmMgYi9pb191cmluZy93YWl0aWQuYwppbmRleCAzMmY2OGZkN2ZjZGRhLi4xMjExZjkwNWE5ZGIyIDEwMDY0NAotLS0gYS9pb191cmluZy93YWl0aWQuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy93YWl0aWQuYwpAQCAtMTI1LDcgJiM0MzsxMjUsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfcmVtb3ZlX3dxKHN0cnVjdCBpb19raW9jYiAqcmVxKQogCX0KIH0KIAotc3RhdGljIHZvaWQgaW9fd2FpdGlkX2NvbXBsZXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0KQomIzQzO3N0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCwgYm9vbCBjb3B5X3NpKQogewogCXN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7CiAKQEAgLTEzNywxMyAmIzQzOzEzNywxNiBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpCiAJaGxpc3RfZGVsX2luaXQoJmFtcDtyZXEtJmd0O2hhc2hfbm9kZSk7CiAJaW9fd2FpdGlkX3JlbW92ZV93cShyZXEpOwogCi0JcmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7CiYjNDM7CWlmIChjb3B5X3NpKQomIzQzOwkJcmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7CiYjNDM7CWVsc2UKJiM0MzsJCWlvX3dhaXRpZF9mcmVlKHJlcSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJlcV9zZXRfZmFpbChyZXEpOwogCWlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTsKIH0KIAotc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKQomIzQzO3N0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgYm9vbCBjb3B5X3NpKQogewogCXN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7CiAKQEAgLTE1OSwyMSAmIzQzOzE2MiwzMiBAQCBzdGF0aWMgYm9vbCBfX2lvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX2tpb2NiICpyZXEpCiAJaWYgKGF0b21pY19mZXRjaF9pbmMoJmFtcDtpdy0mZ3Q7cmVmcykgJmFtcDsgSU9fV0FJVElEX1JFRl9NQVNLKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVEKTsKJiM0MzsJaW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgY29weV9zaSk7CiAJaW9fcmVxX3F1ZXVlX3R3X2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX2NiKHN0cnVjdCBpb19raW9jYiAqcmVxKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX2lvX3dhaXRpZF9jYW5jZWwocmVxLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogaW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsCiAJCSAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKQogewotCXJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCAmYW1wO2N0eC0mZ3Q7d2FpdGlkX2xpc3QsIF9faW9fd2FpdGlkX2NhbmNlbCk7CiYjNDM7CXJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCAmYW1wO2N0eC0mZ3Q7d2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpOwogfQogCiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCwKIAkJCSAgYm9vbCBjYW5jZWxfYWxsKQogewotCXJldHVybiBpb19jYW5jZWxfcmVtb3ZlX2FsbChjdHgsIHRjdHgsICZhbXA7Y3R4LSZndDt3YWl0aWRfbGlzdCwgY2FuY2VsX2FsbCwgX19pb193YWl0aWRfY2FuY2VsKTsKJiM0MzsJcmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgJmFtcDtjdHgtJmd0O3dhaXRpZF9saXN0LCBjYW5jZWxfYWxsLAomIzQzOwkJCQkgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpb193YWl0aWRfZHJvcF9pc3N1ZV9yZWYoc3RydWN0IGlvX2tpb2NiICpyZXEpCkBAIC0yMDIsNiAmIzQzOzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJaW50IHJldDsKIAogCWlvX3R3X2xvY2soY3R4LCB0dyk7CiYjNDM7CWlmICh1bmxpa2VseSh0dy5jYW5jZWwpKSB7CiYjNDM7CQlpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBmYWxzZSk7CiYjNDM7CQlpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJcmV0ID0gX19kb193YWl0KCZhbXA7aXdhLSZndDt3byk7CiAKQEAgLTIyOSw3ICYjNDM7MjQ4LDcgQEAgc3RhdGljIHZvaWQgaW9fd2FpdGlkX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KQogCQl9CiAJfQogCi0JaW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgcmV0KTsKJiM0MzsJaW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgcmV0LCB0cnVlKTsKIAlpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGlvX3VyaW5nIHdhaXRpZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGlvX3VyaW5nL3dhaXRpZC5jYCBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGEgbmV3IGJvb2xlYW4gcGFyYW1ldGVyLCBgY29weV9zaWAsIGJlaW5nIGludHJvZHVjZWQgaW50byB0aGUgYGlvX3dhaXRpZF9jb21wbGV0ZWAgZnVuY3Rpb24uIFJpZ2h0LCBzbyBpZiBgY29weV9zaWAgaXMgdHJ1ZSwgdGhlbiBgaW9fd2FpdGlkX2ZpbmlzaGAgZ2V0cyBjYWxsZWQgd2l0aCB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIGNvZGUuIEFuZCBpZiBpdCYjMzk7cyBmYWxzZSwgdGhlbiBpdCYjMzk7cyBgaW9fd2FpdGlkX2ZyZWVgLCBnb3QgaXQuIFRoYXQgaW1tZWRpYXRlbHkgaW1wbGllcyBhIHNwbGl0IGluIGhvdyB0aGUgcmVxdWVzdCBpcyBoYW5kbGVkIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGBzaWdpbmZvYCBkYXRhIG5lZWRzIHRvIGJlIGNvcGllZCBvdXQuCgpOb3csIHdoZXJlIGVsc2UgZG8gd2Ugc2VlIHRoaXMgYGNvcHlfc2lgIHBhcmFtZXRlcj8gQWgsIGBfX2lvX3dhaXRpZF9jYW5jZWxgIHRha2VzIGl0IHRvbywgd2hpY2ggbWFrZXMgc2Vuc2UsIGFzIHRoZSBjYW5jZWwgbG9naWMgbmVlZHMgdG8gYWxpZ24gd2l0aCB0aGUgY29tcGxldGlvbiBsb2dpYy4gRnVydGhlciBkb3duLCBgaW9fd2FpdGlkX2NhbmNlbF9jYmAgcGFzc2VzIGB0cnVlYCDigJMgaXQgY29waWVzIHRoZSBgc2lnaW5mb2AsIHdoaWxlIGBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYmAgcGFzc2VzIGBmYWxzZWAuIEdvdGNoYS4gQW5kIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgY2xldmVybHkgdXNlcyB0aGUgYG5vY29weV9jYmAgaWYgdGhlIHRhc2sgY29udGV4dCBpcyBOVUxMLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiByZW1vdmFsLgoKSG1tLCB0aGlzIGBpb193YWl0aWRfY2JgIGlzIGludGVyZXN0aW5nLiBJdCBoYW5kbGVzIHRoZSBgdHcuY2FuY2VsYCBldmVudCBieSBjYWxsaW5nIGBpb193YWl0aWRfY29tcGxldGVgIHdpdGggYSBjYW5jZWxsYXRpb24gZXJyb3IgYW5kLCBpbXBvcnRhbnRseSwgYGZhbHNlYCBmb3IgYGNvcHlfc2lgLiBTbywgbm8gY29weWluZyBvZiB0aGUgYHNpZ2luZm9gIHVwb24gY2FuY2VsbGF0aW9uLiBUaGF0JiMzOTtzIGdvb2QsIG5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgYGlvX3dhaXRpZF9maW5pc2hgIGRvZXMuLi4gdGhhdCB3aWxsIGxpa2VseSBnaXZlIGZ1cnRoZXIgaW5zaWdodCBvbiB0aGUgdXNlIG9mIGBjb3B5X3NpYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fd2FpdGlkX2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3dhaXRpZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3dhaXRpZC5jPTY4PXN0YXRpYyBib29sIGlvX3dhaXRpZF9jb3B5X3NpKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgc2lnbm8pXG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtOTYtXG5pb191cmluZy93YWl0aWQuYzo5NzpzdGF0aWMgaW50IGlvX3dhaXRpZF9maW5pc2goc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpXG5pb191cmluZy93YWl0aWQuYy05OC17XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmM9MTI4PXN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCwgYm9vbCBjb3B5X3NpKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTE0MC1cdGlmIChjb3B5X3NpKVxuaW9fdXJpbmcvd2FpdGlkLmM6MTQxOlx0XHRyZXQgPSBpb193YWl0aWRfZmluaXNoKHJlcSwgcmV0KTtcbmlvX3VyaW5nL3dhaXRpZC5jLTE0Mi1cdGVsc2Vcbi0tXG5pb191cmluZy93YWl0aWQuYz0zMDE9aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTM1OS1cdGlvX3dhaXRpZF9yZW1vdmVfd3EocmVxKTtcbmlvX3VyaW5nL3dhaXRpZC5jOjM2MDpcdHJldCA9IGlvX3dhaXRpZF9maW5pc2gocmVxLCByZXQpO1xuaW9fdXJpbmcvd2FpdGlkLmMtMzYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOgoKKipEZWNvbnN0cnVjdGluZyBpb193YWl0aWRfZmluaXNoIGFuZCBpb193YWl0aWRfY29weV9zaSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhlc2UgZG93bi4gV2hlbiBJIHNlZSBgaW9fd2FpdGlkX2ZpbmlzaGAsIG15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgY3VsbWluYXRpb24gb2Ygc29tZSBJL08gb3BlcmF0aW9uIHdhaXRpbmcuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGluZ3MgYXJlIGZpbmFsaXplZCwgdGhlIHNpZ25hbCBpcyByZWNlaXZlZCwgdGhlIHJlc3VsdHMgYXJlIHJlYWR5IHRvIGJlIGRlYWx0IHdpdGguIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNsZWFudXAgY3JldyBhZnRlciB0aGUgYXN5bmNocm9ub3VzIEkvTyBmaXJld29ya3MuIFdl4oCZdmUgYmVlbiBwYXRpZW50bHkgd2FpdGluZywgYW5kICp0aGlzKiBpcyB0aGUgY2FsbCB0aGF0IHRpZGllcyBldmVyeXRoaW5nIHVwLiBEaWQgYW4gZXZlbnQgb2NjdXI/IERpZCBzb21ldGhpbmcgZ28gd3Jvbmc/IFRoaXMgaXMgd2hlcmUgd2UgbGVhcm4gdGhlIG91dGNvbWUuIEkmIzM5O20gYW50aWNpcGF0aW5nIGVycm9yIGhhbmRsaW5nLCBzdGF0dXMgcmV0cmlldmFsLCBhbmQgcG9zc2libHkgZnJlZWluZyB1cCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcGVyYXRpb24uIEl0JiMzOTtzIHRoZSAmIzM0O3JlcG9ydCBjYXJkJiMzNDsgZnVuY3Rpb24sIGxldHRpbmcgdXMga25vdyBpZiB0aGUgSS9PIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwsIGZhaWxlZCwgb3IgdGVybWluYXRlZCBpbiBzb21lIG90aGVyIHdheSwgcGVyaGFwcyBkdWUgdG8gYSBzaWduYWwuCgpOb3csIGBpb193YWl0aWRfY29weV9zaWAuLi4gdGhpcyBzZWVtcyB0byBiZSBhIHN1YnRsZSwgYnV0IGltcG9ydGFudCB2YXJpYXRpb24uIFRoZSBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZSBjb3B5aW5nIG9mIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGV2ZW50IOKAkyBzcGVjaWZpY2FsbHksIGluZm9ybWF0aW9uIGhlbGQgaW4gYSBgc2lnaW5mb190YCBzdHJ1Y3R1cmUuIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIHRha2luZyB0aGUgZGV0YWlscyBvZiB0aGUgSS9PIGV2ZW50IGZyb20ga2VybmVsIHNwYWNlIGFuZCBwbGFjaW5nIGl0IHNvbWV3aGVyZSBhY2Nlc3NpYmxlIHRvIHVzZXIgc3BhY2UuIEl0IHNvdW5kcyBsaWtlIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBzaGFyZWQgbWVtb3J5IG9yIGFuIElQQyBtZWNoYW5pc20gdG8gZ2V0IGEgc2FmZSBhbmQgY29uc2lzdGVudCBjb3B5IG9mIHRoZSBgc2lnaW5mb190YCBzdHJ1Y3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgaXQmIzM5O3MgcHJvYmFibHkgbGVzcyBhYm91dCB0aGUgY29yZSBwcm9jZXNzIHdhaXQgaXRzZWxmICh0aGF0JiMzOTtzIGBpb193YWl0aWRfZmluaXNoYCYjMzk7cyBqb2IpLCBhbmQgbW9yZSBhYm91dCAqd2hhdCogdGhhdCB3YWl0IHNpZ25hbGVkLiBJJiMzOTttIGltYWdpbmluZyBpdCBkZWFscyB3aXRoIGV4dHJhY3RpbmcgYW55IHNwZWNpZmljIGRldGFpbHMsIHN1Y2ggYXMgdGhlIHNpZ25hbCBudW1iZXIsIHRoZSBzb3VyY2Ugb2YgdGhlIHNpZ25hbCwgb3IgdGhlIHJlYXNvbiBmb3IgdGhlIHdhaXQgdGVybWluYXRpbmcuIFRoZSAmIzM0O3NpJiMzNDsgc3VmZml4IGhpbnRzIGF0IHNpZ25hbCBpbmZvcm1hdGlvbiwgc28gSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gcHJvdmlkZSBtb3JlIGdyYW51bGFyIGRhdGEgYWJvdXQgKndoeSogdGhlIEkvTyB3YWl0IGlzIGRvbmUuIEl0JiMzOTtzIGFsbCBhYm91dCBwcm92aWRpbmcgcmljaCBkZXRhaWwgdG8gdGhlIGNhbGxlci4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXRhaWxzIGlzIGNyaXRpY2FsIHRvIHRoZSByb2J1c3QgaGFuZGxpbmcgb2YgYXN5bmNocm9ub3VzIEkvTywgYWxsb3dpbmcgZGV2ZWxvcGVycyB0byBtYW5hZ2UgZXJyb3JzLCByZWNvdmVyeSBhbmQgcHJvdmlkZSByZWxldmFudCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL3dhaXRpZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2ODpcdHN0YXRpYyBib29sIGlvX3dhaXRpZF9jb3B5X3NpKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgc2lnbm8pXG4gIDY5Olx0e1xuICA3MDpcdFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcbiAgNzE6XHRcdGJvb2wgcmV0O1xuICA3MjpcdFxuICA3MzpcdFx0aWYgKCFpdy1cdTAwM2VpbmZvcClcbiAgNzQ6XHRcdFx0cmV0dXJuIHRydWU7XG4gIDc1Olx0XG4gIDc2Olx0XHRpZiAoaW9faXNfY29tcGF0KHJlcS1cdTAwM2VjdHgpKVxuICA3NzpcdFx0XHRyZXR1cm4gaW9fd2FpdGlkX2NvbXBhdF9jb3B5X3NpKGl3LCBzaWdubyk7XG4gIDc4Olx0XG4gIDc5Olx0XHRpZiAoIXVzZXJfd3JpdGVfYWNjZXNzX2JlZ2luKGl3LVx1MDAzZWluZm9wLCBzaXplb2YoKml3LVx1MDAzZWluZm9wKSkpXG4gIDgwOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgODE6XHRcbiAgODI6XHRcdHVuc2FmZV9wdXRfdXNlcihzaWdubywgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfc2lnbm8sIEVmYXVsdCk7XG4gIDgzOlx0XHR1bnNhZmVfcHV0X3VzZXIoMCwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfZXJybm8sIEVmYXVsdCk7XG4gIDg0Olx0XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5jYXVzZSwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfY29kZSwgRWZhdWx0KTtcbiAgODU6XHRcdHVuc2FmZV9wdXRfdXNlcihpdy1cdTAwM2VpbmZvLnBpZCwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfcGlkLCBFZmF1bHQpO1xuICA4NjpcdFx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8udWlkLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV91aWQsIEVmYXVsdCk7XG4gIDg3Olx0XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5zdGF0dXMsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX3N0YXR1cywgRWZhdWx0KTtcbiAgODg6XHRcdHJldCA9IHRydWU7XG4gIDg5Olx0ZG9uZTpcbiAgOTA6XHRcdHVzZXJfd3JpdGVfYWNjZXNzX2VuZCgpO1xuICA5MTpcdFx0cmV0dXJuIHJldDtcbiAgOTI6XHRFZmF1bHQ6XG4gIDkzOlx0XHRyZXQgPSBmYWxzZTtcbiAgOTQ6XHRcdGdvdG8gZG9uZTtcbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIGludCBpb193YWl0aWRfZmluaXNoKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0KVxuICA5ODpcdHtcbiAgOTk6XHRcdGludCBzaWdubyA9IDA7XG4gMTAwOlx0XG4gMTAxOlx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4gMTAyOlx0XHRcdHNpZ25vID0gU0lHQ0hMRDtcbiAxMDM6XHRcdFx0cmV0ID0gMDtcbiAxMDQ6XHRcdH1cbiAxMDU6XHRcbiAxMDY6XHRcdGlmICghaW9fd2FpdGlkX2NvcHlfc2kocmVxLCBzaWdubykpXG4gMTA3Olx0XHRcdHJldCA9IC1FRkFVTFQ7XG4gMTA4Olx0XHRpb193YWl0aWRfZnJlZShyZXEpO1xuIDEwOTpcdFx0cmV0dXJuIHJldDtcbiAxMTA6XHR9XG4gMTExOlx0XG4gMTEyOlx0c3RhdGljIHZvaWQgaW9fd2FpdGlkX3JlbW92ZV93cShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbiAxMTM6XHR7XG4gMTE0Olx0XHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xuIDExNTpcdFx0c3RydWN0IHdhaXRfcXVldWVfaGVhZCAqaGVhZDtcbiAxMTY6XHRcbiAxMTc6XHRcdGhlYWQgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNml3LVx1MDAzZWhlYWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjM4CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBLZXJuZWwgTWVtb3J5IExlYWsqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBwcmV2ZW50aW5nIGBpb193YWl0aWRfY29weV9zaWAgZnJvbSBiZWluZyBjYWxsZWQgaW4gc3BlY2lmaWMgc2NlbmFyaW9zLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCBmb2N1c2VzIG9uIHNpdHVhdGlvbnMgd2hlcmUgd2UmIzM5O3JlIGFscmVhZHkgY2FuY2VsaW5nIHRoZSB3YWl0IG9yIHdoZW4gdGhlIHRhc2sgY29udGV4dCBpcyBudWxsIGR1cmluZyByZW1vdmFsLiBFc3NlbnRpYWxseSwgaXQgYXBwZWFycyB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGF2b2lkIGEgY2FsbCB3aGVuIGBjb3B5X3NpYCBpcyBmYWxzZS4gTWFrZXMgc2Vuc2UsIHRoYXQgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBjb3B5aW5nIG9mIHNpZ25hbCBpbmZvLgoKVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIHRoYXQgYGlvX3dhaXRpZF9jb3B5X3NpYCB1c2VzIGB1bnNhZmVfcHV0X3VzZXJgIHRvIHdyaXRlIGRhdGEgaW50byB1c2VyIHNwYWNlLiBBbmQgdGhpcyB3b3JyaWVzIG1lLiBJdCBzcGVjaWZpY2FsbHkgd3JpdGVzIGBzaWdub2AsIGAwYCwgYGl3LSZndDtpbmZvLmNhdXNlYCwgYGl3LSZndDtpbmZvLnBpZGAsIGBpdy0mZ3Q7aW5mby51aWRgLCBhbmQgYGl3LSZndDtpbmZvLnN0YXR1c2AuICBUaGVzZSBhcmUgZmllbGRzIHdpdGhpbiBgaXctJmd0O2luZm9gLiAgSWYgYGl3LSZndDtpbmZvYCBpcyAqdW5pbml0aWFsaXplZCogYXQgdGhlIHBvaW50IHdoZXJlIHRoaXMgd3JpdGUgaGFwcGVucywgd2UgY291bGQgYmUgbGVha2luZyBwb3RlbnRpYWxseSBzZW5zaXRpdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIHVzZXIuIFRoYXTigJlzIGFsd2F5cyBhIHNlY3VyaXR5IHJpc2sgd2UgbmVlZCB0byBhdm9pZC4KCkJ1dCB3YWl0LCBhIGJpdCBvZiBjcml0aWNhbCB0aGlua2luZzogYHVuc2FmZV9wdXRfdXNlcmAgaXNuJiMzOTt0IHdyaXRpbmcgdGhlICplbnRpcmUqIGB3YWl0aWRfaW5mb2Agc3RydWN0dXJlLiBJdCYjMzk7cyBvbmx5IHdyaXRpbmcgc3BlY2lmaWMgKmZpZWxkcyogb2YgaXQuIFNvIHdoaWxlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBhIGNvbmNlcm4sIHdlIHByb2JhYmx5IGFyZW4mIzM5O3QgbGVha2luZyBhbnkgcGFkZGluZyB3aXRoaW4gdGhlIHN0cnVjdCwganVzdCB0aGVzZSBkaXNjcmV0ZSB2YWx1ZXMuIE9rYXksIHNvIHdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbiBvZiBgd2FpdGlkX2luZm9gLiBMZXQgbWUgY2hlY2sgdGhhdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgd2FpdGlkX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvd2FpdGlkLmM9MjQ9c3RydWN0IGlvX3dhaXRpZCB7XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmMtMzEtXHRzdHJ1Y3Qgc2lnaW5mbyBfX3VzZXIgKmluZm9wO1xuaW9fdXJpbmcvd2FpdGlkLmM6MzI6XHRzdHJ1Y3Qgd2FpdGlkX2luZm8gaW5mbztcbmlvX3VyaW5nL3dhaXRpZC5jLTMzLX07XG4tLVxua2VybmVsL2V4aXQuYz0xMjA2PXN0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9leGl0LmMtMTIxMC1cdHVpZF90IHVpZCA9IGZyb21fa3VpZF9tdW5nZWQoY3VycmVudF91c2VyX25zKCksIHRhc2tfdWlkKHApKTtcbmtlcm5lbC9leGl0LmM6MTIxMTpcdHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3A7XG5rZXJuZWwvZXhpdC5jLTEyMTItXG4tLVxua2VybmVsL2V4aXQuYz0xMzYyPXN0YXRpYyBpbnQgd2FpdF90YXNrX3N0b3BwZWQoc3RydWN0IHdhaXRfb3B0cyAqd28sXG4tLVxua2VybmVsL2V4aXQuYy0xMzY0LXtcbmtlcm5lbC9leGl0LmM6MTM2NTpcdHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3A7XG5rZXJuZWwvZXhpdC5jLTEzNjYtXHRpbnQgZXhpdF9jb2RlLCAqcF9jb2RlLCB3aHk7XG4tLVxua2VybmVsL2V4aXQuYz0xNDM0PXN0YXRpYyBpbnQgd2FpdF90YXNrX2NvbnRpbnVlZChzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxua2VybmVsL2V4aXQuYy0xNDM1LXtcbmtlcm5lbC9leGl0LmM6MTQzNjpcdHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3A7XG5rZXJuZWwvZXhpdC5jLTE0MzctXHRwaWRfdCBwaWQ7XG4tLVxua2VybmVsL2V4aXQuYz0xNzY4PWludCBrZXJuZWxfd2FpdGlkX3ByZXBhcmUoc3RydWN0IHdhaXRfb3B0cyAqd28sIGludCB3aGljaCwgcGlkX3QgdXBpZCxcbmtlcm5lbC9leGl0LmM6MTc2OTpcdFx0XHQgIHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3AsIGludCBvcHRpb25zLFxua2VybmVsL2V4aXQuYy0xNzcwLVx0XHRcdCAgc3RydWN0IHJ1c2FnZSAqcnUpXG4tLVxua2VybmVsL2V4aXQuYy0xODI3LVxua2VybmVsL2V4aXQuYzoxODI4OnN0YXRpYyBsb25nIGtlcm5lbF93YWl0aWQoaW50IHdoaWNoLCBwaWRfdCB1cGlkLCBzdHJ1Y3Qgd2FpdGlkX2luZm8gKmluZm9wLFxua2VybmVsL2V4aXQuYy0xODI5LVx0XHRcdCAgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKnJ1KVxuLS1cbmtlcm5lbC9leGl0LmM9MTg0Nj1TWVNDQUxMX0RFRklORTUod2FpdGlkLCBpbnQsIHdoaWNoLCBwaWRfdCwgdXBpZCwgc3RydWN0IHNpZ2luZm8gX191c2VyICosXG4tLVxua2VybmVsL2V4aXQuYy0xODQ5LVx0c3RydWN0IHJ1c2FnZSByO1xua2VybmVsL2V4aXQuYzoxODUwOlx0c3RydWN0IHdhaXRpZF9pbmZvIGluZm8gPSB7LnN0YXR1cyA9IDB9O1xua2VybmVsL2V4aXQuYy0xODUxLVx0bG9uZyBlcnIgPSBrZXJuZWxfd2FpdGlkKHdoaWNoLCB1cGlkLCBcdTAwMjZpbmZvLCBvcHRpb25zLCBydSA/IFx1MDAyNnIgOiBOVUxMKTtcbi0tXG5rZXJuZWwvZXhpdC5jPTE5ODA9Q09NUEFUX1NZU0NBTExfREVGSU5FNSh3YWl0aWQsXG4tLVxua2VybmVsL2V4aXQuYy0xOTg1LVx0c3RydWN0IHJ1c2FnZSBydTtcbmtlcm5lbC9leGl0LmM6MTk4NjpcdHN0cnVjdCB3YWl0aWRfaW5mbyBpbmZvID0gey5zdGF0dXMgPSAwfTtcbmtlcm5lbC9leGl0LmMtMTk4Ny1cdGxvbmcgZXJyID0ga2VybmVsX3dhaXRpZCh3aGljaCwgcGlkLCBcdTAwMjZpbmZvLCBvcHRpb25zLCB1cnUgPyBcdTAwMjZydSA6IE5VTEwpO1xuLS1cbmtlcm5lbC9leGl0LmgtNC1cbmtlcm5lbC9leGl0Lmg6NTpzdHJ1Y3Qgd2FpdGlkX2luZm8ge1xua2VybmVsL2V4aXQuaC02LVx0cGlkX3QgcGlkO1xuLS1cbmtlcm5lbC9leGl0Lmg9MTI9c3RydWN0IHdhaXRfb3B0cyB7XG4tLVxua2VybmVsL2V4aXQuaC0xNi1cbmtlcm5lbC9leGl0Lmg6MTc6XHRzdHJ1Y3Qgd2FpdGlkX2luZm9cdCp3b19pbmZvO1xua2VybmVsL2V4aXQuaC0xOC1cdGludFx0XHRcdHdvX3N0YXQ7XG4tLVxua2VybmVsL2V4aXQuaD0yNz1pbnQga2VybmVsX3dhaXRpZF9wcmVwYXJlKHN0cnVjdCB3YWl0X29wdHMgKndvLCBpbnQgd2hpY2gsIHBpZF90IHVwaWQsXG5rZXJuZWwvZXhpdC5oOjI4Olx0XHRcdCAgc3RydWN0IHdhaXRpZF9pbmZvICppbmZvcCwgaW50IG9wdGlvbnMsXG5rZXJuZWwvZXhpdC5oLTI5LVx0XHRcdCAgc3RydWN0IHJ1c2FnZSAqcnUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3Qgd2FpdGlkX2luZm9gKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHdhaXQgaW5mb3JtYXRpb24sIHNwZWNpZmljYWxseSwgaG93IGl0IHN0b3JlcyBkZXRhaWxzIHJlbGF0ZWQgdG8gYSBwcm9jZXNzJiMzOTtzIGV4aXQuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBrZXJuZWwvZXhpdC5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qgd2FpdGlkX2luZm9gLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgc3RydWN0IHdpbGwgY29udGFpbiB0aGUgY3JpdGljYWwgZGF0YSBJJiMzOTttIGludGVyZXN0ZWQgaW46IHRoZSBleGl0IHN0YXR1cywgc2lnbmFsIGluZm9ybWF0aW9uLCByZXNvdXJjZSB1c2FnZSBzdGF0aXN0aWNzLCBhbmQgbWF5YmUgZXZlbiBhIHBvaW50ZXIgYmFjayB0byB0aGUgcHJvY2VzcyBjb250cm9sIGJsb2NrLiBJdCYjMzk7cyB0aGUgbHluY2hwaW4gZm9yIGhvdyBgd2FpdGlkYCBhbmQgb3RoZXIgd2FpdC1yZWxhdGVkIHN5c3RlbSBjYWxscyBvcGVyYXRlLiBJJiMzOTttIGtlZW4gdG8gZGlzc2VjdCBpdCwgZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggbWVtYmVyLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcHJvY2VzcyBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9leGl0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I2lmbmRlZiBMSU5VWF9XQUlUSURfSFxuICAgMzpcdCNkZWZpbmUgTElOVVhfV0FJVElEX0hcbiAgIDQ6XHRcbiAgIDU6XHRzdHJ1Y3Qgd2FpdGlkX2luZm8ge1xuICAgNjpcdFx0cGlkX3QgcGlkO1xuICAgNzpcdFx0dWlkX3QgdWlkO1xuICAgODpcdFx0aW50IHN0YXR1cztcbiAgIDk6XHRcdGludCBjYXVzZTtcbiAgMTA6XHR9O1xuICAxMTpcdFxuICAxMjpcdHN0cnVjdCB3YWl0X29wdHMge1xuICAxMzpcdFx0ZW51bSBwaWRfdHlwZVx0XHR3b190eXBlO1xuICAxNDpcdFx0aW50XHRcdFx0d29fZmxhZ3M7XG4gIDE1Olx0XHRzdHJ1Y3QgcGlkXHRcdCp3b19waWQ7XG4gIDE2Olx0XG4gIDE3Olx0XHRzdHJ1Y3Qgd2FpdGlkX2luZm9cdCp3b19pbmZvO1xuICAxODpcdFx0aW50XHRcdFx0d29fc3RhdDtcbiAgMTk6XHRcdHN0cnVjdCBydXNhZ2VcdFx0KndvX3J1c2FnZTtcbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI2MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgaW9fd2FpdGlkX2NvcHlfc2lgIGFuZCBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCB3YWl0aWRfaW5mb2Agc3RydWN0dXJlLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBob2xkcyBrZXkgcGllY2VzIG9mIGluZm9ybWF0aW9uOiBgcGlkYCwgYHVpZGAsIGBzdGF0dXNgLCBhbmQgYGNhdXNlYC4gTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGlzIGZ1bmN0aW9uLCBgaW9fd2FpdGlkX2NvcHlfc2lgLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBjb3B5aW5nIGRhdGEgZnJvbSBhbiBgaXctJmd0O2luZm9gIHN0cnVjdCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgYGl3LSZndDtpbmZvcGAuIFRoZSBjb2RlIHNuaXBwZXQgdXNlcyBgdW5zYWZlX3B1dF91c2VyYCBmb3IgZWFjaCBmaWVsZDoKCmBgYGMKCXVuc2FmZV9wdXRfdXNlcihzaWdubywgJmFtcDtpdy0mZ3Q7aW5mb3AtJmd0O3NpX3NpZ25vLCBFZmF1bHQpOwoJdW5zYWZlX3B1dF91c2VyKDAsICZhbXA7aXctJmd0O2luZm9wLSZndDtzaV9lcnJubywgRWZhdWx0KTsKCXVuc2FmZV9wdXRfdXNlcihpdy0mZ3Q7aW5mby5jYXVzZSwgJmFtcDtpdy0mZ3Q7aW5mb3AtJmd0O3NpX2NvZGUsIEVmYXVsdCk7Cgl1bnNhZmVfcHV0X3VzZXIoaXctJmd0O2luZm8ucGlkLCAmYW1wO2l3LSZndDtpbmZvcC0mZ3Q7c2lfcGlkLCBFZmF1bHQpOwoJdW5zYWZlX3B1dF91c2VyKGl3LSZndDtpbmZvLnVpZCwgJmFtcDtpdy0mZ3Q7aW5mb3AtJmd0O3NpX3VpZCwgRWZhdWx0KTsKCXVuc2FmZV9wdXRfdXNlcihpdy0mZ3Q7aW5mby5zdGF0dXMsICZhbXA7aXctJmd0O2luZm9wLSZndDtzaV9zdGF0dXMsIEVmYXVsdCk7CmBgYAoKVGhlIHByb2JsZW0gaXMgaW1tZWRpYXRlbHkgY2xlYXIgdG8gbWUuIElmLCBhbmQgdGhpcyBpcyBhIGJpZyBpZiwgYGl3LSZndDtpbmZvYCBoYXNuJiMzOTt0IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSYjMzk7cmUgZ29pbmcgdG8gbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRvIHVzZXIgc3BhY2UuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYW5kIHNvbWV0aGluZyBJJiMzOTtkIHdhbnQgdG8gYXVkaXQgcmlnaHQgYXdheS4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGl3LSZndDtpbmZvYCBpcyBhY3R1YWxseSBpbml0aWFsaXplZCwgSSYjMzk7bGwgdHJhY2UgaXRzIHVzYWdlIGluIGBpb191cmluZy93YWl0aWQuY2AgYW5kIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIGNvcnJlY3Qgc3RhdGUsIHRvIGF2b2lkIHRoYXQgbWVtb3J5IGxlYWsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l3LVx1MDAzZWluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy93YWl0aWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy93YWl0aWQuYz00Mz1zdGF0aWMgYm9vbCBpb193YWl0aWRfY29tcGF0X2NvcHlfc2koc3RydWN0IGlvX3dhaXRpZCAqaXcsIGludCBzaWdubylcbi0tXG5pb191cmluZy93YWl0aWQuYy00Ny1cbmlvX3VyaW5nL3dhaXRpZC5jOjQ4Olx0aW5mb3AgPSAoc3RydWN0IGNvbXBhdF9zaWdpbmZvIF9fdXNlciAqKSBpdy1cdTAwM2VpbmZvcDtcbmlvX3VyaW5nL3dhaXRpZC5jLTQ5LVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTU0LVx0dW5zYWZlX3B1dF91c2VyKDAsIFx1MDAyNmluZm9wLVx1MDAzZXNpX2Vycm5vLCBFZmF1bHQpO1xuaW9fdXJpbmcvd2FpdGlkLmM6NTU6XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5jYXVzZSwgXHUwMDI2aW5mb3AtXHUwMDNlc2lfY29kZSwgRWZhdWx0KTtcbmlvX3VyaW5nL3dhaXRpZC5jOjU2Olx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8ucGlkLCBcdTAwMjZpbmZvcC1cdTAwM2VzaV9waWQsIEVmYXVsdCk7XG5pb191cmluZy93YWl0aWQuYzo1NzpcdHVuc2FmZV9wdXRfdXNlcihpdy1cdTAwM2VpbmZvLnVpZCwgXHUwMDI2aW5mb3AtXHUwMDNlc2lfdWlkLCBFZmF1bHQpO1xuaW9fdXJpbmcvd2FpdGlkLmM6NTg6XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5zdGF0dXMsIFx1MDAyNmluZm9wLVx1MDAzZXNpX3N0YXR1cywgRWZhdWx0KTtcbmlvX3VyaW5nL3dhaXRpZC5jLTU5LVx0cmV0ID0gdHJ1ZTtcbi0tXG5pb191cmluZy93YWl0aWQuYz02OD1zdGF0aWMgYm9vbCBpb193YWl0aWRfY29weV9zaShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHNpZ25vKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTcyLVxuaW9fdXJpbmcvd2FpdGlkLmM6NzM6XHRpZiAoIWl3LVx1MDAzZWluZm9wKVxuaW9fdXJpbmcvd2FpdGlkLmMtNzQtXHRcdHJldHVybiB0cnVlO1xuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTc4LVxuaW9fdXJpbmcvd2FpdGlkLmM6Nzk6XHRpZiAoIXVzZXJfd3JpdGVfYWNjZXNzX2JlZ2luKGl3LVx1MDAzZWluZm9wLCBzaXplb2YoKml3LVx1MDAzZWluZm9wKSkpXG5pb191cmluZy93YWl0aWQuYy04MC1cdFx0cmV0dXJuIGZhbHNlO1xuaW9fdXJpbmcvd2FpdGlkLmMtODEtXG5pb191cmluZy93YWl0aWQuYzo4MjpcdHVuc2FmZV9wdXRfdXNlcihzaWdubywgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfc2lnbm8sIEVmYXVsdCk7XG5pb191cmluZy93YWl0aWQuYzo4MzpcdHVuc2FmZV9wdXRfdXNlcigwLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9lcnJubywgRWZhdWx0KTtcbmlvX3VyaW5nL3dhaXRpZC5jOjg0Olx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8uY2F1c2UsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX2NvZGUsIEVmYXVsdCk7XG5pb191cmluZy93YWl0aWQuYzo4NTpcdHVuc2FmZV9wdXRfdXNlcihpdy1cdTAwM2VpbmZvLnBpZCwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfcGlkLCBFZmF1bHQpO1xuaW9fdXJpbmcvd2FpdGlkLmM6ODY6XHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby51aWQsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX3VpZCwgRWZhdWx0KTtcbmlvX3VyaW5nL3dhaXRpZC5jOjg3Olx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8uc3RhdHVzLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9zdGF0dXMsIEVmYXVsdCk7XG5pb191cmluZy93YWl0aWQuYy04OC1cdHJldCA9IHRydWU7XG4tLVxuaW9fdXJpbmcvd2FpdGlkLmM9Mjc5PWludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTI5NS1cdGl3LVx1MDAzZWhlYWQgPSBOVUxMO1xuaW9fdXJpbmcvd2FpdGlkLmM6Mjk2Olx0aXctXHUwMDNlaW5mb3AgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKHNxZS1cdTAwM2VhZGRyMikpO1xuaW9fdXJpbmcvd2FpdGlkLmM6Mjk3Olx0bWVtc2V0KFx1MDAyNml3LVx1MDAzZWluZm8sIDAsIHNpemVvZihpdy1cdTAwM2VpbmZvKSk7XG5pb191cmluZy93YWl0aWQuYy0yOTgtXHRyZXR1cm4gMDtcbi0tXG5pb191cmluZy93YWl0aWQuYz0zMDE9aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL3dhaXRpZC5jLTMwNy1cbmlvX3VyaW5nL3dhaXRpZC5jOjMwODpcdHJldCA9IGtlcm5lbF93YWl0aWRfcHJlcGFyZShcdTAwMjZpd2EtXHUwMDNld28sIGl3LVx1MDAzZXdoaWNoLCBpdy1cdTAwM2V1cGlkLCBcdTAwMjZpdy1cdTAwM2VpbmZvLFxuaW9fdXJpbmcvd2FpdGlkLmMtMzA5LVx0XHRcdFx0XHRpdy1cdTAwM2VvcHRpb25zLCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHBsYXlpbmcgdGhlIHJvbGUgb2YgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBpb193YWl0aWRfcHJlcCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtZW1zZXQoJmFtcDtpdy0mZ3Q7aW5mbywgMCwgc2l6ZW9mKGl3LSZndDtpbmZvKSk7YCB3aXRoaW4gdGhlIGBpb193YWl0aWRfcHJlcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGluZSBjb21wbGV0ZWx5IHplcm9zIG91dCB0aGUgYGl3LSZndDtpbmZvYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24uIEl0ICpzaG91bGQqIG1lYW4gdGhhdCBhbnkgc3Vic2VxdWVudCB1c2Ugb2YgYGl3LSZndDtpbmZvYCB3b24mIzM5O3QgYmUgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBmdWxseSBpbml0aWFsaXplcyBpdCB0byB6ZXJvLiBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0IEkgd2FudCB0byBzZWUgdG8gYXZvaWQgYW55IG5hc3R5LCB1bmRlZmluZWQgYmVoYXZpb3Igb3IgcG90ZW50aWFsIGxlYWtzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogZ2l2ZW4gdGhhdCBpbml0aWFsaXphdGlvbiBpcyBoYXBwZW5pbmcsIGlzIHRoZXJlIHRydWx5IGEgbGVhayBvciBub3Q/IFRoZSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBgaW9fd2FpdGlkX3ByZXBgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNvbnRleHQgdG8gYmUgc3VyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvd2FpdGlkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3OTpcdGludCBpb193YWl0aWRfcHJlcChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgY29uc3Qgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKVxuIDI4MDpcdHtcbiAyODE6XHRcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XG4gMjgyOlx0XHRzdHJ1Y3QgaW9fd2FpdGlkX2FzeW5jICppd2E7XG4gMjgzOlx0XG4gMjg0Olx0XHRpZiAoc3FlLVx1MDAzZWFkZHIgfHwgc3FlLVx1MDAzZWJ1Zl9pbmRleCB8fCBzcWUtXHUwMDNlYWRkcjMgfHwgc3FlLVx1MDAzZXdhaXRpZF9mbGFncylcbiAyODU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjg2Olx0XG4gMjg3Olx0XHRpd2EgPSBpb191cmluZ19hbGxvY19hc3luY19kYXRhKE5VTEwsIHJlcSk7XG4gMjg4Olx0XHRpZiAodW5saWtlbHkoIWl3YSkpXG4gMjg5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI5MDpcdFx0aXdhLVx1MDAzZXJlcSA9IHJlcTtcbiAyOTE6XHRcbiAyOTI6XHRcdGl3LVx1MDAzZXdoaWNoID0gUkVBRF9PTkNFKHNxZS1cdTAwM2VsZW4pO1xuIDI5MzpcdFx0aXctXHUwMDNldXBpZCA9IFJFQURfT05DRShzcWUtXHUwMDNlZmQpO1xuIDI5NDpcdFx0aXctXHUwMDNlb3B0aW9ucyA9IFJFQURfT05DRShzcWUtXHUwMDNlZmlsZV9pbmRleCk7XG4gMjk1Olx0XHRpdy1cdTAwM2VoZWFkID0gTlVMTDtcbiAyOTY6XHRcdGl3LVx1MDAzZWluZm9wID0gdTY0X3RvX3VzZXJfcHRyKFJFQURfT05DRShzcWUtXHUwMDNlYWRkcjIpKTtcbiAyOTc6XHRcdG1lbXNldChcdTAwMjZpdy1cdTAwM2VpbmZvLCAwLCBzaXplb2YoaXctXHUwMDNlaW5mbykpO1xuIDI5ODpcdFx0cmV0dXJuIDA7XG4gMjk5Olx0fVxuIDMwMDpcdFxuIDMwMTpcdGludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbiAzMDI6XHR7XG4gMzAzOlx0XHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzM5CgkJCQkJCQlvdXRwdXQ6IDIyMQoJCQkJCQkJdGhvdWdodHM6IDE1MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIGlvX3dhaXRpZCBQYXRjaCBhbmQgVW5pbml0aWFsaXplZCBNZW1vcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb193YWl0aWRfY29tcGxldGVgIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBpcyB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2FnZSBpbnRyb2R1Y2VkIG9yIGZpeGVkIGhlcmU/IFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYSBgY29weV9zaWAgZmxhZyB0byBgaW9fd2FpdGlkX2NvbXBsZXRlYCwgYWxsb3dpbmcgaXQgdG8gc2tpcCB0aGUgYGlvX3dhaXRpZF9maW5pc2hgIGZ1bmN0aW9uIGVudGlyZWx5LCBhbmQgZ28gc3RyYWlnaHQgdG8gYGlvX3dhaXRpZF9mcmVlYCB3aGVuIGBjb3B5X3NpYCBpcyBmYWxzZS4gYGlvX3dhaXRpZF9maW5pc2hgIGlzIHRoZSBvbmUgdGhhdCBjYWxscyBgaW9fd2FpdGlkX2NvcHlfc2lgLCB3aGljaCBwZXJmb3JtcyB0aGUgdXNlci1zcGFjZSB3cml0ZS4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoeSB0aGV5JiMzOTtyZSBieXBhc3NpbmcgdGhlIHVzZXItc3BhY2Ugd3JpdGUuIFRoZSBjb2RlIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gY2FuY2VsbGF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gYHR3LmNhbmNlbGAgaXMgdHJ1ZSBvciB3aGVuIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAgaXMgY2FsbGVkIHdpdGhvdXQgYSB0YXNrIGNvbnRleHQgKGB0Y3R4YCBpcyBOVUxMKS4gVGhlIHJhdGlvbmFsZSBpcyBsaWtlbHkgdGhhdCB3cml0aW5nIHRvIHVzZXIgc3BhY2UgcmVxdWlyZXMgYSB2YWxpZCBwcm9jZXNzIGNvbnRleHQuIElmIHRoZSB0YXNrIGlzIGJlaW5nIGNhbmNlbGVkIG9yIHRoZSBvcGVyYXRpb24gaXMgb2NjdXJyaW5nIG91dHNpZGUgdGhlIGV4cGVjdGVkIGNvbnRleHQgKGxpa2UgYSByaW5nIGV4aXQgb3IgY2FuY2VsbGF0aW9uIGZyb20gYW5vdGhlciB0YXNrKSwgd3JpdGluZyB0byB1c2VyIHNwYWNlIGNvdWxkIGVpdGhlciB3cml0ZSB0byB0aGUgd3JvbmcgcHJvY2VzcyYjMzk7cyBtZW1vcnkgKG1lbW9yeSBjb3JydXB0aW9uL291dC1vZi1ib3VuZHMgYWNjZXNzKSBvciBsZWFkIHRvIGEgZmF1bHQuCgpNeSBpbW1lZGlhdGUgY2hlY2sgaXMgd2hldGhlciB0aGlzIHBhdGNoICpleHBvc2VzKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgcXVpY2tseSBydWxlIG91dCBgaXctJmd0O2luZm9gIGJlY2F1c2UgYGlvX3dhaXRpZF9wcmVwYCBleHBsaWNpdGx5IHplcm9lcyBpdCBvdXQuIEkgZG91YmxlLWNoZWNrZWQgdGhpcywgYW5kIGBtZW1zZXQoJmFtcDtpdy0mZ3Q7aW5mbywgMCwgc2l6ZW9mKGl3LSZndDtpbmZvKSk7YCBpcyBpbiBwbGFjZS4gTm8gcHJvYmxlbSB0aGVyZS4gSSBhbHNvIGNoZWNrIGBzaWdub2AsIHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGlvX3dhaXRpZF9maW5pc2hgLCBvciBgU0lHQ0hMRGAuIEFuZCB0aGUgYGl3LSZndDtpbmZvcC0mZ3Q7c2lfc2lnbm9gIGZpZWxkIHdoaWNoIGlzIHVzZXIgc3BhY2UgbWVtb3J5IGFuZCB0aGVyZWZvcmUgbm90IGEgY29uY2Vybi4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoLCBpdCBzZWVtcyB0aGUgcGF0Y2ggaXMgZW50aXJlbHkgYWJvdXQgYXZvaWRpbmcgYGlvX3dhaXRpZF9maW5pc2hgICh3aGljaCBpbmNsdWRlcyBgaW9fd2FpdGlkX2NvcHlfc2lgKSB3aGVuIGBjb3B5X3NpYCBpcyBmYWxzZS4gQW5kIGBjb3B5X3NpYCBpcyBmYWxzZSBpbiB0aGUgYGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiYCBjYXNlLCBhbmQgdGhlIGBpb193YWl0aWRfY2JgIGlmIGB0dy5jYW5jZWxgIGlzIHRydWUuIGB0dy5jYW5jZWxgIG1lYW5zIHRhc2sgd29yayBjYW5jZWxsYXRpb24sIGxpa2Ugd2hlbiB0aGUgdGFzayBleGl0cyBvciB0aGUgcmluZyBpcyB0b3JuIGRvd24uIFRoZXkmIzM5O3JlIHRyeWluZyB0byBwcmV2ZW50IHdyaXRpbmcgdG8gdXNlciBzcGFjZSBpZiBpdCYjMzk7cyBpbnZhbGlkIG9yIHVuc2FmZS4KClRoaXMgaXMgYSBidWcgZml4LCBpdCYjMzk7cyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0JiMzOTtzIGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCBhIHNjZW5hcmlvIHdoZXJlIGBpb193YWl0aWRgIHRyaWVzIHRvIGNvcHkgYHNpZ2luZm9gIGR1cmluZyBjYW5jZWxsYXRpb24gd2hlbiB0aGUgdXNlciBtZW1vcnkgbWlnaHQgbm90IGJlIHZhbGlkLCB3aGljaCBjb3VsZCBjYXVzZSBhIHBhZ2UgZmF1bHQgb3IgYSB3cml0ZSB0byB0aGUgd3JvbmcgYWRkcmVzcyBzcGFjZS4KCkkgbm93IG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjb21lcyB2aXNpYmxlIGluIHRoZSBgaXctJmd0O2luZm9gIHN0cnVjdC4gYGlvX3dhaXRpZF9wcmVwYCB0YWtlcyBjYXJlIG9mIHRoZSBpbml0aWFsaXphdGlvbi4gQnV0IGNvdWxkIGBrZXJuZWxfd2FpdGlkX3ByZXBhcmVgIG9yIGBfX2RvX3dhaXRgIG1vZGlmeSBgaXctJmd0O2luZm9gIHN1Y2ggdGhhdCB0aGVyZSBpcyB1bmluaXRpYWxpemVkIHBhZGRpbmc/IE5vLiBgaXctJmd0O2luZm9gIGlzOgoKYGBgYwpzdHJ1Y3Qgd2FpdGlkX2luZm8gewoJcGlkX3QgcGlkOwoJdWlkX3QgdWlkOwoJaW50IHN0YXR1czsKCWludCBjYXVzZTsKfTsKYGBgCgpgcGlkX3RgIGlzIGBpbnRgLCBgdWlkX3RgIGlzIGB1bnNpZ25lZCBpbnRgLCBgc3RhdHVzYCBhbmQgYGNhdXNlYCBhcmUgYGludGBzLiBUaGlzIGlzIGEgdG90YWwgc2l6ZSBvZiAxNiBieXRlcy4gTm8gcGFkZGluZyBpcyBwcmVzZW50LiBBbmQgZXZlbiBpZiB0aGVyZSB3ZXJlLCB0aGUgY29kZSB3cml0ZXMgdG8gaW5kaXZpZHVhbCBmaWVsZHMgYW5kIG5vdCB0aGUgc3RydWN0IGFzIGEgd2hvbGUsIHNvIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgcGFkZGluZyBiZWluZyBsZWFrZWQgaXMgZWZmZWN0aXZlbHkgemVyby4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZml4IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQgZml4ZXMgYSBidWcgd2hlcmUgdXNlci1zcGFjZSBtZW1vcnkgYWNjZXNzIG9jY3VycyBkdXJpbmcgY2FuY2VsbGF0aW9uLCBhbmQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSwgYXMgdGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBidWcgd291bGQgbGlrZWx5IGNhdXNlIGEgdXNlLWFmdGVyLWZyZWUgb2YgdXNlci1zcGFjZSBtZW1vcnksIG9yIGEgd3JpdGUgdG8gYW4gaW5jb3JyZWN0IG1tIGFuZCBLTVNBTiB3b3VsZCBub3QgY2F0Y2ggdGhpcy4KCkkgcmV2aWV3IHRoZSBgaW9fd2FpdGlkX2NiYCBjaGFuZ2U6CgpgYGBjCkBAIC0yMDIsNiAmIzQzOzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpCiAJaW50IHJldDsKIAogCWlvX3R3X2xvY2soY3R4LCB0dyk7CiYjNDM7CWlmICh1bmxpa2VseSh0dy5jYW5jZWwpKSB7CiYjNDM7CQlpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBmYWxzZSk7CiYjNDM7CQlpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQpgYGAKClRoaXMgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNvbXBsZXRpb24gcGF0aHMgb2YgdGhlIGlvX3VyaW5nIHdhaXRpZCBjb21tYW5kIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBjb3B5aW5nIGBzaWdpbmZvYCBkYXRhIHRvIHVzZXIgc3BhY2UgKGBpb193YWl0aWRfY29weV9zaWApIHdoZW4gdGhlIHJlcXVlc3QgaXMgYmVpbmcgY2FuY2VsZWQgb3Igd2hlbiB0aGVyZSBpcyBubyB2YWxpZCB0YXNrIGNvbnRleHQuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCAoYGl3LVx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXHUwMDI2aXctXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNvbXBsZXRpb24gcGF0aHMgb2YgdGhlIGlvX3VyaW5nIHdhaXRpZCBjb21tYW5kIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBjb3B5aW5nIGBzaWdpbmZvYCBkYXRhIHRvIHVzZXIgc3BhY2UgKGBpb193YWl0aWRfY29weV9zaWApIHdoZW4gdGhlIHJlcXVlc3QgaXMgYmVpbmcgY2FuY2VsZWQgb3Igd2hlbiB0aGVyZSBpcyBubyB2YWxpZCB0YXNrIGNvbnRleHQuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCAoYGl3LVx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXHUwMDI2aXctXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6MDMuMzg2Nzg4MTcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MDU3NDI1Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fd2FpdGlkXCIsXG4gICAgXCJpb193YWl0aWRfY2FuY2VsXCIsXG4gICAgXCJpb193YWl0aWRfcmVtb3ZlX2FsbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbmNlbGxhdGlvbiBhbmQgY29tcGxldGlvbiBwYXRocyBvZiB0aGUgaW9fdXJpbmcgd2FpdGlkIGNvbW1hbmQgdG8gY29uZGl0aW9uYWxseSBza2lwIGNvcHlpbmcgYHNpZ2luZm9gIGRhdGEgdG8gdXNlciBzcGFjZSAoYGlvX3dhaXRpZF9jb3B5X3NpYCkgd2hlbiB0aGUgcmVxdWVzdCBpcyBiZWluZyBjYW5jZWxlZCBvciB3aGVuIHRoZXJlIGlzIG5vIHZhbGlkIHRhc2sgY29udGV4dC4gVGhlIGRhdGEgYmVpbmcgY29waWVkIChgaXctXFx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXFx1MDAyNml3LVxcdTAwM2VpbmZvLCAwLCBzaXplb2YoaXctXFx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIGZvciB0aGUgSU9SSU5HX09QX1dBSVRJRCBvcGVyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGV0aGVyIHNpZ2luZm8gaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjAzLjM4Njc5NDY3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTQ4MzQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzZGUxZGE4Yjk5NjlhMGU2M2E1ZTJlNTlmMGRjOTQyNmJkNjc0MDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTI6NTY6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW9fdXJpbmcvd2FpdGlkLmMgYi9pb191cmluZy93YWl0aWQuY1xcbmluZGV4IDMyZjY4ZmQ3ZmNkZGEuLjEyMTFmOTA1YTlkYjIgMTAwNjQ0XFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcXG4rKysgYi9pb191cmluZy93YWl0aWQuY1xcbkBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIHZvaWQgaW9fd2FpdGlkX3JlbW92ZV93cShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpXFxuK3N0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldCwgYm9vbCBjb3B5X3NpKVxcbiB7XFxuIFxcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XFxuIFxcbkBAIC0xMzcsMTMgKzEzNywxNiBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQpXFxuIFxcdGhsaXN0X2RlbF9pbml0KFxcdTAwMjZyZXEtXFx1MDAzZWhhc2hfbm9kZSk7XFxuIFxcdGlvX3dhaXRpZF9yZW1vdmVfd3EocmVxKTtcXG4gXFxuLVxcdHJldCA9IGlvX3dhaXRpZF9maW5pc2gocmVxLCByZXQpO1xcbitcXHRpZiAoY29weV9zaSlcXG4rXFx0XFx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aW9fd2FpdGlkX2ZyZWUocmVxKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJlcV9zZXRfZmFpbChyZXEpO1xcbiBcXHRpb19yZXFfc2V0X3JlcyhyZXEsIHJldCwgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4rc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxLCBib29sIGNvcHlfc2kpXFxuIHtcXG4gXFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcXG4gXFxuQEAgLTE1OSwyMSArMTYyLDMyIEBAIHN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4gXFx0aWYgKGF0b21pY19mZXRjaF9pbmMoXFx1MDAyNml3LVxcdTAwM2VyZWZzKSBcXHUwMDI2IElPX1dBSVRJRF9SRUZfTUFTSylcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7XFxuK1xcdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQsIGNvcHlfc2kpO1xcbiBcXHRpb19yZXFfcXVldWVfdHdfY29tcGxldGUocmVxLCAtRUNBTkNFTEVEKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuK3tcXG4rXFx0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG4re1xcbitcXHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xcbit9XFxuK1xcbiBpbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcXG4gXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuIHtcXG4tXFx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFxcdTAwMjZjdHgtXFx1MDAzZXdhaXRpZF9saXN0LCBfX2lvX3dhaXRpZF9jYW5jZWwpO1xcbitcXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZShjdHgsIGNkLCBpc3N1ZV9mbGFncywgXFx1MDAyNmN0eC1cXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xcbiB9XFxuIFxcbiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcXG4gXFx0XFx0XFx0ICBib29sIGNhbmNlbF9hbGwpXFxuIHtcXG4tXFx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgXFx1MDAyNmN0eC1cXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsIF9faW9fd2FpdGlkX2NhbmNlbCk7XFxuK1xcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXdhaXRpZF9saXN0LCBjYW5jZWxfYWxsLFxcbitcXHRcXHRcXHRcXHQgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpb193YWl0aWRfZHJvcF9pc3N1ZV9yZWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuQEAgLTIwMiw2ICsyMTYsMTEgQEAgc3RhdGljIHZvaWQgaW9fd2FpdGlkX2NiKHN0cnVjdCBpb190d19yZXEgdHdfcmVxLCBpb190d190b2tlbl90IHR3KVxcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcXG4rXFx0aWYgKHVubGlrZWx5KHR3LmNhbmNlbCkpIHtcXG4rXFx0XFx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgZmFsc2UpO1xcbitcXHRcXHRpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHRyZXQgPSBfX2RvX3dhaXQoXFx1MDAyNml3YS1cXHUwMDNld28pO1xcbiBcXG5AQCAtMjI5LDcgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQpO1xcbitcXHRpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQsIHRydWUpO1xcbiBcXHRpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6MDQuODQzMTk5MDI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTcyODcyMzA5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb193YWl0aWRcIixcbiAgICBcImlvX3dhaXRpZF9jYW5jZWxcIixcbiAgICBcImlvX3dhaXRpZF9yZW1vdmVfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbmNlbGxhdGlvbiBsb2dpYyBmb3IgdGhlIElPUklOR19PUF9XQUlUSUQgb3BlcmF0aW9uIGluIGlvX3VyaW5nLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgd2hldGhlciBzaWdpbmZvIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIGR1cmluZyBjYW5jZWxsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGlvX3VyaW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhM2RlMWRhOGI5OTY5YTBlNjNhNWUyZTU5ZjBkYzk0MjZiZDY3NDA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTI6NTY6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi4xMjExZjkwNWE5ZGIyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbisrKyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9yZW1vdmVfd3Eoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbitzdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQsIGJvb2wgY29weV9zaSlcbiB7XG4gXHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xuIFxuQEAgLTEzNywxMyArMTM3LDE2IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbiBcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUpO1xuIFx0aW9fd2FpdGlkX3JlbW92ZV93cShyZXEpO1xuIFxuLVx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4rXHRpZiAoY29weV9zaSlcbitcdFx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4rXHRlbHNlXG4rXHRcdGlvX3dhaXRpZF9mcmVlKHJlcSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuK3N0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgYm9vbCBjb3B5X3NpKVxuIHtcbiBcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XG4gXG5AQCAtMTU5LDIxICsxNjIsMzIgQEAgc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIFx0aWYgKGF0b21pY19mZXRjaF9pbmMoXHUwMDI2aXctXHUwMDNlcmVmcykgXHUwMDI2IElPX1dBSVRJRF9SRUZfTUFTSylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7XG4rXHRpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBjb3B5X3NpKTtcbiBcdGlvX3JlcV9xdWV1ZV90d19jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXG4re1xuK1x0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbit7XG4rXHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xuK31cbitcbiBpbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4ge1xuLVx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFx1MDAyNmN0eC1cdTAwM2V3YWl0aWRfbGlzdCwgX19pb193YWl0aWRfY2FuY2VsKTtcbitcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xuIH1cbiBcbiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbiBcdFx0XHQgIGJvb2wgY2FuY2VsX2FsbClcbiB7XG4tXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsIF9faW9fd2FpdGlkX2NhbmNlbCk7XG4rXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsXG4rXHRcdFx0XHQgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpb193YWl0aWRfZHJvcF9pc3N1ZV9yZWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5AQCAtMjAyLDYgKzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRpbnQgcmV0O1xuIFxuIFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcbitcdGlmICh1bmxpa2VseSh0dy5jYW5jZWwpKSB7XG4rXHRcdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQsIGZhbHNlKTtcbitcdFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdHJldCA9IF9fZG9fd2FpdChcdTAwMjZpd2EtXHUwMDNld28pO1xuIFxuQEAgLTIyOSw3ICsyNDgsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIHJldCk7XG4rXHRpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQsIHRydWUpO1xuIFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6MDQuODQzMjAwNzc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE0OTE4NjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGlvX3VyaW5nIFdhaXRpZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy93YWl0aWQuY2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZm9jdXNlZCBtb2RpZmljYXRpb24sIHdpdGggc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvIGhvdyBgd2FpdGlkYCBjb21wbGV0aW9uIGFuZCBjYW5jZWxsYXRpb24gYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGNvbnRleHQuIFNwZWNpZmljYWxseSwgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgYGJvb2wgY29weV9zaWAgYXJndW1lbnQgdG8gYm90aCBgaW9fd2FpdGlkX2NvbXBsZXRlYCBhbmQgYF9faW9fd2FpdGlkX2NhbmNlbGAuIFRoZXkndmUgYWxzbyBhZGRlZCB0aGVzZSBgaW9fd2FpdGlkX2NhbmNlbF9jYmAgYW5kIGBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYmAgY2FsbGJhY2tzLiBUaGUgZXhpc3RpbmcgYGlvX3dhaXRpZF9jYW5jZWxgLCBgaW9fd2FpdGlkX3JlbW92ZV9hbGxgIGZ1bmN0aW9ucyBoYXZlIGFsc28gYmVlbiBhbHRlcmVkLiBBbmQgZmluYWxseSwgYGlvX3dhaXRpZF9jYmAgaXMgbW9kaWZpZWQgdG8gbWFuYWdlIGNhbmNlbGxhdGlvbnMgc2lnbmFsZWQgdGhyb3VnaCBgdHcuY2FuY2VsYCBhbmQsIGNydWNpYWxseSwgdG8gY2FsbCBgaW9fd2FpdGlkX2NvbXBsZXRlYCB3aXRoIGAtRUNBTkNFTEVEYCBhbmQgYGZhbHNlYCBmb3IgYGNvcHlfc2lgIGluIHRob3NlIGNhc2VzLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjbGVhciBjaGFuZ2UgaW4gdGhlIGlvX3VyaW5nIHdhaXRpZCBpbXBsZW1lbnRhdGlvbi4gU2luY2UgaXQgZGVhbHMgd2l0aCBjb21wbGV0aW9uIGFuZCBjYW5jZWxsYXRpb24sIEknZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgYmVoYXZpbmcgYXMgZXhwZWN0ZWQgYW5kIHRoZXJlIGFyZSBubyBuZXcgZWRnZSBjYXNlcy5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBpb191cmluZy4gSSBiZWxpZXZlIHRoZSBwcmltYXJ5IG9uZSBpcyBgQ09ORklHX0lPX1VSSU5HYCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gdmVyaWZ5LlxuXG5Ob3csIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBmdW5jdGlvbnMgc3VjaCBhcyBgaW9fd2FpdGlkX2NhbmNlbGAsIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAsIGBpb193YWl0aWRfY2JgLCBgaW9fd2FpdGlkX2NvbXBsZXRlYCwgYW5kIGBfX2lvX3dhaXRpZF9jYW5jZWxgIGluIGBpb191cmluZy93YWl0aWQuY2AsIGFzIHRoZXNlIGFyZSB0aGUgb25lcyBiZWluZyBkaXJlY3RseSBtb2RpZmllZC5cblxuRmluYWxseSwgSSdsbCBwZXJmb3JtIGEgc2VhcmNoIHdpdGhpbiBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBvdGhlciBmaWxlcyBmb3IgaW5zdGFuY2VzIG9mIGBpb193YWl0aWRfY2FuY2VsYCBhbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlaXIgdXNhZ2UgYW5kIGhvdyB0aGUgcGF0Y2ggaW1wYWN0cyB0aGUgd2lkZXIgY29kZSBiYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6MTAuOTkyMzk4MTQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTQyMDgxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fd2FpdGlkX2NhbmNlbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9jYW5jZWwuYz0xMDU9aW50IGlvX3RyeV9jYW5jZWwoc3RydWN0IGlvX3VyaW5nX3Rhc2sgKnRjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuLS1cXG5pb191cmluZy9jYW5jZWwuYy0xMjQtXFxuaW9fdXJpbmcvY2FuY2VsLmM6MTI1OlxcdHJldCA9IGlvX3dhaXRpZF9jYW5jZWwoY3R4LCBjZCwgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2NhbmNlbC5jLTEyNi1cXHRpZiAocmV0ICE9IC1FTk9FTlQpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0xMjg9c3RhdGljIHZvaWQgaW9fd2FpdGlkX2NvbXBsZXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0LCBib29sIGNvcHlfc2kpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xNDgtXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTQ5OnN0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgYm9vbCBjb3B5X3NpKVxcbmlvX3VyaW5nL3dhaXRpZC5jLTE1MC17XFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xNjktXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTcwOnN0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXFxuaW9fdXJpbmcvd2FpdGlkLmMtMTcxLXtcXG5pb191cmluZy93YWl0aWQuYzoxNzI6XFx0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTE3My19XFxuaW9fdXJpbmcvd2FpdGlkLmMtMTc0LVxcbmlvX3VyaW5nL3dhaXRpZC5jOjE3NTpzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcXG5pb191cmluZy93YWl0aWQuYy0xNzYte1xcbmlvX3VyaW5nL3dhaXRpZC5jOjE3NzpcXHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTE3OC19XFxuaW9fdXJpbmcvd2FpdGlkLmMtMTc5LVxcbmlvX3VyaW5nL3dhaXRpZC5jOjE4MDppbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcXG5pb191cmluZy93YWl0aWQuYy0xODEtXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuaW9fdXJpbmcvd2FpdGlkLmMtMTgyLXtcXG5pb191cmluZy93YWl0aWQuYzoxODM6XFx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFxcdTAwMjZjdHgtXFx1MDAzZXdhaXRpZF9saXN0LCBpb193YWl0aWRfY2FuY2VsX2NiKTtcXG5pb191cmluZy93YWl0aWQuYy0xODQtfVxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmM9MTg2PWJvb2wgaW9fd2FpdGlkX3JlbW92ZV9hbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtMTg5LVxcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlX2FsbChjdHgsIHRjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXdhaXRpZF9saXN0LCBjYW5jZWxfYWxsLFxcbmlvX3VyaW5nL3dhaXRpZC5jOjE5MDpcXHRcXHRcXHRcXHQgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7XFxuaW9fdXJpbmcvd2FpdGlkLmMtMTkxLX1cXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5oPTExPWludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvd2FpdGlkLmg6MTI6aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuaW9fdXJpbmcvd2FpdGlkLmgtMTMtXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NjoxMy41MDY2MTI1OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTkwODQwODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIHRoZSBpb191cmluZyB3YWl0aWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZGlnZ2luZyBpbnRvIHRoZSBgaW9fd2FpdGlkYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgaW9fd2FpdGlkX2NhbmNlbGAsIGBpb193YWl0aWRfcmVtb3ZlX2FsbGAsIGFuZCBgaW9fd2FpdGlkX2NiYC4gVGhvc2UgYXJlIGNydWNpYWwgZnVuY3Rpb25zLCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNsZWFudXAgb2Ygd2FpdCBvcGVyYXRpb25zIGluaXRpYXRlZCB0aHJvdWdoIGBpb193YWl0aWRgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgd2lsbCBiZSBhaW1lZCBhdCBpbXByb3ZpbmcgdGhlIGhhbmRsaW5nIG9mIHdhaXRpbmcgZm9yIGkvbyBjb21wbGV0aW9ucywgcG9zc2libHkgYWRkaW5nIG1vcmUgcm9idXN0IGNhbmNlbGxhdGlvbiBtZWNoYW5pc21zLCBvciBtYXliZSBkZWFsaW5nIHdpdGggc29tZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIHJlbGF0ZWQgdG8gaG93IHRoZSBjYWxsYmFja3MgYW5kIGNvbXBsZXRpb24gZXZlbnRzIGFyZSBoYW5kbGVkLlxuXG5gaW9fd2FpdGlkYCBpdHNlbGYgaXMsIG9mIGNvdXJzZSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBgd2FpdGlkYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBpb191cmluZzsgdGhhdCdzIHdoZXJlIGFsbCB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgb3JpZ2luYXRlcy4gU28sIGxldCdzIGRpdmUgaW50byBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgY2hhbmdlZCBhbmQgaG93IHRoZXNlIG1vZGlmaWNhdGlvbnMgaW1wYWN0IHRoZSBvdmVyYWxsIGZsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZGV2aWwgaXMgaGlkaW5nLCB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byBzb21lIGxvY2tpbmcgaXNzdWVzLCBzaWduYWwgaGFuZGxpbmcgb3IgYW55dGhpbmcgdG8gZG8gd2l0aCBob3cgdGhlIHVzZXIgcHJvZ3JhbSBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU5MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjE5LjAwNTY5ODkwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzExNTAxODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBpb193YWl0aWRcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy93YWl0aWQuYz0yNzk9aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0zMDAtXFxuaW9fdXJpbmcvd2FpdGlkLmM6MzAxOmludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG5pb191cmluZy93YWl0aWQuYy0zMDIte1xcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmg9MTA9aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpO1xcbmlvX3VyaW5nL3dhaXRpZC5oOjExOmludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvd2FpdGlkLmgtMTItaW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjIxLjcxNzIwODY1NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTU1OTQ2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHN5bWJvbHM6XG5cbioqRm9jdXNpbmcgSW4gb24gSU8gV2FpdCBNYW5hZ2VtZW50KipcblxuUmlnaHQsIGBpb193YWl0aWRgIGFuZCBgaW9fd2FpdGlkX2NhbmNlbGAg4oCTIHRob3NlIHR3byBhcmUgZGVmaW5pdGVseSBrZXkuIFNlZW1zIGxpa2UgdGhleSdyZSB0aGUgY29yZSBwcmltaXRpdmVzIGZvciwgd2VsbCwgd2FpdGluZyBmb3IgSS9PIGNvbXBsZXRpb24gaW4gYSBtb3JlIGdyYW51bGFyIHdheSwgbGlrZWx5IHRvIGF2b2lkIGJsb2NraW5nIHRoZSB3aG9sZSBwcm9jZXNzLiBBbmQgb2YgY291cnNlLCB0aGUgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBmdW5jdGlvbi4uLiB0aGF0J3MgaW50ZXJlc3RpbmcuIEkgYmV0IGl0IGlzIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgY2xlYW4tdXAgb2YgcGVuZGluZyB3YWl0cy4gR290dGEgc2VlIGhvdyB0aGlzIG9uZSBnZXRzIHVzZWQgaW4gcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NjoyNS4yNzI4MDYxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTEzMTUwODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dhaXRpZF9yZW1vdmVfYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2NhbmNlbC5jPTUxNT1fX2NvbGQgYm9vbCBpb191cmluZ190cnlfY2FuY2VsX3JlcXVlc3RzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvY2FuY2VsLmMtNTYwLVxcdHJldCB8PSBpb19wb2xsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBjYW5jZWxfYWxsKTtcXG5pb191cmluZy9jYW5jZWwuYzo1NjE6XFx0cmV0IHw9IGlvX3dhaXRpZF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgY2FuY2VsX2FsbCk7XFxuaW9fdXJpbmcvY2FuY2VsLmMtNTYyLVxcdHJldCB8PSBpb19mdXRleF9yZW1vdmVfYWxsKGN0eCwgdGN0eCwgY2FuY2VsX2FsbCk7XFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0xODA9aW50IGlvX3dhaXRpZF9jYW5jZWwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19jYW5jZWxfZGF0YSAqY2QsXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xODUtXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTg2OmJvb2wgaW9fd2FpdGlkX3JlbW92ZV9hbGwoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb191cmluZ190YXNrICp0Y3R4LFxcbmlvX3VyaW5nL3dhaXRpZC5jLTE4Ny1cXHRcXHRcXHQgIGJvb2wgY2FuY2VsX2FsbClcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5oPTEyPWludCBpb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fY2FuY2VsX2RhdGEgKmNkLFxcbmlvX3VyaW5nL3dhaXRpZC5oLTEzLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy93YWl0aWQuaDoxNDpib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcXG5pb191cmluZy93YWl0aWQuaC0xNS1cXHRcXHRcXHQgIGJvb2wgY2FuY2VsX2FsbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjI4LjE4NTk2NTgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk3NDU1MTYzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBpb191cmluZyBDYW5jZWxsYXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgd2l0aGluIGBpb191cmluZ2AuIEl0IGxvb2tzIGxpa2UgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBpcyB0aGUgY2xlYW51cCBmdW5jdGlvbiB0cmlnZ2VyZWQgd2hlbiB3ZSB0cnkgdG8gY2FuY2VsIHJlcXVlc3RzIGZyb20gYGlvX3VyaW5nX3RyeV9jYW5jZWxfcmVxdWVzdHNgLiBGdXJ0aGVyIGRvd24gdGhlIGNoYWluLCBgaW9fd2FpdGlkX2NhbmNlbGAgZ2V0cyBjYWxsZWQgZnJvbSBgaW9fdHJ5X2NhbmNlbGAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRoZSBjYW5jZWxsYXRpb24gaXRzZWxmLiBBbmQgSSBzZWUgdGhhdCB0aGUgYGlvX3dhaXRpZGAgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB3aGVuIGV4ZWN1dGluZyB0aGUgaW9fdXJpbmcgb3Bjb2Rlcy5cblxuTm93LCBiZWZvcmUgSSBnbyBkZWVwZXIgaW50byB0aGlzLCBsZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEJlc2lkZXMgdGhlIG9idmlvdXMgb25lLCBgQ09ORklHX0lPX1VSSU5HYCwgYXJlIHRoZXJlIGFueSBvdGhlciBzZXR0aW5ncyBvciBmbGFncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzIGNhbmNlbGxhdGlvbiBiZWhhdmlvcj8gSXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gY292ZXIgYWxsIGJhc2VzIHdoZW4gZGlzc2VjdGluZyBhIGNyaXRpY2FsIHBhdGggbGlrZSB0aGlzIG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgxMCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU2OjQ3LjkzMTQ4NTI3NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzOTUwNjYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTctXFxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQxLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTY6NTAuMTcxMDAxMTU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODM4NDY0MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZGVlcGx5IGZhbWlsaWFyIHdpdGggYElPX1VSSU5HYCBhbmQga2VybmVsIGludGVybmFscy5cblxuKipBbmFseXppbmcgdGhlIGBJT19VUklOR2AgV2FpdElEIEJ1ZyBGaXgqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgb24gYElPX1VSSU5HYCBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGRlc2NyaXB0aW9uIGluZGljYXRlcyBhIGJ1Z2ZpeCB3aXRoaW4gdGhlIGBpb193YWl0aWRfY29tcGxldGVgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGVyZSdzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIHNpZ25hbCBpbmZvcm1hdGlvbiAoYHNpZ2luZm9gKSBpcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB1bm5lY2Vzc2FyaWx5IG9yIGF0IGFuIHVuc2FmZSB0aW1lLCBsaWtlbHkgZHVyaW5nIGFuIG9wZXJhdGlvbiBjYW5jZWxsYXRpb24uIFRoaXMgaXMgYSBjb21tb24gY2xhc3Mgb2YgcHJvYmxlbSwgYW5kIEkgYXBwcmVjaWF0ZSB0aGUgZGV0YWlsIGdpdmVuLiBUaGUgcGF0Y2ggaXMgZnVuY3Rpb25hbGx5IGZvY3VzZWQgb24gdGhlIGNvcmUgYGlvX3VyaW5nYCB3YWl0aWQgbG9naWMuIFRoaXMgaXMgZ29vZCBhcyBpdCBrZWVwcyB0aGUgY2hhbmdlIGNvbmNpc2UgYW5kIHRhcmdldGVkLiBUaGUgXCJXb3J0aEZ1enppbmc6IHRydWVcIiBmbGFnIGlzIGEgd2VsY29tZSBpbmRpY2F0b3IuIEl0IGRlbW9uc3RyYXRlcyB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoaXMgaXMgYSBhcmVhIHRoYXQgY291bGQgaGF2ZSBzdWJ0bGUgYnVncy5cblxuVGhlIHN1Z2dlc3RlZCBmb2N1cyBzeW1ib2xzLCBgaW9fd2FpdGlkYCwgYGlvX3dhaXRpZF9jYW5jZWxgLCBhbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCwgc2VlbSBhcHByb3ByaWF0ZSBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBkZXNjcmliZWQgYnVnLiBJdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybSBgaW9fd2FpdGlkYCBpcywgaW4gZmFjdCwgdGhlIGNvcnJlY3QgZW50cnkgcG9pbnQsIHdoaWNoIGl0IGFwcGVhcnMgdG8gYmUsIGFzIGl0IGhhbmRsZXMgdGhlIGBJT1JJTkdfT1BfV0FJVElEYCBvcGVyYXRpb24uIFRoZSByZW1pbmRlciB0byBjb25maXJtIGBpb193YWl0aWRfY2FuY2VsYCBhbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBhcmUgbm90IHN0YXRpYyBpcyByZWxldmFudCB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGVyZSBhcmUgZXh0ZXJuYWwgcG9pbnRzIG9mIGNvbnRlbnRpb24uIExvb2tzIGxpa2UgdGhleSdyZSBub3QsIHdoaWNoIGlzIGdvb2QgdG8ga25vdyBmb3IgYnJvYWRlciBpbXBhY3QgYW5hbHlzaXMuXG5cbkJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHJlYXNvbmFibGUgdG8gcHJvY2VlZCB3aXRoIHVzaW5nIHRoZSBzZXQtcmVzdWx0cy4gSXQgbG9va3MgbGlrZSBhIHNvbGlkIHBhdGNoIHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHNhZmV0eSBpc3N1ZSBhbmQgaXMgd2VsbC1kb2N1bWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDE3LCJPdXRwdXRUb2tlbnMiOjEyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NzowMi4wMDk0Njc1NDRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NTkyNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fd2FpdGlkXCIsXG4gICAgXCJpb193YWl0aWRfY2FuY2VsXCIsXG4gICAgXCJpb193YWl0aWRfcmVtb3ZlX2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gbG9naWMgZm9yIHRoZSBJT1JJTkdfT1BfV0FJVElEIG9wZXJhdGlvbiBpbiBpb191cmluZywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIHdoZXRoZXIgc2lnaW5mbyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBkdXJpbmcgY2FuY2VsbGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBpb191cmluZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX3dhaXRpZFwiLFxuICAgIFwiaW9fd2FpdGlkX2NhbmNlbFwiLFxuICAgIFwiaW9fd2FpdGlkX3JlbW92ZV9hbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIGZvciB0aGUgSU9SSU5HX09QX1dBSVRJRCBvcGVyYXRpb24gaW4gaW9fdXJpbmcsIHNwZWNpZmljYWxseSBjaGFuZ2luZyB3aGV0aGVyIHNpZ2luZm8gaXMgY29waWVkIHRvIHVzZXIgc3BhY2UgZHVyaW5nIGNhbmNlbGxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgaW9fdXJpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU3OjAyLjEzMDQzNDU2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzEzNzY4OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTc6MDIuMTMwOTc5NjI1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNzMxMzIxOTQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbmNlbGxhdGlvbiBhbmQgY29tcGxldGlvbiBwYXRocyBvZiB0aGUgaW9fdXJpbmcgd2FpdGlkIGNvbW1hbmQgdG8gY29uZGl0aW9uYWxseSBza2lwIGNvcHlpbmcgYHNpZ2luZm9gIGRhdGEgdG8gdXNlciBzcGFjZSAoYGlvX3dhaXRpZF9jb3B5X3NpYCkgd2hlbiB0aGUgcmVxdWVzdCBpcyBiZWluZyBjYW5jZWxlZCBvciB3aGVuIHRoZXJlIGlzIG5vIHZhbGlkIHRhc2sgY29udGV4dC4gVGhlIGRhdGEgYmVpbmcgY29waWVkIChgaXctXFx1MDAzZWluZm9gKSBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvIGluIGBpb193YWl0aWRfcHJlcGAgdmlhIGBtZW1zZXQoXFx1MDAyNml3LVxcdTAwM2VpbmZvLCAwLCBzaXplb2YoaXctXFx1MDAzZWluZm8pKTtgLCBhbmQgdGhlIGNvcHkgb3BlcmF0aW9uIHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgdG8gd3JpdGUgaW5kaXZpZHVhbCBmaWVsZHMgcmF0aGVyIHRoYW4gY29weWluZyBhIHN0cnVjdCB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIHBhZGRpbmcuIFRoZSBidWcgYmVpbmcgZml4ZWQgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaW52YWxpZCB1c2VyIHNwYWNlIG1lbW9yeSBhY2Nlc3MgKGUuZy4sIHdyaXRpbmcgdG8gYSB3cm9uZyBvciBkZXN0cm95ZWQgYWRkcmVzcyBzcGFjZSBkdXJpbmcgdGFzayBleGl0L3JpbmcgdGVhcmRvd24pLCB3aGljaCBpcyBhIGZ1bmN0aW9uYWwgb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZSBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhM2RlMWRhOGI5OTY5YTBlNjNhNWUyZTU5ZjBkYzk0MjZiZDY3NDA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTI6NTY6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy93YWl0aWQuYyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5pbmRleCAzMmY2OGZkN2ZjZGRhLi4xMjExZjkwNWE5ZGIyIDEwMDY0NFxuLS0tIGEvaW9fdXJpbmcvd2FpdGlkLmNcbisrKyBiL2lvX3VyaW5nL3dhaXRpZC5jXG5AQCAtMTI1LDcgKzEyNSw3IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9yZW1vdmVfd3Eoc3RydWN0IGlvX2tpb2NiICpyZXEpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbitzdGF0aWMgdm9pZCBpb193YWl0aWRfY29tcGxldGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCByZXQsIGJvb2wgY29weV9zaSlcbiB7XG4gXHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xuIFxuQEAgLTEzNywxMyArMTM3LDE2IEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jb21wbGV0ZShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcbiBcdGhsaXN0X2RlbF9pbml0KFx1MDAyNnJlcS1cdTAwM2VoYXNoX25vZGUpO1xuIFx0aW9fd2FpdGlkX3JlbW92ZV93cShyZXEpO1xuIFxuLVx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4rXHRpZiAoY29weV9zaSlcbitcdFx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XG4rXHRlbHNlXG4rXHRcdGlvX3dhaXRpZF9mcmVlKHJlcSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXFfc2V0X2ZhaWwocmVxKTtcbiBcdGlvX3JlcV9zZXRfcmVzKHJlcSwgcmV0LCAwKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuK3N0YXRpYyBib29sIF9faW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgYm9vbCBjb3B5X3NpKVxuIHtcbiBcdHN0cnVjdCBpb193YWl0aWQgKml3ID0gaW9fa2lvY2JfdG9fY21kKHJlcSwgc3RydWN0IGlvX3dhaXRpZCk7XG4gXG5AQCAtMTU5LDIxICsxNjIsMzIgQEAgc3RhdGljIGJvb2wgX19pb193YWl0aWRfY2FuY2VsKHN0cnVjdCBpb19raW9jYiAqcmVxKVxuIFx0aWYgKGF0b21pY19mZXRjaF9pbmMoXHUwMDI2aXctXHUwMDNlcmVmcykgXHUwMDI2IElPX1dBSVRJRF9SRUZfTUFTSylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCk7XG4rXHRpb193YWl0aWRfY29tcGxldGUocmVxLCAtRUNBTkNFTEVELCBjb3B5X3NpKTtcbiBcdGlvX3JlcV9xdWV1ZV90d19jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlvX3dhaXRpZF9jYW5jZWxfY2Ioc3RydWN0IGlvX2tpb2NiICpyZXEpXG4re1xuK1x0cmV0dXJuIF9faW9fd2FpdGlkX2NhbmNlbChyZXEsIHRydWUpO1xuK31cbitcbitzdGF0aWMgYm9vbCBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSlcbit7XG4rXHRyZXR1cm4gX19pb193YWl0aWRfY2FuY2VsKHJlcSwgZmFsc2UpO1xuK31cbitcbiBpbnQgaW9fd2FpdGlkX2NhbmNlbChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2NhbmNlbF9kYXRhICpjZCxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4ge1xuLVx0cmV0dXJuIGlvX2NhbmNlbF9yZW1vdmUoY3R4LCBjZCwgaXNzdWVfZmxhZ3MsIFx1MDAyNmN0eC1cdTAwM2V3YWl0aWRfbGlzdCwgX19pb193YWl0aWRfY2FuY2VsKTtcbitcdHJldHVybiBpb19jYW5jZWxfcmVtb3ZlKGN0eCwgY2QsIGlzc3VlX2ZsYWdzLCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGlvX3dhaXRpZF9jYW5jZWxfY2IpO1xuIH1cbiBcbiBib29sIGlvX3dhaXRpZF9yZW1vdmVfYWxsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fdXJpbmdfdGFzayAqdGN0eCxcbiBcdFx0XHQgIGJvb2wgY2FuY2VsX2FsbClcbiB7XG4tXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsIF9faW9fd2FpdGlkX2NhbmNlbCk7XG4rXHRyZXR1cm4gaW9fY2FuY2VsX3JlbW92ZV9hbGwoY3R4LCB0Y3R4LCBcdTAwMjZjdHgtXHUwMDNld2FpdGlkX2xpc3QsIGNhbmNlbF9hbGwsXG4rXHRcdFx0XHQgICAgICAgdGN0eCA/IGlvX3dhaXRpZF9jYW5jZWxfY2IgOiBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBpb193YWl0aWRfZHJvcF9pc3N1ZV9yZWYoc3RydWN0IGlvX2tpb2NiICpyZXEpXG5AQCAtMjAyLDYgKzIxNiwxMSBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRpbnQgcmV0O1xuIFxuIFx0aW9fdHdfbG9jayhjdHgsIHR3KTtcbitcdGlmICh1bmxpa2VseSh0dy5jYW5jZWwpKSB7XG4rXHRcdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIC1FQ0FOQ0VMRUQsIGZhbHNlKTtcbitcdFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdHJldCA9IF9fZG9fd2FpdChcdTAwMjZpd2EtXHUwMDNld28pO1xuIFxuQEAgLTIyOSw3ICsyNDgsNyBAQCBzdGF0aWMgdm9pZCBpb193YWl0aWRfY2Ioc3RydWN0IGlvX3R3X3JlcSB0d19yZXEsIGlvX3R3X3Rva2VuX3QgdHcpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlvX3dhaXRpZF9jb21wbGV0ZShyZXEsIHJldCk7XG4rXHRpb193YWl0aWRfY29tcGxldGUocmVxLCByZXQsIHRydWUpO1xuIFx0aW9fcmVxX3Rhc2tfY29tcGxldGUodHdfcmVxLCB0dyk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTc6MDIuMTMwOTgxNzI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTEwODA5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBpb191cmluZyB3YWl0aWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaW9fdXJpbmcvd2FpdGlkLmNgIHBhdGNoLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYSBuZXcgYm9vbGVhbiBwYXJhbWV0ZXIsIGBjb3B5X3NpYCwgYmVpbmcgaW50cm9kdWNlZCBpbnRvIHRoZSBgaW9fd2FpdGlkX2NvbXBsZXRlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIGlmIGBjb3B5X3NpYCBpcyB0cnVlLCB0aGVuIGBpb193YWl0aWRfZmluaXNoYCBnZXRzIGNhbGxlZCB3aXRoIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gY29kZS4gQW5kIGlmIGl0J3MgZmFsc2UsIHRoZW4gaXQncyBgaW9fd2FpdGlkX2ZyZWVgLCBnb3QgaXQuIFRoYXQgaW1tZWRpYXRlbHkgaW1wbGllcyBhIHNwbGl0IGluIGhvdyB0aGUgcmVxdWVzdCBpcyBoYW5kbGVkIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGBzaWdpbmZvYCBkYXRhIG5lZWRzIHRvIGJlIGNvcGllZCBvdXQuXG5cbk5vdywgd2hlcmUgZWxzZSBkbyB3ZSBzZWUgdGhpcyBgY29weV9zaWAgcGFyYW1ldGVyPyBBaCwgYF9faW9fd2FpdGlkX2NhbmNlbGAgdGFrZXMgaXQgdG9vLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgdGhlIGNhbmNlbCBsb2dpYyBuZWVkcyB0byBhbGlnbiB3aXRoIHRoZSBjb21wbGV0aW9uIGxvZ2ljLiBGdXJ0aGVyIGRvd24sIGBpb193YWl0aWRfY2FuY2VsX2NiYCBwYXNzZXMgYHRydWVgIOKAkyBpdCBjb3BpZXMgdGhlIGBzaWdpbmZvYCwgd2hpbGUgYGlvX3dhaXRpZF9jYW5jZWxfbm9jb3B5X2NiYCBwYXNzZXMgYGZhbHNlYC4gR290Y2hhLiBBbmQgYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBjbGV2ZXJseSB1c2VzIHRoZSBgbm9jb3B5X2NiYCBpZiB0aGUgdGFzayBjb250ZXh0IGlzIE5VTEwsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIHJlbW92YWwuXG5cbkhtbSwgdGhpcyBgaW9fd2FpdGlkX2NiYCBpcyBpbnRlcmVzdGluZy4gSXQgaGFuZGxlcyB0aGUgYHR3LmNhbmNlbGAgZXZlbnQgYnkgY2FsbGluZyBgaW9fd2FpdGlkX2NvbXBsZXRlYCB3aXRoIGEgY2FuY2VsbGF0aW9uIGVycm9yIGFuZCwgaW1wb3J0YW50bHksIGBmYWxzZWAgZm9yIGBjb3B5X3NpYC4gU28sIG5vIGNvcHlpbmcgb2YgdGhlIGBzaWdpbmZvYCB1cG9uIGNhbmNlbGxhdGlvbi4gVGhhdCdzIGdvb2QsIG5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgYGlvX3dhaXRpZF9maW5pc2hgIGRvZXMuLi4gdGhhdCB3aWxsIGxpa2VseSBnaXZlIGZ1cnRoZXIgaW5zaWdodCBvbiB0aGUgdXNlIG9mIGBjb3B5X3NpYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU3OjA3LjU0MjA3NjIyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgwOTUzODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3dhaXRpZF9maW5pc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvd2FpdGlkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvd2FpdGlkLmM9Njg9c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NvcHlfc2koc3RydWN0IGlvX2tpb2NiICpyZXEsIGludCBzaWdubylcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jLTk2LVxcbmlvX3VyaW5nL3dhaXRpZC5jOjk3OnN0YXRpYyBpbnQgaW9fd2FpdGlkX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcXG5pb191cmluZy93YWl0aWQuYy05OC17XFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0xMjg9c3RhdGljIHZvaWQgaW9fd2FpdGlkX2NvbXBsZXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgcmV0LCBib29sIGNvcHlfc2kpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0xNDAtXFx0aWYgKGNvcHlfc2kpXFxuaW9fdXJpbmcvd2FpdGlkLmM6MTQxOlxcdFxcdHJldCA9IGlvX3dhaXRpZF9maW5pc2gocmVxLCByZXQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTE0Mi1cXHRlbHNlXFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0zMDE9aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtMzU5LVxcdGlvX3dhaXRpZF9yZW1vdmVfd3EocmVxKTtcXG5pb191cmluZy93YWl0aWQuYzozNjA6XFx0cmV0ID0gaW9fd2FpdGlkX2ZpbmlzaChyZXEsIHJldCk7XFxuaW9fdXJpbmcvd2FpdGlkLmMtMzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NzowOC4yMjMwNDE0NTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM1MDcwNzkzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0IHRocm91Z2g6XG5cbioqRGVjb25zdHJ1Y3RpbmcgaW9fd2FpdGlkX2ZpbmlzaCBhbmQgaW9fd2FpdGlkX2NvcHlfc2kqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGVzZSBkb3duLiBXaGVuIEkgc2VlIGBpb193YWl0aWRfZmluaXNoYCwgbXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBjdWxtaW5hdGlvbiBvZiBzb21lIEkvTyBvcGVyYXRpb24gd2FpdGluZy4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhpbmdzIGFyZSBmaW5hbGl6ZWQsIHRoZSBzaWduYWwgaXMgcmVjZWl2ZWQsIHRoZSByZXN1bHRzIGFyZSByZWFkeSB0byBiZSBkZWFsdCB3aXRoLiBJJ20gdGhpbmtpbmcsIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNsZWFudXAgY3JldyBhZnRlciB0aGUgYXN5bmNocm9ub3VzIEkvTyBmaXJld29ya3MuIFdl4oCZdmUgYmVlbiBwYXRpZW50bHkgd2FpdGluZywgYW5kICp0aGlzKiBpcyB0aGUgY2FsbCB0aGF0IHRpZGllcyBldmVyeXRoaW5nIHVwLiBEaWQgYW4gZXZlbnQgb2NjdXI/IERpZCBzb21ldGhpbmcgZ28gd3Jvbmc/IFRoaXMgaXMgd2hlcmUgd2UgbGVhcm4gdGhlIG91dGNvbWUuIEknbSBhbnRpY2lwYXRpbmcgZXJyb3IgaGFuZGxpbmcsIHN0YXR1cyByZXRyaWV2YWwsIGFuZCBwb3NzaWJseSBmcmVlaW5nIHVwIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9wZXJhdGlvbi4gSXQncyB0aGUgXCJyZXBvcnQgY2FyZFwiIGZ1bmN0aW9uLCBsZXR0aW5nIHVzIGtub3cgaWYgdGhlIEkvTyByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLCBmYWlsZWQsIG9yIHRlcm1pbmF0ZWQgaW4gc29tZSBvdGhlciB3YXksIHBlcmhhcHMgZHVlIHRvIGEgc2lnbmFsLlxuXG5Ob3csIGBpb193YWl0aWRfY29weV9zaWAuLi4gdGhpcyBzZWVtcyB0byBiZSBhIHN1YnRsZSwgYnV0IGltcG9ydGFudCB2YXJpYXRpb24uIFRoZSBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZSBjb3B5aW5nIG9mIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGV2ZW50IOKAkyBzcGVjaWZpY2FsbHksIGluZm9ybWF0aW9uIGhlbGQgaW4gYSBgc2lnaW5mb190YCBzdHJ1Y3R1cmUuIFNvLCB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIHRha2luZyB0aGUgZGV0YWlscyBvZiB0aGUgSS9PIGV2ZW50IGZyb20ga2VybmVsIHNwYWNlIGFuZCBwbGFjaW5nIGl0IHNvbWV3aGVyZSBhY2Nlc3NpYmxlIHRvIHVzZXIgc3BhY2UuIEl0IHNvdW5kcyBsaWtlIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYSBzaGFyZWQgbWVtb3J5IG9yIGFuIElQQyBtZWNoYW5pc20gdG8gZ2V0IGEgc2FmZSBhbmQgY29uc2lzdGVudCBjb3B5IG9mIHRoZSBgc2lnaW5mb190YCBzdHJ1Y3R1cmUuIEknbSB0aGlua2luZyBpdCdzIHByb2JhYmx5IGxlc3MgYWJvdXQgdGhlIGNvcmUgcHJvY2VzcyB3YWl0IGl0c2VsZiAodGhhdCdzIGBpb193YWl0aWRfZmluaXNoYCdzIGpvYiksIGFuZCBtb3JlIGFib3V0ICp3aGF0KiB0aGF0IHdhaXQgc2lnbmFsZWQuIEknbSBpbWFnaW5pbmcgaXQgZGVhbHMgd2l0aCBleHRyYWN0aW5nIGFueSBzcGVjaWZpYyBkZXRhaWxzLCBzdWNoIGFzIHRoZSBzaWduYWwgbnVtYmVyLCB0aGUgc291cmNlIG9mIHRoZSBzaWduYWwsIG9yIHRoZSByZWFzb24gZm9yIHRoZSB3YWl0IHRlcm1pbmF0aW5nLiBUaGUgXCJzaVwiIHN1ZmZpeCBoaW50cyBhdCBzaWduYWwgaW5mb3JtYXRpb24sIHNvIEknbSBleHBlY3RpbmcgaXQgdG8gcHJvdmlkZSBtb3JlIGdyYW51bGFyIGRhdGEgYWJvdXQgKndoeSogdGhlIEkvTyB3YWl0IGlzIGRvbmUuIEl0J3MgYWxsIGFib3V0IHByb3ZpZGluZyByaWNoIGRldGFpbCB0byB0aGUgY2FsbGVyLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgaXMgY3JpdGljYWwgdG8gdGhlIHJvYnVzdCBoYW5kbGluZyBvZiBhc3luY2hyb25vdXMgSS9PLCBhbGxvd2luZyBkZXZlbG9wZXJzIHRvIG1hbmFnZSBlcnJvcnMsIHJlY292ZXJ5IGFuZCBwcm92aWRlIHJlbGV2YW50IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1NzozMS43MzAxMjQyMTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3dhaXRpZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDY4OlxcdHN0YXRpYyBib29sIGlvX3dhaXRpZF9jb3B5X3NpKHN0cnVjdCBpb19raW9jYiAqcmVxLCBpbnQgc2lnbm8pXFxuICA2OTpcXHR7XFxuICA3MDpcXHRcXHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xcbiAgNzE6XFx0XFx0Ym9vbCByZXQ7XFxuICA3MjpcXHRcXG4gIDczOlxcdFxcdGlmICghaXctXFx1MDAzZWluZm9wKVxcbiAgNzQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGlmIChpb19pc19jb21wYXQocmVxLVxcdTAwM2VjdHgpKVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIGlvX3dhaXRpZF9jb21wYXRfY29weV9zaShpdywgc2lnbm8pO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRpZiAoIXVzZXJfd3JpdGVfYWNjZXNzX2JlZ2luKGl3LVxcdTAwM2VpbmZvcCwgc2l6ZW9mKCppdy1cXHUwMDNlaW5mb3ApKSlcXG4gIDgwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0dW5zYWZlX3B1dF91c2VyKHNpZ25vLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV9zaWdubywgRWZhdWx0KTtcXG4gIDgzOlxcdFxcdHVuc2FmZV9wdXRfdXNlcigwLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV9lcnJubywgRWZhdWx0KTtcXG4gIDg0OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5jYXVzZSwgXFx1MDAyNml3LVxcdTAwM2VpbmZvcC1cXHUwMDNlc2lfY29kZSwgRWZhdWx0KTtcXG4gIDg1OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5waWQsIFxcdTAwMjZpdy1cXHUwMDNlaW5mb3AtXFx1MDAzZXNpX3BpZCwgRWZhdWx0KTtcXG4gIDg2OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby51aWQsIFxcdTAwMjZpdy1cXHUwMDNlaW5mb3AtXFx1MDAzZXNpX3VpZCwgRWZhdWx0KTtcXG4gIDg3OlxcdFxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5zdGF0dXMsIFxcdTAwMjZpdy1cXHUwMDNlaW5mb3AtXFx1MDAzZXNpX3N0YXR1cywgRWZhdWx0KTtcXG4gIDg4OlxcdFxcdHJldCA9IHRydWU7XFxuICA4OTpcXHRkb25lOlxcbiAgOTA6XFx0XFx0dXNlcl93cml0ZV9hY2Nlc3NfZW5kKCk7XFxuICA5MTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAgOTI6XFx0RWZhdWx0OlxcbiAgOTM6XFx0XFx0cmV0ID0gZmFsc2U7XFxuICA5NDpcXHRcXHRnb3RvIGRvbmU7XFxuICA5NTpcXHR9XFxuICA5NjpcXHRcXG4gIDk3OlxcdHN0YXRpYyBpbnQgaW9fd2FpdGlkX2ZpbmlzaChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHJldClcXG4gIDk4OlxcdHtcXG4gIDk5OlxcdFxcdGludCBzaWdubyA9IDA7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuIDEwMjpcXHRcXHRcXHRzaWdubyA9IFNJR0NITEQ7XFxuIDEwMzpcXHRcXHRcXHRyZXQgPSAwO1xcbiAxMDQ6XFx0XFx0fVxcbiAxMDU6XFx0XFxuIDEwNjpcXHRcXHRpZiAoIWlvX3dhaXRpZF9jb3B5X3NpKHJlcSwgc2lnbm8pKVxcbiAxMDc6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG4gMTA4OlxcdFxcdGlvX3dhaXRpZF9mcmVlKHJlcSk7XFxuIDEwOTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMTA6XFx0fVxcbiAxMTE6XFx0XFxuIDExMjpcXHRzdGF0aWMgdm9pZCBpb193YWl0aWRfcmVtb3ZlX3dxKHN0cnVjdCBpb19raW9jYiAqcmVxKVxcbiAxMTM6XFx0e1xcbiAxMTQ6XFx0XFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcXG4gMTE1OlxcdFxcdHN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQgKmhlYWQ7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdGhlYWQgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZpdy1cXHUwMDNlaGVhZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU3OjMxLjczMDI5MDc0NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjY2NTk5NzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS2VybmVsIE1lbW9yeSBMZWFrKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBwcmV2ZW50aW5nIGBpb193YWl0aWRfY29weV9zaWAgZnJvbSBiZWluZyBjYWxsZWQgaW4gc3BlY2lmaWMgc2NlbmFyaW9zLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCBmb2N1c2VzIG9uIHNpdHVhdGlvbnMgd2hlcmUgd2UncmUgYWxyZWFkeSBjYW5jZWxpbmcgdGhlIHdhaXQgb3Igd2hlbiB0aGUgdGFzayBjb250ZXh0IGlzIG51bGwgZHVyaW5nIHJlbW92YWwuIEVzc2VudGlhbGx5LCBpdCBhcHBlYXJzIHdlJ3JlIHRyeWluZyB0byBhdm9pZCBhIGNhbGwgd2hlbiBgY29weV9zaWAgaXMgZmFsc2UuIE1ha2VzIHNlbnNlLCB0aGF0IHBhcmFtZXRlciBjb250cm9scyB0aGUgY29weWluZyBvZiBzaWduYWwgaW5mby5cblxuVGhlIGNvcmUgY29uY2VybiBoZXJlIGlzIHRoYXQgYGlvX3dhaXRpZF9jb3B5X3NpYCB1c2VzIGB1bnNhZmVfcHV0X3VzZXJgIHRvIHdyaXRlIGRhdGEgaW50byB1c2VyIHNwYWNlLiBBbmQgdGhpcyB3b3JyaWVzIG1lLiBJdCBzcGVjaWZpY2FsbHkgd3JpdGVzIGBzaWdub2AsIGAwYCwgYGl3LVx1MDAzZWluZm8uY2F1c2VgLCBgaXctXHUwMDNlaW5mby5waWRgLCBgaXctXHUwMDNlaW5mby51aWRgLCBhbmQgYGl3LVx1MDAzZWluZm8uc3RhdHVzYC4gIFRoZXNlIGFyZSBmaWVsZHMgd2l0aGluIGBpdy1cdTAwM2VpbmZvYC4gIElmIGBpdy1cdTAwM2VpbmZvYCBpcyAqdW5pbml0aWFsaXplZCogYXQgdGhlIHBvaW50IHdoZXJlIHRoaXMgd3JpdGUgaGFwcGVucywgd2UgY291bGQgYmUgbGVha2luZyBwb3RlbnRpYWxseSBzZW5zaXRpdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIHVzZXIuIFRoYXTigJlzIGFsd2F5cyBhIHNlY3VyaXR5IHJpc2sgd2UgbmVlZCB0byBhdm9pZC5cblxuQnV0IHdhaXQsIGEgYml0IG9mIGNyaXRpY2FsIHRoaW5raW5nOiBgdW5zYWZlX3B1dF91c2VyYCBpc24ndCB3cml0aW5nIHRoZSAqZW50aXJlKiBgd2FpdGlkX2luZm9gIHN0cnVjdHVyZS4gSXQncyBvbmx5IHdyaXRpbmcgc3BlY2lmaWMgKmZpZWxkcyogb2YgaXQuIFNvIHdoaWxlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBhIGNvbmNlcm4sIHdlIHByb2JhYmx5IGFyZW4ndCBsZWFraW5nIGFueSBwYWRkaW5nIHdpdGhpbiB0aGUgc3RydWN0LCBqdXN0IHRoZXNlIGRpc2NyZXRlIHZhbHVlcy4gT2theSwgc28gd2UgbmVlZCB0byB2ZXJpZnkgdGhlIHN0cnVjdCBkZWZpbml0aW9uIG9mIGB3YWl0aWRfaW5mb2AuIExldCBtZSBjaGVjayB0aGF0IHF1aWNrbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMzgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1Nzo1NC4zOTYyOTE1NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjEzNTI4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHdhaXRpZF9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy93YWl0aWQuYz0yND1zdHJ1Y3QgaW9fd2FpdGlkIHtcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jLTMxLVxcdHN0cnVjdCBzaWdpbmZvIF9fdXNlciAqaW5mb3A7XFxuaW9fdXJpbmcvd2FpdGlkLmM6MzI6XFx0c3RydWN0IHdhaXRpZF9pbmZvIGluZm87XFxuaW9fdXJpbmcvd2FpdGlkLmMtMzMtfTtcXG4tLVxcbmtlcm5lbC9leGl0LmM9MTIwNj1zdGF0aWMgaW50IHdhaXRfdGFza196b21iaWUoc3RydWN0IHdhaXRfb3B0cyAqd28sIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9leGl0LmMtMTIxMC1cXHR1aWRfdCB1aWQgPSBmcm9tX2t1aWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCB0YXNrX3VpZChwKSk7XFxua2VybmVsL2V4aXQuYzoxMjExOlxcdHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3A7XFxua2VybmVsL2V4aXQuYy0xMjEyLVxcbi0tXFxua2VybmVsL2V4aXQuYz0xMzYyPXN0YXRpYyBpbnQgd2FpdF90YXNrX3N0b3BwZWQoc3RydWN0IHdhaXRfb3B0cyAqd28sXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTEzNjQte1xcbmtlcm5lbC9leGl0LmM6MTM2NTpcXHRzdHJ1Y3Qgd2FpdGlkX2luZm8gKmluZm9wO1xcbmtlcm5lbC9leGl0LmMtMTM2Ni1cXHRpbnQgZXhpdF9jb2RlLCAqcF9jb2RlLCB3aHk7XFxuLS1cXG5rZXJuZWwvZXhpdC5jPTE0MzQ9c3RhdGljIGludCB3YWl0X3Rhc2tfY29udGludWVkKHN0cnVjdCB3YWl0X29wdHMgKndvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxua2VybmVsL2V4aXQuYy0xNDM1LXtcXG5rZXJuZWwvZXhpdC5jOjE0MzY6XFx0c3RydWN0IHdhaXRpZF9pbmZvICppbmZvcDtcXG5rZXJuZWwvZXhpdC5jLTE0MzctXFx0cGlkX3QgcGlkO1xcbi0tXFxua2VybmVsL2V4aXQuYz0xNzY4PWludCBrZXJuZWxfd2FpdGlkX3ByZXBhcmUoc3RydWN0IHdhaXRfb3B0cyAqd28sIGludCB3aGljaCwgcGlkX3QgdXBpZCxcXG5rZXJuZWwvZXhpdC5jOjE3Njk6XFx0XFx0XFx0ICBzdHJ1Y3Qgd2FpdGlkX2luZm8gKmluZm9wLCBpbnQgb3B0aW9ucyxcXG5rZXJuZWwvZXhpdC5jLTE3NzAtXFx0XFx0XFx0ICBzdHJ1Y3QgcnVzYWdlICpydSlcXG4tLVxcbmtlcm5lbC9leGl0LmMtMTgyNy1cXG5rZXJuZWwvZXhpdC5jOjE4Mjg6c3RhdGljIGxvbmcga2VybmVsX3dhaXRpZChpbnQgd2hpY2gsIHBpZF90IHVwaWQsIHN0cnVjdCB3YWl0aWRfaW5mbyAqaW5mb3AsXFxua2VybmVsL2V4aXQuYy0xODI5LVxcdFxcdFxcdCAgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKnJ1KVxcbi0tXFxua2VybmVsL2V4aXQuYz0xODQ2PVNZU0NBTExfREVGSU5FNSh3YWl0aWQsIGludCwgd2hpY2gsIHBpZF90LCB1cGlkLCBzdHJ1Y3Qgc2lnaW5mbyBfX3VzZXIgKixcXG4tLVxcbmtlcm5lbC9leGl0LmMtMTg0OS1cXHRzdHJ1Y3QgcnVzYWdlIHI7XFxua2VybmVsL2V4aXQuYzoxODUwOlxcdHN0cnVjdCB3YWl0aWRfaW5mbyBpbmZvID0gey5zdGF0dXMgPSAwfTtcXG5rZXJuZWwvZXhpdC5jLTE4NTEtXFx0bG9uZyBlcnIgPSBrZXJuZWxfd2FpdGlkKHdoaWNoLCB1cGlkLCBcXHUwMDI2aW5mbywgb3B0aW9ucywgcnUgPyBcXHUwMDI2ciA6IE5VTEwpO1xcbi0tXFxua2VybmVsL2V4aXQuYz0xOTgwPUNPTVBBVF9TWVNDQUxMX0RFRklORTUod2FpdGlkLFxcbi0tXFxua2VybmVsL2V4aXQuYy0xOTg1LVxcdHN0cnVjdCBydXNhZ2UgcnU7XFxua2VybmVsL2V4aXQuYzoxOTg2OlxcdHN0cnVjdCB3YWl0aWRfaW5mbyBpbmZvID0gey5zdGF0dXMgPSAwfTtcXG5rZXJuZWwvZXhpdC5jLTE5ODctXFx0bG9uZyBlcnIgPSBrZXJuZWxfd2FpdGlkKHdoaWNoLCBwaWQsIFxcdTAwMjZpbmZvLCBvcHRpb25zLCB1cnUgPyBcXHUwMDI2cnUgOiBOVUxMKTtcXG4tLVxcbmtlcm5lbC9leGl0LmgtNC1cXG5rZXJuZWwvZXhpdC5oOjU6c3RydWN0IHdhaXRpZF9pbmZvIHtcXG5rZXJuZWwvZXhpdC5oLTYtXFx0cGlkX3QgcGlkO1xcbi0tXFxua2VybmVsL2V4aXQuaD0xMj1zdHJ1Y3Qgd2FpdF9vcHRzIHtcXG4tLVxcbmtlcm5lbC9leGl0LmgtMTYtXFxua2VybmVsL2V4aXQuaDoxNzpcXHRzdHJ1Y3Qgd2FpdGlkX2luZm9cXHQqd29faW5mbztcXG5rZXJuZWwvZXhpdC5oLTE4LVxcdGludFxcdFxcdFxcdHdvX3N0YXQ7XFxuLS1cXG5rZXJuZWwvZXhpdC5oPTI3PWludCBrZXJuZWxfd2FpdGlkX3ByZXBhcmUoc3RydWN0IHdhaXRfb3B0cyAqd28sIGludCB3aGljaCwgcGlkX3QgdXBpZCxcXG5rZXJuZWwvZXhpdC5oOjI4OlxcdFxcdFxcdCAgc3RydWN0IHdhaXRpZF9pbmZvICppbmZvcCwgaW50IG9wdGlvbnMsXFxua2VybmVsL2V4aXQuaC0yOS1cXHRcXHRcXHQgIHN0cnVjdCBydXNhZ2UgKnJ1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTc6NTYuNzE3NjUxOTMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTkzNTY0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3Qgd2FpdGlkX2luZm9gKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgd2FpdCBpbmZvcm1hdGlvbiwgc3BlY2lmaWNhbGx5LCBob3cgaXQgc3RvcmVzIGRldGFpbHMgcmVsYXRlZCB0byBhIHByb2Nlc3MncyBleGl0LiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYGtlcm5lbC9leGl0LmhgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHdhaXRpZF9pbmZvYC4gSSdtIGd1ZXNzaW5nIHRoYXQgc3RydWN0IHdpbGwgY29udGFpbiB0aGUgY3JpdGljYWwgZGF0YSBJJ20gaW50ZXJlc3RlZCBpbjogdGhlIGV4aXQgc3RhdHVzLCBzaWduYWwgaW5mb3JtYXRpb24sIHJlc291cmNlIHVzYWdlIHN0YXRpc3RpY3MsIGFuZCBtYXliZSBldmVuIGEgcG9pbnRlciBiYWNrIHRvIHRoZSBwcm9jZXNzIGNvbnRyb2wgYmxvY2suIEl0J3MgdGhlIGx5bmNocGluIGZvciBob3cgYHdhaXRpZGAgYW5kIG90aGVyIHdhaXQtcmVsYXRlZCBzeXN0ZW0gY2FsbHMgb3BlcmF0ZS4gSSdtIGtlZW4gdG8gZGlzc2VjdCBpdCwgZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggbWVtYmVyLCBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcHJvY2VzcyBtYW5hZ2VtZW50IGFuZCBzeW5jaHJvbml6YXRpb24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6Njc1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU4OjAzLjI3NzAxMTM2NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZXhpdC5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I2lmbmRlZiBMSU5VWF9XQUlUSURfSFxcbiAgIDM6XFx0I2RlZmluZSBMSU5VWF9XQUlUSURfSFxcbiAgIDQ6XFx0XFxuICAgNTpcXHRzdHJ1Y3Qgd2FpdGlkX2luZm8ge1xcbiAgIDY6XFx0XFx0cGlkX3QgcGlkO1xcbiAgIDc6XFx0XFx0dWlkX3QgdWlkO1xcbiAgIDg6XFx0XFx0aW50IHN0YXR1cztcXG4gICA5OlxcdFxcdGludCBjYXVzZTtcXG4gIDEwOlxcdH07XFxuICAxMTpcXHRcXG4gIDEyOlxcdHN0cnVjdCB3YWl0X29wdHMge1xcbiAgMTM6XFx0XFx0ZW51bSBwaWRfdHlwZVxcdFxcdHdvX3R5cGU7XFxuICAxNDpcXHRcXHRpbnRcXHRcXHRcXHR3b19mbGFncztcXG4gIDE1OlxcdFxcdHN0cnVjdCBwaWRcXHRcXHQqd29fcGlkO1xcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHRzdHJ1Y3Qgd2FpdGlkX2luZm9cXHQqd29faW5mbztcXG4gIDE4OlxcdFxcdGludFxcdFxcdFxcdHdvX3N0YXQ7XFxuICAxOTpcXHRcXHRzdHJ1Y3QgcnVzYWdlXFx0XFx0KndvX3J1c2FnZTtcXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMjo1ODowMy4yNzcwNzA3MjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzMDk5MzgwNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGlvX3dhaXRpZF9jb3B5X3NpYCBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHdhaXRpZF9pbmZvYCBzdHJ1Y3R1cmUsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGhvbGRzIGtleSBwaWVjZXMgb2YgaW5mb3JtYXRpb246IGBwaWRgLCBgdWlkYCwgYHN0YXR1c2AsIGFuZCBgY2F1c2VgLiBOb3csIEknbSBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhpcyBmdW5jdGlvbiwgYGlvX3dhaXRpZF9jb3B5X3NpYC4gSXQgc2VlbXMgbGlrZSBpdCdzIHJlc3BvbnNpYmxlIGZvciBjb3B5aW5nIGRhdGEgZnJvbSBhbiBgaXctXHUwMDNlaW5mb2Agc3RydWN0IHRvIHRoZSB1c2VyIHNwYWNlIGJ1ZmZlciBgaXctXHUwMDNlaW5mb3BgLiBUaGUgY29kZSBzbmlwcGV0IHVzZXMgYHVuc2FmZV9wdXRfdXNlcmAgZm9yIGVhY2ggZmllbGQ6XG5cbmBgYGNcblx0dW5zYWZlX3B1dF91c2VyKHNpZ25vLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9zaWdubywgRWZhdWx0KTtcblx0dW5zYWZlX3B1dF91c2VyKDAsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX2Vycm5vLCBFZmF1bHQpO1xuXHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5jYXVzZSwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfY29kZSwgRWZhdWx0KTtcblx0dW5zYWZlX3B1dF91c2VyKGl3LVx1MDAzZWluZm8ucGlkLCBcdTAwMjZpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9waWQsIEVmYXVsdCk7XG5cdHVuc2FmZV9wdXRfdXNlcihpdy1cdTAwM2VpbmZvLnVpZCwgXHUwMDI2aXctXHUwMDNlaW5mb3AtXHUwMDNlc2lfdWlkLCBFZmF1bHQpO1xuXHR1bnNhZmVfcHV0X3VzZXIoaXctXHUwMDNlaW5mby5zdGF0dXMsIFx1MDAyNml3LVx1MDAzZWluZm9wLVx1MDAzZXNpX3N0YXR1cywgRWZhdWx0KTtcbmBgYFxuXG5UaGUgcHJvYmxlbSBpcyBpbW1lZGlhdGVseSBjbGVhciB0byBtZS4gSWYsIGFuZCB0aGlzIGlzIGEgYmlnIGlmLCBgaXctXHUwMDNlaW5mb2AgaGFzbid0IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSdyZSBnb2luZyB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludG8gdXNlciBzcGFjZS4gVGhhdCdzIGEgY2xhc3NpYyBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGFuZCBzb21ldGhpbmcgSSdkIHdhbnQgdG8gYXVkaXQgcmlnaHQgYXdheS4gTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGl3LVx1MDAzZWluZm9gIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkLCBJJ2xsIHRyYWNlIGl0cyB1c2FnZSBpbiBgaW9fdXJpbmcvd2FpdGlkLmNgIGFuZCBtYWtlIHN1cmUgaXQgaGFzIHRoZSBjb3JyZWN0IHN0YXRlLCB0byBhdm9pZCB0aGF0IG1lbW9yeSBsZWFrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTg6MTguNTg3MDEzMDg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjUxMzI2NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXctXFx1MDAzZWluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvd2FpdGlkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvd2FpdGlkLmM9NDM9c3RhdGljIGJvb2wgaW9fd2FpdGlkX2NvbXBhdF9jb3B5X3NpKHN0cnVjdCBpb193YWl0aWQgKml3LCBpbnQgc2lnbm8pXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy00Ny1cXG5pb191cmluZy93YWl0aWQuYzo0ODpcXHRpbmZvcCA9IChzdHJ1Y3QgY29tcGF0X3NpZ2luZm8gX191c2VyICopIGl3LVxcdTAwM2VpbmZvcDtcXG5pb191cmluZy93YWl0aWQuYy00OS1cXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jLTU0LVxcdHVuc2FmZV9wdXRfdXNlcigwLCBcXHUwMDI2aW5mb3AtXFx1MDAzZXNpX2Vycm5vLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjU1OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5jYXVzZSwgXFx1MDAyNmluZm9wLVxcdTAwM2VzaV9jb2RlLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjU2OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5waWQsIFxcdTAwMjZpbmZvcC1cXHUwMDNlc2lfcGlkLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjU3OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby51aWQsIFxcdTAwMjZpbmZvcC1cXHUwMDNlc2lfdWlkLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjU4OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5zdGF0dXMsIFxcdTAwMjZpbmZvcC1cXHUwMDNlc2lfc3RhdHVzLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTU5LVxcdHJldCA9IHRydWU7XFxuLS1cXG5pb191cmluZy93YWl0aWQuYz02OD1zdGF0aWMgYm9vbCBpb193YWl0aWRfY29weV9zaShzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgaW50IHNpZ25vKVxcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmMtNzItXFxuaW9fdXJpbmcvd2FpdGlkLmM6NzM6XFx0aWYgKCFpdy1cXHUwMDNlaW5mb3ApXFxuaW9fdXJpbmcvd2FpdGlkLmMtNzQtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pb191cmluZy93YWl0aWQuYy03OC1cXG5pb191cmluZy93YWl0aWQuYzo3OTpcXHRpZiAoIXVzZXJfd3JpdGVfYWNjZXNzX2JlZ2luKGl3LVxcdTAwM2VpbmZvcCwgc2l6ZW9mKCppdy1cXHUwMDNlaW5mb3ApKSlcXG5pb191cmluZy93YWl0aWQuYy04MC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuaW9fdXJpbmcvd2FpdGlkLmMtODEtXFxuaW9fdXJpbmcvd2FpdGlkLmM6ODI6XFx0dW5zYWZlX3B1dF91c2VyKHNpZ25vLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV9zaWdubywgRWZhdWx0KTtcXG5pb191cmluZy93YWl0aWQuYzo4MzpcXHR1bnNhZmVfcHV0X3VzZXIoMCwgXFx1MDAyNml3LVxcdTAwM2VpbmZvcC1cXHUwMDNlc2lfZXJybm8sIEVmYXVsdCk7XFxuaW9fdXJpbmcvd2FpdGlkLmM6ODQ6XFx0dW5zYWZlX3B1dF91c2VyKGl3LVxcdTAwM2VpbmZvLmNhdXNlLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV9jb2RlLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjg1OlxcdHVuc2FmZV9wdXRfdXNlcihpdy1cXHUwMDNlaW5mby5waWQsIFxcdTAwMjZpdy1cXHUwMDNlaW5mb3AtXFx1MDAzZXNpX3BpZCwgRWZhdWx0KTtcXG5pb191cmluZy93YWl0aWQuYzo4NjpcXHR1bnNhZmVfcHV0X3VzZXIoaXctXFx1MDAzZWluZm8udWlkLCBcXHUwMDI2aXctXFx1MDAzZWluZm9wLVxcdTAwM2VzaV91aWQsIEVmYXVsdCk7XFxuaW9fdXJpbmcvd2FpdGlkLmM6ODc6XFx0dW5zYWZlX3B1dF91c2VyKGl3LVxcdTAwM2VpbmZvLnN0YXR1cywgXFx1MDAyNml3LVxcdTAwM2VpbmZvcC1cXHUwMDNlc2lfc3RhdHVzLCBFZmF1bHQpO1xcbmlvX3VyaW5nL3dhaXRpZC5jLTg4LVxcdHJldCA9IHRydWU7XFxuLS1cXG5pb191cmluZy93YWl0aWQuYz0yNzk9aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuLS1cXG5pb191cmluZy93YWl0aWQuYy0yOTUtXFx0aXctXFx1MDAzZWhlYWQgPSBOVUxMO1xcbmlvX3VyaW5nL3dhaXRpZC5jOjI5NjpcXHRpdy1cXHUwMDNlaW5mb3AgPSB1NjRfdG9fdXNlcl9wdHIoUkVBRF9PTkNFKHNxZS1cXHUwMDNlYWRkcjIpKTtcXG5pb191cmluZy93YWl0aWQuYzoyOTc6XFx0bWVtc2V0KFxcdTAwMjZpdy1cXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVxcdTAwM2VpbmZvKSk7XFxuaW9fdXJpbmcvd2FpdGlkLmMtMjk4LVxcdHJldHVybiAwO1xcbi0tXFxuaW9fdXJpbmcvd2FpdGlkLmM9MzAxPWludCBpb193YWl0aWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3dhaXRpZC5jLTMwNy1cXG5pb191cmluZy93YWl0aWQuYzozMDg6XFx0cmV0ID0ga2VybmVsX3dhaXRpZF9wcmVwYXJlKFxcdTAwMjZpd2EtXFx1MDAzZXdvLCBpdy1cXHUwMDNld2hpY2gsIGl3LVxcdTAwM2V1cGlkLCBcXHUwMDI2aXctXFx1MDAzZWluZm8sXFxuaW9fdXJpbmcvd2FpdGlkLmMtMzA5LVxcdFxcdFxcdFxcdFxcdGl3LVxcdTAwM2VvcHRpb25zLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTg6MTkuMjEyMTUxNjc1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzOTc1ODYwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwbGF5aW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBpb193YWl0aWRfcHJlcCoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgbWVtc2V0KFx1MDAyNml3LVx1MDAzZWluZm8sIDAsIHNpemVvZihpdy1cdTAwM2VpbmZvKSk7YCB3aXRoaW4gdGhlIGBpb193YWl0aWRfcHJlcGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGluZSBjb21wbGV0ZWx5IHplcm9zIG91dCB0aGUgYGl3LVx1MDAzZWluZm9gIHN0cnVjdHVyZS4gVGhhdCdzIGEgZ29vZCBzaWduLiBJdCAqc2hvdWxkKiBtZWFuIHRoYXQgYW55IHN1YnNlcXVlbnQgdXNlIG9mIGBpdy1cdTAwM2VpbmZvYCB3b24ndCBiZSByZWFkaW5nIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0IGZ1bGx5IGluaXRpYWxpemVzIGl0IHRvIHplcm8uIFRoYXQncyBwcmVjaXNlbHkgd2hhdCBJIHdhbnQgdG8gc2VlIHRvIGF2b2lkIGFueSBuYXN0eSwgdW5kZWZpbmVkIGJlaGF2aW9yIG9yIHBvdGVudGlhbCBsZWFrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGdpdmVuIHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nLCBpcyB0aGVyZSB0cnVseSBhIGxlYWsgb3Igbm90PyBUaGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgYGlvX3dhaXRpZF9wcmVwYCBmdW5jdGlvbiBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb250ZXh0IHRvIGJlIHN1cmUuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24gaW4gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEyOjU4OjI4LjYwOTc0MTQxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy93YWl0aWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzksXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzk6XFx0aW50IGlvX3dhaXRpZF9wcmVwKHN0cnVjdCBpb19raW9jYiAqcmVxLCBjb25zdCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpXFxuIDI4MDpcXHR7XFxuIDI4MTpcXHRcXHRzdHJ1Y3QgaW9fd2FpdGlkICppdyA9IGlvX2tpb2NiX3RvX2NtZChyZXEsIHN0cnVjdCBpb193YWl0aWQpO1xcbiAyODI6XFx0XFx0c3RydWN0IGlvX3dhaXRpZF9hc3luYyAqaXdhO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRpZiAoc3FlLVxcdTAwM2VhZGRyIHx8IHNxZS1cXHUwMDNlYnVmX2luZGV4IHx8IHNxZS1cXHUwMDNlYWRkcjMgfHwgc3FlLVxcdTAwM2V3YWl0aWRfZmxhZ3MpXFxuIDI4NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0aXdhID0gaW9fdXJpbmdfYWxsb2NfYXN5bmNfZGF0YShOVUxMLCByZXEpO1xcbiAyODg6XFx0XFx0aWYgKHVubGlrZWx5KCFpd2EpKVxcbiAyODk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI5MDpcXHRcXHRpd2EtXFx1MDAzZXJlcSA9IHJlcTtcXG4gMjkxOlxcdFxcbiAyOTI6XFx0XFx0aXctXFx1MDAzZXdoaWNoID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlbGVuKTtcXG4gMjkzOlxcdFxcdGl3LVxcdTAwM2V1cGlkID0gUkVBRF9PTkNFKHNxZS1cXHUwMDNlZmQpO1xcbiAyOTQ6XFx0XFx0aXctXFx1MDAzZW9wdGlvbnMgPSBSRUFEX09OQ0Uoc3FlLVxcdTAwM2VmaWxlX2luZGV4KTtcXG4gMjk1OlxcdFxcdGl3LVxcdTAwM2VoZWFkID0gTlVMTDtcXG4gMjk2OlxcdFxcdGl3LVxcdTAwM2VpbmZvcCA9IHU2NF90b191c2VyX3B0cihSRUFEX09OQ0Uoc3FlLVxcdTAwM2VhZGRyMikpO1xcbiAyOTc6XFx0XFx0bWVtc2V0KFxcdTAwMjZpdy1cXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVxcdTAwM2VpbmZvKSk7XFxuIDI5ODpcXHRcXHRyZXR1cm4gMDtcXG4gMjk5OlxcdH1cXG4gMzAwOlxcdFxcbiAzMDE6XFx0aW50IGlvX3dhaXRpZChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxcbiAzMDI6XFx0e1xcbiAzMDM6XFx0XFx0c3RydWN0IGlvX3dhaXRpZCAqaXcgPSBpb19raW9jYl90b19jbWQocmVxLCBzdHJ1Y3QgaW9fd2FpdGlkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTg6MjguNjA5ODEzODU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwODM0MzYyMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBpb193YWl0aWQgUGF0Y2ggYW5kIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3dhaXRpZF9jb21wbGV0ZWAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXM6IGlzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrYWdlIGludHJvZHVjZWQgb3IgZml4ZWQgaGVyZT8gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGBjb3B5X3NpYCBmbGFnIHRvIGBpb193YWl0aWRfY29tcGxldGVgLCBhbGxvd2luZyBpdCB0byBza2lwIHRoZSBgaW9fd2FpdGlkX2ZpbmlzaGAgZnVuY3Rpb24gZW50aXJlbHksIGFuZCBnbyBzdHJhaWdodCB0byBgaW9fd2FpdGlkX2ZyZWVgIHdoZW4gYGNvcHlfc2lgIGlzIGZhbHNlLiBgaW9fd2FpdGlkX2ZpbmlzaGAgaXMgdGhlIG9uZSB0aGF0IGNhbGxzIGBpb193YWl0aWRfY29weV9zaWAsIHdoaWNoIHBlcmZvcm1zIHRoZSB1c2VyLXNwYWNlIHdyaXRlLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aHkgdGhleSdyZSBieXBhc3NpbmcgdGhlIHVzZXItc3BhY2Ugd3JpdGUuIFRoZSBjb2RlIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBjYW5jZWxsYXRpb24g4oCTIHNwZWNpZmljYWxseSwgd2hlbiBgdHcuY2FuY2VsYCBpcyB0cnVlIG9yIHdoZW4gYGlvX3dhaXRpZF9yZW1vdmVfYWxsYCBpcyBjYWxsZWQgd2l0aG91dCBhIHRhc2sgY29udGV4dCAoYHRjdHhgIGlzIE5VTEwpLiBUaGUgcmF0aW9uYWxlIGlzIGxpa2VseSB0aGF0IHdyaXRpbmcgdG8gdXNlciBzcGFjZSByZXF1aXJlcyBhIHZhbGlkIHByb2Nlc3MgY29udGV4dC4gSWYgdGhlIHRhc2sgaXMgYmVpbmcgY2FuY2VsZWQgb3IgdGhlIG9wZXJhdGlvbiBpcyBvY2N1cnJpbmcgb3V0c2lkZSB0aGUgZXhwZWN0ZWQgY29udGV4dCAobGlrZSBhIHJpbmcgZXhpdCBvciBjYW5jZWxsYXRpb24gZnJvbSBhbm90aGVyIHRhc2spLCB3cml0aW5nIHRvIHVzZXIgc3BhY2UgY291bGQgZWl0aGVyIHdyaXRlIHRvIHRoZSB3cm9uZyBwcm9jZXNzJ3MgbWVtb3J5IChtZW1vcnkgY29ycnVwdGlvbi9vdXQtb2YtYm91bmRzIGFjY2Vzcykgb3IgbGVhZCB0byBhIGZhdWx0LlxuXG5NeSBpbW1lZGlhdGUgY2hlY2sgaXMgd2hldGhlciB0aGlzIHBhdGNoICpleHBvc2VzKiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgcXVpY2tseSBydWxlIG91dCBgaXctXHUwMDNlaW5mb2AgYmVjYXVzZSBgaW9fd2FpdGlkX3ByZXBgIGV4cGxpY2l0bHkgemVyb2VzIGl0IG91dC4gSSBkb3VibGUtY2hlY2tlZCB0aGlzLCBhbmQgYG1lbXNldChcdTAwMjZpdy1cdTAwM2VpbmZvLCAwLCBzaXplb2YoaXctXHUwMDNlaW5mbykpO2AgaXMgaW4gcGxhY2UuIE5vIHByb2JsZW0gdGhlcmUuIEkgYWxzbyBjaGVjayBgc2lnbm9gLCB3aGljaCBpcyBpbml0aWFsaXplZCB0byAwIGluIGBpb193YWl0aWRfZmluaXNoYCwgb3IgYFNJR0NITERgLiBBbmQgdGhlIGBpdy1cdTAwM2VpbmZvcC1cdTAwM2VzaV9zaWdub2AgZmllbGQgd2hpY2ggaXMgdXNlciBzcGFjZSBtZW1vcnkgYW5kIHRoZXJlZm9yZSBub3QgYSBjb25jZXJuLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0IGF2b2lkaW5nIGBpb193YWl0aWRfZmluaXNoYCAod2hpY2ggaW5jbHVkZXMgYGlvX3dhaXRpZF9jb3B5X3NpYCkgd2hlbiBgY29weV9zaWAgaXMgZmFsc2UuIEFuZCBgY29weV9zaWAgaXMgZmFsc2UgaW4gdGhlIGBpb193YWl0aWRfY2FuY2VsX25vY29weV9jYmAgY2FzZSwgYW5kIHRoZSBgaW9fd2FpdGlkX2NiYCBpZiBgdHcuY2FuY2VsYCBpcyB0cnVlLiBgdHcuY2FuY2VsYCBtZWFucyB0YXNrIHdvcmsgY2FuY2VsbGF0aW9uLCBsaWtlIHdoZW4gdGhlIHRhc2sgZXhpdHMgb3IgdGhlIHJpbmcgaXMgdG9ybiBkb3duLiBUaGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IHdyaXRpbmcgdG8gdXNlciBzcGFjZSBpZiBpdCdzIGludmFsaWQgb3IgdW5zYWZlLlxuXG5UaGlzIGlzIGEgYnVnIGZpeCwgaXQncyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEl0J3MgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IGEgc2NlbmFyaW8gd2hlcmUgYGlvX3dhaXRpZGAgdHJpZXMgdG8gY29weSBgc2lnaW5mb2AgZHVyaW5nIGNhbmNlbGxhdGlvbiB3aGVuIHRoZSB1c2VyIG1lbW9yeSBtaWdodCBub3QgYmUgdmFsaWQsIHdoaWNoIGNvdWxkIGNhdXNlIGEgcGFnZSBmYXVsdCBvciBhIHdyaXRlIHRvIHRoZSB3cm9uZyBhZGRyZXNzIHNwYWNlLlxuXG5JIG5vdyBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY29tZXMgdmlzaWJsZSBpbiB0aGUgYGl3LVx1MDAzZWluZm9gIHN0cnVjdC4gYGlvX3dhaXRpZF9wcmVwYCB0YWtlcyBjYXJlIG9mIHRoZSBpbml0aWFsaXphdGlvbi4gQnV0IGNvdWxkIGBrZXJuZWxfd2FpdGlkX3ByZXBhcmVgIG9yIGBfX2RvX3dhaXRgIG1vZGlmeSBgaXctXHUwMDNlaW5mb2Agc3VjaCB0aGF0IHRoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgcGFkZGluZz8gTm8uIGBpdy1cdTAwM2VpbmZvYCBpczpcblxuYGBgY1xuc3RydWN0IHdhaXRpZF9pbmZvIHtcblx0cGlkX3QgcGlkO1xuXHR1aWRfdCB1aWQ7XG5cdGludCBzdGF0dXM7XG5cdGludCBjYXVzZTtcbn07XG5gYGBcblxuYHBpZF90YCBpcyBgaW50YCwgYHVpZF90YCBpcyBgdW5zaWduZWQgaW50YCwgYHN0YXR1c2AgYW5kIGBjYXVzZWAgYXJlIGBpbnRgcy4gVGhpcyBpcyBhIHRvdGFsIHNpemUgb2YgMTYgYnl0ZXMuIE5vIHBhZGRpbmcgaXMgcHJlc2VudC4gQW5kIGV2ZW4gaWYgdGhlcmUgd2VyZSwgdGhlIGNvZGUgd3JpdGVzIHRvIGluZGl2aWR1YWwgZmllbGRzIGFuZCBub3QgdGhlIHN0cnVjdCBhcyBhIHdob2xlLCBzbyB0aGUgcG9zc2liaWxpdHkgb2YgdGhlIHBhZGRpbmcgYmVpbmcgbGVha2VkIGlzIGVmZmVjdGl2ZWx5IHplcm8uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBmaXggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCBmaXhlcyBhIGJ1ZyB3aGVyZSB1c2VyLXNwYWNlIG1lbW9yeSBhY2Nlc3Mgb2NjdXJzIGR1cmluZyBjYW5jZWxsYXRpb24sIGFuZCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGlzIGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgYnVnIHdvdWxkIGxpa2VseSBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIG9mIHVzZXItc3BhY2UgbWVtb3J5LCBvciBhIHdyaXRlIHRvIGFuIGluY29ycmVjdCBtbSBhbmQgS01TQU4gd291bGQgbm90IGNhdGNoIHRoaXMuXG5cbkkgcmV2aWV3IHRoZSBgaW9fd2FpdGlkX2NiYCBjaGFuZ2U6XG5cbmBgYGNcbkBAIC0yMDIsNiArMjE2LDExIEBAIHN0YXRpYyB2b2lkIGlvX3dhaXRpZF9jYihzdHJ1Y3QgaW9fdHdfcmVxIHR3X3JlcSwgaW9fdHdfdG9rZW5fdCB0dylcbiBcdGludCByZXQ7XG4gXG4gXHRpb190d19sb2NrKGN0eCwgdHcpO1xuK1x0aWYgKHVubGlrZWx5KHR3LmNhbmNlbCkpIHtcbitcdFx0aW9fd2FpdGlkX2NvbXBsZXRlKHJlcSwgLUVDQU5DRUxFRCwgZmFsc2UpO1xuK1x0XHRpb19yZXFfdGFza19jb21wbGV0ZSh0d19yZXEsIHR3KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuYGBgXG5cblRoaXMgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZ1xuXG4iLCJJbnB1dFRva2VucyI6OTczOSwiT3V0cHV0VG9rZW5zIjoyMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTI6NTg6NDkuNDQ0MTc4MjI2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FuY2VsbGF0aW9uIGFuZCBjb21wbGV0aW9uIHBhdGhzIG9mIHRoZSBpb191cmluZyB3YWl0aWQgY29tbWFuZCB0byBjb25kaXRpb25hbGx5IHNraXAgY29weWluZyBgc2lnaW5mb2AgZGF0YSB0byB1c2VyIHNwYWNlIChgaW9fd2FpdGlkX2NvcHlfc2lgKSB3aGVuIHRoZSByZXF1ZXN0IGlzIGJlaW5nIGNhbmNlbGVkIG9yIHdoZW4gdGhlcmUgaXMgbm8gdmFsaWQgdGFzayBjb250ZXh0LiBUaGUgZGF0YSBiZWluZyBjb3BpZWQgKGBpdy1cXHUwMDNlaW5mb2ApIGlzIGZ1bGx5IGluaXRpYWxpemVkIHRvIHplcm8gaW4gYGlvX3dhaXRpZF9wcmVwYCB2aWEgYG1lbXNldChcXHUwMDI2aXctXFx1MDAzZWluZm8sIDAsIHNpemVvZihpdy1cXHUwMDNlaW5mbykpO2AsIGFuZCB0aGUgY29weSBvcGVyYXRpb24gdXNlcyBgdW5zYWZlX3B1dF91c2VyYCB0byB3cml0ZSBpbmRpdmlkdWFsIGZpZWxkcyByYXRoZXIgdGhhbiBjb3B5aW5nIGEgc3RydWN0IHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy4gVGhlIGJ1ZyBiZWluZyBmaXhlZCBpcyBsaWtlbHkgcmVsYXRlZCB0byBpbnZhbGlkIHVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyAoZS5nLiwgd3JpdGluZyB0byBhIHdyb25nIG9yIGRlc3Ryb3llZCBhZGRyZXNzIHNwYWNlIGR1cmluZyB0YXNrIGV4aXQvcmluZyB0ZWFyZG93biksIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBvciBtZW1vcnkgc2FmZXR5IGlzc3VlIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYW5jZWxsYXRpb24gYW5kIGNvbXBsZXRpb24gcGF0aHMgb2YgdGhlIGlvX3VyaW5nIHdhaXRpZCBjb21tYW5kIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBjb3B5aW5nIGBzaWdpbmZvYCBkYXRhIHRvIHVzZXIgc3BhY2UgKGBpb193YWl0aWRfY29weV9zaWApIHdoZW4gdGhlIHJlcXVlc3QgaXMgYmVpbmcgY2FuY2VsZWQgb3Igd2hlbiB0aGVyZSBpcyBubyB2YWxpZCB0YXNrIGNvbnRleHQuIFRoZSBkYXRhIGJlaW5nIGNvcGllZCAoYGl3LVxcdTAwM2VpbmZvYCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVybyBpbiBgaW9fd2FpdGlkX3ByZXBgIHZpYSBgbWVtc2V0KFxcdTAwMjZpdy1cXHUwMDNlaW5mbywgMCwgc2l6ZW9mKGl3LVxcdTAwM2VpbmZvKSk7YCwgYW5kIHRoZSBjb3B5IG9wZXJhdGlvbiB1c2VzIGB1bnNhZmVfcHV0X3VzZXJgIHRvIHdyaXRlIGluZGl2aWR1YWwgZmllbGRzIHJhdGhlciB0aGFuIGNvcHlpbmcgYSBzdHJ1Y3Qgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBwYWRkaW5nLiBUaGUgYnVnIGJlaW5nIGZpeGVkIGlzIGxpa2VseSByZWxhdGVkIHRvIGludmFsaWQgdXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIChlLmcuLCB3cml0aW5nIHRvIGEgd3Jvbmcgb3IgZGVzdHJveWVkIGFkZHJlc3Mgc3BhY2UgZHVyaW5nIHRhc2sgZXhpdC9yaW5nIHRlYXJkb3duKSwgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIG9yIG1lbW9yeSBzYWZldHkgaXNzdWUgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[1] Phase: Succeeded StartedAt: 2026-08-18 12:59:13 +0000 UTC FinishedAt: 2026-08-18 12:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 12:59:13 +0000 UTC FinishedAt: 2026-08-18 12:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2] Phase: Succeeded StartedAt: 2026-08-18 12:59:13 +0000 UTC FinishedAt: 2026-08-18 16:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 12:59:13 +0000 UTC FinishedAt: 2026-08-18 16:39:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 12:59:13 +0000 UTC FinishedAt: 2026-08-18 12:59:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 12:59:13 +0000 UTC FinishedAt: 2026-08-18 12:59:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowgnldj/series-workflowgnldj-convert-artifact-1228921197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 12:59:23 +0000 UTC FinishedAt: 2026-08-18 13:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 12:59:23 +0000 UTC FinishedAt: 2026-08-18 13:16:32 +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:*257be4ef-e188-402b-9f31-1b54cba31aac,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-workflowgnldj/series-workflowgnldj-convert-artifact-1228921197/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": "8e9fb07a-c923-40ce-bc72-67ae107b7e67", "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-workflowgnldj/series-workflowgnldj-build-action-3217310563/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 12:59:23 +0000 UTC FinishedAt: 2026-08-18 13:16:22 +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:*257be4ef-e188-402b-9f31-1b54cba31aac,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-workflowgnldj/series-workflowgnldj-convert-artifact-1228921197/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": "8e9fb07a-c923-40ce-bc72-67ae107b7e67", "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-workflowgnldj/series-workflowgnldj-build-action-3217310563/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 13:16:32 +0000 UTC FinishedAt: 2026-08-18 13:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 13:16:32 +0000 UTC FinishedAt: 2026-08-18 13:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 13:16:32 +0000 UTC FinishedAt: 2026-08-18 13:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 13:16:32 +0000 UTC FinishedAt: 2026-08-18 13:16:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowgnldj/series-workflowgnldj-convert-artifact-3054620104/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 13:16:42 +0000 UTC FinishedAt: 2026-08-18 13:18:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 13:16:42 +0000 UTC FinishedAt: 2026-08-18 13:18:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e9fb07a-c923-40ce-bc72-67ae107b7e67,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-workflowgnldj/series-workflowgnldj-build-action-3217310563/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-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 13:18:58 +0000 UTC FinishedAt: 2026-08-18 13:18:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 13:18:58 +0000 UTC FinishedAt: 2026-08-18 13:18:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 13:18:58 +0000 UTC FinishedAt: 2026-08-18 13:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 13:18:58 +0000 UTC FinishedAt: 2026-08-18 13:35:37 +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:*257be4ef-e188-402b-9f31-1b54cba31aac,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-workflowgnldj/series-workflowgnldj-convert-artifact-3054620104/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": "25dcd8c6-cf53-4a63-a543-b201a55a95e5", "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-workflowgnldj/series-workflowgnldj-build-action-972751476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 13:18:58 +0000 UTC FinishedAt: 2026-08-18 13:35:27 +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:*257be4ef-e188-402b-9f31-1b54cba31aac,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-workflowgnldj/series-workflowgnldj-convert-artifact-3054620104/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": "25dcd8c6-cf53-4a63-a543-b201a55a95e5", "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-workflowgnldj/series-workflowgnldj-build-action-972751476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 13:35:37 +0000 UTC FinishedAt: 2026-08-18 13:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 13:35:37 +0000 UTC FinishedAt: 2026-08-18 13:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 13:35:37 +0000 UTC FinishedAt: 2026-08-18 13:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 13:35:37 +0000 UTC FinishedAt: 2026-08-18 13:37:42 +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:*25dcd8c6-cf53-4a63-a543-b201a55a95e5,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-workflowgnldj/series-workflowgnldj-build-action-972751476/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-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 13:37:52 +0000 UTC FinishedAt: 2026-08-18 16:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 13:37:52 +0000 UTC FinishedAt: 2026-08-18 16:39:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"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:*8e9fb07a-c923-40ce-bc72-67ae107b7e67,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*25dcd8c6-cf53-4a63-a543-b201a55a95e5,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-workflowgnldj/series-workflowgnldj-build-action-3217310563/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-workflowgnldj/series-workflowgnldj-build-action-972751476/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 13:37:52 +0000 UTC FinishedAt: 2026-08-18 13:38:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 13:37:52 +0000 UTC FinishedAt: 2026-08-18 13:37:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"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-workflowgnldj/series-workflowgnldj-convert-artifact-238254465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 13:37:52 +0000 UTC FinishedAt: 2026-08-18 13:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 13:37:52 +0000 UTC FinishedAt: 2026-08-18 13:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 13:37:52 +0000 UTC FinishedAt: 2026-08-18 13:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 13:38:02 +0000 UTC FinishedAt: 2026-08-18 16:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnldj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_waitid","io_waitid_cancel","io_waitid_remove_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"326d49039c10b65522ac7277b19b9b5c42ed1aeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"1bcd5abe-c2e0-47b9-b7fc-188586f25b3c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 13:38:02 +0000 UTC FinishedAt: 2026-08-18 16:39:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8e9fb07a-c923-40ce-bc72-67ae107b7e67,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*25dcd8c6-cf53-4a63-a543-b201a55a95e5,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-workflowgnldj/series-workflowgnldj-build-action-3217310563/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-workflowgnldj/series-workflowgnldj-build-action-972751476/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-workflowgnldj/series-workflowgnldj-convert-artifact-238254465/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,}