Name: series-workflow695xf Phase: Succeeded StartedAt: 2026-08-25 02:48:33 +0000 UTC FinishedAt: 2026-08-25 04:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[0] Phase: Succeeded StartedAt: 2026-08-25 02:48:33 +0000 UTC FinishedAt: 2026-08-25 03:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 02:48:33 +0000 UTC FinishedAt: 2026-08-25 03:35:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4b18edbd8e70f7e6860d56370f13244896d0f95c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4b18edbd8e70f7e6860d56370f13244896d0f95c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED" ], "series_id": "7c58d5e9-d489-4e2c-94d2-475a59759e24" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "scx_tg_online", "scx_group_set_idle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3hfdGdfb25saW5lJiMzNDssCiAgICAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbmFtZXMgYGlkbGVgIHRvIGBzY2hlZF9pZGxlYCBpbiBgc3RydWN0IHNjeF90YXNrX2dyb3VwYCBhbmQgYWRkcyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIEl0IGluaXRpYWxpemVzIHRoaXMgbmV3IGZpZWxkIGluIHNldmVyYWwgcGxhY2VzIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChlLmcuLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7IC4uLiB9YCkuIEluIEMsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIHplcm8gb3V0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcy4gRnVydGhlcm1vcmUsIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGlzIHBhc3NlZCB0byBhIEJQRiBwcm9ncmFtIChrZXJuZWwgc3BhY2UpLCBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtIHRvIHBhc3MgdGhlIGBzY2hlZF9pZGxlYCBzdGF0ZSBvZiBhIGNncm91cCB0byB0aGUgQlBGIHNjaGVkdWxlciBkdXJpbmcgY2dyb3VwIGluaXRpYWxpemF0aW9uIChgb3BzLmNncm91cF9pbml0KClgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgZGF0YSB0byBCUEYgcHJvZ3JhbXMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNyZWF0aW9uIGFuZCBgY3B1LmlkbGVgIG1vZGlmaWNhdGlvbiB3aGlsZSBhIHNjaGVkX2V4dCBzY2hlZHVsZXIgaXMgYWN0aXZlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzY3M2RkNDdkZTI3OGFmM2VmYmVjNDljN2NiYzg0MmQwNDdkNzMwMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDAzOjMzOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oXG5pbmRleCA1ODJkN2NkNGE5ODM5Li43YjljZGI2NWRlZWY2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaFxuQEAgLTMyMyw3ICYjNDM7MzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHtcbiBcdHU2NFx0XHRcdGJ3X3BlcmlvZF91cztcbiBcdHU2NFx0XHRcdGJ3X3F1b3RhX3VzO1xuIFx0dTY0XHRcdFx0YndfYnVyc3RfdXM7XG4tXHRib29sXHRcdFx0aWRsZTtcbiYjNDM7XHRib29sXHRcdFx0c2NoZWRfaWRsZTtcbiAjZW5kaWZcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5pbmRleCBjNTM5ZDE1Y2RhNjM3Li40YTljMzgyOTcwOTM1IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuQEAgLTQ2ODIsNyAmIzQzOzQ2ODIsNyBAQCB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcbiBcdHRnLVx1MDAzZXNjeC53ZWlnaHQgPSBDR1JPVVBfV0VJR0hUX0RGTDtcbiBcdHRnLVx1MDAzZXNjeC5id19wZXJpb2RfdXMgPSBkZWZhdWx0X2J3X3BlcmlvZF91cygpO1xuIFx0dGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7XG4tXHR0Zy1cdTAwM2VzY3guaWRsZSA9IGZhbHNlO1xuJiM0MztcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gZmFsc2U7XG4gfVxuIFxuIC8qKlxuQEAgLTQ3NjQsNyAmIzQzOzQ3NjQsOCBAQCBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG4gXHRcdFx0XHR7IC53ZWlnaHQgPSB0Zy1cdTAwM2VzY3gud2VpZ2h0LFxuIFx0XHRcdFx0ICAuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHRcdCAgLmJ3X3F1b3RhX3VzID0gdGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxuLVx0XHRcdFx0ICAuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMgfTtcbiYjNDM7XHRcdFx0XHQgIC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbiYjNDM7XHRcdFx0XHQgIC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcbiBcbiBcdFx0XHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcbiBcdFx0XHRcdFx0ICAgICAgTlVMTCwgdGctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YXJncyk7XG5AQCAtNDkzNCw3ICYjNDM7NDkzNSw3IEBAIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxuIFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi9cbi1cdHRnLVx1MDAzZXNjeC5pZGxlID0gaWRsZTtcbiYjNDM7XHR0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XG4gXG4gXHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG4gfVxuQEAgLTUxODUsNiAmIzQzOzUxODYsNyBAQCBzdGF0aWMgaW50IHNjeF9jZ3JvdXBfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHRcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHRcdC5id19xdW90YV91cyA9IHRnLVx1MDAzZXNjeC5id19xdW90YV91cyxcbiBcdFx0XHRcdC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbiYjNDM7XHRcdFx0XHQuc2NoZWRfaWRsZSA9IHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlLFxuIFx0XHRcdH07XG4gXG4gXHRcdFx0cmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy1cdTAwM2VjZ3JvdXAsIFx1MDAyNmFyZ3MpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaCBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuaW5kZXggNTNlMTM2YTQ3OTI0ZC4uYzY5ODdhM2EwNzNiZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXG5AQCAtMjU5LDYgJiM0MzsyNTksOSBAQCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuIFx0dTY0XHRcdFx0YndfcGVyaW9kX3VzO1xuIFx0dTY0XHRcdFx0YndfcXVvdGFfdXM7XG4gXHR1NjRcdFx0XHRid19idXJzdF91cztcbiYjNDM7XG4mIzQzO1x0Lyogd2hldGhlciB0aGUgY2dyb3VwIGlzIGNvbmZpZ3VyZWQgU0NIRURfSURMRSB2aWEgY3B1LmlkbGUgKi9cbiYjNDM7XHRib29sXHRcdFx0c2NoZWRfaWRsZTtcbiB9O1xuIFxuIGVudW0gc2N4X2NwdV9wcmVlbXB0X3JlYXNvbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9zdWIuYyBiL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcbmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG5AQCAtMTM2MSw2ICYjNDM7MTM2MSw3IEBAIHN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHQuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4gXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuJiM0MztcdFx0XHQuc2NoZWRfaWRsZSA9IHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlLFxuIFx0XHR9O1xuIFxuIFx0XHRpZiAodGctXHUwMDNlc2N4LnNjaGVkICE9IHBhcmVudCB8fFxuQEAgLTE0NjQsNiAmIzQzOzE0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHQuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4gXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuJiM0MztcdFx0XHQuc2NoZWRfaWRsZSA9IHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlLFxuIFx0XHR9O1xuIFxuIFx0XHQvKiB0aGUgZmlyc3QgcGFzcyBtdXN0IGhhdmUgdHJhbnNmZXJyZWQgZXZlcnl0aGluZyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X3RnX29ubGluZSYjMzQ7LAogICAgJiMzNDtzY3hfZ3JvdXBfc2V0X2lkbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0gdG8gcGFzcyB0aGUgYHNjaGVkX2lkbGVgIHN0YXRlIG9mIGEgY2dyb3VwIHRvIHRoZSBCUEYgc2NoZWR1bGVyIGR1cmluZyBjZ3JvdXAgaW5pdGlhbGl6YXRpb24gKGBvcHMuY2dyb3VwX2luaXQoKWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBkYXRhIHRvIEJQRiBwcm9ncmFtcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY3JlYXRpb24gYW5kIGBjcHUuaWRsZWAgbW9kaWZpY2F0aW9uIHdoaWxlIGEgc2NoZWRfZXh0IHNjaGVkdWxlciBpcyBhY3RpdmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNjczZGQ0N2RlMjc4YWYzZWZiZWM0OWM3Y2JjODQyZDA0N2Q3MzAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaAppbmRleCA1ODJkN2NkNGE5ODM5Li43YjljZGI2NWRlZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgKQEAgLTMyMyw3ICYjNDM7MzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHsKIAl1NjQJCQlid19wZXJpb2RfdXM7CiAJdTY0CQkJYndfcXVvdGFfdXM7CiAJdTY0CQkJYndfYnVyc3RfdXM7Ci0JYm9vbAkJCWlkbGU7CiYjNDM7CWJvb2wJCQlzY2hlZF9pZGxlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuYwppbmRleCBjNTM5ZDE1Y2RhNjM3Li40YTljMzgyOTcwOTM1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKQEAgLTQ2ODIsNyAmIzQzOzQ2ODIsNyBAQCB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKIAl0Zy0mZ3Q7c2N4LndlaWdodCA9IENHUk9VUF9XRUlHSFRfREZMOwogCXRnLSZndDtzY3guYndfcGVyaW9kX3VzID0gZGVmYXVsdF9id19wZXJpb2RfdXMoKTsKIAl0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7Ci0JdGctJmd0O3NjeC5pZGxlID0gZmFsc2U7CiYjNDM7CXRnLSZndDtzY3guc2NoZWRfaWRsZSA9IGZhbHNlOwogfQogCiAvKioKQEAgLTQ3NjQsNyAmIzQzOzQ3NjQsOCBAQCBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiAJCQkJeyAud2VpZ2h0ID0gdGctJmd0O3NjeC53ZWlnaHQsCiAJCQkJICAuYndfcGVyaW9kX3VzID0gdGctJmd0O3NjeC5id19wZXJpb2RfdXMsCiAJCQkJICAuYndfcXVvdGFfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzLAotCQkJCSAgLmJ3X2J1cnN0X3VzID0gdGctJmd0O3NjeC5id19idXJzdF91cyB9OwomIzQzOwkJCQkgIC5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJCSAgLnNjaGVkX2lkbGUgPSB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgfTsKIAogCQkJcmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsCiAJCQkJCSAgICAgIE5VTEwsIHRnLSZndDtjc3MuY2dyb3VwLCAmYW1wO2FyZ3MpOwpAQCAtNDkzNCw3ICYjNDM7NDkzNSw3IEBAIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKQogCQlTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpOwogCiAJLyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi8KLQl0Zy0mZ3Q7c2N4LmlkbGUgPSBpZGxlOwomIzQzOwl0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgPSBpZGxlOwogCiAJcGVyY3B1X3VwX3JlYWQoJmFtcDtzY3hfY2dyb3VwX29wc19yd3NlbSk7CiB9CkBAIC01MTg1LDYgJiM0Mzs1MTg2LDcgQEAgc3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQkJCS5id19wZXJpb2RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3BlcmlvZF91cywKIAkJCQkuYndfcXVvdGFfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzLAogCQkJCS5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJCS5zY2hlZF9pZGxlID0gdGctJmd0O3NjeC5zY2hlZF9pZGxlLAogCQkJfTsKIAogCQkJcmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy0mZ3Q7Y2dyb3VwLCAmYW1wO2FyZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oCmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgKQEAgLTI1OSw2ICYjNDM7MjU5LDkgQEAgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHsKIAl1NjQJCQlid19wZXJpb2RfdXM7CiAJdTY0CQkJYndfcXVvdGFfdXM7CiAJdTY0CQkJYndfYnVyc3RfdXM7CiYjNDM7CiYjNDM7CS8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovCiYjNDM7CWJvb2wJCQlzY2hlZF9pZGxlOwogfTsKIAogZW51bSBzY3hfY3B1X3ByZWVtcHRfcmVhc29uIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmMgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jCmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9zdWIuYwpAQCAtMTM2MSw2ICYjNDM7MTM2MSw3IEBAIHN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkKIAkJCS5id19wZXJpb2RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3BlcmlvZF91cywKIAkJCS5id19xdW90YV91cyA9IHRnLSZndDtzY3guYndfcXVvdGFfdXMsCiAJCQkuYndfYnVyc3RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X2J1cnN0X3VzLAomIzQzOwkJCS5zY2hlZF9pZGxlID0gdGctJmd0O3NjeC5zY2hlZF9pZGxlLAogCQl9OwogCiAJCWlmICh0Zy0mZ3Q7c2N4LnNjaGVkICE9IHBhcmVudCB8fApAQCAtMTQ2NCw2ICYjNDM7MTQ2NSw3IEBAIHN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQkJLmJ3X3BlcmlvZF91cyA9IHRnLSZndDtzY3guYndfcGVyaW9kX3VzLAogCQkJLmJ3X3F1b3RhX3VzID0gdGctJmd0O3NjeC5id19xdW90YV91cywKIAkJCS5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJLnNjaGVkX2lkbGUgPSB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUsCiAJCX07CiAKIAkJLyogdGhlIGZpcnN0IHBhc3MgbXVzdCBoYXZlIHRyYW5zZmVycmVkIGV2ZXJ5dGhpbmcgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzY2hlZF9leHRgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0JiMzOTtzIGNsZWFuaW5nIHVwIHRoZSBgaWRsZWAgbmFtaW5nIGluIGBzY3hfdGFza19ncm91cGAgYnkgcmVuYW1pbmcgaXQgdG8gYHNjaGVkX2lkbGVgLiYjMzQ7IFRoaXMgYWxzbyBpbmNsdWRlcyBhZGRpbmcgdGhlIGBzY2hlZF9pZGxlYCBmaWVsZCB0byBgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGluIGBrZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhgLiBJIHNlZSBpdCYjMzk7cyBwcm9wYWdhdGluZyB0aGlzIG5ldyBmaWVsZCB0aHJvdWdoIGBzY3hfdGdfb25saW5lYCwgYHNjeF9jZ3JvdXBfaW5pdGAsIGBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWVgLCBhbmQgYHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWVgLiBUaGUga2V5IGhlcmUgaXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlOiBwYXNzaW5nIHRoaXMgYHNjaGVkX2lkbGVgIGZsYWcgZG93biB0byB0aGUgQlBGIHNjaGVkdWxlciB2aWEgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AgZHVyaW5nIHRoZSBgY2dyb3VwX2luaXRgIEJQRiBvcGVyYXRpb24uCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGRlZmluaXRpb24uIFllcCwgYGtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaGAgY29uZmlybXMgaXQ6CmBgYGMKc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHsKCXUzMgkJCXdlaWdodDsKCXU2NAkJCWJ3X3BlcmlvZF91czsKCXU2NAkJCWJ3X3F1b3RhX3VzOwoJdTY0CQkJYndfYnVyc3RfdXM7CgoJLyogd2hldGhlciB0aGUgY2dyb3VwIGlzIGNvbmZpZ3VyZWQgU0NIRURfSURMRSB2aWEgY3B1LmlkbGUgKi8KCWJvb2wJCQlzY2hlZF9pZGxlOwp9OwpgYGAKWXVwLCBpdCYjMzk7cyBnb3QgdGhlIGBzY2hlZF9pZGxlYCBib29sZWFuIEkgZXhwZWN0ZWQsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2dyb3VwIGlzIFNDSEVEX0lETEUuCgpUaGlzIGlzIGFsbCB3aXRoaW4gdGhlIGBzY2hlZF9leHRgIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgZXh0LmNgIGFuZCBgc3ViLmNgLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYHNjeF90Z19pbml0YCwgYHNjeF90Z19vbmxpbmVgLCBgc2N4X2dyb3VwX3NldF9pZGxlYCwgYHNjeF9jZ3JvdXBfaW5pdGAsIGBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWVgLCBhbmQgYHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWVgLiBPa2F5LCBJJiMzOTttIHN0YXJ0aW5nIHRvIGdldCB0aGUgcGljdHVyZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gQWRkaW5nIGEgbmV3IGZpZWxkIHRvIGBzY3hfY2dyb3VwX2luaXRfYXJnc2AsIGFuZCBjcml0aWNhbGx5LCBleHBvc2luZyBpdCB0byBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB0aGUgYGNncm91cF9pbml0YCBvcGVyYXRpb24sIGlzIGEgY2xlYXIgaW5kaWNhdGlvbiB0aGF0IHRoaXMgaW50cm9kdWNlcyBhIG5ldyBhdHRhY2sgc3VyZmFjZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoLi4uCgpIb2xkIG9uLCBJIG5lZWQgdG8gY29uZmlybTogRG9lcyBpdCAqYWN0dWFsbHkqIGV4cG9zZSBpdCB0byBCUEY/IFllcywgdGhlIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgICppcyogcGFzc2VkIHRvIHRoZSBgY2dyb3VwX2luaXRgIEJQRiBvcGVyYXRpb24sIHNvIGl0IGxvb2tzIGxpa2UgaXQgaXMuIAoKT2theSwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgc3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCB0aGUgcmlnaHQgdGhpbmcsIHdoYXQgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgc2NoZWRfZXh0YD8gSXMgaXQgYFNDSEVEX0NMQVNTX0VYVGAgb3IgYFNDSEVEX0VYVGA/IFRpbWUgZm9yIGEgcXVpY2sgZ3JlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNjaGVkdWxlciYjMzk7cyBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHNjaGVkdWxlciBidWlsZCBwcm9jZXNzLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBga2VybmVsL3NjaGVkL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzY2hlZHVsZXIgY29tcG9uZW50cyBsaWtlbHkgcmVzaWRlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgR05VIE1ha2VmaWxlIHN0cnVjdHVyZSwgcHJvYmFibHkgd2l0aCB0YXJnZXRzIGZvciBvYmplY3QgZmlsZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZSBjb3JlIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBhcmUgY29tcGlsZWQsIGFueSBjdXN0b20gbGlua2VyIGZsYWdzIHRoYXQgbWlnaHQgYmUgYXBwbGllZCwgYW5kIGhvdyB0aGUgc2NoZWR1bGVyJiMzOTtzIHZhcmlvdXMgbW9kdWxlcyAoaWYgdGhleSBleGlzdCkgYXJlIGhhbmRsZWQuIFBlcmhhcHMgdGhlcmUgYXJlIGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgYmFzZWQgb24gYENPTkZJR19gIG9wdGlvbnMsIGFuZCBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGUgbWFrZWZpbGUgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwga2VybmVsIGJ1aWxkIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Q09OVEVYVF9BTkFMWVNJU19jb3JlLm8gOj0geVxuICAgNDpcdENPTlRFWFRfQU5BTFlTSVNfZmFpci5vIDo9IHlcbiAgIDU6XHRcbiAgIDY6XHQjIFRoZSBjb21waWxlcnMgYXJlIGNvbXBsYWluaW5nIGFib3V0IHVudXNlZCB2YXJpYWJsZXMgaW5zaWRlIGFuIGlmKDApIHNjb3BlXG4gICA3Olx0IyBibG9jay4gVGhpcyBpcyBkYWZ0LCBzaHV0IHRoZW0gdXAuXG4gICA4Olx0Y2NmbGFncy15ICYjNDM7PSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCB1bnVzZWQtYnV0LXNldC12YXJpYWJsZSlcbiAgIDk6XHRcbiAgMTA6XHQjIFRoZXNlIGZpbGVzIGFyZSBkaXNhYmxlZCBiZWNhdXNlIHRoZXkgcHJvZHVjZSBub24taW50ZXJlc3RpbmcgZmxha3kgY292ZXJhZ2VcbiAgMTE6XHQjIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb2Ygc3lzY2FsbCBpbnB1dHMuIEUuZy4gaW52b2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlcy5cbiAgMTI6XHRLQ09WX0lOU1RSVU1FTlQgOj0gblxuICAxMzpcdFxuICAxNDpcdCMgRGlzYWJsZSBLQ1NBTiB0byBhdm9pZCBleGNlc3NpdmUgbm9pc2UgYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLiBUbyBhdm9pZFxuICAxNTpcdCMgZmFsc2UgcG9zaXRpdmVzIGVuc3VyZSBiYXJyaWVycyBpbXBsaWVkIGJ5IHNjaGVkIGZ1bmN0aW9ucyBhcmUgaW5zdHJ1bWVudGVkLlxuICAxNjpcdEtDU0FOX1NBTklUSVpFIDo9IG5cbiAgMTc6XHRLQ1NBTl9JTlNUUlVNRU5UX0JBUlJJRVJTIDo9IHlcbiAgMTg6XHRcbiAgMTk6XHRpZm5lcSAoJChDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSKSx5KVxuICAyMDpcdCMgQWNjb3JkaW5nIHRvIEFsYW4gTW9kcmEgXHUwMDNjYWxhbkBsaW51eGNhcmUuY29tLmF1XHUwMDNlLCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXNcbiAgMjE6XHQjIG5lZWRlZCBmb3IgeDg2IG9ubHkuICBXaHkgdGhpcyB1c2VkIHRvIGJlIGVuYWJsZWQgZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGlzIGJleW9uZFxuICAyMjpcdCMgbWUuICBJIHN1c3BlY3QgbW9zdCBwbGF0Zm9ybXMgZG9uJiMzOTt0IG5lZWQgdGhpcywgYnV0IHVudGlsIHdlIGtub3cgdGhhdCBmb3Igc3VyZVxuICAyMzpcdCMgSSB0dXJuIHRoaXMgb2ZmIGZvciBJQS02NCBvbmx5LiAgQW5kcmVhcyBTY2h3YWIgc2F5cyBpdCYjMzk7cyBhbHNvIG5lZWRlZCBvbiBtNjhrXG4gIDI0Olx0IyB0byBnZXQgYSBjb3JyZWN0IHZhbHVlIGZvciB0aGUgd2FpdC1jaGFubmVsIChXQ0hBTiBpbiBwcykuIC0tZGF2aWRtXG4gIDI1Olx0Q0ZMQUdTX2NvcmUubyA6PSAkKFBST0ZJTElORykgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXJcbiAgMjY6XHRlbmRpZlxuICAyNzpcdFxuICAyODpcdCMgQnJhbmNoIHByb2ZpbGluZyBpc24mIzM5O3Qgbm9pbnN0ci1zYWZlXG4gIDI5Olx0aWZkZWYgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkdcbiAgMzA6XHRDRkxBR1NfYnVpbGRfcG9saWN5Lm8gJiM0Mzs9IC1ERElTQUJMRV9CUkFOQ0hfUFJPRklMSU5HXG4gIDMxOlx0Q0ZMQUdTX2J1aWxkX3V0aWxpdHkubyAmIzQzOz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcbiAgMzI6XHRlbmRpZlxuICAzMzpcdCNcbiAgMzQ6XHQjIEJ1aWxkIGVmZmljaWVuY3k6XG4gIDM1Olx0I1xuICAzNjpcdCMgVGhlc2UgY29tcGlsYXRpb24gdW5pdHMgaGF2ZSByb3VnaGx5IHRoZSBzYW1lIHNpemUgYW5kIGNvbXBsZXhpdHkgLSBzbyB0aGVpclxuICAzNzpcdCMgYnVpbGQgcGFyYWxsZWxpemVzIHdlbGwgYW5kIGZpbmlzaGVzIHJvdWdobHkgYXQgb25jZTpcbiAgMzg6XHQjXG4gIDM5Olx0b2JqLXkgJiM0Mzs9IGNvcmUub1xuICA0MDpcdG9iai15ICYjNDM7PSBmYWlyLm9cbiAgNDE6XHRvYmoteSAmIzQzOz0gYnVpbGRfcG9saWN5Lm9cbiAgNDI6XHRvYmoteSAmIzQzOz0gYnVpbGRfdXRpbGl0eS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgU2NoZWR1bGVyJiMzOTtzIEV4dGVuc2lvbiBNb2R1bGVzKioKCkhtbSwgdGhpcyBpcyBzdHJhbmdlLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgcmVmZXJlbmNlZCBpbiB0aGUgbWFpbiBgTWFrZWZpbGVgIGZvciB0aGUgc2NoZWR1bGVyLCBga2VybmVsL3NjaGVkL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkICpub3JtYWxseSogZXhwZWN0IHRvIHNlZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYW4gZXh0ZW5zaW9uLiBJdCYjMzk7cyBhIGJpdCBvZGQgdG8gaGF2ZSBpdCBtaXNzaW5nIGZyb20gdGhlcmUuCgpPa2F5LCBsZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEZpcnN0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb2J2aW91cyBwbGFjZXMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBrZXJuZWwvc2NoZWQvZXh0L01ha2VmaWxlYCB0byBzZWUgaWYgaXQmIzM5O3MgZ290IGl0cyBvd24gYnVpbGQgcnVsZXMg4oCTIHBlcmhhcHMgaXQmIzM5O3MgYSBjb21wbGV0ZWx5IHNlbGYtY29udGFpbmVkIG1vZHVsZS4gQWx0ZXJuYXRpdmVseSwgSSYjMzk7bGwgZXhhbWluZSBga2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jYDsgbWF5YmUgaXQgaGFzIHNvbWUgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGxvZ2ljIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGhvdyB0aGUgc2NoZWR1bGluZyBwb2xpY2llcyBhcmUgY29tcGlsZWQuIExldCYjMzk7cyBzZWUgaWYgZWl0aGVyIG9mIHRob3NlIGhvbGRzIHRoZSBjbHVlIEkmIzM5O20gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0LmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy02NS0jIGluY2x1ZGUgXCYjMzQ7ZXh0L2ludGVybmFsLmhcJiMzNDtcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo2NjojIGluY2x1ZGUgXCYjMzQ7ZXh0L2NpZC5oXCYjMzQ7XG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNjctIyBpbmNsdWRlIFwmIzM0O2V4dC9hcmVuYS5oXCYjMzQ7XG4tLVxua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTcwLSMgaW5jbHVkZSBcJiMzNDtleHQvaW5saW5lcy5oXCYjMzQ7XG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmM6NzE6IyBpbmNsdWRlIFwmIzM0O2V4dC9leHQuY1wmIzM0O1xua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jOjcyOiMgaW5jbHVkZSBcJiMzNDtleHQvY2lkLmNcJiMzNDtcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy03My0jIGluY2x1ZGUgXCYjMzQ7ZXh0L2FyZW5hLmNcJiMzNDtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTIyOTM9dm9pZCB3YWtldXBfcHJlZW1wdChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTIyOTYtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyOTc6XHRpZiAocC1cdTAwM2VzY2hlZF9jbGFzcyA9PSBycS1cdTAwM2VuZXh0X2NsYXNzKSB7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyOTg6XHRcdHJxLVx1MDAzZW5leHRfY2xhc3MtXHUwMDNld2FrZXVwX3ByZWVtcHQocnEsIHAsIGZsYWdzKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjI5OS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjMwMDpcdH0gZWxzZSBpZiAoc2NoZWRfY2xhc3NfYWJvdmUocC1cdTAwM2VzY2hlZF9jbGFzcywgcnEtXHUwMDNlbmV4dF9jbGFzcykpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjMwMTpcdFx0cnEtXHUwMDNlbmV4dF9jbGFzcy1cdTAwM2V3YWtldXBfcHJlZW1wdChycSwgcCwgZmxhZ3MpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0yMzAyLVx0XHRyZXNjaGVkX2N1cnIocnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYzoyMzAzOlx0XHRycS1cdTAwM2VuZXh0X2NsYXNzID0gcC1cdTAwM2VzY2hlZF9jbGFzcztcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjMwNC1cdH1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTY3ODE9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByb3h5X3Jlc2NoZWRfaWRsZShzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjc4My1cdHB1dF9wcmV2X3NldF9uZXh0X3Rhc2socnEsIHJxLVx1MDAzZWRvbm9yLCBycS1cdTAwM2VpZGxlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njc4NDpcdHJxLVx1MDAzZW5leHRfY2xhc3MgPSBcdTAwMjZpZGxlX3NjaGVkX2NsYXNzO1xua2VybmVsL3NjaGVkL2NvcmUuYy02Nzg1LVx0cnFfc2V0X2Rvbm9yKHJxLCBycS1cdTAwM2VpZGxlKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTcwOTc9c3RhdGljIHZvaWQgX19zY2hlZCBub3RyYWNlIF9fc2NoZWR1bGUoaW50IHNjaGVkX21vZGUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy03MTY3LVx0XHRcdG5leHQgPSBwcmV2O1xua2VybmVsL3NjaGVkL2NvcmUuYzo3MTY4Olx0XHRcdHJxLVx1MDAzZW5leHRfY2xhc3MgPSBcdTAwMjZpZGxlX3NjaGVkX2NsYXNzO1xua2VybmVsL3NjaGVkL2NvcmUuYy03MTY5LVx0XHRcdGdvdG8gcGlja2VkO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzE4NS1cdG5leHQgPSBwaWNrX25leHRfdGFzayhycSwgXHUwMDI2cmYpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo3MTg2Olx0cnEtXHUwMDNlbmV4dF9jbGFzcyA9IG5leHQtXHUwMDNlc2NoZWRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTcxODctXHRpZiAoc2NoZWRfcHJveHlfZXhlYygpKSB7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz03NjYzPXZvaWQgcnRfbXV0ZXhfc2V0cHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc2NjYtXHRcdERFUVVFVUVfU0FWRSB8IERFUVVFVUVfTU9WRSB8IERFUVVFVUVfTk9DTE9DSztcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzY2NzpcdGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcywgKm5leHRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTc2NjgtXHRzdHJ1Y3QgcnFfZmxhZ3MgcmY7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy03NzI0LVx0cHJldl9jbGFzcyA9IHAtXHUwMDNlc2NoZWRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjc3MjU6XHRuZXh0X2NsYXNzID0gX19zZXRzY2hlZHVsZXJfY2xhc3MocC1cdTAwM2Vwb2xpY3ksIHByaW8pO1xua2VybmVsL3NjaGVkL2NvcmUuYy03NzI2LVxua2VybmVsL3NjaGVkL2NvcmUuYzo3NzI3Olx0aWYgKHByZXZfY2xhc3MgIT0gbmV4dF9jbGFzcylcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzcyOC1cdFx0cXVldWVfZmxhZyB8PSBERVFVRVVFX0NMQVNTO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzc2MC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Nzc2MTpcdFx0cC1cdTAwM2VzY2hlZF9jbGFzcyA9IG5leHRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3NjItXHRcdHAtXHUwMDNlcHJpbyA9IHByaW87XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwNDgtI2VuZGlmXG5rZXJuZWwvc2NoZWQvY29yZS5jOjkwNDk6XHRcdHJxLVx1MDAzZW5leHRfY2xhc3MgPSBcdTAwMjZpZGxlX3NjaGVkX2NsYXNzO1xua2VybmVsL3NjaGVkL2NvcmUuYy05MDUwLVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTEzNS1cdGluaXRfc2NoZWRfZmFpcl9jbGFzcygpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo5MTM2Olx0aW5pdF9zY2hlZF9leHRfY2xhc3MoKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTEzNy1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTExMjc2PXZvaWQgc2NoZWRfY2hhbmdlX2VuZChzdHJ1Y3Qgc2NoZWRfY2hhbmdlX2N0eCAqY3R4KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEzMDctXHRcdFx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHAtXHUwMDNlc2NoZWRfY2xhc3MsIGN0eC1cdTAwM2VjbGFzcykpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTEzMDg6XHRcdFx0XHRycS1cdTAwM2VuZXh0X2NsYXNzLVx1MDAzZXdha2V1cF9wcmVlbXB0KHJxLCBwLCAwKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTEzMDk6XHRcdFx0XHRycS1cdTAwM2VuZXh0X2NsYXNzID0gcC1cdTAwM2VzY2hlZF9jbGFzcztcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEzMTAtXHRcdFx0fVxuLS1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jPTExNDE9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGRsX3NlcnZlcl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKVxuLS1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTEyMDgtICogdXBkYXRpbmcgKGFuZCB0aGUgcXVldWVpbmcgYmFjayB0byBkbF9ycSkgd2lsbCBiZSBkb25lIGJ5IHRoZVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM6MTIwOTogKiBuZXh0IGNhbGwgdG8gZW5xdWV1ZV90YXNrX2RsKCkuXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMjEwLSAqL1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM9MTgwPXMzMiBzY3hfY2lkX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTg4LVx0c3RydWN0IHNjeF9jaWRfdGFibGVzICp0YmxzO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxODk6XHR1MzIgbmV4dF9jaWQgPSAwO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxOTA6XHRzMzIgbmV4dF9ub2RlX2lkeCA9IDAsIG5leHRfbGxjX2lkeCA9IDAsIG5leHRfY29yZV9pZHggPSAwO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0xOTEtXHRzMzIgbmV4dF9zaGFyZF9pZHggPSAwO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjI5LVx0d2hpbGUgKCFjcHVtYXNrX2VtcHR5KHRvX3dhbGspKSB7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjIzMDpcdFx0czMyIG5leHRfY3B1ID0gY3B1bWFza19maXJzdCh0b193YWxrKTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjMxOlx0XHRzMzIgbmlkID0gY3B1X3RvX25vZGUobmV4dF9jcHUpO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoyMzI6XHRcdHMzMiBub2RlX2NpZCA9IG5leHRfY2lkO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yMzMtXHRcdHMzMiBub2RlX2lkeDtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTIzOS1cdFx0aWYgKG5pZCBcdTAwM2MgMCkge1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoyNDA6XHRcdFx0Y3B1bWFza19jbGVhcl9jcHUobmV4dF9jcHUsIHRvX3dhbGspO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNDEtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNDctXHRcdGNwdW1hc2tfYW5kKG5vZGVfc2NyYXRjaCwgdG9fd2FsaywgY3B1bWFza19vZl9ub2RlKG5pZCkpO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoyNDg6XHRcdGlmIChXQVJOX09OX09OQ0UoIWNwdW1hc2tfdGVzdF9jcHUobmV4dF9jcHUsIG5vZGVfc2NyYXRjaCkpKVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNDktXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNTMtXHRcdFx0Y29uc3Qgc3RydWN0IGNwdW1hc2sgKmxsY19tYXNrID0gY3B1X2xsY19tYXNrKG5jcHUsIGxsY19mYWxsYmFjayk7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI1NDpcdFx0XHRzMzIgbGxjX2NpZCA9IG5leHRfY2lkO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNTUtXHRcdFx0czMyIGxsY19pZHggPSBuZXh0X2xsY19pZHgmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjY1LVx0XHRcdGNhbGNfc2hhcmRfbGF5b3V0KGxsY19zY3JhdGNoLCBzaGFyZF9zaXplLCBcdTAwMjZjb3Jlc19wZXJfc2hhcmQsIFx1MDAyNm5yX2xhcmdlKTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjY2Olx0XHRcdHNoYXJkX2NpZCA9IG5leHRfY2lkO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNjctXHRcdFx0c2hhcmRfaWR4ID0gbmV4dF9zaGFyZF9pZHgmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjcyLVx0XHRcdFx0Y29uc3Qgc3RydWN0IGNwdW1hc2sgKnNpYiA9IHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayhsY3B1KTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjczOlx0XHRcdFx0czMyIGNvcmVfY2lkID0gbmV4dF9jaWQ7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI3NDpcdFx0XHRcdHMzMiBjb3JlX2lkeCA9IG5leHRfY29yZV9pZHgmIzQzOyYjNDM7O1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNzUtXHRcdFx0XHRzMzIgY2NwdTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI5Ni1cdFx0XHRcdFx0Y2lkc19pbl9zaGFyZCA9IDA7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI5NzpcdFx0XHRcdFx0c2hhcmRfY2lkID0gbmV4dF9jaWQ7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI5OC1cdFx0XHRcdFx0c2hhcmRfaWR4ID0gbmV4dF9zaGFyZF9pZHgmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMzA0LVx0XHRcdFx0Zm9yX2VhY2hfY3B1KGNjcHUsIGNvcmVfc2NyYXRjaCkge1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzozMDU6XHRcdFx0XHRcdHMzMiBjaWQgPSBuZXh0X2NpZCYjNDM7JiM0Mzs7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTMwNi1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTM0Ni1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MzQ3Olx0XHRjaWQgPSBuZXh0X2NpZCYjNDM7JiM0Mzs7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTM0OC1cdFx0dGJscy1cdTAwM2VjaWRfdG9fY3B1W2NpZF0gPSBjcHU7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0zNzUtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6Mzc2Olx0Zm9yIChjaWQgPSAwOyBjaWQgXHUwMDNjIG5leHRfY2lkOyBjaWQmIzQzOyYjNDM7KSB7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTM3Ny1cdFx0czMyIHNpZHggPSB0YmxzLVx1MDAzZWNpZF90b19zaGFyZFtjaWRdO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MzU0PXN0YXRpYyBib29sIHJxX2lzX29wZW4oc3RydWN0IHJxICpycSwgdTY0IGVucV9mbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM2MS1cdCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzozNjI6XHRpZiAoc2NoZWRfY2xhc3NfYWJvdmUocnEtXHUwMDNlbmV4dF9jbGFzcywgXHUwMDI2ZXh0X3NjaGVkX2NsYXNzKSlcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzYzLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zNjgtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzY5Olx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKFx1MDAyNmV4dF9zY2hlZF9jbGFzcywgcnEtXHUwMDNlbmV4dF9jbGFzcykpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM3MC1cdFx0cmV0dXJuIHRydWU7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xNTE4PXN0YXRpYyB2b2lkIHJxX293bmVkX3Bvc3RfZW5xKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NTktXHQgKiBwdXJwb3NlLCBidXQgZm9yIGl0IHRvIGJlIGludm9rZWQsIHdlIG11c3QgZW5zdXJlIHRoYXQgd2UgYnVtcFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxNTYwOlx0ICogQHJxLVx1MDAzZW5leHRfY2xhc3MgdG8gXHUwMDI2ZXh0X3NjaGVkX2NsYXNzIGlmIGl0JiMzOTtzIGN1cnJlbnRseSBpZGxlLlxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTYxLVx0ICpcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU2Mi1cdCAqIHdha2V1cF9wcmVlbXB0KCkgZG9lcyB0aGUgYnVtcGluZywgYW5kIHNpbmNlIHdlIG9ubHkgaW52b2tlIGl0IGlmXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NjM6XHQgKiBAcnEtXHUwMDNlbmV4dF9jbGFzcyBpcyBiZWxvdyBcdTAwMjZleHRfc2NoZWRfY2xhc3MsIGl0IHdpbGwgYWxzb1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTY0LVx0ICogcmVzY2hlZF9jdXJyKHJxKS5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU2NS1cdCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxNTY2Olx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHAtXHUwMDNlc2NoZWRfY2xhc3MsIHJxLVx1MDAzZW5leHRfY2xhc3MpKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTY3LVx0XHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTczLVx0ICogTm90ZSB0aGF0IHRoZSB3YWtldXBfcHJlZW1wdCgpIGFib3ZlIG1heSBoYXZlIGFscmVhZHkgdHJpZ2dlcmVkXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NzQ6XHQgKiBhIHJlc2NoZWQgaWYgQHJxLVx1MDAzZW5leHRfY2xhc3Mgd2FzIGlkbGUuIEl0JiMzOTtzIGhhcm1sZXNzLCBzaW5jZVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTc1LVx0ICogbmVlZF9yZXNjaGVkIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGFzayBwaWNrLlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MzA3Nz1zdGF0aWMgdm9pZCBzd2l0Y2hfY2xhc3Moc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzA3OS1cdHN0cnVjdCBzY3hfc2NoZWQgKnNjaCA9IHNjeF9yb290X3Byb3RlY3RlZF9saXZlKCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjMwODA6XHRjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKm5leHRfY2xhc3MgPSBuZXh0LVx1MDAzZXNjaGVkX2NsYXNzO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMDgxLVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzA4Ny1cdCAqIGxvbmdlciB1bmRlciB0aGUgY29udHJvbCBvZiBTQ1guIFRoZXJlZm9yZSwgZG9uJiMzOTt0IGludm9rZSB0aGUgY2FsbGJhY2tcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzA4ODpcdCAqIGlmIHRoZSBuZXh0IGNsYXNzIGlzIGJlbG93IFNDWCAoaW4gd2hpY2ggY2FzZSB0aGUgQlBGIHNjaGVkdWxlciBoYXNcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzA4OS1cdCAqIGFjdGl2ZWx5IGRlY2lkZWQgbm90IHRvIHNjaGVkdWxlIGFueSB0YXNrcyBvbiB0aGUgQ1BVKS5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzA5MC1cdCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzozMDkxOlx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKFx1MDAyNmV4dF9zY2hlZF9jbGFzcywgbmV4dF9jbGFzcykpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMwOTItXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMxMDUtXHRcdFx0c3RydWN0IHNjeF9jcHVfcmVsZWFzZV9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjMxMDY6XHRcdFx0XHQucmVhc29uID0gcHJlZW1wdF9yZWFzb25fZnJvbV9jbGFzcyhuZXh0X2NsYXNzKSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzEwNy1cdFx0XHRcdC50YXNrID0gbmV4dCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTU1NTE9Ym9vbCBzY3hfYWxsb3dfdHR3dV9xdWV1ZShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01NTcxLS8qKlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo1NTcyOiAqIGhhbmRsZV9sb2NrdXAgLSBzY2hlZF9leHQgY29tbW9uIGxvY2t1cCBoYW5kbGVyXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTU1NzMtICogQGV4aXRfY3B1OiBDUFUgdG8gcmVjb3JkIGluIGV4aXRfaW5mby4gUGFzcyB0aGUgc3RhbGxlZC9odW5nIENQVSwgbm90IGN1cnJlbnQuXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04NjYxPXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2N4X3BtX25vdGlmaWVyID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODY2NC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODY2NTp2b2lkIF9faW5pdCBpbml0X3NjaGVkX2V4dF9jbGFzcyh2b2lkKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04NjY2LXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk3NS1cdC8qXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTc2Olx0ICoga2Z1bmMgcmVnaXN0cmF0aW9uIGNhbiYjMzk7dCBiZSBkb25lIGZyb20gaW5pdF9zY2hlZF9leHRfY2xhc3MoKSBhc1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk3Ny1cdCAqIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoKSBuZWVkcyBtb3N0IG9mIHRoZSBzeXN0ZW0gdG8gYmUgdXAuXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD0yMj1ib29sIHNjeF9hbGxvd190dHd1X3F1ZXVlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjIzOnZvaWQgaW5pdF9zY2hlZF9leHRfY2xhc3Modm9pZCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTI0LVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NTY9c3RhdGljIGlubGluZSBib29sIHNjeF9hbGxvd190dHd1X3F1ZXVlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gdHJ1ZTsgfVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo1NzpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zY2hlZF9leHRfY2xhc3Modm9pZCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNTgtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM9OTEzPXN0YXRpYyBib29sIGNoZWNrX2J1aWx0aW5faWRsZV9lbmFibGVkKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYy05MjYtICogV2UgY2FuJiMzOTt0IHNpbXBseSBjaGVjayB3aGV0aGVyIEBwLVx1MDAzZW1pZ3JhdGlvbl9kaXNhYmxlZCBpcyBzZXQgaW4gYVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6OTI3OiAqIHNjaGVkX2V4dCBjYWxsYmFjaywgYmVjYXVzZSB0aGUgQlBGIHByb2xvZyAoX19icGZfcHJvZ19lbnRlcikgbWF5IGRpc2FibGVcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTkyOC0gKiBtaWdyYXRpb24gZm9yIHRoZSBjdXJyZW50IHRhc2sgd2hpbGUgcnVubmluZyBCUEYgY29kZS5cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYz0xNTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBzY3hfa2Z1bmNfc2V0X2lkbGUgPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtMTUzNy0gKlxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTUzODogKiBUaGVzZSBrZnVuY3MgYXJlIGFsc28gbWVtYmVycyBvZiBzY3hfa2Z1bmNfaWRzX3VubG9ja2VkIChzZWUgZXh0LmMpIGJlY2F1c2Vcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1MzktICogdGhleSYjMzk7cmUgY2FsbGFibGUgZnJvbSB1bmxvY2tlZCBjb250ZXh0cyBpbiBhZGRpdGlvbiB0byBvcHMuc2VsZWN0X2NwdSgpIGFuZFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0xMzI9ZW51bSBzY3hfb3BzX2ZsYWdzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTM4LVx0Lypcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMzk6XHQgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgdGFzayB0byBydW4gb24gdGhlIENQVSwgZXh0IGNvcmVcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNDAtXHQgKiBrZWVwcyBydW5uaW5nIHRoZSBjdXJyZW50IHRhc2sgZXZlbiBhZnRlciBpdHMgc2xpY2UgZXhwaXJlcy4gSWYgdGhpc1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0zMjI9c3RydWN0IHNjaGVkX2V4dF9vcHMge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0zNzItXHQgKlxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjM3MzpcdCAqIFRoZSBleHQgY29yZSBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBCUEYgc2lkZSBvd25zIGEgZ2l2ZW4gdGFzayBvclxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTM3NC1cdCAqIG5vdCBhbmQgY2FuIGdyYWNlZnVsbHkgaWdub3JlIHNwdXJpb3VzIGRpc3BhdGNoZXMgZnJvbSBCUEYgc2lkZSxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTQzMT1lbnVtIHNjeF9jYXBfZmxhZ3Mge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNDgyLSAqIGRlbGl2ZXJ5IGlzIGluIGZsaWdodCBwZXIgc2hhcmQuIEZ1cnRoZXIgY2hhbmdlcyBmb2xkIGludG8gdGhlIHNhbWUgYnVmZmVyXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MTQ4MzogKiBhbmQgc2hpcCBhcyB0aGUgbmV4dCBjYWxsYmFjaywgc28gYSBzaGFyZCYjMzk7cyBjYWxsYmFja3MgZmlyZSBpbiBvcmRlci5cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNDg0LSAqXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTE2NzI9ZW51bSBzY3hfZW5xX2ZsYWdzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTcyNS1cdCAqIFRoZSB0YXNrIGJlaW5nIGVucXVldWVkIGlzIHRoZSBvbmx5IHRhc2sgYXZhaWxhYmxlIGZvciB0aGUgY3B1LiBCeVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjE3MjY6XHQgKiBkZWZhdWx0LCBleHQgY29yZSBrZWVwcyBleGVjdXRpbmcgc3VjaCB0YXNrcyBidXQgd2hlblxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTE3MjctXHQgKiAlU0NYX09QU19FTlFfTEFTVCBpcyBzcGVjaWZpZWQsIHRoZXkmIzM5O3JlIG9wcy5lbnF1ZXVlKCkmIzM5O2Qgd2l0aCB0aGVcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTgyOT1zdGF0aWMgY29uc3QgY2hhciAqc2N4X2VuYWJsZV9zdGF0ZV9zdHJbXSA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTgzOC0gKlxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjE4Mzk6ICogVGhlIHNjaGVkX2V4dCBjb3JlIHVzZXMgdGhpcyBzdGF0ZSBtYWNoaW5lIHRvIHRyYWNrIHRhc2sgb3duZXJzaGlwXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTg0MC0gKiBiZXR3ZWVuIHRoZSBTQ1ggY29yZSBhbmQgdGhlIEJQRiBzY2hlZHVsZXIuIFRoaXMgYWxsb3dzIHRoZSBCUEZcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTkxMS0gKlxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjE5MTI6ICogVGhlIHNjaGVkX2V4dCBjb3JlIHVzZXMgYSBcJiMzNDtsb2NrIGRhbmNpbmdcJiMzNDsgcHJvdG9jb2wgY29vcmRpbmF0ZWQgYnlcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xOTEzLSAqIHAtXHUwMDNlc2N4LmhvbGRpbmdfY3B1LiBXaGVuIG1vdmluZyBhIHRhc2sgdG8gYSBkaWZmZXJlbnQgcnE6XG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMC0gKiBzdWItc2NoZWR1bGVyIGVuYWJsZS9kaXNhYmxlIHBhdGhzLiBUaGUgY29yZSBkaXNwYXRjaC9lbnF1ZXVlIG1hY2hpbmVyeSBpdFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMTogKiBidWlsZHMgb24gbGl2ZXMgaW4gZXh0LmMuXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEyLSAqXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xMjMyPXZvaWQgZHJhaW5fZGVzY2VuZGFudHMoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTI0OS0gKiBzdGF0ZSB0byAlU0NYX1RBU0tfUkVBRFkgdG8gYWNjb3VudCBmb3IgdGhlIGFscmVhZHkgY29tcGxldGVkIGluaXQuIEEgdGFza1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMjUwOiAqIG9uIGEgbm9uLWV4dCBjbGFzcywgcG9zc2libGUgdW5kZXIgYW4gJVNDWF9PUFNfU1dJVENIX1BBUlRJQUwgcm9vdCwgc3RheXNcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTI1MS0gKiAlUkVBRFkgYW5kIGlzIGVuYWJsZWQgYnkgc3dpdGNoaW5nX3RvX3NjeCgpIGlmIGl0IHN3aXRjaGVzIG92ZXIuXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xNzExPXZvaWQgc2N4X3N1Yl9lbmFibGVfd29ya2ZuKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xOTU2LVx0XHRcdCAqIGlzIHdoYXQgd2Ugd2FudC4gQXNzaWduIGl0IHRvIEBzY2ggYW5kLCBpZiBpdCYjMzk7cyBvblxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxOTU3Olx0XHRcdCAqIHRoZSBleHQgY2xhc3MsIGVuYWJsZS4gQSBub24tZXh0IHRhc2ssIHBvc3NpYmxlIHVuZGVyXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE5NTgtXHRcdFx0ICogYW4gJVNDWF9PUFNfU1dJVENIX1BBUlRJQUwgcm9vdCwgc3RheXMgUkVBRFkgYW5kIGlzXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz02OTc4PXN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy03MDMyLVx0ICogY3VycmVudCBkb25vci4gSW4gY2FzZSBvZiBwcm94eS1leGVjdXRpb24sIHRoZSBleGVjdXRpb25cbmtlcm5lbC9zY2hlZC9mYWlyLmM6NzAzMzpcdCAqIGNvbnRleHQgY2Fubm90IGV4aXQgdG8gdGhlIHVzZXJzcGFjZSB3aGlsZSBob2xkaW5nIGEgbXV0ZXhcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzAzNC1cdCAqIGFuZCB0aGUgcnVsZSBvZiB0aHJvdHRsZSBkZWZlcnJhbCB0byBvbmx5IHRocm90dGxlIHRoZVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTU0NTI9aW50IHNjaGVkX2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgbG9uZyBpZGxlKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU0ODItXHRcdGlmIChXQVJOX09OX09OQ0Uod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQ4MzpcdFx0XHRnb3RvIG5leHRfY3B1O1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTQ4NC1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NTAyLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTUwMzpuZXh0X2NwdTpcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU1MDQtXHRcdHJxX3VubG9ja19pcnFyZXN0b3JlKHJxLCBcdTAwMjZyZik7XG4tLVxua2VybmVsL3NjaGVkL3J0LmM9MjA3OD1zdGF0aWMgdm9pZCBwdXNoX3J0X3Rhc2tzKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3J0LmMtMjEyNy0gKi9cbmtlcm5lbC9zY2hlZC9ydC5jOjIxMjg6c3RhdGljIGludCBydG9fbmV4dF9jcHUoc3RydWN0IHJvb3RfZG9tYWluICpyZClcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMjkte1xuLS1cbmtlcm5lbC9zY2hlZC9ydC5jLTIxMzUtXHQgKiBXaGVuIHN0YXJ0aW5nIHRoZSBJUEkgUlQgcHVzaGluZywgdGhlIHJ0b19jcHUgaXMgc2V0IHRvIC0xLFxua2VybmVsL3NjaGVkL3J0LmM6MjEzNjpcdCAqIHJ0X25leHRfY3B1KCkgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBmaXJzdCBDUFUgZm91bmQgaW5cbmtlcm5lbC9zY2hlZC9ydC5jLTIxMzctXHQgKiB0aGUgcnRvX21hc2suXG5rZXJuZWwvc2NoZWQvcnQuYy0yMTM4LVx0ICpcbmtlcm5lbC9zY2hlZC9ydC5jOjIxMzk6XHQgKiBJZiBydG9fbmV4dF9jcHUoKSBpcyBjYWxsZWQgd2l0aCBydG9fY3B1IGlzIGEgdmFsaWQgQ1BVLCBpdFxua2VybmVsL3NjaGVkL3J0LmMtMjE0MC1cdCAqIHdpbGwgcmV0dXJuIHRoZSBuZXh0IENQVSBmb3VuZCBpbiB0aGUgcnRvX21hc2suXG4tLVxua2VybmVsL3NjaGVkL3J0LmM9MjE5MD1zdGF0aWMgdm9pZCB0ZWxsX2NwdV90b19wdXNoKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3J0LmMtMjIwOS1cdGlmIChycS1cdTAwM2VyZC1cdTAwM2VydG9fY3B1IFx1MDAzYyAwKVxua2VybmVsL3NjaGVkL3J0LmM6MjIxMDpcdFx0Y3B1ID0gcnRvX25leHRfY3B1KHJxLVx1MDAzZXJkKTtcbmtlcm5lbC9zY2hlZC9ydC5jLTIyMTEtXG4tLVxua2VybmVsL3NjaGVkL3J0LmM9MjIyND12b2lkIHJ0b19wdXNoX2lycV93b3JrX2Z1bmMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9zY2hlZC9ydC5jLTIyNDYtXHQvKiBQYXNzIHRoZSBJUEkgdG8gdGhlIG5leHQgcnQgb3ZlcmxvYWRlZCBxdWV1ZSAqL1xua2VybmVsL3NjaGVkL3J0LmM6MjI0NzpcdGNwdSA9IHJ0b19uZXh0X2NwdShyZCk7XG5rZXJuZWwvc2NoZWQvcnQuYy0yMjQ4LVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMTg3LVx0Lypcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjExODg6XHQgKiBUaGUgbmV4dCBjYWNoZWxpbmUgaG9sZHMgdGhlIChob3QpIHJ1bnF1ZXVlIGxvY2ssIGFzIHdlbGwgYXNcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTExODktXHQgKiBzb21lIG90aGVyIGxlc3MgcGVyZm9ybWFuY2UtY3JpdGljYWwgZmllbGRzLlxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyNTEtXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdCpzdG9wO1xua2VybmVsL3NjaGVkL3NjaGVkLmg6MTI1MjpcdGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqbmV4dF9jbGFzcztcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyNTMtXHR1bnNpZ25lZCBsb25nXHRcdG5leHRfYmFsYW5jZTtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0yODY3PXN0YXRpYyBpbmxpbmUgdm9pZCBycV9tb2RpZmllZF9iZWdpbihzdHJ1Y3QgcnEgKnJxLCBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzKVxua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg2OC17XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODY5Olx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHJxLVx1MDAzZW5leHRfY2xhc3MsIGNsYXNzKSlcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjI4NzA6XHRcdHJxLVx1MDAzZW5leHRfY2xhc3MgPSBjbGFzcztcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NzEtfVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTI4NzM9c3RhdGljIGlubGluZSBib29sIHJxX21vZGlmaWVkX2Fib3ZlKHN0cnVjdCBycSAqcnEsIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3MpXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODc0LXtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjI4NzU6XHRyZXR1cm4gc2NoZWRfY2xhc3NfYWJvdmUocnEtXHUwMDNlbmV4dF9jbGFzcywgY2xhc3MpO1xua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg3Ni19XG4tLVxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM9NDkzPWludCBfX3NjaGVkX3NldHNjaGVkdWxlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG4tLVxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNDk4LVx0aW50IHJldHZhbCwgb2xkcHJpbywgbmV3cHJpbztcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jOjQ5OTpcdGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcywgKm5leHRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYy01MDAtXHRzdHJ1Y3QgYmFsYW5jZV9jYWxsYmFjayAqaGVhZDtcbi0tXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYy02NzUtXHRwcmV2X2NsYXNzID0gcC1cdTAwM2VzY2hlZF9jbGFzcztcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jOjY3NjpcdG5leHRfY2xhc3MgPSBfX3NldHNjaGVkdWxlcl9jbGFzcyhwb2xpY3ksIG5ld3ByaW8pO1xua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjc3LVxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM6Njc4Olx0aWYgKHByZXZfY2xhc3MgIT0gbmV4dF9jbGFzcylcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTY3OS1cdFx0cXVldWVfZmxhZ3MgfD0gREVRVUVVRV9DTEFTUztcbi0tXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYy02ODQtXHRcdFx0X19zZXRzY2hlZHVsZXJfcGFyYW1zKHAsIGF0dHIpO1xua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM6Njg1Olx0XHRcdHAtXHUwMDNlc2NoZWRfY2xhc3MgPSBuZXh0X2NsYXNzO1xua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjg2LVx0XHRcdHAtXHUwMDNlcHJpbyA9IG5ld3ByaW87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgRXh0ZW5zaW9uIFNjaGVkdWxlciBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCBpcyBiZWluZyBpbmNsdWRlZCB3aXRoaW4gYGtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuY2AuIEludGVyZXN0aW5nLiBJIHNob3VsZCBwcm9iYWJseSByZS1leGFtaW5lIGJvdGggYGtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuY2AgYW5kIHRoZSBhc3NvY2lhdGVkIGBNYWtlZmlsZWAgaW4gdGhlIGBrZXJuZWwvc2NoZWRgIGRpcmVjdG9yeS4gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGV4dGVuc2lvbiBzY2hlZHVsZXIgaXMgYmVpbmcgaW50ZWdyYXRlZC4KCldhaXQgYSBzZWNvbmTigKYgSSYjMzk7dmUgZ290IGl0LiBUaGUgY29tcGlsYXRpb24gb2YgYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIGlzIGNvbmRpdGlvbmFsIOKAkyBpdCYjMzk7cyBvbmx5IGluY2x1ZGVkIHdoZW4gYENPTkZJR19TQ0hFRF9DTEFTU19FWFRgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gTGV0IG1lIGNoZWNrIHRoZSBga2VybmVsL3NjaGVkL0tjb25maWdgIGZpbGUgb3IgYW5vdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBzZWUgaG93IGBTQ0hFRF9DTEFTU19FWFRgIGlzIGV4cG9zZWQgYW5kIGNvbnRyb2xsZWQuIFRoYXQgc2hvdWxkIGV4cGxhaW4gdGhlIHdob2xlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTU5LVxua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jOjYwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNjEtIyBpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjYwLVxua2VybmVsL3NjaGVkL2NvcmUuYzoyNjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjYyLVx0aWYgKHBhID09IE1BWF9SVF9QUklPICYjNDM7IE1BWF9OSUNFICYjNDM7IDEpXHQvKiBleHQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ1NzM9c3RhdGljIHZvaWQgX19zY2hlZF9mb3JrKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYxMC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDYxMTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEyLVx0aW5pdF9zY3hfZW50aXR5KFx1MDAyNnAtXHUwMDNlc2N4KTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ4MTM9aW50IHNjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00ODYwLVx0XHRwLVx1MDAzZXNjaGVkX2NsYXNzID0gXHUwMDI2cnRfc2NoZWRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjQ4NjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDg2Mi1cdH0gZWxzZSBpZiAodGFza19zaG91bGRfc2N4KHAtXHUwMDNlcG9saWN5KSkge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzYwOD1jb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKl9fc2V0c2NoZWR1bGVyX2NsYXNzKGludCBwb2xpY3ksIGludCBwcmlvKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzYxNS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzYxNjojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2NvcmUuYy03NjE3LVx0aWYgKHRhc2tfc2hvdWxkX3NjeChwb2xpY3kpKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODg2OD1pbnQgc2NoZWRfY3B1X2R5aW5nKHVuc2lnbmVkIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04ODgyLVx0ZGxfc2VydmVyX3N0b3AoXHUwMDI2cnEtXHUwMDNlZmFpcl9zZXJ2ZXIpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo4ODgzOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg4ODQtXHRkbF9zZXJ2ZXJfc3RvcChcdTAwMjZycS1cdTAwM2VleHRfc2VydmVyKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg5NTE9dm9pZCBfX2luaXQgc2NoZWRfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2MC1cdEJVR19PTighc2NoZWRfY2xhc3NfYWJvdmUoXHUwMDI2ZmFpcl9zY2hlZF9jbGFzcywgXHUwMDI2aWRsZV9zY2hlZF9jbGFzcykpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo4OTYxOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NjItXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MsIFx1MDAyNmV4dF9zY2hlZF9jbGFzcykpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA3OC1cdFx0ZmFpcl9zZXJ2ZXJfaW5pdChycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjkwNzk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA4MC1cdFx0ZXh0X3NlcnZlcl9pbml0KHJxKTtcbi0tXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xMDg9c3RhdGljIGlubGluZSB1OCBkbF9nZXRfdHlwZShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMTMtXHRcdHJldHVybiBETF9TRVJWRVJfRkFJUjtcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjExNDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMTE1LVx0aWYgKGRsX3NlID09IFx1MDAyNnJxLVx1MDAzZWV4dF9zZXJ2ZXIpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MTg0Mj12b2lkIHNjaGVkX2luaXRfZGxfc2VydmVycyh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTE4NjYtXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYzoxODY3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY4LVx0XHRkbF9zZSA9IFx1MDAyNnJxLVx1MDAzZWV4dF9zZXJ2ZXI7XG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ1MT1zdGF0aWMgdm9pZCBkbF9zZXJ2ZXJfYWRkX2J3KHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMzQ1OC1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NTk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTM0NjAtXHRkbF9zZSA9IFx1MDAyNmNwdV9ycShjcHUpLVx1MDAzZWV4dF9zZXJ2ZXI7XG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ2Nj1zdGF0aWMgdTY0IGRsX3NlcnZlcl9yZWFkX2J3KGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMzQ3My1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NzQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTM0NzUtXHRpZiAoY3B1X3JxKGNwdSktXHUwMDNlZXh0X3NlcnZlci5kbF9zZXJ2ZXIgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NDk0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3NjaGVkO1xua2VybmVsL3NjaGVkL2RlYnVnLmMtNDk1LVxua2VybmVsL3NjaGVkL2RlYnVnLmM6NDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvZGVidWcuYy00OTctc3RhdGljIHNzaXplX3Rcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYz01NjE9c3RhdGljIHZvaWQgZGVidWdmc19leHRfc2VydmVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy01ODAtfVxua2VybmVsL3NjaGVkL2RlYnVnLmM6NTgxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXG5rZXJuZWwvc2NoZWQvZGVidWcuYy01ODItXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NjktXHRkZWJ1Z2ZzX2ZhaXJfc2VydmVyX2luaXQoKTtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjc3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNzcxLVx0ZGVidWdmc19leHRfc2VydmVyX2luaXQoKTtcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYz0xNDA2PXZvaWQgcHJvY19zY2hlZF9zaG93X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMTUwNS1cdH1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjE1MDY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTE1MDctXHRfX1BTKFwmIzM0O2V4dC5lbmFibGVkXCYjMzQ7LCB0YXNrX29uX3NjeChwKSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz02NDE9dm9pZCBzY3hfc2V0X3Rhc2tfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgc3RhdGUpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02OTctICogc2N4X3Rhc2tzIGNhbiBiZSByZW1vdmVkIGluIGZhdm9yIG9mIGFsd2F5cyB1c2luZyBjZ3JvdXAgaXRlcmF0aW9uIGlmXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjY5ODogKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUIGRlcGVuZHMgb24gQ09ORklHX0NHUk9VUFMuXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTY5OS0gKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOC0gKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC0xMC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTM5PWJvb2wgc2N4X3ByaW9fbGVzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmEsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYixcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTQyLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo0MzojZWxzZVx0LyogQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC00NC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTU3PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NjaGVkX2V4dF9jbGFzcyh2b2lkKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC01OC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NTk6I2VuZGlmXHQvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYwLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo2MTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC02Mi12b2lkIF9fc2N4X3VwZGF0ZV9pZGxlKHN0cnVjdCBycSAqcnEsIGJvb2wgaWRsZSwgYm9vbCBkb19ub3RpZnkpO1xuLS1cbmtlcm5lbC9zY2hlZC9pZGxlLmM9NTU3PXN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2lkbGUoc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU2OS1cdGRsX3NlcnZlcl91cGRhdGVfaWRsZShcdTAwMjZycS1cdTAwM2VmYWlyX3NlcnZlciwgZGVsdGFfZXhlYyk7XG5rZXJuZWwvc2NoZWQvaWRsZS5jOjU3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2lkbGUuYy01NzEtXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXHUwMDI2cnEtXHUwMDNlZXh0X3NlcnZlciwgZGVsdGFfZXhlYyk7XG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTk0PXN0YXRpYyBpbmxpbmUgaW50IG5vcm1hbF9wb2xpY3koaW50IHBvbGljeSlcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5NS17XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5Ny1cdGlmIChwb2xpY3kgPT0gU0NIRURfRVhUKVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTY4MT1zdHJ1Y3QgY2ZzX3JxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC03NzktXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo3ODA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTc4MS0vKiBzY3hfcnEtXHUwMDNlZmxhZ3MsIHByb3RlY3RlZCBieSB0aGUgcnEgbG9jayAqL1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTgxMT1zdHJ1Y3Qgc2N4X3JxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC04NTAtfTtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjg1MTojZW5kaWYgLyogQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL3NjaGVkLmgtODUyLVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjEzLVx0c3RydWN0IGRsX3JxXHRcdGRsO1xua2VybmVsL3NjaGVkL3NjaGVkLmg6MTIxNDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxNS1cdHN0cnVjdCBzY3hfcnFcdFx0c2N4O1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE4ODU9ZXh0ZXJuIHN0cnVjdCBiYWxhbmNlX2NhbGxiYWNrIGJhbGFuY2VfcHVzaF9jYWxsYmFjaztcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODYtXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxODg3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xODg4LWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgZXh0X3NjaGVkX2NsYXNzO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MDQ9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxMC1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjE5MTE6I2Vsc2UgLyogIUNPTkZJR19TQ0hFRF9DTEFTU19FWFQ6ICovXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTEyLSNkZWZpbmUgc2N4X2VuYWJsZWQoKVx0XHRmYWxzZVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MTY9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTE3OiNlbmRpZiAvKiAhQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxOC1cbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0yODQxPXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpuZXh0X2FjdGl2ZV9jbGFzcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzKVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NDMtXHRjbGFzcyYjNDM7JiM0Mzs7XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODQ0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODQ1LVx0aWYgKHNjeF9zd2l0Y2hlZF9hbGwoKSBcdTAwMjZcdTAwMjYgY2xhc3MgPT0gXHUwMDI2ZmFpcl9zY2hlZF9jbGFzcylcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz00NzQ9dm9pZCBycV9hdHRhY2hfcm9vdChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKVxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTUxMi1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjUxMzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNTE0LVx0aWYgKHJxLVx1MDAzZWV4dF9zZXJ2ZXIuZGxfc2VydmVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dGVuZGVkIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgaGVyZSBpcyBgU0NIRURfQ0xBU1NfRVhUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuIEhtbSwgdGhlIGNvZGUgc2VlbXMgdG8gYmUgZm9jdXNlZCBhcm91bmQgYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gVGhhdCYjMzk7cyB1c2VkIGluIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYHNjeF9jZ3JvdXBfaW5pdGAsIGBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWVgLCBhbmQgYHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWVgLiBBbGwgb2YgdGhlc2UsIHRoZSBjb2RlIHRlbGxzIG1lLCBhcmUgbG9jYXRlZCB3aXRoaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIGFuZCBga2VybmVsL3NjaGVkL2V4dC9zdWIuY2AuCgpSaWdodCwgYFNDSEVEX0NMQVNTX0VYVGDigKYgbWFraW5nIGEgbm90ZSB0byBrZWVwIHRoYXQgY29uZmlndXJhdGlvbiBpbiBtaW5kIGFzIEkgcHJvY2VzcyB0aGlzLiBIYW5nIG9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgYW5kIHNlYXJjaCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgY2dyb3VwX2luaXRgIHRvIGNvbmZpcm0gdGhhdCBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2V4dC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2V4dC9leHQuYz00NjgwPXZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY5MS0gKlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NjkyOiAqIFJldHVybiB0aGUgc2NoZWQgdGhhdCBAdGcmIzM5O3Mgb3BzLmNncm91cF9pbml0KCkgc3VjY2VlZGVkIG9uLCAlTlVMTCBpZiBAdGdcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY5My0gKiBpc24mIzM5O3QgaW5pdGVkLiBBbiBhdXRvZ3JvdXAgdGcgaGFzIG5vIGNncm91cCBvZiBpdHMgb3duIGFuZCByZXNvbHZlcyB0byB0aGVcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3MDU9c3RhdGljIHN0cnVjdCBzY3hfc2NoZWQgKnNjeF90Z19zY2hlZChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzExLVx0XHR0ZyA9IFx1MDAyNnJvb3RfdGFza19ncm91cDtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDcxMjpcdC8qIElOSVRFRCBtZWFucyBvcHMuY2dyb3VwX2luaXQoKSBzdWNjZWVkZWQgb24gQHRnLVx1MDAzZXNjeC5zY2hlZCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzEzLVx0cmV0dXJuICh0Zy1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UR19JTklURUQpID8gdGctXHUwMDNlc2N4LnNjaGVkIDogTlVMTDtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3MjUtICogUmV0dXJuICVOVUxMIGlmIHRoZSBwYXJlbnQgdGFza19ncm91cCBoYXMgbm8gc2NoZWQuIFRoYXQgY2FuIGhhcHBlbiB3aGVuIHRoZVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NzI2OiAqIHBhcmVudCYjMzk7cyBvcHMuY2dyb3VwX2luaXQoKSBmYWlscyB3aGlsZSBhIHN1Yi1zY2hlZHVsZXIgaXMgYmVpbmcgZGlzYWJsZWQuXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3MjctICpcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3NDI9aW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc2MS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc2MjpcdFx0aWYgKFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfaW5pdCkpIHtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc2MzpcdFx0XHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NjQtXHRcdFx0XHR7IC53ZWlnaHQgPSB0Zy1cdTAwM2VzY3gud2VpZ2h0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc2OS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc3MDpcdFx0XHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc3MS1cdFx0XHRcdFx0ICAgICAgTlVMTCwgdGctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YXJncyk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzItXHRcdFx0aWYgKHJldClcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc3MzpcdFx0XHRcdHJldCA9IHNjeF9vcHNfc2FuaXRpemVfZXJyKHNjaCwgXCYjMzQ7Y2dyb3VwX2luaXRcJiMzNDssIHJldCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzQtXHRcdH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUxNDc9c3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNTctXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNTg6XHRcdC8qIGFsc28gY2xlYXIgdGhlIHNjaGVkIG9mIHRncyB3aG9zZSBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE1OS1cdFx0dGctXHUwMDNlc2N4LnNjaGVkID0gTlVMTDtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNjctXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNjg6c3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTY5LXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxODItXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxODM6XHRcdGlmIChzY2gtXHUwMDNlb3BzLmNncm91cF9pbml0KSB7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxODQ6XHRcdFx0c3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxODUtXHRcdFx0XHQud2VpZ2h0ID0gdGctXHUwMDNlc2N4LndlaWdodCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxOTEtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxOTI6XHRcdFx0cmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy1cdTAwM2VjZ3JvdXAsIFx1MDAyNmFyZ3MpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTkzLVx0XHRcdGlmIChyZXQpIHtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5NDpcdFx0XHRcdHNjeF9lcnJvcihzY2gsIFwmIzM0O29wcy5jZ3JvdXBfaW5pdCgpIGZhaWxlZCAoJWQpXCYjMzQ7LCByZXQpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTk1LVx0XHRcdFx0cmV0dXJuIHJldDtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUyMDc9c3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTIwODpzdGF0aWMgaW50IHNjeF9jZ3JvdXBfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpIHsgcmV0dXJuIDA7IH1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTIwOS0jZW5kaWZcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc0Njg9c3RhdGljIHZvaWQgc2N4X3Jvb3RfZW5hYmxlX3dvcmtmbihzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzcxMC1cdHNldF9jZ3JvdXBfc2NoZWQoc2NoX2Nncm91cChzY2gpLCBzY2gpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzo3NzExOlx0cmV0ID0gc2N4X2Nncm91cF9pbml0KHNjaCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc3MTItXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODA3Mj1zdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwODAtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA4MTpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4Mi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KTpcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyMzc9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyMzgtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODIzOTpzdGF0aWMgczMyIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncykgeyByZXR1cm4gLUVJTlZBTDsgfVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQwLXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9leGl0KHN0cnVjdCBjZ3JvdXAgKmNncnApIHt9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjU5PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyBfX2JwZl9vcHNfc2NoZWRfZXh0X29wcyA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODAtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI4MTpcdC5jZ3JvdXBfaW5pdFx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0LFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjgyLVx0LmNncm91cF9leGl0XHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2V4aXQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzI2PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQgX19icGZfb3BzX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM0NS0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzQ2Olx0LmNwdWN0bF9pbml0XHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNDctXHQuY3B1Y3RsX2V4aXRcdFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfZXhpdCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzgzPXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5MC0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDc5MTpcdFtTQ1hfT1BfSURYKGNncm91cF9pbml0KV1cdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5Mi1cdFtTQ1hfT1BfSURYKGNncm91cF9leGl0KV1cdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTg9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTU0LSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTU1Olx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfaW5pdCwgY3B1Y3RsX2luaXQpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cdENJRF9PRkZTRVRfTUFUQ0goY2dyb3VwX2V4aXQsIGNwdWN0bF9leGl0KTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjQ4PXN0cnVjdCBzY3hfZXhpdF90YXNrX2FyZ3Mge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNTItXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjUzOi8qIGFyZ3VtZW50IGNvbnRhaW5lciBmb3Igb3BzLmNncm91cF9pbml0KCkgKi9cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoyNTQ6c3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNTUtXHQvKiB0aGUgd2VpZ2h0IG9mIHRoZSBjZ3JvdXAgWzEuLjEwMDAwXSAqL1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0zMjI9c3RydWN0IHNjaGVkX2V4dF9vcHMge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTMtXHQvKipcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NTQ6XHQgKiBAY2dyb3VwX2luaXQ6IEluaXRpYWxpemUgYSBjZ3JvdXBcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTUtXHQgKiBAY2dycDogY2dyb3VwIGJlaW5nIGluaXRpYWxpemVkXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY2Mi1cdCAqIENncm91cCBoYW5kb3ZlcnMgYWxzbyBnZW5lcmF0ZSB0aGVzZSBvcHM6IGFuIGVuYWJsaW5nIHN1Yi1zY2hlZHVsZXJcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NjM6XHQgKiByZWNlaXZlcyBvcHMuY2dyb3VwX2luaXQoKSBmb3IgZXZlcnkgY2dyb3VwIGluIGl0cyBzdWJ0cmVlIHdoaWxlIHRoZVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY2NC1cdCAqIHByZXZpb3VzIHNjaGVkIHJlY2VpdmVzIG9wcy5jZ3JvdXBfZXhpdCgpLCBhbmQgZGlzYWJsaW5nIHJldmVyc2VzIHRoZVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NzUtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NzY6XHRzMzIgKCpjZ3JvdXBfaW5pdCkoc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2Nzc6XHRcdFx0ICAgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzICphcmdzKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NzgtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY4My1cdCAqIEV4aXQgQGNncnAgZm9yIHNjaGVkX2V4dCwgZGVsaXZlcmVkIHRvIHRoZSBzY2hlZCB3aG9zZVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY4NDpcdCAqIG9wcy5jZ3JvdXBfaW5pdCgpIGl0IHBhaXJzIHdpdGgsIGVpdGhlciB3aGVuIHRoZSBCUEYgc2NoZWR1bGVyIGlzXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNjg1LVx0ICogYmVpbmcgdW5sb2FkZWQgb3Igd2hlbiBAY2dycCBpcyBkZXN0cm95ZWQuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay5cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzA0LVx0ICogb3BzLmV4aXRfdGFzaygpIGFuZCBvcHMuaW5pdF90YXNrKCkgaW5zdGVhZC4gQGZyb20gYW5kIEB0byBjYW5cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3MDU6XHQgKiByZWZlcmVuY2UgY2dyb3VwcyB0aGUgc2NoZWQgbmV2ZXIgcmVjZWl2ZWQgb3BzLmNncm91cF9pbml0KCkgZm9yLCBhc1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTcwNi1cdCAqIHRoZSBjcHUgY29udHJvbGxlciBjYW4gYmUgY29hcnNlciB0aGFuIHRoZSBzdWItc2NoZWR1bGVyIHRvcG9sb2d5LlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NDUtXHQgKiBkZWxpdmVyZWQgdG8gQGNncnAmIzM5O3MgcGFyZW50JiMzOTtzIHNjaGVkLiBUaGF0IHNjaGVkIG1heSBuZXZlciBoYXZlIHNlZW5cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3NDY6XHQgKiBvcHMuY2dyb3VwX2luaXQoKSBmb3IgQGNncnAgLSBhdCBhIHN1Yi1zY2hlZHVsZXIgYXR0YWNoIHBvaW50LCB0aGVcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NDctXHQgKiBwYXJlbnQgc2NoZWQgdHJhY2tzIEBjZ3JwIHRocm91Z2ggb3BzLnN1Yl9hdHRhY2goKSBpbnN0ZWFkLlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0xMDQ2PXN0cnVjdCBzY2hlZF9leHRfb3BzX2NpZCB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwNzItI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDczOlx0czMyICgqY3B1Y3RsX2luaXQpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3NC1cdHZvaWQgKCpjcHVjdGxfZXhpdCkoc3RydWN0IGNncm91cCAqY2dycCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xMjk0PXN0YXRpYyB2b2lkIHNjeF9mYWlsX3BhcmVudChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzM2LSAqICVTQ1hfVEdfSU5JVEVEIHN0YXlzIHNldCB0aHJvdWdob3V0LCBleGNlcHQgZm9yIGEgdGFza19ncm91cCB3aG9zZVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzM3OiAqIG9wcy5jZ3JvdXBfaW5pdCgpIGZhaWxlZCBvbiB0aGUgcGFyZW50IChzZWUgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZSgpKTpcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMzOC0gKiB0aGVyZSBpcyBub3RoaW5nIHRvIGV4aXQgZnJvbSB0aGUgcGFyZW50IGFuZCAlU0NYX1RHX0lOSVRFRCBpcyBzZXQgYmFjayB3aXRoXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xMzQ5PXN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNTgtXHRcdHN0cnVjdCB0YXNrX2dyb3VwICp0ZyA9IGNzc190Zyhjc3MpO1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzU5Olx0XHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTM2MC1cdFx0XHQud2VpZ2h0ID0gdGctXHUwMDNlc2N4LndlaWdodCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNzAtXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzNzE6XHRcdGlmIChTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX2luaXQpKSB7XG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzNzI6XHRcdFx0cmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy1cdTAwM2VjZ3JvdXAsIFx1MDAyNmFyZ3MpO1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzczLVx0XHRcdGlmIChyZXQpIHtcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTM3NDpcdFx0XHRcdHNjeF9lcnJvcihzY2gsIFwmIzM0O29wcy5jZ3JvdXBfaW5pdCgpIGZhaWxlZCAoJWQpXCYjMzQ7LCByZXQpO1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzc1LVx0XHRcdFx0Z290byBlcnI7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzkwLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzkxOlx0XHQvKiBza2lwIHRoZSBleGl0IGlmIHRoZSBwYXJlbnQmIzM5O3Mgb3BzLmNncm91cF9pbml0KCkgZmFpbGVkICovXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzOTItXHRcdGlmICgodGctXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEdfSU5JVEVEKSBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChwYXJlbnQsIGNncm91cF9leGl0KSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0MjctICogdGFzayByZS1ob21pbmcuIFRoZSByZW1haW5pbmcgdGFza19ncm91cHMgYXJlIHB1bnRlZDogdGhleSBtb3ZlIHRvIHRoZSBwYXJlbnRcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQyODogKiBhbnl3YXkgd2l0aCAlU0NYX1RHX0lOSVRFRCBjbGVhcmVkLCBhcyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgb3IgbmV2ZXIgcmFuXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0MjktICogZm9yIHRoZW0uIEEgcHVudGVkIHRhc2tfZ3JvdXAgZ2V0cyBubyBjZ3JvdXAgb3BzLiBUaGUgZHlpbmcgcGFyZW50JiMzOTtzIG93blxuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTQzOD1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NTMtXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjE0NTQ6XHRcdC8qIHNraXAgdGhlIGV4aXQgaWYgQHNjaCYjMzk7cyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgZm9yIHRoZSB0ZyAqL1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDU1LVx0XHRpZiAoKHRnLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RHX0lOSVRFRCkgXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfZXhpdCkpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDYyLVx0XHRzdHJ1Y3QgdGFza19ncm91cCAqdGcgPSBjc3NfdGcoY3NzKTtcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ2MzpcdFx0c3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjQtXHRcdFx0LndlaWdodCA9IHRnLVx1MDAzZXNjeC53ZWlnaHQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDkwLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxNDkxOlx0XHRpZiAoU0NYX0hBU19PUChwYXJlbnQsIGNncm91cF9pbml0KSkge1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxNDkyOlx0XHRcdHJldCA9IFNDWF9DQUxMX09QX1JFVChwYXJlbnQsIGNncm91cF9pbml0LCBOVUxMLCBjc3MtXHUwMDNlY2dyb3VwLCBcdTAwMjZhcmdzKTtcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTQ5My1cdFx0XHRpZiAocmV0KSB7XG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjE0OTQ6XHRcdFx0XHRzY3hfZXJyb3IocGFyZW50LCBcJiMzNDtvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgKCVkKSB3aGlsZSBkaXNhYmxpbmcgYSBzdWItc2NoZWR1bGVyXCYjMzQ7LFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDk1LVx0XHRcdFx0XHQgIHJldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTA5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTY2hlZHVsZXIgRXh0ZW5zaW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBhY3R1YWxseSBlbmFibGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgY2dyb3VwX2luaXRgIHdpdGhpbiB0aGUgc2NoZWR1bGVyIGV4dGVuc2lvbiAoYHNjaGVkX2V4dGApIGZyYW1ld29yay4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGFuZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGJyb2FkZXIgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgYGtlcm5lbC9zY2hlZC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpb25zIGZvciBgRVhUX0dST1VQX1NDSEVEYCBhbmQgaG9wZWZ1bGx5IGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBmZWF0dXJlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlZHVsaW5nIGFyY2hpdGVjdHVyZS4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nLCBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBzb21lIG5ldyBpbnNpZ2h0cyBhYm91dCB0aGlzIHNlY3Rpb24gb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhUX0dST1VQX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTg5NTE9dm9pZCBfX2luaXQgc2NoZWRfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3My0jZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk3NDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2NvcmUuYy04OTc1LVx0c2N4X3RnX2luaXQoXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk3NjojZW5kaWYgLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2NvcmUuYy04OTc3LSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRURcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTM3OTA9c3RhdGljIHZvaWQgdGFza190aWNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBxdWV1ZWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODA4LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozODA5OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MTAtc3RhdGljIHN0cnVjdCBjZ3JvdXAgKnRnX2NncnAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgyNC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgyNTojZWxzZVx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODI2LVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgyOC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgyOTojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgzMC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ2NDA9Ym9vbCBzY3hfY2FuX3N0b3BfdGljayhzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY3NS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDY3NjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00Njc3LVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk0Mz12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5NjMtfVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTY0OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTY1LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTY2OiNpZiBkZWZpbmVkKENPTkZJR19FWFRfR1JPVVBfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX0VYVF9TVUJfU0NIRUQpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5Njctc3RhdGljIHN0cnVjdCBjZ3JvdXAgKnJvb3RfY2dyb3VwKHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTc3PXZvaWQgc2N4X2Nncm91cF9sb2NrKHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTc5LVx0Y2dyb3VwX2xvY2soKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk4MDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTgxLVx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk4NT12b2lkIHNjeF9jZ3JvdXBfdW5sb2NrKHZvaWQpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5ODYte1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTg3OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5ODgtXHRwZXJjcHVfdXBfd3JpdGUoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk5MS19XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5OTI6I2Vsc2VcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgfHwgQ09ORklHX0VYVF9TVUJfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk5My1zdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXAgKnJvb3RfY2dyb3VwKHZvaWQpIHsgcmV0dXJuIE5VTEw7IH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5OTU9c3RhdGljIGlubGluZSB2b2lkIHNjeF9jZ3JvdXBfdW5sb2NrKHZvaWQpIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5OTY6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEIHx8IENPTkZJR19FWFRfU1VCX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTctXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01MTA3PXN0YXRpYyB2b2lkIGRlc3Ryb3lfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgdTY0IGRzcV9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNDUtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNDY6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE0Ny1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX2V4aXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODA3Mj1zdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNzktXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0X3Rhc2spOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDgwOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwODEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjM3PXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MjM4OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyMzktc3RhdGljIHMzMiBzY2hlZF9leHRfb3BzX19jZ3JvdXBfaW5pdChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgKmFyZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDY9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI0NzojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI0OC1zdGF0aWMgczMyIHNjaGVkX2V4dF9vcHNfX3N1Yl9hdHRhY2goc3RydWN0IHNjeF9zdWJfYXR0YWNoX2FyZ3MgKmFyZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNTk9c3RhdGljIHN0cnVjdCBzY2hlZF9leHRfb3BzIF9fYnBmX29wc19zY2hlZF9leHRfb3BzID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI3OS1cdC5kaXNhYmxlXHRcdD0gc2NoZWRfZXh0X29wc19fZGlzYWJsZSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI4MDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjgxLVx0LmNncm91cF9pbml0XHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzI2PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQgX19icGZfb3BzX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM0NC1cdC5kaXNhYmxlXHRcdD0gc2NoZWRfZXh0X29wc19fZGlzYWJsZSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODM0NTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzQ2LVx0LmNwdWN0bF9pbml0XHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDc4Mz1zdGF0aWMgY29uc3QgdTMyIHNjeF9rZl9hbGxvd19mbGFnc1tdID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3ODktXHRbU0NYX09QX0lEWChkdW1wKV1cdFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwNzkwOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkxLVx0W1NDWF9PUF9JRFgoY2dyb3VwX2luaXQpXVx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5Ny1cdFtTQ1hfT1BfSURYKGNncm91cF9zZXRfaWRsZSldXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTg6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzk5LVx0W1NDWF9PUF9JRFgoc3ViX2F0dGFjaCldXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1My1cdENJRF9PRkZTRVRfTUFUQ0goZHVtcF9jcHUsIGR1bXBfY2lkKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5NTQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTUtXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9pbml0LCBjcHVjdGxfaW5pdCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMTA1MT1fX2luaXRjYWxsKHNjeF9pbml0KTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDYxLSAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA2MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2My1ERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9iYW5kd2lkdGhfbWF5X3NsZWVwKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwNjQ6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD03MD1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X3VwZGF0ZV9pZGxlKHN0cnVjdCBycSAqcnEsIGJvb2wgaWRsZSwgYm9vbCBkb19ub3RpZnkpIHt9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC03My0jaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo3NDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC03NS12b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04Mz12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4NDojZWxzZVx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04NS1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7fVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTM9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjk0OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC05NS0jZW5kaWZcdC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjM1PXN0cnVjdCBzY3hfaW5pdF90YXNrX2FyZ3Mge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNDAtXHRib29sXHRcdFx0Zm9yaztcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoyNDE6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNDItXHQvKiB0aGUgY2dyb3VwIHRoZSB0YXNrIGlzIGpvaW5pbmcgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzIyPXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNjUxLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY1MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1My1cdC8qKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODYtXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6Nzg3OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc4OC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTA0Nj1zdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDcxLVx0dm9pZCAoKmR1bXBfdGFzaykoc3RydWN0IHNjeF9kdW1wX2N0eCAqY3R4LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwNzI6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDczLVx0czMyICgqY3B1Y3RsX2luaXQpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwODMtXHR2b2lkICgqY3B1Y3RsX3NldF9pZGxlKShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwODQ6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA4NS1cdHMzMiAoKnN1Yl9hdHRhY2gpKHN0cnVjdCBzY3hfc3ViX2F0dGFjaF9hcmdzICphcmdzKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjA3OT12b2lkIHNjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjIwODA6I2lmIGRlZmluZWQoQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCkgfHwgZGVmaW5lZChDT05GSUdfRVhUX1NVQl9TQ0hFRClcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yMDgxLXZvaWQgc2N4X2Nncm91cF9sb2NrKHZvaWQpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTI5ND1zdGF0aWMgdm9pZCBzY3hfZmFpbF9wYXJlbnQoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMyMC1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTMyMTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzIyLS8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2UgbmVlZCBib3RoIGBDT05GSUdfU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENPTkZJR19FWFRfR1JPVVBfU0NIRURgLiBCdXQgaG9sZCBvbiwgYmVmb3JlIEkganVzdCBibGl0aGVseSBhc3N1bWUgSSBjYW4gZW5hYmxlIHRoZW0sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYSBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gYENPTkZJR19FWFRfR1JPVVBfU0NIRURgIG1pZ2h0IGhpbmdlIG9uIGBDT05GSUdfQ0dST1VQX1NDSEVEYC4gSXTigJlzIHRoZSB1c3VhbCBkYW5jZSB3aXRoIHRoZXNlIHNldHRpbmdzIOKAkyB5b3UgY2FuJiMzOTt0IGFsd2F5cyBqdXN0IGZsaXAgdGhlIHN3aXRjaCB3aXRob3V0IGNoZWNraW5nIHVwc3RyZWFtLiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBhbmQgZW5kIHVwIHdpdGggYSBrZXJuZWwgdGhhdCB3b27igJl0IGJvb3Qgb3IgcGVyZm9ybXMgdW5wcmVkaWN0YWJseS4gUmlnaHQsIGxldOKAmXMgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBkaWcgaW50byBga2VybmVsL3NjaGVkL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVwZW5kZW5jeSBoaWVyYXJjaHkuIFNob3VsZG7igJl0IHRha2UgbG9uZyB0byBzb3J0IHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFRfR1JPVVBfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbi4gVGhlIG5hdHVyYWwgZmlyc3Qgc3RlcCwgb2YgY291cnNlLCBpcyB0byBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBJdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgYSBsb3Qgb2YgdGhlIGNvcmUgb3B0aW9ucywgZXNwZWNpYWxseSB0aGUgb25lcyByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGEgc3BlY2lmaWMgYXNwZWN0IGlzIGNvbnRyb2xsZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUX0dST1VQX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMTk2PWNvbmZpZyBSVF9HUk9VUF9TQ0hFRF9ERUZBVUxUX0RJU0FCTEVEXG4tLVxuaW5pdC9LY29uZmlnLTEyMDYtXG5pbml0L0tjb25maWc6MTIwNzpjb25maWcgRVhUX0dST1VQX1NDSEVEXG5pbml0L0tjb25maWctMTIwOC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIEtjb25maWcgZm9yIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB3b3Jrcy4gV2hlcmUgZG9lcyB0aGlzIHN0YXJ0PyBSaWdodCwgYGluaXQvS2NvbmZpZ2AgaXMgdXN1YWxseSBhIGdvb2QgYmV0LCBlc3BlY2lhbGx5IGZvciBjb3JlIGluaXRpYWxpemF0aW9uIHN0dWZmLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhcm91bmQgbGluZSAxMjA3LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIGFuZCBob3cgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaW5rZWQgdG9nZXRoZXIgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHZhcmlvdXMgc2V0dGluZ3MuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byByZWNvbnN0cnVjdCB0aGUgbG9naWMgaW4gbXkgaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExOTA6XHRcdCAgVGhpcyBmZWF0dXJlIGxldHMgeW91IGV4cGxpY2l0bHkgYWxsb2NhdGUgcmVhbCBDUFUgYmFuZHdpZHRoXG4xMTkxOlx0XHQgIHRvIHRhc2sgZ3JvdXBzLiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvXG4xMTkyOlx0XHQgIHNjaGVkdWxlIHJlYWx0aW1lIHRhc2tzIGZvciBub24tcm9vdCB1c2VycyB1bnRpbCB5b3UgYWxsb2NhdGVcbjExOTM6XHRcdCAgcmVhbHRpbWUgYmFuZHdpZHRoIGZvciB0aGVtLlxuMTE5NDpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE5NTpcdFxuMTE5NjpcdGNvbmZpZyBSVF9HUk9VUF9TQ0hFRF9ERUZBVUxUX0RJU0FCTEVEXG4xMTk3Olx0XHRib29sIFwmIzM0O1JlcXVpcmUgYm9vdCBwYXJhbWV0ZXIgdG8gZW5hYmxlIGdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX1JSL0ZJRk9cJiMzNDtcbjExOTg6XHRcdGRlcGVuZHMgb24gUlRfR1JPVVBfU0NIRURcbjExOTk6XHRcdGRlZmF1bHQgblxuMTIwMDpcdFx0aGVscFxuMTIwMTpcdFx0ICBXaGVuIHNldCwgdGhlIFJUIGdyb3VwIHNjaGVkdWxpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVGhlIG9wdGlvblxuMTIwMjpcdFx0ICBpcyBpbiBpbnZlcnRlZCBmb3JtIHNvIHRoYXQgbWVyZSBSVF9HUk9VUF9TQ0hFRCBlbmFibGVzIHRoZSBncm91cFxuMTIwMzpcdFx0ICBzY2hlZHVsaW5nLlxuMTIwNDpcdFxuMTIwNTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMjA2Olx0XG4xMjA3Olx0Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxuMTIwODpcdFx0Ym9vbFxuMTIwOTpcdFx0ZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXHUwMDI2XHUwMDI2IENHUk9VUF9TQ0hFRFxuMTIxMDpcdFx0c2VsZWN0IEdST1VQX1NDSEVEX1dFSUdIVFxuMTIxMTpcdFx0c2VsZWN0IEdST1VQX1NDSEVEX0JBTkRXSURUSFxuMTIxMjpcdFx0ZGVmYXVsdCB5XG4xMjEzOlx0XG4xMjE0Olx0ZW5kaWYgI0NHUk9VUF9TQ0hFRFxuMTIxNTpcdFxuMTIxNjpcdGNvbmZpZyBFWFRfU1VCX1NDSEVEXG4xMjE3Olx0ICAgICAgICBkZWZfYm9vbCB5XG4xMjE4Olx0ICAgICAgICBkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcdTAwMjZcdTAwMjYgQ0dST1VQU1xuMTIxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkwOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBib3RoIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCB0byBiZSBlbmFibGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGRvY3VtZW50ZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2VzLCBjaGVja2luZyB0aGUgYGluaXQvS2NvbmZpZ2AsIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YCwgYW5kIGBrZXJuZWwvc2NoZWQvS2NvbmZpZ2AgZmlsZXMuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBkZWFsaW5nIHdpdGggc2NoZWR1bGVyLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhleSYjMzk7bGwgbGlrZWx5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBuZWVkZWQgdG8gcHJvY2VlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaW4gdGhvc2UgS2NvbmZpZyBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTE1NT1jb25maWcgU0NIRURfQ09SRVxuLS1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcyLVxua2VybmVsL0tjb25maWcucHJlZW1wdDoxNzM6Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNzQtXHRib29sIFwmIzM0O0V4dGVuc2libGUgU2NoZWR1bGluZyBDbGFzc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUHJlZW1wdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCBwcmVlbXB0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL0tjb25maWcucHJlZW1wdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzMuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcmVlbXB0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGxpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBjaG9pY2VzIHRoZXJlIHRoYXQgZHJpdmUgdGhlIGJlaGF2aW9yOiB3aGV0aGVyIGl0JiMzOTtzIGZ1bGwgcHJlZW1wdGlvbiwgdm9sdW50YXJ5IHByZWVtcHRpb24sIG9yIG1heWJlIHNvbWUgbW9yZSBudWFuY2VkIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGF1dGhvcnMgY29uc2lkZXJlZCBjcml0aWNhbCBpbiBtYWtpbmcgdGhlaXIgZGVjaXNpb25zLiBJdCYjMzk7cyBwcm9iYWJseSB0aGUgYmFzaXMgdG8gc2VlIHRoZSBpbnRlci1yZWxhdGVkIGltcGFjdHMgaW4gb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0JiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRcdCAgVXNlIG9mIHRoaXMgZmVhdHVyZSBpbmNsdWRlczpcbiAxNjY6XHRcdCAgIC0gbWl0aWdhdGlvbiBvZiBzb21lIChub3QgYWxsKSBTTVQgc2lkZSBjaGFubmVscztcbiAxNjc6XHRcdCAgIC0gbGltaXRpbmcgU01UIGludGVyZmVyZW5jZSB0byBpbXByb3ZlIGRldGVybWluaXNtIGFuZC9vciBwZXJmb3JtYW5jZS5cbiAxNjg6XHRcbiAxNjk6XHRcdCAgU0NIRURfQ09SRSBpcyBkZWZhdWx0IGRpc2FibGVkLiBXaGVuIGl0IGlzIGVuYWJsZWQgYW5kIHVudXNlZCxcbiAxNzA6XHRcdCAgd2hpY2ggaXMgdGhlIGxpa2VseSB1c2FnZSBieSBMaW51eCBkaXN0cmlidXRpb25zLCB0aGVyZSBzaG91bGRcbiAxNzE6XHRcdCAgYmUgbm8gbWVhc3VyYWJsZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuXG4gMTcyOlx0XG4gMTczOlx0Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxuIDE3NDpcdFx0Ym9vbCBcJiMzNDtFeHRlbnNpYmxlIFNjaGVkdWxpbmcgQ2xhc3NcJiMzNDtcbiAxNzU6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IERFQlVHX0lORk9fQlRGXG4gMTc2Olx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAxNzc6XHRcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxuIDE3ODpcdFx0aGVscFxuIDE3OTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgbmV3IHNjaGVkdWxlciBjbGFzcyBzY2hlZF9leHQgKFNDWCksIHdoaWNoXG4gMTgwOlx0XHQgIGFsbG93cyBzY2hlZHVsaW5nIHBvbGljaWVzIHRvIGJlIGltcGxlbWVudGVkIGFzIEJQRiBwcm9ncmFtcyB0b1xuIDE4MTpcdFx0ICBhY2hpZXZlIHRoZSBmb2xsb3dpbmc6XG4gMTgyOlx0XG4gMTgzOlx0XHQgIC0gRWFzZSBvZiBleHBlcmltZW50YXRpb24gYW5kIGV4cGxvcmF0aW9uOiBFbmFibGluZyByYXBpZFxuIDE4NDpcdFx0ICAgIGl0ZXJhdGlvbiBvZiBuZXcgc2NoZWR1bGluZyBwb2xpY2llcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3OTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgd2UmIzM5O3JlIGF0IGEgcG9pbnQgd2hlcmUgd2UgbmVlZCB0byBlbnN1cmUgY2VydGFpbiBrZXJuZWwgZnVuY3Rpb25hbGl0aWVzIGFyZSBlbmFibGVkLiBUaGUgaW1tZWRpYXRlIHJlcXVpcmVtZW50cyBhcmUgYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIHdoZXJlIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYENHUk9VUF9TQ0hFRGA/IEFoLCB5ZXMsIEkgcmVjYWxsIHNlZWluZyB0aGF0IGluIGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aGUgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBrZXJuZWwgc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBzZXR0aW5ncywgZXNwZWNpYWxseSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGNncm91cHMuIExvb2tzIGxpa2Ugd2UgYXJlIG9uIHRoZSByaWdodCB0cmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTE0Nz1jb25maWcgQ0dST1VQX1dSSVRFQkFDS1xuLS1cbmluaXQvS2NvbmZpZy0xMTUxLVxuaW5pdC9LY29uZmlnOjExNTI6bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTUzLVx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjEwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQ2hlY2sqKgoKQWxyaWdodCwgc28gYENHUk9VUF9TQ0hFRGAgaXMgYSBtZW51Y29uZmlnIG9wdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhpcyByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgc3Vic3lzdGVtcyBpdCYjMzk7cyB0aWVkIHRvLCBhbnkgb3RoZXIgY29udHJvbCBncm91cCBvcHRpb25zIGl0IG1hbmRhdGVzPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IGNoYWluIGlzIGNyaXRpY2FsLiBJdCBhdm9pZHMgYSBsb3Qgb2YgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUgZHVyaW5nIGludGVncmF0aW9uIGFuZCB0cm91Ymxlc2hvb3RpbmcsIGVuc3VyZXMgSSBlbmFibGUgYWxsIHRoZSBuZWVkZWQgcGFydHMsIGFuZCBwb3RlbnRpYWxseSBoZWxwcyB0byB1bmRlcnN0YW5kIGNvbmZsaWN0cyB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBrY29uZmlnIHN0cnVjdHVyZSBhbmQgdGhlIGNvZGUgaXRzZWxmIHRvIG1hcCBvdXQgdGhvc2UgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRob3NlIGxpbmtzIGlzIHRoZSBmb3VuZGF0aW9uIGZvciBwcm9wZXJseSBjb25maWd1cmluZyB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0NTpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE0NjpcdFxuMTE0NzpcdGNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4xMTQ4Olx0XHRib29sXG4xMTQ5Olx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUwOlx0XHRkZWZhdWx0IHlcbjExNTE6XHRcbjExNTI6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1MzpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NDpcdFx0ZGVmYXVsdCBuXG4xMTU1Olx0XHRoZWxwXG4xMTU2Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1NzpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTg6XHRcdCAgdGFza3MuXG4xMTU5Olx0XG4xMTYwOlx0aWYgQ0dST1VQX1NDSEVEXG4xMTYxOlx0Y29uZmlnIEdST1VQX1NDSEVEX1dFSUdIVFxuMTE2MjpcdFx0ZGVmX2Jvb2wgblxuMTE2MzpcdFxuMTE2NDpcdGNvbmZpZyBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1OTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IENHUk9VUF9TQ0hFRCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ0dST1VQX1NDSEVEYCBwYXRjaC4gR29vZCwgbm8gb2J2aW91cyBkZXBlbmRlbmNpZXMg4oCTIHRoYXQmIzM5O3MgYSBwbHVzIGZvciBpc29sYXRpb24uIENvbmZpZy13aXNlLCBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENHUk9VUF9TQ0hFRGAgYXJlIHRoZSBrZXkgZmxhZ3MuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gSSBzZWUgdGhhdCBnZXRzIHVzZWQgaW4gYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIGNncm91cCBpbml0aWFsaXphdGlvbiBhbmQgc3ViLXNjaGVkdWxlciBhdHRhY2htZW50LCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpOb3csIHdoaWNoIG9mIHRoZXNlIGFyZSB0aGUgKmJlc3QqIHRhcmdldHM/IEkgbmVlZCB0byBuYXJyb3cgaXQgZG93bi4gTGV0JiMzOTtzIGxpc3QgdGhvc2UgZnVuY3Rpb25zIG91dCBhcyBhIGJhc2lzIGZvciBmdXp6aW5nOiBgc2N4X3RnX29ubGluZWAsIGBzY3hfY2dyb3VwX2luaXRgLCBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCwgYHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWVgLCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAuCgpOb3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXNlIGFyZSBzdGF0aWMuIFRoYXQgaW1wYWN0cyBjYWxsIHZpc2liaWxpdHkgYW5kIGZ1enppbmcgc3RyYXRlZ2llcy4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZTogYHNjeF90Z19vbmxpbmVgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgZnJvbSBhIGNhbGwgcGVyc3BlY3RpdmU7IGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGlzIGFsc28gbm9uLXN0YXRpYywgYW5vdGhlciBnb29kIHNpZ24uIGBzY3hfY2dyb3VwX2luaXRgLCBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCwgYW5kIGBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlYCBhcmUgc3RhdGljLiBTbywgSSBoYXZlIHRvIHdvcmsgYXJvdW5kIHRoYXQuCgpHaXZlbiBgc2N4X3RnX29ubGluZWAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGFyZW4mIzM5O3Qgc3RhdGljLCBJIHNob3VsZCBub3cgZm9jdXMgb24gd2hlcmUgdGhvc2UgYXJlIGNhbGxlZCB0byBnZXQgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50cnlwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjeF90Z19vbmxpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9OTU2MT1zdGF0aWMgaW50IGNwdV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTU2Ni1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTU2NzpcdHJldCA9IHNjeF90Z19vbmxpbmUodGcpO1xua2VybmVsL3NjaGVkL2NvcmUuYy05NTY4LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3MzI9c3RhdGljIHN0cnVjdCBzY3hfc2NoZWQgKnNjeF90Z19rbm9iX3NjaGVkKHN0cnVjdCB0YXNrX2dyb3VwICp0Zylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NDEtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ3NDI6aW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzQzLXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTc1PXZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NzY6aW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzctdm9pZCBzY3hfdGdfb2ZmbGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODU9c3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODY6c3RhdGljIGlubGluZSBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpIHsgcmV0dXJuIDA7IH1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODctc3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19vZmZsaW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGZyb20gYSBrZXJuZWwtbGV2ZWwgQ1BVIHJlc291cmNlIG1hbmFnZW1lbnQgcGVyc3BlY3RpdmU6CgoqKk15IEN1cnJlbnQgQ1BVIFJlc291cmNlIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IENQVSByZXNvdXJjZXMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBjZ3JvdXAgaGllcmFyY2h5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aWNpbmcgdHdvIGtleSBmdW5jdGlvbnMgcG9wcGluZyB1cCBpbiBteSB0cmFjZTogYHNjeF90Z19vbmxpbmVgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhlIGZpcnN0LCBgc2N4X3RnX29ubGluZWAsIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYGNwdV9jZ3JvdXBfY3NzX29ubGluZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgQ1BVIGNvbnRyb2xsZXImIzM5O3MgY2dyb3VwIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFRoYXQgbWFrZXMgc2Vuc2U7IHdoZW4gYSBuZXcgY2dyb3VwLCBvciBhIG5ldyBDUFUgcmVzb3VyY2UgaXMgYmVpbmcgYnJvdWdodCBvbmxpbmUsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBwbGF5aW5nIGEga2V5IHBhcnQuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGNvZGUgcGF0aCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhlbHBzIGluaXRpYWxpemUgYW5kIGFjdGl2YXRlIHRoZSBDUFUgcmVzb3VyY2VzLgoKVGhlbiB0aGVyZSYjMzk7cyBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgc2NoZWRfZ3JvdXBfc2V0X2lkbGVgIGlzIHJlYWxseSBpbnRlcmVzdGluZy4gVGhpcyBwb2ludHMgdG8gdGhpcyBmdW5jdGlvbiBoYXZpbmcgc29tZSByb2xlIGluIG1hbmFnaW5nIHRoZSBpZGxlIHN0YXRlIG9mIHNjaGVkdWxlciBncm91cHMsIGxpa2VseSByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgb3IgcmVzb3VyY2UgcmVjbGFtYXRpb24gYXQgdGhlIHNjaGVkdWxlciBsZXZlbCwgb3IgYXMgYSBjb25zZXF1ZW5jZSBvZiBDUFUgcmVzb3VyY2UgY29udGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGhvdyB0aGUgc2NoZWR1bGVyIGludGVyYWN0cyB3aXRoIHRoaXMgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBib3RoIG9mIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIGhvdyB3ZSBnZXQgYSB3b3JrbG9hZCBydW5uaW5nIG9uIHRoZSBDUFVzIG9mIGEgbm9kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU5PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2NS1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDI2NjpcdFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNjctXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMT12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI2LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTI3OnZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI4LXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgxPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTMtc3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjE1CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDE1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBmb3IgdGhlIFNjaGVkX2V4dCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBsZWQgbWUgZG93biBhIHNwZWNpZmljIHBhdGguIEkgc2VlIHRoYXQgYHNjeF9ncm91cF9zZXRfaWRsZWAgaXMgY2FsbGVkIGZyb20gYGNwdV9pZGxlX3dyaXRlX3M2NGAsIHdoaWNoIGluIHR1cm4gaXMgdGhlIGhhbmRsZXIgZm9yIHRoZSBgY3B1LmlkbGVgIGNncm91cCBmaWxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGZ1bmN0aW9ucyBsaWtlIGBzY3hfdGdfb25saW5lYCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAgYXMgdGhlIG1haW4gZm9jdXMuCgpIb3dldmVyLCBgc2N4X2Nncm91cF9pbml0YCBpcyBzdGF0aWMgYnV0IGNhbGxlZCBmcm9tIGBzY3hfcm9vdF9lbmFibGVfd29ya2ZuYCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYSBCUEYgc2NoZWR1bGVyIGlzIGxvYWRlZC4gYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAgaXMgYWxzbyBzdGF0aWMsIGNhbGxlZCBmcm9tIGBzY3hfc3ViX2VuYWJsZV93b3JrZm5gLiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoYXQgYHNjeF90Z19vbmxpbmVgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYCBhcmUgc3RpbGwgdGhlIGJlc3QgY2FuZGlkYXRlcyBkdWUgdG8gdGhlaXIgZGlyZWN0IGNvbm5lY3Rpb24gdG8gdGhlIGNncm91cCBvcGVyYXRpb25zLiBXaGlsZSB0aGUgYHNjeF9zdWJfZW5hYmxlX3dvcmtmbmAgYW5kIGBzY3hfcm9vdF9lbmFibGVfd29ya2ZuYCBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHNjaGVkX2V4dCwgdGhleSBzZWVtIG1vcmUgZ2VuZXJpYy4KCk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSBlbmFibGVkLiBJIGRlZmluaXRlbHkgbmVlZCBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENHUk9VUF9TQ0hFRGAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcuIFllcCwgYEVYVF9HUk9VUF9TQ0hFRGAgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIGJvdGggYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgIGFyZSBvbi4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0IHNlZW1zIHRoYXQgdGhlIGBzY2hlZF9pZGxlYCBzdGF0ZSBpcyBub3cgZXhwb3NlZCB0byB0aGUgQlBGIHNjaGVkdWxlciBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbXVsdGlwbGUgcGxhY2VzOiBgc2N4X2dyb3VwX3NldF9pZGxlYCwgYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIFRoaXMgbWFrZXMgdGhlIHN0YXRlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIGNncm91cCBvcGVyYXRpb25zIGFuZCBCUEYgc2NoZWRfZXh0IHByb2dyYW1zLiBUaGF0IHNlZW1zIHByZXR0eSBmdW5jdGlvbmFsLgoKT2theSwgdGhpcyBsb29rcyBzb2xpZC4gSSBhbSB0aGlua2luZyB0aGF0IHRoaXMgY29kZSB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZy4KKiAgIGBXb3J0aEZ1enppbmdgIGlzIHRydWUuCiogICBgRm9jdXNTeW1ib2xzYDogYHNjeF90Z19vbmxpbmVgLCBgc2N4X2dyb3VwX3NldF9pZGxlYC4KKiAgIGBFbmFibGVDb25maWdzYDogYFNDSEVEX0NMQVNTX0VYVGAsIGBDR1JPVVBfU0NIRURgLgoKSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X3RnX29ubGluZSYjMzQ7LAogICAgJiMzNDtzY3hfZ3JvdXBfc2V0X2lkbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0gdG8gcGFzcyB0aGUgYHNjaGVkX2lkbGVgIHN0YXRlIG9mIGEgY2dyb3VwIHRvIHRoZSBCUEYgc2NoZWR1bGVyIGR1cmluZyBjZ3JvdXAgaW5pdGlhbGl6YXRpb24gKGBvcHMuY2dyb3VwX2luaXQoKWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBkYXRhIHRvIEJQRiBwcm9ncmFtcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY3JlYXRpb24gYW5kIGBjcHUuaWRsZWAgbW9kaWZpY2F0aW9uIHdoaWxlIGEgc2NoZWRfZXh0IHNjaGVkdWxlciBpcyBhY3RpdmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3hfdGdfb25saW5lJiMzNDssCiAgICAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2NoZWRfZXh0IHN1YnN5c3RlbSB0byBwYXNzIHRoZSBgc2NoZWRfaWRsZWAgc3RhdGUgb2YgYSBjZ3JvdXAgdG8gdGhlIEJQRiBzY2hlZHVsZXIgZHVyaW5nIGNncm91cCBpbml0aWFsaXphdGlvbiAoYG9wcy5jZ3JvdXBfaW5pdCgpYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IGRhdGEgdG8gQlBGIHByb2dyYW1zIGFuZCBpcyByZWFjaGFibGUgdmlhIGNncm91cCBjcmVhdGlvbiBhbmQgYGNwdS5pZGxlYCBtb2RpZmljYXRpb24gd2hpbGUgYSBzY2hlZF9leHQgc2NoZWR1bGVyIGlzIGFjdGl2ZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW5hbWVzIGBpZGxlYCB0byBgc2NoZWRfaWRsZWAgaW4gYHN0cnVjdCBzY3hfdGFza19ncm91cGAgYW5kIGFkZHMgYHNjaGVkX2lkbGVgIHRvIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLiBJdCBpbml0aWFsaXplcyB0aGlzIG5ldyBmaWVsZCBpbiBzZXZlcmFsIHBsYWNlcyB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoZS5nLiwgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyBhcmdzID0geyAuLi4gfWApLiBJbiBDLCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB6ZXJvIG91dCBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHBhZGRpbmcgYnl0ZXMuIEZ1cnRoZXJtb3JlLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCBpcyBwYXNzZWQgdG8gYSBCUEYgcHJvZ3JhbSAoa2VybmVsIHNwYWNlKSwgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNjczZGQ0N2RlMjc4YWYzZWZiZWM0OWM3Y2JjODQyZDA0N2Q3MzAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaAppbmRleCA1ODJkN2NkNGE5ODM5Li43YjljZGI2NWRlZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgKQEAgLTMyMyw3ICYjNDM7MzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHsKIAl1NjQJCQlid19wZXJpb2RfdXM7CiAJdTY0CQkJYndfcXVvdGFfdXM7CiAJdTY0CQkJYndfYnVyc3RfdXM7Ci0JYm9vbAkJCWlkbGU7CiYjNDM7CWJvb2wJCQlzY2hlZF9pZGxlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuYwppbmRleCBjNTM5ZDE1Y2RhNjM3Li40YTljMzgyOTcwOTM1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKQEAgLTQ2ODIsNyAmIzQzOzQ2ODIsNyBAQCB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKIAl0Zy0mZ3Q7c2N4LndlaWdodCA9IENHUk9VUF9XRUlHSFRfREZMOwogCXRnLSZndDtzY3guYndfcGVyaW9kX3VzID0gZGVmYXVsdF9id19wZXJpb2RfdXMoKTsKIAl0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7Ci0JdGctJmd0O3NjeC5pZGxlID0gZmFsc2U7CiYjNDM7CXRnLSZndDtzY3guc2NoZWRfaWRsZSA9IGZhbHNlOwogfQogCiAvKioKQEAgLTQ3NjQsNyAmIzQzOzQ3NjQsOCBAQCBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiAJCQkJeyAud2VpZ2h0ID0gdGctJmd0O3NjeC53ZWlnaHQsCiAJCQkJICAuYndfcGVyaW9kX3VzID0gdGctJmd0O3NjeC5id19wZXJpb2RfdXMsCiAJCQkJICAuYndfcXVvdGFfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzLAotCQkJCSAgLmJ3X2J1cnN0X3VzID0gdGctJmd0O3NjeC5id19idXJzdF91cyB9OwomIzQzOwkJCQkgIC5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJCSAgLnNjaGVkX2lkbGUgPSB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgfTsKIAogCQkJcmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsCiAJCQkJCSAgICAgIE5VTEwsIHRnLSZndDtjc3MuY2dyb3VwLCAmYW1wO2FyZ3MpOwpAQCAtNDkzNCw3ICYjNDM7NDkzNSw3IEBAIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKQogCQlTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpOwogCiAJLyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi8KLQl0Zy0mZ3Q7c2N4LmlkbGUgPSBpZGxlOwomIzQzOwl0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgPSBpZGxlOwogCiAJcGVyY3B1X3VwX3JlYWQoJmFtcDtzY3hfY2dyb3VwX29wc19yd3NlbSk7CiB9CkBAIC01MTg1LDYgJiM0Mzs1MTg2LDcgQEAgc3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQkJCS5id19wZXJpb2RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3BlcmlvZF91cywKIAkJCQkuYndfcXVvdGFfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzLAogCQkJCS5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJCS5zY2hlZF9pZGxlID0gdGctJmd0O3NjeC5zY2hlZF9pZGxlLAogCQkJfTsKIAogCQkJcmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy0mZ3Q7Y2dyb3VwLCAmYW1wO2FyZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oCmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgKQEAgLTI1OSw2ICYjNDM7MjU5LDkgQEAgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHsKIAl1NjQJCQlid19wZXJpb2RfdXM7CiAJdTY0CQkJYndfcXVvdGFfdXM7CiAJdTY0CQkJYndfYnVyc3RfdXM7CiYjNDM7CiYjNDM7CS8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovCiYjNDM7CWJvb2wJCQlzY2hlZF9pZGxlOwogfTsKIAogZW51bSBzY3hfY3B1X3ByZWVtcHRfcmVhc29uIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmMgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jCmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9zdWIuYwpAQCAtMTM2MSw2ICYjNDM7MTM2MSw3IEBAIHN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkKIAkJCS5id19wZXJpb2RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3BlcmlvZF91cywKIAkJCS5id19xdW90YV91cyA9IHRnLSZndDtzY3guYndfcXVvdGFfdXMsCiAJCQkuYndfYnVyc3RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X2J1cnN0X3VzLAomIzQzOwkJCS5zY2hlZF9pZGxlID0gdGctJmd0O3NjeC5zY2hlZF9pZGxlLAogCQl9OwogCiAJCWlmICh0Zy0mZ3Q7c2N4LnNjaGVkICE9IHBhcmVudCB8fApAQCAtMTQ2NCw2ICYjNDM7MTQ2NSw3IEBAIHN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQkJLmJ3X3BlcmlvZF91cyA9IHRnLSZndDtzY3guYndfcGVyaW9kX3VzLAogCQkJLmJ3X3F1b3RhX3VzID0gdGctJmd0O3NjeC5id19xdW90YV91cywKIAkJCS5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJLnNjaGVkX2lkbGUgPSB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUsCiAJCX07CiAKIAkJLyogdGhlIGZpcnN0IHBhc3MgbXVzdCBoYXZlIHRyYW5zZmVycmVkIGV2ZXJ5dGhpbmcgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODkKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogMTk3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IHNjaGVkX2lkbGUgSW50cm9kdWN0aW9uIGFuZCBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBgaWRsZWAgdG8gYHNjaGVkX2lkbGVgIHdpdGhpbiB0aGUgYHNjeF90YXNrX2dyb3VwYCBzdHJ1Y3R1cmUuIE1vcmUgaW1wb3J0YW50bHksIGl0JiMzOTtzIGFkZGluZyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGFyZSB3ZSBvcGVuaW5nIG91cnNlbHZlcyB1cCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaGVyZT8mIzM0OwoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgcGFkZGluZyBleGlzdHMgd2l0aGluIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLCBhbmQgd2hldGhlciB0aGlzIHN0cnVjdCBpcyBzb21laG93IGV4cG9zZWQgdG8gQlBGIG9yLCB3b3JzZSwgdG8gdXNlci1zcGFjZS4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBSaWdodCwgYHdlaWdodGAgKHUzMiksIHRoZW4gYGJ3X3BlcmlvZF91c2AgKHU2NCksIHNvIHRoZXJlJiMzOTtzIGEgNC1ieXRlIHBhZGRpbmcgYWZ0ZXIgYHdlaWdodGAuIEFmdGVyIGBid19wZXJpb2RfdXNgLCBgYndfcXVvdGFfdXNgLCBhbmQgYGJ3X2J1cnN0X3VzYCAoYWxsIHU2NHMpLCB3ZSBoYXZlIGBib29sIHNjaGVkX2lkbGVgIHdoaWNoIGlzIDEgYnl0ZSwgc28gdGhlcmUmIzM5O3MgNyBieXRlcyBvZiBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgdGhpcyBzdHJ1Y3R1cmUuCgpOb3csIGhvdyBpcyBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCB1c2VkPyBBaCwgaXQmIzM5O3MgcGFzc2VkIHRvIGBjZ3JvdXBfaW5pdGAgQlBGIG9wZXJhdGlvbi4gU2luY2UgYGFyZ3NgIGlzIGJlaW5nIHBhc3NlZCB0byBCUEYsIHdoaWNoIHJ1bnMgaW4ga2VybmVsIHNwYWNlLCBpdCBjYW4gcG90ZW50aWFsbHkgcmVhZCB0aG9zZSBwYWRkaW5nIGJ5dGVzLiBCdXQgd2FpdCwgQlBGIHJ1bnMgaW4ga2VybmVsLCBzbyBhbiB1bmluaXRpYWxpemVkIHJlYWQgKnNob3VsZG4mIzM5O3QqIGNhdXNlIGEgdXNlci1zcGFjZSBpbmZvcm1hdGlvbiBsZWFrLCBpdCYjMzk7cyBqdXN0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgd2hpY2ggS01TQU4gc2hvdWxkIGRldGVjdC4gSG93ZXZlciwgaWYgYSBCUEYgcHJvZ3JhbSByZWFkcyBwYWRkaW5nIGJ5dGVzLCBpdCB3b3VsZCBiZSBhbiBpc3N1ZSBiZWNhdXNlIHRoZSBCUEYgdmVyaWZpZXIgd291bGRuJiMzOTt0IGtub3cgYWJvdXQgdGhlIHBhZGRpbmcgdW5sZXNzIGl0JiMzOTtzIGV4cGxpY2l0bHkgZGVmaW5lZC4KCkkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYGFyZ3NgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgdXNhZ2U6IGl0JiMzOTtzIGluaXRpYWxpemVkIHVzaW5nIGEgZGVzaWduYXRlZCBpbml0aWFsaXplci4gVGhpcyBtZWFucyB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcyBhcmUgemVyb2VkLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gQnV0LCBpcyB0aGF0IGd1YXJhbnRlZWQ/IEkmIzM5O20gc3VyZSBpdCYjMzk7cyB6ZXJvZWQsIGJ1dCBJJiMzOTtsbCBjaGVjayB0aGUgQyBzdGFuZGFyZCBhbmQgbWFrZSBzdXJlLiBPa2F5LCBDOTkgNi43LjggSW5pdGlhbGl6YXRpb24gc2F5cyB0aGF0IGlmIHRoZXJlIGFyZSBmZXdlciBpbml0aWFsaXplcnMgdGhhbiB0aGVyZSBhcmUgbWVtYmVycywgdGhlIHJlbWFpbmRlciBpcyBpbml0aWFsaXplZCBsaWtlIHN0YXRpYyBzdG9yYWdlLCBhbmQgd2l0aCBzdGF0aWMgc3RvcmFnZSwgJiMzNDthbnkgcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGJ5dGVzLiYjMzQ7CgpTbywgZXZlbiBpZiB0aGlzIHBhdGNoICpkaWQqIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgdXNlIG9mIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIGhlcmUgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBwYWRkaW5nIGlzIHplcm9lZC4gTGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHBhdGNoLiBUaGUgcGF0Y2ggKmFkZHMqIGBzY2hlZF9pZGxlYCB0byBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCwgc28gaXQgaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIgYXV0b21hdGljYWxseS4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBnbyB0aHJvdWdoIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIEFsbCBpbnN0YW5jZXMgdXNlIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLgoKTm8sIHRoZSBzdHJ1Y3R1cmUgaXMgKmZ1bGx5KiBpbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIHNpbmNlIGBhcmdzYCBpcyB1c2VkIG9ubHkgd2l0aGluIGtlcm5lbCBzcGFjZSwgYW55IHJlYWQgd2l0aGluIHRoYXQgc3BhY2Ugd291bGRuJiMzOTt0IGJlIGFuIGlzc3VlLiBUaGVyZSBpcyBubyBLTVNBTiBzcGVjaWZpYyBidWcgaGVyZS4gS0FTQU4gd291bGRuJiMzOTt0IGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYW55d2F5LiBUaGlzIHBhdGNoIGlzIHNhZmUuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb3B5LXRvLXVzZXIgc2l0dWF0aW9uLCB0aG91Z2guIEJQRiBwcm9ncmFtcyBhcmUga2VybmVsLXNwYWNlLiBUaGV5IGNhbiAqcmVhZCogdGhpcyBzdHJ1Y3QsIGJ1dCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXItc3BhY2UuIFNvLCBubyBpbmZvcm1hdGlvbiBsZWFrIHBvc3NpYmxlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGEgZnVsbHkgaW5pdGlhbGl6ZWQgZmllbGQgdG8gYSBzdHJ1Y3QgYW5kIHBhc3NpbmcgaXQgdG8gQlBGLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gSSYjMzk7bGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbmFtZXMgYGlkbGVgIHRvIGBzY2hlZF9pZGxlYCBpbiBgc3RydWN0IHNjeF90YXNrX2dyb3VwYCBhbmQgYWRkcyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIEl0IGluaXRpYWxpemVzIHRoaXMgbmV3IGZpZWxkIGluIHNldmVyYWwgcGxhY2VzIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChlLmcuLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7IC4uLiB9YCkuIEluIEMsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIHplcm8gb3V0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcy4gRnVydGhlcm1vcmUsIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGlzIHBhc3NlZCB0byBhIEJQRiBwcm9ncmFtIChrZXJuZWwgc3BhY2UpLCBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW5hbWVzIGBpZGxlYCB0byBgc2NoZWRfaWRsZWAgaW4gYHN0cnVjdCBzY3hfdGFza19ncm91cGAgYW5kIGFkZHMgYHNjaGVkX2lkbGVgIHRvIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLiBJdCBpbml0aWFsaXplcyB0aGlzIG5ldyBmaWVsZCBpbiBzZXZlcmFsIHBsYWNlcyB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoZS5nLiwgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyBhcmdzID0geyAuLi4gfWApLiBJbiBDLCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB6ZXJvIG91dCBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHBhZGRpbmcgYnl0ZXMuIEZ1cnRoZXJtb3JlLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCBpcyBwYXNzZWQgdG8gYSBCUEYgcHJvZ3JhbSAoa2VybmVsIHNwYWNlKSwgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzoxMS41Mjg4OTA4MDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxMTQxNzA3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfdGdfb25saW5lXCIsXG4gICAgXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbmFtZXMgYGlkbGVgIHRvIGBzY2hlZF9pZGxlYCBpbiBgc3RydWN0IHNjeF90YXNrX2dyb3VwYCBhbmQgYWRkcyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIEl0IGluaXRpYWxpemVzIHRoaXMgbmV3IGZpZWxkIGluIHNldmVyYWwgcGxhY2VzIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChlLmcuLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7IC4uLiB9YCkuIEluIEMsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIHplcm8gb3V0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcy4gRnVydGhlcm1vcmUsIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGlzIHBhc3NlZCB0byBhIEJQRiBwcm9ncmFtIChrZXJuZWwgc3BhY2UpLCBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0gdG8gcGFzcyB0aGUgYHNjaGVkX2lkbGVgIHN0YXRlIG9mIGEgY2dyb3VwIHRvIHRoZSBCUEYgc2NoZWR1bGVyIGR1cmluZyBjZ3JvdXAgaW5pdGlhbGl6YXRpb24gKGBvcHMuY2dyb3VwX2luaXQoKWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBkYXRhIHRvIEJQRiBwcm9ncmFtcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY3JlYXRpb24gYW5kIGBjcHUuaWRsZWAgbW9kaWZpY2F0aW9uIHdoaWxlIGEgc2NoZWRfZXh0IHNjaGVkdWxlciBpcyBhY3RpdmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjExLjUyODg5NTc2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MjIzMjU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM2NzNkZDQ3ZGUyNzhhZjNlZmJlYzQ5YzdjYmM4NDJkMDQ3ZDczMDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcXG5pbmRleCA1ODJkN2NkNGE5ODM5Li43YjljZGI2NWRlZWY2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oXFxuQEAgLTMyMyw3ICszMjMsNyBAQCBzdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXAge1xcbiBcXHR1NjRcXHRcXHRcXHRid19wZXJpb2RfdXM7XFxuIFxcdHU2NFxcdFxcdFxcdGJ3X3F1b3RhX3VzO1xcbiBcXHR1NjRcXHRcXHRcXHRid19idXJzdF91cztcXG4tXFx0Ym9vbFxcdFxcdFxcdGlkbGU7XFxuK1xcdGJvb2xcXHRcXHRcXHRzY2hlZF9pZGxlO1xcbiAjZW5kaWZcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXFxuaW5kZXggYzUzOWQxNWNkYTYzNy4uNGE5YzM4Mjk3MDkzNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXFxuKysrIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xcbkBAIC00NjgyLDcgKzQ2ODIsNyBAQCB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG4gXFx0dGctXFx1MDAzZXNjeC53ZWlnaHQgPSBDR1JPVVBfV0VJR0hUX0RGTDtcXG4gXFx0dGctXFx1MDAzZXNjeC5id19wZXJpb2RfdXMgPSBkZWZhdWx0X2J3X3BlcmlvZF91cygpO1xcbiBcXHR0Zy1cXHUwMDNlc2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7XFxuLVxcdHRnLVxcdTAwM2VzY3guaWRsZSA9IGZhbHNlO1xcbitcXHR0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgPSBmYWxzZTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQ3NjQsNyArNDc2NCw4IEBAIGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG4gXFx0XFx0XFx0XFx0eyAud2VpZ2h0ID0gdGctXFx1MDAzZXNjeC53ZWlnaHQsXFxuIFxcdFxcdFxcdFxcdCAgLmJ3X3BlcmlvZF91cyA9IHRnLVxcdTAwM2VzY3guYndfcGVyaW9kX3VzLFxcbiBcXHRcXHRcXHRcXHQgIC5id19xdW90YV91cyA9IHRnLVxcdTAwM2VzY3guYndfcXVvdGFfdXMsXFxuLVxcdFxcdFxcdFxcdCAgLmJ3X2J1cnN0X3VzID0gdGctXFx1MDAzZXNjeC5id19idXJzdF91cyB9O1xcbitcXHRcXHRcXHRcXHQgIC5id19idXJzdF91cyA9IHRnLVxcdTAwM2VzY3guYndfYnVyc3RfdXMsXFxuK1xcdFxcdFxcdFxcdCAgLnNjaGVkX2lkbGUgPSB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcXG4gXFxuIFxcdFxcdFxcdHJldCA9IFNDWF9DQUxMX09QX1JFVChzY2gsIGNncm91cF9pbml0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBOVUxMLCB0Zy1cXHUwMDNlY3NzLmNncm91cCwgXFx1MDAyNmFyZ3MpO1xcbkBAIC00OTM0LDcgKzQ5MzUsNyBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcXG4gXFx0XFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcXG4gXFxuIFxcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgKi9cXG4tXFx0dGctXFx1MDAzZXNjeC5pZGxlID0gaWRsZTtcXG4rXFx0dGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlID0gaWRsZTtcXG4gXFxuIFxcdHBlcmNwdV91cF9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuIH1cXG5AQCAtNTE4NSw2ICs1MTg2LDcgQEAgc3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbiBcXHRcXHRcXHRcXHQuYndfcGVyaW9kX3VzID0gdGctXFx1MDAzZXNjeC5id19wZXJpb2RfdXMsXFxuIFxcdFxcdFxcdFxcdC5id19xdW90YV91cyA9IHRnLVxcdTAwM2VzY3guYndfcXVvdGFfdXMsXFxuIFxcdFxcdFxcdFxcdC5id19idXJzdF91cyA9IHRnLVxcdTAwM2VzY3guYndfYnVyc3RfdXMsXFxuK1xcdFxcdFxcdFxcdC5zY2hlZF9pZGxlID0gdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlLFxcbiBcXHRcXHRcXHR9O1xcbiBcXG4gXFx0XFx0XFx0cmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy1cXHUwMDNlY2dyb3VwLCBcXHUwMDI2YXJncyk7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaCBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxcbmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXFxuKysrIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXFxuQEAgLTI1OSw2ICsyNTksOSBAQCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xcbiBcXHR1NjRcXHRcXHRcXHRid19wZXJpb2RfdXM7XFxuIFxcdHU2NFxcdFxcdFxcdGJ3X3F1b3RhX3VzO1xcbiBcXHR1NjRcXHRcXHRcXHRid19idXJzdF91cztcXG4rXFxuK1xcdC8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovXFxuK1xcdGJvb2xcXHRcXHRcXHRzY2hlZF9pZGxlO1xcbiB9O1xcbiBcXG4gZW51bSBzY3hfY3B1X3ByZWVtcHRfcmVhc29uIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9zdWIuYyBiL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcXG5pbmRleCAwNTU0NDQ4ODM1YmQwLi5hMTdkODRkYjkzYmRkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXFxuQEAgLTEzNjEsNiArMTM2MSw3IEBAIHN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4gXFx0XFx0XFx0LmJ3X3BlcmlvZF91cyA9IHRnLVxcdTAwM2VzY3guYndfcGVyaW9kX3VzLFxcbiBcXHRcXHRcXHQuYndfcXVvdGFfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxcbiBcXHRcXHRcXHQuYndfYnVyc3RfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxcbitcXHRcXHRcXHQuc2NoZWRfaWRsZSA9IHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSxcXG4gXFx0XFx0fTtcXG4gXFxuIFxcdFxcdGlmICh0Zy1cXHUwMDNlc2N4LnNjaGVkICE9IHBhcmVudCB8fFxcbkBAIC0xNDY0LDYgKzE0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4gXFx0XFx0XFx0LmJ3X3BlcmlvZF91cyA9IHRnLVxcdTAwM2VzY3guYndfcGVyaW9kX3VzLFxcbiBcXHRcXHRcXHQuYndfcXVvdGFfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxcbiBcXHRcXHRcXHQuYndfYnVyc3RfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxcbitcXHRcXHRcXHQuc2NoZWRfaWRsZSA9IHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSxcXG4gXFx0XFx0fTtcXG4gXFxuIFxcdFxcdC8qIHRoZSBmaXJzdCBwYXNzIG11c3QgaGF2ZSB0cmFuc2ZlcnJlZCBldmVyeXRoaW5nICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjEyLjk4MjQ1NzQxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMDI5ODQzMTIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DTEFTU19FWFRcIixcbiAgICBcIkNHUk9VUF9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjeF90Z19vbmxpbmVcIixcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtIHRvIHBhc3MgdGhlIGBzY2hlZF9pZGxlYCBzdGF0ZSBvZiBhIGNncm91cCB0byB0aGUgQlBGIHNjaGVkdWxlciBkdXJpbmcgY2dyb3VwIGluaXRpYWxpemF0aW9uIChgb3BzLmNncm91cF9pbml0KClgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgZGF0YSB0byBCUEYgcHJvZ3JhbXMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNyZWF0aW9uIGFuZCBgY3B1LmlkbGVgIG1vZGlmaWNhdGlvbiB3aGlsZSBhIHNjaGVkX2V4dCBzY2hlZHVsZXIgaXMgYWN0aXZlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNjczZGQ0N2RlMjc4YWYzZWZiZWM0OWM3Y2JjODQyZDA0N2Q3MzAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaFxuaW5kZXggNTgyZDdjZDRhOTgzOS4uN2I5Y2RiNjVkZWVmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcbkBAIC0zMjMsNyArMzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHtcbiBcdHU2NFx0XHRcdGJ3X3BlcmlvZF91cztcbiBcdHU2NFx0XHRcdGJ3X3F1b3RhX3VzO1xuIFx0dTY0XHRcdFx0YndfYnVyc3RfdXM7XG4tXHRib29sXHRcdFx0aWRsZTtcbitcdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xuICNlbmRpZlxuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbmluZGV4IGM1MzlkMTVjZGE2MzcuLjRhOWMzODI5NzA5MzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5AQCAtNDY4Miw3ICs0NjgyLDcgQEAgdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG4gXHR0Zy1cdTAwM2VzY3gud2VpZ2h0ID0gQ0dST1VQX1dFSUdIVF9ERkw7XG4gXHR0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzID0gZGVmYXVsdF9id19wZXJpb2RfdXMoKTtcbiBcdHRnLVx1MDAzZXNjeC5id19xdW90YV91cyA9IFJVTlRJTUVfSU5GO1xuLVx0dGctXHUwMDNlc2N4LmlkbGUgPSBmYWxzZTtcbitcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gZmFsc2U7XG4gfVxuIFxuIC8qKlxuQEAgLTQ3NjQsNyArNDc2NCw4IEBAIGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcbiBcdFx0XHRcdHsgLndlaWdodCA9IHRnLVx1MDAzZXNjeC53ZWlnaHQsXG4gXHRcdFx0XHQgIC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdFx0ICAuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4tXHRcdFx0XHQgIC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyB9O1xuK1x0XHRcdFx0ICAuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMsXG4rXHRcdFx0XHQgIC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcbiBcbiBcdFx0XHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcbiBcdFx0XHRcdFx0ICAgICAgTlVMTCwgdGctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YXJncyk7XG5AQCAtNDkzNCw3ICs0OTM1LDcgQEAgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXG4gXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXG4tXHR0Zy1cdTAwM2VzY3guaWRsZSA9IGlkbGU7XG4rXHR0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XG4gXG4gXHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG4gfVxuQEAgLTUxODUsNiArNTE4Niw3IEBAIHN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHRcdC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdFx0LmJ3X3F1b3RhX3VzID0gdGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxuIFx0XHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuK1x0XHRcdFx0LnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSxcbiBcdFx0XHR9O1xuIFxuIFx0XHRcdHJldCA9IFNDWF9DQUxMX09QX1JFVChzY2gsIGNncm91cF9pbml0LCBOVUxMLCBjc3MtXHUwMDNlY2dyb3VwLCBcdTAwMjZhcmdzKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuQEAgLTI1OSw2ICsyNTksOSBAQCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuIFx0dTY0XHRcdFx0YndfcGVyaW9kX3VzO1xuIFx0dTY0XHRcdFx0YndfcXVvdGFfdXM7XG4gXHR1NjRcdFx0XHRid19idXJzdF91cztcbitcbitcdC8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovXG4rXHRib29sXHRcdFx0c2NoZWRfaWRsZTtcbiB9O1xuIFxuIGVudW0gc2N4X2NwdV9wcmVlbXB0X3JlYXNvbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9zdWIuYyBiL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcbmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG5AQCAtMTM2MSw2ICsxMzYxLDcgQEAgc3RhdGljIHMzMiBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuIFx0XHRcdC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdC5id19xdW90YV91cyA9IHRnLVx1MDAzZXNjeC5id19xdW90YV91cyxcbiBcdFx0XHQuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMsXG4rXHRcdFx0LnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSxcbiBcdFx0fTtcbiBcbiBcdFx0aWYgKHRnLVx1MDAzZXNjeC5zY2hlZCAhPSBwYXJlbnQgfHxcbkBAIC0xNDY0LDYgKzE0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHQuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4gXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuK1x0XHRcdC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUsXG4gXHRcdH07XG4gXG4gXHRcdC8qIHRoZSBmaXJzdCBwYXNzIG11c3QgaGF2ZSB0cmFuc2ZlcnJlZCBldmVyeXRoaW5nICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzoxMi45ODI0NTkwODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDYxOTM3NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHNjaGVkX2V4dGAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGl0J3MgY2xlYW5pbmcgdXAgdGhlIGBpZGxlYCBuYW1pbmcgaW4gYHNjeF90YXNrX2dyb3VwYCBieSByZW5hbWluZyBpdCB0byBgc2NoZWRfaWRsZWAuXCIgVGhpcyBhbHNvIGluY2x1ZGVzIGFkZGluZyB0aGUgYHNjaGVkX2lkbGVgIGZpZWxkIHRvIGBzY3hfY2dyb3VwX2luaXRfYXJnc2AgaW4gYGtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaGAuIEkgc2VlIGl0J3MgcHJvcGFnYXRpbmcgdGhpcyBuZXcgZmllbGQgdGhyb3VnaCBgc2N4X3RnX29ubGluZWAsIGBzY3hfY2dyb3VwX2luaXRgLCBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCwgYW5kIGBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlYC4gVGhlIGtleSBoZXJlIGlzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZTogcGFzc2luZyB0aGlzIGBzY2hlZF9pZGxlYCBmbGFnIGRvd24gdG8gdGhlIEJQRiBzY2hlZHVsZXIgdmlhIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGR1cmluZyB0aGUgYGNncm91cF9pbml0YCBCUEYgb3BlcmF0aW9uLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGRlZmluaXRpb24uIFllcCwgYGtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaGAgY29uZmlybXMgaXQ6XG5gYGBjXG5zdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuXHR1MzJcdFx0XHR3ZWlnaHQ7XG5cdHU2NFx0XHRcdGJ3X3BlcmlvZF91cztcblx0dTY0XHRcdFx0YndfcXVvdGFfdXM7XG5cdHU2NFx0XHRcdGJ3X2J1cnN0X3VzO1xuXG5cdC8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovXG5cdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xufTtcbmBgYFxuWXVwLCBpdCdzIGdvdCB0aGUgYHNjaGVkX2lkbGVgIGJvb2xlYW4gSSBleHBlY3RlZCwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgU0NIRURfSURMRS5cblxuVGhpcyBpcyBhbGwgd2l0aGluIHRoZSBgc2NoZWRfZXh0YCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGV4dC5jYCBhbmQgYHN1Yi5jYC4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBzY3hfdGdfaW5pdGAsIGBzY3hfdGdfb25saW5lYCwgYHNjeF9ncm91cF9zZXRfaWRsZWAsIGBzY3hfY2dyb3VwX2luaXRgLCBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCwgYW5kIGBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlYC4gT2theSwgSSdtIHN0YXJ0aW5nIHRvIGdldCB0aGUgcGljdHVyZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBBZGRpbmcgYSBuZXcgZmllbGQgdG8gYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCwgYW5kIGNyaXRpY2FsbHksIGV4cG9zaW5nIGl0IHRvIEJQRiBwcm9ncmFtcyB0aHJvdWdoIHRoZSBgY2dyb3VwX2luaXRgIG9wZXJhdGlvbiwgaXMgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpbnRyb2R1Y2VzIGEgbmV3IGF0dGFjayBzdXJmYWNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guLi5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNvbmZpcm06IERvZXMgaXQgKmFjdHVhbGx5KiBleHBvc2UgaXQgdG8gQlBGPyBZZXMsIHRoZSBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCAqaXMqIHBhc3NlZCB0byB0aGUgYGNncm91cF9pbml0YCBCUEYgb3BlcmF0aW9uLCBzbyBpdCBsb29rcyBsaWtlIGl0IGlzLiBcblxuT2theSwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IHRoZSByaWdodCB0aGluZywgd2hhdCBpcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBzY2hlZF9leHRgPyBJcyBpdCBgU0NIRURfQ0xBU1NfRVhUYCBvciBgU0NIRURfRVhUYD8gVGltZSBmb3IgYSBxdWljayBncmVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MjEuNDQ0Mzk5MTk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQ5MTYwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjIxLjQ5MjQ1NTQzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTcwNTIwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsZXIncyBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgc2NoZWR1bGVyIGJ1aWxkIHByb2Nlc3MuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgdGhlIGBrZXJuZWwvc2NoZWQvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciB0aGUgc2NoZWR1bGVyIGNvbXBvbmVudHMgbGlrZWx5IHJlc2lkZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgR05VIE1ha2VmaWxlIHN0cnVjdHVyZSwgcHJvYmFibHkgd2l0aCB0YXJnZXRzIGZvciBvYmplY3QgZmlsZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBob3cgdGhlIGNvcmUgc2NoZWR1bGluZyBhbGdvcml0aG1zIGFyZSBjb21waWxlZCwgYW55IGN1c3RvbSBsaW5rZXIgZmxhZ3MgdGhhdCBtaWdodCBiZSBhcHBsaWVkLCBhbmQgaG93IHRoZSBzY2hlZHVsZXIncyB2YXJpb3VzIG1vZHVsZXMgKGlmIHRoZXkgZXhpc3QpIGFyZSBoYW5kbGVkLiBQZXJoYXBzIHRoZXJlIGFyZSBjb25kaXRpb25hbCBpbmNsdXNpb25zIGJhc2VkIG9uIGBDT05GSUdfYCBvcHRpb25zLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhlIG1ha2VmaWxlIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzoyNS4yODk1MDk2NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc2NoZWQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRDT05URVhUX0FOQUxZU0lTX2NvcmUubyA6PSB5XFxuICAgNDpcXHRDT05URVhUX0FOQUxZU0lTX2ZhaXIubyA6PSB5XFxuICAgNTpcXHRcXG4gICA2OlxcdCMgVGhlIGNvbXBpbGVycyBhcmUgY29tcGxhaW5pbmcgYWJvdXQgdW51c2VkIHZhcmlhYmxlcyBpbnNpZGUgYW4gaWYoMCkgc2NvcGVcXG4gICA3OlxcdCMgYmxvY2suIFRoaXMgaXMgZGFmdCwgc2h1dCB0aGVtIHVwLlxcbiAgIDg6XFx0Y2NmbGFncy15ICs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIHVudXNlZC1idXQtc2V0LXZhcmlhYmxlKVxcbiAgIDk6XFx0XFxuICAxMDpcXHQjIFRoZXNlIGZpbGVzIGFyZSBkaXNhYmxlZCBiZWNhdXNlIHRoZXkgcHJvZHVjZSBub24taW50ZXJlc3RpbmcgZmxha3kgY292ZXJhZ2VcXG4gIDExOlxcdCMgdGhhdCBpcyBub3QgYSBmdW5jdGlvbiBvZiBzeXNjYWxsIGlucHV0cy4gRS5nLiBpbnZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzLlxcbiAgMTI6XFx0S0NPVl9JTlNUUlVNRU5UIDo9IG5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0IyBEaXNhYmxlIEtDU0FOIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBub2lzZSBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uIFRvIGF2b2lkXFxuICAxNTpcXHQjIGZhbHNlIHBvc2l0aXZlcyBlbnN1cmUgYmFycmllcnMgaW1wbGllZCBieSBzY2hlZCBmdW5jdGlvbnMgYXJlIGluc3RydW1lbnRlZC5cXG4gIDE2OlxcdEtDU0FOX1NBTklUSVpFIDo9IG5cXG4gIDE3OlxcdEtDU0FOX0lOU1RSVU1FTlRfQkFSUklFUlMgOj0geVxcbiAgMTg6XFx0XFxuICAxOTpcXHRpZm5lcSAoJChDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSKSx5KVxcbiAgMjA6XFx0IyBBY2NvcmRpbmcgdG8gQWxhbiBNb2RyYSBcXHUwMDNjYWxhbkBsaW51eGNhcmUuY29tLmF1XFx1MDAzZSwgdGhlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGlzXFxuICAyMTpcXHQjIG5lZWRlZCBmb3IgeDg2IG9ubHkuICBXaHkgdGhpcyB1c2VkIHRvIGJlIGVuYWJsZWQgZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGlzIGJleW9uZFxcbiAgMjI6XFx0IyBtZS4gIEkgc3VzcGVjdCBtb3N0IHBsYXRmb3JtcyBkb24ndCBuZWVkIHRoaXMsIGJ1dCB1bnRpbCB3ZSBrbm93IHRoYXQgZm9yIHN1cmVcXG4gIDIzOlxcdCMgSSB0dXJuIHRoaXMgb2ZmIGZvciBJQS02NCBvbmx5LiAgQW5kcmVhcyBTY2h3YWIgc2F5cyBpdCdzIGFsc28gbmVlZGVkIG9uIG02OGtcXG4gIDI0OlxcdCMgdG8gZ2V0IGEgY29ycmVjdCB2YWx1ZSBmb3IgdGhlIHdhaXQtY2hhbm5lbCAoV0NIQU4gaW4gcHMpLiAtLWRhdmlkbVxcbiAgMjU6XFx0Q0ZMQUdTX2NvcmUubyA6PSAkKFBST0ZJTElORykgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXJcXG4gIDI2OlxcdGVuZGlmXFxuICAyNzpcXHRcXG4gIDI4OlxcdCMgQnJhbmNoIHByb2ZpbGluZyBpc24ndCBub2luc3RyLXNhZmVcXG4gIDI5OlxcdGlmZGVmIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HXFxuICAzMDpcXHRDRkxBR1NfYnVpbGRfcG9saWN5Lm8gKz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcXG4gIDMxOlxcdENGTEFHU19idWlsZF91dGlsaXR5Lm8gKz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHQjXFxuICAzNDpcXHQjIEJ1aWxkIGVmZmljaWVuY3k6XFxuICAzNTpcXHQjXFxuICAzNjpcXHQjIFRoZXNlIGNvbXBpbGF0aW9uIHVuaXRzIGhhdmUgcm91Z2hseSB0aGUgc2FtZSBzaXplIGFuZCBjb21wbGV4aXR5IC0gc28gdGhlaXJcXG4gIDM3OlxcdCMgYnVpbGQgcGFyYWxsZWxpemVzIHdlbGwgYW5kIGZpbmlzaGVzIHJvdWdobHkgYXQgb25jZTpcXG4gIDM4OlxcdCNcXG4gIDM5OlxcdG9iai15ICs9IGNvcmUub1xcbiAgNDA6XFx0b2JqLXkgKz0gZmFpci5vXFxuICA0MTpcXHRvYmoteSArPSBidWlsZF9wb2xpY3kub1xcbiAgNDI6XFx0b2JqLXkgKz0gYnVpbGRfdXRpbGl0eS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjI1LjI4OTU3ODkyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjM0NDU5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgU2NoZWR1bGVyJ3MgRXh0ZW5zaW9uIE1vZHVsZXMqKlxuXG5IbW0sIHRoaXMgaXMgc3RyYW5nZS4gSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHJlZmVyZW5jZWQgaW4gdGhlIG1haW4gYE1ha2VmaWxlYCBmb3IgdGhlIHNjaGVkdWxlciwgYGtlcm5lbC9zY2hlZC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgKm5vcm1hbGx5KiBleHBlY3QgdG8gc2VlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBhbiBleHRlbnNpb24uIEl0J3MgYSBiaXQgb2RkIHRvIGhhdmUgaXQgbWlzc2luZyBmcm9tIHRoZXJlLlxuXG5Pa2F5LCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBvYnZpb3VzIHBsYWNlcy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBga2VybmVsL3NjaGVkL2V4dC9NYWtlZmlsZWAgdG8gc2VlIGlmIGl0J3MgZ290IGl0cyBvd24gYnVpbGQgcnVsZXMg4oCTIHBlcmhhcHMgaXQncyBhIGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQgbW9kdWxlLiBBbHRlcm5hdGl2ZWx5LCBJJ2xsIGV4YW1pbmUgYGtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuY2A7IG1heWJlIGl0IGhhcyBzb21lIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBsb2dpYyBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBob3cgdGhlIHNjaGVkdWxpbmcgcG9saWNpZXMgYXJlIGNvbXBpbGVkLiBMZXQncyBzZWUgaWYgZWl0aGVyIG9mIHRob3NlIGhvbGRzIHRoZSBjbHVlIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MjkuMDUzMDI4MDA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDMzMjE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy02NS0jIGluY2x1ZGUgXFxcImV4dC9pbnRlcm5hbC5oXFxcIlxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo2NjojIGluY2x1ZGUgXFxcImV4dC9jaWQuaFxcXCJcXG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNjctIyBpbmNsdWRlIFxcXCJleHQvYXJlbmEuaFxcXCJcXG4tLVxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy03MC0jIGluY2x1ZGUgXFxcImV4dC9pbmxpbmVzLmhcXFwiXFxua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jOjcxOiMgaW5jbHVkZSBcXFwiZXh0L2V4dC5jXFxcIlxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo3MjojIGluY2x1ZGUgXFxcImV4dC9jaWQuY1xcXCJcXG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNzMtIyBpbmNsdWRlIFxcXCJleHQvYXJlbmEuY1xcXCJcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI5Mz12b2lkIHdha2V1cF9wcmVlbXB0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjk2LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjI5NzpcXHRpZiAocC1cXHUwMDNlc2NoZWRfY2xhc3MgPT0gcnEtXFx1MDAzZW5leHRfY2xhc3MpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyOTg6XFx0XFx0cnEtXFx1MDAzZW5leHRfY2xhc3MtXFx1MDAzZXdha2V1cF9wcmVlbXB0KHJxLCBwLCBmbGFncyk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjk5LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjMwMDpcXHR9IGVsc2UgaWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHAtXFx1MDAzZXNjaGVkX2NsYXNzLCBycS1cXHUwMDNlbmV4dF9jbGFzcykpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIzMDE6XFx0XFx0cnEtXFx1MDAzZW5leHRfY2xhc3MtXFx1MDAzZXdha2V1cF9wcmVlbXB0KHJxLCBwLCBmbGFncyk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMzAyLVxcdFxcdHJlc2NoZWRfY3VycihycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzoyMzAzOlxcdFxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzID0gcC1cXHUwMDNlc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMzA0LVxcdH1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9Njc4MT1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJveHlfcmVzY2hlZF9pZGxlKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY3ODMtXFx0cHV0X3ByZXZfc2V0X25leHRfdGFzayhycSwgcnEtXFx1MDAzZWRvbm9yLCBycS1cXHUwMDNlaWRsZSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo2Nzg0OlxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzID0gXFx1MDAyNmlkbGVfc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYy02Nzg1LVxcdHJxX3NldF9kb25vcihycSwgcnEtXFx1MDAzZWlkbGUpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz03MDk3PXN0YXRpYyB2b2lkIF9fc2NoZWQgbm90cmFjZSBfX3NjaGVkdWxlKGludCBzY2hlZF9tb2RlKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03MTY3LVxcdFxcdFxcdG5leHQgPSBwcmV2O1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzE2ODpcXHRcXHRcXHRycS1cXHUwMDNlbmV4dF9jbGFzcyA9IFxcdTAwMjZpZGxlX3NjaGVkX2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzE2OS1cXHRcXHRcXHRnb3RvIHBpY2tlZDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzE4NS1cXHRuZXh0ID0gcGlja19uZXh0X3Rhc2socnEsIFxcdTAwMjZyZik7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo3MTg2OlxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzID0gbmV4dC1cXHUwMDNlc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYy03MTg3LVxcdGlmIChzY2hlZF9wcm94eV9leGVjKCkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzY2Mz12b2lkIHJ0X211dGV4X3NldHByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc2NjYtXFx0XFx0REVRVUVVRV9TQVZFIHwgREVRVUVVRV9NT1ZFIHwgREVRVUVVRV9OT0NMT0NLO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzY2NzpcXHRjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3MsICpuZXh0X2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzY2OC1cXHRzdHJ1Y3QgcnFfZmxhZ3MgcmY7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MjQtXFx0cHJldl9jbGFzcyA9IHAtXFx1MDAzZXNjaGVkX2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzcyNTpcXHRuZXh0X2NsYXNzID0gX19zZXRzY2hlZHVsZXJfY2xhc3MocC1cXHUwMDNlcG9saWN5LCBwcmlvKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MjYtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo3NzI3OlxcdGlmIChwcmV2X2NsYXNzICE9IG5leHRfY2xhc3MpXFxua2VybmVsL3NjaGVkL2NvcmUuYy03NzI4LVxcdFxcdHF1ZXVlX2ZsYWcgfD0gREVRVUVVRV9DTEFTUztcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzc2MC1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjc3NjE6XFx0XFx0cC1cXHUwMDNlc2NoZWRfY2xhc3MgPSBuZXh0X2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzc2Mi1cXHRcXHRwLVxcdTAwM2VwcmlvID0gcHJpbztcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk1MT12b2lkIF9faW5pdCBzY2hlZF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwNDgtI2VuZGlmXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MDQ5OlxcdFxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzID0gXFx1MDAyNmlkbGVfc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05MDUwLVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTM1LVxcdGluaXRfc2NoZWRfZmFpcl9jbGFzcygpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTEzNjpcXHRpbml0X3NjaGVkX2V4dF9jbGFzcygpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTEzNy1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTEyNzY9dm9pZCBzY2hlZF9jaGFuZ2VfZW5kKHN0cnVjdCBzY2hlZF9jaGFuZ2VfY3R4ICpjdHgpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTExMzA3LVxcdFxcdFxcdGlmIChzY2hlZF9jbGFzc19hYm92ZShwLVxcdTAwM2VzY2hlZF9jbGFzcywgY3R4LVxcdTAwM2VjbGFzcykpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjExMzA4OlxcdFxcdFxcdFxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzLVxcdTAwM2V3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMTMwOTpcXHRcXHRcXHRcXHRycS1cXHUwMDNlbmV4dF9jbGFzcyA9IHAtXFx1MDAzZXNjaGVkX2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEzMTAtXFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MTE0MT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZGxfc2VydmVyX3RpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lciwgc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMjA4LSAqIHVwZGF0aW5nIChhbmQgdGhlIHF1ZXVlaW5nIGJhY2sgdG8gZGxfcnEpIHdpbGwgYmUgZG9uZSBieSB0aGVcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYzoxMjA5OiAqIG5leHQgY2FsbCB0byBlbnF1ZXVlX3Rhc2tfZGwoKS5cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMjEwLSAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYz0xODA9czMyIHNjeF9jaWRfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTE4OC1cXHRzdHJ1Y3Qgc2N4X2NpZF90YWJsZXMgKnRibHM7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxODk6XFx0dTMyIG5leHRfY2lkID0gMDtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjE5MDpcXHRzMzIgbmV4dF9ub2RlX2lkeCA9IDAsIG5leHRfbGxjX2lkeCA9IDAsIG5leHRfY29yZV9pZHggPSAwO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTkxLVxcdHMzMiBuZXh0X3NoYXJkX2lkeCA9IDA7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTIyOS1cXHR3aGlsZSAoIWNwdW1hc2tfZW1wdHkodG9fd2FsaykpIHtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjIzMDpcXHRcXHRzMzIgbmV4dF9jcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX3dhbGspO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjMxOlxcdFxcdHMzMiBuaWQgPSBjcHVfdG9fbm9kZShuZXh0X2NwdSk7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoyMzI6XFx0XFx0czMyIG5vZGVfY2lkID0gbmV4dF9jaWQ7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yMzMtXFx0XFx0czMyIG5vZGVfaWR4O1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yMzktXFx0XFx0aWYgKG5pZCBcXHUwMDNjIDApIHtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI0MDpcXHRcXHRcXHRjcHVtYXNrX2NsZWFyX2NwdShuZXh0X2NwdSwgdG9fd2Fsayk7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNDEtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI0Ny1cXHRcXHRjcHVtYXNrX2FuZChub2RlX3NjcmF0Y2gsIHRvX3dhbGssIGNwdW1hc2tfb2Zfbm9kZShuaWQpKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI0ODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFjcHVtYXNrX3Rlc3RfY3B1KG5leHRfY3B1LCBub2RlX3NjcmF0Y2gpKSlcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI0OS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjUzLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjcHVtYXNrICpsbGNfbWFzayA9IGNwdV9sbGNfbWFzayhuY3B1LCBsbGNfZmFsbGJhY2spO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjU0OlxcdFxcdFxcdHMzMiBsbGNfY2lkID0gbmV4dF9jaWQ7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNTUtXFx0XFx0XFx0czMyIGxsY19pZHggPSBuZXh0X2xsY19pZHgrKztcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjY1LVxcdFxcdFxcdGNhbGNfc2hhcmRfbGF5b3V0KGxsY19zY3JhdGNoLCBzaGFyZF9zaXplLCBcXHUwMDI2Y29yZXNfcGVyX3NoYXJkLCBcXHUwMDI2bnJfbGFyZ2UpO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjY2OlxcdFxcdFxcdHNoYXJkX2NpZCA9IG5leHRfY2lkO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjY3LVxcdFxcdFxcdHNoYXJkX2lkeCA9IG5leHRfc2hhcmRfaWR4Kys7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI3Mi1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgY3B1bWFzayAqc2liID0gdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGxjcHUpO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjczOlxcdFxcdFxcdFxcdHMzMiBjb3JlX2NpZCA9IG5leHRfY2lkO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6Mjc0OlxcdFxcdFxcdFxcdHMzMiBjb3JlX2lkeCA9IG5leHRfY29yZV9pZHgrKztcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI3NS1cXHRcXHRcXHRcXHRzMzIgY2NwdTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjk2LVxcdFxcdFxcdFxcdFxcdGNpZHNfaW5fc2hhcmQgPSAwO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6Mjk3OlxcdFxcdFxcdFxcdFxcdHNoYXJkX2NpZCA9IG5leHRfY2lkO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjk4LVxcdFxcdFxcdFxcdFxcdHNoYXJkX2lkeCA9IG5leHRfc2hhcmRfaWR4Kys7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTMwNC1cXHRcXHRcXHRcXHRmb3JfZWFjaF9jcHUoY2NwdSwgY29yZV9zY3JhdGNoKSB7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzozMDU6XFx0XFx0XFx0XFx0XFx0czMyIGNpZCA9IG5leHRfY2lkKys7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0zMDYtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTM0Ni1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjM0NzpcXHRcXHRjaWQgPSBuZXh0X2NpZCsrO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMzQ4LVxcdFxcdHRibHMtXFx1MDAzZWNpZF90b19jcHVbY2lkXSA9IGNwdTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMzc1LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6Mzc2OlxcdGZvciAoY2lkID0gMDsgY2lkIFxcdTAwM2MgbmV4dF9jaWQ7IGNpZCsrKSB7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0zNzctXFx0XFx0czMyIHNpZHggPSB0YmxzLVxcdTAwM2VjaWRfdG9fc2hhcmRbY2lkXTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MzU0PXN0YXRpYyBib29sIHJxX2lzX29wZW4oc3RydWN0IHJxICpycSwgdTY0IGVucV9mbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzYxLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzYyOlxcdGlmIChzY2hlZF9jbGFzc19hYm92ZShycS1cXHUwMDNlbmV4dF9jbGFzcywgXFx1MDAyNmV4dF9zY2hlZF9jbGFzcykpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zNjMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zNjgtXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozNjk6XFx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZleHRfc2NoZWRfY2xhc3MsIHJxLVxcdTAwM2VuZXh0X2NsYXNzKSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM3MC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTUxOD1zdGF0aWMgdm9pZCBycV9vd25lZF9wb3N0X2VucShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NTktXFx0ICogcHVycG9zZSwgYnV0IGZvciBpdCB0byBiZSBpbnZva2VkLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IHdlIGJ1bXBcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NjA6XFx0ICogQHJxLVxcdTAwM2VuZXh0X2NsYXNzIHRvIFxcdTAwMjZleHRfc2NoZWRfY2xhc3MgaWYgaXQncyBjdXJyZW50bHkgaWRsZS5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NjEtXFx0ICpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NjItXFx0ICogd2FrZXVwX3ByZWVtcHQoKSBkb2VzIHRoZSBidW1waW5nLCBhbmQgc2luY2Ugd2Ugb25seSBpbnZva2UgaXQgaWZcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NjM6XFx0ICogQHJxLVxcdTAwM2VuZXh0X2NsYXNzIGlzIGJlbG93IFxcdTAwMjZleHRfc2NoZWRfY2xhc3MsIGl0IHdpbGwgYWxzb1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU2NC1cXHQgKiByZXNjaGVkX2N1cnIocnEpLlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU2NS1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NjY6XFx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHAtXFx1MDAzZXNjaGVkX2NsYXNzLCBycS1cXHUwMDNlbmV4dF9jbGFzcykpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTY3LVxcdFxcdHdha2V1cF9wcmVlbXB0KHJxLCBwLCAwKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU3My1cXHQgKiBOb3RlIHRoYXQgdGhlIHdha2V1cF9wcmVlbXB0KCkgYWJvdmUgbWF5IGhhdmUgYWxyZWFkeSB0cmlnZ2VyZWRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NzQ6XFx0ICogYSByZXNjaGVkIGlmIEBycS1cXHUwMDNlbmV4dF9jbGFzcyB3YXMgaWRsZS4gSXQncyBoYXJtbGVzcywgc2luY2VcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NzUtXFx0ICogbmVlZF9yZXNjaGVkIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGFzayBwaWNrLlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0zMDc3PXN0YXRpYyB2b2lkIHN3aXRjaF9jbGFzcyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMwNzktXFx0c3RydWN0IHNjeF9zY2hlZCAqc2NoID0gc2N4X3Jvb3RfcHJvdGVjdGVkX2xpdmUoKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjMwODA6XFx0Y29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpuZXh0X2NsYXNzID0gbmV4dC1cXHUwMDNlc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMDgxLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMDg3LVxcdCAqIGxvbmdlciB1bmRlciB0aGUgY29udHJvbCBvZiBTQ1guIFRoZXJlZm9yZSwgZG9uJ3QgaW52b2tlIHRoZSBjYWxsYmFja1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzA4ODpcXHQgKiBpZiB0aGUgbmV4dCBjbGFzcyBpcyBiZWxvdyBTQ1ggKGluIHdoaWNoIGNhc2UgdGhlIEJQRiBzY2hlZHVsZXIgaGFzXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMDg5LVxcdCAqIGFjdGl2ZWx5IGRlY2lkZWQgbm90IHRvIHNjaGVkdWxlIGFueSB0YXNrcyBvbiB0aGUgQ1BVKS5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMwOTAtXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozMDkxOlxcdGlmIChzY2hlZF9jbGFzc19hYm92ZShcXHUwMDI2ZXh0X3NjaGVkX2NsYXNzLCBuZXh0X2NsYXNzKSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMwOTItXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMTA1LVxcdFxcdFxcdHN0cnVjdCBzY3hfY3B1X3JlbGVhc2VfYXJncyBhcmdzID0ge1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzEwNjpcXHRcXHRcXHRcXHQucmVhc29uID0gcHJlZW1wdF9yZWFzb25fZnJvbV9jbGFzcyhuZXh0X2NsYXNzKSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMxMDctXFx0XFx0XFx0XFx0LnRhc2sgPSBuZXh0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01NTUxPWJvb2wgc2N4X2FsbG93X3R0d3VfcXVldWUoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01NTcxLS8qKlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTU3MjogKiBoYW5kbGVfbG9ja3VwIC0gc2NoZWRfZXh0IGNvbW1vbiBsb2NrdXAgaGFuZGxlclxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTU3My0gKiBAZXhpdF9jcHU6IENQVSB0byByZWNvcmQgaW4gZXhpdF9pbmZvLiBQYXNzIHRoZSBzdGFsbGVkL2h1bmcgQ1BVLCBub3QgY3VycmVudC5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODY2MT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNjeF9wbV9ub3RpZmllciA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODY2NC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjg2NjU6dm9pZCBfX2luaXQgaW5pdF9zY2hlZF9leHRfY2xhc3Modm9pZClcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTg2NjYte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDg5OD1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk3NS1cXHQvKlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5NzY6XFx0ICoga2Z1bmMgcmVnaXN0cmF0aW9uIGNhbid0IGJlIGRvbmUgZnJvbSBpbml0X3NjaGVkX2V4dF9jbGFzcygpIGFzXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk3Ny1cXHQgKiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KCkgbmVlZHMgbW9zdCBvZiB0aGUgc3lzdGVtIHRvIGJlIHVwLlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD0yMj1ib29sIHNjeF9hbGxvd190dHd1X3F1ZXVlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDoyMzp2b2lkIGluaXRfc2NoZWRfZXh0X2NsYXNzKHZvaWQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtMjQtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTU2PXN0YXRpYyBpbmxpbmUgYm9vbCBzY3hfYWxsb3dfdHR3dV9xdWV1ZShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIHRydWU7IH1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjU3OnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NjaGVkX2V4dF9jbGFzcyh2b2lkKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNTgtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYz05MTM9c3RhdGljIGJvb2wgY2hlY2tfYnVpbHRpbl9pZGxlX2VuYWJsZWQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtOTI2LSAqIFdlIGNhbid0IHNpbXBseSBjaGVjayB3aGV0aGVyIEBwLVxcdTAwM2VtaWdyYXRpb25fZGlzYWJsZWQgaXMgc2V0IGluIGFcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzo5Mjc6ICogc2NoZWRfZXh0IGNhbGxiYWNrLCBiZWNhdXNlIHRoZSBCUEYgcHJvbG9nIChfX2JwZl9wcm9nX2VudGVyKSBtYXkgZGlzYWJsZVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTkyOC0gKiBtaWdyYXRpb24gZm9yIHRoZSBjdXJyZW50IHRhc2sgd2hpbGUgcnVubmluZyBCUEYgY29kZS5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IHNjeF9rZnVuY19zZXRfaWRsZSA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1MzctICpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTM4OiAqIFRoZXNlIGtmdW5jcyBhcmUgYWxzbyBtZW1iZXJzIG9mIHNjeF9rZnVuY19pZHNfdW5sb2NrZWQgKHNlZSBleHQuYykgYmVjYXVzZVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1MzktICogdGhleSdyZSBjYWxsYWJsZSBmcm9tIHVubG9ja2VkIGNvbnRleHRzIGluIGFkZGl0aW9uIHRvIG9wcy5zZWxlY3RfY3B1KCkgYW5kXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTMyPWVudW0gc2N4X29wc19mbGFncyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTM4LVxcdC8qXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEzOTpcXHQgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgdGFzayB0byBydW4gb24gdGhlIENQVSwgZXh0IGNvcmVcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTQwLVxcdCAqIGtlZXBzIHJ1bm5pbmcgdGhlIGN1cnJlbnQgdGFzayBldmVuIGFmdGVyIGl0cyBzbGljZSBleHBpcmVzLiBJZiB0aGlzXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzIyPXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0zNzItXFx0ICpcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MzczOlxcdCAqIFRoZSBleHQgY29yZSBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBCUEYgc2lkZSBvd25zIGEgZ2l2ZW4gdGFzayBvclxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0zNzQtXFx0ICogbm90IGFuZCBjYW4gZ3JhY2VmdWxseSBpZ25vcmUgc3B1cmlvdXMgZGlzcGF0Y2hlcyBmcm9tIEJQRiBzaWRlLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTE0MzE9ZW51bSBzY3hfY2FwX2ZsYWdzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNDgyLSAqIGRlbGl2ZXJ5IGlzIGluIGZsaWdodCBwZXIgc2hhcmQuIEZ1cnRoZXIgY2hhbmdlcyBmb2xkIGludG8gdGhlIHNhbWUgYnVmZmVyXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjE0ODM6ICogYW5kIHNoaXAgYXMgdGhlIG5leHQgY2FsbGJhY2ssIHNvIGEgc2hhcmQncyBjYWxsYmFja3MgZmlyZSBpbiBvcmRlci5cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTQ4NC0gKlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTE2NzI9ZW51bSBzY3hfZW5xX2ZsYWdzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNzI1LVxcdCAqIFRoZSB0YXNrIGJlaW5nIGVucXVldWVkIGlzIHRoZSBvbmx5IHRhc2sgYXZhaWxhYmxlIGZvciB0aGUgY3B1LiBCeVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxNzI2OlxcdCAqIGRlZmF1bHQsIGV4dCBjb3JlIGtlZXBzIGV4ZWN1dGluZyBzdWNoIHRhc2tzIGJ1dCB3aGVuXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTE3MjctXFx0ICogJVNDWF9PUFNfRU5RX0xBU1QgaXMgc3BlY2lmaWVkLCB0aGV5J3JlIG9wcy5lbnF1ZXVlKCknZCB3aXRoIHRoZVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTE4Mjk9c3RhdGljIGNvbnN0IGNoYXIgKnNjeF9lbmFibGVfc3RhdGVfc3RyW10gPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTgzOC0gKlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxODM5OiAqIFRoZSBzY2hlZF9leHQgY29yZSB1c2VzIHRoaXMgc3RhdGUgbWFjaGluZSB0byB0cmFjayB0YXNrIG93bmVyc2hpcFxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xODQwLSAqIGJldHdlZW4gdGhlIFNDWCBjb3JlIGFuZCB0aGUgQlBGIHNjaGVkdWxlci4gVGhpcyBhbGxvd3MgdGhlIEJQRlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTE5MTEtICpcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MTkxMjogKiBUaGUgc2NoZWRfZXh0IGNvcmUgdXNlcyBhIFxcXCJsb2NrIGRhbmNpbmdcXFwiIHByb3RvY29sIGNvb3JkaW5hdGVkIGJ5XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTE5MTMtICogcC1cXHUwMDNlc2N4LmhvbGRpbmdfY3B1LiBXaGVuIG1vdmluZyBhIHRhc2sgdG8gYSBkaWZmZXJlbnQgcnE6XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEwLSAqIHN1Yi1zY2hlZHVsZXIgZW5hYmxlL2Rpc2FibGUgcGF0aHMuIFRoZSBjb3JlIGRpc3BhdGNoL2VucXVldWUgbWFjaGluZXJ5IGl0XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMTogKiBidWlsZHMgb24gbGl2ZXMgaW4gZXh0LmMuXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMi0gKlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xMjMyPXZvaWQgZHJhaW5fZGVzY2VuZGFudHMoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMjQ5LSAqIHN0YXRlIHRvICVTQ1hfVEFTS19SRUFEWSB0byBhY2NvdW50IGZvciB0aGUgYWxyZWFkeSBjb21wbGV0ZWQgaW5pdC4gQSB0YXNrXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMjUwOiAqIG9uIGEgbm9uLWV4dCBjbGFzcywgcG9zc2libGUgdW5kZXIgYW4gJVNDWF9PUFNfU1dJVENIX1BBUlRJQUwgcm9vdCwgc3RheXNcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEyNTEtICogJVJFQURZIGFuZCBpcyBlbmFibGVkIGJ5IHN3aXRjaGluZ190b19zY3goKSBpZiBpdCBzd2l0Y2hlcyBvdmVyLlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xNzExPXZvaWQgc2N4X3N1Yl9lbmFibGVfd29ya2ZuKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE5NTYtXFx0XFx0XFx0ICogaXMgd2hhdCB3ZSB3YW50LiBBc3NpZ24gaXQgdG8gQHNjaCBhbmQsIGlmIGl0J3Mgb25cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjE5NTc6XFx0XFx0XFx0ICogdGhlIGV4dCBjbGFzcywgZW5hYmxlLiBBIG5vbi1leHQgdGFzaywgcG9zc2libGUgdW5kZXJcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE5NTgtXFx0XFx0XFx0ICogYW4gJVNDWF9PUFNfU1dJVENIX1BBUlRJQUwgcm9vdCwgc3RheXMgUkVBRFkgYW5kIGlzXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTY5Nzg9c3RhdGljIGJvb2wgdGhyb3R0bGVfY2ZzX3JxKHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzAzMi1cXHQgKiBjdXJyZW50IGRvbm9yLiBJbiBjYXNlIG9mIHByb3h5LWV4ZWN1dGlvbiwgdGhlIGV4ZWN1dGlvblxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6NzAzMzpcXHQgKiBjb250ZXh0IGNhbm5vdCBleGl0IHRvIHRoZSB1c2Vyc3BhY2Ugd2hpbGUgaG9sZGluZyBhIG11dGV4XFxua2VybmVsL3NjaGVkL2ZhaXIuYy03MDM0LVxcdCAqIGFuZCB0aGUgcnVsZSBvZiB0aHJvdHRsZSBkZWZlcnJhbCB0byBvbmx5IHRocm90dGxlIHRoZVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNTQ1Mj1pbnQgc2NoZWRfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBsb25nIGlkbGUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDgyLVxcdFxcdGlmIChXQVJOX09OX09OQ0Uod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTU0ODM6XFx0XFx0XFx0Z290byBuZXh0X2NwdTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDg0LVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTUwMi1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE1NTAzOm5leHRfY3B1Olxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU1MDQtXFx0XFx0cnFfdW5sb2NrX2lycXJlc3RvcmUocnEsIFxcdTAwMjZyZik7XFxuLS1cXG5rZXJuZWwvc2NoZWQvcnQuYz0yMDc4PXN0YXRpYyB2b2lkIHB1c2hfcnRfdGFza3Moc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMjctICovXFxua2VybmVsL3NjaGVkL3J0LmM6MjEyODpzdGF0aWMgaW50IHJ0b19uZXh0X2NwdShzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKVxcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMjkte1xcbi0tXFxua2VybmVsL3NjaGVkL3J0LmMtMjEzNS1cXHQgKiBXaGVuIHN0YXJ0aW5nIHRoZSBJUEkgUlQgcHVzaGluZywgdGhlIHJ0b19jcHUgaXMgc2V0IHRvIC0xLFxcbmtlcm5lbC9zY2hlZC9ydC5jOjIxMzY6XFx0ICogcnRfbmV4dF9jcHUoKSB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGZpcnN0IENQVSBmb3VuZCBpblxcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMzctXFx0ICogdGhlIHJ0b19tYXNrLlxcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMzgtXFx0ICpcXG5rZXJuZWwvc2NoZWQvcnQuYzoyMTM5OlxcdCAqIElmIHJ0b19uZXh0X2NwdSgpIGlzIGNhbGxlZCB3aXRoIHJ0b19jcHUgaXMgYSB2YWxpZCBDUFUsIGl0XFxua2VybmVsL3NjaGVkL3J0LmMtMjE0MC1cXHQgKiB3aWxsIHJldHVybiB0aGUgbmV4dCBDUFUgZm91bmQgaW4gdGhlIHJ0b19tYXNrLlxcbi0tXFxua2VybmVsL3NjaGVkL3J0LmM9MjE5MD1zdGF0aWMgdm9pZCB0ZWxsX2NwdV90b19wdXNoKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvcnQuYy0yMjA5LVxcdGlmIChycS1cXHUwMDNlcmQtXFx1MDAzZXJ0b19jcHUgXFx1MDAzYyAwKVxcbmtlcm5lbC9zY2hlZC9ydC5jOjIyMTA6XFx0XFx0Y3B1ID0gcnRvX25leHRfY3B1KHJxLVxcdTAwM2VyZCk7XFxua2VybmVsL3NjaGVkL3J0LmMtMjIxMS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9ydC5jPTIyMjQ9dm9pZCBydG9fcHVzaF9pcnFfd29ya19mdW5jKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9ydC5jLTIyNDYtXFx0LyogUGFzcyB0aGUgSVBJIHRvIHRoZSBuZXh0IHJ0IG92ZXJsb2FkZWQgcXVldWUgKi9cXG5rZXJuZWwvc2NoZWQvcnQuYzoyMjQ3OlxcdGNwdSA9IHJ0b19uZXh0X2NwdShyZCk7XFxua2VybmVsL3NjaGVkL3J0LmMtMjI0OC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTExODctXFx0LypcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMTg4OlxcdCAqIFRoZSBuZXh0IGNhY2hlbGluZSBob2xkcyB0aGUgKGhvdCkgcnVucXVldWUgbG9jaywgYXMgd2VsbCBhc1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTExODktXFx0ICogc29tZSBvdGhlciBsZXNzIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZpZWxkcy5cXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyNTEtXFx0c3RydWN0IHRhc2tfc3RydWN0XFx0KnN0b3A7XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTI1MjpcXHRjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKm5leHRfY2xhc3M7XFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTI1My1cXHR1bnNpZ25lZCBsb25nXFx0XFx0bmV4dF9iYWxhbmNlO1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9Mjg2Nz1zdGF0aWMgaW5saW5lIHZvaWQgcnFfbW9kaWZpZWRfYmVnaW4oc3RydWN0IHJxICpycSwgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzcylcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODY4LXtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODY5OlxcdGlmIChzY2hlZF9jbGFzc19hYm92ZShycS1cXHUwMDNlbmV4dF9jbGFzcywgY2xhc3MpKVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjI4NzA6XFx0XFx0cnEtXFx1MDAzZW5leHRfY2xhc3MgPSBjbGFzcztcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODcxLX1cXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTI4NzM9c3RhdGljIGlubGluZSBib29sIHJxX21vZGlmaWVkX2Fib3ZlKHN0cnVjdCBycSAqcnEsIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3MpXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg3NC17XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6Mjg3NTpcXHRyZXR1cm4gc2NoZWRfY2xhc3NfYWJvdmUocnEtXFx1MDAzZW5leHRfY2xhc3MsIGNsYXNzKTtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODc2LX1cXG4tLVxcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jPTQ5Mz1pbnQgX19zY2hlZF9zZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNDk4LVxcdGludCByZXR2YWwsIG9sZHByaW8sIG5ld3ByaW87XFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM6NDk5OlxcdGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcywgKm5leHRfY2xhc3M7XFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNTAwLVxcdHN0cnVjdCBiYWxhbmNlX2NhbGxiYWNrICpoZWFkO1xcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjc1LVxcdHByZXZfY2xhc3MgPSBwLVxcdTAwM2VzY2hlZF9jbGFzcztcXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYzo2NzY6XFx0bmV4dF9jbGFzcyA9IF9fc2V0c2NoZWR1bGVyX2NsYXNzKHBvbGljeSwgbmV3cHJpbyk7XFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjc3LVxcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jOjY3ODpcXHRpZiAocHJldl9jbGFzcyAhPSBuZXh0X2NsYXNzKVxcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTY3OS1cXHRcXHRxdWV1ZV9mbGFncyB8PSBERVFVRVVFX0NMQVNTO1xcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjg0LVxcdFxcdFxcdF9fc2V0c2NoZWR1bGVyX3BhcmFtcyhwLCBhdHRyKTtcXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYzo2ODU6XFx0XFx0XFx0cC1cXHUwMDNlc2NoZWRfY2xhc3MgPSBuZXh0X2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTY4Ni1cXHRcXHRcXHRwLVxcdTAwM2VwcmlvID0gbmV3cHJpbztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MjkuODI3MzY3NjMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5OTc1Mzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBFeHRlbnNpb24gU2NoZWR1bGVyIEludGVncmF0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgaXMgYmVpbmcgaW5jbHVkZWQgd2l0aGluIGBrZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmNgLiBJbnRlcmVzdGluZy4gSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSBib3RoIGBrZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmNgIGFuZCB0aGUgYXNzb2NpYXRlZCBgTWFrZWZpbGVgIGluIHRoZSBga2VybmVsL3NjaGVkYCBkaXJlY3RvcnkuIEknbSB0cnlpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGV4dGVuc2lvbiBzY2hlZHVsZXIgaXMgYmVpbmcgaW50ZWdyYXRlZC5cblxuV2FpdCBhIHNlY29uZOKApiBJJ3ZlIGdvdCBpdC4gVGhlIGNvbXBpbGF0aW9uIG9mIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCBpcyBjb25kaXRpb25hbCDigJMgaXQncyBvbmx5IGluY2x1ZGVkIHdoZW4gYENPTkZJR19TQ0hFRF9DTEFTU19FWFRgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gTGV0IG1lIGNoZWNrIHRoZSBga2VybmVsL3NjaGVkL0tjb25maWdgIGZpbGUgb3IgYW5vdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBzZWUgaG93IGBTQ0hFRF9DTEFTU19FWFRgIGlzIGV4cG9zZWQgYW5kIGNvbnRyb2xsZWQuIFRoYXQgc2hvdWxkIGV4cGxhaW4gdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzUzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjM0LjkyNzEyMzUxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMjkzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTU5LVxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo2MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy02MS0jIGluY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yNjAtXFxua2VybmVsL3NjaGVkL2NvcmUuYzoyNjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI2Mi1cXHRpZiAocGEgPT0gTUFYX1JUX1BSSU8gKyBNQVhfTklDRSArIDEpXFx0LyogZXh0ICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ1NzM9c3RhdGljIHZvaWQgX19zY2hlZF9mb3JrKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEwLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDYxMTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYxMi1cXHRpbml0X3NjeF9lbnRpdHkoXFx1MDAyNnAtXFx1MDAzZXNjeCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ4MTM9aW50IHNjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ4NjAtXFx0XFx0cC1cXHUwMDNlc2NoZWRfY2xhc3MgPSBcXHUwMDI2cnRfc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo0ODYxOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2NvcmUuYy00ODYyLVxcdH0gZWxzZSBpZiAodGFza19zaG91bGRfc2N4KHAtXFx1MDAzZXBvbGljeSkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzYwOD1jb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKl9fc2V0c2NoZWR1bGVyX2NsYXNzKGludCBwb2xpY3ksIGludCBwcmlvKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03NjE1LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzYxNjojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzYxNy1cXHRpZiAodGFza19zaG91bGRfc2N4KHBvbGljeSkpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg4Njg9aW50IHNjaGVkX2NwdV9keWluZyh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04ODgyLVxcdGRsX3NlcnZlcl9zdG9wKFxcdTAwMjZycS1cXHUwMDNlZmFpcl9zZXJ2ZXIpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODg4MzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODg4NC1cXHRkbF9zZXJ2ZXJfc3RvcChcXHUwMDI2cnEtXFx1MDAzZWV4dF9zZXJ2ZXIpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2MC1cXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzLCBcXHUwMDI2aWRsZV9zY2hlZF9jbGFzcykpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk2MTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2Mi1cXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzLCBcXHUwMDI2ZXh0X3NjaGVkX2NsYXNzKSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwNzgtXFx0XFx0ZmFpcl9zZXJ2ZXJfaW5pdChycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MDc5OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MDgwLVxcdFxcdGV4dF9zZXJ2ZXJfaW5pdChycSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xMDg9c3RhdGljIGlubGluZSB1OCBkbF9nZXRfdHlwZShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTExMy1cXHRcXHRyZXR1cm4gRExfU0VSVkVSX0ZBSVI7XFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM6MTE0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMTE1LVxcdGlmIChkbF9zZSA9PSBcXHUwMDI2cnEtXFx1MDAzZWV4dF9zZXJ2ZXIpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xODQyPXZvaWQgc2NoZWRfaW5pdF9kbF9zZXJ2ZXJzKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY2LVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjE4Njc6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY4LVxcdFxcdGRsX3NlID0gXFx1MDAyNnJxLVxcdTAwM2VleHRfc2VydmVyO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ1MT1zdGF0aWMgdm9pZCBkbF9zZXJ2ZXJfYWRkX2J3KHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDU4LVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NTk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDYwLVxcdGRsX3NlID0gXFx1MDAyNmNwdV9ycShjcHUpLVxcdTAwM2VleHRfc2VydmVyO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ2Nj1zdGF0aWMgdTY0IGRsX3NlcnZlcl9yZWFkX2J3KGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDczLVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NzQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDc1LVxcdGlmIChjcHVfcnEoY3B1KS1cXHUwMDNlZXh0X3NlcnZlci5kbF9zZXJ2ZXIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTQ5ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZGVidWdmc19zY2hlZDtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy00OTUtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6NDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNDk3LXN0YXRpYyBzc2l6ZV90XFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYz01NjE9c3RhdGljIHZvaWQgZGVidWdmc19leHRfc2VydmVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTU4MC19XFxua2VybmVsL3NjaGVkL2RlYnVnLmM6NTgxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNTgyLVxcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTc2OS1cXHRkZWJ1Z2ZzX2ZhaXJfc2VydmVyX2luaXQoKTtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NzEtXFx0ZGVidWdmc19leHRfc2VydmVyX2luaXQoKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTE0MDY9dm9pZCBwcm9jX3NjaGVkX3Nob3dfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTE1MDUtXFx0fVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjE1MDY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0xNTA3LVxcdF9fUFMoXFxcImV4dC5lbmFibGVkXFxcIiwgdGFza19vbl9zY3gocCkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz02NDE9dm9pZCBzY3hfc2V0X3Rhc2tfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgc3RhdGUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTY5Ny0gKiBzY3hfdGFza3MgY2FuIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgYWx3YXlzIHVzaW5nIGNncm91cCBpdGVyYXRpb24gaWZcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjY5ODogKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUIGRlcGVuZHMgb24gQ09ORklHX0NHUk9VUFMuXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02OTktICpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOC0gKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTEwLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD0zOT1ib29sIHNjeF9wcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmIsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTQyLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NDM6I2Vsc2VcXHQvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC00NC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NTc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2NoZWRfZXh0X2NsYXNzKHZvaWQpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC01OC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjU5OiNlbmRpZlxcdC8qIENPTkZJR19TQ0hFRF9DTEFTU19FWFQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYwLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYyLXZvaWQgX19zY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvaWRsZS5jPTU1Nz1zdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9pZGxlKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU2OS1cXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXFx1MDAyNnJxLVxcdTAwM2VmYWlyX3NlcnZlciwgZGVsdGFfZXhlYyk7XFxua2VybmVsL3NjaGVkL2lkbGUuYzo1NzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU3MS1cXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXFx1MDAyNnJxLVxcdTAwM2VleHRfc2VydmVyLCBkZWx0YV9leGVjKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5ND1zdGF0aWMgaW5saW5lIGludCBub3JtYWxfcG9saWN5KGludCBwb2xpY3kpXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTk1LXtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTctXFx0aWYgKHBvbGljeSA9PSBTQ0hFRF9FWFQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD02ODE9c3RydWN0IGNmc19ycSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC03NzktXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6NzgwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtNzgxLS8qIHNjeF9ycS1cXHUwMDNlZmxhZ3MsIHByb3RlY3RlZCBieSB0aGUgcnEgbG9jayAqL1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9ODExPXN0cnVjdCBzY3hfcnEge1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtODUwLX07XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6ODUxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtODUyLVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTE1OT1zdHJ1Y3QgcnEge1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxMy1cXHRzdHJ1Y3QgZGxfcnFcXHRcXHRkbDtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMjE0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxNS1cXHRzdHJ1Y3Qgc2N4X3JxXFx0XFx0c2N4O1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTg4NT1leHRlcm4gc3RydWN0IGJhbGFuY2VfY2FsbGJhY2sgYmFsYW5jZV9wdXNoX2NhbGxiYWNrO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODYtXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTg4NzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODgtZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBleHRfc2NoZWRfY2xhc3M7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xOTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfcnFfY2xvY2tfaW52YWxpZGF0ZShzdHJ1Y3QgcnEgKnJxKVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxMC1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTExOiNlbHNlIC8qICFDT05GSUdfU0NIRURfQ0xBU1NfRVhUOiAqL1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5MTItI2RlZmluZSBzY3hfZW5hYmxlZCgpXFx0XFx0ZmFsc2VcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MTY9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTkxNzojZW5kaWYgLyogIUNPTkZJR19TQ0hFRF9DTEFTU19FWFQgKi9cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTE4LVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9Mjg0MT1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqbmV4dF9hY3RpdmVfY2xhc3MoY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzcylcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NDMtXFx0Y2xhc3MrKztcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODQ0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg0NS1cXHRpZiAoc2N4X3N3aXRjaGVkX2FsbCgpIFxcdTAwMjZcXHUwMDI2IGNsYXNzID09IFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzKVxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM9NDc0PXZvaWQgcnFfYXR0YWNoX3Jvb3Qoc3RydWN0IHJxICpycSwgc3RydWN0IHJvb3RfZG9tYWluICpyZClcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTUxMi1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo1MTM6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy01MTQtXFx0aWYgKHJxLVxcdTAwM2VleHRfc2VydmVyLmRsX3NlcnZlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MzQuOTczMjU1MzQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODE5NzUxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHRlbmRlZCBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgaGVyZSBpcyBgU0NIRURfQ0xBU1NfRVhUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuIEhtbSwgdGhlIGNvZGUgc2VlbXMgdG8gYmUgZm9jdXNlZCBhcm91bmQgYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gVGhhdCdzIHVzZWQgaW4gc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIEFsbCBvZiB0aGVzZSwgdGhlIGNvZGUgdGVsbHMgbWUsIGFyZSBsb2NhdGVkIHdpdGhpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgYW5kIGBrZXJuZWwvc2NoZWQvZXh0L3N1Yi5jYC5cblxuUmlnaHQsIGBTQ0hFRF9DTEFTU19FWFRg4oCmIG1ha2luZyBhIG5vdGUgdG8ga2VlcCB0aGF0IGNvbmZpZ3VyYXRpb24gaW4gbWluZCBhcyBJIHByb2Nlc3MgdGhpcy4gSGFuZyBvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgYW5kIHNlYXJjaCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgY2dyb3VwX2luaXRgIHRvIGNvbmZpcm0gdGhhdCBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjA3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjQxLjY1NTIzMzcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY2Mzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvZXh0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ2ODA9dm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2OTEtICpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ2OTI6ICogUmV0dXJuIHRoZSBzY2hlZCB0aGF0IEB0ZydzIG9wcy5jZ3JvdXBfaW5pdCgpIHN1Y2NlZWRlZCBvbiwgJU5VTEwgaWYgQHRnXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NjkzLSAqIGlzbid0IGluaXRlZC4gQW4gYXV0b2dyb3VwIHRnIGhhcyBubyBjZ3JvdXAgb2YgaXRzIG93biBhbmQgcmVzb2x2ZXMgdG8gdGhlXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3MDU9c3RhdGljIHN0cnVjdCBzY3hfc2NoZWQgKnNjeF90Z19zY2hlZChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3MTEtXFx0XFx0dGcgPSBcXHUwMDI2cm9vdF90YXNrX2dyb3VwO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDcxMjpcXHQvKiBJTklURUQgbWVhbnMgb3BzLmNncm91cF9pbml0KCkgc3VjY2VlZGVkIG9uIEB0Zy1cXHUwMDNlc2N4LnNjaGVkICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzEzLVxcdHJldHVybiAodGctXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UR19JTklURUQpID8gdGctXFx1MDAzZXNjeC5zY2hlZCA6IE5VTEw7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3MjUtICogUmV0dXJuICVOVUxMIGlmIHRoZSBwYXJlbnQgdGFza19ncm91cCBoYXMgbm8gc2NoZWQuIFRoYXQgY2FuIGhhcHBlbiB3aGVuIHRoZVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDcyNjogKiBwYXJlbnQncyBvcHMuY2dyb3VwX2luaXQoKSBmYWlscyB3aGlsZSBhIHN1Yi1zY2hlZHVsZXIgaXMgYmVpbmcgZGlzYWJsZWQuXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzI3LSAqXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3NDI9aW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzYxLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc2MjpcXHRcXHRpZiAoU0NYX0hBU19PUChzY2gsIGNncm91cF9pbml0KSkge1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc2MzpcXHRcXHRcXHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzY0LVxcdFxcdFxcdFxcdHsgLndlaWdodCA9IHRnLVxcdTAwM2VzY3gud2VpZ2h0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzY5LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc3MDpcXHRcXHRcXHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgTlVMTCwgdGctXFx1MDAzZWNzcy5jZ3JvdXAsIFxcdTAwMjZhcmdzKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzItXFx0XFx0XFx0aWYgKHJldClcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ3NzM6XFx0XFx0XFx0XFx0cmV0ID0gc2N4X29wc19zYW5pdGl6ZV9lcnIoc2NoLCBcXFwiY2dyb3VwX2luaXRcXFwiLCByZXQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc3NC1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUxNDc9c3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE1Ny1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNTg6XFx0XFx0LyogYWxzbyBjbGVhciB0aGUgc2NoZWQgb2YgdGdzIHdob3NlIG9wcy5jZ3JvdXBfaW5pdCgpIGZhaWxlZCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE1OS1cXHRcXHR0Zy1cXHUwMDNlc2N4LnNjaGVkID0gTlVMTDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE2Ny1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNjg6c3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE2OS17XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxODItXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo1MTgzOlxcdFxcdGlmIChzY2gtXFx1MDAzZW9wcy5jZ3JvdXBfaW5pdCkge1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE4NDpcXHRcXHRcXHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxODUtXFx0XFx0XFx0XFx0LndlaWdodCA9IHRnLVxcdTAwM2VzY3gud2VpZ2h0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTkxLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5MjpcXHRcXHRcXHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCwgTlVMTCwgY3NzLVxcdTAwM2VjZ3JvdXAsIFxcdTAwMjZhcmdzKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxOTMtXFx0XFx0XFx0aWYgKHJldCkge1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5NDpcXHRcXHRcXHRcXHRzY3hfZXJyb3Ioc2NoLCBcXFwib3BzLmNncm91cF9pbml0KCkgZmFpbGVkICglZClcXFwiLCByZXQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE5NS1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01MjA3PXN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfZXhpdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo1MjA4OnN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkgeyByZXR1cm4gMDsgfVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTIwOS0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NzQ2OD1zdGF0aWMgdm9pZCBzY3hfcm9vdF9lbmFibGVfd29ya2ZuKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc3MTAtXFx0c2V0X2Nncm91cF9zY2hlZChzY2hfY2dyb3VwKHNjaCksIHNjaCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo3NzExOlxcdHJldCA9IHNjeF9jZ3JvdXBfaW5pdChzY2gpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzcxMi1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcyPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgwLSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDgxOlxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwODItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjM3PXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODIzOC0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODIzOTpzdGF0aWMgczMyIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncykgeyByZXR1cm4gLUVJTlZBTDsgfVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI0MC1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfZXhpdChzdHJ1Y3QgY2dyb3VwICpjZ3JwKSB7fVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjU5PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyBfX2JwZl9vcHNfc2NoZWRfZXh0X29wcyA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4MC0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI4MTpcXHQuY2dyb3VwX2luaXRcXHRcXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0LFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4Mi1cXHQuY2dyb3VwX2V4aXRcXHRcXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9leGl0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzI2PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQgX19icGZfb3BzX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzQ1LSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzQ2OlxcdC5jcHVjdGxfaW5pdFxcdFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzQ3LVxcdC5jcHVjdGxfZXhpdFxcdFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2V4aXQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzgzPXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkwLSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDc5MTpcXHRbU0NYX09QX0lEWChjZ3JvdXBfaW5pdCldXFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5Mi1cXHRbU0NYX09QX0lEWChjZ3JvdXBfZXhpdCldXFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTU0LSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk1NTpcXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9pbml0LCBjcHVjdGxfaW5pdCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9leGl0LCBjcHVjdGxfZXhpdCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjQ4PXN0cnVjdCBzY3hfZXhpdF90YXNrX2FyZ3Mge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI1Mi1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjUzOi8qIGFyZ3VtZW50IGNvbnRhaW5lciBmb3Igb3BzLmNncm91cF9pbml0KCkgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjU0OnN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyB7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI1NS1cXHQvKiB0aGUgd2VpZ2h0IG9mIHRoZSBjZ3JvdXAgWzEuLjEwMDAwXSAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTMyMj1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNjUzLVxcdC8qKlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NTQ6XFx0ICogQGNncm91cF9pbml0OiBJbml0aWFsaXplIGEgY2dyb3VwXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1NS1cXHQgKiBAY2dycDogY2dyb3VwIGJlaW5nIGluaXRpYWxpemVkXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNjYyLVxcdCAqIENncm91cCBoYW5kb3ZlcnMgYWxzbyBnZW5lcmF0ZSB0aGVzZSBvcHM6IGFuIGVuYWJsaW5nIHN1Yi1zY2hlZHVsZXJcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NjYzOlxcdCAqIHJlY2VpdmVzIG9wcy5jZ3JvdXBfaW5pdCgpIGZvciBldmVyeSBjZ3JvdXAgaW4gaXRzIHN1YnRyZWUgd2hpbGUgdGhlXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY2NC1cXHQgKiBwcmV2aW91cyBzY2hlZCByZWNlaXZlcyBvcHMuY2dyb3VwX2V4aXQoKSwgYW5kIGRpc2FibGluZyByZXZlcnNlcyB0aGVcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NzUtXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY3NjpcXHRzMzIgKCpjZ3JvdXBfaW5pdCkoc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6Njc3OlxcdFxcdFxcdCAgIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY3OC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02ODMtXFx0ICogRXhpdCBAY2dycCBmb3Igc2NoZWRfZXh0LCBkZWxpdmVyZWQgdG8gdGhlIHNjaGVkIHdob3NlXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY4NDpcXHQgKiBvcHMuY2dyb3VwX2luaXQoKSBpdCBwYWlycyB3aXRoLCBlaXRoZXIgd2hlbiB0aGUgQlBGIHNjaGVkdWxlciBpc1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02ODUtXFx0ICogYmVpbmcgdW5sb2FkZWQgb3Igd2hlbiBAY2dycCBpcyBkZXN0cm95ZWQuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03MDQtXFx0ICogb3BzLmV4aXRfdGFzaygpIGFuZCBvcHMuaW5pdF90YXNrKCkgaW5zdGVhZC4gQGZyb20gYW5kIEB0byBjYW5cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzA1OlxcdCAqIHJlZmVyZW5jZSBjZ3JvdXBzIHRoZSBzY2hlZCBuZXZlciByZWNlaXZlZCBvcHMuY2dyb3VwX2luaXQoKSBmb3IsIGFzXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTcwNi1cXHQgKiB0aGUgY3B1IGNvbnRyb2xsZXIgY2FuIGJlIGNvYXJzZXIgdGhhbiB0aGUgc3ViLXNjaGVkdWxlciB0b3BvbG9neS5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NDUtXFx0ICogZGVsaXZlcmVkIHRvIEBjZ3JwJ3MgcGFyZW50J3Mgc2NoZWQuIFRoYXQgc2NoZWQgbWF5IG5ldmVyIGhhdmUgc2Vlblxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3NDY6XFx0ICogb3BzLmNncm91cF9pbml0KCkgZm9yIEBjZ3JwIC0gYXQgYSBzdWItc2NoZWR1bGVyIGF0dGFjaCBwb2ludCwgdGhlXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc0Ny1cXHQgKiBwYXJlbnQgc2NoZWQgdHJhY2tzIEBjZ3JwIHRocm91Z2ggb3BzLnN1Yl9hdHRhY2goKSBpbnN0ZWFkLlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTEwNDY9c3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDcyLSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwNzM6XFx0czMyICgqY3B1Y3RsX2luaXQpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwNzQtXFx0dm9pZCAoKmNwdWN0bF9leGl0KShzdHJ1Y3QgY2dyb3VwICpjZ3JwKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTI5ND1zdGF0aWMgdm9pZCBzY3hfZmFpbF9wYXJlbnQoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzM2LSAqICVTQ1hfVEdfSU5JVEVEIHN0YXlzIHNldCB0aHJvdWdob3V0LCBleGNlcHQgZm9yIGEgdGFza19ncm91cCB3aG9zZVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTMzNzogKiBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgb24gdGhlIHBhcmVudCAoc2VlIHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWUoKSk6XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzM4LSAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZXhpdCBmcm9tIHRoZSBwYXJlbnQgYW5kICVTQ1hfVEdfSU5JVEVEIGlzIHNldCBiYWNrIHdpdGhcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTM0OT1zdGF0aWMgczMyIHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNTgtXFx0XFx0c3RydWN0IHRhc2tfZ3JvdXAgKnRnID0gY3NzX3RnKGNzcyk7XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzU5OlxcdFxcdHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyBhcmdzID0ge1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTM2MC1cXHRcXHRcXHQud2VpZ2h0ID0gdGctXFx1MDAzZXNjeC53ZWlnaHQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNzAtXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzcxOlxcdFxcdGlmIChTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX2luaXQpKSB7XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzcyOlxcdFxcdFxcdHJldCA9IFNDWF9DQUxMX09QX1JFVChzY2gsIGNncm91cF9pbml0LCBOVUxMLCBjc3MtXFx1MDAzZWNncm91cCwgXFx1MDAyNmFyZ3MpO1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTM3My1cXHRcXHRcXHRpZiAocmV0KSB7XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzc0OlxcdFxcdFxcdFxcdHNjeF9lcnJvcihzY2gsIFxcXCJvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgKCVkKVxcXCIsIHJldCk7XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzc1LVxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzkwLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTM5MTpcXHRcXHQvKiBza2lwIHRoZSBleGl0IGlmIHRoZSBwYXJlbnQncyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzOTItXFx0XFx0aWYgKCh0Zy1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RHX0lOSVRFRCkgXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChwYXJlbnQsIGNncm91cF9leGl0KSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTQyNy0gKiB0YXNrIHJlLWhvbWluZy4gVGhlIHJlbWFpbmluZyB0YXNrX2dyb3VwcyBhcmUgcHVudGVkOiB0aGV5IG1vdmUgdG8gdGhlIHBhcmVudFxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQyODogKiBhbnl3YXkgd2l0aCAlU0NYX1RHX0lOSVRFRCBjbGVhcmVkLCBhcyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgb3IgbmV2ZXIgcmFuXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDI5LSAqIGZvciB0aGVtLiBBIHB1bnRlZCB0YXNrX2dyb3VwIGdldHMgbm8gY2dyb3VwIG9wcy4gVGhlIGR5aW5nIHBhcmVudCdzIG93blxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xNDM4PXN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDUzLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ1NDpcXHRcXHQvKiBza2lwIHRoZSBleGl0IGlmIEBzY2gncyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgZm9yIHRoZSB0ZyAqL1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTQ1NS1cXHRcXHRpZiAoKHRnLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEdfSU5JVEVEKSBcXHUwMDI2XFx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX2V4aXQpKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDYyLVxcdFxcdHN0cnVjdCB0YXNrX2dyb3VwICp0ZyA9IGNzc190Zyhjc3MpO1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ2MzpcXHRcXHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjQtXFx0XFx0XFx0LndlaWdodCA9IHRnLVxcdTAwM2VzY3gud2VpZ2h0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDkwLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ5MTpcXHRcXHRpZiAoU0NYX0hBU19PUChwYXJlbnQsIGNncm91cF9pbml0KSkge1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ5MjpcXHRcXHRcXHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQocGFyZW50LCBjZ3JvdXBfaW5pdCwgTlVMTCwgY3NzLVxcdTAwM2VjZ3JvdXAsIFxcdTAwMjZhcmdzKTtcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0OTMtXFx0XFx0XFx0aWYgKHJldCkge1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ5NDpcXHRcXHRcXHRcXHRzY3hfZXJyb3IocGFyZW50LCBcXFwib3BzLmNncm91cF9pbml0KCkgZmFpbGVkICglZCkgd2hpbGUgZGlzYWJsaW5nIGEgc3ViLXNjaGVkdWxlclxcXCIsXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDk1LVxcdFxcdFxcdFxcdFxcdCAgcmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NDEuNzAzOTAwNTM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTYxMzE4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTY2hlZHVsZXIgRXh0ZW5zaW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGFjdHVhbGx5IGVuYWJsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBjZ3JvdXBfaW5pdGAgd2l0aGluIHRoZSBzY2hlZHVsZXIgZXh0ZW5zaW9uIChgc2NoZWRfZXh0YCkgZnJhbWV3b3JrLiBOb3csIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgYW5kIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYnJvYWRlciBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGBrZXJuZWwvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGBFWFRfR1JPVVBfU0NIRURgIGFuZCBob3BlZnVsbHkgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZlYXR1cmUgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVkdWxpbmcgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGFuZCBwb3RlbnRpYWxseSB1bmNvdmVyIHNvbWUgbmV3IGluc2lnaHRzIGFib3V0IHRoaXMgc2VjdGlvbiBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEwOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjQ1LjUwMDAzNDM5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3OTY1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhUX0dST1VQX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3My0jZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5NzQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NzUtXFx0c2N4X3RnX2luaXQoXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo4OTc2OiNlbmRpZiAvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2NvcmUuYy04OTc3LSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRURcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9Mzc5MD1zdGF0aWMgdm9pZCB0YXNrX3RpY2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IHF1ZXVlZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgwOC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjM4MDk6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MTAtc3RhdGljIHN0cnVjdCBjZ3JvdXAgKnRnX2NncnAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODI0LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgyNTojZWxzZVxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MjYtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MjgtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozODI5OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MzAtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ2NDA9Ym9vbCBzY3hfY2FuX3N0b3BfdGljayhzdHJ1Y3QgcnEgKnJxKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00Njc1LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDY3NjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY3Ny1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk0Mz12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk2My19XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTY0OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5NjUtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTY2OiNpZiBkZWZpbmVkKENPTkZJR19FWFRfR1JPVVBfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX0VYVF9TVUJfU0NIRUQpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTY3LXN0YXRpYyBzdHJ1Y3QgY2dyb3VwICpyb290X2Nncm91cCh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTc3PXZvaWQgc2N4X2Nncm91cF9sb2NrKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5NzktXFx0Y2dyb3VwX2xvY2soKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5ODA6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5ODEtXFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk4NT12b2lkIHNjeF9jZ3JvdXBfdW5sb2NrKHZvaWQpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTg2LXtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5ODc6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5ODgtXFx0cGVyY3B1X3VwX3dyaXRlKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTEtfVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk5MjojZWxzZVxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgfHwgQ09ORklHX0VYVF9TVUJfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTMtc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwICpyb290X2Nncm91cCh2b2lkKSB7IHJldHVybiBOVUxMOyB9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5OTU9c3RhdGljIGlubGluZSB2b2lkIHNjeF9jZ3JvdXBfdW5sb2NrKHZvaWQpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTk2OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgfHwgQ09ORklHX0VYVF9TVUJfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTctXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUxMDc9c3RhdGljIHZvaWQgZGVzdHJveV9kc3Eoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1NjQgZHNxX2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTQ1LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE0NjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE0Ny1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX2V4aXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcyPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDc5LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfdGFzayk6XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDgwOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODIzNz1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyMzg6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyMzktc3RhdGljIHMzMiBzY2hlZF9leHRfb3BzX19jZ3JvdXBfaW5pdChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgKmFyZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI0Nj1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2lkbGUoc3RydWN0IGNncm91cCAqY2dycCwgYm9vbCBpZGxlKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI0NzojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQ4LXN0YXRpYyBzMzIgc2NoZWRfZXh0X29wc19fc3ViX2F0dGFjaChzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncyAqYXJncykgeyByZXR1cm4gLUVJTlZBTDsgfVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjU5PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyBfX2JwZl9vcHNfc2NoZWRfZXh0X29wcyA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI3OS1cXHQuZGlzYWJsZVxcdFxcdD0gc2NoZWRfZXh0X29wc19fZGlzYWJsZSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODA6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODEtXFx0LmNncm91cF9pbml0XFx0XFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfaW5pdCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyNj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM0NC1cXHQuZGlzYWJsZVxcdFxcdD0gc2NoZWRfZXh0X29wc19fZGlzYWJsZSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNDU6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNDYtXFx0LmNwdWN0bF9pbml0XFx0XFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfaW5pdCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA3ODM9c3RhdGljIGNvbnN0IHUzMiBzY3hfa2ZfYWxsb3dfZmxhZ3NbXSA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3ODktXFx0W1NDWF9PUF9JRFgoZHVtcCldXFx0XFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDc5MDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3OTEtXFx0W1NDWF9PUF9JRFgoY2dyb3VwX2luaXQpXVxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5Ny1cXHRbU0NYX09QX0lEWChjZ3JvdXBfc2V0X2lkbGUpXVxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTg6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3OTktXFx0W1NDWF9PUF9JRFgoc3ViX2F0dGFjaCldXFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTUzLVxcdENJRF9PRkZTRVRfTUFUQ0goZHVtcF9jcHUsIGR1bXBfY2lkKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTU0OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1NS1cXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9pbml0LCBjcHVjdGxfaW5pdCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTExMDUxPV9faW5pdGNhbGwoc2N4X2luaXQpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2MS0gKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDYyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2My1ERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9iYW5kd2lkdGhfbWF5X3NsZWVwKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDY0OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NzA9c3RhdGljIGlubGluZSB2b2lkIHNjeF91cGRhdGVfaWRsZShzdHJ1Y3QgcnEgKnJxLCBib29sIGlkbGUsIGJvb2wgZG9fbm90aWZ5KSB7fVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC03My0jaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NzQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTc1LXZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODM9dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjg0OiNlbHNlXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODUtc3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTM9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo5NDojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05NS0jZW5kaWZcXHQvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjM1PXN0cnVjdCBzY3hfaW5pdF90YXNrX2FyZ3Mge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI0MC1cXHRib29sXFx0XFx0XFx0Zm9yaztcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjQxOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI0Mi1cXHQvKiB0aGUgY2dyb3VwIHRoZSB0YXNrIGlzIGpvaW5pbmcgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0zMjI9c3RydWN0IHNjaGVkX2V4dF9vcHMge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1MS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NjUyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1My1cXHQvKipcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODYtXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjc4NzojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc4OC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0xMDQ2PXN0cnVjdCBzY2hlZF9leHRfb3BzX2NpZCB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3MS1cXHR2b2lkICgqZHVtcF90YXNrKShzdHJ1Y3Qgc2N4X2R1bXBfY3R4ICpjdHgsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwNzI6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3My1cXHRzMzIgKCpjcHVjdGxfaW5pdCkoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzICphcmdzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDgzLVxcdHZvaWQgKCpjcHVjdGxfc2V0X2lkbGUpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGJvb2wgaWRsZSk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwODQ6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDg1LVxcdHMzMiAoKnN1Yl9hdHRhY2gpKHN0cnVjdCBzY3hfc3ViX2F0dGFjaF9hcmdzICphcmdzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0yMDc5PXZvaWQgc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjIwODA6I2lmIGRlZmluZWQoQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCkgfHwgZGVmaW5lZChDT05GSUdfRVhUX1NVQl9TQ0hFRClcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMjA4MS12b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTI5ND1zdGF0aWMgdm9pZCBzY3hfZmFpbF9wYXJlbnQoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzIwLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTMyMTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMyMi0vKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NDUuNTUxODMyNzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxMDg3OTU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHdlIG5lZWQgYm90aCBgQ09ORklHX1NDSEVEX0NMQVNTX0VYVGAgYW5kIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYC4gQnV0IGhvbGQgb24sIGJlZm9yZSBJIGp1c3QgYmxpdGhlbHkgYXNzdW1lIEkgY2FuIGVuYWJsZSB0aGVtLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYSBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEknbSBmYWlybHkgY2VydGFpbiBgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRGAgbWlnaHQgaGluZ2Ugb24gYENPTkZJR19DR1JPVVBfU0NIRURgLiBJdOKAmXMgdGhlIHVzdWFsIGRhbmNlIHdpdGggdGhlc2Ugc2V0dGluZ3Mg4oCTIHlvdSBjYW4ndCBhbHdheXMganVzdCBmbGlwIHRoZSBzd2l0Y2ggd2l0aG91dCBjaGVja2luZyB1cHN0cmVhbS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgYW5kIGVuZCB1cCB3aXRoIGEga2VybmVsIHRoYXQgd29u4oCZdCBib290IG9yIHBlcmZvcm1zIHVucHJlZGljdGFibHkuIFJpZ2h0LCBsZXTigJlzIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRpbWUgdG8gZGlnIGludG8gYGtlcm5lbC9zY2hlZC9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlcGVuZGVuY3kgaGllcmFyY2h5LiBTaG91bGRu4oCZdCB0YWtlIGxvbmcgdG8gc29ydCB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3MTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzo1MC4yNjI3MTQxNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjYyNjk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUX0dST1VQX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjUwLjM1ODM4MjE1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE5MDU1Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uIFRoZSBuYXR1cmFsIGZpcnN0IHN0ZXAsIG9mIGNvdXJzZSwgaXMgdG8gY2hlY2sgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBJdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGEgbG90IG9mIHRoZSBjb3JlIG9wdGlvbnMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbi4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGEgc3BlY2lmaWMgYXNwZWN0IGlzIGNvbnRyb2xsZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDE3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NTUuNTc3NDQwNzE5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc1NTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUX0dST1VQX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTE5Nj1jb25maWcgUlRfR1JPVVBfU0NIRURfREVGQVVMVF9ESVNBQkxFRFxcbi0tXFxuaW5pdC9LY29uZmlnLTEyMDYtXFxuaW5pdC9LY29uZmlnOjEyMDc6Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMjA4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NTUuNjcyMjAyNDY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjc0OTAzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIGZvciBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHdvcmtzLiBXaGVyZSBkb2VzIHRoaXMgc3RhcnQ/IFJpZ2h0LCBgaW5pdC9LY29uZmlnYCBpcyB1c3VhbGx5IGEgZ29vZCBiZXQsIGVzcGVjaWFsbHkgZm9yIGNvcmUgaW5pdGlhbGl6YXRpb24gc3R1ZmYuIExldCdzIHplcm8gaW4gb24gYXJvdW5kIGxpbmUgMTIwNy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIGFuZCBob3cgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaW5rZWQgdG9nZXRoZXIgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHZhcmlvdXMgc2V0dGluZ3MuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byByZWNvbnN0cnVjdCB0aGUgbG9naWMgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDowMC43Mzk2OTQ5ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTkwOlxcdFxcdCAgVGhpcyBmZWF0dXJlIGxldHMgeW91IGV4cGxpY2l0bHkgYWxsb2NhdGUgcmVhbCBDUFUgYmFuZHdpZHRoXFxuMTE5MTpcXHRcXHQgIHRvIHRhc2sgZ3JvdXBzLiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvXFxuMTE5MjpcXHRcXHQgIHNjaGVkdWxlIHJlYWx0aW1lIHRhc2tzIGZvciBub24tcm9vdCB1c2VycyB1bnRpbCB5b3UgYWxsb2NhdGVcXG4xMTkzOlxcdFxcdCAgcmVhbHRpbWUgYmFuZHdpZHRoIGZvciB0aGVtLlxcbjExOTQ6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjExOTU6XFx0XFxuMTE5NjpcXHRjb25maWcgUlRfR1JPVVBfU0NIRURfREVGQVVMVF9ESVNBQkxFRFxcbjExOTc6XFx0XFx0Ym9vbCBcXFwiUmVxdWlyZSBib290IHBhcmFtZXRlciB0byBlbmFibGUgZ3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfUlIvRklGT1xcXCJcXG4xMTk4OlxcdFxcdGRlcGVuZHMgb24gUlRfR1JPVVBfU0NIRURcXG4xMTk5OlxcdFxcdGRlZmF1bHQgblxcbjEyMDA6XFx0XFx0aGVscFxcbjEyMDE6XFx0XFx0ICBXaGVuIHNldCwgdGhlIFJUIGdyb3VwIHNjaGVkdWxpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVGhlIG9wdGlvblxcbjEyMDI6XFx0XFx0ICBpcyBpbiBpbnZlcnRlZCBmb3JtIHNvIHRoYXQgbWVyZSBSVF9HUk9VUF9TQ0hFRCBlbmFibGVzIHRoZSBncm91cFxcbjEyMDM6XFx0XFx0ICBzY2hlZHVsaW5nLlxcbjEyMDQ6XFx0XFxuMTIwNTpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMjA2OlxcdFxcbjEyMDc6XFx0Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxcbjEyMDg6XFx0XFx0Ym9vbFxcbjEyMDk6XFx0XFx0ZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXFx1MDAyNlxcdTAwMjYgQ0dST1VQX1NDSEVEXFxuMTIxMDpcXHRcXHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXFxuMTIxMTpcXHRcXHRzZWxlY3QgR1JPVVBfU0NIRURfQkFORFdJRFRIXFxuMTIxMjpcXHRcXHRkZWZhdWx0IHlcXG4xMjEzOlxcdFxcbjEyMTQ6XFx0ZW5kaWYgI0NHUk9VUF9TQ0hFRFxcbjEyMTU6XFx0XFxuMTIxNjpcXHRjb25maWcgRVhUX1NVQl9TQ0hFRFxcbjEyMTc6XFx0ICAgICAgICBkZWZfYm9vbCB5XFxuMTIxODpcXHQgICAgICAgIGRlcGVuZHMgb24gU0NIRURfQ0xBU1NfRVhUIFxcdTAwMjZcXHUwMDI2IENHUk9VUFNcXG4xMjE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDowMC43Mzk4MTM5NjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4OTY3MDM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBib3RoIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCB0byBiZSBlbmFibGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGRvY3VtZW50ZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBwbGFjZXMsIGNoZWNraW5nIHRoZSBgaW5pdC9LY29uZmlnYCwgYGtlcm5lbC9LY29uZmlnLnByZWVtcHRgLCBhbmQgYGtlcm5lbC9zY2hlZC9LY29uZmlnYCBmaWxlcy4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBzY2hlZHVsZXItcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGV5J2xsIGxpa2VseSBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gbmVlZGVkIHRvIHByb2NlZWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aG9zZSBLY29uZmlnIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkwOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MDYuNDI5NDg2NTIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxODgxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHQ9MTU1PWNvbmZpZyBTQ0hFRF9DT1JFXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3Mi1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjE3Mzpjb25maWcgU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNzQtXFx0Ym9vbCBcXFwiRXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDowOC4wMTEzNzIxODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0OTgyMDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBQcmVlbXB0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgcHJlZW1wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL0tjb25maWcucHJlZW1wdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzMuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcmVlbXB0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBsaWVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBjaG9pY2VzIHRoZXJlIHRoYXQgZHJpdmUgdGhlIGJlaGF2aW9yOiB3aGV0aGVyIGl0J3MgZnVsbCBwcmVlbXB0aW9uLCB2b2x1bnRhcnkgcHJlZW1wdGlvbiwgb3IgbWF5YmUgc29tZSBtb3JlIG51YW5jZWQgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgYXV0aG9ycyBjb25zaWRlcmVkIGNyaXRpY2FsIGluIG1ha2luZyB0aGVpciBkZWNpc2lvbnMuIEl0J3MgcHJvYmFibHkgdGhlIGJhc2lzIHRvIHNlZSB0aGUgaW50ZXItcmVsYXRlZCBpbXBhY3RzIGluIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MTMuMDYxMTk1Mzc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcdCAgVXNlIG9mIHRoaXMgZmVhdHVyZSBpbmNsdWRlczpcXG4gMTY2OlxcdFxcdCAgIC0gbWl0aWdhdGlvbiBvZiBzb21lIChub3QgYWxsKSBTTVQgc2lkZSBjaGFubmVscztcXG4gMTY3OlxcdFxcdCAgIC0gbGltaXRpbmcgU01UIGludGVyZmVyZW5jZSB0byBpbXByb3ZlIGRldGVybWluaXNtIGFuZC9vciBwZXJmb3JtYW5jZS5cXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0ICBTQ0hFRF9DT1JFIGlzIGRlZmF1bHQgZGlzYWJsZWQuIFdoZW4gaXQgaXMgZW5hYmxlZCBhbmQgdW51c2VkLFxcbiAxNzA6XFx0XFx0ICB3aGljaCBpcyB0aGUgbGlrZWx5IHVzYWdlIGJ5IExpbnV4IGRpc3RyaWJ1dGlvbnMsIHRoZXJlIHNob3VsZFxcbiAxNzE6XFx0XFx0ICBiZSBubyBtZWFzdXJhYmxlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS5cXG4gMTcyOlxcdFxcbiAxNzM6XFx0Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxcbiAxNzQ6XFx0XFx0Ym9vbCBcXFwiRXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXFxcIlxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuIDE3NjpcXHRcXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4gMTc3OlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbiAxNzg6XFx0XFx0aGVscFxcbiAxNzk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgbmV3IHNjaGVkdWxlciBjbGFzcyBzY2hlZF9leHQgKFNDWCksIHdoaWNoXFxuIDE4MDpcXHRcXHQgIGFsbG93cyBzY2hlZHVsaW5nIHBvbGljaWVzIHRvIGJlIGltcGxlbWVudGVkIGFzIEJQRiBwcm9ncmFtcyB0b1xcbiAxODE6XFx0XFx0ICBhY2hpZXZlIHRoZSBmb2xsb3dpbmc6XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdCAgLSBFYXNlIG9mIGV4cGVyaW1lbnRhdGlvbiBhbmQgZXhwbG9yYXRpb246IEVuYWJsaW5nIHJhcGlkXFxuIDE4NDpcXHRcXHQgICAgaXRlcmF0aW9uIG9mIG5ldyBzY2hlZHVsaW5nIHBvbGljaWVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoxMy4wNjEyNTg4NTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxNzk5Mjc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB3ZSdyZSBhdCBhIHBvaW50IHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIGNlcnRhaW4ga2VybmVsIGZ1bmN0aW9uYWxpdGllcyBhcmUgZW5hYmxlZC4gVGhlIGltbWVkaWF0ZSByZXF1aXJlbWVudHMgYXJlIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYC4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCB3aGVyZSB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBDR1JPVVBfU0NIRURgPyBBaCwgeWVzLCBJIHJlY2FsbCBzZWVpbmcgdGhhdCBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aGUgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBrZXJuZWwgc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBzZXR0aW5ncywgZXNwZWNpYWxseSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGNncm91cHMuIExvb2tzIGxpa2Ugd2UgYXJlIG9uIHRoZSByaWdodCB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3OTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjE4LjY3OTI1Mzc5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNTMyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExNDc9Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTUxLVxcbmluaXQvS2NvbmZpZzoxMTUyOm1lbnVjb25maWcgQ0dST1VQX1NDSEVEXFxuaW5pdC9LY29uZmlnLTExNTMtXFx0Ym9vbCBcXFwiQ1BVIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjE4LjcyODUwOTYxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA2ODE5MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIENoZWNrKipcblxuQWxyaWdodCwgc28gYENHUk9VUF9TQ0hFRGAgaXMgYSBtZW51Y29uZmlnIG9wdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhpcyByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgc3Vic3lzdGVtcyBpdCdzIHRpZWQgdG8sIGFueSBvdGhlciBjb250cm9sIGdyb3VwIG9wdGlvbnMgaXQgbWFuZGF0ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgY3JpdGljYWwuIEl0IGF2b2lkcyBhIGxvdCBvZiBoZWFkYWNoZXMgZG93biB0aGUgbGluZSBkdXJpbmcgaW50ZWdyYXRpb24gYW5kIHRyb3VibGVzaG9vdGluZywgZW5zdXJlcyBJIGVuYWJsZSBhbGwgdGhlIG5lZWRlZCBwYXJ0cywgYW5kIHBvdGVudGlhbGx5IGhlbHBzIHRvIHVuZGVyc3RhbmQgY29uZmxpY3RzIHdpdGggb3RoZXIgY29uZmlndXJhdGlvbnMuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUga2NvbmZpZyBzdHJ1Y3R1cmUgYW5kIHRoZSBjb2RlIGl0c2VsZiB0byBtYXAgb3V0IHRob3NlIGRlcGVuZGVuY2llcy4gS25vd2luZyB0aG9zZSBsaW5rcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgcHJvcGVybHkgY29uZmlndXJpbmcgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyMy4wMzUzMzE3NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDU6XFx0XFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjExNDY6XFx0XFxuMTE0NzpcXHRjb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbjExNDg6XFx0XFx0Ym9vbFxcbjExNDk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DRyBcXHUwMDI2XFx1MDAyNiBCTEtfQ0dST1VQXFxuMTE1MDpcXHRcXHRkZWZhdWx0IHlcXG4xMTUxOlxcdFxcbjExNTI6XFx0bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcXG4xMTUzOlxcdFxcdGJvb2wgXFxcIkNQVSBjb250cm9sbGVyXFxcIlxcbjExNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuMTE1NTpcXHRcXHRoZWxwXFxuMTE1NjpcXHRcXHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxcbjExNTc6XFx0XFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcXG4xMTU4OlxcdFxcdCAgdGFza3MuXFxuMTE1OTpcXHRcXG4xMTYwOlxcdGlmIENHUk9VUF9TQ0hFRFxcbjExNjE6XFx0Y29uZmlnIEdST1VQX1NDSEVEX1dFSUdIVFxcbjExNjI6XFx0XFx0ZGVmX2Jvb2wgblxcbjExNjM6XFx0XFxuMTE2NDpcXHRjb25maWcgR1JPVVBfU0NIRURfQkFORFdJRFRIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjIzLjAzNTQ1NDk3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NjQzNTk5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IENHUk9VUF9TQ0hFRCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENHUk9VUF9TQ0hFRGAgcGF0Y2guIEdvb2QsIG5vIG9idmlvdXMgZGVwZW5kZW5jaWVzIOKAkyB0aGF0J3MgYSBwbHVzIGZvciBpc29sYXRpb24uIENvbmZpZy13aXNlLCBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENHUk9VUF9TQ0hFRGAgYXJlIHRoZSBrZXkgZmxhZ3MuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gSSBzZWUgdGhhdCBnZXRzIHVzZWQgaW4gYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIGNncm91cCBpbml0aWFsaXphdGlvbiBhbmQgc3ViLXNjaGVkdWxlciBhdHRhY2htZW50LCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgd2hpY2ggb2YgdGhlc2UgYXJlIHRoZSAqYmVzdCogdGFyZ2V0cz8gSSBuZWVkIHRvIG5hcnJvdyBpdCBkb3duLiBMZXQncyBsaXN0IHRob3NlIGZ1bmN0aW9ucyBvdXQgYXMgYSBiYXNpcyBmb3IgZnV6emluZzogYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlYCwgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXNlIGFyZSBzdGF0aWMuIFRoYXQgaW1wYWN0cyBjYWxsIHZpc2liaWxpdHkgYW5kIGZ1enppbmcgc3RyYXRlZ2llcy4gQWxyaWdodCwgbGV0J3Mgc2VlOiBgc2N4X3RnX29ubGluZWAgaXNuJ3Qgc3RhdGljLCB3aGljaCBpcyBnb29kIGZyb20gYSBjYWxsIHBlcnNwZWN0aXZlOyBgc2N4X2dyb3VwX3NldF9pZGxlYCBpcyBhbHNvIG5vbi1zdGF0aWMsIGFub3RoZXIgZ29vZCBzaWduLiBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAgYXJlIHN0YXRpYy4gU28sIEkgaGF2ZSB0byB3b3JrIGFyb3VuZCB0aGF0LlxuXG5HaXZlbiBgc2N4X3RnX29ubGluZWAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGFyZW4ndCBzdGF0aWMsIEkgc2hvdWxkIG5vdyBmb2N1cyBvbiB3aGVyZSB0aG9zZSBhcmUgY2FsbGVkIHRvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRyeXBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1OTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyOS42OTk4MTY5OTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTE5NzA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3hfdGdfb25saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuYz05NTYxPXN0YXRpYyBpbnQgY3B1X2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk1NjYtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5NTY3OlxcdHJldCA9IHNjeF90Z19vbmxpbmUodGcpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTU2OC1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NzMyPXN0YXRpYyBzdHJ1Y3Qgc2N4X3NjaGVkICpzY3hfdGdfa25vYl9zY2hlZChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NDEtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NzQyOmludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NDMte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD03NT12b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo3NjppbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzctdm9pZCBzY3hfdGdfb2ZmbGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04NT1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODY6c3RhdGljIGlubGluZSBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpIHsgcmV0dXJuIDA7IH1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTg3LXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdGdfb2ZmbGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjMwLjQ5NTAyMDI5N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzg5NDIwOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBmcm9tIGEga2VybmVsLWxldmVsIENQVSByZXNvdXJjZSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlOlxuXG4qKk15IEN1cnJlbnQgQ1BVIFJlc291cmNlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBDUFUgcmVzb3VyY2VzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aWNpbmcgdHdvIGtleSBmdW5jdGlvbnMgcG9wcGluZyB1cCBpbiBteSB0cmFjZTogYHNjeF90Z19vbmxpbmVgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhlIGZpcnN0LCBgc2N4X3RnX29ubGluZWAsIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYGNwdV9jZ3JvdXBfY3NzX29ubGluZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgZGVlcGx5IGludm9sdmVkIGluIHRoZSBDUFUgY29udHJvbGxlcidzIGNncm91cCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGF0IG1ha2VzIHNlbnNlOyB3aGVuIGEgbmV3IGNncm91cCwgb3IgYSBuZXcgQ1BVIHJlc291cmNlIGlzIGJlaW5nIGJyb3VnaHQgb25saW5lLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcGxheWluZyBhIGtleSBwYXJ0LiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGNvZGUgcGF0aCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhlbHBzIGluaXRpYWxpemUgYW5kIGFjdGl2YXRlIHRoZSBDUFUgcmVzb3VyY2VzLlxuXG5UaGVuIHRoZXJlJ3MgYHNjeF9ncm91cF9zZXRfaWRsZWAuIFRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgc2NoZWRfZ3JvdXBfc2V0X2lkbGVgIGlzIHJlYWxseSBpbnRlcmVzdGluZy4gVGhpcyBwb2ludHMgdG8gdGhpcyBmdW5jdGlvbiBoYXZpbmcgc29tZSByb2xlIGluIG1hbmFnaW5nIHRoZSBpZGxlIHN0YXRlIG9mIHNjaGVkdWxlciBncm91cHMsIGxpa2VseSByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgb3IgcmVzb3VyY2UgcmVjbGFtYXRpb24gYXQgdGhlIHNjaGVkdWxlciBsZXZlbCwgb3IgYXMgYSBjb25zZXF1ZW5jZSBvZiBDUFUgcmVzb3VyY2UgY29udGVudGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZSBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggdGhpcyBmdW5jdGlvbiwgYXMgd2VsbCBhcyB0aGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgYm90aCBvZiB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgd2UgZ2V0IGEgd29ya2xvYWQgcnVubmluZyBvbiB0aGUgQ1BVcyBvZiBhIG5vZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MzUuMjg0NDQ0NDE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQ0NzUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU5PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY1LVxcdGlmICghcmV0KVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTAyNjY6XFx0XFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5MTE9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgd2VpZ2h0KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI2LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkyNzp2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5Mjgte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04MT12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4Mjp2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD05MT1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTkzLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKSB7fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDozNS4zNjQ4OTM5NjVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4NDUwNzQ4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBmb3IgdGhlIFNjaGVkX2V4dCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgbGVkIG1lIGRvd24gYSBzcGVjaWZpYyBwYXRoLiBJIHNlZSB0aGF0IGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGlzIGNhbGxlZCBmcm9tIGBjcHVfaWRsZV93cml0ZV9zNjRgLCB3aGljaCBpbiB0dXJuIGlzIHRoZSBoYW5kbGVyIGZvciB0aGUgYGNwdS5pZGxlYCBjZ3JvdXAgZmlsZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGZ1bmN0aW9ucyBsaWtlIGBzY3hfdGdfb25saW5lYCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAgYXMgdGhlIG1haW4gZm9jdXMuXG5cbkhvd2V2ZXIsIGBzY3hfY2dyb3VwX2luaXRgIGlzIHN0YXRpYyBidXQgY2FsbGVkIGZyb20gYHNjeF9yb290X2VuYWJsZV93b3JrZm5gLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIEJQRiBzY2hlZHVsZXIgaXMgbG9hZGVkLiBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCBpcyBhbHNvIHN0YXRpYywgY2FsbGVkIGZyb20gYHNjeF9zdWJfZW5hYmxlX3dvcmtmbmAuIFRoaXMgbWFrZXMgbWUgdGhpbmsgdGhhdCBgc2N4X3RnX29ubGluZWAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGFyZSBzdGlsbCB0aGUgYmVzdCBjYW5kaWRhdGVzIGR1ZSB0byB0aGVpciBkaXJlY3QgY29ubmVjdGlvbiB0byB0aGUgY2dyb3VwIG9wZXJhdGlvbnMuIFdoaWxlIHRoZSBgc2N4X3N1Yl9lbmFibGVfd29ya2ZuYCBhbmQgYHNjeF9yb290X2VuYWJsZV93b3JrZm5gIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgaW4gc2NoZWRfZXh0LCB0aGV5IHNlZW0gbW9yZSBnZW5lcmljLlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gSSBkZWZpbml0ZWx5IG5lZWQgYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBZZXAsIGBFWFRfR1JPVVBfU0NIRURgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiBib3RoIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCBhcmUgb24uXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0IHNlZW1zIHRoYXQgdGhlIGBzY2hlZF9pZGxlYCBzdGF0ZSBpcyBub3cgZXhwb3NlZCB0byB0aGUgQlBGIHNjaGVkdWxlciBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbXVsdGlwbGUgcGxhY2VzOiBgc2N4X2dyb3VwX3NldF9pZGxlYCwgYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIFRoaXMgbWFrZXMgdGhlIHN0YXRlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIGNncm91cCBvcGVyYXRpb25zIGFuZCBCUEYgc2NoZWRfZXh0IHByb2dyYW1zLiBUaGF0IHNlZW1zIHByZXR0eSBmdW5jdGlvbmFsLlxuXG5Pa2F5LCB0aGlzIGxvb2tzIHNvbGlkLiBJIGFtIHRoaW5raW5nIHRoYXQgdGhpcyBjb2RlIHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLlxuKiAgIGBXb3J0aEZ1enppbmdgIGlzIHRydWUuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBzY3hfdGdfb25saW5lYCwgYHNjeF9ncm91cF9zZXRfaWRsZWAuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgU0NIRURfQ0xBU1NfRVhUYCwgYENHUk9VUF9TQ0hFRGAuXG5cbkknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjE1LCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6NTMuMjA5OTcxNDQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5MTM1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICAgIFwiQ0dST1VQX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N4X3RnX29ubGluZVwiLFxuICAgIFwic2N4X2dyb3VwX3NldF9pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0gdG8gcGFzcyB0aGUgYHNjaGVkX2lkbGVgIHN0YXRlIG9mIGEgY2dyb3VwIHRvIHRoZSBCUEYgc2NoZWR1bGVyIGR1cmluZyBjZ3JvdXAgaW5pdGlhbGl6YXRpb24gKGBvcHMuY2dyb3VwX2luaXQoKWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBkYXRhIHRvIEJQRiBwcm9ncmFtcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY3JlYXRpb24gYW5kIGBjcHUuaWRsZWAgbW9kaWZpY2F0aW9uIHdoaWxlIGEgc2NoZWRfZXh0IHNjaGVkdWxlciBpcyBhY3RpdmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfdGdfb25saW5lXCIsXG4gICAgXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2NoZWRfZXh0IHN1YnN5c3RlbSB0byBwYXNzIHRoZSBgc2NoZWRfaWRsZWAgc3RhdGUgb2YgYSBjZ3JvdXAgdG8gdGhlIEJQRiBzY2hlZHVsZXIgZHVyaW5nIGNncm91cCBpbml0aWFsaXphdGlvbiAoYG9wcy5jZ3JvdXBfaW5pdCgpYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IGRhdGEgdG8gQlBGIHByb2dyYW1zIGFuZCBpcyByZWFjaGFibGUgdmlhIGNncm91cCBjcmVhdGlvbiBhbmQgYGNwdS5pZGxlYCBtb2RpZmljYXRpb24gd2hpbGUgYSBzY2hlZF9leHQgc2NoZWR1bGVyIGlzIGFjdGl2ZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6NTMuMjgwODkzMDMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM2MjE1OTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjUzLjI4MTgwNTc1MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzM2MTI0Mjg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVuYW1lcyBgaWRsZWAgdG8gYHNjaGVkX2lkbGVgIGluIGBzdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXBgIGFuZCBhZGRzIGBzY2hlZF9pZGxlYCB0byBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gSXQgaW5pdGlhbGl6ZXMgdGhpcyBuZXcgZmllbGQgaW4gc2V2ZXJhbCBwbGFjZXMgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGUuZy4sIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9IHsgLi4uIH1gKS4gSW4gQywgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgemVybyBvdXQgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCBwYWRkaW5nIGJ5dGVzLiBGdXJ0aGVybW9yZSwgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AgaXMgcGFzc2VkIHRvIGEgQlBGIHByb2dyYW0gKGtlcm5lbCBzcGFjZSksIG5vdCBkaXJlY3RseSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNjczZGQ0N2RlMjc4YWYzZWZiZWM0OWM3Y2JjODQyZDA0N2Q3MzAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaFxuaW5kZXggNTgyZDdjZDRhOTgzOS4uN2I5Y2RiNjVkZWVmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcbkBAIC0zMjMsNyArMzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHtcbiBcdHU2NFx0XHRcdGJ3X3BlcmlvZF91cztcbiBcdHU2NFx0XHRcdGJ3X3F1b3RhX3VzO1xuIFx0dTY0XHRcdFx0YndfYnVyc3RfdXM7XG4tXHRib29sXHRcdFx0aWRsZTtcbitcdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xuICNlbmRpZlxuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbmluZGV4IGM1MzlkMTVjZGE2MzcuLjRhOWMzODI5NzA5MzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5AQCAtNDY4Miw3ICs0NjgyLDcgQEAgdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG4gXHR0Zy1cdTAwM2VzY3gud2VpZ2h0ID0gQ0dST1VQX1dFSUdIVF9ERkw7XG4gXHR0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzID0gZGVmYXVsdF9id19wZXJpb2RfdXMoKTtcbiBcdHRnLVx1MDAzZXNjeC5id19xdW90YV91cyA9IFJVTlRJTUVfSU5GO1xuLVx0dGctXHUwMDNlc2N4LmlkbGUgPSBmYWxzZTtcbitcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gZmFsc2U7XG4gfVxuIFxuIC8qKlxuQEAgLTQ3NjQsNyArNDc2NCw4IEBAIGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcbiBcdFx0XHRcdHsgLndlaWdodCA9IHRnLVx1MDAzZXNjeC53ZWlnaHQsXG4gXHRcdFx0XHQgIC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdFx0ICAuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4tXHRcdFx0XHQgIC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyB9O1xuK1x0XHRcdFx0ICAuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMsXG4rXHRcdFx0XHQgIC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcbiBcbiBcdFx0XHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcbiBcdFx0XHRcdFx0ICAgICAgTlVMTCwgdGctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YXJncyk7XG5AQCAtNDkzNCw3ICs0OTM1LDcgQEAgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXG4gXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXG4tXHR0Zy1cdTAwM2VzY3guaWRsZSA9IGlkbGU7XG4rXHR0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XG4gXG4gXHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG4gfVxuQEAgLTUxODUsNiArNTE4Niw3IEBAIHN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHRcdC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdFx0LmJ3X3F1b3RhX3VzID0gdGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxuIFx0XHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuK1x0XHRcdFx0LnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSxcbiBcdFx0XHR9O1xuIFxuIFx0XHRcdHJldCA9IFNDWF9DQUxMX09QX1JFVChzY2gsIGNncm91cF9pbml0LCBOVUxMLCBjc3MtXHUwMDNlY2dyb3VwLCBcdTAwMjZhcmdzKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuQEAgLTI1OSw2ICsyNTksOSBAQCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuIFx0dTY0XHRcdFx0YndfcGVyaW9kX3VzO1xuIFx0dTY0XHRcdFx0YndfcXVvdGFfdXM7XG4gXHR1NjRcdFx0XHRid19idXJzdF91cztcbitcbitcdC8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovXG4rXHRib29sXHRcdFx0c2NoZWRfaWRsZTtcbiB9O1xuIFxuIGVudW0gc2N4X2NwdV9wcmVlbXB0X3JlYXNvbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9zdWIuYyBiL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcbmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG5AQCAtMTM2MSw2ICsxMzYxLDcgQEAgc3RhdGljIHMzMiBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuIFx0XHRcdC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdC5id19xdW90YV91cyA9IHRnLVx1MDAzZXNjeC5id19xdW90YV91cyxcbiBcdFx0XHQuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMsXG4rXHRcdFx0LnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSxcbiBcdFx0fTtcbiBcbiBcdFx0aWYgKHRnLVx1MDAzZXNjeC5zY2hlZCAhPSBwYXJlbnQgfHxcbkBAIC0xNDY0LDYgKzE0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHQuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4gXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuK1x0XHRcdC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUsXG4gXHRcdH07XG4gXG4gXHRcdC8qIHRoZSBmaXJzdCBwYXNzIG11c3QgaGF2ZSB0cmFuc2ZlcnJlZCBldmVyeXRoaW5nICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDo1My4yODE4MjU3NzFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMzNjEyMDQ3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBzY2hlZF9pZGxlIEludHJvZHVjdGlvbiBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBgaWRsZWAgdG8gYHNjaGVkX2lkbGVgIHdpdGhpbiB0aGUgYHNjeF90YXNrX2dyb3VwYCBzdHJ1Y3R1cmUuIE1vcmUgaW1wb3J0YW50bHksIGl0J3MgYWRkaW5nIGBzY2hlZF9pZGxlYCB0byBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYXJlIHdlIG9wZW5pbmcgb3Vyc2VsdmVzIHVwIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBoZXJlP1wiXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHBhZGRpbmcgZXhpc3RzIHdpdGhpbiBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCwgYW5kIHdoZXRoZXIgdGhpcyBzdHJ1Y3QgaXMgc29tZWhvdyBleHBvc2VkIHRvIEJQRiBvciwgd29yc2UsIHRvIHVzZXItc3BhY2UuIExldCdzIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBSaWdodCwgYHdlaWdodGAgKHUzMiksIHRoZW4gYGJ3X3BlcmlvZF91c2AgKHU2NCksIHNvIHRoZXJlJ3MgYSA0LWJ5dGUgcGFkZGluZyBhZnRlciBgd2VpZ2h0YC4gQWZ0ZXIgYGJ3X3BlcmlvZF91c2AsIGBid19xdW90YV91c2AsIGFuZCBgYndfYnVyc3RfdXNgIChhbGwgdTY0cyksIHdlIGhhdmUgYGJvb2wgc2NoZWRfaWRsZWAgd2hpY2ggaXMgMSBieXRlLCBzbyB0aGVyZSdzIDcgYnl0ZXMgb2YgcGFkZGluZyBhdCB0aGUgZW5kIG9mIHRoaXMgc3RydWN0dXJlLlxuXG5Ob3csIGhvdyBpcyBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCB1c2VkPyBBaCwgaXQncyBwYXNzZWQgdG8gYGNncm91cF9pbml0YCBCUEYgb3BlcmF0aW9uLiBTaW5jZSBgYXJnc2AgaXMgYmVpbmcgcGFzc2VkIHRvIEJQRiwgd2hpY2ggcnVucyBpbiBrZXJuZWwgc3BhY2UsIGl0IGNhbiBwb3RlbnRpYWxseSByZWFkIHRob3NlIHBhZGRpbmcgYnl0ZXMuIEJ1dCB3YWl0LCBCUEYgcnVucyBpbiBrZXJuZWwsIHNvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCAqc2hvdWxkbid0KiBjYXVzZSBhIHVzZXItc3BhY2UgaW5mb3JtYXRpb24gbGVhaywgaXQncyBqdXN0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgd2hpY2ggS01TQU4gc2hvdWxkIGRldGVjdC4gSG93ZXZlciwgaWYgYSBCUEYgcHJvZ3JhbSByZWFkcyBwYWRkaW5nIGJ5dGVzLCBpdCB3b3VsZCBiZSBhbiBpc3N1ZSBiZWNhdXNlIHRoZSBCUEYgdmVyaWZpZXIgd291bGRuJ3Qga25vdyBhYm91dCB0aGUgcGFkZGluZyB1bmxlc3MgaXQncyBleHBsaWNpdGx5IGRlZmluZWQuXG5cbkkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYGFyZ3NgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBsZXQncyBsb29rIGF0IHRoZSB1c2FnZTogaXQncyBpbml0aWFsaXplZCB1c2luZyBhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIuIFRoaXMgbWVhbnMgdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHBhZGRpbmcgYnl0ZXMgYXJlIHplcm9lZCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuIEJ1dCwgaXMgdGhhdCBndWFyYW50ZWVkPyBJJ20gc3VyZSBpdCdzIHplcm9lZCwgYnV0IEknbGwgY2hlY2sgdGhlIEMgc3RhbmRhcmQgYW5kIG1ha2Ugc3VyZS4gT2theSwgQzk5IDYuNy44IEluaXRpYWxpemF0aW9uIHNheXMgdGhhdCBpZiB0aGVyZSBhcmUgZmV3ZXIgaW5pdGlhbGl6ZXJzIHRoYW4gdGhlcmUgYXJlIG1lbWJlcnMsIHRoZSByZW1haW5kZXIgaXMgaW5pdGlhbGl6ZWQgbGlrZSBzdGF0aWMgc3RvcmFnZSwgYW5kIHdpdGggc3RhdGljIHN0b3JhZ2UsIFwiYW55IHBhZGRpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBieXRlcy5cIlxuXG5TbywgZXZlbiBpZiB0aGlzIHBhdGNoICpkaWQqIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgdXNlIG9mIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIGhlcmUgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBwYWRkaW5nIGlzIHplcm9lZC4gTGV0J3MgcmUtZXhhbWluZSB0aGUgcGF0Y2guIFRoZSBwYXRjaCAqYWRkcyogYHNjaGVkX2lkbGVgIHRvIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLCBzbyBpdCBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciBhdXRvbWF0aWNhbGx5LiBCdXQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgZ28gdGhyb3VnaCBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBBbGwgaW5zdGFuY2VzIHVzZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycy5cblxuTm8sIHRoZSBzdHJ1Y3R1cmUgaXMgKmZ1bGx5KiBpbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIHNpbmNlIGBhcmdzYCBpcyB1c2VkIG9ubHkgd2l0aGluIGtlcm5lbCBzcGFjZSwgYW55IHJlYWQgd2l0aGluIHRoYXQgc3BhY2Ugd291bGRuJ3QgYmUgYW4gaXNzdWUuIFRoZXJlIGlzIG5vIEtNU0FOIHNwZWNpZmljIGJ1ZyBoZXJlLiBLQVNBTiB3b3VsZG4ndCBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFueXdheS4gVGhpcyBwYXRjaCBpcyBzYWZlLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvcHktdG8tdXNlciBzaXR1YXRpb24sIHRob3VnaC4gQlBGIHByb2dyYW1zIGFyZSBrZXJuZWwtc3BhY2UuIFRoZXkgY2FuICpyZWFkKiB0aGlzIHN0cnVjdCwgYnV0IGl0J3Mgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2VyLXNwYWNlLiBTbywgbm8gaW5mb3JtYXRpb24gbGVhayBwb3NzaWJsZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGEgZnVsbHkgaW5pdGlhbGl6ZWQgZmllbGQgdG8gYSBzdHJ1Y3QgYW5kIHBhc3NpbmcgaXQgdG8gQlBGLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gSSdsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4OSwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzU6MTYuNjQzMDMyOTQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW5hbWVzIGBpZGxlYCB0byBgc2NoZWRfaWRsZWAgaW4gYHN0cnVjdCBzY3hfdGFza19ncm91cGAgYW5kIGFkZHMgYHNjaGVkX2lkbGVgIHRvIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLiBJdCBpbml0aWFsaXplcyB0aGlzIG5ldyBmaWVsZCBpbiBzZXZlcmFsIHBsYWNlcyB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoZS5nLiwgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyBhcmdzID0geyAuLi4gfWApLiBJbiBDLCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB6ZXJvIG91dCBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHBhZGRpbmcgYnl0ZXMuIEZ1cnRoZXJtb3JlLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCBpcyBwYXNzZWQgdG8gYSBCUEYgcHJvZ3JhbSAoa2VybmVsIHNwYWNlKSwgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbmFtZXMgYGlkbGVgIHRvIGBzY2hlZF9pZGxlYCBpbiBgc3RydWN0IHNjeF90YXNrX2dyb3VwYCBhbmQgYWRkcyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIEl0IGluaXRpYWxpemVzIHRoaXMgbmV3IGZpZWxkIGluIHNldmVyYWwgcGxhY2VzIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChlLmcuLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7IC4uLiB9YCkuIEluIEMsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIHplcm8gb3V0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcy4gRnVydGhlcm1vcmUsIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGlzIHBhc3NlZCB0byBhIEJQRiBwcm9ncmFtIChrZXJuZWwgc3BhY2UpLCBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow695xf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 02:48:33 +0000 UTC FinishedAt: 2026-08-25 03:35:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4b18edbd8e70f7e6860d56370f13244896d0f95c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4b18edbd8e70f7e6860d56370f13244896d0f95c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SCHED_CLASS_EXT", "CGROUP_SCHED" ], "series_id": "7c58d5e9-d489-4e2c-94d2-475a59759e24" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "scx_tg_online", "scx_group_set_idle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3hfdGdfb25saW5lJiMzNDssCiAgICAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbmFtZXMgYGlkbGVgIHRvIGBzY2hlZF9pZGxlYCBpbiBgc3RydWN0IHNjeF90YXNrX2dyb3VwYCBhbmQgYWRkcyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIEl0IGluaXRpYWxpemVzIHRoaXMgbmV3IGZpZWxkIGluIHNldmVyYWwgcGxhY2VzIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChlLmcuLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7IC4uLiB9YCkuIEluIEMsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIHplcm8gb3V0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcy4gRnVydGhlcm1vcmUsIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGlzIHBhc3NlZCB0byBhIEJQRiBwcm9ncmFtIChrZXJuZWwgc3BhY2UpLCBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtIHRvIHBhc3MgdGhlIGBzY2hlZF9pZGxlYCBzdGF0ZSBvZiBhIGNncm91cCB0byB0aGUgQlBGIHNjaGVkdWxlciBkdXJpbmcgY2dyb3VwIGluaXRpYWxpemF0aW9uIChgb3BzLmNncm91cF9pbml0KClgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgZGF0YSB0byBCUEYgcHJvZ3JhbXMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNyZWF0aW9uIGFuZCBgY3B1LmlkbGVgIG1vZGlmaWNhdGlvbiB3aGlsZSBhIHNjaGVkX2V4dCBzY2hlZHVsZXIgaXMgYWN0aXZlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzY3M2RkNDdkZTI3OGFmM2VmYmVjNDljN2NiYzg0MmQwNDdkNzMwMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDAzOjMzOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oXG5pbmRleCA1ODJkN2NkNGE5ODM5Li43YjljZGI2NWRlZWY2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaFxuQEAgLTMyMyw3ICYjNDM7MzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHtcbiBcdHU2NFx0XHRcdGJ3X3BlcmlvZF91cztcbiBcdHU2NFx0XHRcdGJ3X3F1b3RhX3VzO1xuIFx0dTY0XHRcdFx0YndfYnVyc3RfdXM7XG4tXHRib29sXHRcdFx0aWRsZTtcbiYjNDM7XHRib29sXHRcdFx0c2NoZWRfaWRsZTtcbiAjZW5kaWZcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5pbmRleCBjNTM5ZDE1Y2RhNjM3Li40YTljMzgyOTcwOTM1IDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xuQEAgLTQ2ODIsNyAmIzQzOzQ2ODIsNyBAQCB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcbiBcdHRnLVx1MDAzZXNjeC53ZWlnaHQgPSBDR1JPVVBfV0VJR0hUX0RGTDtcbiBcdHRnLVx1MDAzZXNjeC5id19wZXJpb2RfdXMgPSBkZWZhdWx0X2J3X3BlcmlvZF91cygpO1xuIFx0dGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7XG4tXHR0Zy1cdTAwM2VzY3guaWRsZSA9IGZhbHNlO1xuJiM0MztcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gZmFsc2U7XG4gfVxuIFxuIC8qKlxuQEAgLTQ3NjQsNyAmIzQzOzQ3NjQsOCBAQCBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG4gXHRcdFx0XHR7IC53ZWlnaHQgPSB0Zy1cdTAwM2VzY3gud2VpZ2h0LFxuIFx0XHRcdFx0ICAuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHRcdCAgLmJ3X3F1b3RhX3VzID0gdGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxuLVx0XHRcdFx0ICAuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMgfTtcbiYjNDM7XHRcdFx0XHQgIC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbiYjNDM7XHRcdFx0XHQgIC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcbiBcbiBcdFx0XHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcbiBcdFx0XHRcdFx0ICAgICAgTlVMTCwgdGctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YXJncyk7XG5AQCAtNDkzNCw3ICYjNDM7NDkzNSw3IEBAIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxuIFx0XHRTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi9cbi1cdHRnLVx1MDAzZXNjeC5pZGxlID0gaWRsZTtcbiYjNDM7XHR0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XG4gXG4gXHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG4gfVxuQEAgLTUxODUsNiAmIzQzOzUxODYsNyBAQCBzdGF0aWMgaW50IHNjeF9jZ3JvdXBfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4gXHRcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHRcdC5id19xdW90YV91cyA9IHRnLVx1MDAzZXNjeC5id19xdW90YV91cyxcbiBcdFx0XHRcdC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyxcbiYjNDM7XHRcdFx0XHQuc2NoZWRfaWRsZSA9IHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlLFxuIFx0XHRcdH07XG4gXG4gXHRcdFx0cmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy1cdTAwM2VjZ3JvdXAsIFx1MDAyNmFyZ3MpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaCBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuaW5kZXggNTNlMTM2YTQ3OTI0ZC4uYzY5ODdhM2EwNzNiZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXG5AQCAtMjU5LDYgJiM0MzsyNTksOSBAQCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuIFx0dTY0XHRcdFx0YndfcGVyaW9kX3VzO1xuIFx0dTY0XHRcdFx0YndfcXVvdGFfdXM7XG4gXHR1NjRcdFx0XHRid19idXJzdF91cztcbiYjNDM7XG4mIzQzO1x0Lyogd2hldGhlciB0aGUgY2dyb3VwIGlzIGNvbmZpZ3VyZWQgU0NIRURfSURMRSB2aWEgY3B1LmlkbGUgKi9cbiYjNDM7XHRib29sXHRcdFx0c2NoZWRfaWRsZTtcbiB9O1xuIFxuIGVudW0gc2N4X2NwdV9wcmVlbXB0X3JlYXNvbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9zdWIuYyBiL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcbmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG5AQCAtMTM2MSw2ICYjNDM7MTM2MSw3IEBAIHN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHQuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4gXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuJiM0MztcdFx0XHQuc2NoZWRfaWRsZSA9IHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlLFxuIFx0XHR9O1xuIFxuIFx0XHRpZiAodGctXHUwMDNlc2N4LnNjaGVkICE9IHBhcmVudCB8fFxuQEAgLTE0NjQsNiAmIzQzOzE0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHQuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4gXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuJiM0MztcdFx0XHQuc2NoZWRfaWRsZSA9IHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlLFxuIFx0XHR9O1xuIFxuIFx0XHQvKiB0aGUgZmlyc3QgcGFzcyBtdXN0IGhhdmUgdHJhbnNmZXJyZWQgZXZlcnl0aGluZyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X3RnX29ubGluZSYjMzQ7LAogICAgJiMzNDtzY3hfZ3JvdXBfc2V0X2lkbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0gdG8gcGFzcyB0aGUgYHNjaGVkX2lkbGVgIHN0YXRlIG9mIGEgY2dyb3VwIHRvIHRoZSBCUEYgc2NoZWR1bGVyIGR1cmluZyBjZ3JvdXAgaW5pdGlhbGl6YXRpb24gKGBvcHMuY2dyb3VwX2luaXQoKWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBkYXRhIHRvIEJQRiBwcm9ncmFtcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY3JlYXRpb24gYW5kIGBjcHUuaWRsZWAgbW9kaWZpY2F0aW9uIHdoaWxlIGEgc2NoZWRfZXh0IHNjaGVkdWxlciBpcyBhY3RpdmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNjczZGQ0N2RlMjc4YWYzZWZiZWM0OWM3Y2JjODQyZDA0N2Q3MzAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaAppbmRleCA1ODJkN2NkNGE5ODM5Li43YjljZGI2NWRlZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgKQEAgLTMyMyw3ICYjNDM7MzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHsKIAl1NjQJCQlid19wZXJpb2RfdXM7CiAJdTY0CQkJYndfcXVvdGFfdXM7CiAJdTY0CQkJYndfYnVyc3RfdXM7Ci0JYm9vbAkJCWlkbGU7CiYjNDM7CWJvb2wJCQlzY2hlZF9pZGxlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuYwppbmRleCBjNTM5ZDE1Y2RhNjM3Li40YTljMzgyOTcwOTM1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKQEAgLTQ2ODIsNyAmIzQzOzQ2ODIsNyBAQCB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKIAl0Zy0mZ3Q7c2N4LndlaWdodCA9IENHUk9VUF9XRUlHSFRfREZMOwogCXRnLSZndDtzY3guYndfcGVyaW9kX3VzID0gZGVmYXVsdF9id19wZXJpb2RfdXMoKTsKIAl0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7Ci0JdGctJmd0O3NjeC5pZGxlID0gZmFsc2U7CiYjNDM7CXRnLSZndDtzY3guc2NoZWRfaWRsZSA9IGZhbHNlOwogfQogCiAvKioKQEAgLTQ3NjQsNyAmIzQzOzQ3NjQsOCBAQCBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiAJCQkJeyAud2VpZ2h0ID0gdGctJmd0O3NjeC53ZWlnaHQsCiAJCQkJICAuYndfcGVyaW9kX3VzID0gdGctJmd0O3NjeC5id19wZXJpb2RfdXMsCiAJCQkJICAuYndfcXVvdGFfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzLAotCQkJCSAgLmJ3X2J1cnN0X3VzID0gdGctJmd0O3NjeC5id19idXJzdF91cyB9OwomIzQzOwkJCQkgIC5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJCSAgLnNjaGVkX2lkbGUgPSB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgfTsKIAogCQkJcmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsCiAJCQkJCSAgICAgIE5VTEwsIHRnLSZndDtjc3MuY2dyb3VwLCAmYW1wO2FyZ3MpOwpAQCAtNDkzNCw3ICYjNDM7NDkzNSw3IEBAIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKQogCQlTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpOwogCiAJLyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi8KLQl0Zy0mZ3Q7c2N4LmlkbGUgPSBpZGxlOwomIzQzOwl0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgPSBpZGxlOwogCiAJcGVyY3B1X3VwX3JlYWQoJmFtcDtzY3hfY2dyb3VwX29wc19yd3NlbSk7CiB9CkBAIC01MTg1LDYgJiM0Mzs1MTg2LDcgQEAgc3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQkJCS5id19wZXJpb2RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3BlcmlvZF91cywKIAkJCQkuYndfcXVvdGFfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzLAogCQkJCS5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJCS5zY2hlZF9pZGxlID0gdGctJmd0O3NjeC5zY2hlZF9pZGxlLAogCQkJfTsKIAogCQkJcmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy0mZ3Q7Y2dyb3VwLCAmYW1wO2FyZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oCmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgKQEAgLTI1OSw2ICYjNDM7MjU5LDkgQEAgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHsKIAl1NjQJCQlid19wZXJpb2RfdXM7CiAJdTY0CQkJYndfcXVvdGFfdXM7CiAJdTY0CQkJYndfYnVyc3RfdXM7CiYjNDM7CiYjNDM7CS8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovCiYjNDM7CWJvb2wJCQlzY2hlZF9pZGxlOwogfTsKIAogZW51bSBzY3hfY3B1X3ByZWVtcHRfcmVhc29uIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmMgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jCmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9zdWIuYwpAQCAtMTM2MSw2ICYjNDM7MTM2MSw3IEBAIHN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkKIAkJCS5id19wZXJpb2RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3BlcmlvZF91cywKIAkJCS5id19xdW90YV91cyA9IHRnLSZndDtzY3guYndfcXVvdGFfdXMsCiAJCQkuYndfYnVyc3RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X2J1cnN0X3VzLAomIzQzOwkJCS5zY2hlZF9pZGxlID0gdGctJmd0O3NjeC5zY2hlZF9pZGxlLAogCQl9OwogCiAJCWlmICh0Zy0mZ3Q7c2N4LnNjaGVkICE9IHBhcmVudCB8fApAQCAtMTQ2NCw2ICYjNDM7MTQ2NSw3IEBAIHN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQkJLmJ3X3BlcmlvZF91cyA9IHRnLSZndDtzY3guYndfcGVyaW9kX3VzLAogCQkJLmJ3X3F1b3RhX3VzID0gdGctJmd0O3NjeC5id19xdW90YV91cywKIAkJCS5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJLnNjaGVkX2lkbGUgPSB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUsCiAJCX07CiAKIAkJLyogdGhlIGZpcnN0IHBhc3MgbXVzdCBoYXZlIHRyYW5zZmVycmVkIGV2ZXJ5dGhpbmcgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzY2hlZF9leHRgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0JiMzOTtzIGNsZWFuaW5nIHVwIHRoZSBgaWRsZWAgbmFtaW5nIGluIGBzY3hfdGFza19ncm91cGAgYnkgcmVuYW1pbmcgaXQgdG8gYHNjaGVkX2lkbGVgLiYjMzQ7IFRoaXMgYWxzbyBpbmNsdWRlcyBhZGRpbmcgdGhlIGBzY2hlZF9pZGxlYCBmaWVsZCB0byBgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGluIGBrZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhgLiBJIHNlZSBpdCYjMzk7cyBwcm9wYWdhdGluZyB0aGlzIG5ldyBmaWVsZCB0aHJvdWdoIGBzY3hfdGdfb25saW5lYCwgYHNjeF9jZ3JvdXBfaW5pdGAsIGBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWVgLCBhbmQgYHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWVgLiBUaGUga2V5IGhlcmUgaXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlOiBwYXNzaW5nIHRoaXMgYHNjaGVkX2lkbGVgIGZsYWcgZG93biB0byB0aGUgQlBGIHNjaGVkdWxlciB2aWEgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AgZHVyaW5nIHRoZSBgY2dyb3VwX2luaXRgIEJQRiBvcGVyYXRpb24uCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGRlZmluaXRpb24uIFllcCwgYGtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaGAgY29uZmlybXMgaXQ6CmBgYGMKc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHsKCXUzMgkJCXdlaWdodDsKCXU2NAkJCWJ3X3BlcmlvZF91czsKCXU2NAkJCWJ3X3F1b3RhX3VzOwoJdTY0CQkJYndfYnVyc3RfdXM7CgoJLyogd2hldGhlciB0aGUgY2dyb3VwIGlzIGNvbmZpZ3VyZWQgU0NIRURfSURMRSB2aWEgY3B1LmlkbGUgKi8KCWJvb2wJCQlzY2hlZF9pZGxlOwp9OwpgYGAKWXVwLCBpdCYjMzk7cyBnb3QgdGhlIGBzY2hlZF9pZGxlYCBib29sZWFuIEkgZXhwZWN0ZWQsIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2dyb3VwIGlzIFNDSEVEX0lETEUuCgpUaGlzIGlzIGFsbCB3aXRoaW4gdGhlIGBzY2hlZF9leHRgIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgZXh0LmNgIGFuZCBgc3ViLmNgLiBUaGUgcGF0Y2ggdG91Y2hlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogYHNjeF90Z19pbml0YCwgYHNjeF90Z19vbmxpbmVgLCBgc2N4X2dyb3VwX3NldF9pZGxlYCwgYHNjeF9jZ3JvdXBfaW5pdGAsIGBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWVgLCBhbmQgYHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWVgLiBPa2F5LCBJJiMzOTttIHN0YXJ0aW5nIHRvIGdldCB0aGUgcGljdHVyZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gQWRkaW5nIGEgbmV3IGZpZWxkIHRvIGBzY3hfY2dyb3VwX2luaXRfYXJnc2AsIGFuZCBjcml0aWNhbGx5LCBleHBvc2luZyBpdCB0byBCUEYgcHJvZ3JhbXMgdGhyb3VnaCB0aGUgYGNncm91cF9pbml0YCBvcGVyYXRpb24sIGlzIGEgY2xlYXIgaW5kaWNhdGlvbiB0aGF0IHRoaXMgaW50cm9kdWNlcyBhIG5ldyBhdHRhY2sgc3VyZmFjZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoLi4uCgpIb2xkIG9uLCBJIG5lZWQgdG8gY29uZmlybTogRG9lcyBpdCAqYWN0dWFsbHkqIGV4cG9zZSBpdCB0byBCUEY/IFllcywgdGhlIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgICppcyogcGFzc2VkIHRvIHRoZSBgY2dyb3VwX2luaXRgIEJQRiBvcGVyYXRpb24sIHNvIGl0IGxvb2tzIGxpa2UgaXQgaXMuIAoKT2theSwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgc3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCB0aGUgcmlnaHQgdGhpbmcsIHdoYXQgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgc2NoZWRfZXh0YD8gSXMgaXQgYFNDSEVEX0NMQVNTX0VYVGAgb3IgYFNDSEVEX0VYVGA/IFRpbWUgZm9yIGEgcXVpY2sgZ3JlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNjaGVkdWxlciYjMzk7cyBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhlIHNjaGVkdWxlciBidWlsZCBwcm9jZXNzLiBUaGUgbG9naWNhbCBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBga2VybmVsL3NjaGVkL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzY2hlZHVsZXIgY29tcG9uZW50cyBsaWtlbHkgcmVzaWRlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgR05VIE1ha2VmaWxlIHN0cnVjdHVyZSwgcHJvYmFibHkgd2l0aCB0YXJnZXRzIGZvciBvYmplY3QgZmlsZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZSBjb3JlIHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBhcmUgY29tcGlsZWQsIGFueSBjdXN0b20gbGlua2VyIGZsYWdzIHRoYXQgbWlnaHQgYmUgYXBwbGllZCwgYW5kIGhvdyB0aGUgc2NoZWR1bGVyJiMzOTtzIHZhcmlvdXMgbW9kdWxlcyAoaWYgdGhleSBleGlzdCkgYXJlIGhhbmRsZWQuIFBlcmhhcHMgdGhlcmUgYXJlIGNvbmRpdGlvbmFsIGluY2x1c2lvbnMgYmFzZWQgb24gYENPTkZJR19gIG9wdGlvbnMsIGFuZCBJIHdpbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGUgbWFrZWZpbGUgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwga2VybmVsIGJ1aWxkIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0Q09OVEVYVF9BTkFMWVNJU19jb3JlLm8gOj0geVxuICAgNDpcdENPTlRFWFRfQU5BTFlTSVNfZmFpci5vIDo9IHlcbiAgIDU6XHRcbiAgIDY6XHQjIFRoZSBjb21waWxlcnMgYXJlIGNvbXBsYWluaW5nIGFib3V0IHVudXNlZCB2YXJpYWJsZXMgaW5zaWRlIGFuIGlmKDApIHNjb3BlXG4gICA3Olx0IyBibG9jay4gVGhpcyBpcyBkYWZ0LCBzaHV0IHRoZW0gdXAuXG4gICA4Olx0Y2NmbGFncy15ICYjNDM7PSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaW5nLCB1bnVzZWQtYnV0LXNldC12YXJpYWJsZSlcbiAgIDk6XHRcbiAgMTA6XHQjIFRoZXNlIGZpbGVzIGFyZSBkaXNhYmxlZCBiZWNhdXNlIHRoZXkgcHJvZHVjZSBub24taW50ZXJlc3RpbmcgZmxha3kgY292ZXJhZ2VcbiAgMTE6XHQjIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb2Ygc3lzY2FsbCBpbnB1dHMuIEUuZy4gaW52b2x1bnRhcnkgY29udGV4dCBzd2l0Y2hlcy5cbiAgMTI6XHRLQ09WX0lOU1RSVU1FTlQgOj0gblxuICAxMzpcdFxuICAxNDpcdCMgRGlzYWJsZSBLQ1NBTiB0byBhdm9pZCBleGNlc3NpdmUgbm9pc2UgYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLiBUbyBhdm9pZFxuICAxNTpcdCMgZmFsc2UgcG9zaXRpdmVzIGVuc3VyZSBiYXJyaWVycyBpbXBsaWVkIGJ5IHNjaGVkIGZ1bmN0aW9ucyBhcmUgaW5zdHJ1bWVudGVkLlxuICAxNjpcdEtDU0FOX1NBTklUSVpFIDo9IG5cbiAgMTc6XHRLQ1NBTl9JTlNUUlVNRU5UX0JBUlJJRVJTIDo9IHlcbiAgMTg6XHRcbiAgMTk6XHRpZm5lcSAoJChDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSKSx5KVxuICAyMDpcdCMgQWNjb3JkaW5nIHRvIEFsYW4gTW9kcmEgXHUwMDNjYWxhbkBsaW51eGNhcmUuY29tLmF1XHUwMDNlLCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXNcbiAgMjE6XHQjIG5lZWRlZCBmb3IgeDg2IG9ubHkuICBXaHkgdGhpcyB1c2VkIHRvIGJlIGVuYWJsZWQgZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGlzIGJleW9uZFxuICAyMjpcdCMgbWUuICBJIHN1c3BlY3QgbW9zdCBwbGF0Zm9ybXMgZG9uJiMzOTt0IG5lZWQgdGhpcywgYnV0IHVudGlsIHdlIGtub3cgdGhhdCBmb3Igc3VyZVxuICAyMzpcdCMgSSB0dXJuIHRoaXMgb2ZmIGZvciBJQS02NCBvbmx5LiAgQW5kcmVhcyBTY2h3YWIgc2F5cyBpdCYjMzk7cyBhbHNvIG5lZWRlZCBvbiBtNjhrXG4gIDI0Olx0IyB0byBnZXQgYSBjb3JyZWN0IHZhbHVlIGZvciB0aGUgd2FpdC1jaGFubmVsIChXQ0hBTiBpbiBwcykuIC0tZGF2aWRtXG4gIDI1Olx0Q0ZMQUdTX2NvcmUubyA6PSAkKFBST0ZJTElORykgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXJcbiAgMjY6XHRlbmRpZlxuICAyNzpcdFxuICAyODpcdCMgQnJhbmNoIHByb2ZpbGluZyBpc24mIzM5O3Qgbm9pbnN0ci1zYWZlXG4gIDI5Olx0aWZkZWYgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkdcbiAgMzA6XHRDRkxBR1NfYnVpbGRfcG9saWN5Lm8gJiM0Mzs9IC1ERElTQUJMRV9CUkFOQ0hfUFJPRklMSU5HXG4gIDMxOlx0Q0ZMQUdTX2J1aWxkX3V0aWxpdHkubyAmIzQzOz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcbiAgMzI6XHRlbmRpZlxuICAzMzpcdCNcbiAgMzQ6XHQjIEJ1aWxkIGVmZmljaWVuY3k6XG4gIDM1Olx0I1xuICAzNjpcdCMgVGhlc2UgY29tcGlsYXRpb24gdW5pdHMgaGF2ZSByb3VnaGx5IHRoZSBzYW1lIHNpemUgYW5kIGNvbXBsZXhpdHkgLSBzbyB0aGVpclxuICAzNzpcdCMgYnVpbGQgcGFyYWxsZWxpemVzIHdlbGwgYW5kIGZpbmlzaGVzIHJvdWdobHkgYXQgb25jZTpcbiAgMzg6XHQjXG4gIDM5Olx0b2JqLXkgJiM0Mzs9IGNvcmUub1xuICA0MDpcdG9iai15ICYjNDM7PSBmYWlyLm9cbiAgNDE6XHRvYmoteSAmIzQzOz0gYnVpbGRfcG9saWN5Lm9cbiAgNDI6XHRvYmoteSAmIzQzOz0gYnVpbGRfdXRpbGl0eS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI2OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgU2NoZWR1bGVyJiMzOTtzIEV4dGVuc2lvbiBNb2R1bGVzKioKCkhtbSwgdGhpcyBpcyBzdHJhbmdlLiBJIHdhcyBleHBlY3RpbmcgdG8gZmluZCBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgcmVmZXJlbmNlZCBpbiB0aGUgbWFpbiBgTWFrZWZpbGVgIGZvciB0aGUgc2NoZWR1bGVyLCBga2VybmVsL3NjaGVkL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkICpub3JtYWxseSogZXhwZWN0IHRvIHNlZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYW4gZXh0ZW5zaW9uLiBJdCYjMzk7cyBhIGJpdCBvZGQgdG8gaGF2ZSBpdCBtaXNzaW5nIGZyb20gdGhlcmUuCgpPa2F5LCBsZXQmIzM5O3Mgbm90IGp1bXAgdG8gY29uY2x1c2lvbnMuIEZpcnN0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgb2J2aW91cyBwbGFjZXMuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBrZXJuZWwvc2NoZWQvZXh0L01ha2VmaWxlYCB0byBzZWUgaWYgaXQmIzM5O3MgZ290IGl0cyBvd24gYnVpbGQgcnVsZXMg4oCTIHBlcmhhcHMgaXQmIzM5O3MgYSBjb21wbGV0ZWx5IHNlbGYtY29udGFpbmVkIG1vZHVsZS4gQWx0ZXJuYXRpdmVseSwgSSYjMzk7bGwgZXhhbWluZSBga2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jYDsgbWF5YmUgaXQgaGFzIHNvbWUgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGxvZ2ljIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGhvdyB0aGUgc2NoZWR1bGluZyBwb2xpY2llcyBhcmUgY29tcGlsZWQuIExldCYjMzk7cyBzZWUgaWYgZWl0aGVyIG9mIHRob3NlIGhvbGRzIHRoZSBjbHVlIEkmIzM5O20gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0LmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy02NS0jIGluY2x1ZGUgXCYjMzQ7ZXh0L2ludGVybmFsLmhcJiMzNDtcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo2NjojIGluY2x1ZGUgXCYjMzQ7ZXh0L2NpZC5oXCYjMzQ7XG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNjctIyBpbmNsdWRlIFwmIzM0O2V4dC9hcmVuYS5oXCYjMzQ7XG4tLVxua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTcwLSMgaW5jbHVkZSBcJiMzNDtleHQvaW5saW5lcy5oXCYjMzQ7XG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmM6NzE6IyBpbmNsdWRlIFwmIzM0O2V4dC9leHQuY1wmIzM0O1xua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jOjcyOiMgaW5jbHVkZSBcJiMzNDtleHQvY2lkLmNcJiMzNDtcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy03My0jIGluY2x1ZGUgXCYjMzQ7ZXh0L2FyZW5hLmNcJiMzNDtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTIyOTM9dm9pZCB3YWtldXBfcHJlZW1wdChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBmbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTIyOTYtXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyOTc6XHRpZiAocC1cdTAwM2VzY2hlZF9jbGFzcyA9PSBycS1cdTAwM2VuZXh0X2NsYXNzKSB7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyOTg6XHRcdHJxLVx1MDAzZW5leHRfY2xhc3MtXHUwMDNld2FrZXVwX3ByZWVtcHQocnEsIHAsIGZsYWdzKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjI5OS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjMwMDpcdH0gZWxzZSBpZiAoc2NoZWRfY2xhc3NfYWJvdmUocC1cdTAwM2VzY2hlZF9jbGFzcywgcnEtXHUwMDNlbmV4dF9jbGFzcykpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjMwMTpcdFx0cnEtXHUwMDNlbmV4dF9jbGFzcy1cdTAwM2V3YWtldXBfcHJlZW1wdChycSwgcCwgZmxhZ3MpO1xua2VybmVsL3NjaGVkL2NvcmUuYy0yMzAyLVx0XHRyZXNjaGVkX2N1cnIocnEpO1xua2VybmVsL3NjaGVkL2NvcmUuYzoyMzAzOlx0XHRycS1cdTAwM2VuZXh0X2NsYXNzID0gcC1cdTAwM2VzY2hlZF9jbGFzcztcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjMwNC1cdH1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTY3ODE9c3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByb3h5X3Jlc2NoZWRfaWRsZShzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNjc4My1cdHB1dF9wcmV2X3NldF9uZXh0X3Rhc2socnEsIHJxLVx1MDAzZWRvbm9yLCBycS1cdTAwM2VpZGxlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6Njc4NDpcdHJxLVx1MDAzZW5leHRfY2xhc3MgPSBcdTAwMjZpZGxlX3NjaGVkX2NsYXNzO1xua2VybmVsL3NjaGVkL2NvcmUuYy02Nzg1LVx0cnFfc2V0X2Rvbm9yKHJxLCBycS1cdTAwM2VpZGxlKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTcwOTc9c3RhdGljIHZvaWQgX19zY2hlZCBub3RyYWNlIF9fc2NoZWR1bGUoaW50IHNjaGVkX21vZGUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy03MTY3LVx0XHRcdG5leHQgPSBwcmV2O1xua2VybmVsL3NjaGVkL2NvcmUuYzo3MTY4Olx0XHRcdHJxLVx1MDAzZW5leHRfY2xhc3MgPSBcdTAwMjZpZGxlX3NjaGVkX2NsYXNzO1xua2VybmVsL3NjaGVkL2NvcmUuYy03MTY5LVx0XHRcdGdvdG8gcGlja2VkO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzE4NS1cdG5leHQgPSBwaWNrX25leHRfdGFzayhycSwgXHUwMDI2cmYpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo3MTg2Olx0cnEtXHUwMDNlbmV4dF9jbGFzcyA9IG5leHQtXHUwMDNlc2NoZWRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTcxODctXHRpZiAoc2NoZWRfcHJveHlfZXhlYygpKSB7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz03NjYzPXZvaWQgcnRfbXV0ZXhfc2V0cHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlfdGFzaylcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc2NjYtXHRcdERFUVVFVUVfU0FWRSB8IERFUVVFVUVfTU9WRSB8IERFUVVFVUVfTk9DTE9DSztcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzY2NzpcdGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcywgKm5leHRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTc2NjgtXHRzdHJ1Y3QgcnFfZmxhZ3MgcmY7XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy03NzI0LVx0cHJldl9jbGFzcyA9IHAtXHUwMDNlc2NoZWRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjc3MjU6XHRuZXh0X2NsYXNzID0gX19zZXRzY2hlZHVsZXJfY2xhc3MocC1cdTAwM2Vwb2xpY3ksIHByaW8pO1xua2VybmVsL3NjaGVkL2NvcmUuYy03NzI2LVxua2VybmVsL3NjaGVkL2NvcmUuYzo3NzI3Olx0aWYgKHByZXZfY2xhc3MgIT0gbmV4dF9jbGFzcylcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzcyOC1cdFx0cXVldWVfZmxhZyB8PSBERVFVRVVFX0NMQVNTO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzc2MC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6Nzc2MTpcdFx0cC1cdTAwM2VzY2hlZF9jbGFzcyA9IG5leHRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3NjItXHRcdHAtXHUwMDNlcHJpbyA9IHByaW87XG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwNDgtI2VuZGlmXG5rZXJuZWwvc2NoZWQvY29yZS5jOjkwNDk6XHRcdHJxLVx1MDAzZW5leHRfY2xhc3MgPSBcdTAwMjZpZGxlX3NjaGVkX2NsYXNzO1xua2VybmVsL3NjaGVkL2NvcmUuYy05MDUwLVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTEzNS1cdGluaXRfc2NoZWRfZmFpcl9jbGFzcygpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo5MTM2Olx0aW5pdF9zY2hlZF9leHRfY2xhc3MoKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTEzNy1cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTExMjc2PXZvaWQgc2NoZWRfY2hhbmdlX2VuZChzdHJ1Y3Qgc2NoZWRfY2hhbmdlX2N0eCAqY3R4KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEzMDctXHRcdFx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHAtXHUwMDNlc2NoZWRfY2xhc3MsIGN0eC1cdTAwM2VjbGFzcykpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTEzMDg6XHRcdFx0XHRycS1cdTAwM2VuZXh0X2NsYXNzLVx1MDAzZXdha2V1cF9wcmVlbXB0KHJxLCBwLCAwKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTEzMDk6XHRcdFx0XHRycS1cdTAwM2VuZXh0X2NsYXNzID0gcC1cdTAwM2VzY2hlZF9jbGFzcztcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEzMTAtXHRcdFx0fVxuLS1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jPTExNDE9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGRsX3NlcnZlcl90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqdGltZXIsIHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlKVxuLS1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTEyMDgtICogdXBkYXRpbmcgKGFuZCB0aGUgcXVldWVpbmcgYmFjayB0byBkbF9ycSkgd2lsbCBiZSBkb25lIGJ5IHRoZVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM6MTIwOTogKiBuZXh0IGNhbGwgdG8gZW5xdWV1ZV90YXNrX2RsKCkuXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMjEwLSAqL1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM9MTgwPXMzMiBzY3hfY2lkX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTg4LVx0c3RydWN0IHNjeF9jaWRfdGFibGVzICp0YmxzO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxODk6XHR1MzIgbmV4dF9jaWQgPSAwO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxOTA6XHRzMzIgbmV4dF9ub2RlX2lkeCA9IDAsIG5leHRfbGxjX2lkeCA9IDAsIG5leHRfY29yZV9pZHggPSAwO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0xOTEtXHRzMzIgbmV4dF9zaGFyZF9pZHggPSAwO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjI5LVx0d2hpbGUgKCFjcHVtYXNrX2VtcHR5KHRvX3dhbGspKSB7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjIzMDpcdFx0czMyIG5leHRfY3B1ID0gY3B1bWFza19maXJzdCh0b193YWxrKTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjMxOlx0XHRzMzIgbmlkID0gY3B1X3RvX25vZGUobmV4dF9jcHUpO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoyMzI6XHRcdHMzMiBub2RlX2NpZCA9IG5leHRfY2lkO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yMzMtXHRcdHMzMiBub2RlX2lkeDtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTIzOS1cdFx0aWYgKG5pZCBcdTAwM2MgMCkge1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoyNDA6XHRcdFx0Y3B1bWFza19jbGVhcl9jcHUobmV4dF9jcHUsIHRvX3dhbGspO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNDEtXHRcdFx0Y29udGludWU7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNDctXHRcdGNwdW1hc2tfYW5kKG5vZGVfc2NyYXRjaCwgdG9fd2FsaywgY3B1bWFza19vZl9ub2RlKG5pZCkpO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoyNDg6XHRcdGlmIChXQVJOX09OX09OQ0UoIWNwdW1hc2tfdGVzdF9jcHUobmV4dF9jcHUsIG5vZGVfc2NyYXRjaCkpKVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNDktXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNTMtXHRcdFx0Y29uc3Qgc3RydWN0IGNwdW1hc2sgKmxsY19tYXNrID0gY3B1X2xsY19tYXNrKG5jcHUsIGxsY19mYWxsYmFjayk7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI1NDpcdFx0XHRzMzIgbGxjX2NpZCA9IG5leHRfY2lkO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNTUtXHRcdFx0czMyIGxsY19pZHggPSBuZXh0X2xsY19pZHgmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjY1LVx0XHRcdGNhbGNfc2hhcmRfbGF5b3V0KGxsY19zY3JhdGNoLCBzaGFyZF9zaXplLCBcdTAwMjZjb3Jlc19wZXJfc2hhcmQsIFx1MDAyNm5yX2xhcmdlKTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjY2Olx0XHRcdHNoYXJkX2NpZCA9IG5leHRfY2lkO1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNjctXHRcdFx0c2hhcmRfaWR4ID0gbmV4dF9zaGFyZF9pZHgmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjcyLVx0XHRcdFx0Y29uc3Qgc3RydWN0IGNwdW1hc2sgKnNpYiA9IHRvcG9sb2d5X3NpYmxpbmdfY3B1bWFzayhsY3B1KTtcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjczOlx0XHRcdFx0czMyIGNvcmVfY2lkID0gbmV4dF9jaWQ7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI3NDpcdFx0XHRcdHMzMiBjb3JlX2lkeCA9IG5leHRfY29yZV9pZHgmIzQzOyYjNDM7O1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNzUtXHRcdFx0XHRzMzIgY2NwdTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI5Ni1cdFx0XHRcdFx0Y2lkc19pbl9zaGFyZCA9IDA7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI5NzpcdFx0XHRcdFx0c2hhcmRfY2lkID0gbmV4dF9jaWQ7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI5OC1cdFx0XHRcdFx0c2hhcmRfaWR4ID0gbmV4dF9zaGFyZF9pZHgmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMzA0LVx0XHRcdFx0Zm9yX2VhY2hfY3B1KGNjcHUsIGNvcmVfc2NyYXRjaCkge1xua2VybmVsL3NjaGVkL2V4dC9jaWQuYzozMDU6XHRcdFx0XHRcdHMzMiBjaWQgPSBuZXh0X2NpZCYjNDM7JiM0Mzs7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTMwNi1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTM0Ni1cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MzQ3Olx0XHRjaWQgPSBuZXh0X2NpZCYjNDM7JiM0Mzs7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTM0OC1cdFx0dGJscy1cdTAwM2VjaWRfdG9fY3B1W2NpZF0gPSBjcHU7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0zNzUtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6Mzc2Olx0Zm9yIChjaWQgPSAwOyBjaWQgXHUwMDNjIG5leHRfY2lkOyBjaWQmIzQzOyYjNDM7KSB7XG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTM3Ny1cdFx0czMyIHNpZHggPSB0YmxzLVx1MDAzZWNpZF90b19zaGFyZFtjaWRdO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MzU0PXN0YXRpYyBib29sIHJxX2lzX29wZW4oc3RydWN0IHJxICpycSwgdTY0IGVucV9mbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM2MS1cdCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzozNjI6XHRpZiAoc2NoZWRfY2xhc3NfYWJvdmUocnEtXHUwMDNlbmV4dF9jbGFzcywgXHUwMDI2ZXh0X3NjaGVkX2NsYXNzKSlcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzYzLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zNjgtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzY5Olx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKFx1MDAyNmV4dF9zY2hlZF9jbGFzcywgcnEtXHUwMDNlbmV4dF9jbGFzcykpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM3MC1cdFx0cmV0dXJuIHRydWU7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xNTE4PXN0YXRpYyB2b2lkIHJxX293bmVkX3Bvc3RfZW5xKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgc3RydWN0IHJxICpycSxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NTktXHQgKiBwdXJwb3NlLCBidXQgZm9yIGl0IHRvIGJlIGludm9rZWQsIHdlIG11c3QgZW5zdXJlIHRoYXQgd2UgYnVtcFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxNTYwOlx0ICogQHJxLVx1MDAzZW5leHRfY2xhc3MgdG8gXHUwMDI2ZXh0X3NjaGVkX2NsYXNzIGlmIGl0JiMzOTtzIGN1cnJlbnRseSBpZGxlLlxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTYxLVx0ICpcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU2Mi1cdCAqIHdha2V1cF9wcmVlbXB0KCkgZG9lcyB0aGUgYnVtcGluZywgYW5kIHNpbmNlIHdlIG9ubHkgaW52b2tlIGl0IGlmXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NjM6XHQgKiBAcnEtXHUwMDNlbmV4dF9jbGFzcyBpcyBiZWxvdyBcdTAwMjZleHRfc2NoZWRfY2xhc3MsIGl0IHdpbGwgYWxzb1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTY0LVx0ICogcmVzY2hlZF9jdXJyKHJxKS5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU2NS1cdCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxNTY2Olx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHAtXHUwMDNlc2NoZWRfY2xhc3MsIHJxLVx1MDAzZW5leHRfY2xhc3MpKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTY3LVx0XHR3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTczLVx0ICogTm90ZSB0aGF0IHRoZSB3YWtldXBfcHJlZW1wdCgpIGFib3ZlIG1heSBoYXZlIGFscmVhZHkgdHJpZ2dlcmVkXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NzQ6XHQgKiBhIHJlc2NoZWQgaWYgQHJxLVx1MDAzZW5leHRfY2xhc3Mgd2FzIGlkbGUuIEl0JiMzOTtzIGhhcm1sZXNzLCBzaW5jZVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTc1LVx0ICogbmVlZF9yZXNjaGVkIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGFzayBwaWNrLlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MzA3Nz1zdGF0aWMgdm9pZCBzd2l0Y2hfY2xhc3Moc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzA3OS1cdHN0cnVjdCBzY3hfc2NoZWQgKnNjaCA9IHNjeF9yb290X3Byb3RlY3RlZF9saXZlKCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjMwODA6XHRjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKm5leHRfY2xhc3MgPSBuZXh0LVx1MDAzZXNjaGVkX2NsYXNzO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMDgxLVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzA4Ny1cdCAqIGxvbmdlciB1bmRlciB0aGUgY29udHJvbCBvZiBTQ1guIFRoZXJlZm9yZSwgZG9uJiMzOTt0IGludm9rZSB0aGUgY2FsbGJhY2tcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzA4ODpcdCAqIGlmIHRoZSBuZXh0IGNsYXNzIGlzIGJlbG93IFNDWCAoaW4gd2hpY2ggY2FzZSB0aGUgQlBGIHNjaGVkdWxlciBoYXNcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzA4OS1cdCAqIGFjdGl2ZWx5IGRlY2lkZWQgbm90IHRvIHNjaGVkdWxlIGFueSB0YXNrcyBvbiB0aGUgQ1BVKS5cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzA5MC1cdCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzozMDkxOlx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKFx1MDAyNmV4dF9zY2hlZF9jbGFzcywgbmV4dF9jbGFzcykpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMwOTItXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMxMDUtXHRcdFx0c3RydWN0IHNjeF9jcHVfcmVsZWFzZV9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjMxMDY6XHRcdFx0XHQucmVhc29uID0gcHJlZW1wdF9yZWFzb25fZnJvbV9jbGFzcyhuZXh0X2NsYXNzKSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzEwNy1cdFx0XHRcdC50YXNrID0gbmV4dCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTU1NTE9Ym9vbCBzY3hfYWxsb3dfdHR3dV9xdWV1ZShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01NTcxLS8qKlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo1NTcyOiAqIGhhbmRsZV9sb2NrdXAgLSBzY2hlZF9leHQgY29tbW9uIGxvY2t1cCBoYW5kbGVyXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTU1NzMtICogQGV4aXRfY3B1OiBDUFUgdG8gcmVjb3JkIGluIGV4aXRfaW5mby4gUGFzcyB0aGUgc3RhbGxlZC9odW5nIENQVSwgbm90IGN1cnJlbnQuXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04NjYxPXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2N4X3BtX25vdGlmaWVyID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODY2NC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODY2NTp2b2lkIF9faW5pdCBpbml0X3NjaGVkX2V4dF9jbGFzcyh2b2lkKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04NjY2LXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk3NS1cdC8qXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTc2Olx0ICoga2Z1bmMgcmVnaXN0cmF0aW9uIGNhbiYjMzk7dCBiZSBkb25lIGZyb20gaW5pdF9zY2hlZF9leHRfY2xhc3MoKSBhc1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk3Ny1cdCAqIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoKSBuZWVkcyBtb3N0IG9mIHRoZSBzeXN0ZW0gdG8gYmUgdXAuXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD0yMj1ib29sIHNjeF9hbGxvd190dHd1X3F1ZXVlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjIzOnZvaWQgaW5pdF9zY2hlZF9leHRfY2xhc3Modm9pZCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTI0LVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NTY9c3RhdGljIGlubGluZSBib29sIHNjeF9hbGxvd190dHd1X3F1ZXVlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gdHJ1ZTsgfVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo1NzpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zY2hlZF9leHRfY2xhc3Modm9pZCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNTgtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM9OTEzPXN0YXRpYyBib29sIGNoZWNrX2J1aWx0aW5faWRsZV9lbmFibGVkKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYy05MjYtICogV2UgY2FuJiMzOTt0IHNpbXBseSBjaGVjayB3aGV0aGVyIEBwLVx1MDAzZW1pZ3JhdGlvbl9kaXNhYmxlZCBpcyBzZXQgaW4gYVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6OTI3OiAqIHNjaGVkX2V4dCBjYWxsYmFjaywgYmVjYXVzZSB0aGUgQlBGIHByb2xvZyAoX19icGZfcHJvZ19lbnRlcikgbWF5IGRpc2FibGVcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTkyOC0gKiBtaWdyYXRpb24gZm9yIHRoZSBjdXJyZW50IHRhc2sgd2hpbGUgcnVubmluZyBCUEYgY29kZS5cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYz0xNTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBzY3hfa2Z1bmNfc2V0X2lkbGUgPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtMTUzNy0gKlxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmM6MTUzODogKiBUaGVzZSBrZnVuY3MgYXJlIGFsc28gbWVtYmVycyBvZiBzY3hfa2Z1bmNfaWRzX3VubG9ja2VkIChzZWUgZXh0LmMpIGJlY2F1c2Vcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1MzktICogdGhleSYjMzk7cmUgY2FsbGFibGUgZnJvbSB1bmxvY2tlZCBjb250ZXh0cyBpbiBhZGRpdGlvbiB0byBvcHMuc2VsZWN0X2NwdSgpIGFuZFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0xMzI9ZW51bSBzY3hfb3BzX2ZsYWdzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTM4LVx0Lypcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMzk6XHQgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgdGFzayB0byBydW4gb24gdGhlIENQVSwgZXh0IGNvcmVcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNDAtXHQgKiBrZWVwcyBydW5uaW5nIHRoZSBjdXJyZW50IHRhc2sgZXZlbiBhZnRlciBpdHMgc2xpY2UgZXhwaXJlcy4gSWYgdGhpc1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0zMjI9c3RydWN0IHNjaGVkX2V4dF9vcHMge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0zNzItXHQgKlxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjM3MzpcdCAqIFRoZSBleHQgY29yZSBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBCUEYgc2lkZSBvd25zIGEgZ2l2ZW4gdGFzayBvclxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTM3NC1cdCAqIG5vdCBhbmQgY2FuIGdyYWNlZnVsbHkgaWdub3JlIHNwdXJpb3VzIGRpc3BhdGNoZXMgZnJvbSBCUEYgc2lkZSxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTQzMT1lbnVtIHNjeF9jYXBfZmxhZ3Mge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNDgyLSAqIGRlbGl2ZXJ5IGlzIGluIGZsaWdodCBwZXIgc2hhcmQuIEZ1cnRoZXIgY2hhbmdlcyBmb2xkIGludG8gdGhlIHNhbWUgYnVmZmVyXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MTQ4MzogKiBhbmQgc2hpcCBhcyB0aGUgbmV4dCBjYWxsYmFjaywgc28gYSBzaGFyZCYjMzk7cyBjYWxsYmFja3MgZmlyZSBpbiBvcmRlci5cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNDg0LSAqXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTE2NzI9ZW51bSBzY3hfZW5xX2ZsYWdzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTcyNS1cdCAqIFRoZSB0YXNrIGJlaW5nIGVucXVldWVkIGlzIHRoZSBvbmx5IHRhc2sgYXZhaWxhYmxlIGZvciB0aGUgY3B1LiBCeVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjE3MjY6XHQgKiBkZWZhdWx0LCBleHQgY29yZSBrZWVwcyBleGVjdXRpbmcgc3VjaCB0YXNrcyBidXQgd2hlblxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTE3MjctXHQgKiAlU0NYX09QU19FTlFfTEFTVCBpcyBzcGVjaWZpZWQsIHRoZXkmIzM5O3JlIG9wcy5lbnF1ZXVlKCkmIzM5O2Qgd2l0aCB0aGVcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTgyOT1zdGF0aWMgY29uc3QgY2hhciAqc2N4X2VuYWJsZV9zdGF0ZV9zdHJbXSA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTgzOC0gKlxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjE4Mzk6ICogVGhlIHNjaGVkX2V4dCBjb3JlIHVzZXMgdGhpcyBzdGF0ZSBtYWNoaW5lIHRvIHRyYWNrIHRhc2sgb3duZXJzaGlwXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTg0MC0gKiBiZXR3ZWVuIHRoZSBTQ1ggY29yZSBhbmQgdGhlIEJQRiBzY2hlZHVsZXIuIFRoaXMgYWxsb3dzIHRoZSBCUEZcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTkxMS0gKlxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjE5MTI6ICogVGhlIHNjaGVkX2V4dCBjb3JlIHVzZXMgYSBcJiMzNDtsb2NrIGRhbmNpbmdcJiMzNDsgcHJvdG9jb2wgY29vcmRpbmF0ZWQgYnlcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xOTEzLSAqIHAtXHUwMDNlc2N4LmhvbGRpbmdfY3B1LiBXaGVuIG1vdmluZyBhIHRhc2sgdG8gYSBkaWZmZXJlbnQgcnE6XG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMC0gKiBzdWItc2NoZWR1bGVyIGVuYWJsZS9kaXNhYmxlIHBhdGhzLiBUaGUgY29yZSBkaXNwYXRjaC9lbnF1ZXVlIG1hY2hpbmVyeSBpdFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMTogKiBidWlsZHMgb24gbGl2ZXMgaW4gZXh0LmMuXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEyLSAqXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xMjMyPXZvaWQgZHJhaW5fZGVzY2VuZGFudHMoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTI0OS0gKiBzdGF0ZSB0byAlU0NYX1RBU0tfUkVBRFkgdG8gYWNjb3VudCBmb3IgdGhlIGFscmVhZHkgY29tcGxldGVkIGluaXQuIEEgdGFza1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMjUwOiAqIG9uIGEgbm9uLWV4dCBjbGFzcywgcG9zc2libGUgdW5kZXIgYW4gJVNDWF9PUFNfU1dJVENIX1BBUlRJQUwgcm9vdCwgc3RheXNcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTI1MS0gKiAlUkVBRFkgYW5kIGlzIGVuYWJsZWQgYnkgc3dpdGNoaW5nX3RvX3NjeCgpIGlmIGl0IHN3aXRjaGVzIG92ZXIuXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xNzExPXZvaWQgc2N4X3N1Yl9lbmFibGVfd29ya2ZuKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xOTU2LVx0XHRcdCAqIGlzIHdoYXQgd2Ugd2FudC4gQXNzaWduIGl0IHRvIEBzY2ggYW5kLCBpZiBpdCYjMzk7cyBvblxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxOTU3Olx0XHRcdCAqIHRoZSBleHQgY2xhc3MsIGVuYWJsZS4gQSBub24tZXh0IHRhc2ssIHBvc3NpYmxlIHVuZGVyXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE5NTgtXHRcdFx0ICogYW4gJVNDWF9PUFNfU1dJVENIX1BBUlRJQUwgcm9vdCwgc3RheXMgUkVBRFkgYW5kIGlzXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz02OTc4PXN0YXRpYyBib29sIHRocm90dGxlX2Nmc19ycShzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy03MDMyLVx0ICogY3VycmVudCBkb25vci4gSW4gY2FzZSBvZiBwcm94eS1leGVjdXRpb24sIHRoZSBleGVjdXRpb25cbmtlcm5lbC9zY2hlZC9mYWlyLmM6NzAzMzpcdCAqIGNvbnRleHQgY2Fubm90IGV4aXQgdG8gdGhlIHVzZXJzcGFjZSB3aGlsZSBob2xkaW5nIGEgbXV0ZXhcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzAzNC1cdCAqIGFuZCB0aGUgcnVsZSBvZiB0aHJvdHRsZSBkZWZlcnJhbCB0byBvbmx5IHRocm90dGxlIHRoZVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTU0NTI9aW50IHNjaGVkX2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgbG9uZyBpZGxlKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU0ODItXHRcdGlmIChXQVJOX09OX09OQ0Uod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQ4MzpcdFx0XHRnb3RvIG5leHRfY3B1O1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTQ4NC1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NTAyLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTUwMzpuZXh0X2NwdTpcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU1MDQtXHRcdHJxX3VubG9ja19pcnFyZXN0b3JlKHJxLCBcdTAwMjZyZik7XG4tLVxua2VybmVsL3NjaGVkL3J0LmM9MjA3OD1zdGF0aWMgdm9pZCBwdXNoX3J0X3Rhc2tzKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3J0LmMtMjEyNy0gKi9cbmtlcm5lbC9zY2hlZC9ydC5jOjIxMjg6c3RhdGljIGludCBydG9fbmV4dF9jcHUoc3RydWN0IHJvb3RfZG9tYWluICpyZClcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMjkte1xuLS1cbmtlcm5lbC9zY2hlZC9ydC5jLTIxMzUtXHQgKiBXaGVuIHN0YXJ0aW5nIHRoZSBJUEkgUlQgcHVzaGluZywgdGhlIHJ0b19jcHUgaXMgc2V0IHRvIC0xLFxua2VybmVsL3NjaGVkL3J0LmM6MjEzNjpcdCAqIHJ0X25leHRfY3B1KCkgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBmaXJzdCBDUFUgZm91bmQgaW5cbmtlcm5lbC9zY2hlZC9ydC5jLTIxMzctXHQgKiB0aGUgcnRvX21hc2suXG5rZXJuZWwvc2NoZWQvcnQuYy0yMTM4LVx0ICpcbmtlcm5lbC9zY2hlZC9ydC5jOjIxMzk6XHQgKiBJZiBydG9fbmV4dF9jcHUoKSBpcyBjYWxsZWQgd2l0aCBydG9fY3B1IGlzIGEgdmFsaWQgQ1BVLCBpdFxua2VybmVsL3NjaGVkL3J0LmMtMjE0MC1cdCAqIHdpbGwgcmV0dXJuIHRoZSBuZXh0IENQVSBmb3VuZCBpbiB0aGUgcnRvX21hc2suXG4tLVxua2VybmVsL3NjaGVkL3J0LmM9MjE5MD1zdGF0aWMgdm9pZCB0ZWxsX2NwdV90b19wdXNoKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3J0LmMtMjIwOS1cdGlmIChycS1cdTAwM2VyZC1cdTAwM2VydG9fY3B1IFx1MDAzYyAwKVxua2VybmVsL3NjaGVkL3J0LmM6MjIxMDpcdFx0Y3B1ID0gcnRvX25leHRfY3B1KHJxLVx1MDAzZXJkKTtcbmtlcm5lbC9zY2hlZC9ydC5jLTIyMTEtXG4tLVxua2VybmVsL3NjaGVkL3J0LmM9MjIyND12b2lkIHJ0b19wdXNoX2lycV93b3JrX2Z1bmMoc3RydWN0IGlycV93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9zY2hlZC9ydC5jLTIyNDYtXHQvKiBQYXNzIHRoZSBJUEkgdG8gdGhlIG5leHQgcnQgb3ZlcmxvYWRlZCBxdWV1ZSAqL1xua2VybmVsL3NjaGVkL3J0LmM6MjI0NzpcdGNwdSA9IHJ0b19uZXh0X2NwdShyZCk7XG5rZXJuZWwvc2NoZWQvcnQuYy0yMjQ4LVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMTg3LVx0Lypcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjExODg6XHQgKiBUaGUgbmV4dCBjYWNoZWxpbmUgaG9sZHMgdGhlIChob3QpIHJ1bnF1ZXVlIGxvY2ssIGFzIHdlbGwgYXNcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTExODktXHQgKiBzb21lIG90aGVyIGxlc3MgcGVyZm9ybWFuY2UtY3JpdGljYWwgZmllbGRzLlxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyNTEtXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdCpzdG9wO1xua2VybmVsL3NjaGVkL3NjaGVkLmg6MTI1MjpcdGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqbmV4dF9jbGFzcztcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyNTMtXHR1bnNpZ25lZCBsb25nXHRcdG5leHRfYmFsYW5jZTtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0yODY3PXN0YXRpYyBpbmxpbmUgdm9pZCBycV9tb2RpZmllZF9iZWdpbihzdHJ1Y3QgcnEgKnJxLCBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzKVxua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg2OC17XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODY5Olx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHJxLVx1MDAzZW5leHRfY2xhc3MsIGNsYXNzKSlcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjI4NzA6XHRcdHJxLVx1MDAzZW5leHRfY2xhc3MgPSBjbGFzcztcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NzEtfVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTI4NzM9c3RhdGljIGlubGluZSBib29sIHJxX21vZGlmaWVkX2Fib3ZlKHN0cnVjdCBycSAqcnEsIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3MpXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODc0LXtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjI4NzU6XHRyZXR1cm4gc2NoZWRfY2xhc3NfYWJvdmUocnEtXHUwMDNlbmV4dF9jbGFzcywgY2xhc3MpO1xua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg3Ni19XG4tLVxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM9NDkzPWludCBfX3NjaGVkX3NldHNjaGVkdWxlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG4tLVxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNDk4LVx0aW50IHJldHZhbCwgb2xkcHJpbywgbmV3cHJpbztcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jOjQ5OTpcdGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcywgKm5leHRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYy01MDAtXHRzdHJ1Y3QgYmFsYW5jZV9jYWxsYmFjayAqaGVhZDtcbi0tXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYy02NzUtXHRwcmV2X2NsYXNzID0gcC1cdTAwM2VzY2hlZF9jbGFzcztcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jOjY3NjpcdG5leHRfY2xhc3MgPSBfX3NldHNjaGVkdWxlcl9jbGFzcyhwb2xpY3ksIG5ld3ByaW8pO1xua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjc3LVxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM6Njc4Olx0aWYgKHByZXZfY2xhc3MgIT0gbmV4dF9jbGFzcylcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTY3OS1cdFx0cXVldWVfZmxhZ3MgfD0gREVRVUVVRV9DTEFTUztcbi0tXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYy02ODQtXHRcdFx0X19zZXRzY2hlZHVsZXJfcGFyYW1zKHAsIGF0dHIpO1xua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM6Njg1Olx0XHRcdHAtXHUwMDNlc2NoZWRfY2xhc3MgPSBuZXh0X2NsYXNzO1xua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjg2LVx0XHRcdHAtXHUwMDNlcHJpbyA9IG5ld3ByaW87XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgRXh0ZW5zaW9uIFNjaGVkdWxlciBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCBpcyBiZWluZyBpbmNsdWRlZCB3aXRoaW4gYGtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuY2AuIEludGVyZXN0aW5nLiBJIHNob3VsZCBwcm9iYWJseSByZS1leGFtaW5lIGJvdGggYGtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuY2AgYW5kIHRoZSBhc3NvY2lhdGVkIGBNYWtlZmlsZWAgaW4gdGhlIGBrZXJuZWwvc2NoZWRgIGRpcmVjdG9yeS4gSSYjMzk7bSB0cnlpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGV4dGVuc2lvbiBzY2hlZHVsZXIgaXMgYmVpbmcgaW50ZWdyYXRlZC4KCldhaXQgYSBzZWNvbmTigKYgSSYjMzk7dmUgZ290IGl0LiBUaGUgY29tcGlsYXRpb24gb2YgYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIGlzIGNvbmRpdGlvbmFsIOKAkyBpdCYjMzk7cyBvbmx5IGluY2x1ZGVkIHdoZW4gYENPTkZJR19TQ0hFRF9DTEFTU19FWFRgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gTGV0IG1lIGNoZWNrIHRoZSBga2VybmVsL3NjaGVkL0tjb25maWdgIGZpbGUgb3IgYW5vdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBzZWUgaG93IGBTQ0hFRF9DTEFTU19FWFRgIGlzIGV4cG9zZWQgYW5kIGNvbnRyb2xsZWQuIFRoYXQgc2hvdWxkIGV4cGxhaW4gdGhlIHdob2xlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTU5LVxua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jOjYwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNjEtIyBpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLFxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjYwLVxua2VybmVsL3NjaGVkL2NvcmUuYzoyNjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMjYyLVx0aWYgKHBhID09IE1BWF9SVF9QUklPICYjNDM7IE1BWF9OSUNFICYjNDM7IDEpXHQvKiBleHQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ1NzM9c3RhdGljIHZvaWQgX19zY2hlZF9mb3JrKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYxMC1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDYxMTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEyLVx0aW5pdF9zY3hfZW50aXR5KFx1MDAyNnAtXHUwMDNlc2N4KTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ4MTM9aW50IHNjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00ODYwLVx0XHRwLVx1MDAzZXNjaGVkX2NsYXNzID0gXHUwMDI2cnRfc2NoZWRfY2xhc3M7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjQ4NjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDg2Mi1cdH0gZWxzZSBpZiAodGFza19zaG91bGRfc2N4KHAtXHUwMDNlcG9saWN5KSkge1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzYwOD1jb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKl9fc2V0c2NoZWR1bGVyX2NsYXNzKGludCBwb2xpY3ksIGludCBwcmlvKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzYxNS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzYxNjojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2NvcmUuYy03NjE3LVx0aWYgKHRhc2tfc2hvdWxkX3NjeChwb2xpY3kpKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODg2OD1pbnQgc2NoZWRfY3B1X2R5aW5nKHVuc2lnbmVkIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy04ODgyLVx0ZGxfc2VydmVyX3N0b3AoXHUwMDI2cnEtXHUwMDNlZmFpcl9zZXJ2ZXIpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo4ODgzOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg4ODQtXHRkbF9zZXJ2ZXJfc3RvcChcdTAwMjZycS1cdTAwM2VleHRfc2VydmVyKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg5NTE9dm9pZCBfX2luaXQgc2NoZWRfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2MC1cdEJVR19PTighc2NoZWRfY2xhc3NfYWJvdmUoXHUwMDI2ZmFpcl9zY2hlZF9jbGFzcywgXHUwMDI2aWRsZV9zY2hlZF9jbGFzcykpO1xua2VybmVsL3NjaGVkL2NvcmUuYzo4OTYxOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NjItXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFx1MDAyNmZhaXJfc2NoZWRfY2xhc3MsIFx1MDAyNmV4dF9zY2hlZF9jbGFzcykpO1xuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA3OC1cdFx0ZmFpcl9zZXJ2ZXJfaW5pdChycSk7XG5rZXJuZWwvc2NoZWQvY29yZS5jOjkwNzk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTA4MC1cdFx0ZXh0X3NlcnZlcl9pbml0KHJxKTtcbi0tXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xMDg9c3RhdGljIGlubGluZSB1OCBkbF9nZXRfdHlwZShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMTMtXHRcdHJldHVybiBETF9TRVJWRVJfRkFJUjtcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjExNDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMTE1LVx0aWYgKGRsX3NlID09IFx1MDAyNnJxLVx1MDAzZWV4dF9zZXJ2ZXIpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MTg0Mj12b2lkIHNjaGVkX2luaXRfZGxfc2VydmVycyh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTE4NjYtXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYzoxODY3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY4LVx0XHRkbF9zZSA9IFx1MDAyNnJxLVx1MDAzZWV4dF9zZXJ2ZXI7XG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ1MT1zdGF0aWMgdm9pZCBkbF9zZXJ2ZXJfYWRkX2J3KHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMzQ1OC1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NTk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTM0NjAtXHRkbF9zZSA9IFx1MDAyNmNwdV9ycShjcHUpLVx1MDAzZWV4dF9zZXJ2ZXI7XG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ2Nj1zdGF0aWMgdTY0IGRsX3NlcnZlcl9yZWFkX2J3KGludCBjcHUpXG4tLVxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMzQ3My1cbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NzQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTM0NzUtXHRpZiAoY3B1X3JxKGNwdSktXHUwMDNlZXh0X3NlcnZlci5kbF9zZXJ2ZXIgXHUwMDI2XHUwMDI2XG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NDk0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3NjaGVkO1xua2VybmVsL3NjaGVkL2RlYnVnLmMtNDk1LVxua2VybmVsL3NjaGVkL2RlYnVnLmM6NDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvZGVidWcuYy00OTctc3RhdGljIHNzaXplX3Rcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYz01NjE9c3RhdGljIHZvaWQgZGVidWdmc19leHRfc2VydmVyX2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy01ODAtfVxua2VybmVsL3NjaGVkL2RlYnVnLmM6NTgxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXG5rZXJuZWwvc2NoZWQvZGVidWcuYy01ODItXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NjktXHRkZWJ1Z2ZzX2ZhaXJfc2VydmVyX2luaXQoKTtcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjc3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNzcxLVx0ZGVidWdmc19leHRfc2VydmVyX2luaXQoKTtcbi0tXG5rZXJuZWwvc2NoZWQvZGVidWcuYz0xNDA2PXZvaWQgcHJvY19zY2hlZF9zaG93X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsXG4tLVxua2VybmVsL3NjaGVkL2RlYnVnLmMtMTUwNS1cdH1cbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjE1MDY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTE1MDctXHRfX1BTKFwmIzM0O2V4dC5lbmFibGVkXCYjMzQ7LCB0YXNrX29uX3NjeChwKSk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz02NDE9dm9pZCBzY3hfc2V0X3Rhc2tfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgc3RhdGUpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02OTctICogc2N4X3Rhc2tzIGNhbiBiZSByZW1vdmVkIGluIGZhdm9yIG9mIGFsd2F5cyB1c2luZyBjZ3JvdXAgaXRlcmF0aW9uIGlmXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjY5ODogKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUIGRlcGVuZHMgb24gQ09ORklHX0NHUk9VUFMuXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTY5OS0gKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOC0gKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC0xMC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTM5PWJvb2wgc2N4X3ByaW9fbGVzcyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmEsIGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqYixcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTQyLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo0MzojZWxzZVx0LyogQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC00NC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTU3PXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NjaGVkX2V4dF9jbGFzcyh2b2lkKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC01OC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NTk6I2VuZGlmXHQvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYwLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo2MTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC02Mi12b2lkIF9fc2N4X3VwZGF0ZV9pZGxlKHN0cnVjdCBycSAqcnEsIGJvb2wgaWRsZSwgYm9vbCBkb19ub3RpZnkpO1xuLS1cbmtlcm5lbC9zY2hlZC9pZGxlLmM9NTU3PXN0YXRpYyB2b2lkIHVwZGF0ZV9jdXJyX2lkbGUoc3RydWN0IHJxICpycSlcbi0tXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU2OS1cdGRsX3NlcnZlcl91cGRhdGVfaWRsZShcdTAwMjZycS1cdTAwM2VmYWlyX3NlcnZlciwgZGVsdGFfZXhlYyk7XG5rZXJuZWwvc2NoZWQvaWRsZS5jOjU3MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL2lkbGUuYy01NzEtXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXHUwMDI2cnEtXHUwMDNlZXh0X3NlcnZlciwgZGVsdGFfZXhlYyk7XG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTk0PXN0YXRpYyBpbmxpbmUgaW50IG5vcm1hbF9wb2xpY3koaW50IHBvbGljeSlcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5NS17XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5Ny1cdGlmIChwb2xpY3kgPT0gU0NIRURfRVhUKVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTY4MT1zdHJ1Y3QgY2ZzX3JxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC03NzktXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDo3ODA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTc4MS0vKiBzY3hfcnEtXHUwMDNlZmxhZ3MsIHByb3RlY3RlZCBieSB0aGUgcnEgbG9jayAqL1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTgxMT1zdHJ1Y3Qgc2N4X3JxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC04NTAtfTtcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjg1MTojZW5kaWYgLyogQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL3NjaGVkLmgtODUyLVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjEzLVx0c3RydWN0IGRsX3JxXHRcdGRsO1xua2VybmVsL3NjaGVkL3NjaGVkLmg6MTIxNDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxNS1cdHN0cnVjdCBzY3hfcnFcdFx0c2N4O1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE4ODU9ZXh0ZXJuIHN0cnVjdCBiYWxhbmNlX2NhbGxiYWNrIGJhbGFuY2VfcHVzaF9jYWxsYmFjaztcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODYtXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxODg3OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xODg4LWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgZXh0X3NjaGVkX2NsYXNzO1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MDQ9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxMC1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjE5MTE6I2Vsc2UgLyogIUNPTkZJR19TQ0hFRF9DTEFTU19FWFQ6ICovXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTEyLSNkZWZpbmUgc2N4X2VuYWJsZWQoKVx0XHRmYWxzZVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MTY9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTE3OiNlbmRpZiAvKiAhQ09ORklHX1NDSEVEX0NMQVNTX0VYVCAqL1xua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxOC1cbi0tXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0yODQxPXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpuZXh0X2FjdGl2ZV9jbGFzcyhjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKmNsYXNzKVxuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NDMtXHRjbGFzcyYjNDM7JiM0Mzs7XG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODQ0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODQ1LVx0aWYgKHNjeF9zd2l0Y2hlZF9hbGwoKSBcdTAwMjZcdTAwMjYgY2xhc3MgPT0gXHUwMDI2ZmFpcl9zY2hlZF9jbGFzcylcbi0tXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYz00NzQ9dm9pZCBycV9hdHRhY2hfcm9vdChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKVxuLS1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTUxMi1cbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jOjUxMzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmMtNTE0LVx0aWYgKHJxLVx1MDAzZWV4dF9zZXJ2ZXIuZGxfc2VydmVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dGVuZGVkIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgaGVyZSBpcyBgU0NIRURfQ0xBU1NfRVhUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuIEhtbSwgdGhlIGNvZGUgc2VlbXMgdG8gYmUgZm9jdXNlZCBhcm91bmQgYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gVGhhdCYjMzk7cyB1c2VkIGluIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYHNjeF9jZ3JvdXBfaW5pdGAsIGBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWVgLCBhbmQgYHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWVgLiBBbGwgb2YgdGhlc2UsIHRoZSBjb2RlIHRlbGxzIG1lLCBhcmUgbG9jYXRlZCB3aXRoaW4gYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIGFuZCBga2VybmVsL3NjaGVkL2V4dC9zdWIuY2AuCgpSaWdodCwgYFNDSEVEX0NMQVNTX0VYVGDigKYgbWFraW5nIGEgbm90ZSB0byBrZWVwIHRoYXQgY29uZmlndXJhdGlvbiBpbiBtaW5kIGFzIEkgcHJvY2VzcyB0aGlzLiBIYW5nIG9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgYW5kIHNlYXJjaCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgY2dyb3VwX2luaXRgIHRvIGNvbmZpcm0gdGhhdCBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nncm91cF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2V4dC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2V4dC9leHQuYz00NjgwPXZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY5MS0gKlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NjkyOiAqIFJldHVybiB0aGUgc2NoZWQgdGhhdCBAdGcmIzM5O3Mgb3BzLmNncm91cF9pbml0KCkgc3VjY2VlZGVkIG9uLCAlTlVMTCBpZiBAdGdcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY5My0gKiBpc24mIzM5O3QgaW5pdGVkLiBBbiBhdXRvZ3JvdXAgdGcgaGFzIG5vIGNncm91cCBvZiBpdHMgb3duIGFuZCByZXNvbHZlcyB0byB0aGVcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3MDU9c3RhdGljIHN0cnVjdCBzY3hfc2NoZWQgKnNjeF90Z19zY2hlZChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzExLVx0XHR0ZyA9IFx1MDAyNnJvb3RfdGFza19ncm91cDtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDcxMjpcdC8qIElOSVRFRCBtZWFucyBvcHMuY2dyb3VwX2luaXQoKSBzdWNjZWVkZWQgb24gQHRnLVx1MDAzZXNjeC5zY2hlZCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzEzLVx0cmV0dXJuICh0Zy1cdTAwM2VzY3guZmxhZ3MgXHUwMDI2IFNDWF9UR19JTklURUQpID8gdGctXHUwMDNlc2N4LnNjaGVkIDogTlVMTDtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3MjUtICogUmV0dXJuICVOVUxMIGlmIHRoZSBwYXJlbnQgdGFza19ncm91cCBoYXMgbm8gc2NoZWQuIFRoYXQgY2FuIGhhcHBlbiB3aGVuIHRoZVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NzI2OiAqIHBhcmVudCYjMzk7cyBvcHMuY2dyb3VwX2luaXQoKSBmYWlscyB3aGlsZSBhIHN1Yi1zY2hlZHVsZXIgaXMgYmVpbmcgZGlzYWJsZWQuXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3MjctICpcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3NDI9aW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc2MS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc2MjpcdFx0aWYgKFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfaW5pdCkpIHtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc2MzpcdFx0XHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NjQtXHRcdFx0XHR7IC53ZWlnaHQgPSB0Zy1cdTAwM2VzY3gud2VpZ2h0LFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc2OS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc3MDpcdFx0XHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc3MS1cdFx0XHRcdFx0ICAgICAgTlVMTCwgdGctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YXJncyk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzItXHRcdFx0aWYgKHJldClcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc3MzpcdFx0XHRcdHJldCA9IHNjeF9vcHNfc2FuaXRpemVfZXJyKHNjaCwgXCYjMzQ7Y2dyb3VwX2luaXRcJiMzNDssIHJldCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzQtXHRcdH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUxNDc9c3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNTctXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNTg6XHRcdC8qIGFsc28gY2xlYXIgdGhlIHNjaGVkIG9mIHRncyB3aG9zZSBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE1OS1cdFx0dGctXHUwMDNlc2N4LnNjaGVkID0gTlVMTDtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNjctXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNjg6c3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTY5LXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxODItXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxODM6XHRcdGlmIChzY2gtXHUwMDNlb3BzLmNncm91cF9pbml0KSB7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxODQ6XHRcdFx0c3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxODUtXHRcdFx0XHQud2VpZ2h0ID0gdGctXHUwMDNlc2N4LndlaWdodCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxOTEtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxOTI6XHRcdFx0cmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy1cdTAwM2VjZ3JvdXAsIFx1MDAyNmFyZ3MpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTkzLVx0XHRcdGlmIChyZXQpIHtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5NDpcdFx0XHRcdHNjeF9lcnJvcihzY2gsIFwmIzM0O29wcy5jZ3JvdXBfaW5pdCgpIGZhaWxlZCAoJWQpXCYjMzQ7LCByZXQpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTk1LVx0XHRcdFx0cmV0dXJuIHJldDtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUyMDc9c3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTIwODpzdGF0aWMgaW50IHNjeF9jZ3JvdXBfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpIHsgcmV0dXJuIDA7IH1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTIwOS0jZW5kaWZcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc0Njg9c3RhdGljIHZvaWQgc2N4X3Jvb3RfZW5hYmxlX3dvcmtmbihzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzcxMC1cdHNldF9jZ3JvdXBfc2NoZWQoc2NoX2Nncm91cChzY2gpLCBzY2gpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzo3NzExOlx0cmV0ID0gc2N4X2Nncm91cF9pbml0KHNjaCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc3MTItXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODA3Mj1zdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwODAtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA4MTpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA4Mi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9leGl0KTpcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyMzc9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyMzgtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODIzOTpzdGF0aWMgczMyIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncykgeyByZXR1cm4gLUVJTlZBTDsgfVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQwLXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9leGl0KHN0cnVjdCBjZ3JvdXAgKmNncnApIHt9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjU5PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyBfX2JwZl9vcHNfc2NoZWRfZXh0X29wcyA9IHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODAtI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI4MTpcdC5jZ3JvdXBfaW5pdFx0XHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0LFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjgyLVx0LmNncm91cF9leGl0XHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2V4aXQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzI2PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQgX19icGZfb3BzX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM0NS0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzQ2Olx0LmNwdWN0bF9pbml0XHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNDctXHQuY3B1Y3RsX2V4aXRcdFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfZXhpdCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzgzPXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5MC0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDc5MTpcdFtTQ1hfT1BfSURYKGNncm91cF9pbml0KV1cdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5Mi1cdFtTQ1hfT1BfSURYKGNncm91cF9leGl0KV1cdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA4OTg9c3RhdGljIGludCBfX2luaXQgc2N4X2luaXQodm9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTU0LSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTU1Olx0Q0lEX09GRlNFVF9NQVRDSChjZ3JvdXBfaW5pdCwgY3B1Y3RsX2luaXQpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cdENJRF9PRkZTRVRfTUFUQ0goY2dyb3VwX2V4aXQsIGNwdWN0bF9leGl0KTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjQ4PXN0cnVjdCBzY3hfZXhpdF90YXNrX2FyZ3Mge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNTItXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjUzOi8qIGFyZ3VtZW50IGNvbnRhaW5lciBmb3Igb3BzLmNncm91cF9pbml0KCkgKi9cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoyNTQ6c3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNTUtXHQvKiB0aGUgd2VpZ2h0IG9mIHRoZSBjZ3JvdXAgWzEuLjEwMDAwXSAqL1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0zMjI9c3RydWN0IHNjaGVkX2V4dF9vcHMge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTMtXHQvKipcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NTQ6XHQgKiBAY2dyb3VwX2luaXQ6IEluaXRpYWxpemUgYSBjZ3JvdXBcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NTUtXHQgKiBAY2dycDogY2dyb3VwIGJlaW5nIGluaXRpYWxpemVkXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY2Mi1cdCAqIENncm91cCBoYW5kb3ZlcnMgYWxzbyBnZW5lcmF0ZSB0aGVzZSBvcHM6IGFuIGVuYWJsaW5nIHN1Yi1zY2hlZHVsZXJcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NjM6XHQgKiByZWNlaXZlcyBvcHMuY2dyb3VwX2luaXQoKSBmb3IgZXZlcnkgY2dyb3VwIGluIGl0cyBzdWJ0cmVlIHdoaWxlIHRoZVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY2NC1cdCAqIHByZXZpb3VzIHNjaGVkIHJlY2VpdmVzIG9wcy5jZ3JvdXBfZXhpdCgpLCBhbmQgZGlzYWJsaW5nIHJldmVyc2VzIHRoZVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NzUtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NzY6XHRzMzIgKCpjZ3JvdXBfaW5pdCkoc3RydWN0IGNncm91cCAqY2dycCxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2Nzc6XHRcdFx0ICAgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzICphcmdzKTtcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NzgtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY4My1cdCAqIEV4aXQgQGNncnAgZm9yIHNjaGVkX2V4dCwgZGVsaXZlcmVkIHRvIHRoZSBzY2hlZCB3aG9zZVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY4NDpcdCAqIG9wcy5jZ3JvdXBfaW5pdCgpIGl0IHBhaXJzIHdpdGgsIGVpdGhlciB3aGVuIHRoZSBCUEYgc2NoZWR1bGVyIGlzXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNjg1LVx0ICogYmVpbmcgdW5sb2FkZWQgb3Igd2hlbiBAY2dycCBpcyBkZXN0cm95ZWQuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay5cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNzA0LVx0ICogb3BzLmV4aXRfdGFzaygpIGFuZCBvcHMuaW5pdF90YXNrKCkgaW5zdGVhZC4gQGZyb20gYW5kIEB0byBjYW5cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3MDU6XHQgKiByZWZlcmVuY2UgY2dyb3VwcyB0aGUgc2NoZWQgbmV2ZXIgcmVjZWl2ZWQgb3BzLmNncm91cF9pbml0KCkgZm9yLCBhc1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTcwNi1cdCAqIHRoZSBjcHUgY29udHJvbGxlciBjYW4gYmUgY29hcnNlciB0aGFuIHRoZSBzdWItc2NoZWR1bGVyIHRvcG9sb2d5LlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NDUtXHQgKiBkZWxpdmVyZWQgdG8gQGNncnAmIzM5O3MgcGFyZW50JiMzOTtzIHNjaGVkLiBUaGF0IHNjaGVkIG1heSBuZXZlciBoYXZlIHNlZW5cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3NDY6XHQgKiBvcHMuY2dyb3VwX2luaXQoKSBmb3IgQGNncnAgLSBhdCBhIHN1Yi1zY2hlZHVsZXIgYXR0YWNoIHBvaW50LCB0aGVcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NDctXHQgKiBwYXJlbnQgc2NoZWQgdHJhY2tzIEBjZ3JwIHRocm91Z2ggb3BzLnN1Yl9hdHRhY2goKSBpbnN0ZWFkLlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0xMDQ2PXN0cnVjdCBzY2hlZF9leHRfb3BzX2NpZCB7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwNzItI2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxMDczOlx0czMyICgqY3B1Y3RsX2luaXQpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3NC1cdHZvaWQgKCpjcHVjdGxfZXhpdCkoc3RydWN0IGNncm91cCAqY2dycCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xMjk0PXN0YXRpYyB2b2lkIHNjeF9mYWlsX3BhcmVudChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzM2LSAqICVTQ1hfVEdfSU5JVEVEIHN0YXlzIHNldCB0aHJvdWdob3V0LCBleGNlcHQgZm9yIGEgdGFza19ncm91cCB3aG9zZVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzM3OiAqIG9wcy5jZ3JvdXBfaW5pdCgpIGZhaWxlZCBvbiB0aGUgcGFyZW50IChzZWUgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZSgpKTpcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMzOC0gKiB0aGVyZSBpcyBub3RoaW5nIHRvIGV4aXQgZnJvbSB0aGUgcGFyZW50IGFuZCAlU0NYX1RHX0lOSVRFRCBpcyBzZXQgYmFjayB3aXRoXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xMzQ5PXN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNTgtXHRcdHN0cnVjdCB0YXNrX2dyb3VwICp0ZyA9IGNzc190Zyhjc3MpO1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzU5Olx0XHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9IHtcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTM2MC1cdFx0XHQud2VpZ2h0ID0gdGctXHUwMDNlc2N4LndlaWdodCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNzAtXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzNzE6XHRcdGlmIChTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX2luaXQpKSB7XG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjEzNzI6XHRcdFx0cmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy1cdTAwM2VjZ3JvdXAsIFx1MDAyNmFyZ3MpO1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzczLVx0XHRcdGlmIChyZXQpIHtcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTM3NDpcdFx0XHRcdHNjeF9lcnJvcihzY2gsIFwmIzM0O29wcy5jZ3JvdXBfaW5pdCgpIGZhaWxlZCAoJWQpXCYjMzQ7LCByZXQpO1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzc1LVx0XHRcdFx0Z290byBlcnI7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzkwLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzkxOlx0XHQvKiBza2lwIHRoZSBleGl0IGlmIHRoZSBwYXJlbnQmIzM5O3Mgb3BzLmNncm91cF9pbml0KCkgZmFpbGVkICovXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzOTItXHRcdGlmICgodGctXHUwMDNlc2N4LmZsYWdzIFx1MDAyNiBTQ1hfVEdfSU5JVEVEKSBcdTAwMjZcdTAwMjYgU0NYX0hBU19PUChwYXJlbnQsIGNncm91cF9leGl0KSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0MjctICogdGFzayByZS1ob21pbmcuIFRoZSByZW1haW5pbmcgdGFza19ncm91cHMgYXJlIHB1bnRlZDogdGhleSBtb3ZlIHRvIHRoZSBwYXJlbnRcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQyODogKiBhbnl3YXkgd2l0aCAlU0NYX1RHX0lOSVRFRCBjbGVhcmVkLCBhcyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgb3IgbmV2ZXIgcmFuXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0MjktICogZm9yIHRoZW0uIEEgcHVudGVkIHRhc2tfZ3JvdXAgZ2V0cyBubyBjZ3JvdXAgb3BzLiBUaGUgZHlpbmcgcGFyZW50JiMzOTtzIG93blxuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTQzOD1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NTMtXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjE0NTQ6XHRcdC8qIHNraXAgdGhlIGV4aXQgaWYgQHNjaCYjMzk7cyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgZm9yIHRoZSB0ZyAqL1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDU1LVx0XHRpZiAoKHRnLVx1MDAzZXNjeC5mbGFncyBcdTAwMjYgU0NYX1RHX0lOSVRFRCkgXHUwMDI2XHUwMDI2IFNDWF9IQVNfT1Aoc2NoLCBjZ3JvdXBfZXhpdCkpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDYyLVx0XHRzdHJ1Y3QgdGFza19ncm91cCAqdGcgPSBjc3NfdGcoY3NzKTtcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ2MzpcdFx0c3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7XG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjQtXHRcdFx0LndlaWdodCA9IHRnLVx1MDAzZXNjeC53ZWlnaHQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDkwLVxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxNDkxOlx0XHRpZiAoU0NYX0hBU19PUChwYXJlbnQsIGNncm91cF9pbml0KSkge1xua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxNDkyOlx0XHRcdHJldCA9IFNDWF9DQUxMX09QX1JFVChwYXJlbnQsIGNncm91cF9pbml0LCBOVUxMLCBjc3MtXHUwMDNlY2dyb3VwLCBcdTAwMjZhcmdzKTtcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTQ5My1cdFx0XHRpZiAocmV0KSB7XG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjE0OTQ6XHRcdFx0XHRzY3hfZXJyb3IocGFyZW50LCBcJiMzNDtvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgKCVkKSB3aGlsZSBkaXNhYmxpbmcgYSBzdWItc2NoZWR1bGVyXCYjMzQ7LFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDk1LVx0XHRcdFx0XHQgIHJldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTA5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTY2hlZHVsZXIgRXh0ZW5zaW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRGAgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBhY3R1YWxseSBlbmFibGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgY2dyb3VwX2luaXRgIHdpdGhpbiB0aGUgc2NoZWR1bGVyIGV4dGVuc2lvbiAoYHNjaGVkX2V4dGApIGZyYW1ld29yay4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGFuZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGJyb2FkZXIgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayB0aGUgYGtlcm5lbC9zY2hlZC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpb25zIGZvciBgRVhUX0dST1VQX1NDSEVEYCBhbmQgaG9wZWZ1bGx5IGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBmZWF0dXJlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlZHVsaW5nIGFyY2hpdGVjdHVyZS4gVGltZSB0byBkaWcgaW4gYW5kIGNvbmZpcm0gbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nLCBhbmQgcG90ZW50aWFsbHkgdW5jb3ZlciBzb21lIG5ldyBpbnNpZ2h0cyBhYm91dCB0aGlzIHNlY3Rpb24gb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhUX0dST1VQX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTg5NTE9dm9pZCBfX2luaXQgc2NoZWRfaW5pdCh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3My0jZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk3NDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2NvcmUuYy04OTc1LVx0c2N4X3RnX2luaXQoXHUwMDI2cm9vdF90YXNrX2dyb3VwKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk3NjojZW5kaWYgLyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2NvcmUuYy04OTc3LSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRURcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTM3OTA9c3RhdGljIHZvaWQgdGFza190aWNrX3NjeChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBxdWV1ZWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODA4LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozODA5OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MTAtc3RhdGljIHN0cnVjdCBjZ3JvdXAgKnRnX2NncnAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgyNC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgyNTojZWxzZVx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODI2LVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgyOC1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgyOTojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgzMC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ2NDA9Ym9vbCBzY3hfY2FuX3N0b3BfdGljayhzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY3NS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDY3NjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00Njc3LVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk0Mz12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0Zyxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5NjMtfVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTY0OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTY1LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTY2OiNpZiBkZWZpbmVkKENPTkZJR19FWFRfR1JPVVBfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX0VYVF9TVUJfU0NIRUQpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5Njctc3RhdGljIHN0cnVjdCBjZ3JvdXAgKnJvb3RfY2dyb3VwKHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTc3PXZvaWQgc2N4X2Nncm91cF9sb2NrKHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTc5LVx0Y2dyb3VwX2xvY2soKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk4MDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTgxLVx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk4NT12b2lkIHNjeF9jZ3JvdXBfdW5sb2NrKHZvaWQpXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5ODYte1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTg3OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5ODgtXHRwZXJjcHVfdXBfd3JpdGUoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk5MS19XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5OTI6I2Vsc2VcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgfHwgQ09ORklHX0VYVF9TVUJfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk5My1zdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXAgKnJvb3RfY2dyb3VwKHZvaWQpIHsgcmV0dXJuIE5VTEw7IH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5OTU9c3RhdGljIGlubGluZSB2b2lkIHNjeF9jZ3JvdXBfdW5sb2NrKHZvaWQpIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5OTY6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEIHx8IENPTkZJR19FWFRfU1VCX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTctXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01MTA3PXN0YXRpYyB2b2lkIGRlc3Ryb3lfZHNxKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgdTY0IGRzcV9pZClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxNDUtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNDY6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE0Ny1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX2V4aXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODA3Mj1zdGF0aWMgaW50IGJwZl9zY3hfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNzktXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBpbml0X3Rhc2spOlxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDgwOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwODEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBzY2hlZF9leHRfb3BzLCBjZ3JvdXBfaW5pdCk6XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjM3PXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7fVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MjM4OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyMzktc3RhdGljIHMzMiBzY2hlZF9leHRfb3BzX19jZ3JvdXBfaW5pdChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgKmFyZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNDY9c3RhdGljIHZvaWQgc2NoZWRfZXh0X29wc19fY2dyb3VwX3NldF9pZGxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI0NzojZW5kaWZcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI0OC1zdGF0aWMgczMyIHNjaGVkX2V4dF9vcHNfX3N1Yl9hdHRhY2goc3RydWN0IHNjeF9zdWJfYXR0YWNoX2FyZ3MgKmFyZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgyNTk9c3RhdGljIHN0cnVjdCBzY2hlZF9leHRfb3BzIF9fYnBmX29wc19zY2hlZF9leHRfb3BzID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI3OS1cdC5kaXNhYmxlXHRcdD0gc2NoZWRfZXh0X29wc19fZGlzYWJsZSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI4MDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjgxLVx0LmNncm91cF9pbml0XHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzI2PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQgX19icGZfb3BzX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM0NC1cdC5kaXNhYmxlXHRcdD0gc2NoZWRfZXh0X29wc19fZGlzYWJsZSxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODM0NTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzQ2LVx0LmNwdWN0bF9pbml0XHRcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDc4Mz1zdGF0aWMgY29uc3QgdTMyIHNjeF9rZl9hbGxvd19mbGFnc1tdID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3ODktXHRbU0NYX09QX0lEWChkdW1wKV1cdFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwNzkwOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkxLVx0W1NDWF9PUF9JRFgoY2dyb3VwX2luaXQpXVx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5Ny1cdFtTQ1hfT1BfSURYKGNncm91cF9zZXRfaWRsZSldXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTg6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzk5LVx0W1NDWF9PUF9JRFgoc3ViX2F0dGFjaCldXHQ9IFNDWF9LRl9BTExPV19VTkxPQ0tFRCxcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1My1cdENJRF9PRkZTRVRfTUFUQ0goZHVtcF9jcHUsIGR1bXBfY2lkKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5NTQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA5NTUtXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9pbml0LCBjcHVjdGxfaW5pdCk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMTA1MT1fX2luaXRjYWxsKHNjeF9pbml0KTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTExMDYxLSAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMTA2MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2My1ERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9iYW5kd2lkdGhfbWF5X3NsZWVwKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTEwNjQ6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD03MD1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X3VwZGF0ZV9pZGxlKHN0cnVjdCBycSAqcnEsIGJvb2wgaWRsZSwgYm9vbCBkb19ub3RpZnkpIHt9XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaC03My0jaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo3NDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC03NS12b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04Mz12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4NDojZWxzZVx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04NS1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7fVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTM9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjk0OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC05NS0jZW5kaWZcdC8qIENPTkZJR19DR1JPVVBfU0NIRUQgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjM1PXN0cnVjdCBzY3hfaW5pdF90YXNrX2FyZ3Mge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNDAtXHRib29sXHRcdFx0Zm9yaztcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoyNDE6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yNDItXHQvKiB0aGUgY2dyb3VwIHRoZSB0YXNrIGlzIGpvaW5pbmcgKi9cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzIyPXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNjUxLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY1MjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1My1cdC8qKlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODYtXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6Nzg3OiNlbmRpZlx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc4OC1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTA0Nj1zdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQge1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDcxLVx0dm9pZCAoKmR1bXBfdGFzaykoc3RydWN0IHNjeF9kdW1wX2N0eCAqY3R4LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwNzI6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDczLVx0czMyICgqY3B1Y3RsX2luaXQpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XG4tLVxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwODMtXHR2b2lkICgqY3B1Y3RsX3NldF9pZGxlKShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwODQ6I2VuZGlmXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA4NS1cdHMzMiAoKnN1Yl9hdHRhY2gpKHN0cnVjdCBzY3hfc3ViX2F0dGFjaF9hcmdzICphcmdzKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjA3OT12b2lkIHNjeF9kaXNhYmxlX2FuZF9leGl0X3Rhc2soc3RydWN0IHNjeF9zY2hlZCAqc2NoLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjIwODA6I2lmIGRlZmluZWQoQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCkgfHwgZGVmaW5lZChDT05GSUdfRVhUX1NVQl9TQ0hFRClcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0yMDgxLXZvaWQgc2N4X2Nncm91cF9sb2NrKHZvaWQpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTI5ND1zdGF0aWMgdm9pZCBzY3hfZmFpbF9wYXJlbnQoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxuLS1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMyMC1cbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTMyMTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzIyLS8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2UgbmVlZCBib3RoIGBDT05GSUdfU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENPTkZJR19FWFRfR1JPVVBfU0NIRURgLiBCdXQgaG9sZCBvbiwgYmVmb3JlIEkganVzdCBibGl0aGVseSBhc3N1bWUgSSBjYW4gZW5hYmxlIHRoZW0sIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYSBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gYENPTkZJR19FWFRfR1JPVVBfU0NIRURgIG1pZ2h0IGhpbmdlIG9uIGBDT05GSUdfQ0dST1VQX1NDSEVEYC4gSXTigJlzIHRoZSB1c3VhbCBkYW5jZSB3aXRoIHRoZXNlIHNldHRpbmdzIOKAkyB5b3UgY2FuJiMzOTt0IGFsd2F5cyBqdXN0IGZsaXAgdGhlIHN3aXRjaCB3aXRob3V0IGNoZWNraW5nIHVwc3RyZWFtLiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBhbmQgZW5kIHVwIHdpdGggYSBrZXJuZWwgdGhhdCB3b27igJl0IGJvb3Qgb3IgcGVyZm9ybXMgdW5wcmVkaWN0YWJseS4gUmlnaHQsIGxldOKAmXMgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBkaWcgaW50byBga2VybmVsL3NjaGVkL0tjb25maWdgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVwZW5kZW5jeSBoaWVyYXJjaHkuIFNob3VsZG7igJl0IHRha2UgbG9uZyB0byBzb3J0IHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFRfR1JPVVBfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbi4gVGhlIG5hdHVyYWwgZmlyc3Qgc3RlcCwgb2YgY291cnNlLCBpcyB0byBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgaGVhcnQgb2YgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBJdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgYSBsb3Qgb2YgdGhlIGNvcmUgb3B0aW9ucywgZXNwZWNpYWxseSB0aGUgb25lcyByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uLiBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGEgc3BlY2lmaWMgYXNwZWN0IGlzIGNvbnRyb2xsZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUX0dST1VQX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMTk2PWNvbmZpZyBSVF9HUk9VUF9TQ0hFRF9ERUZBVUxUX0RJU0FCTEVEXG4tLVxuaW5pdC9LY29uZmlnLTEyMDYtXG5pbml0L0tjb25maWc6MTIwNzpjb25maWcgRVhUX0dST1VQX1NDSEVEXG5pbml0L0tjb25maWctMTIwOC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIEtjb25maWcgZm9yIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB3b3Jrcy4gV2hlcmUgZG9lcyB0aGlzIHN0YXJ0PyBSaWdodCwgYGluaXQvS2NvbmZpZ2AgaXMgdXN1YWxseSBhIGdvb2QgYmV0LCBlc3BlY2lhbGx5IGZvciBjb3JlIGluaXRpYWxpemF0aW9uIHN0dWZmLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhcm91bmQgbGluZSAxMjA3LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIGFuZCBob3cgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaW5rZWQgdG9nZXRoZXIgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHZhcmlvdXMgc2V0dGluZ3MuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byByZWNvbnN0cnVjdCB0aGUgbG9naWMgaW4gbXkgaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExOTA6XHRcdCAgVGhpcyBmZWF0dXJlIGxldHMgeW91IGV4cGxpY2l0bHkgYWxsb2NhdGUgcmVhbCBDUFUgYmFuZHdpZHRoXG4xMTkxOlx0XHQgIHRvIHRhc2sgZ3JvdXBzLiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvXG4xMTkyOlx0XHQgIHNjaGVkdWxlIHJlYWx0aW1lIHRhc2tzIGZvciBub24tcm9vdCB1c2VycyB1bnRpbCB5b3UgYWxsb2NhdGVcbjExOTM6XHRcdCAgcmVhbHRpbWUgYmFuZHdpZHRoIGZvciB0aGVtLlxuMTE5NDpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE5NTpcdFxuMTE5NjpcdGNvbmZpZyBSVF9HUk9VUF9TQ0hFRF9ERUZBVUxUX0RJU0FCTEVEXG4xMTk3Olx0XHRib29sIFwmIzM0O1JlcXVpcmUgYm9vdCBwYXJhbWV0ZXIgdG8gZW5hYmxlIGdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX1JSL0ZJRk9cJiMzNDtcbjExOTg6XHRcdGRlcGVuZHMgb24gUlRfR1JPVVBfU0NIRURcbjExOTk6XHRcdGRlZmF1bHQgblxuMTIwMDpcdFx0aGVscFxuMTIwMTpcdFx0ICBXaGVuIHNldCwgdGhlIFJUIGdyb3VwIHNjaGVkdWxpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVGhlIG9wdGlvblxuMTIwMjpcdFx0ICBpcyBpbiBpbnZlcnRlZCBmb3JtIHNvIHRoYXQgbWVyZSBSVF9HUk9VUF9TQ0hFRCBlbmFibGVzIHRoZSBncm91cFxuMTIwMzpcdFx0ICBzY2hlZHVsaW5nLlxuMTIwNDpcdFxuMTIwNTpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMjA2Olx0XG4xMjA3Olx0Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxuMTIwODpcdFx0Ym9vbFxuMTIwOTpcdFx0ZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXHUwMDI2XHUwMDI2IENHUk9VUF9TQ0hFRFxuMTIxMDpcdFx0c2VsZWN0IEdST1VQX1NDSEVEX1dFSUdIVFxuMTIxMTpcdFx0c2VsZWN0IEdST1VQX1NDSEVEX0JBTkRXSURUSFxuMTIxMjpcdFx0ZGVmYXVsdCB5XG4xMjEzOlx0XG4xMjE0Olx0ZW5kaWYgI0NHUk9VUF9TQ0hFRFxuMTIxNTpcdFxuMTIxNjpcdGNvbmZpZyBFWFRfU1VCX1NDSEVEXG4xMjE3Olx0ICAgICAgICBkZWZfYm9vbCB5XG4xMjE4Olx0ICAgICAgICBkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcdTAwMjZcdTAwMjYgQ0dST1VQU1xuMTIxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkwOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBib3RoIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCB0byBiZSBlbmFibGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGRvY3VtZW50ZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2VzLCBjaGVja2luZyB0aGUgYGluaXQvS2NvbmZpZ2AsIGBrZXJuZWwvS2NvbmZpZy5wcmVlbXB0YCwgYW5kIGBrZXJuZWwvc2NoZWQvS2NvbmZpZ2AgZmlsZXMuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBkZWFsaW5nIHdpdGggc2NoZWR1bGVyLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgdGhleSYjMzk7bGwgbGlrZWx5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBuZWVkZWQgdG8gcHJvY2VlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaW4gdGhvc2UgS2NvbmZpZyBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0PTE1NT1jb25maWcgU0NIRURfQ09SRVxuLS1cbmtlcm5lbC9LY29uZmlnLnByZWVtcHQtMTcyLVxua2VybmVsL0tjb25maWcucHJlZW1wdDoxNzM6Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNzQtXHRib29sIFwmIzM0O0V4dGVuc2libGUgU2NoZWR1bGluZyBDbGFzc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUHJlZW1wdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCBwcmVlbXB0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBga2VybmVsL0tjb25maWcucHJlZW1wdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzMuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcmVlbXB0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIGxpZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBjaG9pY2VzIHRoZXJlIHRoYXQgZHJpdmUgdGhlIGJlaGF2aW9yOiB3aGV0aGVyIGl0JiMzOTtzIGZ1bGwgcHJlZW1wdGlvbiwgdm9sdW50YXJ5IHByZWVtcHRpb24sIG9yIG1heWJlIHNvbWUgbW9yZSBudWFuY2VkIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGF1dGhvcnMgY29uc2lkZXJlZCBjcml0aWNhbCBpbiBtYWtpbmcgdGhlaXIgZGVjaXNpb25zLiBJdCYjMzk7cyBwcm9iYWJseSB0aGUgYmFzaXMgdG8gc2VlIHRoZSBpbnRlci1yZWxhdGVkIGltcGFjdHMgaW4gb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvS2NvbmZpZy5wcmVlbXB0JiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHRcdCAgVXNlIG9mIHRoaXMgZmVhdHVyZSBpbmNsdWRlczpcbiAxNjY6XHRcdCAgIC0gbWl0aWdhdGlvbiBvZiBzb21lIChub3QgYWxsKSBTTVQgc2lkZSBjaGFubmVscztcbiAxNjc6XHRcdCAgIC0gbGltaXRpbmcgU01UIGludGVyZmVyZW5jZSB0byBpbXByb3ZlIGRldGVybWluaXNtIGFuZC9vciBwZXJmb3JtYW5jZS5cbiAxNjg6XHRcbiAxNjk6XHRcdCAgU0NIRURfQ09SRSBpcyBkZWZhdWx0IGRpc2FibGVkLiBXaGVuIGl0IGlzIGVuYWJsZWQgYW5kIHVudXNlZCxcbiAxNzA6XHRcdCAgd2hpY2ggaXMgdGhlIGxpa2VseSB1c2FnZSBieSBMaW51eCBkaXN0cmlidXRpb25zLCB0aGVyZSBzaG91bGRcbiAxNzE6XHRcdCAgYmUgbm8gbWVhc3VyYWJsZSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UuXG4gMTcyOlx0XG4gMTczOlx0Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxuIDE3NDpcdFx0Ym9vbCBcJiMzNDtFeHRlbnNpYmxlIFNjaGVkdWxpbmcgQ2xhc3NcJiMzNDtcbiAxNzU6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTEwgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IERFQlVHX0lORk9fQlRGXG4gMTc2Olx0XHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcbiAxNzc6XHRcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxuIDE3ODpcdFx0aGVscFxuIDE3OTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgbmV3IHNjaGVkdWxlciBjbGFzcyBzY2hlZF9leHQgKFNDWCksIHdoaWNoXG4gMTgwOlx0XHQgIGFsbG93cyBzY2hlZHVsaW5nIHBvbGljaWVzIHRvIGJlIGltcGxlbWVudGVkIGFzIEJQRiBwcm9ncmFtcyB0b1xuIDE4MTpcdFx0ICBhY2hpZXZlIHRoZSBmb2xsb3dpbmc6XG4gMTgyOlx0XG4gMTgzOlx0XHQgIC0gRWFzZSBvZiBleHBlcmltZW50YXRpb24gYW5kIGV4cGxvcmF0aW9uOiBFbmFibGluZyByYXBpZFxuIDE4NDpcdFx0ICAgIGl0ZXJhdGlvbiBvZiBuZXcgc2NoZWR1bGluZyBwb2xpY2llcy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3OTkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYm9sZGVkIGhlYWRlcjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgd2UmIzM5O3JlIGF0IGEgcG9pbnQgd2hlcmUgd2UgbmVlZCB0byBlbnN1cmUgY2VydGFpbiBrZXJuZWwgZnVuY3Rpb25hbGl0aWVzIGFyZSBlbmFibGVkLiBUaGUgaW1tZWRpYXRlIHJlcXVpcmVtZW50cyBhcmUgYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgLiBTdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIHdoZXJlIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYENHUk9VUF9TQ0hFRGA/IEFoLCB5ZXMsIEkgcmVjYWxsIHNlZWluZyB0aGF0IGluIGBpbml0L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aGUgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBrZXJuZWwgc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBzZXR0aW5ncywgZXNwZWNpYWxseSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGNncm91cHMuIExvb2tzIGxpa2Ugd2UgYXJlIG9uIHRoZSByaWdodCB0cmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9TQ0hFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTE0Nz1jb25maWcgQ0dST1VQX1dSSVRFQkFDS1xuLS1cbmluaXQvS2NvbmZpZy0xMTUxLVxuaW5pdC9LY29uZmlnOjExNTI6bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTUzLVx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjEwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgQ2hlY2sqKgoKQWxyaWdodCwgc28gYENHUk9VUF9TQ0hFRGAgaXMgYSBtZW51Y29uZmlnIG9wdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhpcyByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgc3Vic3lzdGVtcyBpdCYjMzk7cyB0aWVkIHRvLCBhbnkgb3RoZXIgY29udHJvbCBncm91cCBvcHRpb25zIGl0IG1hbmRhdGVzPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmN5IGNoYWluIGlzIGNyaXRpY2FsLiBJdCBhdm9pZHMgYSBsb3Qgb2YgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUgZHVyaW5nIGludGVncmF0aW9uIGFuZCB0cm91Ymxlc2hvb3RpbmcsIGVuc3VyZXMgSSBlbmFibGUgYWxsIHRoZSBuZWVkZWQgcGFydHMsIGFuZCBwb3RlbnRpYWxseSBoZWxwcyB0byB1bmRlcnN0YW5kIGNvbmZsaWN0cyB3aXRoIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBrY29uZmlnIHN0cnVjdHVyZSBhbmQgdGhlIGNvZGUgaXRzZWxmIHRvIG1hcCBvdXQgdGhvc2UgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRob3NlIGxpbmtzIGlzIHRoZSBmb3VuZGF0aW9uIGZvciBwcm9wZXJseSBjb25maWd1cmluZyB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE0NTpcdFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuMTE0NjpcdFxuMTE0NzpcdGNvbmZpZyBDR1JPVVBfV1JJVEVCQUNLXG4xMTQ4Olx0XHRib29sXG4xMTQ5Olx0XHRkZXBlbmRzIG9uIE1FTUNHIFx1MDAyNlx1MDAyNiBCTEtfQ0dST1VQXG4xMTUwOlx0XHRkZWZhdWx0IHlcbjExNTE6XHRcbjExNTI6XHRtZW51Y29uZmlnIENHUk9VUF9TQ0hFRFxuMTE1MzpcdFx0Ym9vbCBcJiMzNDtDUFUgY29udHJvbGxlclwmIzM0O1xuMTE1NDpcdFx0ZGVmYXVsdCBuXG4xMTU1Olx0XHRoZWxwXG4xMTU2Olx0XHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxuMTE1NzpcdFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcbjExNTg6XHRcdCAgdGFza3MuXG4xMTU5Olx0XG4xMTYwOlx0aWYgQ0dST1VQX1NDSEVEXG4xMTYxOlx0Y29uZmlnIEdST1VQX1NDSEVEX1dFSUdIVFxuMTE2MjpcdFx0ZGVmX2Jvb2wgblxuMTE2MzpcdFxuMTE2NDpcdGNvbmZpZyBHUk9VUF9TQ0hFRF9CQU5EV0lEVEhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1OTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IENHUk9VUF9TQ0hFRCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ0dST1VQX1NDSEVEYCBwYXRjaC4gR29vZCwgbm8gb2J2aW91cyBkZXBlbmRlbmNpZXMg4oCTIHRoYXQmIzM5O3MgYSBwbHVzIGZvciBpc29sYXRpb24uIENvbmZpZy13aXNlLCBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENHUk9VUF9TQ0hFRGAgYXJlIHRoZSBrZXkgZmxhZ3MuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gSSBzZWUgdGhhdCBnZXRzIHVzZWQgaW4gYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIGNncm91cCBpbml0aWFsaXphdGlvbiBhbmQgc3ViLXNjaGVkdWxlciBhdHRhY2htZW50LCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuCgpOb3csIHdoaWNoIG9mIHRoZXNlIGFyZSB0aGUgKmJlc3QqIHRhcmdldHM/IEkgbmVlZCB0byBuYXJyb3cgaXQgZG93bi4gTGV0JiMzOTtzIGxpc3QgdGhvc2UgZnVuY3Rpb25zIG91dCBhcyBhIGJhc2lzIGZvciBmdXp6aW5nOiBgc2N4X3RnX29ubGluZWAsIGBzY3hfY2dyb3VwX2luaXRgLCBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCwgYHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWVgLCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAuCgpOb3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXNlIGFyZSBzdGF0aWMuIFRoYXQgaW1wYWN0cyBjYWxsIHZpc2liaWxpdHkgYW5kIGZ1enppbmcgc3RyYXRlZ2llcy4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZTogYHNjeF90Z19vbmxpbmVgIGlzbiYjMzk7dCBzdGF0aWMsIHdoaWNoIGlzIGdvb2QgZnJvbSBhIGNhbGwgcGVyc3BlY3RpdmU7IGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGlzIGFsc28gbm9uLXN0YXRpYywgYW5vdGhlciBnb29kIHNpZ24uIGBzY3hfY2dyb3VwX2luaXRgLCBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCwgYW5kIGBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlYCBhcmUgc3RhdGljLiBTbywgSSBoYXZlIHRvIHdvcmsgYXJvdW5kIHRoYXQuCgpHaXZlbiBgc2N4X3RnX29ubGluZWAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGFyZW4mIzM5O3Qgc3RhdGljLCBJIHNob3VsZCBub3cgZm9jdXMgb24gd2hlcmUgdGhvc2UgYXJlIGNhbGxlZCB0byBnZXQgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50cnlwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjeF90Z19vbmxpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9jb3JlLmM9OTU2MT1zdGF0aWMgaW50IGNwdV9jZ3JvdXBfY3NzX29ubGluZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTU2Ni1cbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTU2NzpcdHJldCA9IHNjeF90Z19vbmxpbmUodGcpO1xua2VybmVsL3NjaGVkL2NvcmUuYy05NTY4LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3MzI9c3RhdGljIHN0cnVjdCBzY3hfc2NoZWQgKnNjeF90Z19rbm9iX3NjaGVkKHN0cnVjdCB0YXNrX2dyb3VwICp0Zylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NDEtXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ3NDI6aW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzQzLXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTc1PXZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NzY6aW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzctdm9pZCBzY3hfdGdfb2ZmbGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODU9c3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODY6c3RhdGljIGlubGluZSBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpIHsgcmV0dXJuIDA7IH1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODctc3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19vZmZsaW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGZyb20gYSBrZXJuZWwtbGV2ZWwgQ1BVIHJlc291cmNlIG1hbmFnZW1lbnQgcGVyc3BlY3RpdmU6CgoqKk15IEN1cnJlbnQgQ1BVIFJlc291cmNlIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IENQVSByZXNvdXJjZXMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBjZ3JvdXAgaGllcmFyY2h5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aWNpbmcgdHdvIGtleSBmdW5jdGlvbnMgcG9wcGluZyB1cCBpbiBteSB0cmFjZTogYHNjeF90Z19vbmxpbmVgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhlIGZpcnN0LCBgc2N4X3RnX29ubGluZWAsIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYGNwdV9jZ3JvdXBfY3NzX29ubGluZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGRlZXBseSBpbnZvbHZlZCBpbiB0aGUgQ1BVIGNvbnRyb2xsZXImIzM5O3MgY2dyb3VwIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFRoYXQgbWFrZXMgc2Vuc2U7IHdoZW4gYSBuZXcgY2dyb3VwLCBvciBhIG5ldyBDUFUgcmVzb3VyY2UgaXMgYmVpbmcgYnJvdWdodCBvbmxpbmUsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBwbGF5aW5nIGEga2V5IHBhcnQuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGNvZGUgcGF0aCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhlbHBzIGluaXRpYWxpemUgYW5kIGFjdGl2YXRlIHRoZSBDUFUgcmVzb3VyY2VzLgoKVGhlbiB0aGVyZSYjMzk7cyBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgc2NoZWRfZ3JvdXBfc2V0X2lkbGVgIGlzIHJlYWxseSBpbnRlcmVzdGluZy4gVGhpcyBwb2ludHMgdG8gdGhpcyBmdW5jdGlvbiBoYXZpbmcgc29tZSByb2xlIGluIG1hbmFnaW5nIHRoZSBpZGxlIHN0YXRlIG9mIHNjaGVkdWxlciBncm91cHMsIGxpa2VseSByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgb3IgcmVzb3VyY2UgcmVjbGFtYXRpb24gYXQgdGhlIHNjaGVkdWxlciBsZXZlbCwgb3IgYXMgYSBjb25zZXF1ZW5jZSBvZiBDUFUgcmVzb3VyY2UgY29udGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGhvdyB0aGUgc2NoZWR1bGVyIGludGVyYWN0cyB3aXRoIHRoaXMgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBib3RoIG9mIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIGhvdyB3ZSBnZXQgYSB3b3JrbG9hZCBydW5uaW5nIG9uIHRoZSBDUFVzIG9mIGEgbm9kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N4X2dyb3VwX3NldF9pZGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU5PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy0xMDI2NS1cdGlmICghcmV0KVxua2VybmVsL3NjaGVkL2NvcmUuYzoxMDI2NjpcdFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTAyNjctXHRyZXR1cm4gcmV0O1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDkxMT12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyB3ZWlnaHQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI2LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTI3OnZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI4LXtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTgxPXZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODI6dm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpO1xua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTE9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOTMtc3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjE1CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDE1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBmb3IgdGhlIFNjaGVkX2V4dCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBsZWQgbWUgZG93biBhIHNwZWNpZmljIHBhdGguIEkgc2VlIHRoYXQgYHNjeF9ncm91cF9zZXRfaWRsZWAgaXMgY2FsbGVkIGZyb20gYGNwdV9pZGxlX3dyaXRlX3M2NGAsIHdoaWNoIGluIHR1cm4gaXMgdGhlIGhhbmRsZXIgZm9yIHRoZSBgY3B1LmlkbGVgIGNncm91cCBmaWxlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGZ1bmN0aW9ucyBsaWtlIGBzY3hfdGdfb25saW5lYCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAgYXMgdGhlIG1haW4gZm9jdXMuCgpIb3dldmVyLCBgc2N4X2Nncm91cF9pbml0YCBpcyBzdGF0aWMgYnV0IGNhbGxlZCBmcm9tIGBzY3hfcm9vdF9lbmFibGVfd29ya2ZuYCwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYSBCUEYgc2NoZWR1bGVyIGlzIGxvYWRlZC4gYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAgaXMgYWxzbyBzdGF0aWMsIGNhbGxlZCBmcm9tIGBzY3hfc3ViX2VuYWJsZV93b3JrZm5gLiBUaGlzIG1ha2VzIG1lIHRoaW5rIHRoYXQgYHNjeF90Z19vbmxpbmVgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYCBhcmUgc3RpbGwgdGhlIGJlc3QgY2FuZGlkYXRlcyBkdWUgdG8gdGhlaXIgZGlyZWN0IGNvbm5lY3Rpb24gdG8gdGhlIGNncm91cCBvcGVyYXRpb25zLiBXaGlsZSB0aGUgYHNjeF9zdWJfZW5hYmxlX3dvcmtmbmAgYW5kIGBzY3hfcm9vdF9lbmFibGVfd29ya2ZuYCBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHNjaGVkX2V4dCwgdGhleSBzZWVtIG1vcmUgZ2VuZXJpYy4KCk5vdywgZm9yIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGZlYXR1cmVzIGFyZSBlbmFibGVkLiBJIGRlZmluaXRlbHkgbmVlZCBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENHUk9VUF9TQ0hFRGAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcuIFllcCwgYEVYVF9HUk9VUF9TQ0hFRGAgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIGJvdGggYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgIGFyZSBvbi4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0IHNlZW1zIHRoYXQgdGhlIGBzY2hlZF9pZGxlYCBzdGF0ZSBpcyBub3cgZXhwb3NlZCB0byB0aGUgQlBGIHNjaGVkdWxlciBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbXVsdGlwbGUgcGxhY2VzOiBgc2N4X2dyb3VwX3NldF9pZGxlYCwgYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIFRoaXMgbWFrZXMgdGhlIHN0YXRlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIGNncm91cCBvcGVyYXRpb25zIGFuZCBCUEYgc2NoZWRfZXh0IHByb2dyYW1zLiBUaGF0IHNlZW1zIHByZXR0eSBmdW5jdGlvbmFsLgoKT2theSwgdGhpcyBsb29rcyBzb2xpZC4gSSBhbSB0aGlua2luZyB0aGF0IHRoaXMgY29kZSB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZy4KKiAgIGBXb3J0aEZ1enppbmdgIGlzIHRydWUuCiogICBgRm9jdXNTeW1ib2xzYDogYHNjeF90Z19vbmxpbmVgLCBgc2N4X2dyb3VwX3NldF9pZGxlYC4KKiAgIGBFbmFibGVDb25maWdzYDogYFNDSEVEX0NMQVNTX0VYVGAsIGBDR1JPVVBfU0NIRURgLgoKSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTQ0hFRF9DTEFTU19FWFQmIzM0OywKICAgICYjMzQ7Q0dST1VQX1NDSEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N4X3RnX29ubGluZSYjMzQ7LAogICAgJiMzNDtzY3hfZ3JvdXBfc2V0X2lkbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0gdG8gcGFzcyB0aGUgYHNjaGVkX2lkbGVgIHN0YXRlIG9mIGEgY2dyb3VwIHRvIHRoZSBCUEYgc2NoZWR1bGVyIGR1cmluZyBjZ3JvdXAgaW5pdGlhbGl6YXRpb24gKGBvcHMuY2dyb3VwX2luaXQoKWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBkYXRhIHRvIEJQRiBwcm9ncmFtcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY3JlYXRpb24gYW5kIGBjcHUuaWRsZWAgbW9kaWZpY2F0aW9uIHdoaWxlIGEgc2NoZWRfZXh0IHNjaGVkdWxlciBpcyBhY3RpdmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NDSEVEX0NMQVNTX0VYVCYjMzQ7LAogICAgJiMzNDtDR1JPVVBfU0NIRUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3hfdGdfb25saW5lJiMzNDssCiAgICAmIzM0O3NjeF9ncm91cF9zZXRfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2NoZWRfZXh0IHN1YnN5c3RlbSB0byBwYXNzIHRoZSBgc2NoZWRfaWRsZWAgc3RhdGUgb2YgYSBjZ3JvdXAgdG8gdGhlIEJQRiBzY2hlZHVsZXIgZHVyaW5nIGNncm91cCBpbml0aWFsaXphdGlvbiAoYG9wcy5jZ3JvdXBfaW5pdCgpYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IGRhdGEgdG8gQlBGIHByb2dyYW1zIGFuZCBpcyByZWFjaGFibGUgdmlhIGNncm91cCBjcmVhdGlvbiBhbmQgYGNwdS5pZGxlYCBtb2RpZmljYXRpb24gd2hpbGUgYSBzY2hlZF9leHQgc2NoZWR1bGVyIGlzIGFjdGl2ZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDM6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwMzozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW5hbWVzIGBpZGxlYCB0byBgc2NoZWRfaWRsZWAgaW4gYHN0cnVjdCBzY3hfdGFza19ncm91cGAgYW5kIGFkZHMgYHNjaGVkX2lkbGVgIHRvIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLiBJdCBpbml0aWFsaXplcyB0aGlzIG5ldyBmaWVsZCBpbiBzZXZlcmFsIHBsYWNlcyB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoZS5nLiwgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyBhcmdzID0geyAuLi4gfWApLiBJbiBDLCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB6ZXJvIG91dCBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHBhZGRpbmcgYnl0ZXMuIEZ1cnRoZXJtb3JlLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCBpcyBwYXNzZWQgdG8gYSBCUEYgcHJvZ3JhbSAoa2VybmVsIHNwYWNlKSwgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNjczZGQ0N2RlMjc4YWYzZWZiZWM0OWM3Y2JjODQyZDA0N2Q3MzAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaAppbmRleCA1ODJkN2NkNGE5ODM5Li43YjljZGI2NWRlZWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmgKQEAgLTMyMyw3ICYjNDM7MzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHsKIAl1NjQJCQlid19wZXJpb2RfdXM7CiAJdTY0CQkJYndfcXVvdGFfdXM7CiAJdTY0CQkJYndfYnVyc3RfdXM7Ci0JYm9vbAkJCWlkbGU7CiYjNDM7CWJvb2wJCQlzY2hlZF9pZGxlOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jIGIva2VybmVsL3NjaGVkL2V4dC9leHQuYwppbmRleCBjNTM5ZDE1Y2RhNjM3Li40YTljMzgyOTcwOTM1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMKQEAgLTQ2ODIsNyAmIzQzOzQ2ODIsNyBAQCB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZykKIAl0Zy0mZ3Q7c2N4LndlaWdodCA9IENHUk9VUF9XRUlHSFRfREZMOwogCXRnLSZndDtzY3guYndfcGVyaW9kX3VzID0gZGVmYXVsdF9id19wZXJpb2RfdXMoKTsKIAl0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7Ci0JdGctJmd0O3NjeC5pZGxlID0gZmFsc2U7CiYjNDM7CXRnLSZndDtzY3guc2NoZWRfaWRsZSA9IGZhbHNlOwogfQogCiAvKioKQEAgLTQ3NjQsNyAmIzQzOzQ3NjQsOCBAQCBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpCiAJCQkJeyAud2VpZ2h0ID0gdGctJmd0O3NjeC53ZWlnaHQsCiAJCQkJICAuYndfcGVyaW9kX3VzID0gdGctJmd0O3NjeC5id19wZXJpb2RfdXMsCiAJCQkJICAuYndfcXVvdGFfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzLAotCQkJCSAgLmJ3X2J1cnN0X3VzID0gdGctJmd0O3NjeC5id19idXJzdF91cyB9OwomIzQzOwkJCQkgIC5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJCSAgLnNjaGVkX2lkbGUgPSB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgfTsKIAogCQkJcmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsCiAJCQkJCSAgICAgIE5VTEwsIHRnLSZndDtjc3MuY2dyb3VwLCAmYW1wO2FyZ3MpOwpAQCAtNDkzNCw3ICYjNDM7NDkzNSw3IEBAIHZvaWQgc2N4X2dyb3VwX3NldF9pZGxlKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgYm9vbCBpZGxlKQogCQlTQ1hfQ0FMTF9PUChzY2gsIGNncm91cF9zZXRfaWRsZSwgTlVMTCwgdGdfY2dycCh0ZyksIGlkbGUpOwogCiAJLyogVXBkYXRlIHRoZSB0YXNrIGdyb3VwJiMzOTtzIGlkbGUgc3RhdGUgKi8KLQl0Zy0mZ3Q7c2N4LmlkbGUgPSBpZGxlOwomIzQzOwl0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUgPSBpZGxlOwogCiAJcGVyY3B1X3VwX3JlYWQoJmFtcDtzY3hfY2dyb3VwX29wc19yd3NlbSk7CiB9CkBAIC01MTg1LDYgJiM0Mzs1MTg2LDcgQEAgc3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQkJCS5id19wZXJpb2RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3BlcmlvZF91cywKIAkJCQkuYndfcXVvdGFfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3F1b3RhX3VzLAogCQkJCS5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJCS5zY2hlZF9pZGxlID0gdGctJmd0O3NjeC5zY2hlZF9pZGxlLAogCQkJfTsKIAogCQkJcmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy0mZ3Q7Y2dyb3VwLCAmYW1wO2FyZ3MpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oCmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgKQEAgLTI1OSw2ICYjNDM7MjU5LDkgQEAgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIHsKIAl1NjQJCQlid19wZXJpb2RfdXM7CiAJdTY0CQkJYndfcXVvdGFfdXM7CiAJdTY0CQkJYndfYnVyc3RfdXM7CiYjNDM7CiYjNDM7CS8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovCiYjNDM7CWJvb2wJCQlzY2hlZF9pZGxlOwogfTsKIAogZW51bSBzY3hfY3B1X3ByZWVtcHRfcmVhc29uIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmMgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jCmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2V4dC9zdWIuYwpAQCAtMTM2MSw2ICYjNDM7MTM2MSw3IEBAIHN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkKIAkJCS5id19wZXJpb2RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X3BlcmlvZF91cywKIAkJCS5id19xdW90YV91cyA9IHRnLSZndDtzY3guYndfcXVvdGFfdXMsCiAJCQkuYndfYnVyc3RfdXMgPSB0Zy0mZ3Q7c2N4LmJ3X2J1cnN0X3VzLAomIzQzOwkJCS5zY2hlZF9pZGxlID0gdGctJmd0O3NjeC5zY2hlZF9pZGxlLAogCQl9OwogCiAJCWlmICh0Zy0mZ3Q7c2N4LnNjaGVkICE9IHBhcmVudCB8fApAQCAtMTQ2NCw2ICYjNDM7MTQ2NSw3IEBAIHN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKQogCQkJLmJ3X3BlcmlvZF91cyA9IHRnLSZndDtzY3guYndfcGVyaW9kX3VzLAogCQkJLmJ3X3F1b3RhX3VzID0gdGctJmd0O3NjeC5id19xdW90YV91cywKIAkJCS5id19idXJzdF91cyA9IHRnLSZndDtzY3guYndfYnVyc3RfdXMsCiYjNDM7CQkJLnNjaGVkX2lkbGUgPSB0Zy0mZ3Q7c2N4LnNjaGVkX2lkbGUsCiAJCX07CiAKIAkJLyogdGhlIGZpcnN0IHBhc3MgbXVzdCBoYXZlIHRyYW5zZmVycmVkIGV2ZXJ5dGhpbmcgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODkKCQkJCQkJCW91dHB1dDogMTk0CgkJCQkJCQl0aG91Z2h0czogMTk3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IHNjaGVkX2lkbGUgSW50cm9kdWN0aW9uIGFuZCBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBgaWRsZWAgdG8gYHNjaGVkX2lkbGVgIHdpdGhpbiB0aGUgYHNjeF90YXNrX2dyb3VwYCBzdHJ1Y3R1cmUuIE1vcmUgaW1wb3J0YW50bHksIGl0JiMzOTtzIGFkZGluZyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGFyZSB3ZSBvcGVuaW5nIG91cnNlbHZlcyB1cCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaGVyZT8mIzM0OwoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgcGFkZGluZyBleGlzdHMgd2l0aGluIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLCBhbmQgd2hldGhlciB0aGlzIHN0cnVjdCBpcyBzb21laG93IGV4cG9zZWQgdG8gQlBGIG9yLCB3b3JzZSwgdG8gdXNlci1zcGFjZS4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBSaWdodCwgYHdlaWdodGAgKHUzMiksIHRoZW4gYGJ3X3BlcmlvZF91c2AgKHU2NCksIHNvIHRoZXJlJiMzOTtzIGEgNC1ieXRlIHBhZGRpbmcgYWZ0ZXIgYHdlaWdodGAuIEFmdGVyIGBid19wZXJpb2RfdXNgLCBgYndfcXVvdGFfdXNgLCBhbmQgYGJ3X2J1cnN0X3VzYCAoYWxsIHU2NHMpLCB3ZSBoYXZlIGBib29sIHNjaGVkX2lkbGVgIHdoaWNoIGlzIDEgYnl0ZSwgc28gdGhlcmUmIzM5O3MgNyBieXRlcyBvZiBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgdGhpcyBzdHJ1Y3R1cmUuCgpOb3csIGhvdyBpcyBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCB1c2VkPyBBaCwgaXQmIzM5O3MgcGFzc2VkIHRvIGBjZ3JvdXBfaW5pdGAgQlBGIG9wZXJhdGlvbi4gU2luY2UgYGFyZ3NgIGlzIGJlaW5nIHBhc3NlZCB0byBCUEYsIHdoaWNoIHJ1bnMgaW4ga2VybmVsIHNwYWNlLCBpdCBjYW4gcG90ZW50aWFsbHkgcmVhZCB0aG9zZSBwYWRkaW5nIGJ5dGVzLiBCdXQgd2FpdCwgQlBGIHJ1bnMgaW4ga2VybmVsLCBzbyBhbiB1bmluaXRpYWxpemVkIHJlYWQgKnNob3VsZG4mIzM5O3QqIGNhdXNlIGEgdXNlci1zcGFjZSBpbmZvcm1hdGlvbiBsZWFrLCBpdCYjMzk7cyBqdXN0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgd2hpY2ggS01TQU4gc2hvdWxkIGRldGVjdC4gSG93ZXZlciwgaWYgYSBCUEYgcHJvZ3JhbSByZWFkcyBwYWRkaW5nIGJ5dGVzLCBpdCB3b3VsZCBiZSBhbiBpc3N1ZSBiZWNhdXNlIHRoZSBCUEYgdmVyaWZpZXIgd291bGRuJiMzOTt0IGtub3cgYWJvdXQgdGhlIHBhZGRpbmcgdW5sZXNzIGl0JiMzOTtzIGV4cGxpY2l0bHkgZGVmaW5lZC4KCkkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYGFyZ3NgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgdXNhZ2U6IGl0JiMzOTtzIGluaXRpYWxpemVkIHVzaW5nIGEgZGVzaWduYXRlZCBpbml0aWFsaXplci4gVGhpcyBtZWFucyB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcyBhcmUgemVyb2VkLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgd2Ugd2FudC4gQnV0LCBpcyB0aGF0IGd1YXJhbnRlZWQ/IEkmIzM5O20gc3VyZSBpdCYjMzk7cyB6ZXJvZWQsIGJ1dCBJJiMzOTtsbCBjaGVjayB0aGUgQyBzdGFuZGFyZCBhbmQgbWFrZSBzdXJlLiBPa2F5LCBDOTkgNi43LjggSW5pdGlhbGl6YXRpb24gc2F5cyB0aGF0IGlmIHRoZXJlIGFyZSBmZXdlciBpbml0aWFsaXplcnMgdGhhbiB0aGVyZSBhcmUgbWVtYmVycywgdGhlIHJlbWFpbmRlciBpcyBpbml0aWFsaXplZCBsaWtlIHN0YXRpYyBzdG9yYWdlLCBhbmQgd2l0aCBzdGF0aWMgc3RvcmFnZSwgJiMzNDthbnkgcGFkZGluZyBpcyBpbml0aWFsaXplZCB0byB6ZXJvIGJ5dGVzLiYjMzQ7CgpTbywgZXZlbiBpZiB0aGlzIHBhdGNoICpkaWQqIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgdXNlIG9mIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIGhlcmUgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBwYWRkaW5nIGlzIHplcm9lZC4gTGV0JiMzOTtzIHJlLWV4YW1pbmUgdGhlIHBhdGNoLiBUaGUgcGF0Y2ggKmFkZHMqIGBzY2hlZF9pZGxlYCB0byBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCwgc28gaXQgaXMgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIgYXV0b21hdGljYWxseS4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTtsbCBnbyB0aHJvdWdoIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIEFsbCBpbnN0YW5jZXMgdXNlIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLgoKTm8sIHRoZSBzdHJ1Y3R1cmUgaXMgKmZ1bGx5KiBpbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIHNpbmNlIGBhcmdzYCBpcyB1c2VkIG9ubHkgd2l0aGluIGtlcm5lbCBzcGFjZSwgYW55IHJlYWQgd2l0aGluIHRoYXQgc3BhY2Ugd291bGRuJiMzOTt0IGJlIGFuIGlzc3VlLiBUaGVyZSBpcyBubyBLTVNBTiBzcGVjaWZpYyBidWcgaGVyZS4gS0FTQU4gd291bGRuJiMzOTt0IGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYW55d2F5LiBUaGlzIHBhdGNoIGlzIHNhZmUuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb3B5LXRvLXVzZXIgc2l0dWF0aW9uLCB0aG91Z2guIEJQRiBwcm9ncmFtcyBhcmUga2VybmVsLXNwYWNlLiBUaGV5IGNhbiAqcmVhZCogdGhpcyBzdHJ1Y3QsIGJ1dCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXItc3BhY2UuIFNvLCBubyBpbmZvcm1hdGlvbiBsZWFrIHBvc3NpYmxlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGEgZnVsbHkgaW5pdGlhbGl6ZWQgZmllbGQgdG8gYSBzdHJ1Y3QgYW5kIHBhc3NpbmcgaXQgdG8gQlBGLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gSSYjMzk7bGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDAzOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbmFtZXMgYGlkbGVgIHRvIGBzY2hlZF9pZGxlYCBpbiBgc3RydWN0IHNjeF90YXNrX2dyb3VwYCBhbmQgYWRkcyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIEl0IGluaXRpYWxpemVzIHRoaXMgbmV3IGZpZWxkIGluIHNldmVyYWwgcGxhY2VzIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChlLmcuLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7IC4uLiB9YCkuIEluIEMsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIHplcm8gb3V0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcy4gRnVydGhlcm1vcmUsIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGlzIHBhc3NlZCB0byBhIEJQRiBwcm9ncmFtIChrZXJuZWwgc3BhY2UpLCBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW5hbWVzIGBpZGxlYCB0byBgc2NoZWRfaWRsZWAgaW4gYHN0cnVjdCBzY3hfdGFza19ncm91cGAgYW5kIGFkZHMgYHNjaGVkX2lkbGVgIHRvIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLiBJdCBpbml0aWFsaXplcyB0aGlzIG5ldyBmaWVsZCBpbiBzZXZlcmFsIHBsYWNlcyB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoZS5nLiwgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyBhcmdzID0geyAuLi4gfWApLiBJbiBDLCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB6ZXJvIG91dCBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHBhZGRpbmcgYnl0ZXMuIEZ1cnRoZXJtb3JlLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCBpcyBwYXNzZWQgdG8gYSBCUEYgcHJvZ3JhbSAoa2VybmVsIHNwYWNlKSwgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzoxMS41Mjg4OTA4MDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUxMTQxNzA3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfdGdfb25saW5lXCIsXG4gICAgXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbmFtZXMgYGlkbGVgIHRvIGBzY2hlZF9pZGxlYCBpbiBgc3RydWN0IHNjeF90YXNrX2dyb3VwYCBhbmQgYWRkcyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIEl0IGluaXRpYWxpemVzIHRoaXMgbmV3IGZpZWxkIGluIHNldmVyYWwgcGxhY2VzIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChlLmcuLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7IC4uLiB9YCkuIEluIEMsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIHplcm8gb3V0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcy4gRnVydGhlcm1vcmUsIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGlzIHBhc3NlZCB0byBhIEJQRiBwcm9ncmFtIChrZXJuZWwgc3BhY2UpLCBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0gdG8gcGFzcyB0aGUgYHNjaGVkX2lkbGVgIHN0YXRlIG9mIGEgY2dyb3VwIHRvIHRoZSBCUEYgc2NoZWR1bGVyIGR1cmluZyBjZ3JvdXAgaW5pdGlhbGl6YXRpb24gKGBvcHMuY2dyb3VwX2luaXQoKWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBkYXRhIHRvIEJQRiBwcm9ncmFtcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY3JlYXRpb24gYW5kIGBjcHUuaWRsZWAgbW9kaWZpY2F0aW9uIHdoaWxlIGEgc2NoZWRfZXh0IHNjaGVkdWxlciBpcyBhY3RpdmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjExLjUyODg5NTc2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MjIzMjU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM2NzNkZDQ3ZGUyNzhhZjNlZmJlYzQ5YzdjYmM4NDJkMDQ3ZDczMDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcXG5pbmRleCA1ODJkN2NkNGE5ODM5Li43YjljZGI2NWRlZWY2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oXFxuQEAgLTMyMyw3ICszMjMsNyBAQCBzdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXAge1xcbiBcXHR1NjRcXHRcXHRcXHRid19wZXJpb2RfdXM7XFxuIFxcdHU2NFxcdFxcdFxcdGJ3X3F1b3RhX3VzO1xcbiBcXHR1NjRcXHRcXHRcXHRid19idXJzdF91cztcXG4tXFx0Ym9vbFxcdFxcdFxcdGlkbGU7XFxuK1xcdGJvb2xcXHRcXHRcXHRzY2hlZF9pZGxlO1xcbiAjZW5kaWZcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvZXh0LmMgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXFxuaW5kZXggYzUzOWQxNWNkYTYzNy4uNGE5YzM4Mjk3MDkzNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXFxuKysrIGIva2VybmVsL3NjaGVkL2V4dC9leHQuY1xcbkBAIC00NjgyLDcgKzQ2ODIsNyBAQCB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG4gXFx0dGctXFx1MDAzZXNjeC53ZWlnaHQgPSBDR1JPVVBfV0VJR0hUX0RGTDtcXG4gXFx0dGctXFx1MDAzZXNjeC5id19wZXJpb2RfdXMgPSBkZWZhdWx0X2J3X3BlcmlvZF91cygpO1xcbiBcXHR0Zy1cXHUwMDNlc2N4LmJ3X3F1b3RhX3VzID0gUlVOVElNRV9JTkY7XFxuLVxcdHRnLVxcdTAwM2VzY3guaWRsZSA9IGZhbHNlO1xcbitcXHR0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgPSBmYWxzZTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQ3NjQsNyArNDc2NCw4IEBAIGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG4gXFx0XFx0XFx0XFx0eyAud2VpZ2h0ID0gdGctXFx1MDAzZXNjeC53ZWlnaHQsXFxuIFxcdFxcdFxcdFxcdCAgLmJ3X3BlcmlvZF91cyA9IHRnLVxcdTAwM2VzY3guYndfcGVyaW9kX3VzLFxcbiBcXHRcXHRcXHRcXHQgIC5id19xdW90YV91cyA9IHRnLVxcdTAwM2VzY3guYndfcXVvdGFfdXMsXFxuLVxcdFxcdFxcdFxcdCAgLmJ3X2J1cnN0X3VzID0gdGctXFx1MDAzZXNjeC5id19idXJzdF91cyB9O1xcbitcXHRcXHRcXHRcXHQgIC5id19idXJzdF91cyA9IHRnLVxcdTAwM2VzY3guYndfYnVyc3RfdXMsXFxuK1xcdFxcdFxcdFxcdCAgLnNjaGVkX2lkbGUgPSB0Zy1cXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcXG4gXFxuIFxcdFxcdFxcdHJldCA9IFNDWF9DQUxMX09QX1JFVChzY2gsIGNncm91cF9pbml0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBOVUxMLCB0Zy1cXHUwMDNlY3NzLmNncm91cCwgXFx1MDAyNmFyZ3MpO1xcbkBAIC00OTM0LDcgKzQ5MzUsNyBAQCB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcXG4gXFx0XFx0U0NYX0NBTExfT1Aoc2NoLCBjZ3JvdXBfc2V0X2lkbGUsIE5VTEwsIHRnX2NncnAodGcpLCBpZGxlKTtcXG4gXFxuIFxcdC8qIFVwZGF0ZSB0aGUgdGFzayBncm91cCdzIGlkbGUgc3RhdGUgKi9cXG4tXFx0dGctXFx1MDAzZXNjeC5pZGxlID0gaWRsZTtcXG4rXFx0dGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlID0gaWRsZTtcXG4gXFxuIFxcdHBlcmNwdV91cF9yZWFkKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuIH1cXG5AQCAtNTE4NSw2ICs1MTg2LDcgQEAgc3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbiBcXHRcXHRcXHRcXHQuYndfcGVyaW9kX3VzID0gdGctXFx1MDAzZXNjeC5id19wZXJpb2RfdXMsXFxuIFxcdFxcdFxcdFxcdC5id19xdW90YV91cyA9IHRnLVxcdTAwM2VzY3guYndfcXVvdGFfdXMsXFxuIFxcdFxcdFxcdFxcdC5id19idXJzdF91cyA9IHRnLVxcdTAwM2VzY3guYndfYnVyc3RfdXMsXFxuK1xcdFxcdFxcdFxcdC5zY2hlZF9pZGxlID0gdGctXFx1MDAzZXNjeC5zY2hlZF9pZGxlLFxcbiBcXHRcXHRcXHR9O1xcbiBcXG4gXFx0XFx0XFx0cmV0ID0gU0NYX0NBTExfT1BfUkVUKHNjaCwgY2dyb3VwX2luaXQsIE5VTEwsIGNzcy1cXHUwMDNlY2dyb3VwLCBcXHUwMDI2YXJncyk7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaCBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxcbmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXFxuKysrIGIva2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oXFxuQEAgLTI1OSw2ICsyNTksOSBAQCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xcbiBcXHR1NjRcXHRcXHRcXHRid19wZXJpb2RfdXM7XFxuIFxcdHU2NFxcdFxcdFxcdGJ3X3F1b3RhX3VzO1xcbiBcXHR1NjRcXHRcXHRcXHRid19idXJzdF91cztcXG4rXFxuK1xcdC8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovXFxuK1xcdGJvb2xcXHRcXHRcXHRzY2hlZF9pZGxlO1xcbiB9O1xcbiBcXG4gZW51bSBzY3hfY3B1X3ByZWVtcHRfcmVhc29uIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9zdWIuYyBiL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcXG5pbmRleCAwNTU0NDQ4ODM1YmQwLi5hMTdkODRkYjkzYmRkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXFxuQEAgLTEzNjEsNiArMTM2MSw3IEBAIHN0YXRpYyBzMzIgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4gXFx0XFx0XFx0LmJ3X3BlcmlvZF91cyA9IHRnLVxcdTAwM2VzY3guYndfcGVyaW9kX3VzLFxcbiBcXHRcXHRcXHQuYndfcXVvdGFfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxcbiBcXHRcXHRcXHQuYndfYnVyc3RfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxcbitcXHRcXHRcXHQuc2NoZWRfaWRsZSA9IHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSxcXG4gXFx0XFx0fTtcXG4gXFxuIFxcdFxcdGlmICh0Zy1cXHUwMDNlc2N4LnNjaGVkICE9IHBhcmVudCB8fFxcbkBAIC0xNDY0LDYgKzE0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4gXFx0XFx0XFx0LmJ3X3BlcmlvZF91cyA9IHRnLVxcdTAwM2VzY3guYndfcGVyaW9kX3VzLFxcbiBcXHRcXHRcXHQuYndfcXVvdGFfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxcbiBcXHRcXHRcXHQuYndfYnVyc3RfdXMgPSB0Zy1cXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxcbitcXHRcXHRcXHQuc2NoZWRfaWRsZSA9IHRnLVxcdTAwM2VzY3guc2NoZWRfaWRsZSxcXG4gXFx0XFx0fTtcXG4gXFxuIFxcdFxcdC8qIHRoZSBmaXJzdCBwYXNzIG11c3QgaGF2ZSB0cmFuc2ZlcnJlZCBldmVyeXRoaW5nICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjEyLjk4MjQ1NzQxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMDI5ODQzMTIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTQ0hFRF9DTEFTU19FWFRcIixcbiAgICBcIkNHUk9VUF9TQ0hFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjeF90Z19vbmxpbmVcIixcbiAgICBcInNjeF9ncm91cF9zZXRfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzY2hlZF9leHQgc3Vic3lzdGVtIHRvIHBhc3MgdGhlIGBzY2hlZF9pZGxlYCBzdGF0ZSBvZiBhIGNncm91cCB0byB0aGUgQlBGIHNjaGVkdWxlciBkdXJpbmcgY2dyb3VwIGluaXRpYWxpemF0aW9uIChgb3BzLmNncm91cF9pbml0KClgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZXhwb3NlcyBuZXcgZGF0YSB0byBCUEYgcHJvZ3JhbXMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgY2dyb3VwIGNyZWF0aW9uIGFuZCBgY3B1LmlkbGVgIG1vZGlmaWNhdGlvbiB3aGlsZSBhIHNjaGVkX2V4dCBzY2hlZHVsZXIgaXMgYWN0aXZlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNjczZGQ0N2RlMjc4YWYzZWZiZWM0OWM3Y2JjODQyZDA0N2Q3MzAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaFxuaW5kZXggNTgyZDdjZDRhOTgzOS4uN2I5Y2RiNjVkZWVmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcbkBAIC0zMjMsNyArMzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHtcbiBcdHU2NFx0XHRcdGJ3X3BlcmlvZF91cztcbiBcdHU2NFx0XHRcdGJ3X3F1b3RhX3VzO1xuIFx0dTY0XHRcdFx0YndfYnVyc3RfdXM7XG4tXHRib29sXHRcdFx0aWRsZTtcbitcdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xuICNlbmRpZlxuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbmluZGV4IGM1MzlkMTVjZGE2MzcuLjRhOWMzODI5NzA5MzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5AQCAtNDY4Miw3ICs0NjgyLDcgQEAgdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG4gXHR0Zy1cdTAwM2VzY3gud2VpZ2h0ID0gQ0dST1VQX1dFSUdIVF9ERkw7XG4gXHR0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzID0gZGVmYXVsdF9id19wZXJpb2RfdXMoKTtcbiBcdHRnLVx1MDAzZXNjeC5id19xdW90YV91cyA9IFJVTlRJTUVfSU5GO1xuLVx0dGctXHUwMDNlc2N4LmlkbGUgPSBmYWxzZTtcbitcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gZmFsc2U7XG4gfVxuIFxuIC8qKlxuQEAgLTQ3NjQsNyArNDc2NCw4IEBAIGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcbiBcdFx0XHRcdHsgLndlaWdodCA9IHRnLVx1MDAzZXNjeC53ZWlnaHQsXG4gXHRcdFx0XHQgIC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdFx0ICAuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4tXHRcdFx0XHQgIC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyB9O1xuK1x0XHRcdFx0ICAuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMsXG4rXHRcdFx0XHQgIC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcbiBcbiBcdFx0XHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcbiBcdFx0XHRcdFx0ICAgICAgTlVMTCwgdGctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YXJncyk7XG5AQCAtNDkzNCw3ICs0OTM1LDcgQEAgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXG4gXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXG4tXHR0Zy1cdTAwM2VzY3guaWRsZSA9IGlkbGU7XG4rXHR0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XG4gXG4gXHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG4gfVxuQEAgLTUxODUsNiArNTE4Niw3IEBAIHN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHRcdC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdFx0LmJ3X3F1b3RhX3VzID0gdGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxuIFx0XHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuK1x0XHRcdFx0LnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSxcbiBcdFx0XHR9O1xuIFxuIFx0XHRcdHJldCA9IFNDWF9DQUxMX09QX1JFVChzY2gsIGNncm91cF9pbml0LCBOVUxMLCBjc3MtXHUwMDNlY2dyb3VwLCBcdTAwMjZhcmdzKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuQEAgLTI1OSw2ICsyNTksOSBAQCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuIFx0dTY0XHRcdFx0YndfcGVyaW9kX3VzO1xuIFx0dTY0XHRcdFx0YndfcXVvdGFfdXM7XG4gXHR1NjRcdFx0XHRid19idXJzdF91cztcbitcbitcdC8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovXG4rXHRib29sXHRcdFx0c2NoZWRfaWRsZTtcbiB9O1xuIFxuIGVudW0gc2N4X2NwdV9wcmVlbXB0X3JlYXNvbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9zdWIuYyBiL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcbmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG5AQCAtMTM2MSw2ICsxMzYxLDcgQEAgc3RhdGljIHMzMiBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuIFx0XHRcdC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdC5id19xdW90YV91cyA9IHRnLVx1MDAzZXNjeC5id19xdW90YV91cyxcbiBcdFx0XHQuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMsXG4rXHRcdFx0LnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSxcbiBcdFx0fTtcbiBcbiBcdFx0aWYgKHRnLVx1MDAzZXNjeC5zY2hlZCAhPSBwYXJlbnQgfHxcbkBAIC0xNDY0LDYgKzE0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHQuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4gXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuK1x0XHRcdC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUsXG4gXHRcdH07XG4gXG4gXHRcdC8qIHRoZSBmaXJzdCBwYXNzIG11c3QgaGF2ZSB0cmFuc2ZlcnJlZCBldmVyeXRoaW5nICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzoxMi45ODI0NTkwODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDYxOTM3NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHNjaGVkX2V4dGAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGl0J3MgY2xlYW5pbmcgdXAgdGhlIGBpZGxlYCBuYW1pbmcgaW4gYHNjeF90YXNrX2dyb3VwYCBieSByZW5hbWluZyBpdCB0byBgc2NoZWRfaWRsZWAuXCIgVGhpcyBhbHNvIGluY2x1ZGVzIGFkZGluZyB0aGUgYHNjaGVkX2lkbGVgIGZpZWxkIHRvIGBzY3hfY2dyb3VwX2luaXRfYXJnc2AgaW4gYGtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaGAuIEkgc2VlIGl0J3MgcHJvcGFnYXRpbmcgdGhpcyBuZXcgZmllbGQgdGhyb3VnaCBgc2N4X3RnX29ubGluZWAsIGBzY3hfY2dyb3VwX2luaXRgLCBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCwgYW5kIGBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlYC4gVGhlIGtleSBoZXJlIGlzIHRoZSBmdW5jdGlvbmFsIGNoYW5nZTogcGFzc2luZyB0aGlzIGBzY2hlZF9pZGxlYCBmbGFnIGRvd24gdG8gdGhlIEJQRiBzY2hlZHVsZXIgdmlhIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGR1cmluZyB0aGUgYGNncm91cF9pbml0YCBCUEYgb3BlcmF0aW9uLlxuXG5MZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGRlZmluaXRpb24uIFllcCwgYGtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaGAgY29uZmlybXMgaXQ6XG5gYGBjXG5zdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuXHR1MzJcdFx0XHR3ZWlnaHQ7XG5cdHU2NFx0XHRcdGJ3X3BlcmlvZF91cztcblx0dTY0XHRcdFx0YndfcXVvdGFfdXM7XG5cdHU2NFx0XHRcdGJ3X2J1cnN0X3VzO1xuXG5cdC8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovXG5cdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xufTtcbmBgYFxuWXVwLCBpdCdzIGdvdCB0aGUgYHNjaGVkX2lkbGVgIGJvb2xlYW4gSSBleHBlY3RlZCwgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjZ3JvdXAgaXMgU0NIRURfSURMRS5cblxuVGhpcyBpcyBhbGwgd2l0aGluIHRoZSBgc2NoZWRfZXh0YCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGV4dC5jYCBhbmQgYHN1Yi5jYC4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IGBzY3hfdGdfaW5pdGAsIGBzY3hfdGdfb25saW5lYCwgYHNjeF9ncm91cF9zZXRfaWRsZWAsIGBzY3hfY2dyb3VwX2luaXRgLCBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCwgYW5kIGBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlYC4gT2theSwgSSdtIHN0YXJ0aW5nIHRvIGdldCB0aGUgcGljdHVyZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBBZGRpbmcgYSBuZXcgZmllbGQgdG8gYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCwgYW5kIGNyaXRpY2FsbHksIGV4cG9zaW5nIGl0IHRvIEJQRiBwcm9ncmFtcyB0aHJvdWdoIHRoZSBgY2dyb3VwX2luaXRgIG9wZXJhdGlvbiwgaXMgYSBjbGVhciBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpbnRyb2R1Y2VzIGEgbmV3IGF0dGFjayBzdXJmYWNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2guLi5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNvbmZpcm06IERvZXMgaXQgKmFjdHVhbGx5KiBleHBvc2UgaXQgdG8gQlBGPyBZZXMsIHRoZSBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCAqaXMqIHBhc3NlZCB0byB0aGUgYGNncm91cF9pbml0YCBCUEYgb3BlcmF0aW9uLCBzbyBpdCBsb29rcyBsaWtlIGl0IGlzLiBcblxuT2theSwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IHRoZSByaWdodCB0aGluZywgd2hhdCBpcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBzY2hlZF9leHRgPyBJcyBpdCBgU0NIRURfQ0xBU1NfRVhUYCBvciBgU0NIRURfRVhUYD8gVGltZSBmb3IgYSBxdWljayBncmVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTkyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MjEuNDQ0Mzk5MTk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQ5MTYwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjIxLjQ5MjQ1NTQzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTcwNTIwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTY2hlZHVsZXIncyBNYWtlZmlsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgc2NoZWR1bGVyIGJ1aWxkIHByb2Nlc3MuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgdGhlIGBrZXJuZWwvc2NoZWQvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciB0aGUgc2NoZWR1bGVyIGNvbXBvbmVudHMgbGlrZWx5IHJlc2lkZXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgR05VIE1ha2VmaWxlIHN0cnVjdHVyZSwgcHJvYmFibHkgd2l0aCB0YXJnZXRzIGZvciBvYmplY3QgZmlsZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGNvbmZpZ3VyYXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBob3cgdGhlIGNvcmUgc2NoZWR1bGluZyBhbGdvcml0aG1zIGFyZSBjb21waWxlZCwgYW55IGN1c3RvbSBsaW5rZXIgZmxhZ3MgdGhhdCBtaWdodCBiZSBhcHBsaWVkLCBhbmQgaG93IHRoZSBzY2hlZHVsZXIncyB2YXJpb3VzIG1vZHVsZXMgKGlmIHRoZXkgZXhpc3QpIGFyZSBoYW5kbGVkLiBQZXJoYXBzIHRoZXJlIGFyZSBjb25kaXRpb25hbCBpbmNsdXNpb25zIGJhc2VkIG9uIGBDT05GSUdfYCBvcHRpb25zLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhlIG1ha2VmaWxlIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzoyNS4yODk1MDk2NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc2NoZWQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRDT05URVhUX0FOQUxZU0lTX2NvcmUubyA6PSB5XFxuICAgNDpcXHRDT05URVhUX0FOQUxZU0lTX2ZhaXIubyA6PSB5XFxuICAgNTpcXHRcXG4gICA2OlxcdCMgVGhlIGNvbXBpbGVycyBhcmUgY29tcGxhaW5pbmcgYWJvdXQgdW51c2VkIHZhcmlhYmxlcyBpbnNpZGUgYW4gaWYoMCkgc2NvcGVcXG4gICA3OlxcdCMgYmxvY2suIFRoaXMgaXMgZGFmdCwgc2h1dCB0aGVtIHVwLlxcbiAgIDg6XFx0Y2NmbGFncy15ICs9ICQoY2FsbCBjYy1kaXNhYmxlLXdhcm5pbmcsIHVudXNlZC1idXQtc2V0LXZhcmlhYmxlKVxcbiAgIDk6XFx0XFxuICAxMDpcXHQjIFRoZXNlIGZpbGVzIGFyZSBkaXNhYmxlZCBiZWNhdXNlIHRoZXkgcHJvZHVjZSBub24taW50ZXJlc3RpbmcgZmxha3kgY292ZXJhZ2VcXG4gIDExOlxcdCMgdGhhdCBpcyBub3QgYSBmdW5jdGlvbiBvZiBzeXNjYWxsIGlucHV0cy4gRS5nLiBpbnZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzLlxcbiAgMTI6XFx0S0NPVl9JTlNUUlVNRU5UIDo9IG5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0IyBEaXNhYmxlIEtDU0FOIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBub2lzZSBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uIFRvIGF2b2lkXFxuICAxNTpcXHQjIGZhbHNlIHBvc2l0aXZlcyBlbnN1cmUgYmFycmllcnMgaW1wbGllZCBieSBzY2hlZCBmdW5jdGlvbnMgYXJlIGluc3RydW1lbnRlZC5cXG4gIDE2OlxcdEtDU0FOX1NBTklUSVpFIDo9IG5cXG4gIDE3OlxcdEtDU0FOX0lOU1RSVU1FTlRfQkFSUklFUlMgOj0geVxcbiAgMTg6XFx0XFxuICAxOTpcXHRpZm5lcSAoJChDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSKSx5KVxcbiAgMjA6XFx0IyBBY2NvcmRpbmcgdG8gQWxhbiBNb2RyYSBcXHUwMDNjYWxhbkBsaW51eGNhcmUuY29tLmF1XFx1MDAzZSwgdGhlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGlzXFxuICAyMTpcXHQjIG5lZWRlZCBmb3IgeDg2IG9ubHkuICBXaHkgdGhpcyB1c2VkIHRvIGJlIGVuYWJsZWQgZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGlzIGJleW9uZFxcbiAgMjI6XFx0IyBtZS4gIEkgc3VzcGVjdCBtb3N0IHBsYXRmb3JtcyBkb24ndCBuZWVkIHRoaXMsIGJ1dCB1bnRpbCB3ZSBrbm93IHRoYXQgZm9yIHN1cmVcXG4gIDIzOlxcdCMgSSB0dXJuIHRoaXMgb2ZmIGZvciBJQS02NCBvbmx5LiAgQW5kcmVhcyBTY2h3YWIgc2F5cyBpdCdzIGFsc28gbmVlZGVkIG9uIG02OGtcXG4gIDI0OlxcdCMgdG8gZ2V0IGEgY29ycmVjdCB2YWx1ZSBmb3IgdGhlIHdhaXQtY2hhbm5lbCAoV0NIQU4gaW4gcHMpLiAtLWRhdmlkbVxcbiAgMjU6XFx0Q0ZMQUdTX2NvcmUubyA6PSAkKFBST0ZJTElORykgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXJcXG4gIDI2OlxcdGVuZGlmXFxuICAyNzpcXHRcXG4gIDI4OlxcdCMgQnJhbmNoIHByb2ZpbGluZyBpc24ndCBub2luc3RyLXNhZmVcXG4gIDI5OlxcdGlmZGVmIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HXFxuICAzMDpcXHRDRkxBR1NfYnVpbGRfcG9saWN5Lm8gKz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcXG4gIDMxOlxcdENGTEFHU19idWlsZF91dGlsaXR5Lm8gKz0gLURESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkdcXG4gIDMyOlxcdGVuZGlmXFxuICAzMzpcXHQjXFxuICAzNDpcXHQjIEJ1aWxkIGVmZmljaWVuY3k6XFxuICAzNTpcXHQjXFxuICAzNjpcXHQjIFRoZXNlIGNvbXBpbGF0aW9uIHVuaXRzIGhhdmUgcm91Z2hseSB0aGUgc2FtZSBzaXplIGFuZCBjb21wbGV4aXR5IC0gc28gdGhlaXJcXG4gIDM3OlxcdCMgYnVpbGQgcGFyYWxsZWxpemVzIHdlbGwgYW5kIGZpbmlzaGVzIHJvdWdobHkgYXQgb25jZTpcXG4gIDM4OlxcdCNcXG4gIDM5OlxcdG9iai15ICs9IGNvcmUub1xcbiAgNDA6XFx0b2JqLXkgKz0gZmFpci5vXFxuICA0MTpcXHRvYmoteSArPSBidWlsZF9wb2xpY3kub1xcbiAgNDI6XFx0b2JqLXkgKz0gYnVpbGRfdXRpbGl0eS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjI1LjI4OTU3ODkyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjM0NDU5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgU2NoZWR1bGVyJ3MgRXh0ZW5zaW9uIE1vZHVsZXMqKlxuXG5IbW0sIHRoaXMgaXMgc3RyYW5nZS4gSSB3YXMgZXhwZWN0aW5nIHRvIGZpbmQgYGtlcm5lbC9zY2hlZC9leHQvZXh0LmNgIHJlZmVyZW5jZWQgaW4gdGhlIG1haW4gYE1ha2VmaWxlYCBmb3IgdGhlIHNjaGVkdWxlciwgYGtlcm5lbC9zY2hlZC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBJJ2QgKm5vcm1hbGx5KiBleHBlY3QgdG8gc2VlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciBhbiBleHRlbnNpb24uIEl0J3MgYSBiaXQgb2RkIHRvIGhhdmUgaXQgbWlzc2luZyBmcm9tIHRoZXJlLlxuXG5Pa2F5LCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy4gRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBvYnZpb3VzIHBsYWNlcy4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBga2VybmVsL3NjaGVkL2V4dC9NYWtlZmlsZWAgdG8gc2VlIGlmIGl0J3MgZ290IGl0cyBvd24gYnVpbGQgcnVsZXMg4oCTIHBlcmhhcHMgaXQncyBhIGNvbXBsZXRlbHkgc2VsZi1jb250YWluZWQgbW9kdWxlLiBBbHRlcm5hdGl2ZWx5LCBJJ2xsIGV4YW1pbmUgYGtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuY2A7IG1heWJlIGl0IGhhcyBzb21lIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBsb2dpYyBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBob3cgdGhlIHNjaGVkdWxpbmcgcG9saWNpZXMgYXJlIGNvbXBpbGVkLiBMZXQncyBzZWUgaWYgZWl0aGVyIG9mIHRob3NlIGhvbGRzIHRoZSBjbHVlIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MjkuMDUzMDI4MDA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDMzMjE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy02NS0jIGluY2x1ZGUgXFxcImV4dC9pbnRlcm5hbC5oXFxcIlxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo2NjojIGluY2x1ZGUgXFxcImV4dC9jaWQuaFxcXCJcXG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNjctIyBpbmNsdWRlIFxcXCJleHQvYXJlbmEuaFxcXCJcXG4tLVxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy03MC0jIGluY2x1ZGUgXFxcImV4dC9pbmxpbmVzLmhcXFwiXFxua2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jOjcxOiMgaW5jbHVkZSBcXFwiZXh0L2V4dC5jXFxcIlxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo3MjojIGluY2x1ZGUgXFxcImV4dC9jaWQuY1xcXCJcXG5rZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmMtNzMtIyBpbmNsdWRlIFxcXCJleHQvYXJlbmEuY1xcXCJcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI5Mz12b2lkIHdha2V1cF9wcmVlbXB0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjk2LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjI5NzpcXHRpZiAocC1cXHUwMDNlc2NoZWRfY2xhc3MgPT0gcnEtXFx1MDAzZW5leHRfY2xhc3MpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIyOTg6XFx0XFx0cnEtXFx1MDAzZW5leHRfY2xhc3MtXFx1MDAzZXdha2V1cF9wcmVlbXB0KHJxLCBwLCBmbGFncyk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMjk5LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MjMwMDpcXHR9IGVsc2UgaWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHAtXFx1MDAzZXNjaGVkX2NsYXNzLCBycS1cXHUwMDNlbmV4dF9jbGFzcykpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjIzMDE6XFx0XFx0cnEtXFx1MDAzZW5leHRfY2xhc3MtXFx1MDAzZXdha2V1cF9wcmVlbXB0KHJxLCBwLCBmbGFncyk7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMzAyLVxcdFxcdHJlc2NoZWRfY3VycihycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzoyMzAzOlxcdFxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzID0gcC1cXHUwMDNlc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYy0yMzA0LVxcdH1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9Njc4MT1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJveHlfcmVzY2hlZF9pZGxlKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTY3ODMtXFx0cHV0X3ByZXZfc2V0X25leHRfdGFzayhycSwgcnEtXFx1MDAzZWRvbm9yLCBycS1cXHUwMDNlaWRsZSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo2Nzg0OlxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzID0gXFx1MDAyNmlkbGVfc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYy02Nzg1LVxcdHJxX3NldF9kb25vcihycSwgcnEtXFx1MDAzZWlkbGUpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz03MDk3PXN0YXRpYyB2b2lkIF9fc2NoZWQgbm90cmFjZSBfX3NjaGVkdWxlKGludCBzY2hlZF9tb2RlKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03MTY3LVxcdFxcdFxcdG5leHQgPSBwcmV2O1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzE2ODpcXHRcXHRcXHRycS1cXHUwMDNlbmV4dF9jbGFzcyA9IFxcdTAwMjZpZGxlX3NjaGVkX2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzE2OS1cXHRcXHRcXHRnb3RvIHBpY2tlZDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzE4NS1cXHRuZXh0ID0gcGlja19uZXh0X3Rhc2socnEsIFxcdTAwMjZyZik7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo3MTg2OlxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzID0gbmV4dC1cXHUwMDNlc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYy03MTg3LVxcdGlmIChzY2hlZF9wcm94eV9leGVjKCkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzY2Mz12b2lkIHJ0X211dGV4X3NldHByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpX3Rhc2spXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc2NjYtXFx0XFx0REVRVUVVRV9TQVZFIHwgREVRVUVVRV9NT1ZFIHwgREVRVUVVRV9OT0NMT0NLO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzY2NzpcXHRjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3MsICpuZXh0X2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzY2OC1cXHRzdHJ1Y3QgcnFfZmxhZ3MgcmY7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MjQtXFx0cHJldl9jbGFzcyA9IHAtXFx1MDAzZXNjaGVkX2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzcyNTpcXHRuZXh0X2NsYXNzID0gX19zZXRzY2hlZHVsZXJfY2xhc3MocC1cXHUwMDNlcG9saWN5LCBwcmlvKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTc3MjYtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo3NzI3OlxcdGlmIChwcmV2X2NsYXNzICE9IG5leHRfY2xhc3MpXFxua2VybmVsL3NjaGVkL2NvcmUuYy03NzI4LVxcdFxcdHF1ZXVlX2ZsYWcgfD0gREVRVUVVRV9DTEFTUztcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzc2MC1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjc3NjE6XFx0XFx0cC1cXHUwMDNlc2NoZWRfY2xhc3MgPSBuZXh0X2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzc2Mi1cXHRcXHRwLVxcdTAwM2VwcmlvID0gcHJpbztcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9ODk1MT12b2lkIF9faW5pdCBzY2hlZF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwNDgtI2VuZGlmXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MDQ5OlxcdFxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzID0gXFx1MDAyNmlkbGVfc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYy05MDUwLVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTM1LVxcdGluaXRfc2NoZWRfZmFpcl9jbGFzcygpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTEzNjpcXHRpbml0X3NjaGVkX2V4dF9jbGFzcygpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTEzNy1cXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MTEyNzY9dm9pZCBzY2hlZF9jaGFuZ2VfZW5kKHN0cnVjdCBzY2hlZF9jaGFuZ2VfY3R4ICpjdHgpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTExMzA3LVxcdFxcdFxcdGlmIChzY2hlZF9jbGFzc19hYm92ZShwLVxcdTAwM2VzY2hlZF9jbGFzcywgY3R4LVxcdTAwM2VjbGFzcykpIHtcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjExMzA4OlxcdFxcdFxcdFxcdHJxLVxcdTAwM2VuZXh0X2NsYXNzLVxcdTAwM2V3YWtldXBfcHJlZW1wdChycSwgcCwgMCk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzoxMTMwOTpcXHRcXHRcXHRcXHRycS1cXHUwMDNlbmV4dF9jbGFzcyA9IHAtXFx1MDAzZXNjaGVkX2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtMTEzMTAtXFx0XFx0XFx0fVxcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MTE0MT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZGxfc2VydmVyX3RpbWVyKHN0cnVjdCBocnRpbWVyICp0aW1lciwgc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMjA4LSAqIHVwZGF0aW5nIChhbmQgdGhlIHF1ZXVlaW5nIGJhY2sgdG8gZGxfcnEpIHdpbGwgYmUgZG9uZSBieSB0aGVcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYzoxMjA5OiAqIG5leHQgY2FsbCB0byBlbnF1ZXVlX3Rhc2tfZGwoKS5cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xMjEwLSAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYz0xODA9czMyIHNjeF9jaWRfaW5pdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTE4OC1cXHRzdHJ1Y3Qgc2N4X2NpZF90YWJsZXMgKnRibHM7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoxODk6XFx0dTMyIG5leHRfY2lkID0gMDtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjE5MDpcXHRzMzIgbmV4dF9ub2RlX2lkeCA9IDAsIG5leHRfbGxjX2lkeCA9IDAsIG5leHRfY29yZV9pZHggPSAwO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMTkxLVxcdHMzMiBuZXh0X3NoYXJkX2lkeCA9IDA7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTIyOS1cXHR3aGlsZSAoIWNwdW1hc2tfZW1wdHkodG9fd2FsaykpIHtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjIzMDpcXHRcXHRzMzIgbmV4dF9jcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX3dhbGspO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjMxOlxcdFxcdHMzMiBuaWQgPSBjcHVfdG9fbm9kZShuZXh0X2NwdSk7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzoyMzI6XFx0XFx0czMyIG5vZGVfY2lkID0gbmV4dF9jaWQ7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yMzMtXFx0XFx0czMyIG5vZGVfaWR4O1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yMzktXFx0XFx0aWYgKG5pZCBcXHUwMDNjIDApIHtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI0MDpcXHRcXHRcXHRjcHVtYXNrX2NsZWFyX2NwdShuZXh0X2NwdSwgdG9fd2Fsayk7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNDEtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI0Ny1cXHRcXHRjcHVtYXNrX2FuZChub2RlX3NjcmF0Y2gsIHRvX3dhbGssIGNwdW1hc2tfb2Zfbm9kZShuaWQpKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjI0ODpcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFjcHVtYXNrX3Rlc3RfY3B1KG5leHRfY3B1LCBub2RlX3NjcmF0Y2gpKSlcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI0OS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjUzLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjcHVtYXNrICpsbGNfbWFzayA9IGNwdV9sbGNfbWFzayhuY3B1LCBsbGNfZmFsbGJhY2spO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjU0OlxcdFxcdFxcdHMzMiBsbGNfY2lkID0gbmV4dF9jaWQ7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0yNTUtXFx0XFx0XFx0czMyIGxsY19pZHggPSBuZXh0X2xsY19pZHgrKztcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjY1LVxcdFxcdFxcdGNhbGNfc2hhcmRfbGF5b3V0KGxsY19zY3JhdGNoLCBzaGFyZF9zaXplLCBcXHUwMDI2Y29yZXNfcGVyX3NoYXJkLCBcXHUwMDI2bnJfbGFyZ2UpO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjY2OlxcdFxcdFxcdHNoYXJkX2NpZCA9IG5leHRfY2lkO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjY3LVxcdFxcdFxcdHNoYXJkX2lkeCA9IG5leHRfc2hhcmRfaWR4Kys7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI3Mi1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgY3B1bWFzayAqc2liID0gdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGxjcHUpO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6MjczOlxcdFxcdFxcdFxcdHMzMiBjb3JlX2NpZCA9IG5leHRfY2lkO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6Mjc0OlxcdFxcdFxcdFxcdHMzMiBjb3JlX2lkeCA9IG5leHRfY29yZV9pZHgrKztcXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTI3NS1cXHRcXHRcXHRcXHRzMzIgY2NwdTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjk2LVxcdFxcdFxcdFxcdFxcdGNpZHNfaW5fc2hhcmQgPSAwO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6Mjk3OlxcdFxcdFxcdFxcdFxcdHNoYXJkX2NpZCA9IG5leHRfY2lkO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMjk4LVxcdFxcdFxcdFxcdFxcdHNoYXJkX2lkeCA9IG5leHRfc2hhcmRfaWR4Kys7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTMwNC1cXHRcXHRcXHRcXHRmb3JfZWFjaF9jcHUoY2NwdSwgY29yZV9zY3JhdGNoKSB7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYzozMDU6XFx0XFx0XFx0XFx0XFx0czMyIGNpZCA9IG5leHRfY2lkKys7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0zMDYtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jLTM0Ni1cXG5rZXJuZWwvc2NoZWQvZXh0L2NpZC5jOjM0NzpcXHRcXHRjaWQgPSBuZXh0X2NpZCsrO1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMzQ4LVxcdFxcdHRibHMtXFx1MDAzZWNpZF90b19jcHVbY2lkXSA9IGNwdTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmMtMzc1LVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvY2lkLmM6Mzc2OlxcdGZvciAoY2lkID0gMDsgY2lkIFxcdTAwM2MgbmV4dF9jaWQ7IGNpZCsrKSB7XFxua2VybmVsL3NjaGVkL2V4dC9jaWQuYy0zNzctXFx0XFx0czMyIHNpZHggPSB0YmxzLVxcdTAwM2VjaWRfdG9fc2hhcmRbY2lkXTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MzU0PXN0YXRpYyBib29sIHJxX2lzX29wZW4oc3RydWN0IHJxICpycSwgdTY0IGVucV9mbGFncylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzYxLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzYyOlxcdGlmIChzY2hlZF9jbGFzc19hYm92ZShycS1cXHUwMDNlbmV4dF9jbGFzcywgXFx1MDAyNmV4dF9zY2hlZF9jbGFzcykpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zNjMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zNjgtXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozNjk6XFx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZleHRfc2NoZWRfY2xhc3MsIHJxLVxcdTAwM2VuZXh0X2NsYXNzKSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM3MC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTUxOD1zdGF0aWMgdm9pZCBycV9vd25lZF9wb3N0X2VucShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCBycSAqcnEsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NTktXFx0ICogcHVycG9zZSwgYnV0IGZvciBpdCB0byBiZSBpbnZva2VkLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IHdlIGJ1bXBcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NjA6XFx0ICogQHJxLVxcdTAwM2VuZXh0X2NsYXNzIHRvIFxcdTAwMjZleHRfc2NoZWRfY2xhc3MgaWYgaXQncyBjdXJyZW50bHkgaWRsZS5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NjEtXFx0ICpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NjItXFx0ICogd2FrZXVwX3ByZWVtcHQoKSBkb2VzIHRoZSBidW1waW5nLCBhbmQgc2luY2Ugd2Ugb25seSBpbnZva2UgaXQgaWZcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NjM6XFx0ICogQHJxLVxcdTAwM2VuZXh0X2NsYXNzIGlzIGJlbG93IFxcdTAwMjZleHRfc2NoZWRfY2xhc3MsIGl0IHdpbGwgYWxzb1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU2NC1cXHQgKiByZXNjaGVkX2N1cnIocnEpLlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU2NS1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NjY6XFx0aWYgKHNjaGVkX2NsYXNzX2Fib3ZlKHAtXFx1MDAzZXNjaGVkX2NsYXNzLCBycS1cXHUwMDNlbmV4dF9jbGFzcykpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xNTY3LVxcdFxcdHdha2V1cF9wcmVlbXB0KHJxLCBwLCAwKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTU3My1cXHQgKiBOb3RlIHRoYXQgdGhlIHdha2V1cF9wcmVlbXB0KCkgYWJvdmUgbWF5IGhhdmUgYWxyZWFkeSB0cmlnZ2VyZWRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjE1NzQ6XFx0ICogYSByZXNjaGVkIGlmIEBycS1cXHUwMDNlbmV4dF9jbGFzcyB3YXMgaWRsZS4gSXQncyBoYXJtbGVzcywgc2luY2VcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTE1NzUtXFx0ICogbmVlZF9yZXNjaGVkIGlzIGNsZWFyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGFzayBwaWNrLlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0zMDc3PXN0YXRpYyB2b2lkIHN3aXRjaF9jbGFzcyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMwNzktXFx0c3RydWN0IHNjeF9zY2hlZCAqc2NoID0gc2N4X3Jvb3RfcHJvdGVjdGVkX2xpdmUoKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjMwODA6XFx0Y29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpuZXh0X2NsYXNzID0gbmV4dC1cXHUwMDNlc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMDgxLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMDg3LVxcdCAqIGxvbmdlciB1bmRlciB0aGUgY29udHJvbCBvZiBTQ1guIFRoZXJlZm9yZSwgZG9uJ3QgaW52b2tlIHRoZSBjYWxsYmFja1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzA4ODpcXHQgKiBpZiB0aGUgbmV4dCBjbGFzcyBpcyBiZWxvdyBTQ1ggKGluIHdoaWNoIGNhc2UgdGhlIEJQRiBzY2hlZHVsZXIgaGFzXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMDg5LVxcdCAqIGFjdGl2ZWx5IGRlY2lkZWQgbm90IHRvIHNjaGVkdWxlIGFueSB0YXNrcyBvbiB0aGUgQ1BVKS5cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMwOTAtXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozMDkxOlxcdGlmIChzY2hlZF9jbGFzc19hYm92ZShcXHUwMDI2ZXh0X3NjaGVkX2NsYXNzLCBuZXh0X2NsYXNzKSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMwOTItXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zMTA1LVxcdFxcdFxcdHN0cnVjdCBzY3hfY3B1X3JlbGVhc2VfYXJncyBhcmdzID0ge1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzEwNjpcXHRcXHRcXHRcXHQucmVhc29uID0gcHJlZW1wdF9yZWFzb25fZnJvbV9jbGFzcyhuZXh0X2NsYXNzKSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTMxMDctXFx0XFx0XFx0XFx0LnRhc2sgPSBuZXh0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01NTUxPWJvb2wgc2N4X2FsbG93X3R0d3VfcXVldWUoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01NTcxLS8qKlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTU3MjogKiBoYW5kbGVfbG9ja3VwIC0gc2NoZWRfZXh0IGNvbW1vbiBsb2NrdXAgaGFuZGxlclxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTU3My0gKiBAZXhpdF9jcHU6IENQVSB0byByZWNvcmQgaW4gZXhpdF9pbmZvLiBQYXNzIHRoZSBzdGFsbGVkL2h1bmcgQ1BVLCBub3QgY3VycmVudC5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODY2MT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNjeF9wbV9ub3RpZmllciA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODY2NC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjg2NjU6dm9pZCBfX2luaXQgaW5pdF9zY2hlZF9leHRfY2xhc3Modm9pZClcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTg2NjYte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz0xMDg5OD1zdGF0aWMgaW50IF9faW5pdCBzY3hfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk3NS1cXHQvKlxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA5NzY6XFx0ICoga2Z1bmMgcmVnaXN0cmF0aW9uIGNhbid0IGJlIGRvbmUgZnJvbSBpbml0X3NjaGVkX2V4dF9jbGFzcygpIGFzXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk3Ny1cXHQgKiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KCkgbmVlZHMgbW9zdCBvZiB0aGUgc3lzdGVtIHRvIGJlIHVwLlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD0yMj1ib29sIHNjeF9hbGxvd190dHd1X3F1ZXVlKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDoyMzp2b2lkIGluaXRfc2NoZWRfZXh0X2NsYXNzKHZvaWQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtMjQtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oPTU2PXN0YXRpYyBpbmxpbmUgYm9vbCBzY3hfYWxsb3dfdHR3dV9xdWV1ZShjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIHRydWU7IH1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjU3OnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NjaGVkX2V4dF9jbGFzcyh2b2lkKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNTgtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYz05MTM9c3RhdGljIGJvb2wgY2hlY2tfYnVpbHRpbl9pZGxlX2VuYWJsZWQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pZGxlLmMtOTI2LSAqIFdlIGNhbid0IHNpbXBseSBjaGVjayB3aGV0aGVyIEBwLVxcdTAwM2VtaWdyYXRpb25fZGlzYWJsZWQgaXMgc2V0IGluIGFcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzo5Mjc6ICogc2NoZWRfZXh0IGNhbGxiYWNrLCBiZWNhdXNlIHRoZSBCUEYgcHJvbG9nIChfX2JwZl9wcm9nX2VudGVyKSBtYXkgZGlzYWJsZVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTkyOC0gKiBtaWdyYXRpb24gZm9yIHRoZSBjdXJyZW50IHRhc2sgd2hpbGUgcnVubmluZyBCUEYgY29kZS5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jPTE1MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IHNjeF9rZnVuY19zZXRfaWRsZSA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1MzctICpcXG5rZXJuZWwvc2NoZWQvZXh0L2lkbGUuYzoxNTM4OiAqIFRoZXNlIGtmdW5jcyBhcmUgYWxzbyBtZW1iZXJzIG9mIHNjeF9rZnVuY19pZHNfdW5sb2NrZWQgKHNlZSBleHQuYykgYmVjYXVzZVxcbmtlcm5lbC9zY2hlZC9leHQvaWRsZS5jLTE1MzktICogdGhleSdyZSBjYWxsYWJsZSBmcm9tIHVubG9ja2VkIGNvbnRleHRzIGluIGFkZGl0aW9uIHRvIG9wcy5zZWxlY3RfY3B1KCkgYW5kXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MTMyPWVudW0gc2N4X29wc19mbGFncyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTM4LVxcdC8qXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEzOTpcXHQgKiBCeSBkZWZhdWx0LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgdGFzayB0byBydW4gb24gdGhlIENQVSwgZXh0IGNvcmVcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTQwLVxcdCAqIGtlZXBzIHJ1bm5pbmcgdGhlIGN1cnJlbnQgdGFzayBldmVuIGFmdGVyIGl0cyBzbGljZSBleHBpcmVzLiBJZiB0aGlzXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MzIyPXN0cnVjdCBzY2hlZF9leHRfb3BzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0zNzItXFx0ICpcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MzczOlxcdCAqIFRoZSBleHQgY29yZSBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBCUEYgc2lkZSBvd25zIGEgZ2l2ZW4gdGFzayBvclxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0zNzQtXFx0ICogbm90IGFuZCBjYW4gZ3JhY2VmdWxseSBpZ25vcmUgc3B1cmlvdXMgZGlzcGF0Y2hlcyBmcm9tIEJQRiBzaWRlLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTE0MzE9ZW51bSBzY3hfY2FwX2ZsYWdzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNDgyLSAqIGRlbGl2ZXJ5IGlzIGluIGZsaWdodCBwZXIgc2hhcmQuIEZ1cnRoZXIgY2hhbmdlcyBmb2xkIGludG8gdGhlIHNhbWUgYnVmZmVyXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjE0ODM6ICogYW5kIHNoaXAgYXMgdGhlIG5leHQgY2FsbGJhY2ssIHNvIGEgc2hhcmQncyBjYWxsYmFja3MgZmlyZSBpbiBvcmRlci5cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTQ4NC0gKlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTE2NzI9ZW51bSBzY3hfZW5xX2ZsYWdzIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xNzI1LVxcdCAqIFRoZSB0YXNrIGJlaW5nIGVucXVldWVkIGlzIHRoZSBvbmx5IHRhc2sgYXZhaWxhYmxlIGZvciB0aGUgY3B1LiBCeVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxNzI2OlxcdCAqIGRlZmF1bHQsIGV4dCBjb3JlIGtlZXBzIGV4ZWN1dGluZyBzdWNoIHRhc2tzIGJ1dCB3aGVuXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTE3MjctXFx0ICogJVNDWF9PUFNfRU5RX0xBU1QgaXMgc3BlY2lmaWVkLCB0aGV5J3JlIG9wcy5lbnF1ZXVlKCknZCB3aXRoIHRoZVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTE4Mjk9c3RhdGljIGNvbnN0IGNoYXIgKnNjeF9lbmFibGVfc3RhdGVfc3RyW10gPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTgzOC0gKlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDoxODM5OiAqIFRoZSBzY2hlZF9leHQgY29yZSB1c2VzIHRoaXMgc3RhdGUgbWFjaGluZSB0byB0cmFjayB0YXNrIG93bmVyc2hpcFxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xODQwLSAqIGJldHdlZW4gdGhlIFNDWCBjb3JlIGFuZCB0aGUgQlBGIHNjaGVkdWxlci4gVGhpcyBhbGxvd3MgdGhlIEJQRlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTE5MTEtICpcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MTkxMjogKiBUaGUgc2NoZWRfZXh0IGNvcmUgdXNlcyBhIFxcXCJsb2NrIGRhbmNpbmdcXFwiIHByb3RvY29sIGNvb3JkaW5hdGVkIGJ5XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTE5MTMtICogcC1cXHUwMDNlc2N4LmhvbGRpbmdfY3B1LiBXaGVuIG1vdmluZyBhIHRhc2sgdG8gYSBkaWZmZXJlbnQgcnE6XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEwLSAqIHN1Yi1zY2hlZHVsZXIgZW5hYmxlL2Rpc2FibGUgcGF0aHMuIFRoZSBjb3JlIGRpc3BhdGNoL2VucXVldWUgbWFjaGluZXJ5IGl0XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMTogKiBidWlsZHMgb24gbGl2ZXMgaW4gZXh0LmMuXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMi0gKlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xMjMyPXZvaWQgZHJhaW5fZGVzY2VuZGFudHMoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMjQ5LSAqIHN0YXRlIHRvICVTQ1hfVEFTS19SRUFEWSB0byBhY2NvdW50IGZvciB0aGUgYWxyZWFkeSBjb21wbGV0ZWQgaW5pdC4gQSB0YXNrXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMjUwOiAqIG9uIGEgbm9uLWV4dCBjbGFzcywgcG9zc2libGUgdW5kZXIgYW4gJVNDWF9PUFNfU1dJVENIX1BBUlRJQUwgcm9vdCwgc3RheXNcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEyNTEtICogJVJFQURZIGFuZCBpcyBlbmFibGVkIGJ5IHN3aXRjaGluZ190b19zY3goKSBpZiBpdCBzd2l0Y2hlcyBvdmVyLlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xNzExPXZvaWQgc2N4X3N1Yl9lbmFibGVfd29ya2ZuKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE5NTYtXFx0XFx0XFx0ICogaXMgd2hhdCB3ZSB3YW50LiBBc3NpZ24gaXQgdG8gQHNjaCBhbmQsIGlmIGl0J3Mgb25cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jOjE5NTc6XFx0XFx0XFx0ICogdGhlIGV4dCBjbGFzcywgZW5hYmxlLiBBIG5vbi1leHQgdGFzaywgcG9zc2libGUgdW5kZXJcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE5NTgtXFx0XFx0XFx0ICogYW4gJVNDWF9PUFNfU1dJVENIX1BBUlRJQUwgcm9vdCwgc3RheXMgUkVBRFkgYW5kIGlzXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTY5Nzg9c3RhdGljIGJvb2wgdGhyb3R0bGVfY2ZzX3JxKHN0cnVjdCBjZnNfcnEgKmNmc19ycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNzAzMi1cXHQgKiBjdXJyZW50IGRvbm9yLiBJbiBjYXNlIG9mIHByb3h5LWV4ZWN1dGlvbiwgdGhlIGV4ZWN1dGlvblxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6NzAzMzpcXHQgKiBjb250ZXh0IGNhbm5vdCBleGl0IHRvIHRoZSB1c2Vyc3BhY2Ugd2hpbGUgaG9sZGluZyBhIG11dGV4XFxua2VybmVsL3NjaGVkL2ZhaXIuYy03MDM0LVxcdCAqIGFuZCB0aGUgcnVsZSBvZiB0aHJvdHRsZSBkZWZlcnJhbCB0byBvbmx5IHRocm90dGxlIHRoZVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNTQ1Mj1pbnQgc2NoZWRfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBsb25nIGlkbGUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDgyLVxcdFxcdGlmIChXQVJOX09OX09OQ0Uod2FzX2lkbGUgPT0gY2ZzX3JxX2lzX2lkbGUoZ3JwX2Nmc19ycSkpKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTU0ODM6XFx0XFx0XFx0Z290byBuZXh0X2NwdTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDg0LVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTUwMi1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE1NTAzOm5leHRfY3B1Olxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU1MDQtXFx0XFx0cnFfdW5sb2NrX2lycXJlc3RvcmUocnEsIFxcdTAwMjZyZik7XFxuLS1cXG5rZXJuZWwvc2NoZWQvcnQuYz0yMDc4PXN0YXRpYyB2b2lkIHB1c2hfcnRfdGFza3Moc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMjctICovXFxua2VybmVsL3NjaGVkL3J0LmM6MjEyODpzdGF0aWMgaW50IHJ0b19uZXh0X2NwdShzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKVxcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMjkte1xcbi0tXFxua2VybmVsL3NjaGVkL3J0LmMtMjEzNS1cXHQgKiBXaGVuIHN0YXJ0aW5nIHRoZSBJUEkgUlQgcHVzaGluZywgdGhlIHJ0b19jcHUgaXMgc2V0IHRvIC0xLFxcbmtlcm5lbC9zY2hlZC9ydC5jOjIxMzY6XFx0ICogcnRfbmV4dF9jcHUoKSB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGZpcnN0IENQVSBmb3VuZCBpblxcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMzctXFx0ICogdGhlIHJ0b19tYXNrLlxcbmtlcm5lbC9zY2hlZC9ydC5jLTIxMzgtXFx0ICpcXG5rZXJuZWwvc2NoZWQvcnQuYzoyMTM5OlxcdCAqIElmIHJ0b19uZXh0X2NwdSgpIGlzIGNhbGxlZCB3aXRoIHJ0b19jcHUgaXMgYSB2YWxpZCBDUFUsIGl0XFxua2VybmVsL3NjaGVkL3J0LmMtMjE0MC1cXHQgKiB3aWxsIHJldHVybiB0aGUgbmV4dCBDUFUgZm91bmQgaW4gdGhlIHJ0b19tYXNrLlxcbi0tXFxua2VybmVsL3NjaGVkL3J0LmM9MjE5MD1zdGF0aWMgdm9pZCB0ZWxsX2NwdV90b19wdXNoKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvcnQuYy0yMjA5LVxcdGlmIChycS1cXHUwMDNlcmQtXFx1MDAzZXJ0b19jcHUgXFx1MDAzYyAwKVxcbmtlcm5lbC9zY2hlZC9ydC5jOjIyMTA6XFx0XFx0Y3B1ID0gcnRvX25leHRfY3B1KHJxLVxcdTAwM2VyZCk7XFxua2VybmVsL3NjaGVkL3J0LmMtMjIxMS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9ydC5jPTIyMjQ9dm9pZCBydG9fcHVzaF9pcnFfd29ya19mdW5jKHN0cnVjdCBpcnFfd29yayAqd29yaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9ydC5jLTIyNDYtXFx0LyogUGFzcyB0aGUgSVBJIHRvIHRoZSBuZXh0IHJ0IG92ZXJsb2FkZWQgcXVldWUgKi9cXG5rZXJuZWwvc2NoZWQvcnQuYzoyMjQ3OlxcdGNwdSA9IHJ0b19uZXh0X2NwdShyZCk7XFxua2VybmVsL3NjaGVkL3J0LmMtMjI0OC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTExNTk9c3RydWN0IHJxIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTExODctXFx0LypcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMTg4OlxcdCAqIFRoZSBuZXh0IGNhY2hlbGluZSBob2xkcyB0aGUgKGhvdCkgcnVucXVldWUgbG9jaywgYXMgd2VsbCBhc1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTExODktXFx0ICogc29tZSBvdGhlciBsZXNzIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZpZWxkcy5cXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyNTEtXFx0c3RydWN0IHRhc2tfc3RydWN0XFx0KnN0b3A7XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTI1MjpcXHRjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKm5leHRfY2xhc3M7XFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTI1My1cXHR1bnNpZ25lZCBsb25nXFx0XFx0bmV4dF9iYWxhbmNlO1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9Mjg2Nz1zdGF0aWMgaW5saW5lIHZvaWQgcnFfbW9kaWZpZWRfYmVnaW4oc3RydWN0IHJxICpycSwgY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzcylcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODY4LXtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODY5OlxcdGlmIChzY2hlZF9jbGFzc19hYm92ZShycS1cXHUwMDNlbmV4dF9jbGFzcywgY2xhc3MpKVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oOjI4NzA6XFx0XFx0cnEtXFx1MDAzZW5leHRfY2xhc3MgPSBjbGFzcztcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODcxLX1cXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTI4NzM9c3RhdGljIGlubGluZSBib29sIHJxX21vZGlmaWVkX2Fib3ZlKHN0cnVjdCBycSAqcnEsIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqY2xhc3MpXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg3NC17XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6Mjg3NTpcXHRyZXR1cm4gc2NoZWRfY2xhc3NfYWJvdmUocnEtXFx1MDAzZW5leHRfY2xhc3MsIGNsYXNzKTtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0yODc2LX1cXG4tLVxcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jPTQ5Mz1pbnQgX19zY2hlZF9zZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNDk4LVxcdGludCByZXR2YWwsIG9sZHByaW8sIG5ld3ByaW87XFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmM6NDk5OlxcdGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqcHJldl9jbGFzcywgKm5leHRfY2xhc3M7XFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNTAwLVxcdHN0cnVjdCBiYWxhbmNlX2NhbGxiYWNrICpoZWFkO1xcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjc1LVxcdHByZXZfY2xhc3MgPSBwLVxcdTAwM2VzY2hlZF9jbGFzcztcXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYzo2NzY6XFx0bmV4dF9jbGFzcyA9IF9fc2V0c2NoZWR1bGVyX2NsYXNzKHBvbGljeSwgbmV3cHJpbyk7XFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjc3LVxcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jOjY3ODpcXHRpZiAocHJldl9jbGFzcyAhPSBuZXh0X2NsYXNzKVxcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTY3OS1cXHRcXHRxdWV1ZV9mbGFncyB8PSBERVFVRVVFX0NMQVNTO1xcbi0tXFxua2VybmVsL3NjaGVkL3N5c2NhbGxzLmMtNjg0LVxcdFxcdFxcdF9fc2V0c2NoZWR1bGVyX3BhcmFtcyhwLCBhdHRyKTtcXG5rZXJuZWwvc2NoZWQvc3lzY2FsbHMuYzo2ODU6XFx0XFx0XFx0cC1cXHUwMDNlc2NoZWRfY2xhc3MgPSBuZXh0X2NsYXNzO1xcbmtlcm5lbC9zY2hlZC9zeXNjYWxscy5jLTY4Ni1cXHRcXHRcXHRwLVxcdTAwM2VwcmlvID0gbmV3cHJpbztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MjkuODI3MzY3NjMzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5OTc1Mzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBFeHRlbnNpb24gU2NoZWR1bGVyIEludGVncmF0aW9uKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgaXMgYmVpbmcgaW5jbHVkZWQgd2l0aGluIGBrZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmNgLiBJbnRlcmVzdGluZy4gSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSBib3RoIGBrZXJuZWwvc2NoZWQvYnVpbGRfcG9saWN5LmNgIGFuZCB0aGUgYXNzb2NpYXRlZCBgTWFrZWZpbGVgIGluIHRoZSBga2VybmVsL3NjaGVkYCBkaXJlY3RvcnkuIEknbSB0cnlpbmcgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGV4dGVuc2lvbiBzY2hlZHVsZXIgaXMgYmVpbmcgaW50ZWdyYXRlZC5cblxuV2FpdCBhIHNlY29uZOKApiBJJ3ZlIGdvdCBpdC4gVGhlIGNvbXBpbGF0aW9uIG9mIGBrZXJuZWwvc2NoZWQvZXh0L2V4dC5jYCBpcyBjb25kaXRpb25hbCDigJMgaXQncyBvbmx5IGluY2x1ZGVkIHdoZW4gYENPTkZJR19TQ0hFRF9DTEFTU19FWFRgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgbW9yZSBzZW5zZS4gTm93IEkgbmVlZCB0byBmaW5kIHdoZXJlIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZC4gTGV0IG1lIGNoZWNrIHRoZSBga2VybmVsL3NjaGVkL0tjb25maWdgIGZpbGUgb3IgYW5vdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBzZWUgaG93IGBTQ0hFRF9DTEFTU19FWFRgIGlzIGV4cG9zZWQgYW5kIGNvbnRyb2xsZWQuIFRoYXQgc2hvdWxkIGV4cGxhaW4gdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzUzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjM0LjkyNzEyMzUxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMjkzMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2J1aWxkX3BvbGljeS5jLTU5LVxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYzo2MDojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9idWlsZF9wb2xpY3kuYy02MS0jIGluY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9MjI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLFxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy0yNjAtXFxua2VybmVsL3NjaGVkL2NvcmUuYzoyNjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTI2Mi1cXHRpZiAocGEgPT0gTUFYX1JUX1BSSU8gKyBNQVhfTklDRSArIDEpXFx0LyogZXh0ICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ1NzM9c3RhdGljIHZvaWQgX19zY2hlZF9mb3JrKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEwLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NDYxMTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYxMi1cXHRpbml0X3NjeF9lbnRpdHkoXFx1MDAyNnAtXFx1MDAzZXNjeCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTQ4MTM9aW50IHNjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTQ4NjAtXFx0XFx0cC1cXHUwMDNlc2NoZWRfY2xhc3MgPSBcXHUwMDI2cnRfc2NoZWRfY2xhc3M7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo0ODYxOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2NvcmUuYy00ODYyLVxcdH0gZWxzZSBpZiAodGFza19zaG91bGRfc2N4KHAtXFx1MDAzZXBvbGljeSkpIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM9NzYwOD1jb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKl9fc2V0c2NoZWR1bGVyX2NsYXNzKGludCBwb2xpY3ksIGludCBwcmlvKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy03NjE1LVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NzYxNjojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNzYxNy1cXHRpZiAodGFza19zaG91bGRfc2N4KHBvbGljeSkpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTg4Njg9aW50IHNjaGVkX2NwdV9keWluZyh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy04ODgyLVxcdGRsX3NlcnZlcl9zdG9wKFxcdTAwMjZycS1cXHUwMDNlZmFpcl9zZXJ2ZXIpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODg4MzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODg4NC1cXHRkbF9zZXJ2ZXJfc3RvcChcXHUwMDI2cnEtXFx1MDAzZWV4dF9zZXJ2ZXIpO1xcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2MC1cXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzLCBcXHUwMDI2aWRsZV9zY2hlZF9jbGFzcykpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmM6ODk2MTojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk2Mi1cXHRCVUdfT04oIXNjaGVkX2NsYXNzX2Fib3ZlKFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzLCBcXHUwMDI2ZXh0X3NjaGVkX2NsYXNzKSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkwNzgtXFx0XFx0ZmFpcl9zZXJ2ZXJfaW5pdChycSk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MDc5OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MDgwLVxcdFxcdGV4dF9zZXJ2ZXJfaW5pdChycSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xMDg9c3RhdGljIGlubGluZSB1OCBkbF9nZXRfdHlwZShzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSwgc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jLTExMy1cXHRcXHRyZXR1cm4gRExfU0VSVkVSX0ZBSVI7XFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM6MTE0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmMtMTE1LVxcdGlmIChkbF9zZSA9PSBcXHUwMDI2cnEtXFx1MDAzZWV4dF9zZXJ2ZXIpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYz0xODQyPXZvaWQgc2NoZWRfaW5pdF9kbF9zZXJ2ZXJzKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY2LVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjE4Njc6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0xODY4LVxcdFxcdGRsX3NlID0gXFx1MDAyNnJxLVxcdTAwM2VleHRfc2VydmVyO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ1MT1zdGF0aWMgdm9pZCBkbF9zZXJ2ZXJfYWRkX2J3KHN0cnVjdCByb290X2RvbWFpbiAqcmQsIGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDU4LVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NTk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDYwLVxcdGRsX3NlID0gXFx1MDAyNmNwdV9ycShjcHUpLVxcdTAwM2VleHRfc2VydmVyO1xcbi0tXFxua2VybmVsL3NjaGVkL2RlYWRsaW5lLmM9MzQ2Nj1zdGF0aWMgdTY0IGRsX3NlcnZlcl9yZWFkX2J3KGludCBjcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDczLVxcbmtlcm5lbC9zY2hlZC9kZWFkbGluZS5jOjM0NzQ6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYy0zNDc1LVxcdGlmIChjcHVfcnEoY3B1KS1cXHUwMDNlZXh0X3NlcnZlci5kbF9zZXJ2ZXIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTQ5ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZGVidWdmc19zY2hlZDtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy00OTUtXFxua2VybmVsL3NjaGVkL2RlYnVnLmM6NDk2OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNDk3LXN0YXRpYyBzc2l6ZV90XFxuLS1cXG5rZXJuZWwvc2NoZWQvZGVidWcuYz01NjE9c3RhdGljIHZvaWQgZGVidWdmc19leHRfc2VydmVyX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTU4MC19XFxua2VybmVsL3NjaGVkL2RlYnVnLmM6NTgxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL2RlYnVnLmMtNTgyLVxcbi0tXFxua2VybmVsL3NjaGVkL2RlYnVnLmM9NzEyPXN0YXRpYyBfX2luaXQgaW50IHNjaGVkX2luaXRfZGVidWcodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTc2OS1cXHRkZWJ1Z2ZzX2ZhaXJfc2VydmVyX2luaXQoKTtcXG5rZXJuZWwvc2NoZWQvZGVidWcuYzo3NzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy03NzEtXFx0ZGVidWdmc19leHRfc2VydmVyX2luaXQoKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jPTE0MDY9dm9pZCBwcm9jX3NjaGVkX3Nob3dfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jLTE1MDUtXFx0fVxcbmtlcm5lbC9zY2hlZC9kZWJ1Zy5jOjE1MDY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZGVidWcuYy0xNTA3LVxcdF9fUFMoXFxcImV4dC5lbmFibGVkXFxcIiwgdGFza19vbl9zY3gocCkpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz02NDE9dm9pZCBzY3hfc2V0X3Rhc2tfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgc3RhdGUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTY5Ny0gKiBzY3hfdGFza3MgY2FuIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgYWx3YXlzIHVzaW5nIGNncm91cCBpdGVyYXRpb24gaWZcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjY5ODogKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUIGRlcGVuZHMgb24gQ09ORklHX0NHUk9VUFMuXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02OTktICpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtOC0gKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjk6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTEwLVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD0zOT1ib29sIHNjeF9wcmlvX2xlc3MoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICphLCBjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmIsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTQyLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NDM6I2Vsc2VcXHQvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC00NC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NTc9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2NoZWRfZXh0X2NsYXNzKHZvaWQpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC01OC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjU5OiNlbmRpZlxcdC8qIENPTkZJR19TQ0hFRF9DTEFTU19FWFQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYwLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NjE6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTYyLXZvaWQgX19zY3hfdXBkYXRlX2lkbGUoc3RydWN0IHJxICpycSwgYm9vbCBpZGxlLCBib29sIGRvX25vdGlmeSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvaWRsZS5jPTU1Nz1zdGF0aWMgdm9pZCB1cGRhdGVfY3Vycl9pZGxlKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU2OS1cXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXFx1MDAyNnJxLVxcdTAwM2VmYWlyX3NlcnZlciwgZGVsdGFfZXhlYyk7XFxua2VybmVsL3NjaGVkL2lkbGUuYzo1NzA6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvaWRsZS5jLTU3MS1cXHRkbF9zZXJ2ZXJfdXBkYXRlX2lkbGUoXFx1MDAyNnJxLVxcdTAwM2VleHRfc2VydmVyLCBkZWx0YV9leGVjKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5ND1zdGF0aWMgaW5saW5lIGludCBub3JtYWxfcG9saWN5KGludCBwb2xpY3kpXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTk1LXtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTY6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTctXFx0aWYgKHBvbGljeSA9PSBTQ0hFRF9FWFQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD02ODE9c3RydWN0IGNmc19ycSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC03NzktXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6NzgwOiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtNzgxLS8qIHNjeF9ycS1cXHUwMDNlZmxhZ3MsIHByb3RlY3RlZCBieSB0aGUgcnEgbG9jayAqL1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9ODExPXN0cnVjdCBzY3hfcnEge1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtODUwLX07XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6ODUxOiNlbmRpZiAvKiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUICovXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtODUyLVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTE1OT1zdHJ1Y3QgcnEge1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxMy1cXHRzdHJ1Y3QgZGxfcnFcXHRcXHRkbDtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMjE0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTIxNS1cXHRzdHJ1Y3Qgc2N4X3JxXFx0XFx0c2N4O1xcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTg4NT1leHRlcm4gc3RydWN0IGJhbGFuY2VfY2FsbGJhY2sgYmFsYW5jZV9wdXNoX2NhbGxiYWNrO1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODYtXFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTg4NzojaWZkZWYgQ09ORklHX1NDSEVEX0NMQVNTX0VYVFxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE4ODgtZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyBleHRfc2NoZWRfY2xhc3M7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xOTA0PXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfcnFfY2xvY2tfaW52YWxpZGF0ZShzdHJ1Y3QgcnEgKnJxKVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMTkxMC1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxOTExOiNlbHNlIC8qICFDT05GSUdfU0NIRURfQ0xBU1NfRVhUOiAqL1xcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTE5MTItI2RlZmluZSBzY3hfZW5hYmxlZCgpXFx0XFx0ZmFsc2VcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oPTE5MTY9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ycV9jbG9ja19pbnZhbGlkYXRlKHN0cnVjdCBycSAqcnEpIHt9XFxua2VybmVsL3NjaGVkL3NjaGVkLmg6MTkxNzojZW5kaWYgLyogIUNPTkZJR19TQ0hFRF9DTEFTU19FWFQgKi9cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xOTE4LVxcbi0tXFxua2VybmVsL3NjaGVkL3NjaGVkLmg9Mjg0MT1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBzY2hlZF9jbGFzcyAqbmV4dF9hY3RpdmVfY2xhc3MoY29uc3Qgc3RydWN0IHNjaGVkX2NsYXNzICpjbGFzcylcXG4tLVxcbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTI4NDMtXFx0Y2xhc3MrKztcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoyODQ0OiNpZmRlZiBDT05GSUdfU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL3NjaGVkL3NjaGVkLmgtMjg0NS1cXHRpZiAoc2N4X3N3aXRjaGVkX2FsbCgpIFxcdTAwMjZcXHUwMDI2IGNsYXNzID09IFxcdTAwMjZmYWlyX3NjaGVkX2NsYXNzKVxcbi0tXFxua2VybmVsL3NjaGVkL3RvcG9sb2d5LmM9NDc0PXZvaWQgcnFfYXR0YWNoX3Jvb3Qoc3RydWN0IHJxICpycSwgc3RydWN0IHJvb3RfZG9tYWluICpyZClcXG4tLVxcbmtlcm5lbC9zY2hlZC90b3BvbG9neS5jLTUxMi1cXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYzo1MTM6I2lmZGVmIENPTkZJR19TQ0hFRF9DTEFTU19FWFRcXG5rZXJuZWwvc2NoZWQvdG9wb2xvZ3kuYy01MTQtXFx0aWYgKHJxLVxcdTAwM2VleHRfc2VydmVyLmRsX3NlcnZlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6MzQuOTczMjU1MzQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODE5NzUxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHRlbmRlZCBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgaGVyZSBpcyBgU0NIRURfQ0xBU1NfRVhUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggaXQuIEhtbSwgdGhlIGNvZGUgc2VlbXMgdG8gYmUgZm9jdXNlZCBhcm91bmQgYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gVGhhdCdzIHVzZWQgaW4gc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIEFsbCBvZiB0aGVzZSwgdGhlIGNvZGUgdGVsbHMgbWUsIGFyZSBsb2NhdGVkIHdpdGhpbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgYW5kIGBrZXJuZWwvc2NoZWQvZXh0L3N1Yi5jYC5cblxuUmlnaHQsIGBTQ0hFRF9DTEFTU19FWFRg4oCmIG1ha2luZyBhIG5vdGUgdG8ga2VlcCB0aGF0IGNvbmZpZ3VyYXRpb24gaW4gbWluZCBhcyBJIHByb2Nlc3MgdGhpcy4gSGFuZyBvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBga2VybmVsL3NjaGVkL2V4dC9leHQuY2AgYW5kIHNlYXJjaCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBgY2dyb3VwX2luaXRgIHRvIGNvbmZpcm0gdGhhdCBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjA3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjQxLjY1NTIzMzcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY2Mzg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjZ3JvdXBfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvZXh0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ2ODA9dm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ2OTEtICpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ2OTI6ICogUmV0dXJuIHRoZSBzY2hlZCB0aGF0IEB0ZydzIG9wcy5jZ3JvdXBfaW5pdCgpIHN1Y2NlZWRlZCBvbiwgJU5VTEwgaWYgQHRnXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NjkzLSAqIGlzbid0IGluaXRlZC4gQW4gYXV0b2dyb3VwIHRnIGhhcyBubyBjZ3JvdXAgb2YgaXRzIG93biBhbmQgcmVzb2x2ZXMgdG8gdGhlXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3MDU9c3RhdGljIHN0cnVjdCBzY3hfc2NoZWQgKnNjeF90Z19zY2hlZChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3MTEtXFx0XFx0dGcgPSBcXHUwMDI2cm9vdF90YXNrX2dyb3VwO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDcxMjpcXHQvKiBJTklURUQgbWVhbnMgb3BzLmNncm91cF9pbml0KCkgc3VjY2VlZGVkIG9uIEB0Zy1cXHUwMDNlc2N4LnNjaGVkICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzEzLVxcdHJldHVybiAodGctXFx1MDAzZXNjeC5mbGFncyBcXHUwMDI2IFNDWF9UR19JTklURUQpID8gdGctXFx1MDAzZXNjeC5zY2hlZCA6IE5VTEw7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3MjUtICogUmV0dXJuICVOVUxMIGlmIHRoZSBwYXJlbnQgdGFza19ncm91cCBoYXMgbm8gc2NoZWQuIFRoYXQgY2FuIGhhcHBlbiB3aGVuIHRoZVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDcyNjogKiBwYXJlbnQncyBvcHMuY2dyb3VwX2luaXQoKSBmYWlscyB3aGlsZSBhIHN1Yi1zY2hlZHVsZXIgaXMgYmVpbmcgZGlzYWJsZWQuXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzI3LSAqXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ3NDI9aW50IHNjeF90Z19vbmxpbmUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzYxLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc2MjpcXHRcXHRpZiAoU0NYX0hBU19PUChzY2gsIGNncm91cF9pbml0KSkge1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc2MzpcXHRcXHRcXHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzY0LVxcdFxcdFxcdFxcdHsgLndlaWdodCA9IHRnLVxcdTAwM2VzY3gud2VpZ2h0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NzY5LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDc3MDpcXHRcXHRcXHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgTlVMTCwgdGctXFx1MDAzZWNzcy5jZ3JvdXAsIFxcdTAwMjZhcmdzKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NzItXFx0XFx0XFx0aWYgKHJldClcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ3NzM6XFx0XFx0XFx0XFx0cmV0ID0gc2N4X29wc19zYW5pdGl6ZV9lcnIoc2NoLCBcXFwiY2dyb3VwX2luaXRcXFwiLCByZXQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDc3NC1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUxNDc9c3RhdGljIHZvaWQgc2N4X2Nncm91cF9leGl0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE1Ny1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNTg6XFx0XFx0LyogYWxzbyBjbGVhciB0aGUgc2NoZWQgb2YgdGdzIHdob3NlIG9wcy5jZ3JvdXBfaW5pdCgpIGZhaWxlZCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE1OS1cXHRcXHR0Zy1cXHUwMDNlc2N4LnNjaGVkID0gTlVMTDtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE2Ny1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjUxNjg6c3RhdGljIGludCBzY3hfY2dyb3VwX2luaXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE2OS17XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxODItXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo1MTgzOlxcdFxcdGlmIChzY2gtXFx1MDAzZW9wcy5jZ3JvdXBfaW5pdCkge1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE4NDpcXHRcXHRcXHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxODUtXFx0XFx0XFx0XFx0LndlaWdodCA9IHRnLVxcdTAwM2VzY3gud2VpZ2h0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTkxLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5MjpcXHRcXHRcXHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCwgTlVMTCwgY3NzLVxcdTAwM2VjZ3JvdXAsIFxcdTAwMjZhcmdzKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTUxOTMtXFx0XFx0XFx0aWYgKHJldCkge1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE5NDpcXHRcXHRcXHRcXHRzY3hfZXJyb3Ioc2NoLCBcXFwib3BzLmNncm91cF9pbml0KCkgZmFpbGVkICglZClcXFwiLCByZXQpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE5NS1cXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz01MjA3PXN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfZXhpdChzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo1MjA4OnN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCkgeyByZXR1cm4gMDsgfVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTIwOS0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NzQ2OD1zdGF0aWMgdm9pZCBzY3hfcm9vdF9lbmFibGVfd29ya2ZuKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc3MTAtXFx0c2V0X2Nncm91cF9zY2hlZChzY2hfY2dyb3VwKHNjaCksIHNjaCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo3NzExOlxcdHJldCA9IHNjeF9jZ3JvdXBfaW5pdChzY2gpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzcxMi1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcyPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgwLSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDgxOlxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwODItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgc2NoZWRfZXh0X29wcywgY2dyb3VwX2V4aXQpOlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjM3PXN0YXRpYyB2b2lkIHNjaGVkX2V4dF9vcHNfX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODIzOC0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODIzOTpzdGF0aWMgczMyIHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncykgeyByZXR1cm4gLUVJTlZBTDsgfVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI0MC1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfZXhpdChzdHJ1Y3QgY2dyb3VwICpjZ3JwKSB7fVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjU5PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyBfX2JwZl9vcHNfc2NoZWRfZXh0X29wcyA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4MC0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI4MTpcXHQuY2dyb3VwX2luaXRcXHRcXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9pbml0LFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI4Mi1cXHQuY2dyb3VwX2V4aXRcXHRcXHQ9IHNjaGVkX2V4dF9vcHNfX2Nncm91cF9leGl0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MzI2PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wc19jaWQgX19icGZfb3BzX3NjaGVkX2V4dF9vcHNfY2lkID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzQ1LSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MzQ2OlxcdC5jcHVjdGxfaW5pdFxcdFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2luaXQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MzQ3LVxcdC5jcHVjdGxfZXhpdFxcdFxcdD0gc2NoZWRfZXh0X29wc19fY2dyb3VwX2V4aXQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwNzgzPXN0YXRpYyBjb25zdCB1MzIgc2N4X2tmX2FsbG93X2ZsYWdzW10gPSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwNzkwLSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDc5MTpcXHRbU0NYX09QX0lEWChjZ3JvdXBfaW5pdCldXFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5Mi1cXHRbU0NYX09QX0lEWChjZ3JvdXBfZXhpdCldXFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTU0LSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDk1NTpcXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9pbml0LCBjcHVjdGxfaW5pdCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1Ni1cXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9leGl0LCBjcHVjdGxfZXhpdCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjQ4PXN0cnVjdCBzY3hfZXhpdF90YXNrX2FyZ3Mge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI1Mi1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjUzOi8qIGFyZ3VtZW50IGNvbnRhaW5lciBmb3Igb3BzLmNncm91cF9pbml0KCkgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjU0OnN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyB7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI1NS1cXHQvKiB0aGUgd2VpZ2h0IG9mIHRoZSBjZ3JvdXAgWzEuLjEwMDAwXSAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTMyMj1zdHJ1Y3Qgc2NoZWRfZXh0X29wcyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNjUzLVxcdC8qKlxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo2NTQ6XFx0ICogQGNncm91cF9pbml0OiBJbml0aWFsaXplIGEgY2dyb3VwXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1NS1cXHQgKiBAY2dycDogY2dyb3VwIGJlaW5nIGluaXRpYWxpemVkXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtNjYyLVxcdCAqIENncm91cCBoYW5kb3ZlcnMgYWxzbyBnZW5lcmF0ZSB0aGVzZSBvcHM6IGFuIGVuYWJsaW5nIHN1Yi1zY2hlZHVsZXJcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NjYzOlxcdCAqIHJlY2VpdmVzIG9wcy5jZ3JvdXBfaW5pdCgpIGZvciBldmVyeSBjZ3JvdXAgaW4gaXRzIHN1YnRyZWUgd2hpbGUgdGhlXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY2NC1cXHQgKiBwcmV2aW91cyBzY2hlZCByZWNlaXZlcyBvcHMuY2dyb3VwX2V4aXQoKSwgYW5kIGRpc2FibGluZyByZXZlcnNlcyB0aGVcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02NzUtXFx0ICovXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY3NjpcXHRzMzIgKCpjZ3JvdXBfaW5pdCkoc3RydWN0IGNncm91cCAqY2dycCxcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6Njc3OlxcdFxcdFxcdCAgIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY3OC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02ODMtXFx0ICogRXhpdCBAY2dycCBmb3Igc2NoZWRfZXh0LCBkZWxpdmVyZWQgdG8gdGhlIHNjaGVkIHdob3NlXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjY4NDpcXHQgKiBvcHMuY2dyb3VwX2luaXQoKSBpdCBwYWlycyB3aXRoLCBlaXRoZXIgd2hlbiB0aGUgQlBGIHNjaGVkdWxlciBpc1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC02ODUtXFx0ICogYmVpbmcgdW5sb2FkZWQgb3Igd2hlbiBAY2dycCBpcyBkZXN0cm95ZWQuIFRoaXMgb3BlcmF0aW9uIG1heSBibG9jay5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03MDQtXFx0ICogb3BzLmV4aXRfdGFzaygpIGFuZCBvcHMuaW5pdF90YXNrKCkgaW5zdGVhZC4gQGZyb20gYW5kIEB0byBjYW5cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NzA1OlxcdCAqIHJlZmVyZW5jZSBjZ3JvdXBzIHRoZSBzY2hlZCBuZXZlciByZWNlaXZlZCBvcHMuY2dyb3VwX2luaXQoKSBmb3IsIGFzXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTcwNi1cXHQgKiB0aGUgY3B1IGNvbnRyb2xsZXIgY2FuIGJlIGNvYXJzZXIgdGhhbiB0aGUgc3ViLXNjaGVkdWxlciB0b3BvbG9neS5cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03NDUtXFx0ICogZGVsaXZlcmVkIHRvIEBjZ3JwJ3MgcGFyZW50J3Mgc2NoZWQuIFRoYXQgc2NoZWQgbWF5IG5ldmVyIGhhdmUgc2Vlblxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaDo3NDY6XFx0ICogb3BzLmNncm91cF9pbml0KCkgZm9yIEBjZ3JwIC0gYXQgYSBzdWItc2NoZWR1bGVyIGF0dGFjaCBwb2ludCwgdGhlXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc0Ny1cXHQgKiBwYXJlbnQgc2NoZWQgdHJhY2tzIEBjZ3JwIHRocm91Z2ggb3BzLnN1Yl9hdHRhY2goKSBpbnN0ZWFkLlxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oPTEwNDY9c3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDcyLSNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwNzM6XFx0czMyICgqY3B1Y3RsX2luaXQpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyAqYXJncyk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTEwNzQtXFx0dm9pZCAoKmNwdWN0bF9leGl0KShzdHJ1Y3QgY2dyb3VwICpjZ3JwKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTI5ND1zdGF0aWMgdm9pZCBzY3hfZmFpbF9wYXJlbnQoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzM2LSAqICVTQ1hfVEdfSU5JVEVEIHN0YXlzIHNldCB0aHJvdWdob3V0LCBleGNlcHQgZm9yIGEgdGFza19ncm91cCB3aG9zZVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTMzNzogKiBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgb24gdGhlIHBhcmVudCAoc2VlIHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWUoKSk6XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzM4LSAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gZXhpdCBmcm9tIHRoZSBwYXJlbnQgYW5kICVTQ1hfVEdfSU5JVEVEIGlzIHNldCBiYWNrIHdpdGhcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTM0OT1zdGF0aWMgczMyIHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNTgtXFx0XFx0c3RydWN0IHRhc2tfZ3JvdXAgKnRnID0gY3NzX3RnKGNzcyk7XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzU5OlxcdFxcdHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyBhcmdzID0ge1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTM2MC1cXHRcXHRcXHQud2VpZ2h0ID0gdGctXFx1MDAzZXNjeC53ZWlnaHQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzNzAtXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzcxOlxcdFxcdGlmIChTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX2luaXQpKSB7XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzcyOlxcdFxcdFxcdHJldCA9IFNDWF9DQUxMX09QX1JFVChzY2gsIGNncm91cF9pbml0LCBOVUxMLCBjc3MtXFx1MDAzZWNncm91cCwgXFx1MDAyNmFyZ3MpO1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTM3My1cXHRcXHRcXHRpZiAocmV0KSB7XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYzoxMzc0OlxcdFxcdFxcdFxcdHNjeF9lcnJvcihzY2gsIFxcXCJvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgKCVkKVxcXCIsIHJldCk7XFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzc1LVxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzkwLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTM5MTpcXHRcXHQvKiBza2lwIHRoZSBleGl0IGlmIHRoZSBwYXJlbnQncyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTEzOTItXFx0XFx0aWYgKCh0Zy1cXHUwMDNlc2N4LmZsYWdzIFxcdTAwMjYgU0NYX1RHX0lOSVRFRCkgXFx1MDAyNlxcdTAwMjYgU0NYX0hBU19PUChwYXJlbnQsIGNncm91cF9leGl0KSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTQyNy0gKiB0YXNrIHJlLWhvbWluZy4gVGhlIHJlbWFpbmluZyB0YXNrX2dyb3VwcyBhcmUgcHVudGVkOiB0aGV5IG1vdmUgdG8gdGhlIHBhcmVudFxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQyODogKiBhbnl3YXkgd2l0aCAlU0NYX1RHX0lOSVRFRCBjbGVhcmVkLCBhcyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgb3IgbmV2ZXIgcmFuXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDI5LSAqIGZvciB0aGVtLiBBIHB1bnRlZCB0YXNrX2dyb3VwIGdldHMgbm8gY2dyb3VwIG9wcy4gVGhlIGR5aW5nIHBhcmVudCdzIG93blxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYz0xNDM4PXN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfcmV0dXJuX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDUzLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ1NDpcXHRcXHQvKiBza2lwIHRoZSBleGl0IGlmIEBzY2gncyBvcHMuY2dyb3VwX2luaXQoKSBmYWlsZWQgZm9yIHRoZSB0ZyAqL1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTQ1NS1cXHRcXHRpZiAoKHRnLVxcdTAwM2VzY3guZmxhZ3MgXFx1MDAyNiBTQ1hfVEdfSU5JVEVEKSBcXHUwMDI2XFx1MDAyNiBTQ1hfSEFTX09QKHNjaCwgY2dyb3VwX2V4aXQpKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDYyLVxcdFxcdHN0cnVjdCB0YXNrX2dyb3VwICp0ZyA9IGNzc190Zyhjc3MpO1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ2MzpcXHRcXHRzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9IHtcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0NjQtXFx0XFx0XFx0LndlaWdodCA9IHRnLVxcdTAwM2VzY3gud2VpZ2h0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDkwLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ5MTpcXHRcXHRpZiAoU0NYX0hBU19PUChwYXJlbnQsIGNncm91cF9pbml0KSkge1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ5MjpcXHRcXHRcXHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQocGFyZW50LCBjZ3JvdXBfaW5pdCwgTlVMTCwgY3NzLVxcdTAwM2VjZ3JvdXAsIFxcdTAwMjZhcmdzKTtcXG5rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jLTE0OTMtXFx0XFx0XFx0aWYgKHJldCkge1xcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTQ5NDpcXHRcXHRcXHRcXHRzY3hfZXJyb3IocGFyZW50LCBcXFwib3BzLmNncm91cF9pbml0KCkgZmFpbGVkICglZCkgd2hpbGUgZGlzYWJsaW5nIGEgc3ViLXNjaGVkdWxlclxcXCIsXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xNDk1LVxcdFxcdFxcdFxcdFxcdCAgcmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NDEuNzAzOTAwNTM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTYxMzE4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTY2hlZHVsZXIgRXh0ZW5zaW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGFjdHVhbGx5IGVuYWJsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBjZ3JvdXBfaW5pdGAgd2l0aGluIHRoZSBzY2hlZHVsZXIgZXh0ZW5zaW9uIChgc2NoZWRfZXh0YCkgZnJhbWV3b3JrLiBOb3csIHRvIGJlIGFic29sdXRlbHkgc3VyZSwgYW5kIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYnJvYWRlciBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGBrZXJuZWwvc2NoZWQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGBFWFRfR1JPVVBfU0NIRURgIGFuZCBob3BlZnVsbHkgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZlYXR1cmUgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVkdWxpbmcgYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSBteSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGFuZCBwb3RlbnRpYWxseSB1bmNvdmVyIHNvbWUgbmV3IGluc2lnaHRzIGFib3V0IHRoaXMgc2VjdGlvbiBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEwOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjQ1LjUwMDAzNDM5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3OTY1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhUX0dST1VQX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuYz04OTUxPXZvaWQgX19pbml0IHNjaGVkX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtODk3My0jZW5kaWYgLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjg5NzQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTg5NzUtXFx0c2N4X3RnX2luaXQoXFx1MDAyNnJvb3RfdGFza19ncm91cCk7XFxua2VybmVsL3NjaGVkL2NvcmUuYzo4OTc2OiNlbmRpZiAvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2NvcmUuYy04OTc3LSNpZmRlZiBDT05GSUdfUlRfR1JPVVBfU0NIRURcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9Mzc5MD1zdGF0aWMgdm9pZCB0YXNrX3RpY2tfc2N4KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IHF1ZXVlZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMzgwOC1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjM4MDk6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MTAtc3RhdGljIHN0cnVjdCBjZ3JvdXAgKnRnX2NncnAoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0zODI0LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MzgyNTojZWxzZVxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MjYtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MjgtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzozODI5OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTM4MzAtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ2NDA9Ym9vbCBzY3hfY2FuX3N0b3BfdGljayhzdHJ1Y3QgcnEgKnJxKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00Njc1LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDY3NjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDY3Ny1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk0Mz12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDk2My19XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTY0OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5NjUtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTY2OiNpZiBkZWZpbmVkKENPTkZJR19FWFRfR1JPVVBfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX0VYVF9TVUJfU0NIRUQpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTY3LXN0YXRpYyBzdHJ1Y3QgY2dyb3VwICpyb290X2Nncm91cCh2b2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00OTc3PXZvaWQgc2N4X2Nncm91cF9sb2NrKHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5NzktXFx0Y2dyb3VwX2xvY2soKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5ODA6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5ODEtXFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnNjeF9jZ3JvdXBfb3BzX3J3c2VtKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDk4NT12b2lkIHNjeF9jZ3JvdXBfdW5sb2NrKHZvaWQpXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTg2LXtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjQ5ODc6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5ODgtXFx0cGVyY3B1X3VwX3dyaXRlKFxcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTEtfVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDk5MjojZWxzZVxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgfHwgQ09ORklHX0VYVF9TVUJfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTMtc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwICpyb290X2Nncm91cCh2b2lkKSB7IHJldHVybiBOVUxMOyB9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5OTU9c3RhdGljIGlubGluZSB2b2lkIHNjeF9jZ3JvdXBfdW5sb2NrKHZvaWQpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0OTk2OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgfHwgQ09ORklHX0VYVF9TVUJfU0NIRUQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5OTctXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTUxMDc9c3RhdGljIHZvaWQgZGVzdHJveV9kc3Eoc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1NjQgZHNxX2lkKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01MTQ1LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTE0NjojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTE0Ny1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX2V4aXQoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDcyPXN0YXRpYyBpbnQgYnBmX3NjeF9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDc5LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGluaXRfdGFzayk6XFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDgwOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDgxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHNjaGVkX2V4dF9vcHMsIGNncm91cF9pbml0KTpcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODIzNz1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyMzg6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyMzktc3RhdGljIHMzMiBzY2hlZF9leHRfb3BzX19jZ3JvdXBfaW5pdChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgKmFyZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODI0Nj1zdGF0aWMgdm9pZCBzY2hlZF9leHRfb3BzX19jZ3JvdXBfc2V0X2lkbGUoc3RydWN0IGNncm91cCAqY2dycCwgYm9vbCBpZGxlKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODI0NzojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MjQ4LXN0YXRpYyBzMzIgc2NoZWRfZXh0X29wc19fc3ViX2F0dGFjaChzdHJ1Y3Qgc2N4X3N1Yl9hdHRhY2hfYXJncyAqYXJncykgeyByZXR1cm4gLUVJTlZBTDsgfVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MjU5PXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZXh0X29wcyBfX2JwZl9vcHNfc2NoZWRfZXh0X29wcyA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODI3OS1cXHQuZGlzYWJsZVxcdFxcdD0gc2NoZWRfZXh0X29wc19fZGlzYWJsZSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgyODA6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgyODEtXFx0LmNncm91cF9pbml0XFx0XFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfaW5pdCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODMyNj1zdGF0aWMgc3RydWN0IHNjaGVkX2V4dF9vcHNfY2lkIF9fYnBmX29wc19zY2hlZF9leHRfb3BzX2NpZCA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODM0NC1cXHQuZGlzYWJsZVxcdFxcdD0gc2NoZWRfZXh0X29wc19fZGlzYWJsZSxcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgzNDU6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgzNDYtXFx0LmNwdWN0bF9pbml0XFx0XFx0PSBzY2hlZF9leHRfb3BzX19jZ3JvdXBfaW5pdCxcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9MTA3ODM9c3RhdGljIGNvbnN0IHUzMiBzY3hfa2ZfYWxsb3dfZmxhZ3NbXSA9IHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3ODktXFx0W1NDWF9PUF9JRFgoZHVtcCldXFx0XFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzoxMDc5MDojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3OTEtXFx0W1NDWF9PUF9JRFgoY2dyb3VwX2luaXQpXVxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDc5Ny1cXHRbU0NYX09QX0lEWChjZ3JvdXBfc2V0X2lkbGUpXVxcdD0gU0NYX0tGX0FMTE9XX1VOTE9DS0VELFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6MTA3OTg6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtMTA3OTktXFx0W1NDWF9PUF9JRFgoc3ViX2F0dGFjaCldXFx0PSBTQ1hfS0ZfQUxMT1dfVU5MT0NLRUQsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTEwODk4PXN0YXRpYyBpbnQgX19pbml0IHNjeF9pbml0KHZvaWQpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTEwOTUzLVxcdENJRF9PRkZTRVRfTUFUQ0goZHVtcF9jcHUsIGR1bXBfY2lkKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjEwOTU0OiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMDk1NS1cXHRDSURfT0ZGU0VUX01BVENIKGNncm91cF9pbml0LCBjcHVjdGxfaW5pdCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTExMDUxPV9faW5pdGNhbGwoc2N4X2luaXQpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2MS0gKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDYyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy0xMTA2My1ERUZJTkVfU0NYX0NPTVBBVF9NQVJLRVIoY2dyb3VwX3NldF9iYW5kd2lkdGhfbWF5X3NsZWVwKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjExMDY0OiNlbmRpZlxcdC8qIENPTkZJR19FWFRfR1JPVVBfU0NIRUQgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9NzA9c3RhdGljIGlubGluZSB2b2lkIHNjeF91cGRhdGVfaWRsZShzdHJ1Y3QgcnEgKnJxLCBib29sIGlkbGUsIGJvb2wgZG9fbm90aWZ5KSB7fVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC03My0jaWZkZWYgQ09ORklHX0NHUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6NzQ6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTc1LXZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9ODM9dm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oOjg0OiNlbHNlXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtODUtc3RhdGljIGlubGluZSB2b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zykge31cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg9OTM9c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpIHt9XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo5NDojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC05NS0jZW5kaWZcXHQvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg9MjM1PXN0cnVjdCBzY3hfaW5pdF90YXNrX2FyZ3Mge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI0MC1cXHRib29sXFx0XFx0XFx0Zm9yaztcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6MjQxOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTI0Mi1cXHQvKiB0aGUgY2dyb3VwIHRoZSB0YXNrIGlzIGpvaW5pbmcgKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0zMjI9c3RydWN0IHNjaGVkX2V4dF9vcHMge1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1MS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmg6NjUyOiNpZmRlZiBDT05GSUdfRVhUX0dST1VQX1NDSEVEXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTY1My1cXHQvKipcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC03ODYtXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjc4NzojZW5kaWZcXHQvKiBDT05GSUdfRVhUX0dST1VQX1NDSEVEICovXFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oLTc4OC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0xMDQ2PXN0cnVjdCBzY2hlZF9leHRfb3BzX2NpZCB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3MS1cXHR2b2lkICgqZHVtcF90YXNrKShzdHJ1Y3Qgc2N4X2R1bXBfY3R4ICpjdHgsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwNzI6I2lmZGVmIENPTkZJR19FWFRfR1JPVVBfU0NIRURcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMTA3My1cXHRzMzIgKCpjcHVjdGxfaW5pdCkoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzICphcmdzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDgzLVxcdHZvaWQgKCpjcHVjdGxfc2V0X2lkbGUpKHN0cnVjdCBjZ3JvdXAgKmNncnAsIGJvb2wgaWRsZSk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjEwODQ6I2VuZGlmXFx0LyogQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaC0xMDg1LVxcdHMzMiAoKnN1Yl9hdHRhY2gpKHN0cnVjdCBzY3hfc3ViX2F0dGFjaF9hcmdzICphcmdzKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaD0yMDc5PXZvaWQgc2N4X2Rpc2FibGVfYW5kX2V4aXRfdGFzayhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxua2VybmVsL3NjaGVkL2V4dC9pbnRlcm5hbC5oOjIwODA6I2lmIGRlZmluZWQoQ09ORklHX0VYVF9HUk9VUF9TQ0hFRCkgfHwgZGVmaW5lZChDT05GSUdfRVhUX1NVQl9TQ0hFRClcXG5rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmgtMjA4MS12b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM9MTI5ND1zdGF0aWMgdm9pZCBzY3hfZmFpbF9wYXJlbnQoc3RydWN0IHNjeF9zY2hlZCAqc2NoLFxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9zdWIuYy0xMzIwLVxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmM6MTMyMTojaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvc3ViLmMtMTMyMi0vKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NDUuNTUxODMyNzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxMDg3OTU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHdlIG5lZWQgYm90aCBgQ09ORklHX1NDSEVEX0NMQVNTX0VYVGAgYW5kIGBDT05GSUdfRVhUX0dST1VQX1NDSEVEYC4gQnV0IGhvbGQgb24sIGJlZm9yZSBJIGp1c3QgYmxpdGhlbHkgYXNzdW1lIEkgY2FuIGVuYWJsZSB0aGVtLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYSBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEknbSBmYWlybHkgY2VydGFpbiBgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRGAgbWlnaHQgaGluZ2Ugb24gYENPTkZJR19DR1JPVVBfU0NIRURgLiBJdOKAmXMgdGhlIHVzdWFsIGRhbmNlIHdpdGggdGhlc2Ugc2V0dGluZ3Mg4oCTIHlvdSBjYW4ndCBhbHdheXMganVzdCBmbGlwIHRoZSBzd2l0Y2ggd2l0aG91dCBjaGVja2luZyB1cHN0cmVhbS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSwgYW5kIGVuZCB1cCB3aXRoIGEga2VybmVsIHRoYXQgd29u4oCZdCBib290IG9yIHBlcmZvcm1zIHVucHJlZGljdGFibHkuIFJpZ2h0LCBsZXTigJlzIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRpbWUgdG8gZGlnIGludG8gYGtlcm5lbC9zY2hlZC9LY29uZmlnYCBhbmQgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRlcGVuZGVuY3kgaGllcmFyY2h5LiBTaG91bGRu4oCZdCB0YWtlIGxvbmcgdG8gc29ydCB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3MTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozMzo1MC4yNjI3MTQxNjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjYyNjk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUX0dST1VQX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjMzOjUwLjM1ODM4MjE1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE5MDU1Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uIFRoZSBuYXR1cmFsIGZpcnN0IHN0ZXAsIG9mIGNvdXJzZSwgaXMgdG8gY2hlY2sgdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBJdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGEgbG90IG9mIHRoZSBjb3JlIG9wdGlvbnMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBpbml0aWFsaXphdGlvbi4gSSdtIGhvcGluZyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IGEgc3BlY2lmaWMgYXNwZWN0IGlzIGNvbnRyb2xsZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDE3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NTUuNTc3NDQwNzE5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDc1NTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUX0dST1VQX1NDSEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTE5Nj1jb25maWcgUlRfR1JPVVBfU0NIRURfREVGQVVMVF9ESVNBQkxFRFxcbi0tXFxuaW5pdC9LY29uZmlnLTEyMDYtXFxuaW5pdC9LY29uZmlnOjEyMDc6Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMjA4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzM6NTUuNjcyMjAyNDY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjc0OTAzMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIGZvciBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHdvcmtzLiBXaGVyZSBkb2VzIHRoaXMgc3RhcnQ/IFJpZ2h0LCBgaW5pdC9LY29uZmlnYCBpcyB1c3VhbGx5IGEgZ29vZCBiZXQsIGVzcGVjaWFsbHkgZm9yIGNvcmUgaW5pdGlhbGl6YXRpb24gc3R1ZmYuIExldCdzIHplcm8gaW4gb24gYXJvdW5kIGxpbmUgMTIwNy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIGFuZCBob3cgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBsaW5rZWQgdG9nZXRoZXIgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHZhcmlvdXMgc2V0dGluZ3MuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byByZWNvbnN0cnVjdCB0aGUgbG9naWMgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDowMC43Mzk2OTQ5ODNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTkwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTkwOlxcdFxcdCAgVGhpcyBmZWF0dXJlIGxldHMgeW91IGV4cGxpY2l0bHkgYWxsb2NhdGUgcmVhbCBDUFUgYmFuZHdpZHRoXFxuMTE5MTpcXHRcXHQgIHRvIHRhc2sgZ3JvdXBzLiBJZiBlbmFibGVkLCBpdCB3aWxsIGFsc28gbWFrZSBpdCBpbXBvc3NpYmxlIHRvXFxuMTE5MjpcXHRcXHQgIHNjaGVkdWxlIHJlYWx0aW1lIHRhc2tzIGZvciBub24tcm9vdCB1c2VycyB1bnRpbCB5b3UgYWxsb2NhdGVcXG4xMTkzOlxcdFxcdCAgcmVhbHRpbWUgYmFuZHdpZHRoIGZvciB0aGVtLlxcbjExOTQ6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjExOTU6XFx0XFxuMTE5NjpcXHRjb25maWcgUlRfR1JPVVBfU0NIRURfREVGQVVMVF9ESVNBQkxFRFxcbjExOTc6XFx0XFx0Ym9vbCBcXFwiUmVxdWlyZSBib290IHBhcmFtZXRlciB0byBlbmFibGUgZ3JvdXAgc2NoZWR1bGluZyBmb3IgU0NIRURfUlIvRklGT1xcXCJcXG4xMTk4OlxcdFxcdGRlcGVuZHMgb24gUlRfR1JPVVBfU0NIRURcXG4xMTk5OlxcdFxcdGRlZmF1bHQgblxcbjEyMDA6XFx0XFx0aGVscFxcbjEyMDE6XFx0XFx0ICBXaGVuIHNldCwgdGhlIFJUIGdyb3VwIHNjaGVkdWxpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVGhlIG9wdGlvblxcbjEyMDI6XFx0XFx0ICBpcyBpbiBpbnZlcnRlZCBmb3JtIHNvIHRoYXQgbWVyZSBSVF9HUk9VUF9TQ0hFRCBlbmFibGVzIHRoZSBncm91cFxcbjEyMDM6XFx0XFx0ICBzY2hlZHVsaW5nLlxcbjEyMDQ6XFx0XFxuMTIwNTpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMjA2OlxcdFxcbjEyMDc6XFx0Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxcbjEyMDg6XFx0XFx0Ym9vbFxcbjEyMDk6XFx0XFx0ZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXFx1MDAyNlxcdTAwMjYgQ0dST1VQX1NDSEVEXFxuMTIxMDpcXHRcXHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXFxuMTIxMTpcXHRcXHRzZWxlY3QgR1JPVVBfU0NIRURfQkFORFdJRFRIXFxuMTIxMjpcXHRcXHRkZWZhdWx0IHlcXG4xMjEzOlxcdFxcbjEyMTQ6XFx0ZW5kaWYgI0NHUk9VUF9TQ0hFRFxcbjEyMTU6XFx0XFxuMTIxNjpcXHRjb25maWcgRVhUX1NVQl9TQ0hFRFxcbjEyMTc6XFx0ICAgICAgICBkZWZfYm9vbCB5XFxuMTIxODpcXHQgICAgICAgIGRlcGVuZHMgb24gU0NIRURfQ0xBU1NfRVhUIFxcdTAwMjZcXHUwMDI2IENHUk9VUFNcXG4xMjE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDowMC43Mzk4MTM5NjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4OTY3MDM5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCByZXF1aXJlcyBib3RoIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCB0byBiZSBlbmFibGVkLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoZXNlIGFyZSBkZWZpbmVkIGFuZCB3aGVyZSB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGRvY3VtZW50ZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBwbGFjZXMsIGNoZWNraW5nIHRoZSBgaW5pdC9LY29uZmlnYCwgYGtlcm5lbC9LY29uZmlnLnByZWVtcHRgLCBhbmQgYGtlcm5lbC9zY2hlZC9LY29uZmlnYCBmaWxlcy4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBzY2hlZHVsZXItcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGV5J2xsIGxpa2VseSBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gbmVlZGVkIHRvIHByb2NlZWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aG9zZSBLY29uZmlnIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDkwOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MDYuNDI5NDg2NTIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxODgxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTQ0hFRF9DTEFTU19FWFRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHQ9MTU1PWNvbmZpZyBTQ0hFRF9DT1JFXFxuLS1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0LTE3Mi1cXG5rZXJuZWwvS2NvbmZpZy5wcmVlbXB0OjE3Mzpjb25maWcgU0NIRURfQ0xBU1NfRVhUXFxua2VybmVsL0tjb25maWcucHJlZW1wdC0xNzQtXFx0Ym9vbCBcXFwiRXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDowOC4wMTEzNzIxODZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0OTgyMDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBQcmVlbXB0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgcHJlZW1wdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL0tjb25maWcucHJlZW1wdGAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNzMuIFRoYXQgYXJlYSB1c3VhbGx5IGhvbGRzIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcmVlbXB0aW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciBsaWVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBjaG9pY2VzIHRoZXJlIHRoYXQgZHJpdmUgdGhlIGJlaGF2aW9yOiB3aGV0aGVyIGl0J3MgZnVsbCBwcmVlbXB0aW9uLCB2b2x1bnRhcnkgcHJlZW1wdGlvbiwgb3IgbWF5YmUgc29tZSBtb3JlIG51YW5jZWQgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgYXV0aG9ycyBjb25zaWRlcmVkIGNyaXRpY2FsIGluIG1ha2luZyB0aGVpciBkZWNpc2lvbnMuIEl0J3MgcHJvYmFibHkgdGhlIGJhc2lzIHRvIHNlZSB0aGUgaW50ZXItcmVsYXRlZCBpbXBhY3RzIGluIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjQ5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MTMuMDYxMTk1Mzc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9LY29uZmlnLnByZWVtcHRcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdFxcdCAgVXNlIG9mIHRoaXMgZmVhdHVyZSBpbmNsdWRlczpcXG4gMTY2OlxcdFxcdCAgIC0gbWl0aWdhdGlvbiBvZiBzb21lIChub3QgYWxsKSBTTVQgc2lkZSBjaGFubmVscztcXG4gMTY3OlxcdFxcdCAgIC0gbGltaXRpbmcgU01UIGludGVyZmVyZW5jZSB0byBpbXByb3ZlIGRldGVybWluaXNtIGFuZC9vciBwZXJmb3JtYW5jZS5cXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0ICBTQ0hFRF9DT1JFIGlzIGRlZmF1bHQgZGlzYWJsZWQuIFdoZW4gaXQgaXMgZW5hYmxlZCBhbmQgdW51c2VkLFxcbiAxNzA6XFx0XFx0ICB3aGljaCBpcyB0aGUgbGlrZWx5IHVzYWdlIGJ5IExpbnV4IGRpc3RyaWJ1dGlvbnMsIHRoZXJlIHNob3VsZFxcbiAxNzE6XFx0XFx0ICBiZSBubyBtZWFzdXJhYmxlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS5cXG4gMTcyOlxcdFxcbiAxNzM6XFx0Y29uZmlnIFNDSEVEX0NMQVNTX0VYVFxcbiAxNzQ6XFx0XFx0Ym9vbCBcXFwiRXh0ZW5zaWJsZSBTY2hlZHVsaW5nIENsYXNzXFxcIlxcbiAxNzU6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuIDE3NjpcXHRcXHRzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1JcXG4gMTc3OlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVFxcbiAxNzg6XFx0XFx0aGVscFxcbiAxNzk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgbmV3IHNjaGVkdWxlciBjbGFzcyBzY2hlZF9leHQgKFNDWCksIHdoaWNoXFxuIDE4MDpcXHRcXHQgIGFsbG93cyBzY2hlZHVsaW5nIHBvbGljaWVzIHRvIGJlIGltcGxlbWVudGVkIGFzIEJQRiBwcm9ncmFtcyB0b1xcbiAxODE6XFx0XFx0ICBhY2hpZXZlIHRoZSBmb2xsb3dpbmc6XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdCAgLSBFYXNlIG9mIGV4cGVyaW1lbnRhdGlvbiBhbmQgZXhwbG9yYXRpb246IEVuYWJsaW5nIHJhcGlkXFxuIDE4NDpcXHRcXHQgICAgaXRlcmF0aW9uIG9mIG5ldyBzY2hlZHVsaW5nIHBvbGljaWVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoxMy4wNjEyNTg4NTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxNzk5Mjc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB3ZSdyZSBhdCBhIHBvaW50IHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIGNlcnRhaW4ga2VybmVsIGZ1bmN0aW9uYWxpdGllcyBhcmUgZW5hYmxlZC4gVGhlIGltbWVkaWF0ZSByZXF1aXJlbWVudHMgYXJlIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYC4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCB3aGVyZSB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBDR1JPVVBfU0NIRURgPyBBaCwgeWVzLCBJIHJlY2FsbCBzZWVpbmcgdGhhdCBpbiBgaW5pdC9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IOKAkyB0aGUgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBrZXJuZWwgc2NoZWR1bGluZyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBzZXR0aW5ncywgZXNwZWNpYWxseSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGNncm91cHMuIExvb2tzIGxpa2Ugd2UgYXJlIG9uIHRoZSByaWdodCB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3OTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjE4LjY3OTI1Mzc5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNTMyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTExNDc9Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTUxLVxcbmluaXQvS2NvbmZpZzoxMTUyOm1lbnVjb25maWcgQ0dST1VQX1NDSEVEXFxuaW5pdC9LY29uZmlnLTExNTMtXFx0Ym9vbCBcXFwiQ1BVIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjE4LjcyODUwOTYxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA2ODE5MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIENoZWNrKipcblxuQWxyaWdodCwgc28gYENHUk9VUF9TQ0hFRGAgaXMgYSBtZW51Y29uZmlnIG9wdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhpcyByZWxpZXMgb24uIEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgc3Vic3lzdGVtcyBpdCdzIHRpZWQgdG8sIGFueSBvdGhlciBjb250cm9sIGdyb3VwIG9wdGlvbnMgaXQgbWFuZGF0ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgY3JpdGljYWwuIEl0IGF2b2lkcyBhIGxvdCBvZiBoZWFkYWNoZXMgZG93biB0aGUgbGluZSBkdXJpbmcgaW50ZWdyYXRpb24gYW5kIHRyb3VibGVzaG9vdGluZywgZW5zdXJlcyBJIGVuYWJsZSBhbGwgdGhlIG5lZWRlZCBwYXJ0cywgYW5kIHBvdGVudGlhbGx5IGhlbHBzIHRvIHVuZGVyc3RhbmQgY29uZmxpY3RzIHdpdGggb3RoZXIgY29uZmlndXJhdGlvbnMuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUga2NvbmZpZyBzdHJ1Y3R1cmUgYW5kIHRoZSBjb2RlIGl0c2VsZiB0byBtYXAgb3V0IHRob3NlIGRlcGVuZGVuY2llcy4gS25vd2luZyB0aG9zZSBsaW5rcyBpcyB0aGUgZm91bmRhdGlvbiBmb3IgcHJvcGVybHkgY29uZmlndXJpbmcgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyMy4wMzUzMzE3NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDU6XFx0XFx0U2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvY2dyb3VwLXYxL2Jsa2lvLWNvbnRyb2xsZXIucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbjExNDY6XFx0XFxuMTE0NzpcXHRjb25maWcgQ0dST1VQX1dSSVRFQkFDS1xcbjExNDg6XFx0XFx0Ym9vbFxcbjExNDk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1DRyBcXHUwMDI2XFx1MDAyNiBCTEtfQ0dST1VQXFxuMTE1MDpcXHRcXHRkZWZhdWx0IHlcXG4xMTUxOlxcdFxcbjExNTI6XFx0bWVudWNvbmZpZyBDR1JPVVBfU0NIRURcXG4xMTUzOlxcdFxcdGJvb2wgXFxcIkNQVSBjb250cm9sbGVyXFxcIlxcbjExNTQ6XFx0XFx0ZGVmYXVsdCBuXFxuMTE1NTpcXHRcXHRoZWxwXFxuMTE1NjpcXHRcXHQgIFRoaXMgZmVhdHVyZSBsZXRzIENQVSBzY2hlZHVsZXIgcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZCBjb250cm9sIENQVVxcbjExNTc6XFx0XFx0ICBiYW5kd2lkdGggYWxsb2NhdGlvbiB0byBzdWNoIHRhc2sgZ3JvdXBzLiBJdCB1c2VzIGNncm91cHMgdG8gZ3JvdXBcXG4xMTU4OlxcdFxcdCAgdGFza3MuXFxuMTE1OTpcXHRcXG4xMTYwOlxcdGlmIENHUk9VUF9TQ0hFRFxcbjExNjE6XFx0Y29uZmlnIEdST1VQX1NDSEVEX1dFSUdIVFxcbjExNjI6XFx0XFx0ZGVmX2Jvb2wgblxcbjExNjM6XFx0XFxuMTE2NDpcXHRjb25maWcgR1JPVVBfU0NIRURfQkFORFdJRFRIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjIzLjAzNTQ1NDk3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NjQzNTk5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IENHUk9VUF9TQ0hFRCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENHUk9VUF9TQ0hFRGAgcGF0Y2guIEdvb2QsIG5vIG9idmlvdXMgZGVwZW5kZW5jaWVzIOKAkyB0aGF0J3MgYSBwbHVzIGZvciBpc29sYXRpb24uIENvbmZpZy13aXNlLCBgU0NIRURfQ0xBU1NfRVhUYCBhbmQgYENHUk9VUF9TQ0hFRGAgYXJlIHRoZSBrZXkgZmxhZ3MuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gSSBzZWUgdGhhdCBnZXRzIHVzZWQgaW4gYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIGNncm91cCBpbml0aWFsaXphdGlvbiBhbmQgc3ViLXNjaGVkdWxlciBhdHRhY2htZW50LCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuXG5cbk5vdywgd2hpY2ggb2YgdGhlc2UgYXJlIHRoZSAqYmVzdCogdGFyZ2V0cz8gSSBuZWVkIHRvIG5hcnJvdyBpdCBkb3duLiBMZXQncyBsaXN0IHRob3NlIGZ1bmN0aW9ucyBvdXQgYXMgYSBiYXNpcyBmb3IgZnV6emluZzogYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlYCwgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXNlIGFyZSBzdGF0aWMuIFRoYXQgaW1wYWN0cyBjYWxsIHZpc2liaWxpdHkgYW5kIGZ1enppbmcgc3RyYXRlZ2llcy4gQWxyaWdodCwgbGV0J3Mgc2VlOiBgc2N4X3RnX29ubGluZWAgaXNuJ3Qgc3RhdGljLCB3aGljaCBpcyBnb29kIGZyb20gYSBjYWxsIHBlcnNwZWN0aXZlOyBgc2N4X2dyb3VwX3NldF9pZGxlYCBpcyBhbHNvIG5vbi1zdGF0aWMsIGFub3RoZXIgZ29vZCBzaWduLiBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAgYXJlIHN0YXRpYy4gU28sIEkgaGF2ZSB0byB3b3JrIGFyb3VuZCB0aGF0LlxuXG5HaXZlbiBgc2N4X3RnX29ubGluZWAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGFyZW4ndCBzdGF0aWMsIEkgc2hvdWxkIG5vdyBmb2N1cyBvbiB3aGVyZSB0aG9zZSBhcmUgY2FsbGVkIHRvIGdldCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRyeXBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1OTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDoyOS42OTk4MTY5OTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NTE5NzA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3hfdGdfb25saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2NvcmUuYz05NTYxPXN0YXRpYyBpbnQgY3B1X2Nncm91cF9jc3Nfb25saW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTk1NjYtXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5NTY3OlxcdHJldCA9IHNjeF90Z19vbmxpbmUodGcpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTU2OC1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NzMyPXN0YXRpYyBzdHJ1Y3Qgc2N4X3NjaGVkICpzY3hfdGdfa25vYl9zY2hlZChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NDEtXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NzQyOmludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ3NDMte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD03NT12b2lkIHNjeF90Z19pbml0KHN0cnVjdCB0YXNrX2dyb3VwICp0Zyk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo3NjppbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmgtNzctdm9pZCBzY3hfdGdfb2ZmbGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04NT1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X3RnX2luaXQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnKSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6ODY6c3RhdGljIGlubGluZSBpbnQgc2N4X3RnX29ubGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpIHsgcmV0dXJuIDA7IH1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTg3LXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfdGdfb2ZmbGluZShzdHJ1Y3QgdGFza19ncm91cCAqdGcpIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjMwLjQ5NTAyMDI5N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzg5NDIwOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBmcm9tIGEga2VybmVsLWxldmVsIENQVSByZXNvdXJjZSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlOlxuXG4qKk15IEN1cnJlbnQgQ1BVIFJlc291cmNlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBDUFUgcmVzb3VyY2VzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aWNpbmcgdHdvIGtleSBmdW5jdGlvbnMgcG9wcGluZyB1cCBpbiBteSB0cmFjZTogYHNjeF90Z19vbmxpbmVgIGFuZCBgc2N4X2dyb3VwX3NldF9pZGxlYC4gVGhlIGZpcnN0LCBgc2N4X3RnX29ubGluZWAsIGlzIGdldHRpbmcgY2FsbGVkIGZyb20gYGNwdV9jZ3JvdXBfY3NzX29ubGluZWAsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgZGVlcGx5IGludm9sdmVkIGluIHRoZSBDUFUgY29udHJvbGxlcidzIGNncm91cCBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGF0IG1ha2VzIHNlbnNlOyB3aGVuIGEgbmV3IGNncm91cCwgb3IgYSBuZXcgQ1BVIHJlc291cmNlIGlzIGJlaW5nIGJyb3VnaHQgb25saW5lLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcGxheWluZyBhIGtleSBwYXJ0LiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGNvZGUgcGF0aCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGhlbHBzIGluaXRpYWxpemUgYW5kIGFjdGl2YXRlIHRoZSBDUFUgcmVzb3VyY2VzLlxuXG5UaGVuIHRoZXJlJ3MgYHNjeF9ncm91cF9zZXRfaWRsZWAuIFRoZSBmYWN0IHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgc2NoZWRfZ3JvdXBfc2V0X2lkbGVgIGlzIHJlYWxseSBpbnRlcmVzdGluZy4gVGhpcyBwb2ludHMgdG8gdGhpcyBmdW5jdGlvbiBoYXZpbmcgc29tZSByb2xlIGluIG1hbmFnaW5nIHRoZSBpZGxlIHN0YXRlIG9mIHNjaGVkdWxlciBncm91cHMsIGxpa2VseSByZWxhdGVkIHRvIHBvd2VyIG1hbmFnZW1lbnQgb3IgcmVzb3VyY2UgcmVjbGFtYXRpb24gYXQgdGhlIHNjaGVkdWxlciBsZXZlbCwgb3IgYXMgYSBjb25zZXF1ZW5jZSBvZiBDUFUgcmVzb3VyY2UgY29udGVudGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZSBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggdGhpcyBmdW5jdGlvbiwgYXMgd2VsbCBhcyB0aGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEl0IGxvb2tzIGxpa2UgYm90aCBvZiB0aGVzZSBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgd2UgZ2V0IGEgd29ya2xvYWQgcnVubmluZyBvbiB0aGUgQ1BVcyBvZiBhIG5vZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NzMzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6MzUuMjg0NDQ0NDE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQ0NzUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvc2NoZWQvY29yZS5jPTEwMjU5PXN0YXRpYyBpbnQgY3B1X2lkbGVfd3JpdGVfczY0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY1LVxcdGlmICghcmV0KVxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6MTAyNjY6XFx0XFx0c2N4X2dyb3VwX3NldF9pZGxlKGNzc190Zyhjc3MpLCBpZGxlKTtcXG5rZXJuZWwvc2NoZWQvY29yZS5jLTEwMjY3LVxcdHJldHVybiByZXQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTQ5MTE9dm9pZCBzY3hfZ3JvdXBfc2V0X3dlaWdodChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHVuc2lnbmVkIGxvbmcgd2VpZ2h0KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy00OTI2LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDkyNzp2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSlcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTQ5Mjgte1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD04MT12b2lkIHNjeF9ncm91cF9zZXRfd2VpZ2h0KHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdW5zaWduZWQgbG9uZyBjZ3JwX3dlaWdodCk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaDo4Mjp2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSk7XFxua2VybmVsL3NjaGVkL2V4dC9leHQuaC04My12b2lkIHNjeF9ncm91cF9zZXRfYmFuZHdpZHRoKHN0cnVjdCB0YXNrX2dyb3VwICp0ZywgdTY0IHBlcmlvZF91cywgdTY0IHF1b3RhX3VzLCB1NjQgYnVyc3RfdXMpO1xcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuaD05MT1zdGF0aWMgaW5saW5lIHZvaWQgc2N4X2dyb3VwX3NldF93ZWlnaHQoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCB1bnNpZ25lZCBsb25nIGNncnBfd2VpZ2h0KSB7fVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0Lmg6OTI6c3RhdGljIGlubGluZSB2b2lkIHNjeF9ncm91cF9zZXRfaWRsZShzdHJ1Y3QgdGFza19ncm91cCAqdGcsIGJvb2wgaWRsZSkge31cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5oLTkzLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3hfZ3JvdXBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdGFza19ncm91cCAqdGcsIHU2NCBwZXJpb2RfdXMsIHU2NCBxdW90YV91cywgdTY0IGJ1cnN0X3VzKSB7fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDozNS4zNjQ4OTM5NjVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4NDUwNzQ4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBmb3IgdGhlIFNjaGVkX2V4dCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgbGVkIG1lIGRvd24gYSBzcGVjaWZpYyBwYXRoLiBJIHNlZSB0aGF0IGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGlzIGNhbGxlZCBmcm9tIGBjcHVfaWRsZV93cml0ZV9zNjRgLCB3aGljaCBpbiB0dXJuIGlzIHRoZSBoYW5kbGVyIGZvciB0aGUgYGNwdS5pZGxlYCBjZ3JvdXAgZmlsZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGZ1bmN0aW9ucyBsaWtlIGBzY3hfdGdfb25saW5lYCBhbmQgYHNjeF9ncm91cF9zZXRfaWRsZWAgYXMgdGhlIG1haW4gZm9jdXMuXG5cbkhvd2V2ZXIsIGBzY3hfY2dyb3VwX2luaXRgIGlzIHN0YXRpYyBidXQgY2FsbGVkIGZyb20gYHNjeF9yb290X2VuYWJsZV93b3JrZm5gLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIEJQRiBzY2hlZHVsZXIgaXMgbG9hZGVkLiBgc2N4X2Nncm91cF9jbGFpbV9zdWJ0cmVlYCBpcyBhbHNvIHN0YXRpYywgY2FsbGVkIGZyb20gYHNjeF9zdWJfZW5hYmxlX3dvcmtmbmAuIFRoaXMgbWFrZXMgbWUgdGhpbmsgdGhhdCBgc2N4X3RnX29ubGluZWAgYW5kIGBzY3hfZ3JvdXBfc2V0X2lkbGVgIGFyZSBzdGlsbCB0aGUgYmVzdCBjYW5kaWRhdGVzIGR1ZSB0byB0aGVpciBkaXJlY3QgY29ubmVjdGlvbiB0byB0aGUgY2dyb3VwIG9wZXJhdGlvbnMuIFdoaWxlIHRoZSBgc2N4X3N1Yl9lbmFibGVfd29ya2ZuYCBhbmQgYHNjeF9yb290X2VuYWJsZV93b3JrZm5gIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgaW4gc2NoZWRfZXh0LCB0aGV5IHNlZW0gbW9yZSBnZW5lcmljLlxuXG5Ob3csIGZvciBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBmZWF0dXJlcyBhcmUgZW5hYmxlZC4gSSBkZWZpbml0ZWx5IG5lZWQgYFNDSEVEX0NMQVNTX0VYVGAgYW5kIGBDR1JPVVBfU0NIRURgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBZZXAsIGBFWFRfR1JPVVBfU0NIRURgIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiBib3RoIGBTQ0hFRF9DTEFTU19FWFRgIGFuZCBgQ0dST1VQX1NDSEVEYCBhcmUgb24uXG5cbkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIGl0IHNlZW1zIHRoYXQgdGhlIGBzY2hlZF9pZGxlYCBzdGF0ZSBpcyBub3cgZXhwb3NlZCB0byB0aGUgQlBGIHNjaGVkdWxlciBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbXVsdGlwbGUgcGxhY2VzOiBgc2N4X2dyb3VwX3NldF9pZGxlYCwgYHNjeF90Z19vbmxpbmVgLCBgc2N4X2Nncm91cF9pbml0YCwgYHNjeF9jZ3JvdXBfY2xhaW1fc3VidHJlZWAsIGFuZCBgc2N4X2Nncm91cF9yZXR1cm5fc3VidHJlZWAuIFRoaXMgbWFrZXMgdGhlIHN0YXRlIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIGNncm91cCBvcGVyYXRpb25zIGFuZCBCUEYgc2NoZWRfZXh0IHByb2dyYW1zLiBUaGF0IHNlZW1zIHByZXR0eSBmdW5jdGlvbmFsLlxuXG5Pa2F5LCB0aGlzIGxvb2tzIHNvbGlkLiBJIGFtIHRoaW5raW5nIHRoYXQgdGhpcyBjb2RlIHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLlxuKiAgIGBXb3J0aEZ1enppbmdgIGlzIHRydWUuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBzY3hfdGdfb25saW5lYCwgYHNjeF9ncm91cF9zZXRfaWRsZWAuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgU0NIRURfQ0xBU1NfRVhUYCwgYENHUk9VUF9TQ0hFRGAuXG5cbkknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjE1LCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6NTMuMjA5OTcxNDQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5MTM1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNDSEVEX0NMQVNTX0VYVFwiLFxuICAgIFwiQ0dST1VQX1NDSEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N4X3RnX29ubGluZVwiLFxuICAgIFwic2N4X2dyb3VwX3NldF9pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNjaGVkX2V4dCBzdWJzeXN0ZW0gdG8gcGFzcyB0aGUgYHNjaGVkX2lkbGVgIHN0YXRlIG9mIGEgY2dyb3VwIHRvIHRoZSBCUEYgc2NoZWR1bGVyIGR1cmluZyBjZ3JvdXAgaW5pdGlhbGl6YXRpb24gKGBvcHMuY2dyb3VwX2luaXQoKWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBleHBvc2VzIG5ldyBkYXRhIHRvIEJQRiBwcm9ncmFtcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBjZ3JvdXAgY3JlYXRpb24gYW5kIGBjcHUuaWRsZWAgbW9kaWZpY2F0aW9uIHdoaWxlIGEgc2NoZWRfZXh0IHNjaGVkdWxlciBpcyBhY3RpdmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0NIRURfQ0xBU1NfRVhUXCIsXG4gICAgXCJDR1JPVVBfU0NIRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3hfdGdfb25saW5lXCIsXG4gICAgXCJzY3hfZ3JvdXBfc2V0X2lkbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2NoZWRfZXh0IHN1YnN5c3RlbSB0byBwYXNzIHRoZSBgc2NoZWRfaWRsZWAgc3RhdGUgb2YgYSBjZ3JvdXAgdG8gdGhlIEJQRiBzY2hlZHVsZXIgZHVyaW5nIGNncm91cCBpbml0aWFsaXphdGlvbiAoYG9wcy5jZ3JvdXBfaW5pdCgpYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGV4cG9zZXMgbmV3IGRhdGEgdG8gQlBGIHByb2dyYW1zIGFuZCBpcyByZWFjaGFibGUgdmlhIGNncm91cCBjcmVhdGlvbiBhbmQgYGNwdS5pZGxlYCBtb2RpZmljYXRpb24gd2hpbGUgYSBzY2hlZF9leHQgc2NoZWR1bGVyIGlzIGFjdGl2ZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzQ6NTMuMjgwODkzMDMxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM2MjE1OTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDAzOjM0OjUzLjI4MTgwNTc1MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzM2MTI0Mjg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVuYW1lcyBgaWRsZWAgdG8gYHNjaGVkX2lkbGVgIGluIGBzdHJ1Y3Qgc2N4X3Rhc2tfZ3JvdXBgIGFuZCBhZGRzIGBzY2hlZF9pZGxlYCB0byBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gSXQgaW5pdGlhbGl6ZXMgdGhpcyBuZXcgZmllbGQgaW4gc2V2ZXJhbCBwbGFjZXMgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGUuZy4sIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3MgYXJncyA9IHsgLi4uIH1gKS4gSW4gQywgZGVzaWduYXRlZCBpbml0aWFsaXplcnMgemVybyBvdXQgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCBwYWRkaW5nIGJ5dGVzLiBGdXJ0aGVybW9yZSwgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AgaXMgcGFzc2VkIHRvIGEgQlBGIHByb2dyYW0gKGtlcm5lbCBzcGFjZSksIG5vdCBkaXJlY3RseSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNjczZGQ0N2RlMjc4YWYzZWZiZWM0OWM3Y2JjODQyZDA0N2Q3MzAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDM6MzM6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL2V4dC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9leHQuaFxuaW5kZXggNTgyZDdjZDRhOTgzOS4uN2I5Y2RiNjVkZWVmNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvZXh0LmhcbkBAIC0zMjMsNyArMzIzLDcgQEAgc3RydWN0IHNjeF90YXNrX2dyb3VwIHtcbiBcdHU2NFx0XHRcdGJ3X3BlcmlvZF91cztcbiBcdHU2NFx0XHRcdGJ3X3F1b3RhX3VzO1xuIFx0dTY0XHRcdFx0YndfYnVyc3RfdXM7XG4tXHRib29sXHRcdFx0aWRsZTtcbitcdGJvb2xcdFx0XHRzY2hlZF9pZGxlO1xuICNlbmRpZlxuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9leHQuYyBiL2tlcm5lbC9zY2hlZC9leHQvZXh0LmNcbmluZGV4IGM1MzlkMTVjZGE2MzcuLjRhOWMzODI5NzA5MzUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L2V4dC5jXG5AQCAtNDY4Miw3ICs0NjgyLDcgQEAgdm9pZCBzY3hfdGdfaW5pdChzdHJ1Y3QgdGFza19ncm91cCAqdGcpXG4gXHR0Zy1cdTAwM2VzY3gud2VpZ2h0ID0gQ0dST1VQX1dFSUdIVF9ERkw7XG4gXHR0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzID0gZGVmYXVsdF9id19wZXJpb2RfdXMoKTtcbiBcdHRnLVx1MDAzZXNjeC5id19xdW90YV91cyA9IFJVTlRJTUVfSU5GO1xuLVx0dGctXHUwMDNlc2N4LmlkbGUgPSBmYWxzZTtcbitcdHRnLVx1MDAzZXNjeC5zY2hlZF9pZGxlID0gZmFsc2U7XG4gfVxuIFxuIC8qKlxuQEAgLTQ3NjQsNyArNDc2NCw4IEBAIGludCBzY3hfdGdfb25saW5lKHN0cnVjdCB0YXNrX2dyb3VwICp0ZylcbiBcdFx0XHRcdHsgLndlaWdodCA9IHRnLVx1MDAzZXNjeC53ZWlnaHQsXG4gXHRcdFx0XHQgIC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdFx0ICAuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4tXHRcdFx0XHQgIC5id19idXJzdF91cyA9IHRnLVx1MDAzZXNjeC5id19idXJzdF91cyB9O1xuK1x0XHRcdFx0ICAuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMsXG4rXHRcdFx0XHQgIC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUgfTtcbiBcbiBcdFx0XHRyZXQgPSBTQ1hfQ0FMTF9PUF9SRVQoc2NoLCBjZ3JvdXBfaW5pdCxcbiBcdFx0XHRcdFx0ICAgICAgTlVMTCwgdGctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YXJncyk7XG5AQCAtNDkzNCw3ICs0OTM1LDcgQEAgdm9pZCBzY3hfZ3JvdXBfc2V0X2lkbGUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBib29sIGlkbGUpXG4gXHRcdFNDWF9DQUxMX09QKHNjaCwgY2dyb3VwX3NldF9pZGxlLCBOVUxMLCB0Z19jZ3JwKHRnKSwgaWRsZSk7XG4gXG4gXHQvKiBVcGRhdGUgdGhlIHRhc2sgZ3JvdXAncyBpZGxlIHN0YXRlICovXG4tXHR0Zy1cdTAwM2VzY3guaWRsZSA9IGlkbGU7XG4rXHR0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSA9IGlkbGU7XG4gXG4gXHRwZXJjcHVfdXBfcmVhZChcdTAwMjZzY3hfY2dyb3VwX29wc19yd3NlbSk7XG4gfVxuQEAgLTUxODUsNiArNTE4Niw3IEBAIHN0YXRpYyBpbnQgc2N4X2Nncm91cF9pbml0KHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHRcdC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdFx0LmJ3X3F1b3RhX3VzID0gdGctXHUwMDNlc2N4LmJ3X3F1b3RhX3VzLFxuIFx0XHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuK1x0XHRcdFx0LnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSxcbiBcdFx0XHR9O1xuIFxuIFx0XHRcdHJldCA9IFNDWF9DQUxMX09QX1JFVChzY2gsIGNncm91cF9pbml0LCBOVUxMLCBjc3MtXHUwMDNlY2dyb3VwLCBcdTAwMjZhcmdzKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmggYi9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbmluZGV4IDUzZTEzNmE0NzkyNGQuLmM2OTg3YTNhMDczYmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L2ludGVybmFsLmhcbisrKyBiL2tlcm5lbC9zY2hlZC9leHQvaW50ZXJuYWwuaFxuQEAgLTI1OSw2ICsyNTksOSBAQCBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3Mge1xuIFx0dTY0XHRcdFx0YndfcGVyaW9kX3VzO1xuIFx0dTY0XHRcdFx0YndfcXVvdGFfdXM7XG4gXHR1NjRcdFx0XHRid19idXJzdF91cztcbitcbitcdC8qIHdoZXRoZXIgdGhlIGNncm91cCBpcyBjb25maWd1cmVkIFNDSEVEX0lETEUgdmlhIGNwdS5pZGxlICovXG4rXHRib29sXHRcdFx0c2NoZWRfaWRsZTtcbiB9O1xuIFxuIGVudW0gc2N4X2NwdV9wcmVlbXB0X3JlYXNvbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2V4dC9zdWIuYyBiL2tlcm5lbC9zY2hlZC9leHQvc3ViLmNcbmluZGV4IDA1NTQ0NDg4MzViZDAuLmExN2Q4NGRiOTNiZGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZXh0L3N1Yi5jXG5AQCAtMTM2MSw2ICsxMzYxLDcgQEAgc3RhdGljIHMzMiBzY3hfY2dyb3VwX2NsYWltX3N1YnRyZWUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuIFx0XHRcdC5id19wZXJpb2RfdXMgPSB0Zy1cdTAwM2VzY3guYndfcGVyaW9kX3VzLFxuIFx0XHRcdC5id19xdW90YV91cyA9IHRnLVx1MDAzZXNjeC5id19xdW90YV91cyxcbiBcdFx0XHQuYndfYnVyc3RfdXMgPSB0Zy1cdTAwM2VzY3guYndfYnVyc3RfdXMsXG4rXHRcdFx0LnNjaGVkX2lkbGUgPSB0Zy1cdTAwM2VzY3guc2NoZWRfaWRsZSxcbiBcdFx0fTtcbiBcbiBcdFx0aWYgKHRnLVx1MDAzZXNjeC5zY2hlZCAhPSBwYXJlbnQgfHxcbkBAIC0xNDY0LDYgKzE0NjUsNyBAQCBzdGF0aWMgdm9pZCBzY3hfY2dyb3VwX3JldHVybl9zdWJ0cmVlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcbiBcdFx0XHQuYndfcGVyaW9kX3VzID0gdGctXHUwMDNlc2N4LmJ3X3BlcmlvZF91cyxcbiBcdFx0XHQuYndfcXVvdGFfdXMgPSB0Zy1cdTAwM2VzY3guYndfcXVvdGFfdXMsXG4gXHRcdFx0LmJ3X2J1cnN0X3VzID0gdGctXHUwMDNlc2N4LmJ3X2J1cnN0X3VzLFxuK1x0XHRcdC5zY2hlZF9pZGxlID0gdGctXHUwMDNlc2N4LnNjaGVkX2lkbGUsXG4gXHRcdH07XG4gXG4gXHRcdC8qIHRoZSBmaXJzdCBwYXNzIG11c3QgaGF2ZSB0cmFuc2ZlcnJlZCBldmVyeXRoaW5nICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwMzozNDo1My4yODE4MjU3NzFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMzNjEyMDQ3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBzY2hlZF9pZGxlIEludHJvZHVjdGlvbiBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBgaWRsZWAgdG8gYHNjaGVkX2lkbGVgIHdpdGhpbiB0aGUgYHNjeF90YXNrX2dyb3VwYCBzdHJ1Y3R1cmUuIE1vcmUgaW1wb3J0YW50bHksIGl0J3MgYWRkaW5nIGBzY2hlZF9pZGxlYCB0byBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYXJlIHdlIG9wZW5pbmcgb3Vyc2VsdmVzIHVwIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBoZXJlP1wiXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHBhZGRpbmcgZXhpc3RzIHdpdGhpbiBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCwgYW5kIHdoZXRoZXIgdGhpcyBzdHJ1Y3QgaXMgc29tZWhvdyBleHBvc2VkIHRvIEJQRiBvciwgd29yc2UsIHRvIHVzZXItc3BhY2UuIExldCdzIGxvb2sgYXQgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uLiBSaWdodCwgYHdlaWdodGAgKHUzMiksIHRoZW4gYGJ3X3BlcmlvZF91c2AgKHU2NCksIHNvIHRoZXJlJ3MgYSA0LWJ5dGUgcGFkZGluZyBhZnRlciBgd2VpZ2h0YC4gQWZ0ZXIgYGJ3X3BlcmlvZF91c2AsIGBid19xdW90YV91c2AsIGFuZCBgYndfYnVyc3RfdXNgIChhbGwgdTY0cyksIHdlIGhhdmUgYGJvb2wgc2NoZWRfaWRsZWAgd2hpY2ggaXMgMSBieXRlLCBzbyB0aGVyZSdzIDcgYnl0ZXMgb2YgcGFkZGluZyBhdCB0aGUgZW5kIG9mIHRoaXMgc3RydWN0dXJlLlxuXG5Ob3csIGhvdyBpcyBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCB1c2VkPyBBaCwgaXQncyBwYXNzZWQgdG8gYGNncm91cF9pbml0YCBCUEYgb3BlcmF0aW9uLiBTaW5jZSBgYXJnc2AgaXMgYmVpbmcgcGFzc2VkIHRvIEJQRiwgd2hpY2ggcnVucyBpbiBrZXJuZWwgc3BhY2UsIGl0IGNhbiBwb3RlbnRpYWxseSByZWFkIHRob3NlIHBhZGRpbmcgYnl0ZXMuIEJ1dCB3YWl0LCBCUEYgcnVucyBpbiBrZXJuZWwsIHNvIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCAqc2hvdWxkbid0KiBjYXVzZSBhIHVzZXItc3BhY2UgaW5mb3JtYXRpb24gbGVhaywgaXQncyBqdXN0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgd2hpY2ggS01TQU4gc2hvdWxkIGRldGVjdC4gSG93ZXZlciwgaWYgYSBCUEYgcHJvZ3JhbSByZWFkcyBwYWRkaW5nIGJ5dGVzLCBpdCB3b3VsZCBiZSBhbiBpc3N1ZSBiZWNhdXNlIHRoZSBCUEYgdmVyaWZpZXIgd291bGRuJ3Qga25vdyBhYm91dCB0aGUgcGFkZGluZyB1bmxlc3MgaXQncyBleHBsaWNpdGx5IGRlZmluZWQuXG5cbkkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYGFyZ3NgIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBsZXQncyBsb29rIGF0IHRoZSB1c2FnZTogaXQncyBpbml0aWFsaXplZCB1c2luZyBhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIuIFRoaXMgbWVhbnMgdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHBhZGRpbmcgYnl0ZXMgYXJlIHplcm9lZCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuIEJ1dCwgaXMgdGhhdCBndWFyYW50ZWVkPyBJJ20gc3VyZSBpdCdzIHplcm9lZCwgYnV0IEknbGwgY2hlY2sgdGhlIEMgc3RhbmRhcmQgYW5kIG1ha2Ugc3VyZS4gT2theSwgQzk5IDYuNy44IEluaXRpYWxpemF0aW9uIHNheXMgdGhhdCBpZiB0aGVyZSBhcmUgZmV3ZXIgaW5pdGlhbGl6ZXJzIHRoYW4gdGhlcmUgYXJlIG1lbWJlcnMsIHRoZSByZW1haW5kZXIgaXMgaW5pdGlhbGl6ZWQgbGlrZSBzdGF0aWMgc3RvcmFnZSwgYW5kIHdpdGggc3RhdGljIHN0b3JhZ2UsIFwiYW55IHBhZGRpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVybyBieXRlcy5cIlxuXG5TbywgZXZlbiBpZiB0aGlzIHBhdGNoICpkaWQqIGludHJvZHVjZSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgdXNlIG9mIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIGhlcmUgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBwYWRkaW5nIGlzIHplcm9lZC4gTGV0J3MgcmUtZXhhbWluZSB0aGUgcGF0Y2guIFRoZSBwYXRjaCAqYWRkcyogYHNjaGVkX2lkbGVgIHRvIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLCBzbyBpdCBpcyB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlciBhdXRvbWF0aWNhbGx5LiBCdXQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbGwgZ28gdGhyb3VnaCBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBBbGwgaW5zdGFuY2VzIHVzZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycy5cblxuTm8sIHRoZSBzdHJ1Y3R1cmUgaXMgKmZ1bGx5KiBpbml0aWFsaXplZC4gRnVydGhlcm1vcmUsIHNpbmNlIGBhcmdzYCBpcyB1c2VkIG9ubHkgd2l0aGluIGtlcm5lbCBzcGFjZSwgYW55IHJlYWQgd2l0aGluIHRoYXQgc3BhY2Ugd291bGRuJ3QgYmUgYW4gaXNzdWUuIFRoZXJlIGlzIG5vIEtNU0FOIHNwZWNpZmljIGJ1ZyBoZXJlLiBLQVNBTiB3b3VsZG4ndCBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFueXdheS4gVGhpcyBwYXRjaCBpcyBzYWZlLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvcHktdG8tdXNlciBzaXR1YXRpb24sIHRob3VnaC4gQlBGIHByb2dyYW1zIGFyZSBrZXJuZWwtc3BhY2UuIFRoZXkgY2FuICpyZWFkKiB0aGlzIHN0cnVjdCwgYnV0IGl0J3Mgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2VyLXNwYWNlLiBTbywgbm8gaW5mb3JtYXRpb24gbGVhayBwb3NzaWJsZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGp1c3QgYWRkaW5nIGEgZnVsbHkgaW5pdGlhbGl6ZWQgZmllbGQgdG8gYSBzdHJ1Y3QgYW5kIHBhc3NpbmcgaXQgdG8gQlBGLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gSSdsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4OSwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDM6MzU6MTYuNjQzMDMyOTQ1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW5hbWVzIGBpZGxlYCB0byBgc2NoZWRfaWRsZWAgaW4gYHN0cnVjdCBzY3hfdGFza19ncm91cGAgYW5kIGFkZHMgYHNjaGVkX2lkbGVgIHRvIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgLiBJdCBpbml0aWFsaXplcyB0aGlzIG5ldyBmaWVsZCBpbiBzZXZlcmFsIHBsYWNlcyB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoZS5nLiwgYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJncyBhcmdzID0geyAuLi4gfWApLiBJbiBDLCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB6ZXJvIG91dCBhbnkgdW5pbml0aWFsaXplZCBmaWVsZHMgYW5kIHBhZGRpbmcgYnl0ZXMuIEZ1cnRoZXJtb3JlLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzYCBpcyBwYXNzZWQgdG8gYSBCUEYgcHJvZ3JhbSAoa2VybmVsIHNwYWNlKSwgbm90IGRpcmVjdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbmFtZXMgYGlkbGVgIHRvIGBzY2hlZF9pZGxlYCBpbiBgc3RydWN0IHNjeF90YXNrX2dyb3VwYCBhbmQgYWRkcyBgc2NoZWRfaWRsZWAgdG8gYHN0cnVjdCBzY3hfY2dyb3VwX2luaXRfYXJnc2AuIEl0IGluaXRpYWxpemVzIHRoaXMgbmV3IGZpZWxkIGluIHNldmVyYWwgcGxhY2VzIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChlLmcuLCBgc3RydWN0IHNjeF9jZ3JvdXBfaW5pdF9hcmdzIGFyZ3MgPSB7IC4uLiB9YCkuIEluIEMsIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIHplcm8gb3V0IGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhbmQgcGFkZGluZyBieXRlcy4gRnVydGhlcm1vcmUsIGBzdHJ1Y3Qgc2N4X2Nncm91cF9pbml0X2FyZ3NgIGlzIHBhc3NlZCB0byBhIEJQRiBwcm9ncmFtIChrZXJuZWwgc3BhY2UpLCBub3QgZGlyZWN0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow695xf[1] Phase: Succeeded StartedAt: 2026-08-25 03:35:28 +0000 UTC FinishedAt: 2026-08-25 03:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 03:35:28 +0000 UTC FinishedAt: 2026-08-25 03:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2] Phase: Succeeded StartedAt: 2026-08-25 03:35:28 +0000 UTC FinishedAt: 2026-08-25 04:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 03:35:28 +0000 UTC FinishedAt: 2026-08-25 04:15:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 03:35:28 +0000 UTC FinishedAt: 2026-08-25 03:35:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 03:35:28 +0000 UTC FinishedAt: 2026-08-25 03:35:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow695xf/series-workflow695xf-convert-artifact-3275576488/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 03:35:38 +0000 UTC FinishedAt: 2026-08-25 03:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 03:35:38 +0000 UTC FinishedAt: 2026-08-25 03:51:50 +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:*468e4aaa-ecef-4185-8dee-88785b774f55,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-workflow695xf/series-workflow695xf-convert-artifact-3275576488/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": "1641949f-cd00-496a-93bf-f61c6b943df9", "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-workflow695xf/series-workflow695xf-build-action-807258910/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 03:35:38 +0000 UTC FinishedAt: 2026-08-25 03:51:37 +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:*468e4aaa-ecef-4185-8dee-88785b774f55,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-workflow695xf/series-workflow695xf-convert-artifact-3275576488/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": "1641949f-cd00-496a-93bf-f61c6b943df9", "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-workflow695xf/series-workflow695xf-build-action-807258910/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 03:51:50 +0000 UTC FinishedAt: 2026-08-25 03:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 03:51:50 +0000 UTC FinishedAt: 2026-08-25 03:51:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 03:51:50 +0000 UTC FinishedAt: 2026-08-25 03:52:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 03:51:50 +0000 UTC FinishedAt: 2026-08-25 03:51:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow695xf/series-workflow695xf-convert-artifact-1551839631/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 03:52:00 +0000 UTC FinishedAt: 2026-08-25 03:54:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 03:52:00 +0000 UTC FinishedAt: 2026-08-25 03:53:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1641949f-cd00-496a-93bf-f61c6b943df9,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-workflow695xf/series-workflow695xf-build-action-807258910/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-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 03:54:01 +0000 UTC FinishedAt: 2026-08-25 03:54:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 03:54:01 +0000 UTC FinishedAt: 2026-08-25 03:54:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 03:54:01 +0000 UTC FinishedAt: 2026-08-25 04:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 03:54:01 +0000 UTC FinishedAt: 2026-08-25 04:10:13 +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:*468e4aaa-ecef-4185-8dee-88785b774f55,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-workflow695xf/series-workflow695xf-convert-artifact-1551839631/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": "cee6da54-12af-483c-acdc-c0ce22119e77", "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-workflow695xf/series-workflow695xf-build-action-4034400931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 03:54:01 +0000 UTC FinishedAt: 2026-08-25 04:10:03 +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:*468e4aaa-ecef-4185-8dee-88785b774f55,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-workflow695xf/series-workflow695xf-convert-artifact-1551839631/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": "cee6da54-12af-483c-acdc-c0ce22119e77", "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-workflow695xf/series-workflow695xf-build-action-4034400931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 04:10:13 +0000 UTC FinishedAt: 2026-08-25 04:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 04:10:13 +0000 UTC FinishedAt: 2026-08-25 04:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 04:10:13 +0000 UTC FinishedAt: 2026-08-25 04:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 04:10:13 +0000 UTC FinishedAt: 2026-08-25 04:12:15 +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:*cee6da54-12af-483c-acdc-c0ce22119e77,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-workflow695xf/series-workflow695xf-build-action-4034400931/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-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 04:12:25 +0000 UTC FinishedAt: 2026-08-25 04:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 04:12:25 +0000 UTC FinishedAt: 2026-08-25 04:15:03 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"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:*1641949f-cd00-496a-93bf-f61c6b943df9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cee6da54-12af-483c-acdc-c0ce22119e77,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-workflow695xf/series-workflow695xf-build-action-807258910/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-workflow695xf/series-workflow695xf-build-action-4034400931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 04:12:25 +0000 UTC FinishedAt: 2026-08-25 04:12:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 04:12:25 +0000 UTC FinishedAt: 2026-08-25 04:12:29 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"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-workflow695xf/series-workflow695xf-convert-artifact-3285530696/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 04:12:25 +0000 UTC FinishedAt: 2026-08-25 04:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 04:12:25 +0000 UTC FinishedAt: 2026-08-25 04:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 04:12:25 +0000 UTC FinishedAt: 2026-08-25 04:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 04:12:35 +0000 UTC FinishedAt: 2026-08-25 04:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow695xf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["scx_tg_online","scx_group_set_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["SCHED_CLASS_EXT","CGROUP_SCHED"],"series_id":"7c58d5e9-d489-4e2c-94d2-475a59759e24","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 04:12:35 +0000 UTC FinishedAt: 2026-08-25 04:14:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1641949f-cd00-496a-93bf-f61c6b943df9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cee6da54-12af-483c-acdc-c0ce22119e77,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-workflow695xf/series-workflow695xf-build-action-807258910/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-workflow695xf/series-workflow695xf-build-action-4034400931/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-workflow695xf/series-workflow695xf-convert-artifact-3285530696/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,}