Name: series-workflow4mp9c Phase: Succeeded StartedAt: 2026-06-22 08:02:59 +0000 UTC FinishedAt: 2026-06-22 12:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[0] Phase: Succeeded StartedAt: 2026-06-22 08:02:59 +0000 UTC FinishedAt: 2026-06-22 08:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[0].run-triage Phase: Succeeded StartedAt: 2026-06-22 08:02:59 +0000 UTC FinishedAt: 2026-06-22 08:23:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "edb557b2ba38fea2c5eb710cf366c797e187218c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESPINTCP", "INET6_ESPINTCP", "NET_KEY", "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "edb557b2ba38fea2c5eb710cf366c797e187218c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESPINTCP", "INET6_ESPINTCP", "NET_KEY", "XFRM_USER" ], "series_id": "deb7c863-a4be-435f-843c-d90ba7270dcd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_user_rcv_msg", "xfrm_set_default", "xfrm_get_default", "xfrm_user_policy", "pfkey_add", "espintcp_sendmsg", "xfrm_get_spdinfo" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7TkVUX0tFWSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX3NldF9kZWZhdWx0JiMzNDssCiAgICAmIzM0O3hmcm1fZ2V0X2RlZmF1bHQmIzM0OywKICAgICYjMzQ7eGZybV91c2VyX3BvbGljeSYjMzQ7LAogICAgJiMzNDtwZmtleV9hZGQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9zcGRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgWEZSTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBib3VuZHMgY2hlY2tzIGZvciBhZGRyZXNzIG1hdGNoaW5nLCBmaXhpbmcgZGF0YSByYWNlcyBpbiBwb2xpY3kgY291bnRzL2RlZmF1bHRzLCBhZGp1c3RpbmcgZGV2IHJlZmNvdW50aW5nIGluIHhmcm1faW5wdXQsIGFuZCByZWZhY3RvcmluZyBlc3BpbnRjcCBtZXNzYWdlIHNlbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIElQc2VjIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjY1ZWQyNmNlMTBiOGEwYmU2NzBkOWQ4MTA0NTBhMzBkOWNiZWE2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDA4OjE1OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaFxuaW5kZXggODc0NDA5MTI3ZTI5MjEuLmY4YzkwOWIwZjBjMzRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZnJtLmhcbkBAIC05NDMsNiAmIzQzOzk0Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGRyX21hdGNoKGNvbnN0IHZvaWQgKnRva2VuMSwgY29uc3Qgdm9pZCAqdG9rZW4yLFxuIFx0dW5zaWduZWQgaW50IHBkdztcbiBcdHVuc2lnbmVkIGludCBwYmk7XG4gXG4mIzQzO1x0aWYgKHByZWZpeGxlbiBcdTAwM2UgMTI4KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHBkdyA9IHByZWZpeGxlbiBcdTAwM2VcdTAwM2UgNTtcdCAgLyogbnVtIG9mIHdob2xlIHUzMiBpbiBwcmVmaXggKi9cbiBcdHBiaSA9IHByZWZpeGxlbiBcdTAwMjYgIDB4MWY7ICAvKiBudW0gb2YgYml0cyBpbiBpbmNvbXBsZXRlIHUzMiBpbiBwcmVmaXggKi9cbiBcbkBAIC05NjcsNiAmIzQzOzk3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcjRfbWF0Y2goX19iZTMyIGExLCBfX2JlMzIgYTIsIHU4IHByZWZpeGxlbilcbiBcdC8qIEM5OSA2LjUuNyAoMyk6IHUzMiBcdTAwM2NcdTAwM2MgMzIgaXMgdW5kZWZpbmVkIGJlaGF2aW91ciAqL1xuIFx0aWYgKHNpemVvZihsb25nKSA9PSA0IFx1MDAyNlx1MDAyNiBwcmVmaXhsZW4gPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChwcmVmaXhsZW4gXHUwMDNlIDMyKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHJldHVybiAhKChhMSBeIGEyKSBcdTAwMjYgaHRvbmwofjBVTCBcdTAwM2NcdTAwM2MgKDMyIC0gcHJlZml4bGVuKSkpO1xuIH1cbiBcbkBAIC0xMjUwLDggJiM0MzsxMjU3LDggQEAgaW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKiwgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW5saW5lIGJvb2wgX194ZnJtX2NoZWNrX25vcG9saWN5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0IGludCBkaXIpXG4ge1xuLVx0aWYgKCFuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSBcdTAwMjZcdTAwMjYgIXNlY3BhdGhfZXhpc3RzKHNrYikpXG4tXHRcdHJldHVybiBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQ7XG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0pIFx1MDAyNlx1MDAyNiAhc2VjcGF0aF9leGlzdHMoc2tiKSlcbiYjNDM7XHRcdHJldHVybiBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVDtcbiBcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTM1MSw4ICYjNDM7MTM1OCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fcm91dGVfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiBcbi1cdGlmICghbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0gXHUwMDI2XHUwMDI2XG4tXHQgICAgbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQUNDRVBUKVxuJiM0MztcdGlmICghUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0cmV0dXJuIChza2JfZHN0KHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IERTVF9OT1hGUk0pIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfaW5wdXQuYyBiL25ldC9pcHY0L3hmcm00X2lucHV0LmNcbmluZGV4IGMyZWFjODQ0YmNkYjRlLi5mNmYyYThlZjNmODg0NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3hmcm00X2lucHV0LmNcbkBAIC03Niw4ICYjNDM7NzYsNiBAQCBpbnQgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXN5bmMpXG4gXHRORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QUkVfUk9VVElORyxcbiBcdFx0ZGV2X25ldChkZXYpLCBOVUxMLCBza2IsIGRldiwgTlVMTCxcbiBcdFx0eGZybTRfcmN2X2VuY2FwX2ZpbmlzaCk7XG4tXHRpZiAoYXN5bmMpXG4tXHRcdGRldl9wdXQoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuaW5kZXggNjk5YTAwMWFjMTY2MjkuLjg5ZDA0NDNiNTMwNzMyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuQEAgLTcxLDggJiM0Mzs3MSw2IEBAIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcbiBcdE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX1BSRV9ST1VUSU5HLFxuIFx0XHRkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLFxuIFx0XHR4ZnJtNl90cmFuc3BvcnRfZmluaXNoMik7XG4tXHRpZiAoYXN5bmMpXG4tXHRcdGRldl9wdXQoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuY1xuaW5kZXggOWNmZmVlZjE4Y2Q5MWMuLjMyMTZmODk3YTMwNWUwIDEwMDY0NFxuLS0tIGEvbmV0L2tleS9hZl9rZXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2tleS9hZl9rZXkuY1xuQEAgLTEyMTgsNiAmIzQzOzEyMTgsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKiBwZmtleV9tc2cyeGZybV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHR9XG4gXHRcdFx0c3RyY3B5KHgtXHUwMDNlY2FsZy1cdTAwM2VhbGdfbmFtZSwgYS1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0eC1cdTAwM2VjYWxnLVx1MDAzZWFsZ19rZXlfbGVuID0gMDtcbiBcdFx0XHR4LVx1MDAzZXByb3BzLmNhbGdvID0gc2EtXHUwMDNlc2FkYl9zYV9lbmNyeXB0O1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGludCBrZXlzaXplID0gMDtcbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuaW5kZXggZDkwMzU1NDYzNzVlYmEuLjM3NGUxYjk2NDQzODM5IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTIxMiw0MyAmIzQzOzIxMiwyMyBAQCBzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX21zZyAqc2ttc2cgPSBcdTAwMjZlbXNnLVx1MDAzZXNrbXNnO1xuIFx0Ym9vbCBtb3JlID0gZmxhZ3MgXHUwMDI2IE1TR19NT1JFO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbi1cdGludCBkb25lID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRzZyA9IFx1MDAyNnNrbXNnLVx1MDAzZXNnLmRhdGFbc2ttc2ctXHUwMDNlc2cuc3RhcnRdO1xuIFx0ZG8ge1xuIFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuLVx0XHRzaXplX3Qgc2l6ZSA9IHNnLVx1MDAzZWxlbmd0aCAtIGVtc2ctXHUwMDNlb2Zmc2V0O1xuLVx0XHRpbnQgb2Zmc2V0ID0gc2ctXHUwMDNlb2Zmc2V0ICYjNDM7IGVtc2ctXHUwMDNlb2Zmc2V0O1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcDtcbi1cbi1cdFx0ZW1zZy1cdTAwM2VvZmZzZXQgPSAwO1xuIFxuJiM0MztcdFx0c2cgPSBcdTAwMjZza21zZy1cdTAwM2VzZy5kYXRhW3NrbXNnLVx1MDAzZXNnLnN0YXJ0XTtcbiBcdFx0aWYgKHNnX2lzX2xhc3Qoc2cpIFx1MDAyNlx1MDAyNiAhbW9yZSlcbiBcdFx0XHRtc2doZHIubXNnX2ZsYWdzIFx1MDAyNj0gfk1TR19NT1JFO1xuIFxuLVx0XHRwID0gc2dfcGFnZShzZyk7XG4tcmV0cnk6XG4tXHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2YnZlYywgcCwgc2l6ZSwgb2Zmc2V0KTtcbi1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbi1cdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2doZHIsIHNpemUpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZW1zZy1cdTAwM2VvZmZzZXQgPSBvZmZzZXQgLSBzZy1cdTAwM2VvZmZzZXQ7XG4tXHRcdFx0c2ttc2ctXHUwMDNlc2cuc3RhcnQgJiM0Mzs9IGRvbmU7XG4mIzQzO1x0XHRidmVjX3NldF9wYWdlKFx1MDAyNmJ2ZWMsIHNnX3BhZ2Uoc2cpLCBzZy1cdTAwM2VsZW5ndGgsIHNnLVx1MDAzZW9mZnNldCk7XG4mIzQzO1x0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFx1MDAyNmJ2ZWMsIDEsIHNnLVx1MDAzZWxlbmd0aCk7XG4mIzQzO1x0XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFx1MDAyNm1zZ2hkciwgc2ctXHUwMDNlbGVuZ3RoKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuLVxuLVx0XHRpZiAocmV0ICE9IHNpemUpIHtcbi1cdFx0XHRvZmZzZXQgJiM0Mzs9IHJldDtcbi1cdFx0XHRzaXplIC09IHJldDtcbi1cdFx0XHRnb3RvIHJldHJ5O1xuLVx0XHR9XG4gXG4tXHRcdGRvbmUmIzQzOyYjNDM7O1xuLVx0XHRwdXRfcGFnZShwKTtcbi1cdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZy1cdTAwM2VsZW5ndGgpO1xuLVx0XHRzZyA9IHNnX25leHQoc2cpO1xuLVx0fSB3aGlsZSAoc2cpO1xuJiM0MztcdFx0c2tfbXNnX2ZyZWVfcGFydGlhbChzaywgc2ttc2csIHJldCk7XG4mIzQzO1x0fSB3aGlsZSAoc2ttc2ctXHUwMDNlc2cuc2l6ZSk7XG4gXG4gXHRtZW1zZXQoZW1zZywgMCwgc2l6ZW9mKCplbXNnKSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlNGMyY2QyNDkzNmQzZi4uZWVjYWIzMzdiZDBhNzkgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuQEAgLTQ2Nyw2ICYjNDM7NDY3LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiBcdGludCBlcnI7XG4gXHRfX2JlMzIgc2VxO1xuIFx0X19iZTMyIHNlcV9oaTtcbkBAIC00OTMsNyAmIzQzOzQ5NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0XHRcdFx0ICAgICAgIExJTlVYX01JQl9YRlJNSU5TVEFURUlOVkFMSUQpO1xuIFxuIFx0XHRcdGlmIChlbmNhcF90eXBlID09IC0xKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0Z290byBkcm9wO1xuIFx0XHR9XG4gXG5AQCAtNjU1LDE2ICYjNDM7NjU2LDE2IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcbiBcdFx0aWYgKCFjcnlwdG9fZG9uZSkge1xuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4tXHRcdFx0ZGV2X2hvbGQoc2tiLVx1MDAzZWRldik7XG4mIzQzO1x0XHRcdGRldl9ob2xkKGRldik7XG4gXG4gXHRcdFx0bmV4dGhkciA9IHgtXHUwMDNldHlwZS1cdTAwM2VpbnB1dCh4LCBza2IpO1xuIFx0XHRcdGlmIChuZXh0aGRyID09IC1FSU5QUk9HUkVTUykge1xuIFx0XHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0XHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGRldl9wdXQoc2tiLVx1MDAzZWRldik7XG4mIzQzO1x0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRzcGluX2xvY2soXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbiBcdFx0fVxuIHJlc3VtZTpcbkBAIC02OTksNyAmIzQzOzcwMCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0ZXJyID0geGZybV9pbm5lcl9tb2RlX2lucHV0KHgsIHNrYik7XG4gXHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XG4gXHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH0gZWxzZSBpZiAoZXJyKSB7XG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOU1RBVEVNT0RFRVJST1IpO1xuQEAgLTcyNiw5ICYjNDM7NzI3LDEyIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0Y3J5cHRvX2RvbmUgPSBmYWxzZTtcbiBcdH0gd2hpbGUgKCFlcnIpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8sIDApO1xuLVx0aWYgKGVycilcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0Z290byBkcm9wO1xuJiM0MztcdH1cbiBcbiBcdG5mX3Jlc2V0X2N0KHNrYik7XG4gXG5AQCAtNzM5LDggJiM0Mzs3NDMsOSBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXG4gXHRcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gXHRcdGlmIChhc3luYylcbi1cdFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNmdyb19jZWxscywgc2tiKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG4gXHRcdHhvID0geGZybV9vZmZsb2FkKHNrYik7XG5AQCAtNzQ4LDIzICYjNDM7NzUzLDIxIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0XHR4ZnJtX2dybyA9IHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dSTztcbiBcbiBcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KHgtXHUwMDNlcHJvcHMuZmFtaWx5KTtcbiBcdFx0aWYgKGxpa2VseShhZmluZm8pKVxuIFx0XHRcdGVyciA9IGFmaW5mby1cdTAwM2V0cmFuc3BvcnRfZmluaXNoKHNrYiwgeGZybV9ncm8gfHwgYXN5bmMpO1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0aWYgKHhmcm1fZ3JvKSB7XG4gXHRcdFx0c3AgPSBza2Jfc2VjX3BhdGgoc2tiKTtcbiBcdFx0XHRpZiAoc3ApXG4gXHRcdFx0XHRzcC1cdTAwM2VvbGVuID0gMDtcbiBcdFx0XHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuIFx0XHRcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4tXHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbiBcdFx0XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZncm9fY2VsbHMsIHNrYik7XG4tXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKGFzeW5jKVxuJiM0MztcdFx0XHRkZXZfcHV0KGRldik7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbkBAIC03NzIsNyAmIzQzOzc3NSw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4gZHJvcDpcbiBcdGlmIChhc3luYylcbi1cdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRcdGRldl9wdXQoZGV2KTtcbiBcdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4IFx1MDAyNlx1MDAyNiB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyLCAtMSk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5pbmRleCA5NTk1NDQ0MjU2OTI5MC4uNjM5OTM0ZjMwMDE2N2UgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5AQCAtMjQyLDYgJiM0MzsyNDIsOSBAQCBfX3hmcm02X3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwpXG4gYm9vbCB4ZnJtX3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXG4gXHRcdFx0IHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbiB7XG4mIzQzO1x0aWYgKGZhbWlseSAhPSBzZWwtXHUwMDNlZmFtaWx5IFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNlZmFtaWx5ICE9IEFGX1VOU1BFQylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGZhbWlseSkge1xuIFx0Y2FzZSBBRl9JTkVUOlxuIFx0XHRyZXR1cm4gX194ZnJtNF9zZWxlY3Rvcl9tYXRjaChzZWwsIGZsKTtcbkBAIC02ODUsNyAmIzQzOzY4OCw3IEBAIHN0YXRpYyB2b2lkIHhmcm1fYnlpZHhfcmVzaXplKHN0cnVjdCBuZXQgKm5ldClcbiBcbiBzdGF0aWMgaW5saW5lIGludCB4ZnJtX2J5ZHN0X3Nob3VsZF9yZXNpemUoc3RydWN0IG5ldCAqbmV0LCBpbnQgZGlyLCBpbnQgKnRvdGFsKVxuIHtcbi1cdHVuc2lnbmVkIGludCBjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdKTtcbiBcdHVuc2lnbmVkIGludCBobWFzayA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9ieWRzdFtkaXJdLmhtYXNrO1xuIFxuIFx0aWYgKHRvdGFsKVxuQEAgLTcxMSwxMiAmIzQzOzcxNCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCB4ZnJtX2J5aWR4X3Nob3VsZF9yZXNpemUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG90YWwpXG4gXG4gdm9pZCB4ZnJtX3NwZF9nZXRpbmZvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1rX3NwZGluZm8gKnNpKVxuIHtcbi1cdHNpLVx1MDAzZWluY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0lOXTtcbi1cdHNpLVx1MDAzZW91dGNudCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdO1xuLVx0c2ktXHUwMDNlZndkY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRF07XG4tXHRzaS1cdTAwM2VpbnNjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU4mIzQzO1hGUk1fUE9MSUNZX01BWF07XG4tXHRzaS1cdTAwM2VvdXRzY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVCYjNDM7WEZSTV9QT0xJQ1lfTUFYXTtcbi1cdHNpLVx1MDAzZWZ3ZHNjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEJiM0MztYRlJNX1BPTElDWV9NQVhdO1xuJiM0MztcdHNpLVx1MDAzZWluY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTl0pO1xuJiM0MztcdHNpLVx1MDAzZW91dGNudCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSk7XG4mIzQzO1x0c2ktXHUwMDNlZndkY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9GV0RdKTtcbiYjNDM7XHRzaS1cdTAwM2VpbnNjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0lOJiM0MztYRlJNX1BPTElDWV9NQVhdKTtcbiYjNDM7XHRzaS1cdTAwM2VvdXRzY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVQmIzQzO1hGUk1fUE9MSUNZX01BWF0pO1xuJiM0MztcdHNpLVx1MDAzZWZ3ZHNjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRCYjNDM7WEZSTV9QT0xJQ1lfTUFYXSk7XG4gXHRzaS1cdTAwM2VzcGRoY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2lkeF9obWFzaztcbiBcdHNpLVx1MDAzZXNwZGhtY250ID0geGZybV9wb2xpY3lfaGFzaG1heDtcbiB9XG5AQCAtMjMxOCw3ICYjNDM7MjMyMSw3IEBAIHN0YXRpYyB2b2lkIF9feGZybV9wb2xpY3lfbGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcbiBcdH1cbiBcbiBcdGxpc3RfYWRkKFx1MDAyNnBvbC1cdTAwM2V3YWxrLmFsbCwgXHUwMDI2bmV0LVx1MDAzZXhmcm0ucG9saWN5X2FsbCk7XG4tXHRuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSYjNDM7JiM0Mzs7XG4mIzQzO1x0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSwgbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0gJiM0MzsgMSk7XG4gXHR4ZnJtX3BvbF9ob2xkKHBvbCk7XG4gfVxuIFxuQEAgLTIzMzcsNyAmIzQzOzIzNDAsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpfX3hmcm1fcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcbiBcdH1cbiBcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2cG9sLVx1MDAzZXdhbGsuYWxsKTtcbi1cdG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdLS07XG4mIzQzO1x0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSwgbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0gLSAxKTtcbiBcbiBcdHJldHVybiBwb2w7XG4gfVxuQEAgLTMyMjIsNyAmIzQzOzMyMjUsNyBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cF93aXRoX2lmaWQoc3RydWN0IG5ldCAqbmV0LFxuIFxuIFx0XHQvKiBUbyBhY2NlbGVyYXRlIGEgYml0Li4uICAqL1xuIFx0XHRpZiAoIWlmX2lkIFx1MDAyNlx1MDAyNiAoKGRzdF9vcmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBEU1RfTk9YRlJNKSB8fFxuLVx0XHRcdCAgICAgICAhbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0pKVxuJiM0MztcdFx0XHQgICAgICAgIVJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSkpKVxuIFx0XHRcdGdvdG8gbm9wb2w7XG4gXG4gXHRcdHhkc3QgPSB4ZnJtX2J1bmRsZV9sb29rdXAobmV0LCBmbCwgZmFtaWx5LCBkaXIsIFx1MDAyNnhmbG8sIGlmX2lkKTtcbkBAIC0zMjk2LDcgJiM0MzszMjk5LDcgQEAgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9sb29rdXBfd2l0aF9pZmlkKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBub3BvbDpcbiBcdGlmICgoIWRzdF9vcmlnLVx1MDAzZWRldiB8fCAhKGRzdF9vcmlnLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQkxPQ0spIHtcbiYjNDM7XHQgICAgUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xuIFx0XHRlcnIgPSAtRVBFUk07XG4gXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG5AQCAtMzc1MCw3ICYjNDM7Mzc1Myw3IEBAIGludCBfX3hmcm1fcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Y29uc3QgYm9vbCBpc19jcnlwdG9fb2ZmbG9hZCA9IHNwIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCh4ZnJtX2lucHV0X3N0YXRlKHNrYiktXHUwMDNleHNvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9DUllQVE8pO1xuIFxuLVx0XHRpZiAobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQkxPQ0spIHtcbiYjNDM7XHRcdGlmIChSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7XG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOTk9QT0xTKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuaW5kZXggNTg5YzNiNmU0Njc5MTMuLjllODdmNzAyODIwMTA4IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbkBAIC0xMjA3LDkgJiM0MzsxMjA3LDExIEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnN0YXRlX2NhY2hlX2lucHV0O1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xuIFxuJiM0MztcdC8qIEJIIGlzIGFsd2F5cyBkaXNhYmxlZCBvbiB0aGUgaW5wdXQgcGF0aC4gKi9cbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9pbl9zb2Z0aXJxKCk7XG4mIzQzO1xuIFx0c3RhdGVfY2FjaGVfaW5wdXQgPSByYXdfY3B1X3B0cihuZXQtXHUwMDNleGZybS5zdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KSB7XG4gXHRcdGlmICh4LVx1MDAzZXByb3BzLmZhbWlseSAhPSBmYW1pbHkgfHxcbiBcdFx0ICAgIHgtXHUwMDNlaWQuc3BpICAgICAgICE9IHNwaSB8fFxuQEAgLTEyMjcsMjAgJiM0MzsxMjI5LDI1IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4gXG4gXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbi1cbi1cdGlmICh4IFx1MDAyNlx1MDAyNiB4LVx1MDAzZWttLnN0YXRlID09IFhGUk1fU1RBVEVfVkFMSUQpIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4tXHRcdGlmIChobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KSkge1xuJiM0MztcdGlmICh4KSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiYjNDM7XHRcdGlmICh4LVx1MDAzZWttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIHN0YXRlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogRG9uJiMzOTt0IGFkZCBpdCB0byB0aGUgY2FjaGUgYnV0IHN0aWxsXG4mIzQzO1x0XHRcdCAqIHJldHVybiBpdCB0byB0aGUgY2FsbGVyLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdH0gZWxzZSBpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCkpIHtcbiBcdFx0XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCwgc3RhdGVfY2FjaGVfaW5wdXQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXHRcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KTtcbiBcdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiBcdH1cbiBcbiBvdXQ6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiB4O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKTtcbkBAIC0yOTc2LDcgJiM0MzsyOTgzLDcgQEAgaW50IHhmcm1fdXNlcl9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbiBcdGlmIChJU19FUlIoZGF0YSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGRhdGEpO1xuIFxuLVx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UKSBcdTAwMjZcdTAwMjYgaW5fY29tcGF0X3N5c2NhbGwoKSkge1xuIFx0XHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG4gXG4gXHRcdGlmICgheHRyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNzFhNGI3Mjc4ZWJhOTIuLjYxZWI1ZGUzM2I4N2VlIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMjQ4NSw5ICYjNDM7MjQ4NSw5IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR9XG4gXG4gXHR1cCA9IG5sbXNnX2RhdGEobmxoKTtcbi1cdHVwLVx1MDAzZWluID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dO1xuLVx0dXAtXHUwMDNlZndkID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXTtcbi1cdHVwLVx1MDAzZW91dCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF07XG4mIzQzO1x0dXAtXHUwMDNlaW4gPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dKTtcbiYjNDM7XHR1cC1cdTAwM2Vmd2QgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSk7XG4mIzQzO1x0dXAtXHUwMDNlb3V0ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pO1xuIFxuIFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbiBcbkBAIC0yNTExLDEzICYjNDM7MjUxMSwxMyBAQCBzdGF0aWMgaW50IHhmcm1fc2V0X2RlZmF1bHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgeGZybV91c2VycG9saWN5X2RlZmF1bHQgKnVwID0gbmxtc2dfZGF0YShubGgpO1xuIFxuIFx0aWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC1cdTAwM2VpbikpXG4tXHRcdG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSA9IHVwLVx1MDAzZWluO1xuJiM0MztcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0sIHVwLVx1MDAzZWluKTtcbiBcbiBcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlZndkKSlcbi1cdFx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSA9IHVwLVx1MDAzZWZ3ZDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSwgdXAtXHUwMDNlZndkKTtcbiBcbiBcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlb3V0KSlcbi1cdFx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSA9IHVwLVx1MDAzZW91dDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSwgdXAtXHUwMDNlb3V0KTtcbiBcbiBcdHJ0X2dlbmlkX2J1bXBfYWxsKG5ldCk7XG4gXG5AQCAtMjU0Nyw5ICYjNDM7MjU0Nyw5IEBAIHN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdH1cbiBcbiBcdHJfdXAgPSBubG1zZ19kYXRhKHJfbmxoKTtcbi1cdHJfdXAtXHUwMDNlaW4gPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl07XG4tXHRyX3VwLVx1MDAzZWZ3ZCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF07XG4tXHRyX3VwLVx1MDAzZW91dCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF07XG4mIzQzO1x0cl91cC1cdTAwM2VpbiA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0pO1xuJiM0MztcdHJfdXAtXHUwMDNlZndkID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF0pO1xuJiM0MztcdHJfdXAtXHUwMDNlb3V0ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pO1xuIFx0bmxtc2dfZW5kKHJfc2tiLCByX25saCk7XG4gXG4gXHRyZXR1cm4gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcl9za2IsIHBvcnRpZCk7XG5AQCAtMzQ3Miw3ICYjNDM7MzQ3Miw3IEBAIHN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRpZiAoIW5ldGxpbmtfbmV0X2NhcGFibGUoc2tiLCBDQVBfTkVUX0FETUlOKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCkgXHUwMDI2XHUwMDI2IGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcbiBcdFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuIFxuIFx0XHRpZiAoIXh0cilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O05FVF9LRVkmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV91c2VyX3Jjdl9tc2cmIzM0OywKICAgICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9kZWZhdWx0JiMzNDssCiAgICAmIzM0O3hmcm1fdXNlcl9wb2xpY3kmIzM0OywKICAgICYjMzQ7cGZrZXlfYWRkJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7eGZybV9nZXRfc3BkaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFhGUk0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYm91bmRzIGNoZWNrcyBmb3IgYWRkcmVzcyBtYXRjaGluZywgZml4aW5nIGRhdGEgcmFjZXMgaW4gcG9saWN5IGNvdW50cy9kZWZhdWx0cywgYWRqdXN0aW5nIGRldiByZWZjb3VudGluZyBpbiB4ZnJtX2lucHV0LCBhbmQgcmVmYWN0b3JpbmcgZXNwaW50Y3AgbWVzc2FnZSBzZW5kaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBJUHNlYyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjY1ZWQyNmNlMTBiOGEwYmU2NzBkOWQ4MTA0NTBhMzBkOWNiZWE2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDA4OjE1OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDg3NDQwOTEyN2UyOTIxLi5mOGM5MDliMGYwYzM0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtOTQzLDYgJiM0Mzs5NDMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcl9tYXRjaChjb25zdCB2b2lkICp0b2tlbjEsIGNvbnN0IHZvaWQgKnRva2VuMiwKIAl1bnNpZ25lZCBpbnQgcGR3OwogCXVuc2lnbmVkIGludCBwYmk7CiAKJiM0MzsJaWYgKHByZWZpeGxlbiAmZ3Q7IDEyOCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlwZHcgPSBwcmVmaXhsZW4gJmd0OyZndDsgNTsJICAvKiBudW0gb2Ygd2hvbGUgdTMyIGluIHByZWZpeCAqLwogCXBiaSA9IHByZWZpeGxlbiAmYW1wOyAgMHgxZjsgIC8qIG51bSBvZiBiaXRzIGluIGluY29tcGxldGUgdTMyIGluIHByZWZpeCAqLwogCkBAIC05NjcsNiAmIzQzOzk3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcjRfbWF0Y2goX19iZTMyIGExLCBfX2JlMzIgYTIsIHU4IHByZWZpeGxlbikKIAkvKiBDOTkgNi41LjcgKDMpOiB1MzIgJmx0OyZsdDsgMzIgaXMgdW5kZWZpbmVkIGJlaGF2aW91ciAqLwogCWlmIChzaXplb2YobG9uZykgPT0gNCAmYW1wOyZhbXA7IHByZWZpeGxlbiA9PSAwKQogCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHByZWZpeGxlbiAmZ3Q7IDMyKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCXJldHVybiAhKChhMSBeIGEyKSAmYW1wOyBodG9ubCh+MFVMICZsdDsmbHQ7ICgzMiAtIHByZWZpeGxlbikpKTsKIH0KIApAQCAtMTI1MCw4ICYjNDM7MTI1Nyw4IEBAIGludCBfX3hmcm1fcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICosIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsCiBzdGF0aWMgaW5saW5lIGJvb2wgX194ZnJtX2NoZWNrX25vcG9saWN5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIGludCBkaXIpCiB7Ci0JaWYgKCFuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W2Rpcl0gJmFtcDsmYW1wOyAhc2VjcGF0aF9leGlzdHMoc2tiKSkKLQkJcmV0dXJuIG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQ7CiYjNDM7CWlmICghUkVBRF9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXSkgJmFtcDsmYW1wOyAhc2VjcGF0aF9leGlzdHMoc2tiKSkKJiM0MzsJCXJldHVybiBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQ7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzUxLDggJiM0MzsxMzU4LDggQEAgc3RhdGljIGlubGluZSBpbnQgeGZybV9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0mZ3Q7ZGV2KTsKIAotCWlmICghbmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdICZhbXA7JmFtcDsKLQkgICAgbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0gPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVCkKJiM0MzsJaWYgKCFSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQpCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIChza2JfZHN0KHNrYiktJmd0O2ZsYWdzICZhbXA7IERTVF9OT1hGUk0pIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwppbmRleCBjMmVhYzg0NGJjZGI0ZS4uZjZmMmE4ZWYzZjg4NDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtNzYsOCAmIzQzOzc2LDYgQEAgaW50IHhmcm00X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKQogCU5GX0hPT0soTkZQUk9UT19JUFY0LCBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQlkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLAogCQl4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKTsKLQlpZiAoYXN5bmMpCi0JCWRldl9wdXQoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKaW5kZXggNjk5YTAwMWFjMTY2MjkuLjg5ZDA0NDNiNTMwNzMyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKQEAgLTcxLDggJiM0Mzs3MSw2IEBAIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYykKIAlORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9QUkVfUk9VVElORywKIAkJZGV2X25ldChkZXYpLCBOVUxMLCBza2IsIGRldiwgTlVMTCwKIAkJeGZybTZfdHJhbnNwb3J0X2ZpbmlzaDIpOwotCWlmIChhc3luYykKLQkJZGV2X3B1dChkZXYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuYwppbmRleCA5Y2ZmZWVmMThjZDkxYy4uMzIxNmY4OTdhMzA1ZTAgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMTIxOCw2ICYjNDM7MTIxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqIHBma2V5X21zZzJ4ZnJtX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCXN0cmNweSh4LSZndDtjYWxnLSZndDthbGdfbmFtZSwgYS0mZ3Q7bmFtZSk7CiYjNDM7CQkJeC0mZ3Q7Y2FsZy0mZ3Q7YWxnX2tleV9sZW4gPSAwOwogCQkJeC0mZ3Q7cHJvcHMuY2FsZ28gPSBzYS0mZ3Q7c2FkYl9zYV9lbmNyeXB0OwogCQl9IGVsc2UgewogCQkJaW50IGtleXNpemUgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmMKaW5kZXggZDkwMzU1NDYzNzVlYmEuLjM3NGUxYjk2NDQzODM5IDEwMDY0NAotLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL2VzcGludGNwLmMKQEAgLTIxMiw0MyAmIzQzOzIxMiwyMyBAQCBzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLAogCXN0cnVjdCBza19tc2cgKnNrbXNnID0gJmFtcDtlbXNnLSZndDtza21zZzsKIAlib29sIG1vcmUgPSBmbGFncyAmYW1wOyBNU0dfTU9SRTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCWludCBkb25lID0gMDsKIAlpbnQgcmV0OwogCi0Jc2cgPSAmYW1wO3NrbXNnLSZndDtzZy5kYXRhW3NrbXNnLSZndDtzZy5zdGFydF07CiAJZG8gewogCQlzdHJ1Y3QgYmlvX3ZlYyBidmVjOwotCQlzaXplX3Qgc2l6ZSA9IHNnLSZndDtsZW5ndGggLSBlbXNnLSZndDtvZmZzZXQ7Ci0JCWludCBvZmZzZXQgPSBzZy0mZ3Q7b2Zmc2V0ICYjNDM7IGVtc2ctJmd0O29mZnNldDsKLQkJc3RydWN0IHBhZ2UgKnA7Ci0KLQkJZW1zZy0mZ3Q7b2Zmc2V0ID0gMDsKIAomIzQzOwkJc2cgPSAmYW1wO3NrbXNnLSZndDtzZy5kYXRhW3NrbXNnLSZndDtzZy5zdGFydF07CiAJCWlmIChzZ19pc19sYXN0KHNnKSAmYW1wOyZhbXA7ICFtb3JlKQogCQkJbXNnaGRyLm1zZ19mbGFncyAmYW1wOz0gfk1TR19NT1JFOwogCi0JCXAgPSBzZ19wYWdlKHNnKTsKLXJldHJ5OgotCQlidmVjX3NldF9wYWdlKCZhbXA7YnZlYywgcCwgc2l6ZSwgb2Zmc2V0KTsKLQkJaW92X2l0ZXJfYnZlYygmYW1wO21zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsICZhbXA7YnZlYywgMSwgc2l6ZSk7Ci0JCXJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgJmFtcDttc2doZHIsIHNpemUpOwotCQlpZiAocmV0ICZsdDsgMCkgewotCQkJZW1zZy0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0IC0gc2ctJmd0O29mZnNldDsKLQkJCXNrbXNnLSZndDtzZy5zdGFydCAmIzQzOz0gZG9uZTsKJiM0MzsJCWJ2ZWNfc2V0X3BhZ2UoJmFtcDtidmVjLCBzZ19wYWdlKHNnKSwgc2ctJmd0O2xlbmd0aCwgc2ctJmd0O29mZnNldCk7CiYjNDM7CQlpb3ZfaXRlcl9idmVjKCZhbXA7bXNnaGRyLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgJmFtcDtidmVjLCAxLCBzZy0mZ3Q7bGVuZ3RoKTsKJiM0MzsJCXJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgJmFtcDttc2doZHIsIHNnLSZndDtsZW5ndGgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJaWYgKHJldCAhPSBzaXplKSB7Ci0JCQlvZmZzZXQgJiM0Mzs9IHJldDsKLQkJCXNpemUgLT0gcmV0OwotCQkJZ290byByZXRyeTsKLQkJfQogCi0JCWRvbmUmIzQzOyYjNDM7OwotCQlwdXRfcGFnZShwKTsKLQkJc2tfbWVtX3VuY2hhcmdlKHNrLCBzZy0mZ3Q7bGVuZ3RoKTsKLQkJc2cgPSBzZ19uZXh0KHNnKTsKLQl9IHdoaWxlIChzZyk7CiYjNDM7CQlza19tc2dfZnJlZV9wYXJ0aWFsKHNrLCBza21zZywgcmV0KTsKJiM0MzsJfSB3aGlsZSAoc2ttc2ctJmd0O3NnLnNpemUpOwogCiAJbWVtc2V0KGVtc2csIDAsIHNpemVvZigqZW1zZykpOwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKaW5kZXggZTRjMmNkMjQ5MzZkM2YuLmVlY2FiMzM3YmQwYTc5IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCkBAIC00NjcsNiAmIzQzOzQ2Nyw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIHsKIAljb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbzsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0mZ3Q7ZGV2OwogCWludCBlcnI7CiAJX19iZTMyIHNlcTsKIAlfX2JlMzIgc2VxX2hpOwpAQCAtNDkzLDcgJiM0Mzs0OTQsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAJCQkJCSAgICAgICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVJTlZBTElEKTsKIAogCQkJaWYgKGVuY2FwX3R5cGUgPT0gLTEpCi0JCQkJZGV2X3B1dChza2ItJmd0O2Rldik7CiYjNDM7CQkJCWRldl9wdXQoZGV2KTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCkBAIC02NTUsMTYgJiM0Mzs2NTYsMTYgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCiAJCWlmICghY3J5cHRvX2RvbmUpIHsKIAkJCXNwaW5fdW5sb2NrKCZhbXA7eC0mZ3Q7bG9jayk7Ci0JCQlkZXZfaG9sZChza2ItJmd0O2Rldik7CiYjNDM7CQkJZGV2X2hvbGQoZGV2KTsKIAogCQkJbmV4dGhkciA9IHgtJmd0O3R5cGUtJmd0O2lucHV0KHgsIHNrYik7CiAJCQlpZiAobmV4dGhkciA9PSAtRUlOUFJPR1JFU1MpIHsKIAkJCQlpZiAoYXN5bmMpCi0JCQkJCWRldl9wdXQoc2tiLSZndDtkZXYpOwomIzQzOwkJCQkJZGV2X3B1dChkZXYpOwogCQkJCXJldHVybiAwOwogCQkJfQogCi0JCQlkZXZfcHV0KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJCQlkZXZfcHV0KGRldik7CiAJCQlzcGluX2xvY2soJmFtcDt4LSZndDtsb2NrKTsKIAkJfQogcmVzdW1lOgpAQCAtNjk5LDcgJiM0Mzs3MDAsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAJCWVyciA9IHhmcm1faW5uZXJfbW9kZV9pbnB1dCh4LCBza2IpOwogCQlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykgewogCQkJaWYgKGFzeW5jKQotCQkJCWRldl9wdXQoc2tiLSZndDtkZXYpOwomIzQzOwkJCQlkZXZfcHV0KGRldik7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIGlmIChlcnIpIHsKIAkJCVhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTlNUQVRFTU9ERUVSUk9SKTsKQEAgLTcyNiw5ICYjNDM7NzI3LDEyIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAkJY3J5cHRvX2RvbmUgPSBmYWxzZTsKIAl9IHdoaWxlICghZXJyKTsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJZXJyID0geGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHgtJmd0O3R5cGUtJmd0O3Byb3RvLCAwKTsKLQlpZiAoZXJyKQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJZ290byBkcm9wOwomIzQzOwl9CiAKIAluZl9yZXNldF9jdChza2IpOwogCkBAIC03MzksOCAmIzQzOzc0Myw5IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAkJaWYgKHNrYl92YWxpZF9kc3Qoc2tiKSkKIAkJCXNrYl9kc3RfZHJvcChza2IpOwogCQlpZiAoYXN5bmMpCi0JCQlkZXZfcHV0KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJCQlkZXZfcHV0KGRldik7CiAJCWdyb19jZWxsc19yZWNlaXZlKCZhbXA7Z3JvX2NlbGxzLCBza2IpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCXhvID0geGZybV9vZmZsb2FkKHNrYik7CkBAIC03NDgsMjMgJiM0Mzs3NTMsMjEgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCQkJeGZybV9ncm8gPSB4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HUk87CiAKIAkJZXJyID0gLUVBRk5PU1VQUE9SVDsKLQkJcmN1X3JlYWRfbG9jaygpOwogCQlhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KHgtJmd0O3Byb3BzLmZhbWlseSk7CiAJCWlmIChsaWtlbHkoYWZpbmZvKSkKIAkJCWVyciA9IGFmaW5mby0mZ3Q7dHJhbnNwb3J0X2ZpbmlzaChza2IsIHhmcm1fZ3JvIHx8IGFzeW5jKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWlmICh4ZnJtX2dybykgewogCQkJc3AgPSBza2Jfc2VjX3BhdGgoc2tiKTsKIAkJCWlmIChzcCkKIAkJCQlzcC0mZ3Q7b2xlbiA9IDA7CiAJCQlpZiAoc2tiX3ZhbGlkX2RzdChza2IpKQogCQkJCXNrYl9kc3RfZHJvcChza2IpOwotCQkJaWYgKGFzeW5jKQotCQkJCWRldl9wdXQoc2tiLSZndDtkZXYpOwogCQkJZ3JvX2NlbGxzX3JlY2VpdmUoJmFtcDtncm9fY2VsbHMsIHNrYik7Ci0JCQlyZXR1cm4gZXJyOwogCQl9CiAKJiM0MzsJCWlmIChhc3luYykKJiM0MzsJCQlkZXZfcHV0KGRldik7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTc3Miw3ICYjNDM7Nzc1LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCXNwaW5fdW5sb2NrKCZhbXA7eC0mZ3Q7bG9jayk7CiBkcm9wOgogCWlmIChhc3luYykKLQkJZGV2X3B1dChza2ItJmd0O2Rldik7CiYjNDM7CQlkZXZfcHV0KGRldik7CiAJeGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHggJmFtcDsmYW1wOyB4LSZndDt0eXBlID8geC0mZ3Q7dHlwZS0mZ3Q7cHJvdG8gOiBuZXh0aGRyLCAtMSk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCA5NTk1NDQ0MjU2OTI5MC4uNjM5OTM0ZjMwMDE2N2UgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjQyLDYgJiM0MzsyNDIsOSBAQCBfX3hmcm02X3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwpCiBib29sIHhmcm1fc2VsZWN0b3JfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbCwKIAkJCSB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiYjNDM7CWlmIChmYW1pbHkgIT0gc2VsLSZndDtmYW1pbHkgJmFtcDsmYW1wOyBzZWwtJmd0O2ZhbWlseSAhPSBBRl9VTlNQRUMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJc3dpdGNoIChmYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6CiAJCXJldHVybiBfX3hmcm00X3NlbGVjdG9yX21hdGNoKHNlbCwgZmwpOwpAQCAtNjg1LDcgJiM0Mzs2ODgsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX2J5aWR4X3Jlc2l6ZShzdHJ1Y3QgbmV0ICpuZXQpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fYnlkc3Rfc2hvdWxkX3Jlc2l6ZShzdHJ1Y3QgbmV0ICpuZXQsIGludCBkaXIsIGludCAqdG90YWwpCiB7Ci0JdW5zaWduZWQgaW50IGNudCA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXTsKJiM0MzsJdW5zaWduZWQgaW50IGNudCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W2Rpcl0pOwogCXVuc2lnbmVkIGludCBobWFzayA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfYnlkc3RbZGlyXS5obWFzazsKIAogCWlmICh0b3RhbCkKQEAgLTcxMSwxMiAmIzQzOzcxNCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCB4ZnJtX2J5aWR4X3Nob3VsZF9yZXNpemUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG90YWwpCiAKIHZvaWQgeGZybV9zcGRfZ2V0aW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJta19zcGRpbmZvICpzaSkKIHsKLQlzaS0mZ3Q7aW5jbnQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0lOXTsKLQlzaS0mZ3Q7b3V0Y250ID0gbmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdOwotCXNpLSZndDtmd2RjbnQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRF07Ci0Jc2ktJmd0O2luc2NudCA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU4mIzQzO1hGUk1fUE9MSUNZX01BWF07Ci0Jc2ktJmd0O291dHNjbnQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVCYjNDM7WEZSTV9QT0xJQ1lfTUFYXTsKLQlzaS0mZ3Q7Zndkc2NudCA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEJiM0MztYRlJNX1BPTElDWV9NQVhdOwomIzQzOwlzaS0mZ3Q7aW5jbnQgPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTl0pOwomIzQzOwlzaS0mZ3Q7b3V0Y250ID0gUkVBRF9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSk7CiYjNDM7CXNpLSZndDtmd2RjbnQgPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9GV0RdKTsKJiM0MzsJc2ktJmd0O2luc2NudCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0lOJiM0MztYRlJNX1BPTElDWV9NQVhdKTsKJiM0MzsJc2ktJmd0O291dHNjbnQgPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVQmIzQzO1hGUk1fUE9MSUNZX01BWF0pOwomIzQzOwlzaS0mZ3Q7Zndkc2NudCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRCYjNDM7WEZSTV9QT0xJQ1lfTUFYXSk7CiAJc2ktJmd0O3NwZGhjbnQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2lkeF9obWFzazsKIAlzaS0mZ3Q7c3BkaG1jbnQgPSB4ZnJtX3BvbGljeV9oYXNobWF4OwogfQpAQCAtMjMxOCw3ICYjNDM7MjMyMSw3IEBAIHN0YXRpYyB2b2lkIF9feGZybV9wb2xpY3lfbGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcikKIAl9CiAKIAlsaXN0X2FkZCgmYW1wO3BvbC0mZ3Q7d2Fsay5hbGwsICZhbXA7bmV0LSZndDt4ZnJtLnBvbGljeV9hbGwpOwotCW5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXSYjNDM7JiM0Mzs7CiYjNDM7CVdSSVRFX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtkaXJdLCBuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W2Rpcl0gJiM0MzsgMSk7CiAJeGZybV9wb2xfaG9sZChwb2wpOwogfQogCkBAIC0yMzM3LDcgJiM0MzsyMzQwLDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqX194ZnJtX3BvbGljeV91bmxpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsCiAJfQogCiAJbGlzdF9kZWxfaW5pdCgmYW1wO3BvbC0mZ3Q7d2Fsay5hbGwpOwotCW5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXS0tOwomIzQzOwlXUklURV9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXSwgbmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtkaXJdIC0gMSk7CiAKIAlyZXR1cm4gcG9sOwogfQpAQCAtMzIyMiw3ICYjNDM7MzIyNSw3IEBAIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsCiAKIAkJLyogVG8gYWNjZWxlcmF0ZSBhIGJpdC4uLiAgKi8KIAkJaWYgKCFpZl9pZCAmYW1wOyZhbXA7ICgoZHN0X29yaWctJmd0O2ZsYWdzICZhbXA7IERTVF9OT1hGUk0pIHx8Ci0JCQkgICAgICAgIW5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSkpCiYjNDM7CQkJICAgICAgICFSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSkpCiAJCQlnb3RvIG5vcG9sOwogCiAJCXhkc3QgPSB4ZnJtX2J1bmRsZV9sb29rdXAobmV0LCBmbCwgZmFtaWx5LCBkaXIsICZhbXA7eGZsbywgaWZfaWQpOwpAQCAtMzI5Niw3ICYjNDM7MzI5OSw3IEBAIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsCiAKIG5vcG9sOgogCWlmICgoIWRzdF9vcmlnLSZndDtkZXYgfHwgIShkc3Rfb3JpZy0mZ3Q7ZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfTE9PUEJBQ0spKSAmYW1wOyZhbXA7Ci0JICAgIG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykgewomIzQzOwkgICAgUkVBRF9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdKSA9PSBYRlJNX1VTRVJQT0xJQ1lfQkxPQ0spIHsKIAkJZXJyID0gLUVQRVJNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTM3NTAsNyAmIzQzOzM3NTMsNyBAQCBpbnQgX194ZnJtX3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWNvbnN0IGJvb2wgaXNfY3J5cHRvX29mZmxvYWQgPSBzcCAmYW1wOyZhbXA7CiAJCQkoeGZybV9pbnB1dF9zdGF0ZShza2IpLSZndDt4c28udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTyk7CiAKLQkJaWYgKG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykgewomIzQzOwkJaWYgKFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7CiAJCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1BPTFMpOwogCQkJcmV0dXJuIDA7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCA1ODljM2I2ZTQ2NzkxMy4uOWU4N2Y3MDI4MjAxMDggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTEyMDcsOSAmIzQzOzEyMDcsMTEgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJc3RydWN0IGhsaXN0X2hlYWQgKnN0YXRlX2NhY2hlX2lucHV0OwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDsKIAomIzQzOwkvKiBCSCBpcyBhbHdheXMgZGlzYWJsZWQgb24gdGhlIGlucHV0IHBhdGguICovCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2luX3NvZnRpcnEoKTsKJiM0MzsKIAlzdGF0ZV9jYWNoZV9pbnB1dCA9IHJhd19jcHVfcHRyKG5ldC0mZ3Q7eGZybS5zdGF0ZV9jYWNoZV9pbnB1dCk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHgsIHN0YXRlX2NhY2hlX2lucHV0LCBzdGF0ZV9jYWNoZV9pbnB1dCkgewogCQlpZiAoeC0mZ3Q7cHJvcHMuZmFtaWx5ICE9IGZhbWlseSB8fAogCQkgICAgeC0mZ3Q7aWQuc3BpICAgICAgICE9IHNwaSB8fApAQCAtMTIyNywyMCAmIzQzOzEyMjksMjUgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJeGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgJmFtcDtzdGF0ZV9wdHJzKTsKIAogCXggPSBfX3hmcm1fc3RhdGVfbG9va3VwKCZhbXA7c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7Ci0KLQlpZiAoeCAmYW1wOyZhbXA7IHgtJmd0O2ttLnN0YXRlID09IFhGUk1fU1RBVEVfVkFMSUQpIHsKLQkJc3Bpbl9sb2NrX2JoKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7Ci0JCWlmIChobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlX2lucHV0KSkgewomIzQzOwlpZiAoeCkgewomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7CiYjNDM7CQlpZiAoeC0mZ3Q7a20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogVGhlIHN0YXRlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIERvbiYjMzk7dCBhZGQgaXQgdG8gdGhlIGNhY2hlIGJ1dCBzdGlsbAomIzQzOwkJCSAqIHJldHVybiBpdCB0byB0aGUgY2FsbGVyLgomIzQzOwkJCSAqLwomIzQzOwkJfSBlbHNlIGlmIChobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlX2lucHV0KSkgewogCQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KTsKIAkJfSBlbHNlIHsKIAkJCWhsaXN0X2RlbF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZV9pbnB1dCk7CiAJCQlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZV9pbnB1dCwgc3RhdGVfY2FjaGVfaW5wdXQpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO25ldC0mZ3Q7eGZybS54ZnJtX3N0YXRlX2xvY2spOwogCX0KIAogb3V0OgotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiB4OwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7CkBAIC0yOTc2LDcgJiM0MzsyOTgzLDcgQEAgaW50IHhmcm1fdXNlcl9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbikKIAlpZiAoSVNfRVJSKGRhdGEpKQogCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKIAotCWlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpICZhbXA7JmFtcDsgaW5fY29tcGF0X3N5c2NhbGwoKSkgewogCQlzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7CiAKIAkJaWYgKCF4dHIpIHsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggNzFhNGI3Mjc4ZWJhOTIuLjYxZWI1ZGUzM2I4N2VlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMjQ4NSw5ICYjNDM7MjQ4NSw5IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpCiAJfQogCiAJdXAgPSBubG1zZ19kYXRhKG5saCk7Ci0JdXAtJmd0O2luID0gbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXTsKLQl1cC0mZ3Q7ZndkID0gbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF07Ci0JdXAtJmd0O291dCA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdOwomIzQzOwl1cC0mZ3Q7aW4gPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7CiYjNDM7CXVwLSZndDtmd2QgPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF0pOwomIzQzOwl1cC0mZ3Q7b3V0ID0gUkVBRF9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdKTsKIAogCW5sbXNnX2VuZChza2IsIG5saCk7CiAKQEAgLTI1MTEsMTMgJiM0MzsyNTExLDEzIEBAIHN0YXRpYyBpbnQgeGZybV9zZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlzdHJ1Y3QgeGZybV91c2VycG9saWN5X2RlZmF1bHQgKnVwID0gbmxtc2dfZGF0YShubGgpOwogCiAJaWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC0mZ3Q7aW4pKQotCQluZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dID0gdXAtJmd0O2luOwomIzQzOwkJV1JJVEVfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dLCB1cC0mZ3Q7aW4pOwogCiAJaWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC0mZ3Q7ZndkKSkKLQkJbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF0gPSB1cC0mZ3Q7ZndkOwomIzQzOwkJV1JJVEVfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSwgdXAtJmd0O2Z3ZCk7CiAKIAlpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLSZndDtvdXQpKQotCQluZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSA9IHVwLSZndDtvdXQ7CiYjNDM7CQlXUklURV9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdLCB1cC0mZ3Q7b3V0KTsKIAogCXJ0X2dlbmlkX2J1bXBfYWxsKG5ldCk7CiAKQEAgLTI1NDcsOSAmIzQzOzI1NDcsOSBAQCBzdGF0aWMgaW50IHhmcm1fZ2V0X2RlZmF1bHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJfQogCiAJcl91cCA9IG5sbXNnX2RhdGEocl9ubGgpOwotCXJfdXAtJmd0O2luID0gbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXTsKLQlyX3VwLSZndDtmd2QgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXTsKLQlyX3VwLSZndDtvdXQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXTsKJiM0MzsJcl91cC0mZ3Q7aW4gPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7CiYjNDM7CXJfdXAtJmd0O2Z3ZCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSk7CiYjNDM7CXJfdXAtJmd0O291dCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSk7CiAJbmxtc2dfZW5kKHJfc2tiLCByX25saCk7CiAKIAlyZXR1cm4gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcl9za2IsIHBvcnRpZCk7CkBAIC0zNDcyLDcgJiM0MzszNDcyLDcgQEAgc3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlpZiAoIW5ldGxpbmtfbmV0X2NhcGFibGUoc2tiLCBDQVBfTkVUX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpICZhbXA7JmFtcDsgaW5fY29tcGF0X3N5c2NhbGwoKSkgewogCQlzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7CiAKIAkJaWYgKCF4dHIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgWEZSTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzLCBtb3N0bHkgd2l0aGluIHRoZSBgbmV0L3hmcm0vYCwgYG5ldC9pcHY0L2AsIGBuZXQvaXB2Ni9gLCBhbmQgYG5ldC9rZXkvYCBkaXJlY3Rvcmllcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoZXNlIHNlZW0gdG8gYmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdGluZyB0aGUgWEZSTSAoSVBzZWMpIHN1YnN5c3RlbS4gR29vZCwgSSBsaWtlIHRoYXQ7IGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwsIG5vIGRvdWJ0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC4KCiogICBgaW5jbHVkZS9uZXQveGZybS5oYDogQm91bmRzIGNoZWNrcyBmb3IgYGFkZHJfbWF0Y2hgIGFuZCBgYWRkcjRfbWF0Y2hgIGFyZSBhIGdvb2QgdGhpbmcuIFByZXZlbnRpbmcgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aCBgcHJlZml4bGVuYCBpcyBhIHNpbXBsZSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBvZnRlbiBvdmVybG9va2VkLiBVc2luZyBgUkVBRF9PTkNFYCBmb3IgYG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRgIGFuZCBgbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0YCBzdWdnZXN0cyBwb3RlbnRpYWwgbG9ja2xlc3MgYWNjZXNzIG9wdGltaXphdGlvbiwgYW5kIGl0JiMzOTtzIG5pY2UgdG8gc2VlLgoqICAgYG5ldC9pcHY0L3hmcm00X2lucHV0LmNgIGFuZCBgbmV0L2lwdjYveGZybTZfaW5wdXQuY2A6IFJlbW92aW5nIHRoYXQgYGRldl9wdXRgIGluIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCBhbmQgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLi4uIEhtbSwgSSB3b25kZXIgYWJvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBgZGV2X3B1dGAuIElzIHRoaXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3IgcG90ZW50aWFsIGRvdWJsZS1mcmVlcz8gTmVlZHMgc29tZSBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgYnV0IHRoZSBsb2dpYyBtaWdodCBiZSBwcm9ibGVtYXRpYy4KKiAgIGBuZXQva2V5L2FmX2tleS5jYDogQWRkaW5nIGB4LSZndDtjYWxnLSZndDthbGdfa2V5X2xlbiA9IDA7YCBpbiBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgIGxvb2tzIGxpa2UgYSBrZXkgbGVuZ3RoIHplcm9pbmcgb3V0LiBJcyB0aGlzIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha2FnZSwgb3Igd2hhdD8KKiAgIGBuZXQveGZybS9lc3BpbnRjcC5jYDogUmVmYWN0b3JpbmcgYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgIHRvIHVzZSBgc2tfbXNnX2ZyZWVfcGFydGlhbGAgaXMgbGlrZWx5IGFuIGVmZmljaWVuY3kgZ2FpbiwgYXZvaWRpbmcgdGhlIGZ1bGwgc2tiIGZyZWUuCiogICBgbmV0L3hmcm0veGZybV9pbnB1dC5jYDogQWRqdXN0aW5nIGBkZXZfcHV0YCBhbmQgYHJjdV9yZWFkX2xvY2tgIGxvZ2ljIGluIGB4ZnJtX2lucHV0YCBpcyBpbnRlcmVzdGluZy4gVGhlIGByY3VfcmVhZGAgc3R1ZmYgbmVlZHMgY2FyZWZ1bCBhdHRlbnRpb247IFJDVSBpcyBhbHdheXMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY29udGVudGlvbi4KKiAgIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYDogQWRkaW5nIGZhbWlseSBjaGVjayBpbiBgeGZybV9zZWxlY3Rvcl9tYXRjaGAgaXMgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgbWF5YmUgc29tZXRoaW5nIG1pc3NlZCBvcmlnaW5hbGx5LCBhbmQgaXQmIzM5O3MgZ29vZCB0byBzZWUuIFRoZSBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGZvciBwb2xpY3kgY291bnRzIGFuZCBkZWZhdWx0cyBpcyBwcm9iYWJseSB0aGUgc2FtZSBhcyBgeGZybS5oYCwgbWFraW5nIHRoZSBhY2Nlc3Mgc2FmZXIuCiogICBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYDogYGxvY2tkZXBfYXNzZXJ0X2luX3NvZnRpcnEoKWAgaW4gYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCBpcyBhIGxvY2tkZXAgYWRkaXRpb24sIGFuZCByZW1vdmluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBzdWdnZXN0cyBhIGRpZmZlcmVudCBsb2NraW5nIHN0cmF0ZWd5LiBUaGUgYHNwaW5fbG9ja19iaGAgdG8gYHNwaW5fbG9ja2AgY2hhbmdlIG5lZWRzIGNvbnRleHQuIEFuZCB0aGF0IGBJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpYCBjaGVjayB0byBgaW5fY29tcGF0X3N5c2NhbGwoKWAgaXMgcmVsYXRlZCB0byB0aGUgY29tcGF0aWJpbGl0eSBmb3IgYWxpZ25tZW50LCBhbmQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGl0IHRvIGRldGVybWluZSBpdHMgbmVjZXNzaXR5IGhlcmUuCiogICBgbmV0L3hmcm0veGZybV91c2VyLmNgOiBNb3JlIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgdXNhZ2UgZm9yIHBvbGljeSBkZWZhdWx0cywgZ29vZC4gQW5kIHRoZSBzYW1lIGBJU19FTkFCTEVEYCBjaGVjayBhcyBpbiBgeGZybV9zdGF0ZS5jYCwgYW5kIGFnYWluLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGxvZ2ljLgoKQWxyaWdodCwgc28gdGhlIG1ham9yIGNoYW5nZSBpcyBYRlJNIChJUHNlYykuIFRpbWUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkga25vdyBgQ09ORklHX1hGUk1gIGVuYWJsZXMgdGhlIFhGUk0gY29yZS4gYENPTkZJR19YRlJNX0VTUElOVENQYCBpcyBvYnZpb3VzbHkgZm9yIGBlc3BpbnRjcC5jYC4gYENPTkZJR19ORVRfS0VZYCBoYW5kbGVzIGBuZXQva2V5L2FmX2tleS5jYC4gYG5ldC9pcHY0L3hmcm00X2lucHV0LmNgLi4uIHRoYXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBFU1AsIGJ1dCBJIHNob3VsZCBsb29rIGF0IGFsbCB0aGUgZGVwZW5kZW5jaWVzLiBgQ09ORklHX1hGUk1fVVNFUmAgY292ZXJzIGB4ZnJtX3VzZXIuY2AsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIGZpcmUgdXAgc29tZSBjb25maWcgdG9vbHMgYW5kIGdldCB0aGlzIHJpZ2h0LiBJIG5lZWQgdG8gYmUgc3VyZSBJIGFtIHRlc3RpbmcgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBYRlJNIE1ha2VmaWxlIGZvciBgZXNwaW50Y3BgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGBlc3BpbnRjcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIFhGUk0gcG9ydGlvbiBvZiB0aGUga2VybmVsLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG5ldC94ZnJtL2AgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIEl04oCZcyB0aGUgY2VudHJhbCBodWIgZm9yIGhvdyBYRlJNIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHNvIGl0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgZGlyZWN0aXZlcyByZWdhcmRpbmcgYW55IHNwZWNpZmljIHByb3RvY29sIGltcGxlbWVudGF0aW9ucyBsaWtlIGBlc3BpbnRjcGAuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciB0aGF0IHN0cmluZyB3aXRoaW4gdGhlIE1ha2VmaWxlIHRvIHNlZSB3aGF0IHBvcHMgdXAuIFRoaXMgYXBwcm9hY2ggd2lsbCBxdWlja2x5IHJldmVhbCBob3cgYGVzcGludGNwYCBpcyBpbnRlZ3JhdGVkIG9yIGRlZmluZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIHByb3ZpZGluZyB2YWx1YWJsZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgWEZSTSBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX3N0YXRlX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBFU1AgaW4gVENQIEVuY2Fwc3VsYXRpb24qKgoKQWxyaWdodCwgdGhlIHB1enpsZSBwaWVjZSBJIG5lZWQgdG8gbG9vayBhdCBoZXJlIGlzIGRlZmluaXRlbHkgYENPTkZJR19YRlJNX0VTUElOVENQYC4gVGhhdCYjMzk7cyBhIGtleSBzZXR0aW5nLiBJdCBtZWFucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgKEVTUCkgYW5kIGl0JiMzOTtzIGJlaW5nIHRyYW5zcG9ydGVkICp3aXRoaW4qIFRDUC4gTm93LCB3aGF0JiMzOTtzIHJlbGF0ZWQgdG8gdGhpcz8gSSBoYXZlIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSB3aWRlciBrZXJuZWwgc2VjdXJpdHkgYXJjaGl0ZWN0dXJlLgoKTGV0IG1lIHRoaW5rLi4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBuZXQva2V5L2FmX2tleS5jYD8gVGhhdCBzZWVtcyBsaWtlIGFuIG9idmlvdXMgcGxhY2UgdG8gY2hlY2sgZm9yIGFueSBob29rcyBvciBpbnRlcmFjdGlvbnMsIHNpbmNlIGl0IGRlYWxzIHdpdGgga2V5IG1hbmFnZW1lbnQgYW5kIHRoZSBjb3JlIHNlY3VyaXR5IGZyYW1ld29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgaW4gYGFmX2tleS5jYCBtaWdodCBiZSBpbnZvbHZlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzdHJ1Y3R1cmVzLCBvciBkYXRhIGZsb3dzIHRoYXQgcGVydGFpbiB0byB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIG1vZGlmaWVzIG9yIGFmZmVjdHMgYW55IG9mIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGtleSBoYW5kbGluZyBvciBpZiBpdCB1dGlsaXplcyBpdCBkaXJlY3RseS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggbW9kdWxlIHV0aWxpemVzIHdoaWNoIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIG9mIGJvdGggb2YgdGhvc2UgZmlsZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGV5IGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZl9rZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQva2V5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9rZXkvTWFrZWZpbGUtNS1cbm5ldC9rZXkvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0tFWSkgJiM0Mzs9IGFmX2tleS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgU2VjdXJpdHkgQ29udW5kcnVtcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBgQ09ORklHX05FVF9LRVlgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudCBoZXJlLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRoYXQgZW5hYmxlZC4gQnV0IGl0IGJlZ3MgdGhlIHF1ZXN0aW9uLCBpZiB0aGF0JiMzOTtzIHRoZSBiYXNlIHJlcXVpcmVtZW50LCBob3cgYXJlIHRoaW5ncyBiZWluZyBoYW5kbGVkLgoKTm93LCBteSBtaW5kIHNoaWZ0cyB0byBhIGNydWNpYWwgY29tcG9uZW50OiBgeGZybV91c2VyLmNgLiAgSSYjMzk7bSBhc2tpbmcgbXlzZWxmLCAqaG93KiBpcyB0aGlzIG1vZHVsZSBiZWluZyBlbXBsb3llZCBpbiB0aGUgcmVsZXZhbnQgdXNlIGNhc2U/IFdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGlzIGZpbGU/IElzIGB4ZnJtX3VzZXIuY2AgYmVpbmcgdXNlZCBhcyBleHBlY3RlZCBoZXJlPyBJcyBpdCBwcm9wZXJseSBpbnRlZ3JhdGluZyB3aXRoIHRoZSBrZXlpbmcgbWF0ZXJpYWw/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHN1YnRsZSBtaXNjb25maWd1cmF0aW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgc3RlbW1pbmcgZnJvbSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgQ09ORklHX05FVF9LRVlgIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBpbXBsZW1lbnRlZCBpbiB0aGF0IHVzZXItc3BhY2UgaW50ZXJmYWNlPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgaG93IGtleWluZyBtYXRlcmlhbCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGtleWluZyBzdWJzeXN0ZW0sIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZWZmZWN0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV91c2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX1hGUk1fQUxHTykgJiM0Mzs9IHhmcm1fYWxnby5vXG5uZXQveGZybS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfWEZSTV9VU0VSKSAmIzQzOz0geGZybV91c2VyLm9cbm5ldC94ZnJtL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19YRlJNX1VTRVJfQ09NUEFUKSAmIzQzOz0geGZybV9jb21wYXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBYRlJNIEtlcm5lbCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gKkNPTkZJR19YRlJNX1VTRVIqIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUuIEkga25vdyB0aGF0IG11Y2guIFRoaXMgaXMgYSBjb3JlIGJ1aWxkaW5nIGJsb2NrLiBOb3csIHdoZXJlIGFyZSB3ZSB3aXRoIHRoZSBpbnB1dCBwYXRoPyBMZXQgbWUgdGhpbmsuLi4gd2hhdCBhYm91dCAqeGZybV9pbnB1dC5jKj8gVGhhdCBmaWxlIGZlZWxzIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gYmUgY2VudHJhbCB0byB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gdGhleSBhcnJpdmUuIFRoYXQgZmlsZSBpcyBwcm9iYWJseSBrZXkgdG8gaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIHNldCB1cCBhbmQgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTU6XHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfWEZSTWAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSBmb3IgYW55IFhGUk0tcmVsYXRlZCBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0JiMzOTtzIGV4cGVjdGVkLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBmZWF0dXJlIEkmIzM5O20gd29ya2luZyB3aXRoLCBzbyBsZXQmIzM5O3MgY2hlY2sgb24gdGhlIGBDT05GSUdfWEZSTV9FU1BJTlRDUGAgb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW4gYG5ldC94ZnJtL0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gYG5ldC9pcHY0L0tjb25maWdgIHRvIHBpbiBkb3duIHByZWNpc2VseSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCBvdGhlciBvcHRpb25zIGl0IG1heSBkZXBlbmQgb24uIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlbHZpbmcgaW50byBYRlJNX0VTUElOVENQKioKClJpZ2h0LCBzbyBgWEZSTV9FU1BJTlRDUGAuLi4gYSBib29sZWFuLCBsaWtlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgY29udHJvbGxlZCBieSBzb21lIG90aGVyIHNldHRpbmcuIEkgc3VzcGVjdCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3NlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIGJhY2sgdGhlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZsYWcgaXMgZGVmaW5lZCBhbmQgaG93IGl0cyB2YWx1ZSBpcyBkZXRlcm1pbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrOyB3aGF0IGRvZXMgaXQgaW1wYWN0LCBhbmQgd2hhdCB0cmlnZ2VycyBpdHMgc2V0dGluZz8gVGhpcyBpc24mIzM5O3QganVzdCBhIHJhbmRvbSBib29sZWFuOyBpdCBoYXMgaW1wbGljYXRpb25zLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRob3NlIGltcGxpY2F0aW9ucyB0byBmdWxseSBjb21wcmVoZW5kIGl0cyBpbnRlbmRlZCBmdW5jdGlvbi4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgZW5jYXBzdWxhdGlvbiwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByb3RvY29scyBvciBtZWNoYW5pc21zIGl0JiMzOTtzIHdvcmtpbmcgd2l0aC4gVGltZSB0byBkaXNzZWN0IHRoZSBjb2RlYmFzZSBhbmQgZm9sbG93IHRoZSBicmVhZGNydW1icy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk1fRVNQSU5UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWc6Mzg3Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzg4LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTmV0d29yayBTZWN1cml0eSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIHVzZXItZmFjaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRVNQIGluIFRDUCBhcmUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBrZXkgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYENPTkZJR19ORVRfS0VZYCBvcHRpb24gaW4gdGhlIGBuZXQva2V5L0tjb25maWdgIGZpbGUuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgRVNQIG92ZXIgVENQIGZlYXR1cmVzIGludGVncmF0ZSB3aXRoaW4gdGhlIGxhcmdlciBuZXR3b3JrIHNlY3VyaXR5IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9LRVkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMDY9Y29uZmlnIFhGUk1fSVBDT01QXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMTEtXG5uZXQveGZybS9LY29uZmlnOjExMjpjb25maWcgTkVUX0tFWVxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtQRl9LRVkgc29ja2V0cyAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTEyNC1cbm5ldC94ZnJtL0tjb25maWc6MTI1OmNvbmZpZyBORVRfS0VZX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctMTI2LVx0Ym9vbCBcJiMzNDtQRl9LRVkgTUlHUkFURVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRlY2lwaGVyaW5nIHRoZSBDb25maWd1cmF0aW9uIENsdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IHRoaW5nIGhlcmUgc2VlbXMgdG8gYmUgYE5FVF9LRVlgLiBUaGF0JiMzOTtzIGxpa2VseSB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIGtleWluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZW50YWlscyBpbiB0ZXJtcyBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4gTGV0IG1lIHNlZSB3aGF0IGBDT05GSUdfWEZSTV9VU0VSYCBsb29rcyBsaWtlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgdGllcyBpbnRvIGhvdyB0aGlzIGBORVRfS0VZYCBpcyBzZXQuIFdoZXJlIGRvZXMgdGhpcyBnbyBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fVVNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTMxLVxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipYRlJNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBYRlJNX1VTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJpZ2h0IG5vdy4gVGhhdCBzZWVtcyB0byBiZSB0aGUga2V5IGZvciB1c2VyLXNwYWNlIGNvbnRyb2wsIHJpZ2h0PyBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoYXQgYENPTkZJR19YRlJNYCBpdHNlbGYgaXMgZW5hYmxlZC4gR290dGEgbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uYWwgWEZSTSBmcmFtZXdvcmsgaXMgZXZlbiB0aGVyZSBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGUgdXNlci1zcGFjZSBzcGVjaWZpY3MuIEl0JiMzOTtzIHRoZSBwcmUtcmVxdWlzaXRlLCByZWFsbHkuIEdvdHRhIHdhbGsgYmVmb3JlIEkgY2FuIHJ1biwgYW5kIGFsbCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTYzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBQb25kZXJpbmdzKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGBYRlJNYCBib29sLCBhbmQgbXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBtaXggYnkgZWl0aGVyIGBJTkVUX0VTUGAgb3IgcG9zc2libHkgdGhyb3VnaCBgWEZSTV9VU0VSYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVGAuIFRoYXQgc2V0dGluZyBvZnRlbiBiaXRlcyBtZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB1c2Vyc3BhY2UgYW5kIDY0LWJpdCBhbGlnbmVkIHN0cnVjdHVyZXMuIFRoZXJlIGNvdWxkIGJlIHNvbWUgaW50ZXJhY3Rpb24gdGhlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgYWxpZ25tZW50IGlzIGhhbmRsZWQgY29ycmVjdGx5IGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLCBvciBJJiMzOTttIGluIGZvciBhIHdvcmxkIG9mIHBhaW4gZG93biB0aGUgbGluZS4gVGhhdCYjMzk7cyBhIGtleSBwb3RlbnRpYWwgcGl0ZmFsbCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTMxNjY9Y29uZmlnIENPTVBBVFxuLS1cbmFyY2gveDg2L0tjb25maWctMzE2OS1cbmFyY2gveDg2L0tjb25maWc6MzE3MDpjb25maWcgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UXG5hcmNoL3g4Ni9LY29uZmlnLTMxNzEtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTI3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBhbmQgSW1wYWN0IG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSBzZWUgdGhpcyBpcyBjb250cm9sbGVkIGJ5IGEgYm9vbGVhbiwgbGlrZWx5IGdhdGVkIGJ5IGBDT01QQVRgLiBSaWdodCwgc28gdGhhdCBtZWFucyB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgYXJlOiBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGBORVRfS0VZYCwgYW5kIGBYRlJNX1VTRVJgLiBNYWtlcyBzZW5zZSBnaXZlbiB0aGUgbGlrZWx5IGludGVyYWN0aW9uIHdpdGggSVBTZWMgYW5kIHJlbGF0ZWQga2VybmVsIGZlYXR1cmVzLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCB0b3VjaGVzLiBMb29rcyBsaWtlIGl0IG1vZGlmaWVzIGEgZGVjZW50IGNodW5rIG9mIHRoZSBgeGZybWAgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0byBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYGFkZHJfbWF0Y2hgLCBgYWRkcjRfbWF0Y2hgLCBgX194ZnJtX2NoZWNrX25vcG9saWN5YCwgYW5kIGB4ZnJtX3JvdXRlX2ZvcndhcmRgLiBJdCBhbHNvIGluY2x1ZGVzIG1vZGlmaWNhdGlvbnMgdG8gY29yZSBmdW5jdGlvbnMgbGlrZSBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAsIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoYCwgYW5kIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAuIFRoZSBsaXN0IGdvZXMgb24sIHRvdWNoaW5nIGEgbG90IG9mIGZ1bmRhbWVudGFsIHBpZWNlcyBvZiB0aGUgeGZybSBzdGFjay4gSSYjMzk7bSBzZWVpbmcgc3R1ZmYgbGlrZSBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAsIGB4ZnJtX2lucHV0YCwgYHhmcm1fc2VsZWN0b3JfbWF0Y2hgLCBgeGZybV9zcGRfZ2V0aW5mb2AsIHBsdXMgYSBidW5jaCBvZiBwb2xpY3kgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgX194ZnJtX3BvbGljeV9saW5rYCwgYF9feGZybV9wb2xpY3lfdW5saW5rYCwgYW5kIG1vcmUuIFRoZXJlJiMzOTtzIGFsc28gYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAsIGBfX3hmcm1fcG9saWN5X2NoZWNrYCwgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCwgYW5kIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gZnVuY3Rpb25zOiBgeGZybV91c2VyX3BvbGljeWAsIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGFuZCBgeGZybV91c2VyX3Jjdl9tc2dgLgoKVGhhdCYjMzk7cyBhIGxvdCB0byBkaWdlc3QuIExldCBtZSBmaWx0ZXIgdGhpcyBsaXN0IGRvd24uIE9rYXksIGB4ZnJtX2lucHV0YCBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGggYW5kIGl0JiMzOTtzIGhlYXZpbHkgbW9kaWZpZWQgaGVyZSwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgZm9jdXMuIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgYXMgaXQgaXMgbGlrZWx5IGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24uIFRoZW4sIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgaXMgb24gdGhlIGludGVyZmFjZS4gQWxzbywgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGFuZCBgeGZybV91c2VyX3Jjdl9tc2dgIGFyZSBpbXBvcnRhbnQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgdGhpbmsgYHhmcm1fdXNlcl9wb2xpY3lgIGlzIGEgcG9pbnQgb2YgY29uY2VybiwgYW5kIGB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cGAgd2lsbCBiZSBpbXBvcnRhbnQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgb25lIG91dCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1faW5wdXRfc3RhdGVfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMTc1PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyMDAtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTIwMTpzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAyLVx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyNTItfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEyNTM6RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTI1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYCBpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2A6CgoqKkRlZXAgRGl2ZSBpbnRvIEVTUC1pbi1UQ1AmIzM5O3MgTG9ja2VkIFNlbmQgUGF0aCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBpbnRlcmVzdGluZyB0aGluZ3M6ICYjMzQ7RVNQLWluLVRDUCYjMzQ7IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIElQc2VjIHRyYWZmaWMgb3ZlciBUQ1AsIHdoaWNoIGJyaW5ncyB3aXRoIGl0IGEgd2hvbGUgc2xldyBvZiBjb25zaWRlcmF0aW9ucyBhcm91bmQgTVRVIG1hbmFnZW1lbnQsIHNlcXVlbmNpbmcsIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdHJhbnNwb3J0IGFuZCBzZWN1cml0eSBsYXllcnMuIFRoZSAmIzM0O3NlbmRza21zZyYjMzQ7IHBhcnQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UgYXJlIGluIHRoZSBwYXRoIG9mIHNlbmRpbmcgYSBzb2NrZXQgbWVzc2FnZSwgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGEgZGF0YSB0cmFuc2Zlci4gQW5kLCB0aGUgJiMzNDtsb2NrZWQmIzM0OyBwYXJ0IHN1Z2dlc3RzIHdlJiMzOTtyZSBvcGVyYXRpbmcgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiwgcG90ZW50aWFsbHkgcHJvdGVjdGVkIGJ5IGEgbXV0ZXggb3Igc3BpbmxvY2suIFRoaXMgaW1wbGllcyBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyBhcmUgYXQgcGxheSwgbWFraW5nIHRocmVhZCBzYWZldHkgYSBwcmltZSBjb25jZXJuLgoKTm93LCBteSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc3BlY2lmaWNzIG9mIGVuY2Fwc3VsYXRpbmcgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpIHBhY2tldHMgaW5zaWRlIFRDUC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBob3cgdGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzb3VyY2UgZGF0YSwgaG93IGl0IGNhbGN1bGF0ZXMgYW5kIGFkZHMgdGhlIG5lY2Vzc2FyeSBFU1AgaGVhZGVycywgaG93IGl0IHNldHMgdXAgdGhlIFRDUCBwYXlsb2FkLCBhbmQgaG93IGl0IGZpbmFsbHkgdHJhbnNtaXRzIHRoZSBkYXRhIG92ZXIgdGhlIG5ldHdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gbm90ZSBhbnkgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGZyYWdtZW50ZWQgRVNQIGRhdGFncmFtcyBvciByZWFzc2VtYmx5IGlmIG5lZWRlZC4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgWEZSTSAodGhlIElQc2VjIGZyYW1ld29yayksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbnRlcmZhY2Ugd2l0aCB0aGUgWEZSTSBzdWJzeXN0ZW0gdG8gaGFuZGxlIHRoZSBhY3R1YWwgRVNQIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGNvbnRlbnRpb24gcG9pbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24uIEFyZSB0aGVyZSBhbnkgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJsb2NrIG9yIGludHJvZHVjZSBsYXRlbmN5PyBBbmQgaG93IGlzIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgSVBzZWMgb3BlcmF0aW9ucz8KCk15IHBsYW4gaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uJiMzOTtzIGV4ZWN1dGlvbiB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBFU1AgYW5kIFRDUCBoZWFkZXIgbWFuaXB1bGF0aW9uIGhhcHBlbnMuIEnigJlsbCBrZWVwIGEgbG9va291dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoYXQgaGFwcGVucyBpZiBlbmNyeXB0aW9uIGZhaWxzLCBvciBpZiB0aGUgdHJhbnNtaXNzaW9uIGl0c2VsZiBmYWlscy4gT3ZlcmFsbCwgSSB3YW50IHRvIG1hcCBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBFU1AtaW4tVENQIGNvbW11bmljYXRpb24sIGFuZCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIG9wdGltaXphdGlvbiBvciBmdXJ0aGVyIHNjcnV0aW55LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYz0xODU9c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2tiX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0yMDUtXG5uZXQveGZybS9lc3BpbnRjcC5jOjIwNjpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yMDctXHRcdFx0XHQgICAgIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csIGludCBmbGFncylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTIzOD1zdGF0aWMgaW50IGVzcGludGNwX3B1c2hfbXNncyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTI1My1cdGVsc2Vcbm5ldC94ZnJtL2VzcGludGNwLmM6MjU0Olx0XHRlcnIgPSBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHNrLCBlbXNnLCBmbGFncyk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTI1NS1cdGlmIChlcnIgPT0gLUVBR0FJTikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc2NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgSVBzZWMgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMgSVBzZWMgaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyB0aGUga2VybmVsIHRyYW5zbGF0ZXMgYSBQRl9LRVkgbWVzc2FnZSBpbnRvIGFuIFhGUk0gc3RhdGUgY2hhbmdlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBzdGFydCB3aXRoIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAuIExldCYjMzk7cyBuYXZpZ2F0ZSB0byBgbmV0L2tleS9hZl9rZXkuY2AgYW5kIHRha2UgYSBsb29rLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIHRoZSByYXcgUEZfS0VZIG1lc3NhZ2VzIGFyZSB1bnBhY2tlZCBhbmQgdXNlZCB0byBjb25maWd1cmUgdGhlIHNlY3VyaXR5IGFzc29jaWF0aW9ucyBhbmQgcG9saWNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgWEZSTSAoZVh0ZXJuYWwgRmlyZXdhbGwgYW5kIFJvdXRpbmcgTWVjaGFuaXNtKSBmcmFtZXdvcmsuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIGtleSBleGNoYW5nZXMgYXJlIGludGVycHJldGVkIGFuZCBob3cgdGhlIGRhdGEgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGJ1aWxkIChvciBtb2RpZnkpIGEgc3RhdGUgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhpcyBjb2RlIHBhdGggLSB0aGVzZSBhcmUgb2Z0ZW4ga2V5IHRvIHVuZGVyc3RhbmRpbmcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZmtleV9tc2cyeGZybV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9rZXkvYWZfa2V5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2tleS9hZl9rZXkuYz0xMDY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnBma2V5X3hmcm1fc3RhdGUybXNnX2V4cGlyZShjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQva2V5L2FmX2tleS5jLTEwNzQtXG5uZXQva2V5L2FmX2tleS5jOjEwNzU6c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICogcGZrZXlfbXNnMnhmcm1fc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxubmV0L2tleS9hZl9rZXkuYy0xMDc2LVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBzYWRiX21zZyAqaGRyLFxuLS1cbm5ldC9rZXkvYWZfa2V5LmM9MTUxND1zdGF0aWMgaW50IHBma2V5X2FkZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzYWRiX21zZyAqaGRyLCB2b2lkICogY29uc3QgKmV4dF9oZHJzKVxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtMTUyMC1cbm5ldC9rZXkvYWZfa2V5LmM6MTUyMTpcdHggPSBwZmtleV9tc2cyeGZybV9zdGF0ZShuZXQsIGhkciwgZXh0X2hkcnMpO1xubmV0L2tleS9hZl9rZXkuYy0xNTIyLVx0aWYgKElTX0VSUih4KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8geGZybV9zZXRfZGVmYXVsdCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGB4ZnJtX3NldF9kZWZhdWx0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG5hdmlnYXRlIHN0cmFpZ2h0IHRvIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkZWZhdWx0cyBhcmUgYmVpbmcgaGFuZGxlZCBmcm9tIHRoZSB1c2VyIHNwYWNlIHBlcnNwZWN0aXZlLCB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIGludGVuZGVkIGZsb3cgaXMgYXMgZXhwZWN0ZWQuIFRoaXMgd2lsbCBnaXZlIGEgZ29vZCBncm91bmRpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGV4cGVjdGVkIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTI1MDE9c3RhdGljIGJvb2wgeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKF9fdTggcG9saWN5KVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MDYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTA3OnN0YXRpYyBpbnQgeGZybV9zZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MDgtXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzODM9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MTgtXHRbWEZSTV9NU0dfR0VUU1BESU5GTyAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9zcGRpbmZvICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0MTk6XHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjAtXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBTdWJzeXN0ZW0mIzM5O3MgRGVmYXVsdCBQb2xpY3kgUmV0cmlldmFsKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgdGhlIGRlZmF1bHQgcG9saWN5IHdpdGhpbiB0aGUgWEZSTSAoSVBzZWMpIGZyYW1ld29yay4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIHRoaXMgZGVmYXVsdCBwb2xpY3kuIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgYXMgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHJlc2lkZSBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRgIHNvdW5kcyBsaWtlIGEgcHJvbWlzaW5nIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgZGVmYXVsdCBwb2xpY3kgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9nZXRfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTI1MDc9c3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTI4OnN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MjktXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzODM9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MTktXHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0MjA6XHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBVc2VyIFJlY2VpdmUgTWVzc2FnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHVzZXItc3BhY2UgWEZSTSBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgeGZybV91c2VyX3Jjdl9tc2dgIHdpdGhpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBYRlJNIHRvb2xzIGFuZCB0aGUga2VybmVsJiMzOTtzIFhGUk0gc3Vic3lzdGVtIGZvciBpbmJvdW5kIGRhdGEuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIHNvY2tldCByZWFkIGFuZCB1bnBhY2tzIHRoZSB1c2VyLXByb3ZpZGVkIGRhdGEuIEkgZXhwZWN0IGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciB2YXJpb3VzIFhGUk0gb3BlcmF0aW9ucywgbGlrZSBzZXR0aW5nIHVwIHBvbGljaWVzLCBzdGF0ZXMsIGFuZCBtYXliZSBldmVuIGtleSBtYW5hZ2VtZW50LiBJJiMzOTttIGFudGljaXBhdGluZyB0byBzZWUgYXJndW1lbnQgdmFsaWRhdGlvbiwgc2VjdXJpdHkgY2hlY2tzLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBkaXNwYXRjaCB0byB0aGUgcmVsZXZhbnQgaGFuZGxlcnMgYmFzZWQgb24gdGhlIG1lc3NhZ2UgdHlwZSDigJMgd2hldGhlciBpdCYjMzk7cyBhIHBvbGljeSBjcmVhdGlvbiwgc3RhdGUgYWRkaXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBUaW1lIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZGVhbGluZyB3aXRoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTM0MjM9c3RhdGljIGludCB4ZnJtX3JlamVjdF91bnVzZWRfYXR0cihpbnQgdHlwZSwgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0NTQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDU1OnN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDU2LVx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1NDI9c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDYtXHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NDc6XHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcdTAwMjZ4ZnJtX3VzZXJfcmN2X21zZyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgSW1wbGVtZW50YXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB1c2VyLXNwYWNlIHBvbGljaWVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgdGhlIGB4ZnJtX3VzZXJfcG9saWN5YCBmdW5jdGlvbi4gSXQmIzM5O3MgaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGhlYWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlci1zdXBwbGllZCBwb2xpY3kgZW50cmllcyBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIFhGUk0gc3RhdGUgbWFuYWdlbWVudC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5OiBIb3cgYXJlIHRoZXNlIHBvbGljaWVzIHZhbGlkYXRlZD8gSG93IGFyZSB0aGV5IHN0b3JlZD8gSG93IGRvZXMgdGhlIHN5c3RlbSByZXNvbHZlIHRoZW0gdG8gYXBwbHkgc2VjdXJpdHkgYXNzb2NpYXRpb25zPyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgcmVnYXJkaW5nIHBvdGVudGlhbCBjb25mbGljdHMgb3IgbWFsaWNpb3VzIHVzZXIgaW5wdXQ/IFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcG9saWN5IGltcGxlbWVudGF0aW9uIHdpbGwgYmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXJfcG9saWN5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz0yOTYyPUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fdW5yZWdpc3Rlcl90cmFuc2xhdG9yKTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2NC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTY1OmludCB4ZnJtX3VzZXJfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2Ni17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjEtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjMwMjI6RVhQT1JUX1NZTUJPTCh4ZnJtX3VzZXJfcG9saWN5KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ0MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBJUHY0IFhGUk0gaW5wdXQgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0cmFuc3BvcnQgbGF5ZXIgcHJvY2Vzc2luZyB3cmFwcyB1cCBpbiB0aGUgY29udGV4dCBvZiBJUHNlYy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAgbG9jYXRlZCBpbiBgbmV0L2lwdjQveGZybTRfaW5wdXQuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGZvY3VzaW5nIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgWEZSTSBmcmFtZXdvcmsgYW5kIHRoZSBldmVudHVhbCBkZWxpdmVyeSBvciBkcm9wIG9mIHRoZSBwYWNrZXQuIEdvdHRhIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycm9yIHBhdGhzLCBvZiBjb3Vyc2UuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgdHJhbnNwb3J0IGhlYWRlcnMgZ2V0IGhhbmRsZWQgYWZ0ZXIgSVBzZWMgcHJvY2Vzc2luZyBhbmQgd2hhdCB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIG91dGNvbWVzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTRfdHJhbnNwb3J0X2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3hmcm00X2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQveGZybTRfaW5wdXQuYz0yOT1zdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNDgtXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjQ5OmludCB4ZnJtNF90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElQdjYgVHJhbnNmb3JtYXRpb24gRW5naW5lKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGUgaXNzdWUgaXMgcHJvYmFibHkgaW4gdGhlIGZpbmFsaXphdGlvbiBvZiB0aGUgSVB2NiB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaGAgd2l0aGluIGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUga2V5IHBpZWNlIGluIGNsZWFuaW5nIHVwIGFuZCBmaW5hbGl6aW5nIGEgcHJvY2Vzc2VkIElQdjYgcGFja2V0LCBzcGVjaWZpY2FsbHkgYWZ0ZXIgaXQmIzM5O3MgYmVlbiB0aHJvdWdoIHZhcmlvdXMgWEZSTSB0cmFuc2Zvcm1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZGF0YSBwYXRoIOKAkyB3aGF0IGl0IGRvZXMgd2l0aCB0aGUgc2tiLCBhbnkgYXNzb2NpYXRlZCBzdGF0ZXMsIGFuZCBob3cgaXQgaGFuZHMgdGhpbmdzIG9mZiB0byB0aGUgbmV4dCBsYXllciBvciB0aGUgdXNlciBzcGFjZS4gSSYjMzk7bGwgYmUgbG9va2luZyBjYXJlZnVsbHkgYXQgdGhlIGVycm9yIGhhbmRsaW5nIGhlcmUsIHRvby4gQ291bGQgaXQgYmUgYSByZXNvdXJjZSBjbGVhbnVwIHByb2JsZW0gb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gaG93IHRoZSBza2IgaXMgYmVpbmcgaGFuZGxlZCBwb3N0LXRyYW5zZm9ybT8gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNl90cmFuc3BvcnRfZmluaXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYveGZybTZfaW5wdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jPTMwPUVYUE9SVF9TWU1CT0woeGZybTZfcmN2X3NwaSk7XG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTMxLVxubmV0L2lwdjYveGZybTZfaW5wdXQuYzozMjpzdGF0aWMgaW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2gyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjYveGZybTZfaW5wdXQuYy0zMy1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYveGZybTZfaW5wdXQuYy00Mi1cbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6NDM6aW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKVxubmV0L2lwdjYveGZybTZfaW5wdXQuYy00NC17XG4tLVxubmV0L2lwdjYveGZybTZfaW5wdXQuYy03Mi1cdFx0ZGV2X25ldChkZXYpLCBOVUxMLCBza2IsIGRldiwgTlVMTCxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6NzM6XHRcdHhmcm02X3RyYW5zcG9ydF9maW5pc2gyKTtcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtNzQtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzODIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gSW5wdXQgUGF0aCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgWEZSTSBpc3N1ZS4gVGhlIG1vc3QgbGlrZWx5IGVudHJ5IHBvaW50IGZvciB0cm91Ymxlc2hvb3RpbmcgdGhpcyBwYXJ0aWN1bGFyIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhlIGB4ZnJtX2lucHV0YCBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdG8gYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUga2VybmVsIHByb2Nlc3NlcyBpbmJvdW5kIFhGUk0gdHJhZmZpYywgc28gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgd2l0aGluIGB4ZnJtX2lucHV0YCBpcyBjcnVjaWFsLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB0cmFjZSBob3cgdGhlIHBhY2tldHMgYXJlIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1faW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pbnB1dC5jLTItLypcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzozOiAqIHhmcm1faW5wdXQuY1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTQtICpcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9MzQ9c3RydWN0IHhmcm1fdHJhbnNfY2Ige1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00Ni1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo0NzpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1faW5wdXRfYWZpbmZvX2xvY2spO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjQ4OnN0YXRpYyBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gY29uc3QgX19yY3UgKnhmcm1faW5wdXRfYWZpbmZvWzJdW0FGX0lORVQ2ICYjNDM7IDFdO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTQ5LVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYz01Mz1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHhmcm1fdHJhbnNfdGFza2xldCwgeGZybV90cmFuc190YXNrbGV0KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01NC1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo1NTppbnQgeGZybV9pbnB1dF9yZWdpc3Rlcl9hZmluZm8oY29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICphZmluZm8pXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTYte1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy02MS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo2MjpcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX2lucHV0X2FmaW5mb19sb2NrKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo2MzpcdGlmICh1bmxpa2VseSh4ZnJtX2lucHV0X2FmaW5mb1thZmluZm8tXHUwMDNlaXNfaXBpcF1bYWZpbmZvLVx1MDAzZWZhbWlseV0pKVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTY0LVx0XHRlcnIgPSAtRUVYSVNUO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTY1LVx0ZWxzZVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjY2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVx1MDAzZWlzX2lwaXBdW2FmaW5mby1cdTAwM2VmYW1pbHldLCBhZmluZm8pO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjY3Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9pbnB1dF9hZmluZm9fbG9jayk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjgtXHRyZXR1cm4gZXJyO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTY5LX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo3MDpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfcmVnaXN0ZXJfYWZpbmZvKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03MS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo3MjppbnQgeGZybV9pbnB1dF91bnJlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gKmFmaW5mbylcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03My17XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc1LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc2Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1faW5wdXRfYWZpbmZvX2xvY2spO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjc3Olx0aWYgKGxpa2VseSh4ZnJtX2lucHV0X2FmaW5mb1thZmluZm8tXHUwMDNlaXNfaXBpcF1bYWZpbmZvLVx1MDAzZWZhbWlseV0pKSB7XG5uZXQveGZybS94ZnJtX2lucHV0LmM6Nzg6XHRcdGNvbnN0IHN0cnVjdCB4ZnJtX2lucHV0X2FmaW5mbyAqY3VyO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTc5LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjgwOlx0XHRjdXIgPSByY3VfYWNjZXNzX3BvaW50ZXIoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVx1MDAzZWlzX2lwaXBdW2FmaW5mby1cdTAwM2VmYW1pbHldKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MS1cdFx0aWYgKHVubGlrZWx5KGN1ciAhPSBhZmluZm8pKVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04My1cdFx0ZWxzZVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0Olx0XHRcdFJDVV9JTklUX1BPSU5URVIoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVx1MDAzZWlzX2lwaXBdW2FmaW5mby1cdTAwM2VmYW1pbHldLCBOVUxMKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NS1cdH1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NjpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1faW5wdXRfYWZpbmZvX2xvY2spO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTg3LVx0c3luY2hyb25pemVfcmN1KCk7XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg5LX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo5MDpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfdW5yZWdpc3Rlcl9hZmluZm8pO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTkxLVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gKnhmcm1faW5wdXRfZ2V0X2FmaW5mbyh1OCBmYW1pbHksIGJvb2wgaXNfaXBpcClcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy05My17XG5uZXQveGZybS94ZnJtX2lucHV0LmM6OTQ6XHRjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gKmFmaW5mbztcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy05NS1cbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtOTktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQveGZybS94ZnJtX2lucHV0LmM6MTAwOlx0YWZpbmZvID0gcmN1X2RlcmVmZXJlbmNlKHhmcm1faW5wdXRfYWZpbmZvW2lzX2lwaXBdW2ZhbWlseV0pO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTEwMS1cdGlmICh1bmxpa2VseSghYWZpbmZvKSlcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9MTA2PXN0YXRpYyBpbnQgeGZybV9yY3ZfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGZhbWlseSwgdTggcHJvdG9jb2wsXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTEwOS1cdGJvb2wgaXNfaXBpcCA9IChwcm90b2NvbCA9PSBJUFBST1RPX0lQSVAgfHwgcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzoxMTA6XHRjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gKmFmaW5mbztcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMTEtXHRpbnQgcmV0O1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTExMi1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzoxMTM6XHRhZmluZm8gPSB4ZnJtX2lucHV0X2dldF9hZmluZm8oZmFtaWx5LCBpc19pcGlwKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMTQtXHRpZiAoIWFmaW5mbylcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9NDM1PXN0YXRpYyBpbnQgeGZybV9pbm5lcl9tb2RlX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00NjUtICovXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDY2OmludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00Njcte1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00ODYtXHRcdFx0XHQgICAgICBlbmNhcF90eXBlID09IFVEUF9FTkNBUF9FU1BJTlVEUCkpKSB7XG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDg3Olx0XHR4ID0geGZybV9pbnB1dF9zdGF0ZShza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTQ4OC1cbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTkyLVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjU5MzpcdFx0eCA9IHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01OTQtXHRcdGlmICh4ID09IE5VTEwpIHtcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzgyLX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo3ODM6RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03ODQtXG5uZXQveGZybS94ZnJtX2lucHV0LmM6Nzg1OmludCB4ZnJtX2lucHV0X3Jlc3VtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcilcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03ODYte1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4NzpcdHJldHVybiB4ZnJtX2lucHV0KHNrYiwgbmV4dGhkciwgMCwgLTEpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTc4OC19XG5uZXQveGZybS94ZnJtX2lucHV0LmM6Nzg5OkVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9yZXN1bWUpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTc5MC1cbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9ODQ2PUVYUE9SVF9TWU1CT0woeGZybV90cmFuc19xdWV1ZSk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtODQ3LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0ODp2b2lkIF9faW5pdCB4ZnJtX2lucHV0X2luaXQodm9pZClcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY5OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFBvaW50cyBmb3IgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFuZCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgaW4gdGhlIFhGUk0gY29kZSB0aGF0IGFyZSBiZWluZyBtb2RpZmllZC4gYHhmcm1faW5wdXRgIGlzIGNhbGxlZCBieSBgeGZybTRfcmN2YCBhbmQgYHhmcm02X3JjdmAsIGFuZCBpdCYjMzk7cyBleHBvcnRlZCwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgaW50ZXJlc3QuIEkmIzM5O2xsIGluY2x1ZGUgaXQgaW4gRm9jdXNTeW1ib2xzLCB0aG91Z2ggSSB3b25kZXIgaWYgaXQmIzM5O3MgdG9vIGJyb2FkOyB0aGUgcGF0Y2ggZG9lcyBtb2RpZnkgaXQgZGlyZWN0bHksIHdoaWNoIG1ha2VzIGl0IGEgc3Ryb25nIGNvbnRlbmRlci4KCmB4ZnJtX3VzZXJfcmN2X21zZ2AgaXMgZGVmaW5pdGVseSBjcnVjaWFsOyBpdCYjMzk7cyB0aGUgbmV0bGluayBlbnRyeSBwb2ludCwgc28gYW55IGNoYW5nZXMgdGhlcmUgd291bGQgYmUgc2lnbmlmaWNhbnQuIEkmIzM5O20gYWRkaW5nIHRoYXQgdG8gdGhlIGxpc3QuIEkmIzM5O20gYWxzbyBwdXR0aW5nIGB4ZnJtX3NldF9kZWZhdWx0YCBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRgIG9uIHRoZSBsaXN0OyB0aGV5JiMzOTtyZSBsaWtlbHkgdG91Y2hlZC4gVGhlbiB0aGVyZSYjMzk7cyBgeGZybV91c2VyX3BvbGljeWAsIHRoZSBzb2NrZXQgb3B0aW9uIGhhbmRsZXIsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIHRyYWNrIG9mLiBJJiMzOTtsbCBhZGQgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCwgYXMgd2VsbC4KCkkmIzM5O20gaW5jbHVkaW5nIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYC4gRmluYWxseSwgSSYjMzk7bSBub3RpbmcgYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgIGFuZCBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaGAsIGFzIHRoZXkgbGlrZWx5IGFyZSBpbnZvbHZlZC4KClJpZ2h0LCBzbyB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGB4ZnJtX3VzZXJfcG9saWN5YCwgSSYjMzk7bGwgY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIGZvciBzdGFydGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV91c2VyX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9Mjk2Mj1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX3VucmVnaXN0ZXJfdHJhbnNsYXRvcik7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5NjQtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjk2NTppbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5NjYte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDIxLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMDIyOkVYUE9SVF9TWU1CT0woeGZybV91c2VyX3BvbGljeSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMzAyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBYRlJNIElucHV0IFN0YXRlIExvb2t1cCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cGAgZnVuY3Rpb24gd2l0aGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgKnNob3VsZCogaGFwcGVuLCBpbiB0ZXJtcyBvZiByZXNvbHZpbmcgaW5ib3VuZCBzZWN1cml0eSBwb2xpY3kgbG9va3Vwcy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIGhvdyB0cmFmZmljIGlzIGJlaW5nIHByb2Nlc3NlZCBhbmQgSSB3YW50IHRvIHZlcmlmeSB0aGUgbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IGFzc29jaWF0aW9uIGZvciBpbmNvbWluZyBwYWNrZXRzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaGFuZGxpbmcgdGhlIG1hdGNoaW5nIG9mIGluY29taW5nIHBhY2tldHMgdG8gZXhpc3RpbmcgWEZSTSBzdGF0ZXMuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBrZXkgZGVyaXZhdGlvbiBwcm9jZXNzLiBUaGUgbG9va3VwIGxpa2VseSBjb25zaWRlcnMgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBwcm90b2NvbCwgU1BJLCBhbmQgb3RoZXIgcmVsZXZhbnQgcGFja2V0IGhlYWRlcnMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBob3cgaXQgaGFuZGxlcyB3aWxkY2FyZGluZywgaWYgYW55LiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgZ2V0IHV0aWxpemVkLCBwYXJ0aWN1bGFybHkgdGhvc2UgaW52b2x2aW5nIHRoZSBYRlJNIHN0YXRlIGFuZCBpdHMgYXNzb2NpYXRlZCBrZXlzLiBUaGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmFyaW91cyBoYXNoIHRhYmxlcyBvciBvdGhlciBsb29rdXAgbWVjaGFuaXNtcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLCBsb2NraW5nLCBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBsb29rdXAgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBib3R0bGVuZWNrcyBpbiB0aGUgb3ZlcmFsbCBmbG93LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBib3RoIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvbGljeSBtaXNjb25maWd1cmF0aW9uIGFzIHRoYXQgd291bGQgbGlrZWx5IGhhdmUgYSBoYW5kIGluIHRoaXMgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1faW5wdXRfc3RhdGVfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMTc1PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyMDAtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTIwMTpzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAyLVx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyNTItfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEyNTM6RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTI1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwOTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBQb2xpY3kgTWF0Y2hpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBpZiBhIHBhY2tldCBtYXRjaGVzIGEgcGFydGljdWxhciBJUHNlYyBwb2xpY3kuIFRoZSBmaXJzdCBwbGFjZSB0byBzdGFydCBsb29raW5nLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCBpcyBsaWtlbHkgdGhlIGNvcmUgbWF0Y2hpbmcgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUuLi4gQWgsIHllcywgYHhmcm1fc2VsZWN0b3JfbWF0Y2hgIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4uIFRoYXQgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgcHJldHR5IGV4cGxpY2l0IOKAkyAmIzM0O3NlbGVjdG9yIG1hdGNoJiMzNDsg4oCTIGl0IHNob3VsZCBiZSB0aGUgY29yZSBvZiB0aGUgc2VsZWN0aW9uIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBzZWxlY3RvcnMgYXJlIGRlZmluZWQgYW5kIGhvdyBwYWNrZXRzIGFyZSBjb21wYXJlZCBhZ2FpbnN0IHRoZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBhZGRyZXNzIG1hdGNoaW5nLCBwcm90b2NvbCBjaGVja3MsIGFuZCBwb3J0IGNvbXBhcmlzb25zIGluIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VsZWN0b3JfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjMwPV9feGZybTZfc2VsZWN0b3JfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI0MS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjQyOmJvb2wgeGZybV9zZWxlY3Rvcl9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yNDMtXHRcdFx0IHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE5NjQ9c3RhdGljIGludCB4ZnJtX3BvbGljeV9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NzctXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5Nzg6XHRtYXRjaCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBmbCwgZmFtaWx5KTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk3OS1cdGlmIChtYXRjaClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIyMzQ9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9za19wb2xpY3lfbG9va3VwKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IGRpcixcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyNTEtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyNTI6XHRcdG1hdGNoID0geGZybV9zZWxlY3Rvcl9tYXRjaChcdTAwMjZwb2wtXHUwMDNlc2VsZWN0b3IsIGZsLCBmYW1pbHkpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjUzLVx0XHRpZiAobWF0Y2gpIHtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2MDA9c3RhdGljIGJvb2wgeGZybV9zZWxlY3Rvcl9pbm5lcl9pY21wX21hdGNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIHNob3J0IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2MTEtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM2MTI6XHRcdHJldCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBcdTAwMjZmbDEsIGZhbWlseSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2MTMtXHR9XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjcwPWludCBfX3hmcm1fcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3MTctXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM3MTg6XHRcdFx0aWYgKCF4ZnJtX3NlbGVjdG9yX21hdGNoKFx1MDAyNngtXHUwMDNlc2VsLCBcdTAwMjZmbCwgZmFtaWx5KSkge1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNzE5LVx0XHRcdFx0cmV0ID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgQ2hlY2sqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgWEZSTSBwb2xpY3kgbWVjaGFuaXNtIGlzIGFjdHVhbGx5IGVuZm9yY2VkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUgYF9feGZybV9wb2xpY3lfY2hlY2tgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBjcnVjaWFsIHBvbGljeSB2YWxpZGF0aW9uIGxvZ2ljLCBhbmQgSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgcGFja2V0JiMzOTtzIGF0dHJpYnV0ZXMgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIHNlY3VyaXR5IHBvbGljaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgaXQgdXNlcywgaG93IGl0IGRldGVybWluZXMgdGhlIG1hdGNoaW5nIHBvbGljeSwgd2hhdCBpdCBkb2VzIHdpdGggdGhlIG1hdGNoZWQgcG9saWN5LCBhbmQgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIHJldHVybiBjb2RlcyBvciBzdGF0dXMgdmFsdWVzIHRoYXQgY291bGQgYmUgcmV0dXJuZWQgYmFzZWQgb24gdGhlIHBvbGljeSBldmFsdWF0aW9uIHJlc3VsdC4gRnJvbSB0aGVyZSBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgY2FsbHMgdG8gcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194ZnJtX3BvbGljeV9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjQxPWRzdF9lbnRyeSAqeGZybV9vdXRfZndkX2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2NjktXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM2NzA6aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNjcxLVx0XHRcdHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4MjYtXHRcdFx0LyogVGhpcyBwb2xpY3kgdGVtcGxhdGUgd2FzIGFscmVhZHkgY2hlY2tlZCBieSBIV1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzozODI3Olx0XHRcdCAqIGFuZCBzZWNwYXRoIHdhcyByZW1vdmVkIGluIF9feGZybV9wb2xpY3lfY2hlY2syLlxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zODI4LVx0XHRcdCAqL1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg2OS19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM4NzA6RVhQT1JUX1NZTUJPTChfX3hmcm1fcG9saWN5X2NoZWNrKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXI6CgoqKkRpdmluZyBpbnRvIGB4ZnJtX2xvb2t1cF93aXRoX2lmaWRgKioKCk9rYXksIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBob3cgdGhlIFhGUk0gc3Vic3lzdGVtIGhhbmRsZXMgcG9saWN5IGxvb2t1cHMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCBpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AuIFRoYXQgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdCBwbGF5cyBhIGtleSByb2xlIGluIGZpbmRpbmcgdGhlIHJpZ2h0IHNlY3VyaXR5IHBvbGljeSwgYW5kIHRoZSAmIzM0O2lmaWQmIzM0OyBwYXJ0IGxpa2VseSBoYXMgdG8gZG8gd2l0aCBpbnRlcmZhY2UgaWRlbnRpZmljYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGluIGEgY29tcGxleCBuZXR3b3JraW5nIGVudmlyb25tZW50LiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIGFuIGludGVycGxheSBiZXR3ZWVuIHRoZSByb3V0aW5nIHRhYmxlIGluZm9ybWF0aW9uIGFuZCBpbnRlcmZhY2Utc3BlY2lmaWMgYXR0cmlidXRlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IGZhY3RvcnMgaXQgdGFrZXMgaW50byBjb25zaWRlcmF0aW9uIHdoZW4gbWFraW5nIHRoZXNlIHBvbGljeSBsb29rdXBzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9sb29rdXBfd2l0aF9pZmlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jPTMxNDE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm1ha2VfYmxhY2tob2xlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMxNjUtICovXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjMxNjY6c3RydWN0IGRzdF9lbnRyeSAqeGZybV9sb29rdXBfd2l0aF9pZmlkKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzE2Ny1cdFx0XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzE4LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMxOTpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwX3dpdGhfaWZpZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMjAtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMzI2PXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzI5LXtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMzMDpcdHJldHVybiB4ZnJtX2xvb2t1cF93aXRoX2lmaWQobmV0LCBkc3Rfb3JpZywgZmwsIHNrLCBmbGFncywgMCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE1MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgRGV0YWlscyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIHdvcmtzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgeGZybV9zcGRfZ2V0aW5mb2AuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0IGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYC4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gdGhhdCBmdW5jdGlvbiBwcm92aWRlcyBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gcG9saWN5IGxvb2t1cHMsIGVzcGVjaWFsbHkgYXMgaXQgcGVydGFpbnMgdG8gdGhlIFNlY3VyaXR5IFBvbGljeSBEYXRhYmFzZSAoU1BEKS4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyBpbmZvcm1hdGlvbiBleHRyYWN0aW9uIGZvciBwb2xpY3kgZGV0YWlscy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIGRpZmZlcmVudCBwcm90b2NvbCB0eXBlcyBhbmQgc2VjdXJpdHkgYXNzb2NpYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24gaXMga2V5IHRvIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgd29ya2luZyBhcyBpdCBzaG91bGQgYW5kIGhlbHBpbmcgcGlucG9pbnQgYW55IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zcGRfZ2V0aW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz03MDQ9c3RhdGljIGlubGluZSBpbnQgeGZybV9ieWlkeF9zaG91bGRfcmVzaXplKHN0cnVjdCBuZXQgKm5ldCwgaW50IHRvdGFsKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNzE0LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo3MTU6dm9pZCB4ZnJtX3NwZF9nZXRpbmZvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1rX3NwZGluZm8gKnNpKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MTYte1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNzI1LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NzI2OkVYUE9SVF9TWU1CT0woeGZybV9zcGRfZ2V0aW5mbyk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgTGlua2FnZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFhGUk0gcG9saWNpZXMgYXJlIGxpbmtlZCwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgYF9feGZybV9wb2xpY3lfbGlua2AgZnVuY3Rpb24uIEl0JiMzOTtzIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBiZS4gSSBleHBlY3QgaXQmIzM5O2xsIGdpdmUgbWUgdGhlIGxvdy1kb3duIG9uIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCBsaW5raW5nIHRoZXNlIHBvbGljaWVzIOKAkyBwcm9iYWJseSBkZWFsaW5nIHdpdGggaG93IHRoZXkmIzM5O3JlIGluc2VydGVkIGludG8gdmFyaW91cyBkYXRhIHN0cnVjdHVyZXMsIGhvdyByZWZlcmVuY2VzIGFyZSBtYW5hZ2VkLCBhbmQgYWxsIHRoZSBjcml0aWNhbCBjb25jdXJyZW5jeSBhc3BlY3RzLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcG9saWN5IGFzc29jaWF0aW9uIHByb2Nlc3MsIHNvIHRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4gdGhlIGRlZXAtZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194ZnJtX3BvbGljeV9saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jPTE4OD1zdGF0aWMgdm9pZCB4ZnJtX3BvbGljeV9xdWV1ZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTg5LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTA6c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTkxLXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKl9feGZybV9wb2xpY3lfdW5saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTU3Mj1pbnQgeGZybV9wb2xpY3lfaW5zZXJ0KGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LCBpbnQgZXhjbClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE1OTItXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE1OTM6XHRfX3hmcm1fcG9saWN5X2xpbmsocG9saWN5LCBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNTk0LVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjI5MT1zdGF0aWMgdTMyIHhmcm1fZ2VuX3BvcyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzEwLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMzExOnN0YXRpYyB2b2lkIF9feGZybV9wb2xpY3lfbGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjMxMi17XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzQ4PXN0YXRpYyB2b2lkIHhmcm1fc2tfcG9saWN5X2xpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNDkte1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMzUwOlx0X194ZnJtX3BvbGljeV9saW5rKHBvbCwgWEZSTV9QT0xJQ1lfTUFYICYjNDM7IGRpcik7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgVW5saW5rIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBfX3hmcm1fcG9saWN5X3VubGlua2AgZnVuY3Rpb24uIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgIGltbWVkaWF0ZWx5LiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1bmxpbmtpbmcgcG9saWNpZXMgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGNsZWFudXAgYW5kIHJlbW92YWwgb2Ygc2VjdXJpdHkgcG9saWNpZXMuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IElQc2VjIHdvcmtzIHVuZGVyIHRoZSBob29kIGFuZCB0byBxdWlja2x5IGZpbmQgd2hlcmUgYSBwb3RlbnRpYWwgYnVnIGlzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNvZGUgdGhhdCBtYW5hZ2VzIHRoZSBwb2xpY3kgdGFibGUgZW50cmllcywgYW55IHJlZmVyZW5jZSBjb3VudGluZyBvciBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgYWN0dWFsIHJlbW92YWwgb2YgdGhlIHBvbGljeSBmcm9tIHRoZSBzeXN0ZW0mIzM5O3MgcG9saWN5IGRhdGFiYXNlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBkYXRhIHN0cnVjdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hmcm1fcG9saWN5X3VubGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTA9c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTkxOnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKl9feGZybV9wb2xpY3lfdW5saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTItXHRcdFx0XHRcdFx0aW50IGRpcik7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNTcyPWludCB4ZnJtX3BvbGljeV9pbnNlcnQoaW50IGRpciwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksIGludCBleGNsKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYwMi1cdFx0eGZybV9wb2xpY3lfcmVxdWV1ZShkZWxwb2wsIHBvbGljeSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE2MDM6XHRcdF9feGZybV9wb2xpY3lfdW5saW5rKGRlbHBvbCwgZGlyKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYwNC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE2NDU9eGZybV9wb2xpY3lfYnlzZWxfY3R4KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywgdTMyIGlmX2lkLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTY5OS1cdFx0XHR9XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE3MDA6XHRcdFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNzAxLVx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNzE1PXhmcm1fcG9saWN5X2J5aWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1MzIgaWZfaWQsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNzM5LVx0XHRcdFx0fVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNzQwOlx0XHRcdFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNzQxLVx0XHRcdH1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE4MTI9aW50IHhmcm1fcG9saWN5X2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSwgYm9vbCB0YXNrX3ZhbGlkKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTgzMi1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTgzMzpcdFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODM0LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3BvbGljeV9sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE4NTE9aW50IHhmcm1fZGV2X3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODcyLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxODczOlx0XHRfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE4NzQtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fcG9saWN5X2xvY2spO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjMxMT1zdGF0aWMgdm9pZCBfX3hmcm1fcG9saWN5X2xpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzI3LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMzI4OnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKl9feGZybV9wb2xpY3lfdW5saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzI5LVx0XHRcdFx0XHRcdGludCBkaXIpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzUzPXN0YXRpYyB2b2lkIHhmcm1fc2tfcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM1NC17XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIzNTU6XHRfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIFhGUk1fUE9MSUNZX01BWCAmIzQzOyBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzU2LX1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIzNTg9aW50IHhmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNjItXHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfbG9jayk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIzNjM6XHRwb2wgPSBfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNjQtXHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3BvbGljeV9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIEZvY3VzOiBYRlJNIFBvbGljeSBhbmQgSG90IFBhdGhzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgWEZSTSBwb2xpY3kgZnVuY3Rpb25zIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHRoZXkgaGF2ZS4gSXQgbG9va3MgbGlrZSBgeGZybV9wb2xpY3lfaW5zZXJ0YCwgYHhmcm1fcG9saWN5X2RlbGV0ZWAsIGFuZCBgeGZybV9wb2xpY3lfZmx1c2hgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmcm9tIHRoZSB1c2VyIHNwYWNlLCBhcyB0aGV5IGNhbGwgdGhlIGludGVybmFsIGxpbmthZ2UgZnVuY3Rpb25zIGBfX3hmcm1fcG9saWN5X2xpbmtgIGFuZCBgX194ZnJtX3BvbGljeV91bmxpbmtgLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGB4ZnJtX3BvbGljeV9pbnNlcnRgIGFuZCBgeGZybV9wb2xpY3lfZGVsZXRlYCBmb3Igbm93LgoKTm93LCBsZXQgbWUgbGF5IG91dCB0aGUgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQ6IGB4ZnJtX2lucHV0YCwgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGB4ZnJtX3VzZXJfcG9saWN5YCwgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCwgYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgLCBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAsIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoYCwgYHhmcm1fcG9saWN5X2luc2VydGAsIGB4ZnJtX3BvbGljeV9kZWxldGVgLCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCwgYF9feGZybV9wb2xpY3lfY2hlY2tgLCBhbmQgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYC4KCkFoLCBidXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBEYW1uISBPa2F5LCBgeGZybV9pbnB1dGAsIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCwgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCwgYF9feGZybV9wb2xpY3lfY2hlY2tgLCBhbmQgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCwgYW5kIGV2ZW4gYHhmcm1fc2VsZWN0b3JfbWF0Y2hgIGFyZSBhbGwgZGVmaW5pdGVseSBob3QgcGF0aCwgc28gdGhleSYjMzk7cmUgb3V0LgoKVGhhdCBsZWF2ZXM6IGB4ZnJtX3VzZXJfcmN2X21zZ2AsIGB4ZnJtX3NldF9kZWZhdWx0YCwgYHhmcm1fZ2V0X2RlZmF1bHRgLCBgeGZybV91c2VyX3BvbGljeWAsIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAsIGB4ZnJtX3BvbGljeV9pbnNlcnRgLCBhbmQgYHhmcm1fcG9saWN5X2RlbGV0ZWAuCgpXYWl0IGEgbWludXRlLCBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAuLi5pdCAqaXMqIG1vZGlmaWVkLCBidXQgaXMgaXQgYSBob3QgcGF0aD8gSXQmIzM5O3MgY2FsbGVkIGZvciBldmVyeSBzaW5nbGUgc2tiIHNlbnQgb3ZlciBlc3BpbnRjcC4gWWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGhvdCBwYXRoLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFuIGFsdGVybmF0aXZlIGluIHRoZSBFU1AvVENQIGNvZGUuIFBlcmhhcHMgYGVzcGludGNwX3B1c2hfbXNnc2Agb3IgYGVzcGludGNwX3NlbmRtc2dgIGFyZSBiZXR0ZXIgcG9pbnRzIHRvIGxvb2sgYXQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBlc3BpbnRjcF9zZW5kbXNnYCBpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcGludGNwX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9Mjk5PUVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3B1c2hfc2tiKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMzAwLVxubmV0L3hmcm0vZXNwaW50Y3AuYzozMDE6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC94ZnJtL2VzcGludGNwLmMtMzAyLXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTU0NT1zdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTUxLVx0bWVtY3B5KGVzcGludGNwX29wcywgb3JpZ19vcHMsIHNpemVvZihzdHJ1Y3QgcHJvdG9fb3BzKSk7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU1MjpcdGVzcGludGNwX3Byb3QtXHUwMDNlc2VuZG1zZyA9IGVzcGludGNwX3NlbmRtc2c7XG5uZXQveGZybS9lc3BpbnRjcC5jLTU1My1cdGVzcGludGNwX3Byb3QtXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTI3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIElQc2VjIEZ1bmN0aW9uIEluY2x1c2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoaWNoIElQc2VjLXJlbGF0ZWQgZnVuY3Rpb25zIHRvIGluY2x1ZGUuIFRoZSBpbml0aWFsIHByb21wdCBtZW50aW9uZWQgYGVzcGludGNwX3NlbmRtc2dgLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgaW4gdGhlIG1peC4gQnV0IHdoYXQgYWJvdXQgdGhlIG90aGVyIGNydWNpYWwgZnVuY3Rpb25zPyBgeGZybV9pbnB1dGAgaW1tZWRpYXRlbHkgY29tZXMgdG8gbWluZDsgaXQmIzM5O3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIElQc2VjIGlucHV0IHByb2Nlc3NpbmcgYW5kIEkga25vdyBpdCYjMzk7cyBiZWVuIGhlYXZpbHkgbW9kaWZpZWQuIE9uIHRoZSBvbmUgaGFuZCwgSSBuZWVkIHRvIHN0aWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgYW5kIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RzIGZyb20gc2tld2luZywgYW5kIGB4ZnJtX2lucHV0YCAqaXMqIGEgaG90LXBhdGggZnVuY3Rpb24gZm9yIElQc2VjLgoKQnV0IGhvbGQgb24sIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBidWdzIHdpdGhpbiBgeGZybV9pbnB1dGDigJRkZXZfcHV0IGFuZCByY3VfcmVhZF9sb2Nr4oCUc28gZXhjbHVkaW5nIGl0IG1pZ2h0IGJlIGEgbWlzdGFrZS4gUGVyaGFwcyBgeGZybV9yY3ZgIHdvdWxkIGJlIGEgYmV0dGVyIGNob2ljZSBhcyBhIHJlbGF0ZWQsIGxlc3MgaG90LXBhdGgsIGZ1bmN0aW9uLCBpZiBJIGNhbiBmaW5kIGEgcmVsZXZhbnQgY29ubmVjdGlvbi4KCk9rYXksIGxldOKAmXMgcmV0aGluay4gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGB4ZnJtX3VzZXJfcmN2X21zZ2AsIGB4ZnJtX3NldF9kZWZhdWx0YCwgYW5kIGB4ZnJtX2dldF9kZWZhdWx0YOKAlHRoZXkgc2VlbSByZWxldmFudCB0byBjb25maWd1cmF0aW9uIGFuZCByZXRyaWV2YWwuIGB4ZnJtX3VzZXJfcG9saWN5YCBhbmQgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCBhcmUgZGVmaW5pdGVseSBpbiwgZ2l2ZW4gdGhlaXIgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gQW5kIG9mIGNvdXJzZSwgdGhlIGluaXRpYWwgbWVudGlvbiBvZiBgZXNwaW50Y3Bfc2VuZG1zZ2AuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGF0IGB4ZnJtX3NwZF9nZXRpbmZvYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHhmcm1fZ2V0X3NwZGluZm9gLCBzbyBpdCBtaWdodCBiZSB1c2VmdWwgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9nZXRfc3BkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTE2Njc9c3RhdGljIGludCB4ZnJtX3NldF9zcGRpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE3MjAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzIxOnN0YXRpYyBpbnQgeGZybV9nZXRfc3BkaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE3MjItXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDE3LVx0XHRcdFx0XHRcdCAgIC5ubGFfbWF4ID0gWEZSTUFfU1BEX01BWCB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQxODpcdFtYRlJNX01TR19HRVRTUERJTkZPICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X3NwZGluZm8gICB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQxOS1cdFtYRlJNX01TR19TRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fc2V0X2RlZmF1bHQgICB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA0NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgUG9saWN5IERhdGFiYXNlIFVwZGF0ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgdGhlIElQc2VjIFNQRCBsb29rdXAgaXMgY292ZXJlZCwgc28gSSYjMzk7bGwgYmUgaW5jbHVkaW5nIGB4ZnJtX2dldF9zcGRpbmZvYCBpbiBteSBhbmFseXNpcy4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIGxpbmsgYmV0d2VlbiB0aGUgcG9saWN5IGRhdGFiYXNlIGFuZCB0aGUgWEZSTSBzdWJzeXN0ZW0sIHNvIHRoYXQmIzM5O3Mgb2J2aW91c2x5IGtleS4KCk5vdywgd2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBhdCBob3cgdGhvc2UgcG9saWNpZXMgYXJlIGFjdHVhbGx5ICphZGRlZCo/IEkmIzM5O20gdGhpbmtpbmcgdGhlIGBwZmtleV9hZGRgIGZ1bmN0aW9uIGluIGBuZXQva2V5L2FmX2tleS5jYCBpcyBnb2luZyB0byBiZSB0aGUgbWVhdCBvZiB0aGUgbWF0dGVyLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3b3JrcyBmb3IgYWRkaW5nIHRoZXNlIHJ1bGVzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24gdG8gdHJhY2UgaG93IHRoZSBuZXcgcG9saWN5IGdldHMgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1bHRpbWF0ZWx5IGluc3RhbGxlZCBpbiB0aGUga2VybmVsJiMzOTtzIGRhdGEgc3RydWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgbGlmZWN5Y2xlIGlzIGNyaXRpY2FsLCBzbyBgcGZrZXlfYWRkYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bma2V5X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9rZXkvYWZfa2V5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2tleS9hZl9rZXkuYz0xNDkwPXN0YXRpYyBpbnQga2V5X25vdGlmeV9zYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtMTUxMy1cbm5ldC9rZXkvYWZfa2V5LmM6MTUxNDpzdGF0aWMgaW50IHBma2V5X2FkZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzYWRiX21zZyAqaGRyLCB2b2lkICogY29uc3QgKmV4dF9oZHJzKVxubmV0L2tleS9hZl9rZXkuYy0xNTE1LXtcbi0tXG5uZXQva2V5L2FmX2tleS5jPTI4MjI9c3RhdGljIGNvbnN0IHBma2V5X2hhbmRsZXIgcGZrZXlfZnVuY3NbU0FEQl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2tleS9hZl9rZXkuYy0yODI0LVx0W1NBREJfR0VUU1BJXVx0XHQ9IHBma2V5X2dldHNwaSxcbm5ldC9rZXkvYWZfa2V5LmM6MjgyNTpcdFtTQURCX1VQREFURV1cdFx0PSBwZmtleV9hZGQsXG5uZXQva2V5L2FmX2tleS5jOjI4MjY6XHRbU0FEQl9BRERdXHRcdD0gcGZrZXlfYWRkLFxubmV0L2tleS9hZl9rZXkuYy0yODI3LVx0W1NBREJfREVMRVRFXVx0XHQ9IHBma2V5X2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NDQKCQkJCQkJCW91dHB1dDogMTg3CgkJCQkJCQl0aG91Z2h0czogNzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBlbGVtZW50cyBvZiB0aGlzIFhGUk0gcGF0Y2guIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB3aGF0IEkgc2VlLCBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgYHBma2V5X2FkZGAsIGFuZCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgY3JpdGljYWwgZnVuY3Rpb25zOiBgeGZybV91c2VyX3Jjdl9tc2dgLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYHhmcm1fdXNlcl9wb2xpY3lgLCBhbmQgYHBma2V5X2FkZGAsIGBlc3BpbnRjcF9zZW5kbXNnYCwgYHhmcm1fZ2V0X3NwZGluZm9gLiBUaG9zZSBhcmUgdGhlIHByaW1hcnkgc3ltYm9scyBJJiMzOTttIHdhdGNoaW5nLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBJIHNlZSB0aGF0IGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYE5FVF9LRVlgLCBhbmQgYFhGUk1fVVNFUmAgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGRpcmVjdGx5IHJlbGV2YW50IGhlcmUsIGFuZCB0aGV5JiMzOTtsbCBuZWVkIGNhcmVmdWwgZXhhbWluYXRpb24uIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucywgbGlrZSBgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVGAsIHdoaWNoIGlzIGdlbmVyaWMgYW5kIHVzdWFsbHkgZmluZSBvbiB4ODZfNjQ7IEkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSBpdC4gVGhlIGBDT05GSUdfWEZSTV9FU1BJTlRDUGAgb3B0aW9uLCBpcyBzZWxlY3RlZCBieSBgSU5FVF9FU1BJTlRDUGAgYW5kIGBJTkVUNl9FU1BJTlRDUGAsIHRoYXQgbG9va3MgcmlnaHQuIEFuZCBJIGtub3cgYENPTkZJR19ORVRfS0VZYCBpcyBgTkVUX0tFWWAgYW5kIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBgWEZSTV9VU0VSYC4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGFkZCB0aGF0IGBDT05GSUdfWEZSTWAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCwgaW5jbHVkaW5nIGBJTkVUX0VTUGAsIGBJTkVUX0FIYCwgYElORVRfSVBDT01QYCwgYW5kIGBYRlJNX1VTRVJgLiBTbywgZm9yIG15IGRvY3VtZW50YXRpb24gSSB3aWxsIGxpc3QgYElORVRfRVNQSU5UQ1BgLCBgSU5FVDZfRVNQSU5UQ1BgLCBgTkVUX0tFWWAsIGFuZCBgWEZSTV9VU0VSYCBhcyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLgoKTm93LCBhIHF1aWNrIGZpbGUgcmV2aWV3IG9mIHRoZSBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIHRvIGFzc2VzcyBwb3RlbnRpYWwgaW1wYWN0LiBJIHNlZSBjaGFuZ2VzIGluIGBpbmNsdWRlL25ldC94ZnJtLmhgIHJlbGF0aW5nIHRvIGFkZHJlc3MgbWF0Y2hpbmcgKGBhZGRyX21hdGNoYCwgYGFkZHI0X21hdGNoYCksIHBvbGljeSBjaGVja2luZyAoYF9feGZybV9jaGVja19ub3BvbGljeWApLCBhbmQgcm91dGluZyAoYHhmcm1fcm91dGVfZm9yd2FyZGApLiBUaGVuLCBpbnB1dCBoYW5kbGluZyBpbiBgeGZybTRfaW5wdXQuY2AgYW5kIGB4ZnJtNl9pbnB1dC5jYCB3aXRoIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCBhbmQgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLiBLZXkgbWFuYWdlbWVudCB3aXRoIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAgaW4gYG5ldC9rZXkvYWZfa2V5LmNgLiBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAgaXMgaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBJbnB1dCBwcm9jZXNzaW5nIGFuZCBwb2xpY3kgaGFuZGxpbmcgaW4gYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AgKGB4ZnJtX2lucHV0YCkgYW5kIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCAoYHhmcm1fc2VsZWN0b3JfbWF0Y2hgLCBgeGZybV9zcGRfZ2V0aW5mb2AsIHBvbGljeSBsaW5raW5nL3VubGlua2luZywgbG9va3VwLCBhbmQgY2hlY2tpbmcpLiBgeGZybV9pbnB1dF9zdGF0ZV9sb29rdXBgIGFuZCBgeGZybV91c2VyX3BvbGljeWAgYXJlIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBGaW5hbGx5LCBgbmV0L3hmcm0veGZybV91c2VyLmNgIHdpdGggYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYW5kIGB4ZnJtX3VzZXJfcmN2X21zZ2AuCgpDb25zaWRlcmluZyBhbGwgb2YgdGhpcywgdGhlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gVGhleSB0b3VjaCBjb3JlIElQc2VjIGxvZ2ljIGFuZCBhZGRyZXNzIGJ1Z3MgbGlrZSBib3VuZHMgY2hlY2tzLCBkYXRhIHJhY2VzIGluIHBvbGljeSBtYW5hZ2VtZW50LCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBtaXNzaW5nIGxvY2tkZXAgY29uc2lkZXJhdGlvbnMsIGFuZCBjb21wYXQgc3lzY2FsbCBjaGVja3MuIFRoaXMgaW5kaWNhdGVzIHRoYXQgZnV6emluZyBpcyBoaWdobHkgd2FycmFudGVkLiBUaGUgY2hhbmdlcyBtb2RpZnkgY3JpdGljYWwgcGF0aHMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCBhbmQgcG90ZW50aWFsbHkgcmVhY2hhYmxlLCBzbyB0aG9yb3VnaCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgYSBwcmlvcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7TkVUX0tFWSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX3NldF9kZWZhdWx0JiMzNDssCiAgICAmIzM0O3hmcm1fZ2V0X2RlZmF1bHQmIzM0OywKICAgICYjMzQ7eGZybV91c2VyX3BvbGljeSYjMzQ7LAogICAgJiMzNDtwZmtleV9hZGQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9zcGRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgWEZSTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBib3VuZHMgY2hlY2tzIGZvciBhZGRyZXNzIG1hdGNoaW5nLCBmaXhpbmcgZGF0YSByYWNlcyBpbiBwb2xpY3kgY291bnRzL2RlZmF1bHRzLCBhZGp1c3RpbmcgZGV2IHJlZmNvdW50aW5nIGluIHhmcm1faW5wdXQsIGFuZCByZWZhY3RvcmluZyBlc3BpbnRjcCBtZXNzYWdlIHNlbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIElQc2VjIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O05FVF9LRVkmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV91c2VyX3Jjdl9tc2cmIzM0OywKICAgICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9kZWZhdWx0JiMzNDssCiAgICAmIzM0O3hmcm1fdXNlcl9wb2xpY3kmIzM0OywKICAgICYjMzQ7cGZrZXlfYWRkJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7eGZybV9nZXRfc3BkaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFhGUk0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYm91bmRzIGNoZWNrcyBmb3IgYWRkcmVzcyBtYXRjaGluZywgZml4aW5nIGRhdGEgcmFjZXMgaW4gcG9saWN5IGNvdW50cy9kZWZhdWx0cywgYWRqdXN0aW5nIGRldiByZWZjb3VudGluZyBpbiB4ZnJtX2lucHV0LCBhbmQgcmVmYWN0b3JpbmcgZXNwaW50Y3AgbWVzc2FnZSBzZW5kaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBJUHNlYyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjQ1LjA1OTUzNzEwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NjQ4Njc1NTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiLFxuICAgIFwiTkVUX0tFWVwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV91c2VyX3Jjdl9tc2dcIixcbiAgICBcInhmcm1fc2V0X2RlZmF1bHRcIixcbiAgICBcInhmcm1fZ2V0X2RlZmF1bHRcIixcbiAgICBcInhmcm1fdXNlcl9wb2xpY3lcIixcbiAgICBcInBma2V5X2FkZFwiLFxuICAgIFwiZXNwaW50Y3Bfc2VuZG1zZ1wiLFxuICAgIFwieGZybV9nZXRfc3BkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgWEZSTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBib3VuZHMgY2hlY2tzIGZvciBhZGRyZXNzIG1hdGNoaW5nLCBmaXhpbmcgZGF0YSByYWNlcyBpbiBwb2xpY3kgY291bnRzL2RlZmF1bHRzLCBhZGp1c3RpbmcgZGV2IHJlZmNvdW50aW5nIGluIHhmcm1faW5wdXQsIGFuZCByZWZhY3RvcmluZyBlc3BpbnRjcCBtZXNzYWdlIHNlbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIElQc2VjIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNTo0NS4wNTk1NDM2MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NTYyNTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY2NWVkMjZjZTEwYjhhMGJlNjcwZDlkODEwNDUwYTMwZDljYmVhNjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDg6MTU6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oXFxuaW5kZXggODc0NDA5MTI3ZTI5MjEuLmY4YzkwOWIwZjBjMzRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaFxcbisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaFxcbkBAIC05NDMsNiArOTQzLDkgQEAgc3RhdGljIGlubGluZSBib29sIGFkZHJfbWF0Y2goY29uc3Qgdm9pZCAqdG9rZW4xLCBjb25zdCB2b2lkICp0b2tlbjIsXFxuIFxcdHVuc2lnbmVkIGludCBwZHc7XFxuIFxcdHVuc2lnbmVkIGludCBwYmk7XFxuIFxcbitcXHRpZiAocHJlZml4bGVuIFxcdTAwM2UgMTI4KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRwZHcgPSBwcmVmaXhsZW4gXFx1MDAzZVxcdTAwM2UgNTtcXHQgIC8qIG51bSBvZiB3aG9sZSB1MzIgaW4gcHJlZml4ICovXFxuIFxcdHBiaSA9IHByZWZpeGxlbiBcXHUwMDI2ICAweDFmOyAgLyogbnVtIG9mIGJpdHMgaW4gaW5jb21wbGV0ZSB1MzIgaW4gcHJlZml4ICovXFxuIFxcbkBAIC05NjcsNiArOTcwLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGRyNF9tYXRjaChfX2JlMzIgYTEsIF9fYmUzMiBhMiwgdTggcHJlZml4bGVuKVxcbiBcXHQvKiBDOTkgNi41LjcgKDMpOiB1MzIgXFx1MDAzY1xcdTAwM2MgMzIgaXMgdW5kZWZpbmVkIGJlaGF2aW91ciAqL1xcbiBcXHRpZiAoc2l6ZW9mKGxvbmcpID09IDQgXFx1MDAyNlxcdTAwMjYgcHJlZml4bGVuID09IDApXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHByZWZpeGxlbiBcXHUwMDNlIDMyKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRyZXR1cm4gISgoYTEgXiBhMikgXFx1MDAyNiBodG9ubCh+MFVMIFxcdTAwM2NcXHUwMDNjICgzMiAtIHByZWZpeGxlbikpKTtcXG4gfVxcbiBcXG5AQCAtMTI1MCw4ICsxMjU3LDggQEAgaW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKiwgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gc3RhdGljIGlubGluZSBib29sIF9feGZybV9jaGVja19ub3BvbGljeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdCBpbnQgZGlyKVxcbiB7XFxuLVxcdGlmICghbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdIFxcdTAwMjZcXHUwMDI2ICFzZWNwYXRoX2V4aXN0cyhza2IpKVxcbi1cXHRcXHRyZXR1cm4gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0gPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVDtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdKSBcXHUwMDI2XFx1MDAyNiAhc2VjcGF0aF9leGlzdHMoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVDtcXG4gXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0xMzUxLDggKzEzNTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCB4ZnJtX3JvdXRlX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiBcXG4tXFx0aWYgKCFuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0gXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQpXFxuK1xcdGlmICghUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRyZXR1cm4gKHNrYl9kc3Qoc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBEU1RfTk9YRlJNKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xcbmluZGV4IGMyZWFjODQ0YmNkYjRlLi5mNmYyYThlZjNmODg0NyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xcbkBAIC03Niw4ICs3Niw2IEBAIGludCB4ZnJtNF90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcXG4gXFx0TkZfSE9PSyhORlBST1RPX0lQVjQsIE5GX0lORVRfUFJFX1JPVVRJTkcsXFxuIFxcdFxcdGRldl9uZXQoZGV2KSwgTlVMTCwgc2tiLCBkZXYsIE5VTEwsXFxuIFxcdFxcdHhmcm00X3Jjdl9lbmNhcF9maW5pc2gpO1xcbi1cXHRpZiAoYXN5bmMpXFxuLVxcdFxcdGRldl9wdXQoZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuaW5kZXggNjk5YTAwMWFjMTY2MjkuLjg5ZDA0NDNiNTMwNzMyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmNcXG4rKysgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuQEAgLTcxLDggKzcxLDYgQEAgaW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKVxcbiBcXHRORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9QUkVfUk9VVElORyxcXG4gXFx0XFx0ZGV2X25ldChkZXYpLCBOVUxMLCBza2IsIGRldiwgTlVMTCxcXG4gXFx0XFx0eGZybTZfdHJhbnNwb3J0X2ZpbmlzaDIpO1xcbi1cXHRpZiAoYXN5bmMpXFxuLVxcdFxcdGRldl9wdXQoZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jXFxuaW5kZXggOWNmZmVlZjE4Y2Q5MWMuLjMyMTZmODk3YTMwNWUwIDEwMDY0NFxcbi0tLSBhL25ldC9rZXkvYWZfa2V5LmNcXG4rKysgYi9uZXQva2V5L2FmX2tleS5jXFxuQEAgLTEyMTgsNiArMTIxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqIHBma2V5X21zZzJ4ZnJtX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0c3RyY3B5KHgtXFx1MDAzZWNhbGctXFx1MDAzZWFsZ19uYW1lLCBhLVxcdTAwM2VuYW1lKTtcXG4rXFx0XFx0XFx0eC1cXHUwMDNlY2FsZy1cXHUwMDNlYWxnX2tleV9sZW4gPSAwO1xcbiBcXHRcXHRcXHR4LVxcdTAwM2Vwcm9wcy5jYWxnbyA9IHNhLVxcdTAwM2VzYWRiX3NhX2VuY3J5cHQ7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGludCBrZXlzaXplID0gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmNcXG5pbmRleCBkOTAzNTU0NjM3NWViYS4uMzc0ZTFiOTY0NDM4MzkgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcXG5AQCAtMjEyLDQzICsyMTIsMjMgQEAgc3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0c3RydWN0IHNrX21zZyAqc2ttc2cgPSBcXHUwMDI2ZW1zZy1cXHUwMDNlc2ttc2c7XFxuIFxcdGJvb2wgbW9yZSA9IGZsYWdzIFxcdTAwMjYgTVNHX01PUkU7XFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuLVxcdGludCBkb25lID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHNnID0gXFx1MDAyNnNrbXNnLVxcdTAwM2VzZy5kYXRhW3NrbXNnLVxcdTAwM2VzZy5zdGFydF07XFxuIFxcdGRvIHtcXG4gXFx0XFx0c3RydWN0IGJpb192ZWMgYnZlYztcXG4tXFx0XFx0c2l6ZV90IHNpemUgPSBzZy1cXHUwMDNlbGVuZ3RoIC0gZW1zZy1cXHUwMDNlb2Zmc2V0O1xcbi1cXHRcXHRpbnQgb2Zmc2V0ID0gc2ctXFx1MDAzZW9mZnNldCArIGVtc2ctXFx1MDAzZW9mZnNldDtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnA7XFxuLVxcbi1cXHRcXHRlbXNnLVxcdTAwM2VvZmZzZXQgPSAwO1xcbiBcXG4rXFx0XFx0c2cgPSBcXHUwMDI2c2ttc2ctXFx1MDAzZXNnLmRhdGFbc2ttc2ctXFx1MDAzZXNnLnN0YXJ0XTtcXG4gXFx0XFx0aWYgKHNnX2lzX2xhc3Qoc2cpIFxcdTAwMjZcXHUwMDI2ICFtb3JlKVxcbiBcXHRcXHRcXHRtc2doZHIubXNnX2ZsYWdzIFxcdTAwMjY9IH5NU0dfTU9SRTtcXG4gXFxuLVxcdFxcdHAgPSBzZ19wYWdlKHNnKTtcXG4tcmV0cnk6XFxuLVxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XFxuLVxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFxcdTAwMjZidmVjLCAxLCBzaXplKTtcXG4tXFx0XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnaGRyLCBzaXplKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0ZW1zZy1cXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0IC0gc2ctXFx1MDAzZW9mZnNldDtcXG4tXFx0XFx0XFx0c2ttc2ctXFx1MDAzZXNnLnN0YXJ0ICs9IGRvbmU7XFxuK1xcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHNnX3BhZ2Uoc2cpLCBzZy1cXHUwMDNlbGVuZ3RoLCBzZy1cXHUwMDNlb2Zmc2V0KTtcXG4rXFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2bXNnaGRyLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgXFx1MDAyNmJ2ZWMsIDEsIHNnLVxcdTAwM2VsZW5ndGgpO1xcbitcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNnLVxcdTAwM2VsZW5ndGgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKHJldCAhPSBzaXplKSB7XFxuLVxcdFxcdFxcdG9mZnNldCArPSByZXQ7XFxuLVxcdFxcdFxcdHNpemUgLT0gcmV0O1xcbi1cXHRcXHRcXHRnb3RvIHJldHJ5O1xcbi1cXHRcXHR9XFxuIFxcbi1cXHRcXHRkb25lKys7XFxuLVxcdFxcdHB1dF9wYWdlKHApO1xcbi1cXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnLVxcdTAwM2VsZW5ndGgpO1xcbi1cXHRcXHRzZyA9IHNnX25leHQoc2cpO1xcbi1cXHR9IHdoaWxlIChzZyk7XFxuK1xcdFxcdHNrX21zZ19mcmVlX3BhcnRpYWwoc2ssIHNrbXNnLCByZXQpO1xcbitcXHR9IHdoaWxlIChza21zZy1cXHUwMDNlc2cuc2l6ZSk7XFxuIFxcbiBcXHRtZW1zZXQoZW1zZywgMCwgc2l6ZW9mKCplbXNnKSk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcXG5pbmRleCBlNGMyY2QyNDkzNmQzZi4uZWVjYWIzMzdiZDBhNzkgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm87XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIFxcdGludCBlcnI7XFxuIFxcdF9fYmUzMiBzZXE7XFxuIFxcdF9fYmUzMiBzZXFfaGk7XFxuQEAgLTQ5Myw3ICs0OTQsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVJTlZBTElEKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChlbmNhcF90eXBlID09IC0xKVxcbi1cXHRcXHRcXHRcXHRkZXZfcHV0KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiBcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTY1NSwxNiArNjU2LDE2IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFxuIFxcdFxcdGlmICghY3J5cHRvX2RvbmUpIHtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRcXHRkZXZfaG9sZChza2ItXFx1MDAzZWRldik7XFxuK1xcdFxcdFxcdGRldl9ob2xkKGRldik7XFxuIFxcbiBcXHRcXHRcXHRuZXh0aGRyID0geC1cXHUwMDNldHlwZS1cXHUwMDNlaW5wdXQoeCwgc2tiKTtcXG4gXFx0XFx0XFx0aWYgKG5leHRoZHIgPT0gLUVJTlBST0dSRVNTKSB7XFxuIFxcdFxcdFxcdFxcdGlmIChhc3luYylcXG4tXFx0XFx0XFx0XFx0XFx0ZGV2X3B1dChza2ItXFx1MDAzZWRldik7XFxuK1xcdFxcdFxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGRldl9wdXQoc2tiLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2eC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdH1cXG4gcmVzdW1lOlxcbkBAIC02OTksNyArNzAwLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbiBcXHRcXHRlcnIgPSB4ZnJtX2lubmVyX21vZGVfaW5wdXQoeCwgc2tiKTtcXG4gXFx0XFx0aWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpIHtcXG4gXFx0XFx0XFx0aWYgKGFzeW5jKVxcbi1cXHRcXHRcXHRcXHRkZXZfcHV0KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fSBlbHNlIGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOU1RBVEVNT0RFRVJST1IpO1xcbkBAIC03MjYsOSArNzI3LDEyIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFx0XFx0Y3J5cHRvX2RvbmUgPSBmYWxzZTtcXG4gXFx0fSB3aGlsZSAoIWVycik7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LVxcdTAwM2V0eXBlLVxcdTAwM2Vwcm90bywgMCk7XFxuLVxcdGlmIChlcnIpXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4rXFx0fVxcbiBcXG4gXFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gXFxuQEAgLTczOSw4ICs3NDMsOSBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIFxcdFxcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXFxuIFxcdFxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiBcXHRcXHRpZiAoYXN5bmMpXFxuLVxcdFxcdFxcdGRldl9wdXQoc2tiLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIFxcdFxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZncm9fY2VsbHMsIHNrYik7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0eG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG5AQCAtNzQ4LDIzICs3NTMsMjEgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbiBcXHRcXHRcXHR4ZnJtX2dybyA9IHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1JPO1xcbiBcXG4gXFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4tXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRcXHRhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KHgtXFx1MDAzZXByb3BzLmZhbWlseSk7XFxuIFxcdFxcdGlmIChsaWtlbHkoYWZpbmZvKSlcXG4gXFx0XFx0XFx0ZXJyID0gYWZpbmZvLVxcdTAwM2V0cmFuc3BvcnRfZmluaXNoKHNrYiwgeGZybV9ncm8gfHwgYXN5bmMpO1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0aWYgKHhmcm1fZ3JvKSB7XFxuIFxcdFxcdFxcdHNwID0gc2tiX3NlY19wYXRoKHNrYik7XFxuIFxcdFxcdFxcdGlmIChzcClcXG4gXFx0XFx0XFx0XFx0c3AtXFx1MDAzZW9sZW4gPSAwO1xcbiBcXHRcXHRcXHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxcbiBcXHRcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4tXFx0XFx0XFx0aWYgKGFzeW5jKVxcbi1cXHRcXHRcXHRcXHRkZXZfcHV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gXFx0XFx0XFx0Z3JvX2NlbGxzX3JlY2VpdmUoXFx1MDAyNmdyb19jZWxscywgc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKGFzeW5jKVxcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbkBAIC03NzIsNyArNzc1LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2eC1cXHUwMDNlbG9jayk7XFxuIGRyb3A6XFxuIFxcdGlmIChhc3luYylcXG4tXFx0XFx0ZGV2X3B1dChza2ItXFx1MDAzZWRldik7XFxuK1xcdFxcdGRldl9wdXQoZGV2KTtcXG4gXFx0eGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHggXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNldHlwZSA/IHgtXFx1MDAzZXR5cGUtXFx1MDAzZXByb3RvIDogbmV4dGhkciwgLTEpO1xcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXFxuaW5kZXggOTU5NTQ0NDI1NjkyOTAuLjYzOTkzNGYzMDAxNjdlIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXFxuQEAgLTI0Miw2ICsyNDIsOSBAQCBfX3hmcm02X3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwpXFxuIGJvb2wgeGZybV9zZWxlY3Rvcl9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbiB7XFxuK1xcdGlmIChmYW1pbHkgIT0gc2VsLVxcdTAwM2VmYW1pbHkgXFx1MDAyNlxcdTAwMjYgc2VsLVxcdTAwM2VmYW1pbHkgIT0gQUZfVU5TUEVDKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRzd2l0Y2ggKGZhbWlseSkge1xcbiBcXHRjYXNlIEFGX0lORVQ6XFxuIFxcdFxcdHJldHVybiBfX3hmcm00X3NlbGVjdG9yX21hdGNoKHNlbCwgZmwpO1xcbkBAIC02ODUsNyArNjg4LDcgQEAgc3RhdGljIHZvaWQgeGZybV9ieWlkeF9yZXNpemUoc3RydWN0IG5ldCAqbmV0KVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ieWRzdF9zaG91bGRfcmVzaXplKHN0cnVjdCBuZXQgKm5ldCwgaW50IGRpciwgaW50ICp0b3RhbClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgY250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdO1xcbitcXHR1bnNpZ25lZCBpbnQgY250ID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSk7XFxuIFxcdHVuc2lnbmVkIGludCBobWFzayA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfYnlkc3RbZGlyXS5obWFzaztcXG4gXFxuIFxcdGlmICh0b3RhbClcXG5AQCAtNzExLDEyICs3MTQsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgeGZybV9ieWlkeF9zaG91bGRfcmVzaXplKHN0cnVjdCBuZXQgKm5ldCwgaW50IHRvdGFsKVxcbiBcXG4gdm9pZCB4ZnJtX3NwZF9nZXRpbmZvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1rX3NwZGluZm8gKnNpKVxcbiB7XFxuLVxcdHNpLVxcdTAwM2VpbmNudCA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU5dO1xcbi1cXHRzaS1cXHUwMDNlb3V0Y250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdO1xcbi1cXHRzaS1cXHUwMDNlZndkY250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9GV0RdO1xcbi1cXHRzaS1cXHUwMDNlaW5zY250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTitYRlJNX1BPTElDWV9NQVhdO1xcbi1cXHRzaS1cXHUwMDNlb3V0c2NudCA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUK1hGUk1fUE9MSUNZX01BWF07XFxuLVxcdHNpLVxcdTAwM2Vmd2RzY250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9GV0QrWEZSTV9QT0xJQ1lfTUFYXTtcXG4rXFx0c2ktXFx1MDAzZWluY250ID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU5dKTtcXG4rXFx0c2ktXFx1MDAzZW91dGNudCA9IFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0pO1xcbitcXHRzaS1cXHUwMDNlZndkY250ID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEXSk7XFxuK1xcdHNpLVxcdTAwM2VpbnNjbnQgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTitYRlJNX1BPTElDWV9NQVhdKTtcXG4rXFx0c2ktXFx1MDAzZW91dHNjbnQgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVQrWEZSTV9QT0xJQ1lfTUFYXSk7XFxuK1xcdHNpLVxcdTAwM2Vmd2RzY250ID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEK1hGUk1fUE9MSUNZX01BWF0pO1xcbiBcXHRzaS1cXHUwMDNlc3BkaGNudCA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfaWR4X2htYXNrO1xcbiBcXHRzaS1cXHUwMDNlc3BkaG1jbnQgPSB4ZnJtX3BvbGljeV9oYXNobWF4O1xcbiB9XFxuQEAgLTIzMTgsNyArMjMyMSw3IEBAIHN0YXRpYyB2b2lkIF9feGZybV9wb2xpY3lfbGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcXG4gXFx0fVxcbiBcXG4gXFx0bGlzdF9hZGQoXFx1MDAyNnBvbC1cXHUwMDNld2Fsay5hbGwsIFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2FsbCk7XFxuLVxcdG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSsrO1xcbitcXHRXUklURV9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSwgbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdICsgMSk7XFxuIFxcdHhmcm1fcG9sX2hvbGQocG9sKTtcXG4gfVxcbiBcXG5AQCAtMjMzNyw3ICsyMzQwLDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqX194ZnJtX3BvbGljeV91bmxpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsXFxuIFxcdH1cXG4gXFxuIFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnBvbC1cXHUwMDNld2Fsay5hbGwpO1xcbi1cXHRuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0tLTtcXG4rXFx0V1JJVEVfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0sIG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSAtIDEpO1xcbiBcXG4gXFx0cmV0dXJuIHBvbDtcXG4gfVxcbkBAIC0zMjIyLDcgKzMyMjUsNyBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cF93aXRoX2lmaWQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gXFx0XFx0LyogVG8gYWNjZWxlcmF0ZSBhIGJpdC4uLiAgKi9cXG4gXFx0XFx0aWYgKCFpZl9pZCBcXHUwMDI2XFx1MDAyNiAoKGRzdF9vcmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IERTVF9OT1hGUk0pIHx8XFxuLVxcdFxcdFxcdCAgICAgICAhbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSlcXG4rXFx0XFx0XFx0ICAgICAgICFSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSkpXFxuIFxcdFxcdFxcdGdvdG8gbm9wb2w7XFxuIFxcbiBcXHRcXHR4ZHN0ID0geGZybV9idW5kbGVfbG9va3VwKG5ldCwgZmwsIGZhbWlseSwgZGlyLCBcXHUwMDI2eGZsbywgaWZfaWQpO1xcbkBAIC0zMjk2LDcgKzMyOTksNyBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cF93aXRoX2lmaWQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gbm9wb2w6XFxuIFxcdGlmICgoIWRzdF9vcmlnLVxcdTAwM2VkZXYgfHwgIShkc3Rfb3JpZy1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSykpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQkxPQ0spIHtcXG4rXFx0ICAgIFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7XFxuIFxcdFxcdGVyciA9IC1FUEVSTTtcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFx0fVxcbkBAIC0zNzUwLDcgKzM3NTMsNyBAQCBpbnQgX194ZnJtX3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGNvbnN0IGJvb2wgaXNfY3J5cHRvX29mZmxvYWQgPSBzcCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQoeGZybV9pbnB1dF9zdGF0ZShza2IpLVxcdTAwM2V4c28udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTyk7XFxuIFxcbi1cXHRcXHRpZiAobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0gPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7XFxuK1xcdFxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xcbiBcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1BPTFMpO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5pbmRleCA1ODljM2I2ZTQ2NzkxMy4uOWU4N2Y3MDI4MjAxMDggMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXFxuQEAgLTEyMDcsOSArMTIwNywxMSBAQCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWQgKnN0YXRlX2NhY2hlX2lucHV0O1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IE5VTEw7XFxuIFxcbitcXHQvKiBCSCBpcyBhbHdheXMgZGlzYWJsZWQgb24gdGhlIGlucHV0IHBhdGguICovXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2luX3NvZnRpcnEoKTtcXG4rXFxuIFxcdHN0YXRlX2NhY2hlX2lucHV0ID0gcmF3X2NwdV9wdHIobmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2NhY2hlX2lucHV0KTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHgsIHN0YXRlX2NhY2hlX2lucHV0LCBzdGF0ZV9jYWNoZV9pbnB1dCkge1xcbiBcXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ICE9IGZhbWlseSB8fFxcbiBcXHRcXHQgICAgeC1cXHUwMDNlaWQuc3BpICAgICAgICE9IHNwaSB8fFxcbkBAIC0xMjI3LDIwICsxMjI5LDI1IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxcbiBcXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcXHUwMDI2c3RhdGVfcHRycyk7XFxuIFxcbiBcXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XFxuLVxcbi1cXHRpZiAoeCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX1ZBTElEKSB7XFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuLVxcdFxcdGlmIChobGlzdF91bmhhc2hlZChcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKSB7XFxuK1xcdGlmICh4KSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuK1xcdFxcdGlmICh4LVxcdTAwM2VrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSBzdGF0ZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIERvbid0IGFkZCBpdCB0byB0aGUgY2FjaGUgYnV0IHN0aWxsXFxuK1xcdFxcdFxcdCAqIHJldHVybiBpdCB0byB0aGUgY2FsbGVyLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0fSBlbHNlIGlmIChobGlzdF91bmhhc2hlZChcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKSB7XFxuIFxcdFxcdFxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpO1xcbiBcXHRcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNngtXFx1MDAzZXN0YXRlX2NhY2hlX2lucHV0LCBzdGF0ZV9jYWNoZV9pbnB1dCk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIFxcdH1cXG4gXFxuIG91dDpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiB4O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9zdGF0ZV9sb29rdXApO1xcbkBAIC0yOTc2LDcgKzI5ODMsNyBAQCBpbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbiBcXHRpZiAoSVNfRVJSKGRhdGEpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihkYXRhKTtcXG4gXFxuLVxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFxcdTAwMjZcXHUwMDI2IGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcXG4gXFx0XFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbiBcXG4gXFx0XFx0aWYgKCF4dHIpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xcbmluZGV4IDcxYTRiNzI3OGViYTkyLi42MWViNWRlMzNiODdlZSAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuQEAgLTI0ODUsOSArMjQ4NSw5IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdH1cXG4gXFxuIFxcdHVwID0gbmxtc2dfZGF0YShubGgpO1xcbi1cXHR1cC1cXHUwMDNlaW4gPSBuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dO1xcbi1cXHR1cC1cXHUwMDNlZndkID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF07XFxuLVxcdHVwLVxcdTAwM2VvdXQgPSBuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXTtcXG4rXFx0dXAtXFx1MDAzZWluID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0pO1xcbitcXHR1cC1cXHUwMDNlZndkID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdKTtcXG4rXFx0dXAtXFx1MDAzZW91dCA9IFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSk7XFxuIFxcbiBcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbiBcXG5AQCAtMjUxMSwxMyArMjUxMSwxMyBAQCBzdGF0aWMgaW50IHhmcm1fc2V0X2RlZmF1bHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCAqdXAgPSBubG1zZ19kYXRhKG5saCk7XFxuIFxcbiBcXHRpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLVxcdTAwM2VpbikpXFxuLVxcdFxcdG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0gPSB1cC1cXHUwMDNlaW47XFxuK1xcdFxcdFdSSVRFX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSwgdXAtXFx1MDAzZWluKTtcXG4gXFxuIFxcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXFx1MDAzZWZ3ZCkpXFxuLVxcdFxcdG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdID0gdXAtXFx1MDAzZWZ3ZDtcXG4rXFx0XFx0V1JJVEVfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSwgdXAtXFx1MDAzZWZ3ZCk7XFxuIFxcbiBcXHRpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLVxcdTAwM2VvdXQpKVxcbi1cXHRcXHRuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSA9IHVwLVxcdTAwM2VvdXQ7XFxuK1xcdFxcdFdSSVRFX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0sIHVwLVxcdTAwM2VvdXQpO1xcbiBcXG4gXFx0cnRfZ2VuaWRfYnVtcF9hbGwobmV0KTtcXG4gXFxuQEAgLTI1NDcsOSArMjU0Nyw5IEBAIHN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0fVxcbiBcXG4gXFx0cl91cCA9IG5sbXNnX2RhdGEocl9ubGgpO1xcbi1cXHRyX3VwLVxcdTAwM2VpbiA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl07XFxuLVxcdHJfdXAtXFx1MDAzZWZ3ZCA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdO1xcbi1cXHRyX3VwLVxcdTAwM2VvdXQgPSBuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXTtcXG4rXFx0cl91cC1cXHUwMDNlaW4gPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7XFxuK1xcdHJfdXAtXFx1MDAzZWZ3ZCA9IFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSk7XFxuK1xcdHJfdXAtXFx1MDAzZW91dCA9IFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSk7XFxuIFxcdG5sbXNnX2VuZChyX3NrYiwgcl9ubGgpO1xcbiBcXG4gXFx0cmV0dXJuIG5sbXNnX3VuaWNhc3QoeGZybV9uZXRfbmxzayhuZXQsIHNrYiksIHJfc2tiLCBwb3J0aWQpO1xcbkBAIC0zNDcyLDcgKzM0NzIsNyBAQCBzdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRpZiAoIW5ldGxpbmtfbmV0X2NhcGFibGUoc2tiLCBDQVBfTkVUX0FETUlOKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFxcdTAwMjZcXHUwMDI2IGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcXG4gXFx0XFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbiBcXG4gXFx0XFx0aWYgKCF4dHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjQ1LjkxNTg3MTk5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NjMwNDA3MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJORVRfS0VZXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3VzZXJfcmN2X21zZ1wiLFxuICAgIFwieGZybV9zZXRfZGVmYXVsdFwiLFxuICAgIFwieGZybV9nZXRfZGVmYXVsdFwiLFxuICAgIFwieGZybV91c2VyX3BvbGljeVwiLFxuICAgIFwicGZrZXlfYWRkXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJ4ZnJtX2dldF9zcGRpbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBYRlJNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGJvdW5kcyBjaGVja3MgZm9yIGFkZHJlc3MgbWF0Y2hpbmcsIGZpeGluZyBkYXRhIHJhY2VzIGluIHBvbGljeSBjb3VudHMvZGVmYXVsdHMsIGFkanVzdGluZyBkZXYgcmVmY291bnRpbmcgaW4geGZybV9pbnB1dCwgYW5kIHJlZmFjdG9yaW5nIGVzcGludGNwIG1lc3NhZ2Ugc2VuZGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgSVBzZWMgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjY1ZWQyNmNlMTBiOGEwYmU2NzBkOWQ4MTA0NTBhMzBkOWNiZWE2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDA4OjE1OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oXG5pbmRleCA4NzQ0MDkxMjdlMjkyMS4uZjhjOTA5YjBmMGMzNGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZnJtLmhcbisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaFxuQEAgLTk0Myw2ICs5NDMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcl9tYXRjaChjb25zdCB2b2lkICp0b2tlbjEsIGNvbnN0IHZvaWQgKnRva2VuMixcbiBcdHVuc2lnbmVkIGludCBwZHc7XG4gXHR1bnNpZ25lZCBpbnQgcGJpO1xuIFxuK1x0aWYgKHByZWZpeGxlbiBcdTAwM2UgMTI4KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRwZHcgPSBwcmVmaXhsZW4gXHUwMDNlXHUwMDNlIDU7XHQgIC8qIG51bSBvZiB3aG9sZSB1MzIgaW4gcHJlZml4ICovXG4gXHRwYmkgPSBwcmVmaXhsZW4gXHUwMDI2ICAweDFmOyAgLyogbnVtIG9mIGJpdHMgaW4gaW5jb21wbGV0ZSB1MzIgaW4gcHJlZml4ICovXG4gXG5AQCAtOTY3LDYgKzk3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcjRfbWF0Y2goX19iZTMyIGExLCBfX2JlMzIgYTIsIHU4IHByZWZpeGxlbilcbiBcdC8qIEM5OSA2LjUuNyAoMyk6IHUzMiBcdTAwM2NcdTAwM2MgMzIgaXMgdW5kZWZpbmVkIGJlaGF2aW91ciAqL1xuIFx0aWYgKHNpemVvZihsb25nKSA9PSA0IFx1MDAyNlx1MDAyNiBwcmVmaXhsZW4gPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocHJlZml4bGVuIFx1MDAzZSAzMilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0cmV0dXJuICEoKGExIF4gYTIpIFx1MDAyNiBodG9ubCh+MFVMIFx1MDAzY1x1MDAzYyAoMzIgLSBwcmVmaXhsZW4pKSk7XG4gfVxuIFxuQEAgLTEyNTAsOCArMTI1Nyw4IEBAIGludCBfX3hmcm1fcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICosIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGlubGluZSBib29sIF9feGZybV9jaGVja19ub3BvbGljeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCBpbnQgZGlyKVxuIHtcbi1cdGlmICghbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0gXHUwMDI2XHUwMDI2ICFzZWNwYXRoX2V4aXN0cyhza2IpKVxuLVx0XHRyZXR1cm4gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQUNDRVBUO1xuK1x0aWYgKCFSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0pIFx1MDAyNlx1MDAyNiAhc2VjcGF0aF9leGlzdHMoc2tiKSlcbitcdFx0cmV0dXJuIFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdKSA9PSBYRlJNX1VTRVJQT0xJQ1lfQUNDRVBUO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xMzUxLDggKzEzNTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCB4ZnJtX3JvdXRlX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gXG4tXHRpZiAoIW5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0gPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVClcbitcdGlmICghUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSBcdTAwMjZcdTAwMjZcbitcdCAgICBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gKHNrYl9kc3Qoc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgRFNUX05PWEZSTSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xuaW5kZXggYzJlYWM4NDRiY2RiNGUuLmY2ZjJhOGVmM2Y4ODQ3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xuKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xuQEAgLTc2LDggKzc2LDYgQEAgaW50IHhmcm00X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKVxuIFx0TkZfSE9PSyhORlBST1RPX0lQVjQsIE5GX0lORVRfUFJFX1JPVVRJTkcsXG4gXHRcdGRldl9uZXQoZGV2KSwgTlVMTCwgc2tiLCBkZXYsIE5VTEwsXG4gXHRcdHhmcm00X3Jjdl9lbmNhcF9maW5pc2gpO1xuLVx0aWYgKGFzeW5jKVxuLVx0XHRkZXZfcHV0KGRldik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbmluZGV4IDY5OWEwMDFhYzE2NjI5Li44OWQwNDQzYjUzMDczMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbisrKyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbkBAIC03MSw4ICs3MSw2IEBAIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcbiBcdE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX1BSRV9ST1VUSU5HLFxuIFx0XHRkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLFxuIFx0XHR4ZnJtNl90cmFuc3BvcnRfZmluaXNoMik7XG4tXHRpZiAoYXN5bmMpXG4tXHRcdGRldl9wdXQoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuY1xuaW5kZXggOWNmZmVlZjE4Y2Q5MWMuLjMyMTZmODk3YTMwNWUwIDEwMDY0NFxuLS0tIGEvbmV0L2tleS9hZl9rZXkuY1xuKysrIGIvbmV0L2tleS9hZl9rZXkuY1xuQEAgLTEyMTgsNiArMTIxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqIHBma2V5X21zZzJ4ZnJtX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiBcdFx0XHRzdHJjcHkoeC1cdTAwM2VjYWxnLVx1MDAzZWFsZ19uYW1lLCBhLVx1MDAzZW5hbWUpO1xuK1x0XHRcdHgtXHUwMDNlY2FsZy1cdTAwM2VhbGdfa2V5X2xlbiA9IDA7XG4gXHRcdFx0eC1cdTAwM2Vwcm9wcy5jYWxnbyA9IHNhLVx1MDAzZXNhZGJfc2FfZW5jcnlwdDtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpbnQga2V5c2l6ZSA9IDA7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmNcbmluZGV4IGQ5MDM1NTQ2Mzc1ZWJhLi4zNzRlMWI5NjQ0MzgzOSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL2VzcGludGNwLmNcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcbkBAIC0yMTIsNDMgKzIxMiwyMyBAQCBzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX21zZyAqc2ttc2cgPSBcdTAwMjZlbXNnLVx1MDAzZXNrbXNnO1xuIFx0Ym9vbCBtb3JlID0gZmxhZ3MgXHUwMDI2IE1TR19NT1JFO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbi1cdGludCBkb25lID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRzZyA9IFx1MDAyNnNrbXNnLVx1MDAzZXNnLmRhdGFbc2ttc2ctXHUwMDNlc2cuc3RhcnRdO1xuIFx0ZG8ge1xuIFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuLVx0XHRzaXplX3Qgc2l6ZSA9IHNnLVx1MDAzZWxlbmd0aCAtIGVtc2ctXHUwMDNlb2Zmc2V0O1xuLVx0XHRpbnQgb2Zmc2V0ID0gc2ctXHUwMDNlb2Zmc2V0ICsgZW1zZy1cdTAwM2VvZmZzZXQ7XG4tXHRcdHN0cnVjdCBwYWdlICpwO1xuLVxuLVx0XHRlbXNnLVx1MDAzZW9mZnNldCA9IDA7XG4gXG4rXHRcdHNnID0gXHUwMDI2c2ttc2ctXHUwMDNlc2cuZGF0YVtza21zZy1cdTAwM2VzZy5zdGFydF07XG4gXHRcdGlmIChzZ19pc19sYXN0KHNnKSBcdTAwMjZcdTAwMjYgIW1vcmUpXG4gXHRcdFx0bXNnaGRyLm1zZ19mbGFncyBcdTAwMjY9IH5NU0dfTU9SRTtcbiBcbi1cdFx0cCA9IHNnX3BhZ2Uoc2cpO1xuLXJldHJ5OlxuLVx0XHRidmVjX3NldF9wYWdlKFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XG4tXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2bXNnaGRyLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YnZlYywgMSwgc2l6ZSk7XG4tXHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnaGRyLCBzaXplKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGVtc2ctXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0IC0gc2ctXHUwMDNlb2Zmc2V0O1xuLVx0XHRcdHNrbXNnLVx1MDAzZXNnLnN0YXJ0ICs9IGRvbmU7XG4rXHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2YnZlYywgc2dfcGFnZShzZyksIHNnLVx1MDAzZWxlbmd0aCwgc2ctXHUwMDNlb2Zmc2V0KTtcbitcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzZy1cdTAwM2VsZW5ndGgpO1xuK1x0XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFx1MDAyNm1zZ2hkciwgc2ctXHUwMDNlbGVuZ3RoKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9XG4tXG4tXHRcdGlmIChyZXQgIT0gc2l6ZSkge1xuLVx0XHRcdG9mZnNldCArPSByZXQ7XG4tXHRcdFx0c2l6ZSAtPSByZXQ7XG4tXHRcdFx0Z290byByZXRyeTtcbi1cdFx0fVxuIFxuLVx0XHRkb25lKys7XG4tXHRcdHB1dF9wYWdlKHApO1xuLVx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnLVx1MDAzZWxlbmd0aCk7XG4tXHRcdHNnID0gc2dfbmV4dChzZyk7XG4tXHR9IHdoaWxlIChzZyk7XG4rXHRcdHNrX21zZ19mcmVlX3BhcnRpYWwoc2ssIHNrbXNnLCByZXQpO1xuK1x0fSB3aGlsZSAoc2ttc2ctXHUwMDNlc2cuc2l6ZSk7XG4gXG4gXHRtZW1zZXQoZW1zZywgMCwgc2l6ZW9mKCplbXNnKSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlNGMyY2QyNDkzNmQzZi4uZWVjYWIzMzdiZDBhNzkgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmNcbisrKyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm87XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gXHRpbnQgZXJyO1xuIFx0X19iZTMyIHNlcTtcbiBcdF9fYmUzMiBzZXFfaGk7XG5AQCAtNDkzLDcgKzQ5NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0XHRcdFx0ICAgICAgIExJTlVYX01JQl9YRlJNSU5TVEFURUlOVkFMSUQpO1xuIFxuIFx0XHRcdGlmIChlbmNhcF90eXBlID09IC0xKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbitcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbkBAIC02NTUsMTYgKzY1NiwxNiBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXG4gXHRcdGlmICghY3J5cHRvX2RvbmUpIHtcbiBcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuLVx0XHRcdGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO1xuK1x0XHRcdGRldl9ob2xkKGRldik7XG4gXG4gXHRcdFx0bmV4dGhkciA9IHgtXHUwMDNldHlwZS1cdTAwM2VpbnB1dCh4LCBza2IpO1xuIFx0XHRcdGlmIChuZXh0aGRyID09IC1FSU5QUk9HUkVTUykge1xuIFx0XHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuK1x0XHRcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbitcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4gXHRcdH1cbiByZXN1bWU6XG5AQCAtNjk5LDcgKzcwMCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0ZXJyID0geGZybV9pbm5lcl9tb2RlX2lucHV0KHgsIHNrYik7XG4gXHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XG4gXHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbitcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fSBlbHNlIGlmIChlcnIpIHtcbiBcdFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5TVEFURU1PREVFUlJPUik7XG5AQCAtNzI2LDkgKzcyNywxMiBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdGNyeXB0b19kb25lID0gZmFsc2U7XG4gXHR9IHdoaWxlICghZXJyKTtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8sIDApO1xuLVx0aWYgKGVycilcbitcdGlmIChlcnIpIHtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGdvdG8gZHJvcDtcbitcdH1cbiBcbiBcdG5mX3Jlc2V0X2N0KHNrYik7XG4gXG5AQCAtNzM5LDggKzc0Myw5IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0aWYgKHNrYl92YWxpZF9kc3Qoc2tiKSlcbiBcdFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiBcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdGRldl9wdXQoc2tiLVx1MDAzZWRldik7XG4rXHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZncm9fY2VsbHMsIHNrYik7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG4gXHRcdHhvID0geGZybV9vZmZsb2FkKHNrYik7XG5AQCAtNzQ4LDIzICs3NTMsMjEgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0XHRcdHhmcm1fZ3JvID0geG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1JPO1xuIFxuIFx0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdGFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC1cdTAwM2Vwcm9wcy5mYW1pbHkpO1xuIFx0XHRpZiAobGlrZWx5KGFmaW5mbykpXG4gXHRcdFx0ZXJyID0gYWZpbmZvLVx1MDAzZXRyYW5zcG9ydF9maW5pc2goc2tiLCB4ZnJtX2dybyB8fCBhc3luYyk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpZiAoeGZybV9ncm8pIHtcbiBcdFx0XHRzcCA9IHNrYl9zZWNfcGF0aChza2IpO1xuIFx0XHRcdGlmIChzcClcbiBcdFx0XHRcdHNwLVx1MDAzZW9sZW4gPSAwO1xuIFx0XHRcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXG4gXHRcdFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbi1cdFx0XHRpZiAoYXN5bmMpXG4tXHRcdFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuIFx0XHRcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNmdyb19jZWxscywgc2tiKTtcbi1cdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChhc3luYylcbitcdFx0XHRkZXZfcHV0KGRldik7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuQEAgLTc3Miw3ICs3NzUsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuIGRyb3A6XG4gXHRpZiAoYXN5bmMpXG4tXHRcdGRldl9wdXQoc2tiLVx1MDAzZWRldik7XG4rXHRcdGRldl9wdXQoZGV2KTtcbiBcdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4IFx1MDAyNlx1MDAyNiB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyLCAtMSk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5pbmRleCA5NTk1NDQ0MjU2OTI5MC4uNjM5OTM0ZjMwMDE2N2UgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5AQCAtMjQyLDYgKzI0Miw5IEBAIF9feGZybTZfc2VsZWN0b3JfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbClcbiBib29sIHhmcm1fc2VsZWN0b3JfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbCxcbiBcdFx0XHQgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbitcdGlmIChmYW1pbHkgIT0gc2VsLVx1MDAzZWZhbWlseSBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZWZhbWlseSAhPSBBRl9VTlNQRUMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdHN3aXRjaCAoZmFtaWx5KSB7XG4gXHRjYXNlIEFGX0lORVQ6XG4gXHRcdHJldHVybiBfX3hmcm00X3NlbGVjdG9yX21hdGNoKHNlbCwgZmwpO1xuQEAgLTY4NSw3ICs2ODgsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX2J5aWR4X3Jlc2l6ZShzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ieWRzdF9zaG91bGRfcmVzaXplKHN0cnVjdCBuZXQgKm5ldCwgaW50IGRpciwgaW50ICp0b3RhbClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl07XG4rXHR1bnNpZ25lZCBpbnQgY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdKTtcbiBcdHVuc2lnbmVkIGludCBobWFzayA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9ieWRzdFtkaXJdLmhtYXNrO1xuIFxuIFx0aWYgKHRvdGFsKVxuQEAgLTcxMSwxMiArNzE0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fYnlpZHhfc2hvdWxkX3Jlc2l6ZShzdHJ1Y3QgbmV0ICpuZXQsIGludCB0b3RhbClcbiBcbiB2b2lkIHhmcm1fc3BkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc3BkaW5mbyAqc2kpXG4ge1xuLVx0c2ktXHUwMDNlaW5jbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU5dO1xuLVx0c2ktXHUwMDNlb3V0Y250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF07XG4tXHRzaS1cdTAwM2Vmd2RjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEXTtcbi1cdHNpLVx1MDAzZWluc2NudCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTitYRlJNX1BPTElDWV9NQVhdO1xuLVx0c2ktXHUwMDNlb3V0c2NudCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVQrWEZSTV9QT0xJQ1lfTUFYXTtcbi1cdHNpLVx1MDAzZWZ3ZHNjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEK1hGUk1fUE9MSUNZX01BWF07XG4rXHRzaS1cdTAwM2VpbmNudCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU5dKTtcbitcdHNpLVx1MDAzZW91dGNudCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSk7XG4rXHRzaS1cdTAwM2Vmd2RjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRF0pO1xuK1x0c2ktXHUwMDNlaW5zY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTitYRlJNX1BPTElDWV9NQVhdKTtcbitcdHNpLVx1MDAzZW91dHNjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVCtYRlJNX1BPTElDWV9NQVhdKTtcbitcdHNpLVx1MDAzZWZ3ZHNjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRCtYRlJNX1BPTElDWV9NQVhdKTtcbiBcdHNpLVx1MDAzZXNwZGhjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfaWR4X2htYXNrO1xuIFx0c2ktXHUwMDNlc3BkaG1jbnQgPSB4ZnJtX3BvbGljeV9oYXNobWF4O1xuIH1cbkBAIC0yMzE4LDcgKzIzMjEsNyBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fcG9saWN5X2xpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXG4gXHR9XG4gXG4gXHRsaXN0X2FkZChcdTAwMjZwb2wtXHUwMDNld2Fsay5hbGwsIFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnBvbGljeV9hbGwpO1xuLVx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0rKztcbitcdFdSSVRFX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0sIG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdICsgMSk7XG4gXHR4ZnJtX3BvbF9ob2xkKHBvbCk7XG4gfVxuIFxuQEAgLTIzMzcsNyArMjM0MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKl9feGZybV9wb2xpY3lfdW5saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxuIFx0fVxuIFxuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwb2wtXHUwMDNld2Fsay5hbGwpO1xuLVx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0tLTtcbitcdFdSSVRFX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0sIG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdIC0gMSk7XG4gXG4gXHRyZXR1cm4gcG9sO1xuIH1cbkBAIC0zMjIyLDcgKzMyMjUsNyBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cF93aXRoX2lmaWQoc3RydWN0IG5ldCAqbmV0LFxuIFxuIFx0XHQvKiBUbyBhY2NlbGVyYXRlIGEgYml0Li4uICAqL1xuIFx0XHRpZiAoIWlmX2lkIFx1MDAyNlx1MDAyNiAoKGRzdF9vcmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBEU1RfTk9YRlJNKSB8fFxuLVx0XHRcdCAgICAgICAhbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0pKVxuK1x0XHRcdCAgICAgICAhUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSkpXG4gXHRcdFx0Z290byBub3BvbDtcbiBcbiBcdFx0eGRzdCA9IHhmcm1fYnVuZGxlX2xvb2t1cChuZXQsIGZsLCBmYW1pbHksIGRpciwgXHUwMDI2eGZsbywgaWZfaWQpO1xuQEAgLTMyOTYsNyArMzI5OSw3IEBAIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gbm9wb2w6XG4gXHRpZiAoKCFkc3Rfb3JpZy1cdTAwM2VkZXYgfHwgIShkc3Rfb3JpZy1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9MT09QQkFDSykpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0gPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7XG4rXHQgICAgUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xuIFx0XHRlcnIgPSAtRVBFUk07XG4gXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG5AQCAtMzc1MCw3ICszNzUzLDcgQEAgaW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRjb25zdCBib29sIGlzX2NyeXB0b19vZmZsb2FkID0gc3AgXHUwMDI2XHUwMDI2XG4gXHRcdFx0KHhmcm1faW5wdXRfc3RhdGUoc2tiKS1cdTAwM2V4c28udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTyk7XG4gXG4tXHRcdGlmIChuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xuK1x0XHRpZiAoUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xuIFx0XHRcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTk5PUE9MUyk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IDU4OWMzYjZlNDY3OTEzLi45ZTg3ZjcwMjgyMDEwOCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5AQCAtMTIwNyw5ICsxMjA3LDExIEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnN0YXRlX2NhY2hlX2lucHV0O1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xuIFxuK1x0LyogQkggaXMgYWx3YXlzIGRpc2FibGVkIG9uIHRoZSBpbnB1dCBwYXRoLiAqL1xuK1x0bG9ja2RlcF9hc3NlcnRfaW5fc29mdGlycSgpO1xuK1xuIFx0c3RhdGVfY2FjaGVfaW5wdXQgPSByYXdfY3B1X3B0cihuZXQtXHUwMDNleGZybS5zdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KSB7XG4gXHRcdGlmICh4LVx1MDAzZXByb3BzLmZhbWlseSAhPSBmYW1pbHkgfHxcbiBcdFx0ICAgIHgtXHUwMDNlaWQuc3BpICAgICAgICE9IHNwaSB8fFxuQEAgLTEyMjcsMjAgKzEyMjksMjUgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXG4gXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbiBcbiBcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xuLVxuLVx0aWYgKHggXHUwMDI2XHUwMDI2IHgtXHUwMDNla20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbi1cdFx0aWYgKGhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKSB7XG4rXHRpZiAoeCkge1xuK1x0XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbitcdFx0aWYgKHgtXHUwMDNla20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVGhlIHN0YXRlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIERvbid0IGFkZCBpdCB0byB0aGUgY2FjaGUgYnV0IHN0aWxsXG4rXHRcdFx0ICogcmV0dXJuIGl0IHRvIHRoZSBjYWxsZXIuXG4rXHRcdFx0ICovXG4rXHRcdH0gZWxzZSBpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCkpIHtcbiBcdFx0XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCwgc3RhdGVfY2FjaGVfaW5wdXQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXHRcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KTtcbiBcdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFx0fVxuIFxuIG91dDpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIHg7XG4gfVxuIEVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9zdGF0ZV9sb29rdXApO1xuQEAgLTI5NzYsNyArMjk4Myw3IEBAIGludCB4ZnJtX3VzZXJfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4gXHRpZiAoSVNfRVJSKGRhdGEpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihkYXRhKTtcbiBcbi1cdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UKSBcdTAwMjZcdTAwMjYgaW5fY29tcGF0X3N5c2NhbGwoKSkge1xuIFx0XHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG4gXG4gXHRcdGlmICgheHRyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNzFhNGI3Mjc4ZWJhOTIuLjYxZWI1ZGUzM2I4N2VlIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMjQ4NSw5ICsyNDg1LDkgQEAgc3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcbiBcdH1cbiBcbiBcdHVwID0gbmxtc2dfZGF0YShubGgpO1xuLVx0dXAtXHUwMDNlaW4gPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl07XG4tXHR1cC1cdTAwM2Vmd2QgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdO1xuLVx0dXAtXHUwMDNlb3V0ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXTtcbitcdHVwLVx1MDAzZWluID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7XG4rXHR1cC1cdTAwM2Vmd2QgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSk7XG4rXHR1cC1cdTAwM2VvdXQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSk7XG4gXG4gXHRubG1zZ19lbmQoc2tiLCBubGgpO1xuIFxuQEAgLTI1MTEsMTMgKzI1MTEsMTMgQEAgc3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0c3RydWN0IHhmcm1fdXNlcnBvbGljeV9kZWZhdWx0ICp1cCA9IG5sbXNnX2RhdGEobmxoKTtcbiBcbiBcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlaW4pKVxuLVx0XHRuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0gPSB1cC1cdTAwM2VpbjtcbitcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0sIHVwLVx1MDAzZWluKTtcbiBcbiBcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlZndkKSlcbi1cdFx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSA9IHVwLVx1MDAzZWZ3ZDtcbitcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdLCB1cC1cdTAwM2Vmd2QpO1xuIFxuIFx0aWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC1cdTAwM2VvdXQpKVxuLVx0XHRuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdID0gdXAtXHUwMDNlb3V0O1xuK1x0XHRXUklURV9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0sIHVwLVx1MDAzZW91dCk7XG4gXG4gXHRydF9nZW5pZF9idW1wX2FsbChuZXQpO1xuIFxuQEAgLTI1NDcsOSArMjU0Nyw5IEBAIHN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdH1cbiBcbiBcdHJfdXAgPSBubG1zZ19kYXRhKHJfbmxoKTtcbi1cdHJfdXAtXHUwMDNlaW4gPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl07XG4tXHRyX3VwLVx1MDAzZWZ3ZCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF07XG4tXHRyX3VwLVx1MDAzZW91dCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF07XG4rXHRyX3VwLVx1MDAzZWluID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7XG4rXHRyX3VwLVx1MDAzZWZ3ZCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdKTtcbitcdHJfdXAtXHUwMDNlb3V0ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pO1xuIFx0bmxtc2dfZW5kKHJfc2tiLCByX25saCk7XG4gXG4gXHRyZXR1cm4gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcl9za2IsIHBvcnRpZCk7XG5AQCAtMzQ3Miw3ICszNDcyLDcgQEAgc3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdGlmICghbmV0bGlua19uZXRfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFx1MDAyNlx1MDAyNiBpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4gXHRcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbiBcbiBcdFx0aWYgKCF4dHIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNTo0NS45MTU4NzM4ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDg5OTQxMTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBYRlJNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzLCBtb3N0bHkgd2l0aGluIHRoZSBgbmV0L3hmcm0vYCwgYG5ldC9pcHY0L2AsIGBuZXQvaXB2Ni9gLCBhbmQgYG5ldC9rZXkvYCBkaXJlY3Rvcmllcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoZXNlIHNlZW0gdG8gYmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdGluZyB0aGUgWEZSTSAoSVBzZWMpIHN1YnN5c3RlbS4gR29vZCwgSSBsaWtlIHRoYXQ7IGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwsIG5vIGRvdWJ0LiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGJlZW4gbW9kaWZpZWQuXG5cbiogICBgaW5jbHVkZS9uZXQveGZybS5oYDogQm91bmRzIGNoZWNrcyBmb3IgYGFkZHJfbWF0Y2hgIGFuZCBgYWRkcjRfbWF0Y2hgIGFyZSBhIGdvb2QgdGhpbmcuIFByZXZlbnRpbmcgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aCBgcHJlZml4bGVuYCBpcyBhIHNpbXBsZSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBvZnRlbiBvdmVybG9va2VkLiBVc2luZyBgUkVBRF9PTkNFYCBmb3IgYG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudGAgYW5kIGBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdGAgc3VnZ2VzdHMgcG90ZW50aWFsIGxvY2tsZXNzIGFjY2VzcyBvcHRpbWl6YXRpb24sIGFuZCBpdCdzIG5pY2UgdG8gc2VlLlxuKiAgIGBuZXQvaXB2NC94ZnJtNF9pbnB1dC5jYCBhbmQgYG5ldC9pcHY2L3hmcm02X2lucHV0LmNgOiBSZW1vdmluZyB0aGF0IGBkZXZfcHV0YCBpbiBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAgYW5kIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoYC4uLiBIbW0sIEkgd29uZGVyIGFib3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgYGRldl9wdXRgLiBJcyB0aGlzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIG9yIHBvdGVudGlhbCBkb3VibGUtZnJlZXM/IE5lZWRzIHNvbWUgZGVlcGVyIGludmVzdGlnYXRpb24sIGJ1dCB0aGUgbG9naWMgbWlnaHQgYmUgcHJvYmxlbWF0aWMuXG4qICAgYG5ldC9rZXkvYWZfa2V5LmNgOiBBZGRpbmcgYHgtXHUwMDNlY2FsZy1cdTAwM2VhbGdfa2V5X2xlbiA9IDA7YCBpbiBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgIGxvb2tzIGxpa2UgYSBrZXkgbGVuZ3RoIHplcm9pbmcgb3V0LiBJcyB0aGlzIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha2FnZSwgb3Igd2hhdD9cbiogICBgbmV0L3hmcm0vZXNwaW50Y3AuY2A6IFJlZmFjdG9yaW5nIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYCB0byB1c2UgYHNrX21zZ19mcmVlX3BhcnRpYWxgIGlzIGxpa2VseSBhbiBlZmZpY2llbmN5IGdhaW4sIGF2b2lkaW5nIHRoZSBmdWxsIHNrYiBmcmVlLlxuKiAgIGBuZXQveGZybS94ZnJtX2lucHV0LmNgOiBBZGp1c3RpbmcgYGRldl9wdXRgIGFuZCBgcmN1X3JlYWRfbG9ja2AgbG9naWMgaW4gYHhmcm1faW5wdXRgIGlzIGludGVyZXN0aW5nLiBUaGUgYHJjdV9yZWFkYCBzdHVmZiBuZWVkcyBjYXJlZnVsIGF0dGVudGlvbjsgUkNVIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBhcmVhIGZvciBjb250ZW50aW9uLlxuKiAgIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYDogQWRkaW5nIGZhbWlseSBjaGVjayBpbiBgeGZybV9zZWxlY3Rvcl9tYXRjaGAgaXMgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgbWF5YmUgc29tZXRoaW5nIG1pc3NlZCBvcmlnaW5hbGx5LCBhbmQgaXQncyBnb29kIHRvIHNlZS4gVGhlIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgZm9yIHBvbGljeSBjb3VudHMgYW5kIGRlZmF1bHRzIGlzIHByb2JhYmx5IHRoZSBzYW1lIGFzIGB4ZnJtLmhgLCBtYWtpbmcgdGhlIGFjY2VzcyBzYWZlci5cbiogICBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYDogYGxvY2tkZXBfYXNzZXJ0X2luX3NvZnRpcnEoKWAgaW4gYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCBpcyBhIGxvY2tkZXAgYWRkaXRpb24sIGFuZCByZW1vdmluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBzdWdnZXN0cyBhIGRpZmZlcmVudCBsb2NraW5nIHN0cmF0ZWd5LiBUaGUgYHNwaW5fbG9ja19iaGAgdG8gYHNwaW5fbG9ja2AgY2hhbmdlIG5lZWRzIGNvbnRleHQuIEFuZCB0aGF0IGBJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpYCBjaGVjayB0byBgaW5fY29tcGF0X3N5c2NhbGwoKWAgaXMgcmVsYXRlZCB0byB0aGUgY29tcGF0aWJpbGl0eSBmb3IgYWxpZ25tZW50LCBhbmQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGl0IHRvIGRldGVybWluZSBpdHMgbmVjZXNzaXR5IGhlcmUuXG4qICAgYG5ldC94ZnJtL3hmcm1fdXNlci5jYDogTW9yZSBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIHVzYWdlIGZvciBwb2xpY3kgZGVmYXVsdHMsIGdvb2QuIEFuZCB0aGUgc2FtZSBgSVNfRU5BQkxFRGAgY2hlY2sgYXMgaW4gYHhmcm1fc3RhdGUuY2AsIGFuZCBhZ2FpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYy5cblxuQWxyaWdodCwgc28gdGhlIG1ham9yIGNoYW5nZSBpcyBYRlJNIChJUHNlYykuIFRpbWUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkga25vdyBgQ09ORklHX1hGUk1gIGVuYWJsZXMgdGhlIFhGUk0gY29yZS4gYENPTkZJR19YRlJNX0VTUElOVENQYCBpcyBvYnZpb3VzbHkgZm9yIGBlc3BpbnRjcC5jYC4gYENPTkZJR19ORVRfS0VZYCBoYW5kbGVzIGBuZXQva2V5L2FmX2tleS5jYC4gYG5ldC9pcHY0L3hmcm00X2lucHV0LmNgLi4uIHRoYXQncyBwcm9iYWJseSByZWxhdGVkIHRvIEVTUCwgYnV0IEkgc2hvdWxkIGxvb2sgYXQgYWxsIHRoZSBkZXBlbmRlbmNpZXMuIGBDT05GSUdfWEZSTV9VU0VSYCBjb3ZlcnMgYHhmcm1fdXNlci5jYCwgb2YgY291cnNlLiBMZXQncyBmaXJlIHVwIHNvbWUgY29uZmlnIHRvb2xzIGFuZCBnZXQgdGhpcyByaWdodC4gSSBuZWVkIHRvIGJlIHN1cmUgSSBhbSB0ZXN0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODczNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjAwLjgxNTI4NzA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMjk4MDA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3BpbnRjcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjowMC45MDc1OTI2OTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTgzOTcyNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgWEZSTSBNYWtlZmlsZSBmb3IgYGVzcGludGNwYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGBlc3BpbnRjcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIFhGUk0gcG9ydGlvbiBvZiB0aGUga2VybmVsLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG5ldC94ZnJtL2AgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIEl04oCZcyB0aGUgY2VudHJhbCBodWIgZm9yIGhvdyBYRlJNIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHNvIGl0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGRpcmVjdGl2ZXMgcmVnYXJkaW5nIGFueSBzcGVjaWZpYyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBgZXNwaW50Y3BgLiBJJ2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciB0aGF0IHN0cmluZyB3aXRoaW4gdGhlIE1ha2VmaWxlIHRvIHNlZSB3aGF0IHBvcHMgdXAuIFRoaXMgYXBwcm9hY2ggd2lsbCBxdWlja2x5IHJldmVhbCBob3cgYGVzcGludGNwYCBpcyBpbnRlZ3JhdGVkIG9yIGRlZmluZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIHByb3ZpZGluZyB2YWx1YWJsZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgWEZSTSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6MDUuODkxNTY3Mzk0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDA0MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0geGZybV9zdGF0ZV9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjowNS45OTA5NzgyODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDEzMDA2NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBFU1AgaW4gVENQIEVuY2Fwc3VsYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgcHV6emxlIHBpZWNlIEkgbmVlZCB0byBsb29rIGF0IGhlcmUgaXMgZGVmaW5pdGVseSBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgLiBUaGF0J3MgYSBrZXkgc2V0dGluZy4gSXQgbWVhbnMgSSdtIHdvcmtpbmcgd2l0aCBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgKEVTUCkgYW5kIGl0J3MgYmVpbmcgdHJhbnNwb3J0ZWQgKndpdGhpbiogVENQLiBOb3csIHdoYXQncyByZWxhdGVkIHRvIHRoaXM/IEkgaGF2ZSB0byBjb25zaWRlciBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgd2lkZXIga2VybmVsIHNlY3VyaXR5IGFyY2hpdGVjdHVyZS5cblxuTGV0IG1lIHRoaW5rLi4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBuZXQva2V5L2FmX2tleS5jYD8gVGhhdCBzZWVtcyBsaWtlIGFuIG9idmlvdXMgcGxhY2UgdG8gY2hlY2sgZm9yIGFueSBob29rcyBvciBpbnRlcmFjdGlvbnMsIHNpbmNlIGl0IGRlYWxzIHdpdGgga2V5IG1hbmFnZW1lbnQgYW5kIHRoZSBjb3JlIHNlY3VyaXR5IGZyYW1ld29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgaW4gYGFmX2tleS5jYCBtaWdodCBiZSBpbnZvbHZlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzdHJ1Y3R1cmVzLCBvciBkYXRhIGZsb3dzIHRoYXQgcGVydGFpbiB0byB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIG1vZGlmaWVzIG9yIGFmZmVjdHMgYW55IG9mIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGtleSBoYW5kbGluZyBvciBpZiBpdCB1dGlsaXplcyBpdCBkaXJlY3RseS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggbW9kdWxlIHV0aWxpemVzIHdoaWNoIGNvZGUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgb2YgYm90aCBvZiB0aG9zZSBmaWxlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXkgZml0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDczNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjE1LjQwMzk4NjUxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3NTcyMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfa2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9rZXkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2tleS9NYWtlZmlsZS01LVxcbm5ldC9rZXkvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0tFWSkgKz0gYWZfa2V5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6MTUuNTA3NzcyMzM5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxODkzODk5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBTZWN1cml0eSBDb251bmRydW1zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSdtIHRoaW5raW5nIGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBDT05GSUdfTkVUX0tFWWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuXCIgVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGZvdW5kYXRpb24uIEkgbmVlZCB0aGF0IGVuYWJsZWQuIEJ1dCBpdCBiZWdzIHRoZSBxdWVzdGlvbiwgaWYgdGhhdCdzIHRoZSBiYXNlIHJlcXVpcmVtZW50LCBob3cgYXJlIHRoaW5ncyBiZWluZyBoYW5kbGVkLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGEgY3J1Y2lhbCBjb21wb25lbnQ6IGB4ZnJtX3VzZXIuY2AuICBJJ20gYXNraW5nIG15c2VsZiwgKmhvdyogaXMgdGhpcyBtb2R1bGUgYmVpbmcgZW1wbG95ZWQgaW4gdGhlIHJlbGV2YW50IHVzZSBjYXNlPyBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGlzIGZpbGU/IElzIGB4ZnJtX3VzZXIuY2AgYmVpbmcgdXNlZCBhcyBleHBlY3RlZCBoZXJlPyBJcyBpdCBwcm9wZXJseSBpbnRlZ3JhdGluZyB3aXRoIHRoZSBrZXlpbmcgbWF0ZXJpYWw/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHN1YnRsZSBtaXNjb25maWd1cmF0aW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgc3RlbW1pbmcgZnJvbSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgQ09ORklHX05FVF9LRVlgIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBpbXBsZW1lbnRlZCBpbiB0aGF0IHVzZXItc3BhY2UgaW50ZXJmYWNlPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB0cmFjZSBob3cga2V5aW5nIG1hdGVyaWFsIGlzIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUga2V5aW5nIHN1YnN5c3RlbSwgdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiBpcyBlZmZlY3RpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjI1LjY5NzE2NDY2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MDkwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSArPSB4ZnJtX2FsZ28ub1xcbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICs9IHhmcm1fdXNlci5vXFxubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICs9IHhmcm1fY29tcGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6MjUuOTE0MjYyMDAxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0OTAzOTI3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBYRlJNIEtlcm5lbCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uICpDT05GSUdfWEZSTV9VU0VSKiBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBJIGtub3cgdGhhdCBtdWNoLiBUaGlzIGlzIGEgY29yZSBidWlsZGluZyBibG9jay4gTm93LCB3aGVyZSBhcmUgd2Ugd2l0aCB0aGUgaW5wdXQgcGF0aD8gTGV0IG1lIHRoaW5rLi4uIHdoYXQgYWJvdXQgKnhmcm1faW5wdXQuYyo/IFRoYXQgZmlsZSBmZWVscyBsaWtlIGl0J3MgZ29pbmcgdG8gYmUgY2VudHJhbCB0byB3aGF0IEknbSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiB0aGV5IGFycml2ZS4gVGhhdCBmaWxlIGlzIHByb2JhYmx5IGtleSB0byBob3cgdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgc2V0IHVwIGFuZCB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjUwLjgxODE5MTgzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNTc3MTY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTU6XFx0XFx0ICAgICAgeGZybV9pbnB1dC5vIHhmcm1fb3V0cHV0Lm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE2LVxcdFxcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6NTIuNTUzOTcwMTU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY0NDM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgQ09ORklHX1hGUk1gIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIHRoZSBiYXNlbGluZSBmb3IgYW55IFhGUk0tcmVsYXRlZCBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0J3MgZXhwZWN0ZWQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGZlYXR1cmUgSSdtIHdvcmtpbmcgd2l0aCwgc28gbGV0J3MgY2hlY2sgb24gdGhlIGBDT05GSUdfWEZSTV9FU1BJTlRDUGAgb3B0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBpbiBgbmV0L3hmcm0vS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gcGluIGRvd24gcHJlY2lzZWx5IGhvdyBpdCdzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtYXkgZGVwZW5kIG9uLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODIzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6NTYuNzAwNDE3MDI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU0NDY1MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjU5LjQ1NDg4Nzg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTQ5NDc2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWx2aW5nIGludG8gWEZSTV9FU1BJTlRDUCoqXG5cblJpZ2h0LCBzbyBgWEZSTV9FU1BJTlRDUGAuLi4gYSBib29sZWFuLCBsaWtlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgY29udHJvbGxlZCBieSBzb21lIG90aGVyIHNldHRpbmcuIEkgc3VzcGVjdCBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgYmFjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmbGFnIGlzIGRlZmluZWQgYW5kIGhvdyBpdHMgdmFsdWUgaXMgZGV0ZXJtaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yazsgd2hhdCBkb2VzIGl0IGltcGFjdCwgYW5kIHdoYXQgdHJpZ2dlcnMgaXRzIHNldHRpbmc/IFRoaXMgaXNuJ3QganVzdCBhIHJhbmRvbSBib29sZWFuOyBpdCBoYXMgaW1wbGljYXRpb25zLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRob3NlIGltcGxpY2F0aW9ucyB0byBmdWxseSBjb21wcmVoZW5kIGl0cyBpbnRlbmRlZCBmdW5jdGlvbi4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgZW5jYXBzdWxhdGlvbiwgYW5kIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJvdG9jb2xzIG9yIG1lY2hhbmlzbXMgaXQncyB3b3JraW5nIHdpdGguIFRpbWUgdG8gZGlzc2VjdCB0aGUgY29kZWJhc2UgYW5kIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTUwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTc6MDQuNzY5ODM5ODE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkxNzkwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODYtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWc6Mzg3OlxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTc6MDcuNTYxNjM4MTE4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTU4NzM4MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgTmV0d29yayBTZWN1cml0eSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEVTUCBpbiBUQ1AgYXJlIGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGVzZSB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsga2V5IGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYENPTkZJR19ORVRfS0VZYCBvcHRpb24gaW4gdGhlIGBuZXQva2V5L0tjb25maWdgIGZpbGUuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgRVNQIG92ZXIgVENQIGZlYXR1cmVzIGludGVncmF0ZSB3aXRoaW4gdGhlIGxhcmdlciBuZXR3b3JrIHNlY3VyaXR5IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzozMC41MjAzODE0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODU0NTc1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9LRVlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMTEtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTI6Y29uZmlnIE5FVF9LRVlcXG5uZXQveGZybS9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiUEZfS0VZIHNvY2tldHMgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjQtXFxubmV0L3hmcm0vS2NvbmZpZzoxMjU6Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI2LVxcdGJvb2wgXFxcIlBGX0tFWSBNSUdSQVRFXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzozMy4zMDU4NDQ0NDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4MTk1MjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGVjaXBoZXJpbmcgdGhlIENvbmZpZ3VyYXRpb24gQ2x1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IHRoaW5nIGhlcmUgc2VlbXMgdG8gYmUgYE5FVF9LRVlgLiBUaGF0J3MgbGlrZWx5IHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3Iga2V5aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBlbnRhaWxzIGluIHRlcm1zIG9mIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBMZXQgbWUgc2VlIHdoYXQgYENPTkZJR19YRlJNX1VTRVJgIGxvb2tzIGxpa2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0IHRpZXMgaW50byBob3cgdGhpcyBgTkVUX0tFWWAgaXMgc2V0LiBXaGVyZSBkb2VzIHRoaXMgZ28gYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTEwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTc6MzguMjg3ODAwMzY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3NDU5MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTMxLVxcbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5uZXQveGZybS9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzo0MC41MTUyNjQyNzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzNDc5NTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqWEZSTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYFhGUk1fVVNFUmAgY29uZmlndXJhdGlvbiBvcHRpb24gcmlnaHQgbm93LiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBrZXkgZm9yIHVzZXItc3BhY2UgY29udHJvbCwgcmlnaHQ/IE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1hGUk1gIGl0c2VsZiBpcyBlbmFibGVkLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb25hbCBYRlJNIGZyYW1ld29yayBpcyBldmVuIHRoZXJlIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSB1c2VyLXNwYWNlIHNwZWNpZmljcy4gSXQncyB0aGUgcHJlLXJlcXVpc2l0ZSwgcmVhbGx5LiBHb3R0YSB3YWxrIGJlZm9yZSBJIGNhbiBydW4sIGFuZCBhbGwgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzo0NS41NTAwNjMyNTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTM4MjM4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzo0Ny43NDM4OTgxMTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NDQzMzk5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gUG9uZGVyaW5ncyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgYFhGUk1gIGJvb2wsIGFuZCBteSBndXQgcmVhY3Rpb24gaXMgdGhhdCBpdCdzIHByb2JhYmx5IGJlaW5nIGJyb3VnaHQgaW50byB0aGUgbWl4IGJ5IGVpdGhlciBgSU5FVF9FU1BgIG9yIHBvc3NpYmx5IHRocm91Z2ggYFhGUk1fVVNFUmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuXG5cbk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVGAuIFRoYXQgc2V0dGluZyBvZnRlbiBiaXRlcyBtZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB1c2Vyc3BhY2UgYW5kIDY0LWJpdCBhbGlnbmVkIHN0cnVjdHVyZXMuIFRoZXJlIGNvdWxkIGJlIHNvbWUgaW50ZXJhY3Rpb24gdGhlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgYWxpZ25tZW50IGlzIGhhbmRsZWQgY29ycmVjdGx5IGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLCBvciBJJ20gaW4gZm9yIGEgd29ybGQgb2YgcGFpbiBkb3duIHRoZSBsaW5lLiBUaGF0J3MgYSBrZXkgcG90ZW50aWFsIHBpdGZhbGwgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MDAuMzg4MjQ2OTM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE1MzA1ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MzE2Nj1jb25maWcgQ09NUEFUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTMxNjktXFxuYXJjaC94ODYvS2NvbmZpZzozMTcwOmNvbmZpZyBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlRcXG5hcmNoL3g4Ni9LY29uZmlnLTMxNzEtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxODowMy4wMDM1NTc3NDhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3ODE1ODc3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgaXMgY29udHJvbGxlZCBieSBhIGJvb2xlYW4sIGxpa2VseSBnYXRlZCBieSBgQ09NUEFUYC4gUmlnaHQsIHNvIHRoYXQgbWVhbnMgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGFyZTogYElORVRfRVNQSU5UQ1BgLCBgSU5FVDZfRVNQSU5UQ1BgLCBgTkVUX0tFWWAsIGFuZCBgWEZSTV9VU0VSYC4gTWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGxpa2VseSBpbnRlcmFjdGlvbiB3aXRoIElQU2VjIGFuZCByZWxhdGVkIGtlcm5lbCBmZWF0dXJlcy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXMuIExvb2tzIGxpa2UgaXQgbW9kaWZpZXMgYSBkZWNlbnQgY2h1bmsgb2YgdGhlIGB4ZnJtYCBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRvIGlubGluZSBmdW5jdGlvbnMgbGlrZSBgYWRkcl9tYXRjaGAsIGBhZGRyNF9tYXRjaGAsIGBfX3hmcm1fY2hlY2tfbm9wb2xpY3lgLCBhbmQgYHhmcm1fcm91dGVfZm9yd2FyZGAuIEl0IGFsc28gaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGZ1bmN0aW9ucyBsaWtlIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCwgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLCBhbmQgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYC4gVGhlIGxpc3QgZ29lcyBvbiwgdG91Y2hpbmcgYSBsb3Qgb2YgZnVuZGFtZW50YWwgcGllY2VzIG9mIHRoZSB4ZnJtIHN0YWNrLiBJJ20gc2VlaW5nIHN0dWZmIGxpa2UgYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgLCBgeGZybV9pbnB1dGAsIGB4ZnJtX3NlbGVjdG9yX21hdGNoYCwgYHhmcm1fc3BkX2dldGluZm9gLCBwbHVzIGEgYnVuY2ggb2YgcG9saWN5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGxpa2UgYF9feGZybV9wb2xpY3lfbGlua2AsIGBfX3hmcm1fcG9saWN5X3VubGlua2AsIGFuZCBtb3JlLiBUaGVyZSdzIGFsc28gYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAsIGBfX3hmcm1fcG9saWN5X2NoZWNrYCwgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCwgYW5kIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gZnVuY3Rpb25zOiBgeGZybV91c2VyX3BvbGljeWAsIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGFuZCBgeGZybV91c2VyX3Jjdl9tc2dgLlxuXG5UaGF0J3MgYSBsb3QgdG8gZGlnZXN0LiBMZXQgbWUgZmlsdGVyIHRoaXMgbGlzdCBkb3duLiBPa2F5LCBgeGZybV9pbnB1dGAgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoIGFuZCBpdCdzIGhlYXZpbHkgbW9kaWZpZWQgaGVyZSwgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBmb2N1cy4gYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBhcyBpdCBpcyBsaWtlbHkgYSBsb3dlci1sZXZlbCBmdW5jdGlvbi4gVGhlbiwgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBpcyBvbiB0aGUgaW50ZXJmYWNlLiBBbHNvLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYW5kIGB4ZnJtX3VzZXJfcmN2X21zZ2AgYXJlIGltcG9ydGFudCBmdW5jdGlvbnMgYXMgd2VsbC4gSSB0aGluayBgeGZybV91c2VyX3BvbGljeWAgaXMgYSBwb2ludCBvZiBjb25jZXJuLCBhbmQgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCB3aWxsIGJlIGltcG9ydGFudC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBvbmUgb3V0IGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MTkuNzg1MTQ5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxODY1NjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTExNzU9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAwLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMjAxOnN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAyLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjUyLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTI1MzpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTI1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MjEuNTAzODEwMDQ2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MDQ1NDAzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgIGluIGBuZXQveGZybS9lc3BpbnRjcC5jYDpcblxuKipEZWVwIERpdmUgaW50byBFU1AtaW4tVENQJ3MgTG9ja2VkIFNlbmQgUGF0aCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGhpbnRzIGF0IHNvbWUgaW50ZXJlc3RpbmcgdGhpbmdzOiBcIkVTUC1pbi1UQ1BcIiBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIElQc2VjIHRyYWZmaWMgb3ZlciBUQ1AsIHdoaWNoIGJyaW5ncyB3aXRoIGl0IGEgd2hvbGUgc2xldyBvZiBjb25zaWRlcmF0aW9ucyBhcm91bmQgTVRVIG1hbmFnZW1lbnQsIHNlcXVlbmNpbmcsIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdHJhbnNwb3J0IGFuZCBzZWN1cml0eSBsYXllcnMuIFRoZSBcInNlbmRza21zZ1wiIHBhcnQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UgYXJlIGluIHRoZSBwYXRoIG9mIHNlbmRpbmcgYSBzb2NrZXQgbWVzc2FnZSwgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGEgZGF0YSB0cmFuc2Zlci4gQW5kLCB0aGUgXCJsb2NrZWRcIiBwYXJ0IHN1Z2dlc3RzIHdlJ3JlIG9wZXJhdGluZyB3aXRoaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBwb3RlbnRpYWxseSBwcm90ZWN0ZWQgYnkgYSBtdXRleCBvciBzcGlubG9jay4gVGhpcyBpbXBsaWVzIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIGFyZSBhdCBwbGF5LCBtYWtpbmcgdGhyZWFkIHNhZmV0eSBhIHByaW1lIGNvbmNlcm4uXG5cbk5vdywgbXkgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHNwZWNpZmljcyBvZiBlbmNhcHN1bGF0aW5nIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKSBwYWNrZXRzIGluc2lkZSBUQ1AuIEknbGwgbmVlZCB0byBsb29rIGZvciBob3cgdGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzb3VyY2UgZGF0YSwgaG93IGl0IGNhbGN1bGF0ZXMgYW5kIGFkZHMgdGhlIG5lY2Vzc2FyeSBFU1AgaGVhZGVycywgaG93IGl0IHNldHMgdXAgdGhlIFRDUCBwYXlsb2FkLCBhbmQgaG93IGl0IGZpbmFsbHkgdHJhbnNtaXRzIHRoZSBkYXRhIG92ZXIgdGhlIG5ldHdvcmsuIEknbGwgbmVlZCB0byBub3RlIGFueSBzcGVjaWZpYyBsb2dpYyBmb3IgaGFuZGxpbmcgZnJhZ21lbnRlZCBFU1AgZGF0YWdyYW1zIG9yIHJlYXNzZW1ibHkgaWYgbmVlZGVkLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIFhGUk0gKHRoZSBJUHNlYyBmcmFtZXdvcmspLCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbnRlcmZhY2Ugd2l0aCB0aGUgWEZSTSBzdWJzeXN0ZW0gdG8gaGFuZGxlIHRoZSBhY3R1YWwgRVNQIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgY29udGVudGlvbiBwb2ludHMgd2l0aGluIHRoZSBmdW5jdGlvbi4gQXJlIHRoZXJlIGFueSBvcGVyYXRpb25zIHRoYXQgY291bGQgYmxvY2sgb3IgaW50cm9kdWNlIGxhdGVuY3k/IEFuZCBob3cgaXMgdGhpcyBjcml0aWNhbCBzZWN0aW9uIG1hbmFnZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBJUHNlYyBvcGVyYXRpb25zP1xuXG5NeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbiB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBFU1AgYW5kIFRDUCBoZWFkZXIgbWFuaXB1bGF0aW9uIGhhcHBlbnMuIEnigJlsbCBrZWVwIGEgbG9va291dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoYXQgaGFwcGVucyBpZiBlbmNyeXB0aW9uIGZhaWxzLCBvciBpZiB0aGUgdHJhbnNtaXNzaW9uIGl0c2VsZiBmYWlscy4gT3ZlcmFsbCwgSSB3YW50IHRvIG1hcCBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBFU1AtaW4tVENQIGNvbW11bmljYXRpb24sIGFuZCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIG9wdGltaXphdGlvbiBvciBmdXJ0aGVyIHNjcnV0aW55LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTU3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MjkuMDA4MzUzMjg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTkzNjcxMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmM9MTg1PXN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZHNrYl9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnLFxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yMDUtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMDY6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTIwNy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csIGludCBmbGFncylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9MjM4PXN0YXRpYyBpbnQgZXNwaW50Y3BfcHVzaF9tc2dzKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNTMtXFx0ZWxzZVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MjU0OlxcdFxcdGVyciA9IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc2ssIGVtc2csIGZsYWdzKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTI1NS1cXHRpZiAoZXJyID09IC1FQUdBSU4pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MjkuMzA3NzI1NDQ3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMjc5MDQyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBJUHNlYyBIYW5kbGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIElQc2VjIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgdGhlIGtlcm5lbCB0cmFuc2xhdGVzIGEgUEZfS0VZIG1lc3NhZ2UgaW50byBhbiBYRlJNIHN0YXRlIGNoYW5nZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gc3RhcnQgd2l0aCBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgLiBMZXQncyBuYXZpZ2F0ZSB0byBgbmV0L2tleS9hZl9rZXkuY2AgYW5kIHRha2UgYSBsb29rLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHJhdyBQRl9LRVkgbWVzc2FnZXMgYXJlIHVucGFja2VkIGFuZCB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc2VjdXJpdHkgYXNzb2NpYXRpb25zIGFuZCBwb2xpY2llcyB3aXRoaW4gdGhlIGtlcm5lbCdzIFhGUk0gKGVYdGVybmFsIEZpcmV3YWxsIGFuZCBSb3V0aW5nIE1lY2hhbmlzbSkgZnJhbWV3b3JrLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIGtleSBleGNoYW5nZXMgYXJlIGludGVycHJldGVkIGFuZCBob3cgdGhlIGRhdGEgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGJ1aWxkIChvciBtb2RpZnkpIGEgc3RhdGUgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSdtIGFsc28gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGlzIGNvZGUgcGF0aCAtIHRoZXNlIGFyZSBvZnRlbiBrZXkgdG8gdW5kZXJzdGFuZGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MzguMzM1NjMyNzQ2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzIwMzgxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGZrZXlfbXNnMnhmcm1fc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2tleS9hZl9rZXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQva2V5L2FmX2tleS5jPTEwNjk9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqcGZrZXlfeGZybV9zdGF0ZTJtc2dfZXhwaXJlKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2tleS9hZl9rZXkuYy0xMDc0LVxcbm5ldC9rZXkvYWZfa2V5LmM6MTA3NTpzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKiBwZmtleV9tc2cyeGZybV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2tleS9hZl9rZXkuYy0xMDc2LVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzYWRiX21zZyAqaGRyLFxcbi0tXFxubmV0L2tleS9hZl9rZXkuYz0xNTE0PXN0YXRpYyBpbnQgcGZrZXlfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNhZGJfbXNnICpoZHIsIHZvaWQgKiBjb25zdCAqZXh0X2hkcnMpXFxuLS1cXG5uZXQva2V5L2FmX2tleS5jLTE1MjAtXFxubmV0L2tleS9hZl9rZXkuYzoxNTIxOlxcdHggPSBwZmtleV9tc2cyeGZybV9zdGF0ZShuZXQsIGhkciwgZXh0X2hkcnMpO1xcbm5ldC9rZXkvYWZfa2V5LmMtMTUyMi1cXHRpZiAoSVNfRVJSKHgpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxODozOC43MDc2NzY2MDdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2ODg4MDAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8geGZybV9zZXRfZGVmYXVsdCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGB4ZnJtX3NldF9kZWZhdWx0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG5hdmlnYXRlIHN0cmFpZ2h0IHRvIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkZWZhdWx0cyBhcmUgYmVpbmcgaGFuZGxlZCBmcm9tIHRoZSB1c2VyIHNwYWNlIHBlcnNwZWN0aXZlLCB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIGludGVuZGVkIGZsb3cgaXMgYXMgZXhwZWN0ZWQuIFRoaXMgd2lsbCBnaXZlIGEgZ29vZCBncm91bmRpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGV4cGVjdGVkIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxODo0NS45NzY1NjA2ODJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjAzNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2V0X2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MjUwMT1zdGF0aWMgYm9vbCB4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQoX191OCBwb2xpY3kpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTA2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1MDc6c3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MDgtXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzM4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDE4LVxcdFtYRlJNX01TR19HRVRTUERJTkZPICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X3NwZGluZm8gICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0MTk6XFx0W1hGUk1fTVNHX1NFVERFRkFVTFQgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9zZXRfZGVmYXVsdCAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQyMC1cXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6NDYuMDU5MTcwNzg5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzI4MjcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIFN1YnN5c3RlbSdzIERlZmF1bHQgUG9saWN5IFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgdGhlIGRlZmF1bHQgcG9saWN5IHdpdGhpbiB0aGUgWEZSTSAoSVBzZWMpIGZyYW1ld29yay4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIHRoaXMgZGVmYXVsdCBwb2xpY3kuIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byBgbmV0L3hmcm0veGZybV91c2VyLmNgLCBhcyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHJlc2lkZSBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRgIHNvdW5kcyBsaWtlIGEgcHJvbWlzaW5nIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgZGVmYXVsdCBwb2xpY3kgYmVoYXZpb3IuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6NTEuMDMyMDAwNzUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTgyNTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2dldF9kZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTI1MDc9c3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjUyNy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTI4OnN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTI5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzODM9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQxOS1cXHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDIwOlxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6NTEuMTIxODMzN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjcyMzk2Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIFVzZXIgUmVjZWl2ZSBNZXNzYWdlIEhhbmRsaW5nKipcblxuT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB1c2VyLXNwYWNlIFhGUk0gbWVzc2FnZXMgYXJlIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgeGZybV91c2VyX3Jjdl9tc2dgIHdpdGhpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBYRlJNIHRvb2xzIGFuZCB0aGUga2VybmVsJ3MgWEZSTSBzdWJzeXN0ZW0gZm9yIGluYm91bmQgZGF0YS4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzb2NrZXQgcmVhZCBhbmQgdW5wYWNrcyB0aGUgdXNlci1wcm92aWRlZCBkYXRhLiBJIGV4cGVjdCBpdCdzIHRoZSBnYXRld2F5IGZvciB2YXJpb3VzIFhGUk0gb3BlcmF0aW9ucywgbGlrZSBzZXR0aW5nIHVwIHBvbGljaWVzLCBzdGF0ZXMsIGFuZCBtYXliZSBldmVuIGtleSBtYW5hZ2VtZW50LiBJJ20gYW50aWNpcGF0aW5nIHRvIHNlZSBhcmd1bWVudCB2YWxpZGF0aW9uLCBzZWN1cml0eSBjaGVja3MsIGFuZCwgb2YgY291cnNlLCB0aGUgYWN0dWFsIGRpc3BhdGNoIHRvIHRoZSByZWxldmFudCBoYW5kbGVycyBiYXNlZCBvbiB0aGUgbWVzc2FnZSB0eXBlIOKAkyB3aGV0aGVyIGl0J3MgYSBwb2xpY3kgY3JlYXRpb24sIHN0YXRlIGFkZGl0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSByZWFsbHkgZGVhbGluZyB3aXRoIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM3NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE4OjU4LjM5NDIzMzIxNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4OTI4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyX3Jjdl9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzQyMz1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDU0LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0NTU6c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDU2LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzU0Mj1zdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ2LVxcdG11dGV4X2xvY2soXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX2NmZ19tdXRleCk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzU0NzpcXHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcXHUwMDI2eGZybV91c2VyX3Jjdl9tc2cpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDgtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxODo1OC40NzYxMzIxMDNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxMzUwNjIyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gUG9saWN5IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB1c2VyLXNwYWNlIHBvbGljaWVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgdGhlIGB4ZnJtX3VzZXJfcG9saWN5YCBmdW5jdGlvbi4gSXQncyBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBoZWFkLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlci1zdXBwbGllZCBwb2xpY3kgZW50cmllcyBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIFhGUk0gc3RhdGUgbWFuYWdlbWVudC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHk6IEhvdyBhcmUgdGhlc2UgcG9saWNpZXMgdmFsaWRhdGVkPyBIb3cgYXJlIHRoZXkgc3RvcmVkPyBIb3cgZG9lcyB0aGUgc3lzdGVtIHJlc29sdmUgdGhlbSB0byBhcHBseSBzZWN1cml0eSBhc3NvY2lhdGlvbnM/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiByZWdhcmRpbmcgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBtYWxpY2lvdXMgdXNlciBpbnB1dD8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBwb2xpY3kgaW1wbGVtZW50YXRpb24gd2lsbCBiZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOToxMC42MTExOTc0OTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzY1NjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3VzZXJfcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9Mjk2Mj1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX3VucmVnaXN0ZXJfdHJhbnNsYXRvcik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2NC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjk2NTppbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTY2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDIxLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MzAyMjpFWFBPUlRfU1lNQk9MKHhmcm1fdXNlcl9wb2xpY3kpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOToxMC45NzQ4NjI3ODRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwNDk1NjQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgSVB2NCBYRlJNIGlucHV0IHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhbnNwb3J0IGxheWVyIHByb2Nlc3Npbmcgd3JhcHMgdXAgaW4gdGhlIGNvbnRleHQgb2YgSVBzZWMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAgbG9jYXRlZCBpbiBgbmV0L2lwdjQveGZybTRfaW5wdXQuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIExldCdzIHRyYWNlIHRocm91Z2ggdGhlIGxvZ2ljIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBmb2N1c2luZyBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFhGUk0gZnJhbWV3b3JrIGFuZCB0aGUgZXZlbnR1YWwgZGVsaXZlcnkgb3IgZHJvcCBvZiB0aGUgcGFja2V0LiBHb3R0YSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBwYXRocywgb2YgY291cnNlLiBJJ20gbG9va2luZyBmb3IgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgdHJhbnNwb3J0IGhlYWRlcnMgZ2V0IGhhbmRsZWQgYWZ0ZXIgSVBzZWMgcHJvY2Vzc2luZyBhbmQgd2hhdCB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIG91dGNvbWVzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOToxOS44Nzk4MjI2NzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTk0MjE0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfdHJhbnNwb3J0X2ZpbmlzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC94ZnJtNF9pbnB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3hmcm00X2lucHV0LmM9Mjk9c3RhdGljIGlubGluZSBpbnQgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNDgtXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYzo0OTppbnQgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXN5bmMpXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYy01MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjIxLjQ3OTI1MjA4NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDAyOTA1Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IFRyYW5zZm9ybWF0aW9uIEVuZ2luZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGUgaXNzdWUgaXMgcHJvYmFibHkgaW4gdGhlIGZpbmFsaXphdGlvbiBvZiB0aGUgSVB2NiB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoYCB3aXRoaW4gYG5ldC9pcHY2L3hmcm02X2lucHV0LmNgLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGtleSBwaWVjZSBpbiBjbGVhbmluZyB1cCBhbmQgZmluYWxpemluZyBhIHByb2Nlc3NlZCBJUHY2IHBhY2tldCwgc3BlY2lmaWNhbGx5IGFmdGVyIGl0J3MgYmVlbiB0aHJvdWdoIHZhcmlvdXMgWEZSTSB0cmFuc2Zvcm1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZGF0YSBwYXRoIOKAkyB3aGF0IGl0IGRvZXMgd2l0aCB0aGUgc2tiLCBhbnkgYXNzb2NpYXRlZCBzdGF0ZXMsIGFuZCBob3cgaXQgaGFuZHMgdGhpbmdzIG9mZiB0byB0aGUgbmV4dCBsYXllciBvciB0aGUgdXNlciBzcGFjZS4gSSdsbCBiZSBsb29raW5nIGNhcmVmdWxseSBhdCB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSwgdG9vLiBDb3VsZCBpdCBiZSBhIHJlc291cmNlIGNsZWFudXAgcHJvYmxlbSBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBob3cgdGhlIHNrYiBpcyBiZWluZyBoYW5kbGVkIHBvc3QtdHJhbnNmb3JtPyBUaGlzIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTk6MjcuODgyMTU5OTcyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTIwMjcwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTZfdHJhbnNwb3J0X2ZpbmlzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3hmcm02X2lucHV0LmM9MzA9RVhQT1JUX1NZTUJPTCh4ZnJtNl9yY3Zfc3BpKTtcXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTMxLVxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MzI6c3RhdGljIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoMihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTMzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTQyLVxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6NDM6aW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKVxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtNDQte1xcbi0tXFxubmV0L2lwdjYveGZybTZfaW5wdXQuYy03Mi1cXHRcXHRkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLFxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6NzM6XFx0XFx0eGZybTZfdHJhbnNwb3J0X2ZpbmlzaDIpO1xcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtNzQtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjI4LjI3NDIxOTIxMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcwOTY5Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gSW5wdXQgUGF0aCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBYRlJNIGlzc3VlLiBUaGUgbW9zdCBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIHRyb3VibGVzaG9vdGluZyB0aGlzIHBhcnRpY3VsYXIgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGUgYHhmcm1faW5wdXRgIGZ1bmN0aW9uLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBuZXQveGZybS94ZnJtX2lucHV0LmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBwcm9jZXNzZXMgaW5ib3VuZCBYRlJNIHRyYWZmaWMsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljIHdpdGhpbiBgeGZybV9pbnB1dGAgaXMgY3J1Y2lhbC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdHJhY2UgaG93IHRoZSBwYWNrZXRzIGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjMzLjE0NTE5MzEyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY1Mzk0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pbnB1dC5jLTItLypcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6MzogKiB4ZnJtX2lucHV0LmNcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNC0gKlxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jPTM0PXN0cnVjdCB4ZnJtX3RyYW5zX2NiIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00Ni1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDc6c3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX2lucHV0X2FmaW5mb19sb2NrKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDg6c3RhdGljIHN0cnVjdCB4ZnJtX2lucHV0X2FmaW5mbyBjb25zdCBfX3JjdSAqeGZybV9pbnB1dF9hZmluZm9bMl1bQUZfSU5FVDYgKyAxXTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNDktXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM9NTM9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB4ZnJtX3RyYW5zX3Rhc2tsZXQsIHhmcm1fdHJhbnNfdGFza2xldCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU0LVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo1NTppbnQgeGZybV9pbnB1dF9yZWdpc3Rlcl9hZmluZm8oY29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICphZmluZm8pXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy02MS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NjI6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4ZnJtX2lucHV0X2FmaW5mb19sb2NrKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NjM6XFx0aWYgKHVubGlrZWx5KHhmcm1faW5wdXRfYWZpbmZvW2FmaW5mby1cXHUwMDNlaXNfaXBpcF1bYWZpbmZvLVxcdTAwM2VmYW1pbHldKSlcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjQtXFx0XFx0ZXJyID0gLUVFWElTVDtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjUtXFx0ZWxzZVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo2NjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVxcdTAwM2Vpc19pcGlwXVthZmluZm8tXFx1MDAzZWZhbWlseV0sIGFmaW5mbyk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjY3OlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX2lucHV0X2FmaW5mb19sb2NrKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjgtXFx0cmV0dXJuIGVycjtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjktfVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo3MDpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfcmVnaXN0ZXJfYWZpbmZvKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzEtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjcyOmludCB4ZnJtX2lucHV0X3VucmVnaXN0ZXJfYWZpbmZvKGNvbnN0IHN0cnVjdCB4ZnJtX2lucHV0X2FmaW5mbyAqYWZpbmZvKVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03My17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzUtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc2OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2eGZybV9pbnB1dF9hZmluZm9fbG9jayk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc3OlxcdGlmIChsaWtlbHkoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVxcdTAwM2Vpc19pcGlwXVthZmluZm8tXFx1MDAzZWZhbWlseV0pKSB7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4OlxcdFxcdGNvbnN0IHN0cnVjdCB4ZnJtX2lucHV0X2FmaW5mbyAqY3VyO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03OS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODA6XFx0XFx0Y3VyID0gcmN1X2FjY2Vzc19wb2ludGVyKHhmcm1faW5wdXRfYWZpbmZvW2FmaW5mby1cXHUwMDNlaXNfaXBpcF1bYWZpbmZvLVxcdTAwM2VmYW1pbHldKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODEtXFx0XFx0aWYgKHVubGlrZWx5KGN1ciAhPSBhZmluZm8pKVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTgzLVxcdFxcdGVsc2VcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODQ6XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUih4ZnJtX2lucHV0X2FmaW5mb1thZmluZm8tXFx1MDAzZWlzX2lwaXBdW2FmaW5mby1cXHUwMDNlZmFtaWx5XSwgTlVMTCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1LVxcdH1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODY6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1faW5wdXRfYWZpbmZvX2xvY2spO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04Ny1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04OS19XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjkwOkVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF91bnJlZ2lzdGVyX2FmaW5mbyk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTkxLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICp4ZnJtX2lucHV0X2dldF9hZmluZm8odTggZmFtaWx5LCBib29sIGlzX2lwaXApXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTkzLXtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6OTQ6XFx0Y29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICphZmluZm87XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTk1LVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTk5LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6MTAwOlxcdGFmaW5mbyA9IHJjdV9kZXJlZmVyZW5jZSh4ZnJtX2lucHV0X2FmaW5mb1tpc19pcGlwXVtmYW1pbHldKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtMTAxLVxcdGlmICh1bmxpa2VseSghYWZpbmZvKSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz0xMDY9c3RhdGljIGludCB4ZnJtX3Jjdl9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZmFtaWx5LCB1OCBwcm90b2NvbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMDktXFx0Ym9vbCBpc19pcGlwID0gKHByb3RvY29sID09IElQUFJPVE9fSVBJUCB8fCBwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzoxMTA6XFx0Y29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICphZmluZm87XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTExMS1cXHRpbnQgcmV0O1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMTItXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjExMzpcXHRhZmluZm8gPSB4ZnJtX2lucHV0X2dldF9hZmluZm8oZmFtaWx5LCBpc19pcGlwKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtMTE0LVxcdGlmICghYWZpbmZvKVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jPTQzNT1zdGF0aWMgaW50IHhmcm1faW5uZXJfbW9kZV9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00NjUtICovXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjQ2NjppbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTQ2Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNDg2LVxcdFxcdFxcdFxcdCAgICAgIGVuY2FwX3R5cGUgPT0gVURQX0VOQ0FQX0VTUElOVURQKSkpIHtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDg3OlxcdFxcdHggPSB4ZnJtX2lucHV0X3N0YXRlKHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTQ4OC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01OTItXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjU5MzpcXHRcXHR4ID0geGZybV9pbnB1dF9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBkYWRkciwgc3BpLCBuZXh0aGRyLCBmYW1pbHkpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01OTQtXFx0XFx0aWYgKHggPT0gTlVMTCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc4Mi19XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4MzpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXQpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03ODQtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4NTppbnQgeGZybV9pbnB1dF9yZXN1bWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc4Ni17XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4NzpcXHRyZXR1cm4geGZybV9pbnB1dChza2IsIG5leHRoZHIsIDAsIC0xKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzg4LX1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6Nzg5OkVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9yZXN1bWUpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03OTAtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM9ODQ2PUVYUE9SVF9TWU1CT0woeGZybV90cmFuc19xdWV1ZSk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg0Ny1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODQ4OnZvaWQgX19pbml0IHhmcm1faW5wdXRfaW5pdCh2b2lkKVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOTozMy4yNDE3Mzg3NDZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMDUxMTU0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBQb2ludHMgZm9yIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYW5kIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBpbiB0aGUgWEZSTSBjb2RlIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkLiBgeGZybV9pbnB1dGAgaXMgY2FsbGVkIGJ5IGB4ZnJtNF9yY3ZgIGFuZCBgeGZybTZfcmN2YCwgYW5kIGl0J3MgZXhwb3J0ZWQsIHNvIHRoYXQncyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgaW50ZXJlc3QuIEknbGwgaW5jbHVkZSBpdCBpbiBGb2N1c1N5bWJvbHMsIHRob3VnaCBJIHdvbmRlciBpZiBpdCdzIHRvbyBicm9hZDsgdGhlIHBhdGNoIGRvZXMgbW9kaWZ5IGl0IGRpcmVjdGx5LCB3aGljaCBtYWtlcyBpdCBhIHN0cm9uZyBjb250ZW5kZXIuXG5cbmB4ZnJtX3VzZXJfcmN2X21zZ2AgaXMgZGVmaW5pdGVseSBjcnVjaWFsOyBpdCdzIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50LCBzbyBhbnkgY2hhbmdlcyB0aGVyZSB3b3VsZCBiZSBzaWduaWZpY2FudC4gSSdtIGFkZGluZyB0aGF0IHRvIHRoZSBsaXN0LiBJJ20gYWxzbyBwdXR0aW5nIGB4ZnJtX3NldF9kZWZhdWx0YCBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRgIG9uIHRoZSBsaXN0OyB0aGV5J3JlIGxpa2VseSB0b3VjaGVkLiBUaGVuIHRoZXJlJ3MgYHhmcm1fdXNlcl9wb2xpY3lgLCB0aGUgc29ja2V0IG9wdGlvbiBoYW5kbGVyLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZi4gSSdsbCBhZGQgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCwgYXMgd2VsbC5cblxuSSdtIGluY2x1ZGluZyBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAuIEZpbmFsbHksIEknbSBub3RpbmcgYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgIGFuZCBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaGAsIGFzIHRoZXkgbGlrZWx5IGFyZSBpbnZvbHZlZC5cblxuUmlnaHQsIHNvIHRvIGdldCBhIGdvb2Qgc2Vuc2Ugb2YgYHhmcm1fdXNlcl9wb2xpY3lgLCBJJ2xsIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBmb3Igc3RhcnRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjk4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjQzLjU0Njg1ODIwM1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg0NjQ1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdXNlcl9wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yOTYyPUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fdW5yZWdpc3Rlcl90cmFuc2xhdG9yKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTY0LVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTY1OmludCB4ZnJtX3VzZXJfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5NjYte1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjEtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMDIyOkVYUE9SVF9TWU1CT0woeGZybV91c2VyX3BvbGljeSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjQzLjkzMTUxMDA5M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDUwOTI5MDI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBJbnB1dCBTdGF0ZSBMb29rdXAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cGAgZnVuY3Rpb24gd2l0aGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCAqc2hvdWxkKiBoYXBwZW4sIGluIHRlcm1zIG9mIHJlc29sdmluZyBpbmJvdW5kIHNlY3VyaXR5IHBvbGljeSBsb29rdXBzLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBhbiBpc3N1ZSB3aXRoIGhvdyB0cmFmZmljIGlzIGJlaW5nIHByb2Nlc3NlZCBhbmQgSSB3YW50IHRvIHZlcmlmeSB0aGUgbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IGFzc29jaWF0aW9uIGZvciBpbmNvbWluZyBwYWNrZXRzLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgbWF0Y2hpbmcgb2YgaW5jb21pbmcgcGFja2V0cyB0byBleGlzdGluZyBYRlJNIHN0YXRlcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIGtleSBkZXJpdmF0aW9uIHByb2Nlc3MuIFRoZSBsb29rdXAgbGlrZWx5IGNvbnNpZGVycyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIHByb3RvY29sLCBTUEksIGFuZCBvdGhlciByZWxldmFudCBwYWNrZXQgaGVhZGVycy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgaG93IGl0IGhhbmRsZXMgd2lsZGNhcmRpbmcsIGlmIGFueS4gSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgZ2V0IHV0aWxpemVkLCBwYXJ0aWN1bGFybHkgdGhvc2UgaW52b2x2aW5nIHRoZSBYRlJNIHN0YXRlIGFuZCBpdHMgYXNzb2NpYXRlZCBrZXlzLiBUaGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmFyaW91cyBoYXNoIHRhYmxlcyBvciBvdGhlciBsb29rdXAgbWVjaGFuaXNtcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLCBsb2NraW5nLCBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBsb29rdXAgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIGJvdHRsZW5lY2tzIGluIHRoZSBvdmVyYWxsIGZsb3cuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIGJvdGggSVB2NCBhbmQgSVB2NiB0cmFmZmljLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcG9saWN5IG1pc2NvbmZpZ3VyYXRpb24gYXMgdGhhdCB3b3VsZCBsaWtlbHkgaGF2ZSBhIGhhbmQgaW4gdGhpcyBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0ODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOTo1NC40NDA4MDQ0NzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY5Njg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTExNzU9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAwLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMjAxOnN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAyLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjUyLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTI1MzpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTI1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTk6NTQuNTQ1NTA4NjcyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjk2MzE5NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBQb2xpY3kgTWF0Y2hpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIGlmIGEgcGFja2V0IG1hdGNoZXMgYSBwYXJ0aWN1bGFyIElQc2VjIHBvbGljeS4gVGhlIGZpcnN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIGlzIGxpa2VseSB0aGUgY29yZSBtYXRjaGluZyBmdW5jdGlvbi4gTGV0J3Mgc2VlLi4uIEFoLCB5ZXMsIGB4ZnJtX3NlbGVjdG9yX21hdGNoYCBpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2Agc291bmRzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdCDigJMgXCJzZWxlY3RvciBtYXRjaFwiIOKAkyBpdCBzaG91bGQgYmUgdGhlIGNvcmUgb2YgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUgc2VsZWN0b3JzIGFyZSBkZWZpbmVkIGFuZCBob3cgcGFja2V0cyBhcmUgY29tcGFyZWQgYWdhaW5zdCB0aGVtLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBhZGRyZXNzIG1hdGNoaW5nLCBwcm90b2NvbCBjaGVja3MsIGFuZCBwb3J0IGNvbXBhcmlzb25zIGluIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwOTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMDowNi4yNDE4MzA3MDRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDAzNzc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3NlbGVjdG9yX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzA9X194ZnJtNl9zZWxlY3Rvcl9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yNDEtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyNDI6Ym9vbCB4ZnJtX3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yNDMtXFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTk2ND1zdGF0aWMgaW50IHhmcm1fcG9saWN5X21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTc3LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTk3ODpcXHRtYXRjaCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBmbCwgZmFtaWx5KTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NzktXFx0aWYgKG1hdGNoKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMjM0PXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fc2tfcG9saWN5X2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyNTEtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMjUyOlxcdFxcdG1hdGNoID0geGZybV9zZWxlY3Rvcl9tYXRjaChcXHUwMDI2cG9sLVxcdTAwM2VzZWxlY3RvciwgZmwsIGZhbWlseSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjUzLVxcdFxcdGlmIChtYXRjaCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjAwPXN0YXRpYyBib29sIHhmcm1fc2VsZWN0b3JfaW5uZXJfaWNtcF9tYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2MTEtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNjEyOlxcdFxcdHJldCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBcXHUwMDI2ZmwxLCBmYW1pbHkpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzYxMy1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2NzA9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNzE3LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzcxODpcXHRcXHRcXHRpZiAoIXhmcm1fc2VsZWN0b3JfbWF0Y2goXFx1MDAyNngtXFx1MDAzZXNlbCwgXFx1MDAyNmZsLCBmYW1pbHkpKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNzE5LVxcdFxcdFxcdFxcdHJldCA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjIwOjA2LjQzNTg3MzU5OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk5NjA4NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gUG9saWN5IENoZWNrKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgWEZSTSBwb2xpY3kgbWVjaGFuaXNtIGlzIGFjdHVhbGx5IGVuZm9yY2VkLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBgX194ZnJtX3BvbGljeV9jaGVja2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIGNydWNpYWwgcG9saWN5IHZhbGlkYXRpb24gbG9naWMsIGFuZCBJIGtub3cgaXQncyBkZWZpbmVkIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBwYWNrZXQncyBhdHRyaWJ1dGVzIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgY29uZmlndXJlZCBzZWN1cml0eSBwb2xpY2llcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgaXQgdXNlcywgaG93IGl0IGRldGVybWluZXMgdGhlIG1hdGNoaW5nIHBvbGljeSwgd2hhdCBpdCBkb2VzIHdpdGggdGhlIG1hdGNoZWQgcG9saWN5LCBhbmQgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIHJldHVybiBjb2RlcyBvciBzdGF0dXMgdmFsdWVzIHRoYXQgY291bGQgYmUgcmV0dXJuZWQgYmFzZWQgb24gdGhlIHBvbGljeSBldmFsdWF0aW9uIHJlc3VsdC4gRnJvbSB0aGVyZSBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgY2FsbHMgdG8gcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMDoxOC40MzE5NjI5NzJaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjMxMjEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hmcm1fcG9saWN5X2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjQxPWRzdF9lbnRyeSAqeGZybV9vdXRfZndkX2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzY2OS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM2NzA6aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzY3MS1cXHRcXHRcXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4MjYtXFx0XFx0XFx0LyogVGhpcyBwb2xpY3kgdGVtcGxhdGUgd2FzIGFscmVhZHkgY2hlY2tlZCBieSBIV1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzgyNzpcXHRcXHRcXHQgKiBhbmQgc2VjcGF0aCB3YXMgcmVtb3ZlZCBpbiBfX3hmcm1fcG9saWN5X2NoZWNrMi5cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4MjgtXFx0XFx0XFx0ICovXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4NjktfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6Mzg3MDpFWFBPUlRfU1lNQk9MKF9feGZybV9wb2xpY3lfY2hlY2spO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjA6MTguNzc4Mjg1NjM0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjY4NjUwNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX2xvb2t1cF93aXRoX2lmaWRgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgWEZSTSBzdWJzeXN0ZW0gaGFuZGxlcyBwb2xpY3kgbG9va3Vwcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBUaGF0IGZ1bmN0aW9uJ3MgbmFtZSBzdWdnZXN0cyBpdCBwbGF5cyBhIGtleSByb2xlIGluIGZpbmRpbmcgdGhlIHJpZ2h0IHNlY3VyaXR5IHBvbGljeSwgYW5kIHRoZSBcImlmaWRcIiBwYXJ0IGxpa2VseSBoYXMgdG8gZG8gd2l0aCBpbnRlcmZhY2UgaWRlbnRpZmljYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGluIGEgY29tcGxleCBuZXR3b3JraW5nIGVudmlyb25tZW50LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBhbiBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgcm91dGluZyB0YWJsZSBpbmZvcm1hdGlvbiBhbmQgaW50ZXJmYWNlLXNwZWNpZmljIGF0dHJpYnV0ZXMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hhdCBmYWN0b3JzIGl0IHRha2VzIGludG8gY29uc2lkZXJhdGlvbiB3aGVuIG1ha2luZyB0aGVzZSBwb2xpY3kgbG9va3Vwcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjA6MjkuMDQ2OTM5MjAyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQwMDg4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9sb29rdXBfd2l0aF9pZmlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMTQxPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICptYWtlX2JsYWNraG9sZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMxNjUtICovXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozMTY2OnN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMTY3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzE4LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjMzMTk6RVhQT1JUX1NZTUJPTCh4ZnJtX2xvb2t1cF93aXRoX2lmaWQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzMyMC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzMyNj1zdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzI5LXtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjMzMzA6XFx0cmV0dXJuIHhmcm1fbG9va3VwX3dpdGhfaWZpZChuZXQsIGRzdF9vcmlnLCBmbCwgc2ssIGZsYWdzLCAwKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMDoyOS4zMDA5NTU0OTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2NjYwNTkwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIFBvbGljeSBEZXRhaWxzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGFsbCB3b3Jrcywgc28gbGV0J3Mgc3RhcnQgd2l0aCBgeGZybV9zcGRfZ2V0aW5mb2AuIFRoYXQncyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGxvb2sgYXQgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBJIGtub3cgaXQncyBhIGNyaXRpY2FsIHBpZWNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gdGhhdCBmdW5jdGlvbiBwcm92aWRlcyBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gcG9saWN5IGxvb2t1cHMsIGVzcGVjaWFsbHkgYXMgaXQgcGVydGFpbnMgdG8gdGhlIFNlY3VyaXR5IFBvbGljeSBEYXRhYmFzZSAoU1BEKS4gTGV0J3Mgc2VlIGhvdyBpdCBoYW5kbGVzIGluZm9ybWF0aW9uIGV4dHJhY3Rpb24gZm9yIHBvbGljeSBkZXRhaWxzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBkaWZmZXJlbnQgcHJvdG9jb2wgdHlwZXMgYW5kIHNlY3VyaXR5IGFzc29jaWF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGF0IGZ1bmN0aW9uIGlzIGtleSB0byBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGlzIHdvcmtpbmcgYXMgaXQgc2hvdWxkIGFuZCBoZWxwaW5nIHBpbnBvaW50IGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjA6NDQuOTY3MDE3NzI2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1NzIxMjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3BkX2dldGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jPTcwND1zdGF0aWMgaW5saW5lIGludCB4ZnJtX2J5aWR4X3Nob3VsZF9yZXNpemUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG90YWwpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcxNC1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjcxNTp2b2lkIHhmcm1fc3BkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc3BkaW5mbyAqc2kpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MTYte1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MjUtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NzI2OkVYUE9SVF9TWU1CT0woeGZybV9zcGRfZ2V0aW5mbyk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjIwOjQ2LjQ0Mjc3ODg0OFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTY1NTg4MTYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gUG9saWN5IExpbmthZ2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFhGUk0gcG9saWNpZXMgYXJlIGxpbmtlZCwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgYF9feGZybV9wb2xpY3lfbGlua2AgZnVuY3Rpb24uIEl0J3MgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZS4gSSBleHBlY3QgaXQnbGwgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gdGhlIGNvcmUgbG9naWMgYmVoaW5kIGxpbmtpbmcgdGhlc2UgcG9saWNpZXMg4oCTIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBob3cgdGhleSdyZSBpbnNlcnRlZCBpbnRvIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzLCBob3cgcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCwgYW5kIGFsbCB0aGUgY3JpdGljYWwgY29uY3VycmVuY3kgYXNwZWN0cy4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIGNydXggb2YgdGhlIHBvbGljeSBhc3NvY2lhdGlvbiBwcm9jZXNzLCBzbyB0aGlzIGlzIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIHRoZSBkZWVwLWRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjAyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjE6MDguMDk4NjYyOTI1WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE4MzgyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194ZnJtX3BvbGljeV9saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODg9c3RhdGljIHZvaWQgeGZybV9wb2xpY3lfcXVldWVfcHJvY2VzcyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODktXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTA6c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5MS1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpfX3hmcm1fcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTU3Mj1pbnQgeGZybV9wb2xpY3lfaW5zZXJ0KGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LCBpbnQgZXhjbClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTU5Mi1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE1OTM6XFx0X194ZnJtX3BvbGljeV9saW5rKHBvbGljeSwgZGlyKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE1OTQtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIyOTE9c3RhdGljIHUzMiB4ZnJtX2dlbl9wb3Moc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzEwLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjMxMTpzdGF0aWMgdm9pZCBfX3hmcm1fcG9saWN5X2xpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzEyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjM0OD1zdGF0aWMgdm9pZCB4ZnJtX3NrX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM0OS17XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMzUwOlxcdF9feGZybV9wb2xpY3lfbGluayhwb2wsIFhGUk1fUE9MSUNZX01BWCArIGRpcik7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzUxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjE6MDguNDkwNTA1NzU1WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzU3NTk5OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgVW5saW5rIEZ1bmN0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYF9feGZybV9wb2xpY3lfdW5saW5rYCBmdW5jdGlvbi4gTGV0J3MgaGVhZCBvdmVyIHRvIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBpbW1lZGlhdGVseS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCB1bmxpbmtpbmcgcG9saWNpZXMgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGNsZWFudXAgYW5kIHJlbW92YWwgb2Ygc2VjdXJpdHkgcG9saWNpZXMuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgSVBzZWMgd29ya3MgdW5kZXIgdGhlIGhvb2QgYW5kIHRvIHF1aWNrbHkgZmluZCB3aGVyZSBhIHBvdGVudGlhbCBidWcgaXMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSB0aGF0IG1hbmFnZXMgdGhlIHBvbGljeSB0YWJsZSBlbnRyaWVzLCBhbnkgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiB0aGUgcG9saWN5IGZyb20gdGhlIHN5c3RlbSdzIHBvbGljeSBkYXRhYmFzZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBkYXRhIHN0cnVjdHVyZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjczMzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMToxOC44NDgxMDgzNDFaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTc0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9feGZybV9wb2xpY3lfdW5saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTA9c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5MTpzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpfX3hmcm1fcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5Mi1cXHRcXHRcXHRcXHRcXHRcXHRpbnQgZGlyKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTU3Mj1pbnQgeGZybV9wb2xpY3lfaW5zZXJ0KGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LCBpbnQgZXhjbClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYwMi1cXHRcXHR4ZnJtX3BvbGljeV9yZXF1ZXVlKGRlbHBvbCwgcG9saWN5KTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE2MDM6XFx0XFx0X194ZnJtX3BvbGljeV91bmxpbmsoZGVscG9sLCBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYwNC1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE2NDU9eGZybV9wb2xpY3lfYnlzZWxfY3R4KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywgdTMyIGlmX2lkLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNjk5LVxcdFxcdFxcdH1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE3MDA6XFx0XFx0XFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTcwMS1cXHRcXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE3MTU9eGZybV9wb2xpY3lfYnlpZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTczOS1cXHRcXHRcXHRcXHR9XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNzQwOlxcdFxcdFxcdFxcdF9feGZybV9wb2xpY3lfdW5saW5rKHBvbCwgZGlyKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3NDEtXFx0XFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODEyPWludCB4ZnJtX3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsIGJvb2wgdGFza192YWxpZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTgzMi1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE4MzM6XFx0XFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTgzNC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fcG9saWN5X2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODUxPWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODcyLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTg3MzpcXHRcXHRfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODc0LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9wb2xpY3lfbG9jayk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIzMTE9c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzI3LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjMyODpzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpfX3hmcm1fcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzMjktXFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpcilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjM1Mz1zdGF0aWMgdm9pZCB4ZnJtX3NrX3BvbGljeV91bmxpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzU0LXtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIzNTU6XFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBYRlJNX1BPTElDWV9NQVggKyBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM1Ni19XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIzNTg9aW50IHhmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM2Mi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3BvbGljeV9sb2NrKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIzNjM6XFx0cG9sID0gX194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM2NC1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fcG9saWN5X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMToxOC45MDc2OTEzMjlaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MjAxNDM0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzOiBYRlJNIFBvbGljeSBhbmQgSG90IFBhdGhzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgWEZSTSBwb2xpY3kgZnVuY3Rpb25zIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHRoZXkgaGF2ZS4gSXQgbG9va3MgbGlrZSBgeGZybV9wb2xpY3lfaW5zZXJ0YCwgYHhmcm1fcG9saWN5X2RlbGV0ZWAsIGFuZCBgeGZybV9wb2xpY3lfZmx1c2hgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmcm9tIHRoZSB1c2VyIHNwYWNlLCBhcyB0aGV5IGNhbGwgdGhlIGludGVybmFsIGxpbmthZ2UgZnVuY3Rpb25zIGBfX3hmcm1fcG9saWN5X2xpbmtgIGFuZCBgX194ZnJtX3BvbGljeV91bmxpbmtgLiBJJ2xsIHplcm8gaW4gb24gYHhmcm1fcG9saWN5X2luc2VydGAgYW5kIGB4ZnJtX3BvbGljeV9kZWxldGVgIGZvciBub3cuXG5cbk5vdywgbGV0IG1lIGxheSBvdXQgdGhlIGluaXRpYWwgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgeGZybV9pbnB1dGAsIGB4ZnJtX3VzZXJfcmN2X21zZ2AsIGB4ZnJtX3NldF9kZWZhdWx0YCwgYHhmcm1fZ2V0X2RlZmF1bHRgLCBgeGZybV91c2VyX3BvbGljeWAsIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAsIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYCwgYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgLCBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaGAsIGB4ZnJtX3BvbGljeV9pbnNlcnRgLCBgeGZybV9wb2xpY3lfZGVsZXRlYCwgYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAsIGBfX3hmcm1fcG9saWN5X2NoZWNrYCwgYW5kIGB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cGAuXG5cbkFoLCBidXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBEYW1uISBPa2F5LCBgeGZybV9pbnB1dGAsIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCwgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCwgYF9feGZybV9wb2xpY3lfY2hlY2tgLCBhbmQgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCwgYW5kIGV2ZW4gYHhmcm1fc2VsZWN0b3JfbWF0Y2hgIGFyZSBhbGwgZGVmaW5pdGVseSBob3QgcGF0aCwgc28gdGhleSdyZSBvdXQuXG5cblRoYXQgbGVhdmVzOiBgeGZybV91c2VyX3Jjdl9tc2dgLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYHhmcm1fdXNlcl9wb2xpY3lgLCBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgLCBgeGZybV9wb2xpY3lfaW5zZXJ0YCwgYW5kIGB4ZnJtX3BvbGljeV9kZWxldGVgLlxuXG5XYWl0IGEgbWludXRlLCBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAuLi5pdCAqaXMqIG1vZGlmaWVkLCBidXQgaXMgaXQgYSBob3QgcGF0aD8gSXQncyBjYWxsZWQgZm9yIGV2ZXJ5IHNpbmdsZSBza2Igc2VudCBvdmVyIGVzcGludGNwLiBZZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBob3QgcGF0aC4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW4gYWx0ZXJuYXRpdmUgaW4gdGhlIEVTUC9UQ1AgY29kZS4gUGVyaGFwcyBgZXNwaW50Y3BfcHVzaF9tc2dzYCBvciBgZXNwaW50Y3Bfc2VuZG1zZ2AgYXJlIGJldHRlciBwb2ludHMgdG8gbG9vayBhdC4gSSdsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCBgZXNwaW50Y3Bfc2VuZG1zZ2AgaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMTozMC43Mjc4MzkwNzhaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDE3OTMwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz0yOTk9RVhQT1JUX1NZTUJPTF9HUEwoZXNwaW50Y3BfcHVzaF9za2IpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzAwLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MzAxOnN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz01NDU9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqZXNwaW50Y3BfcHJvdCxcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTUxLVxcdG1lbWNweShlc3BpbnRjcF9vcHMsIG9yaWdfb3BzLCBzaXplb2Yoc3RydWN0IHByb3RvX29wcykpO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTUyOlxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXNlbmRtc2cgPSBlc3BpbnRjcF9zZW5kbXNnO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTUzLVxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXJlY3Ztc2cgPSBlc3BpbnRjcF9yZWN2bXNnO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMTozMC45NjIwMzExMjJaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQzMjA2NjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBJUHNlYyBGdW5jdGlvbiBJbmNsdXNpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggSVBzZWMtcmVsYXRlZCBmdW5jdGlvbnMgdG8gaW5jbHVkZS4gVGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25lZCBgZXNwaW50Y3Bfc2VuZG1zZ2AsIHNvIHRoYXQncyBkZWZpbml0ZWx5IGluIHRoZSBtaXguIEJ1dCB3aGF0IGFib3V0IHRoZSBvdGhlciBjcnVjaWFsIGZ1bmN0aW9ucz8gYHhmcm1faW5wdXRgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQ7IGl0J3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIElQc2VjIGlucHV0IHByb2Nlc3NpbmcgYW5kIEkga25vdyBpdCdzIGJlZW4gaGVhdmlseSBtb2RpZmllZC4gT24gdGhlIG9uZSBoYW5kLCBJIG5lZWQgdG8gc3RpY2sgdG8gdGhlIGluc3RydWN0aW9ucyBhbmQgYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdHMgZnJvbSBza2V3aW5nLCBhbmQgYHhmcm1faW5wdXRgICppcyogYSBob3QtcGF0aCBmdW5jdGlvbiBmb3IgSVBzZWMuXG5cbkJ1dCBob2xkIG9uLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYnVncyB3aXRoaW4gYHhmcm1faW5wdXRg4oCUZGV2X3B1dCBhbmQgcmN1X3JlYWRfbG9ja+KAlHNvIGV4Y2x1ZGluZyBpdCBtaWdodCBiZSBhIG1pc3Rha2UuIFBlcmhhcHMgYHhmcm1fcmN2YCB3b3VsZCBiZSBhIGJldHRlciBjaG9pY2UgYXMgYSByZWxhdGVkLCBsZXNzIGhvdC1wYXRoLCBmdW5jdGlvbiwgaWYgSSBjYW4gZmluZCBhIHJlbGV2YW50IGNvbm5lY3Rpb24uXG5cbk9rYXksIGxldOKAmXMgcmV0aGluay4gSSdtIGdvaW5nIHRvIGluY2x1ZGUgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRg4oCUdGhleSBzZWVtIHJlbGV2YW50IHRvIGNvbmZpZ3VyYXRpb24gYW5kIHJldHJpZXZhbC4gYHhmcm1fdXNlcl9wb2xpY3lgIGFuZCBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgIGFyZSBkZWZpbml0ZWx5IGluLCBnaXZlbiB0aGVpciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBBbmQgb2YgY291cnNlLCB0aGUgaW5pdGlhbCBtZW50aW9uIG9mIGBlc3BpbnRjcF9zZW5kbXNnYC5cblxuRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBhdCBgeGZybV9zcGRfZ2V0aW5mb2AuIEl0J3MgY2FsbGVkIGZyb20gYHhmcm1fZ2V0X3NwZGluZm9gLCBzbyBpdCBtaWdodCBiZSB1c2VmdWwgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjE6NDAuMzk0MTAxNDkxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA3MzQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2dldF9zcGRpbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTE2Njc9c3RhdGljIGludCB4ZnJtX3NldF9zcGRpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTcyMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzIxOnN0YXRpYyBpbnQgeGZybV9nZXRfc3BkaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgLm5sYV9tYXggPSBYRlJNQV9TUERfTUFYIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQxODpcXHRbWEZSTV9NU0dfR0VUU1BESU5GTyAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9zcGRpbmZvICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDE5LVxcdFtYRlJNX01TR19TRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fc2V0X2RlZmF1bHQgICB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMTo0MC40NTIxNzkzOFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTkyNjM0Nzg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTZWN1cml0eSBQb2xpY3kgRGF0YWJhc2UgVXBkYXRlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgSVBzZWMgU1BEIGxvb2t1cCBpcyBjb3ZlcmVkLCBzbyBJJ2xsIGJlIGluY2x1ZGluZyBgeGZybV9nZXRfc3BkaW5mb2AgaW4gbXkgYW5hbHlzaXMuIEl0J3MgdGhlIGNyaXRpY2FsIGxpbmsgYmV0d2VlbiB0aGUgcG9saWN5IGRhdGFiYXNlIGFuZCB0aGUgWEZSTSBzdWJzeXN0ZW0sIHNvIHRoYXQncyBvYnZpb3VzbHkga2V5LlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBhdCBob3cgdGhvc2UgcG9saWNpZXMgYXJlIGFjdHVhbGx5ICphZGRlZCo/IEknbSB0aGlua2luZyB0aGUgYHBma2V5X2FkZGAgZnVuY3Rpb24gaW4gYG5ldC9rZXkvYWZfa2V5LmNgIGlzIGdvaW5nIHRvIGJlIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXIuIFRoYXQncyB0aGUgY29yZSBvZiBob3cgdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd29ya3MgZm9yIGFkZGluZyB0aGVzZSBydWxlcy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24gdG8gdHJhY2UgaG93IHRoZSBuZXcgcG9saWN5IGdldHMgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1bHRpbWF0ZWx5IGluc3RhbGxlZCBpbiB0aGUga2VybmVsJ3MgZGF0YSBzdHJ1Y3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUgaXMgY3JpdGljYWwsIHNvIGBwZmtleV9hZGRgIGlzIHRoZSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNDYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMTo1Ni4zNzg1Mjk1MTNaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTU3NDM1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZmtleV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2tleS9hZl9rZXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQva2V5L2FmX2tleS5jPTE0OTA9c3RhdGljIGludCBrZXlfbm90aWZ5X3NhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQva2V5L2FmX2tleS5jLTE1MTMtXFxubmV0L2tleS9hZl9rZXkuYzoxNTE0OnN0YXRpYyBpbnQgcGZrZXlfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNhZGJfbXNnICpoZHIsIHZvaWQgKiBjb25zdCAqZXh0X2hkcnMpXFxubmV0L2tleS9hZl9rZXkuYy0xNTE1LXtcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmM9MjgyMj1zdGF0aWMgY29uc3QgcGZrZXlfaGFuZGxlciBwZmtleV9mdW5jc1tTQURCX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2tleS9hZl9rZXkuYy0yODI0LVxcdFtTQURCX0dFVFNQSV1cXHRcXHQ9IHBma2V5X2dldHNwaSxcXG5uZXQva2V5L2FmX2tleS5jOjI4MjU6XFx0W1NBREJfVVBEQVRFXVxcdFxcdD0gcGZrZXlfYWRkLFxcbm5ldC9rZXkvYWZfa2V5LmM6MjgyNjpcXHRbU0FEQl9BRERdXFx0XFx0PSBwZmtleV9hZGQsXFxubmV0L2tleS9hZl9rZXkuYy0yODI3LVxcdFtTQURCX0RFTEVURV1cXHRcXHQ9IHBma2V5X2RlbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjE6NTYuNjA0MTEzNzk4WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODM5ODI0MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBlbGVtZW50cyBvZiB0aGlzIFhGUk0gcGF0Y2guIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB3aGF0IEkgc2VlLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBgcGZrZXlfYWRkYCwgYW5kIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGNyaXRpY2FsIGZ1bmN0aW9uczogYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGB4ZnJtX3VzZXJfcG9saWN5YCwgYW5kIGBwZmtleV9hZGRgLCBgZXNwaW50Y3Bfc2VuZG1zZ2AsIGB4ZnJtX2dldF9zcGRpbmZvYC4gVGhvc2UgYXJlIHRoZSBwcmltYXJ5IHN5bWJvbHMgSSdtIHdhdGNoaW5nLlxuXG5SZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIEkgc2VlIHRoYXQgYElORVRfRVNQSU5UQ1BgLCBgSU5FVDZfRVNQSU5UQ1BgLCBgTkVUX0tFWWAsIGFuZCBgWEZSTV9VU0VSYCBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgZGlyZWN0bHkgcmVsZXZhbnQgaGVyZSwgYW5kIHRoZXknbGwgbmVlZCBjYXJlZnVsIGV4YW1pbmF0aW9uLiBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucywgbGlrZSBgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVGAsIHdoaWNoIGlzIGdlbmVyaWMgYW5kIHVzdWFsbHkgZmluZSBvbiB4ODZfNjQ7IEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGl0LiBUaGUgYENPTkZJR19YRlJNX0VTUElOVENQYCBvcHRpb24sIGlzIHNlbGVjdGVkIGJ5IGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYCwgdGhhdCBsb29rcyByaWdodC4gQW5kIEkga25vdyBgQ09ORklHX05FVF9LRVlgIGlzIGBORVRfS0VZYCBhbmQgYENPTkZJR19YRlJNX1VTRVJgIGlzIGBYRlJNX1VTRVJgLiBJJ20gYWxzbyBnb2luZyB0byBhZGQgdGhhdCBgQ09ORklHX1hGUk1gIGlzIHNlbGVjdGVkIGJ5IHNldmVyYWwsIGluY2x1ZGluZyBgSU5FVF9FU1BgLCBgSU5FVF9BSGAsIGBJTkVUX0lQQ09NUGAsIGFuZCBgWEZSTV9VU0VSYC4gU28sIGZvciBteSBkb2N1bWVudGF0aW9uIEkgd2lsbCBsaXN0IGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYE5FVF9LRVlgLCBhbmQgYFhGUk1fVVNFUmAgYXMgdGhlIGtleSBjb25maWd1cmF0aW9ucy5cblxuTm93LCBhIHF1aWNrIGZpbGUgcmV2aWV3IG9mIHRoZSBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIHRvIGFzc2VzcyBwb3RlbnRpYWwgaW1wYWN0LiBJIHNlZSBjaGFuZ2VzIGluIGBpbmNsdWRlL25ldC94ZnJtLmhgIHJlbGF0aW5nIHRvIGFkZHJlc3MgbWF0Y2hpbmcgKGBhZGRyX21hdGNoYCwgYGFkZHI0X21hdGNoYCksIHBvbGljeSBjaGVja2luZyAoYF9feGZybV9jaGVja19ub3BvbGljeWApLCBhbmQgcm91dGluZyAoYHhmcm1fcm91dGVfZm9yd2FyZGApLiBUaGVuLCBpbnB1dCBoYW5kbGluZyBpbiBgeGZybTRfaW5wdXQuY2AgYW5kIGB4ZnJtNl9pbnB1dC5jYCB3aXRoIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCBhbmQgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLiBLZXkgbWFuYWdlbWVudCB3aXRoIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAgaW4gYG5ldC9rZXkvYWZfa2V5LmNgLiBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAgaXMgaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBJbnB1dCBwcm9jZXNzaW5nIGFuZCBwb2xpY3kgaGFuZGxpbmcgaW4gYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AgKGB4ZnJtX2lucHV0YCkgYW5kIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCAoYHhmcm1fc2VsZWN0b3JfbWF0Y2hgLCBgeGZybV9zcGRfZ2V0aW5mb2AsIHBvbGljeSBsaW5raW5nL3VubGlua2luZywgbG9va3VwLCBhbmQgY2hlY2tpbmcpLiBgeGZybV9pbnB1dF9zdGF0ZV9sb29rdXBgIGFuZCBgeGZybV91c2VyX3BvbGljeWAgYXJlIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBGaW5hbGx5LCBgbmV0L3hmcm0veGZybV91c2VyLmNgIHdpdGggYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYW5kIGB4ZnJtX3VzZXJfcmN2X21zZ2AuXG5cbkNvbnNpZGVyaW5nIGFsbCBvZiB0aGlzLCB0aGUgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBUaGV5IHRvdWNoIGNvcmUgSVBzZWMgbG9naWMgYW5kIGFkZHJlc3MgYnVncyBsaWtlIGJvdW5kcyBjaGVja3MsIGRhdGEgcmFjZXMgaW4gcG9saWN5IG1hbmFnZW1lbnQsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG1pc3NpbmcgbG9ja2RlcCBjb25zaWRlcmF0aW9ucywgYW5kIGNvbXBhdCBzeXNjYWxsIGNoZWNrcy4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBmdXp6aW5nIGlzIGhpZ2hseSB3YXJyYW50ZWQuIFRoZSBjaGFuZ2VzIG1vZGlmeSBjcml0aWNhbCBwYXRocyB0aGF0IGFyZSBkaXJlY3RseSBleHBvc2VkIGFuZCBwb3RlbnRpYWxseSByZWFjaGFibGUsIHNvIHRob3JvdWdoIGZ1enppbmcgaXMgZGVmaW5pdGVseSBhIHByaW9yaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY0NCwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjI6MTEuNDQzOTQxMjA5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMzMwMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiLFxuICAgIFwiTkVUX0tFWVwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV91c2VyX3Jjdl9tc2dcIixcbiAgICBcInhmcm1fc2V0X2RlZmF1bHRcIixcbiAgICBcInhmcm1fZ2V0X2RlZmF1bHRcIixcbiAgICBcInhmcm1fdXNlcl9wb2xpY3lcIixcbiAgICBcInBma2V5X2FkZFwiLFxuICAgIFwiZXNwaW50Y3Bfc2VuZG1zZ1wiLFxuICAgIFwieGZybV9nZXRfc3BkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgWEZSTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBib3VuZHMgY2hlY2tzIGZvciBhZGRyZXNzIG1hdGNoaW5nLCBmaXhpbmcgZGF0YSByYWNlcyBpbiBwb2xpY3kgY291bnRzL2RlZmF1bHRzLCBhZGp1c3RpbmcgZGV2IHJlZmNvdW50aW5nIGluIHhmcm1faW5wdXQsIGFuZCByZWZhY3RvcmluZyBlc3BpbnRjcCBtZXNzYWdlIHNlbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIElQc2VjIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJORVRfS0VZXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3VzZXJfcmN2X21zZ1wiLFxuICAgIFwieGZybV9zZXRfZGVmYXVsdFwiLFxuICAgIFwieGZybV9nZXRfZGVmYXVsdFwiLFxuICAgIFwieGZybV91c2VyX3BvbGljeVwiLFxuICAgIFwicGZrZXlfYWRkXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJ4ZnJtX2dldF9zcGRpbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBYRlJNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGJvdW5kcyBjaGVja3MgZm9yIGFkZHJlc3MgbWF0Y2hpbmcsIGZpeGluZyBkYXRhIHJhY2VzIGluIHBvbGljeSBjb3VudHMvZGVmYXVsdHMsIGFkanVzdGluZyBkZXYgcmVmY291bnRpbmcgaW4geGZybV9pbnB1dCwgYW5kIHJlZmFjdG9yaW5nIGVzcGludGNwIG1lc3NhZ2Ugc2VuZGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgSVBzZWMgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-22 08:02:59 +0000 UTC FinishedAt: 2026-06-22 08:22:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "edb557b2ba38fea2c5eb710cf366c797e187218c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESPINTCP", "INET6_ESPINTCP", "NET_KEY", "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "edb557b2ba38fea2c5eb710cf366c797e187218c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESPINTCP", "INET6_ESPINTCP", "NET_KEY", "XFRM_USER" ], "series_id": "deb7c863-a4be-435f-843c-d90ba7270dcd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_user_rcv_msg", "xfrm_set_default", "xfrm_get_default", "xfrm_user_policy", "pfkey_add", "espintcp_sendmsg", "xfrm_get_spdinfo" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7TkVUX0tFWSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX3NldF9kZWZhdWx0JiMzNDssCiAgICAmIzM0O3hmcm1fZ2V0X2RlZmF1bHQmIzM0OywKICAgICYjMzQ7eGZybV91c2VyX3BvbGljeSYjMzQ7LAogICAgJiMzNDtwZmtleV9hZGQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9zcGRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgWEZSTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBib3VuZHMgY2hlY2tzIGZvciBhZGRyZXNzIG1hdGNoaW5nLCBmaXhpbmcgZGF0YSByYWNlcyBpbiBwb2xpY3kgY291bnRzL2RlZmF1bHRzLCBhZGp1c3RpbmcgZGV2IHJlZmNvdW50aW5nIGluIHhmcm1faW5wdXQsIGFuZCByZWZhY3RvcmluZyBlc3BpbnRjcCBtZXNzYWdlIHNlbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIElQc2VjIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjY1ZWQyNmNlMTBiOGEwYmU2NzBkOWQ4MTA0NTBhMzBkOWNiZWE2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDA4OjE1OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaFxuaW5kZXggODc0NDA5MTI3ZTI5MjEuLmY4YzkwOWIwZjBjMzRlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC94ZnJtLmhcbkBAIC05NDMsNiAmIzQzOzk0Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGRyX21hdGNoKGNvbnN0IHZvaWQgKnRva2VuMSwgY29uc3Qgdm9pZCAqdG9rZW4yLFxuIFx0dW5zaWduZWQgaW50IHBkdztcbiBcdHVuc2lnbmVkIGludCBwYmk7XG4gXG4mIzQzO1x0aWYgKHByZWZpeGxlbiBcdTAwM2UgMTI4KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHBkdyA9IHByZWZpeGxlbiBcdTAwM2VcdTAwM2UgNTtcdCAgLyogbnVtIG9mIHdob2xlIHUzMiBpbiBwcmVmaXggKi9cbiBcdHBiaSA9IHByZWZpeGxlbiBcdTAwMjYgIDB4MWY7ICAvKiBudW0gb2YgYml0cyBpbiBpbmNvbXBsZXRlIHUzMiBpbiBwcmVmaXggKi9cbiBcbkBAIC05NjcsNiAmIzQzOzk3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcjRfbWF0Y2goX19iZTMyIGExLCBfX2JlMzIgYTIsIHU4IHByZWZpeGxlbilcbiBcdC8qIEM5OSA2LjUuNyAoMyk6IHUzMiBcdTAwM2NcdTAwM2MgMzIgaXMgdW5kZWZpbmVkIGJlaGF2aW91ciAqL1xuIFx0aWYgKHNpemVvZihsb25nKSA9PSA0IFx1MDAyNlx1MDAyNiBwcmVmaXhsZW4gPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChwcmVmaXhsZW4gXHUwMDNlIDMyKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHJldHVybiAhKChhMSBeIGEyKSBcdTAwMjYgaHRvbmwofjBVTCBcdTAwM2NcdTAwM2MgKDMyIC0gcHJlZml4bGVuKSkpO1xuIH1cbiBcbkBAIC0xMjUwLDggJiM0MzsxMjU3LDggQEAgaW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKiwgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW5saW5lIGJvb2wgX194ZnJtX2NoZWNrX25vcG9saWN5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0IGludCBkaXIpXG4ge1xuLVx0aWYgKCFuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSBcdTAwMjZcdTAwMjYgIXNlY3BhdGhfZXhpc3RzKHNrYikpXG4tXHRcdHJldHVybiBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQ7XG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0pIFx1MDAyNlx1MDAyNiAhc2VjcGF0aF9leGlzdHMoc2tiKSlcbiYjNDM7XHRcdHJldHVybiBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVDtcbiBcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTM1MSw4ICYjNDM7MTM1OCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fcm91dGVfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiBcbi1cdGlmICghbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0gXHUwMDI2XHUwMDI2XG4tXHQgICAgbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQUNDRVBUKVxuJiM0MztcdGlmICghUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0cmV0dXJuIChza2JfZHN0KHNrYiktXHUwMDNlZmxhZ3MgXHUwMDI2IERTVF9OT1hGUk0pIHx8XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfaW5wdXQuYyBiL25ldC9pcHY0L3hmcm00X2lucHV0LmNcbmluZGV4IGMyZWFjODQ0YmNkYjRlLi5mNmYyYThlZjNmODg0NyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3hmcm00X2lucHV0LmNcbkBAIC03Niw4ICYjNDM7NzYsNiBAQCBpbnQgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXN5bmMpXG4gXHRORl9IT09LKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QUkVfUk9VVElORyxcbiBcdFx0ZGV2X25ldChkZXYpLCBOVUxMLCBza2IsIGRldiwgTlVMTCxcbiBcdFx0eGZybTRfcmN2X2VuY2FwX2ZpbmlzaCk7XG4tXHRpZiAoYXN5bmMpXG4tXHRcdGRldl9wdXQoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuaW5kZXggNjk5YTAwMWFjMTY2MjkuLjg5ZDA0NDNiNTMwNzMyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYveGZybTZfaW5wdXQuY1xuQEAgLTcxLDggJiM0Mzs3MSw2IEBAIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcbiBcdE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX1BSRV9ST1VUSU5HLFxuIFx0XHRkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLFxuIFx0XHR4ZnJtNl90cmFuc3BvcnRfZmluaXNoMik7XG4tXHRpZiAoYXN5bmMpXG4tXHRcdGRldl9wdXQoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuY1xuaW5kZXggOWNmZmVlZjE4Y2Q5MWMuLjMyMTZmODk3YTMwNWUwIDEwMDY0NFxuLS0tIGEvbmV0L2tleS9hZl9rZXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2tleS9hZl9rZXkuY1xuQEAgLTEyMTgsNiAmIzQzOzEyMTgsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKiBwZmtleV9tc2cyeGZybV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHR9XG4gXHRcdFx0c3RyY3B5KHgtXHUwMDNlY2FsZy1cdTAwM2VhbGdfbmFtZSwgYS1cdTAwM2VuYW1lKTtcbiYjNDM7XHRcdFx0eC1cdTAwM2VjYWxnLVx1MDAzZWFsZ19rZXlfbGVuID0gMDtcbiBcdFx0XHR4LVx1MDAzZXByb3BzLmNhbGdvID0gc2EtXHUwMDNlc2FkYl9zYV9lbmNyeXB0O1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGludCBrZXlzaXplID0gMDtcbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuaW5kZXggZDkwMzU1NDYzNzVlYmEuLjM3NGUxYjk2NDQzODM5IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTIxMiw0MyAmIzQzOzIxMiwyMyBAQCBzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX21zZyAqc2ttc2cgPSBcdTAwMjZlbXNnLVx1MDAzZXNrbXNnO1xuIFx0Ym9vbCBtb3JlID0gZmxhZ3MgXHUwMDI2IE1TR19NT1JFO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbi1cdGludCBkb25lID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRzZyA9IFx1MDAyNnNrbXNnLVx1MDAzZXNnLmRhdGFbc2ttc2ctXHUwMDNlc2cuc3RhcnRdO1xuIFx0ZG8ge1xuIFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuLVx0XHRzaXplX3Qgc2l6ZSA9IHNnLVx1MDAzZWxlbmd0aCAtIGVtc2ctXHUwMDNlb2Zmc2V0O1xuLVx0XHRpbnQgb2Zmc2V0ID0gc2ctXHUwMDNlb2Zmc2V0ICYjNDM7IGVtc2ctXHUwMDNlb2Zmc2V0O1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcDtcbi1cbi1cdFx0ZW1zZy1cdTAwM2VvZmZzZXQgPSAwO1xuIFxuJiM0MztcdFx0c2cgPSBcdTAwMjZza21zZy1cdTAwM2VzZy5kYXRhW3NrbXNnLVx1MDAzZXNnLnN0YXJ0XTtcbiBcdFx0aWYgKHNnX2lzX2xhc3Qoc2cpIFx1MDAyNlx1MDAyNiAhbW9yZSlcbiBcdFx0XHRtc2doZHIubXNnX2ZsYWdzIFx1MDAyNj0gfk1TR19NT1JFO1xuIFxuLVx0XHRwID0gc2dfcGFnZShzZyk7XG4tcmV0cnk6XG4tXHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2YnZlYywgcCwgc2l6ZSwgb2Zmc2V0KTtcbi1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbi1cdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2doZHIsIHNpemUpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdFx0ZW1zZy1cdTAwM2VvZmZzZXQgPSBvZmZzZXQgLSBzZy1cdTAwM2VvZmZzZXQ7XG4tXHRcdFx0c2ttc2ctXHUwMDNlc2cuc3RhcnQgJiM0Mzs9IGRvbmU7XG4mIzQzO1x0XHRidmVjX3NldF9wYWdlKFx1MDAyNmJ2ZWMsIHNnX3BhZ2Uoc2cpLCBzZy1cdTAwM2VsZW5ndGgsIHNnLVx1MDAzZW9mZnNldCk7XG4mIzQzO1x0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFx1MDAyNmJ2ZWMsIDEsIHNnLVx1MDAzZWxlbmd0aCk7XG4mIzQzO1x0XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFx1MDAyNm1zZ2hkciwgc2ctXHUwMDNlbGVuZ3RoKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuLVxuLVx0XHRpZiAocmV0ICE9IHNpemUpIHtcbi1cdFx0XHRvZmZzZXQgJiM0Mzs9IHJldDtcbi1cdFx0XHRzaXplIC09IHJldDtcbi1cdFx0XHRnb3RvIHJldHJ5O1xuLVx0XHR9XG4gXG4tXHRcdGRvbmUmIzQzOyYjNDM7O1xuLVx0XHRwdXRfcGFnZShwKTtcbi1cdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZy1cdTAwM2VsZW5ndGgpO1xuLVx0XHRzZyA9IHNnX25leHQoc2cpO1xuLVx0fSB3aGlsZSAoc2cpO1xuJiM0MztcdFx0c2tfbXNnX2ZyZWVfcGFydGlhbChzaywgc2ttc2csIHJldCk7XG4mIzQzO1x0fSB3aGlsZSAoc2ttc2ctXHUwMDNlc2cuc2l6ZSk7XG4gXG4gXHRtZW1zZXQoZW1zZywgMCwgc2l6ZW9mKCplbXNnKSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlNGMyY2QyNDkzNmQzZi4uZWVjYWIzMzdiZDBhNzkgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuQEAgLTQ2Nyw2ICYjNDM7NDY3LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiBcdGludCBlcnI7XG4gXHRfX2JlMzIgc2VxO1xuIFx0X19iZTMyIHNlcV9oaTtcbkBAIC00OTMsNyAmIzQzOzQ5NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0XHRcdFx0ICAgICAgIExJTlVYX01JQl9YRlJNSU5TVEFURUlOVkFMSUQpO1xuIFxuIFx0XHRcdGlmIChlbmNhcF90eXBlID09IC0xKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0Z290byBkcm9wO1xuIFx0XHR9XG4gXG5AQCAtNjU1LDE2ICYjNDM7NjU2LDE2IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcbiBcdFx0aWYgKCFjcnlwdG9fZG9uZSkge1xuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4tXHRcdFx0ZGV2X2hvbGQoc2tiLVx1MDAzZWRldik7XG4mIzQzO1x0XHRcdGRldl9ob2xkKGRldik7XG4gXG4gXHRcdFx0bmV4dGhkciA9IHgtXHUwMDNldHlwZS1cdTAwM2VpbnB1dCh4LCBza2IpO1xuIFx0XHRcdGlmIChuZXh0aGRyID09IC1FSU5QUk9HUkVTUykge1xuIFx0XHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0XHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGRldl9wdXQoc2tiLVx1MDAzZWRldik7XG4mIzQzO1x0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRzcGluX2xvY2soXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbiBcdFx0fVxuIHJlc3VtZTpcbkBAIC02OTksNyAmIzQzOzcwMCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0ZXJyID0geGZybV9pbm5lcl9tb2RlX2lucHV0KHgsIHNrYik7XG4gXHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XG4gXHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH0gZWxzZSBpZiAoZXJyKSB7XG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOU1RBVEVNT0RFRVJST1IpO1xuQEAgLTcyNiw5ICYjNDM7NzI3LDEyIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0Y3J5cHRvX2RvbmUgPSBmYWxzZTtcbiBcdH0gd2hpbGUgKCFlcnIpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8sIDApO1xuLVx0aWYgKGVycilcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0Z290byBkcm9wO1xuJiM0MztcdH1cbiBcbiBcdG5mX3Jlc2V0X2N0KHNrYik7XG4gXG5AQCAtNzM5LDggJiM0Mzs3NDMsOSBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXG4gXHRcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gXHRcdGlmIChhc3luYylcbi1cdFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNmdyb19jZWxscywgc2tiKTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG4gXHRcdHhvID0geGZybV9vZmZsb2FkKHNrYik7XG5AQCAtNzQ4LDIzICYjNDM7NzUzLDIxIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0XHR4ZnJtX2dybyA9IHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dSTztcbiBcbiBcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KHgtXHUwMDNlcHJvcHMuZmFtaWx5KTtcbiBcdFx0aWYgKGxpa2VseShhZmluZm8pKVxuIFx0XHRcdGVyciA9IGFmaW5mby1cdTAwM2V0cmFuc3BvcnRfZmluaXNoKHNrYiwgeGZybV9ncm8gfHwgYXN5bmMpO1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0aWYgKHhmcm1fZ3JvKSB7XG4gXHRcdFx0c3AgPSBza2Jfc2VjX3BhdGgoc2tiKTtcbiBcdFx0XHRpZiAoc3ApXG4gXHRcdFx0XHRzcC1cdTAwM2VvbGVuID0gMDtcbiBcdFx0XHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuIFx0XHRcdFx0c2tiX2RzdF9kcm9wKHNrYik7XG4tXHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbiBcdFx0XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZncm9fY2VsbHMsIHNrYik7XG4tXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFxuJiM0MztcdFx0aWYgKGFzeW5jKVxuJiM0MztcdFx0XHRkZXZfcHV0KGRldik7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbkBAIC03NzIsNyAmIzQzOzc3NSw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4gZHJvcDpcbiBcdGlmIChhc3luYylcbi1cdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbiYjNDM7XHRcdGRldl9wdXQoZGV2KTtcbiBcdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4IFx1MDAyNlx1MDAyNiB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyLCAtMSk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5pbmRleCA5NTk1NDQ0MjU2OTI5MC4uNjM5OTM0ZjMwMDE2N2UgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5AQCAtMjQyLDYgJiM0MzsyNDIsOSBAQCBfX3hmcm02X3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwpXG4gYm9vbCB4ZnJtX3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXG4gXHRcdFx0IHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbiB7XG4mIzQzO1x0aWYgKGZhbWlseSAhPSBzZWwtXHUwMDNlZmFtaWx5IFx1MDAyNlx1MDAyNiBzZWwtXHUwMDNlZmFtaWx5ICE9IEFGX1VOU1BFQylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHRzd2l0Y2ggKGZhbWlseSkge1xuIFx0Y2FzZSBBRl9JTkVUOlxuIFx0XHRyZXR1cm4gX194ZnJtNF9zZWxlY3Rvcl9tYXRjaChzZWwsIGZsKTtcbkBAIC02ODUsNyAmIzQzOzY4OCw3IEBAIHN0YXRpYyB2b2lkIHhmcm1fYnlpZHhfcmVzaXplKHN0cnVjdCBuZXQgKm5ldClcbiBcbiBzdGF0aWMgaW5saW5lIGludCB4ZnJtX2J5ZHN0X3Nob3VsZF9yZXNpemUoc3RydWN0IG5ldCAqbmV0LCBpbnQgZGlyLCBpbnQgKnRvdGFsKVxuIHtcbi1cdHVuc2lnbmVkIGludCBjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdKTtcbiBcdHVuc2lnbmVkIGludCBobWFzayA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9ieWRzdFtkaXJdLmhtYXNrO1xuIFxuIFx0aWYgKHRvdGFsKVxuQEAgLTcxMSwxMiAmIzQzOzcxNCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCB4ZnJtX2J5aWR4X3Nob3VsZF9yZXNpemUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG90YWwpXG4gXG4gdm9pZCB4ZnJtX3NwZF9nZXRpbmZvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1rX3NwZGluZm8gKnNpKVxuIHtcbi1cdHNpLVx1MDAzZWluY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0lOXTtcbi1cdHNpLVx1MDAzZW91dGNudCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdO1xuLVx0c2ktXHUwMDNlZndkY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRF07XG4tXHRzaS1cdTAwM2VpbnNjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU4mIzQzO1hGUk1fUE9MSUNZX01BWF07XG4tXHRzaS1cdTAwM2VvdXRzY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVCYjNDM7WEZSTV9QT0xJQ1lfTUFYXTtcbi1cdHNpLVx1MDAzZWZ3ZHNjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEJiM0MztYRlJNX1BPTElDWV9NQVhdO1xuJiM0MztcdHNpLVx1MDAzZWluY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTl0pO1xuJiM0MztcdHNpLVx1MDAzZW91dGNudCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSk7XG4mIzQzO1x0c2ktXHUwMDNlZndkY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9GV0RdKTtcbiYjNDM7XHRzaS1cdTAwM2VpbnNjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0lOJiM0MztYRlJNX1BPTElDWV9NQVhdKTtcbiYjNDM7XHRzaS1cdTAwM2VvdXRzY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVQmIzQzO1hGUk1fUE9MSUNZX01BWF0pO1xuJiM0MztcdHNpLVx1MDAzZWZ3ZHNjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRCYjNDM7WEZSTV9QT0xJQ1lfTUFYXSk7XG4gXHRzaS1cdTAwM2VzcGRoY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2lkeF9obWFzaztcbiBcdHNpLVx1MDAzZXNwZGhtY250ID0geGZybV9wb2xpY3lfaGFzaG1heDtcbiB9XG5AQCAtMjMxOCw3ICYjNDM7MjMyMSw3IEBAIHN0YXRpYyB2b2lkIF9feGZybV9wb2xpY3lfbGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcbiBcdH1cbiBcbiBcdGxpc3RfYWRkKFx1MDAyNnBvbC1cdTAwM2V3YWxrLmFsbCwgXHUwMDI2bmV0LVx1MDAzZXhmcm0ucG9saWN5X2FsbCk7XG4tXHRuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSYjNDM7JiM0Mzs7XG4mIzQzO1x0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSwgbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0gJiM0MzsgMSk7XG4gXHR4ZnJtX3BvbF9ob2xkKHBvbCk7XG4gfVxuIFxuQEAgLTIzMzcsNyAmIzQzOzIzNDAsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpfX3hmcm1fcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcbiBcdH1cbiBcbiBcdGxpc3RfZGVsX2luaXQoXHUwMDI2cG9sLVx1MDAzZXdhbGsuYWxsKTtcbi1cdG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdLS07XG4mIzQzO1x0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSwgbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0gLSAxKTtcbiBcbiBcdHJldHVybiBwb2w7XG4gfVxuQEAgLTMyMjIsNyAmIzQzOzMyMjUsNyBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cF93aXRoX2lmaWQoc3RydWN0IG5ldCAqbmV0LFxuIFxuIFx0XHQvKiBUbyBhY2NlbGVyYXRlIGEgYml0Li4uICAqL1xuIFx0XHRpZiAoIWlmX2lkIFx1MDAyNlx1MDAyNiAoKGRzdF9vcmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBEU1RfTk9YRlJNKSB8fFxuLVx0XHRcdCAgICAgICAhbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0pKVxuJiM0MztcdFx0XHQgICAgICAgIVJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSkpKVxuIFx0XHRcdGdvdG8gbm9wb2w7XG4gXG4gXHRcdHhkc3QgPSB4ZnJtX2J1bmRsZV9sb29rdXAobmV0LCBmbCwgZmFtaWx5LCBkaXIsIFx1MDAyNnhmbG8sIGlmX2lkKTtcbkBAIC0zMjk2LDcgJiM0MzszMjk5LDcgQEAgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9sb29rdXBfd2l0aF9pZmlkKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBub3BvbDpcbiBcdGlmICgoIWRzdF9vcmlnLVx1MDAzZWRldiB8fCAhKGRzdF9vcmlnLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0xPT1BCQUNLKSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQkxPQ0spIHtcbiYjNDM7XHQgICAgUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xuIFx0XHRlcnIgPSAtRVBFUk07XG4gXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG5AQCAtMzc1MCw3ICYjNDM7Mzc1Myw3IEBAIGludCBfX3hmcm1fcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Y29uc3QgYm9vbCBpc19jcnlwdG9fb2ZmbG9hZCA9IHNwIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCh4ZnJtX2lucHV0X3N0YXRlKHNrYiktXHUwMDNleHNvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9DUllQVE8pO1xuIFxuLVx0XHRpZiAobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQkxPQ0spIHtcbiYjNDM7XHRcdGlmIChSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7XG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOTk9QT0xTKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuaW5kZXggNTg5YzNiNmU0Njc5MTMuLjllODdmNzAyODIwMTA4IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbkBAIC0xMjA3LDkgJiM0MzsxMjA3LDExIEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnN0YXRlX2NhY2hlX2lucHV0O1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xuIFxuJiM0MztcdC8qIEJIIGlzIGFsd2F5cyBkaXNhYmxlZCBvbiB0aGUgaW5wdXQgcGF0aC4gKi9cbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9pbl9zb2Z0aXJxKCk7XG4mIzQzO1xuIFx0c3RhdGVfY2FjaGVfaW5wdXQgPSByYXdfY3B1X3B0cihuZXQtXHUwMDNleGZybS5zdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KSB7XG4gXHRcdGlmICh4LVx1MDAzZXByb3BzLmZhbWlseSAhPSBmYW1pbHkgfHxcbiBcdFx0ICAgIHgtXHUwMDNlaWQuc3BpICAgICAgICE9IHNwaSB8fFxuQEAgLTEyMjcsMjAgJiM0MzsxMjI5LDI1IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0eGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgXHUwMDI2c3RhdGVfcHRycyk7XG4gXG4gXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcdTAwMjZzdGF0ZV9wdHJzLCBtYXJrLCBkYWRkciwgc3BpLCBwcm90bywgZmFtaWx5KTtcbi1cbi1cdGlmICh4IFx1MDAyNlx1MDAyNiB4LVx1MDAzZWttLnN0YXRlID09IFhGUk1fU1RBVEVfVkFMSUQpIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4tXHRcdGlmIChobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KSkge1xuJiM0MztcdGlmICh4KSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiYjNDM7XHRcdGlmICh4LVx1MDAzZWttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIHN0YXRlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogRG9uJiMzOTt0IGFkZCBpdCB0byB0aGUgY2FjaGUgYnV0IHN0aWxsXG4mIzQzO1x0XHRcdCAqIHJldHVybiBpdCB0byB0aGUgY2FsbGVyLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdH0gZWxzZSBpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCkpIHtcbiBcdFx0XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCwgc3RhdGVfY2FjaGVfaW5wdXQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXHRcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KTtcbiBcdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiBcdH1cbiBcbiBvdXQ6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiB4O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKTtcbkBAIC0yOTc2LDcgJiM0MzsyOTgzLDcgQEAgaW50IHhmcm1fdXNlcl9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbiBcdGlmIChJU19FUlIoZGF0YSkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGRhdGEpO1xuIFxuLVx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UKSBcdTAwMjZcdTAwMjYgaW5fY29tcGF0X3N5c2NhbGwoKSkge1xuIFx0XHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG4gXG4gXHRcdGlmICgheHRyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNzFhNGI3Mjc4ZWJhOTIuLjYxZWI1ZGUzM2I4N2VlIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMjQ4NSw5ICYjNDM7MjQ4NSw5IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR9XG4gXG4gXHR1cCA9IG5sbXNnX2RhdGEobmxoKTtcbi1cdHVwLVx1MDAzZWluID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dO1xuLVx0dXAtXHUwMDNlZndkID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXTtcbi1cdHVwLVx1MDAzZW91dCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF07XG4mIzQzO1x0dXAtXHUwMDNlaW4gPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dKTtcbiYjNDM7XHR1cC1cdTAwM2Vmd2QgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSk7XG4mIzQzO1x0dXAtXHUwMDNlb3V0ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pO1xuIFxuIFx0bmxtc2dfZW5kKHNrYiwgbmxoKTtcbiBcbkBAIC0yNTExLDEzICYjNDM7MjUxMSwxMyBAQCBzdGF0aWMgaW50IHhmcm1fc2V0X2RlZmF1bHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgeGZybV91c2VycG9saWN5X2RlZmF1bHQgKnVwID0gbmxtc2dfZGF0YShubGgpO1xuIFxuIFx0aWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC1cdTAwM2VpbikpXG4tXHRcdG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSA9IHVwLVx1MDAzZWluO1xuJiM0MztcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0sIHVwLVx1MDAzZWluKTtcbiBcbiBcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlZndkKSlcbi1cdFx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSA9IHVwLVx1MDAzZWZ3ZDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSwgdXAtXHUwMDNlZndkKTtcbiBcbiBcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlb3V0KSlcbi1cdFx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSA9IHVwLVx1MDAzZW91dDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSwgdXAtXHUwMDNlb3V0KTtcbiBcbiBcdHJ0X2dlbmlkX2J1bXBfYWxsKG5ldCk7XG4gXG5AQCAtMjU0Nyw5ICYjNDM7MjU0Nyw5IEBAIHN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdH1cbiBcbiBcdHJfdXAgPSBubG1zZ19kYXRhKHJfbmxoKTtcbi1cdHJfdXAtXHUwMDNlaW4gPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl07XG4tXHRyX3VwLVx1MDAzZWZ3ZCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF07XG4tXHRyX3VwLVx1MDAzZW91dCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF07XG4mIzQzO1x0cl91cC1cdTAwM2VpbiA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0pO1xuJiM0MztcdHJfdXAtXHUwMDNlZndkID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF0pO1xuJiM0MztcdHJfdXAtXHUwMDNlb3V0ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pO1xuIFx0bmxtc2dfZW5kKHJfc2tiLCByX25saCk7XG4gXG4gXHRyZXR1cm4gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcl9za2IsIHBvcnRpZCk7XG5AQCAtMzQ3Miw3ICYjNDM7MzQ3Miw3IEBAIHN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRpZiAoIW5ldGxpbmtfbmV0X2NhcGFibGUoc2tiLCBDQVBfTkVUX0FETUlOKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCkgXHUwMDI2XHUwMDI2IGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcbiBcdFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuIFxuIFx0XHRpZiAoIXh0cilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O05FVF9LRVkmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV91c2VyX3Jjdl9tc2cmIzM0OywKICAgICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9kZWZhdWx0JiMzNDssCiAgICAmIzM0O3hmcm1fdXNlcl9wb2xpY3kmIzM0OywKICAgICYjMzQ7cGZrZXlfYWRkJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7eGZybV9nZXRfc3BkaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFhGUk0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYm91bmRzIGNoZWNrcyBmb3IgYWRkcmVzcyBtYXRjaGluZywgZml4aW5nIGRhdGEgcmFjZXMgaW4gcG9saWN5IGNvdW50cy9kZWZhdWx0cywgYWRqdXN0aW5nIGRldiByZWZjb3VudGluZyBpbiB4ZnJtX2lucHV0LCBhbmQgcmVmYWN0b3JpbmcgZXNwaW50Y3AgbWVzc2FnZSBzZW5kaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBJUHNlYyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjY1ZWQyNmNlMTBiOGEwYmU2NzBkOWQ4MTA0NTBhMzBkOWNiZWE2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDIyIDA4OjE1OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDg3NDQwOTEyN2UyOTIxLi5mOGM5MDliMGYwYzM0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtOTQzLDYgJiM0Mzs5NDMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcl9tYXRjaChjb25zdCB2b2lkICp0b2tlbjEsIGNvbnN0IHZvaWQgKnRva2VuMiwKIAl1bnNpZ25lZCBpbnQgcGR3OwogCXVuc2lnbmVkIGludCBwYmk7CiAKJiM0MzsJaWYgKHByZWZpeGxlbiAmZ3Q7IDEyOCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlwZHcgPSBwcmVmaXhsZW4gJmd0OyZndDsgNTsJICAvKiBudW0gb2Ygd2hvbGUgdTMyIGluIHByZWZpeCAqLwogCXBiaSA9IHByZWZpeGxlbiAmYW1wOyAgMHgxZjsgIC8qIG51bSBvZiBiaXRzIGluIGluY29tcGxldGUgdTMyIGluIHByZWZpeCAqLwogCkBAIC05NjcsNiAmIzQzOzk3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcjRfbWF0Y2goX19iZTMyIGExLCBfX2JlMzIgYTIsIHU4IHByZWZpeGxlbikKIAkvKiBDOTkgNi41LjcgKDMpOiB1MzIgJmx0OyZsdDsgMzIgaXMgdW5kZWZpbmVkIGJlaGF2aW91ciAqLwogCWlmIChzaXplb2YobG9uZykgPT0gNCAmYW1wOyZhbXA7IHByZWZpeGxlbiA9PSAwKQogCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKHByZWZpeGxlbiAmZ3Q7IDMyKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCXJldHVybiAhKChhMSBeIGEyKSAmYW1wOyBodG9ubCh+MFVMICZsdDsmbHQ7ICgzMiAtIHByZWZpeGxlbikpKTsKIH0KIApAQCAtMTI1MCw4ICYjNDM7MTI1Nyw4IEBAIGludCBfX3hmcm1fcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICosIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsCiBzdGF0aWMgaW5saW5lIGJvb2wgX194ZnJtX2NoZWNrX25vcG9saWN5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIGludCBkaXIpCiB7Ci0JaWYgKCFuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W2Rpcl0gJmFtcDsmYW1wOyAhc2VjcGF0aF9leGlzdHMoc2tiKSkKLQkJcmV0dXJuIG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQ7CiYjNDM7CWlmICghUkVBRF9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXSkgJmFtcDsmYW1wOyAhc2VjcGF0aF9leGlzdHMoc2tiKSkKJiM0MzsJCXJldHVybiBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQ7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzUxLDggJiM0MzsxMzU4LDggQEAgc3RhdGljIGlubGluZSBpbnQgeGZybV9yb3V0ZV9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0mZ3Q7ZGV2KTsKIAotCWlmICghbmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdICZhbXA7JmFtcDsKLQkgICAgbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0gPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVCkKJiM0MzsJaWYgKCFSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQpCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIChza2JfZHN0KHNrYiktJmd0O2ZsYWdzICZhbXA7IERTVF9OT1hGUk0pIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwppbmRleCBjMmVhYzg0NGJjZGI0ZS4uZjZmMmE4ZWYzZjg4NDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtNzYsOCAmIzQzOzc2LDYgQEAgaW50IHhmcm00X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKQogCU5GX0hPT0soTkZQUk9UT19JUFY0LCBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQlkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLAogCQl4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKTsKLQlpZiAoYXN5bmMpCi0JCWRldl9wdXQoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKaW5kZXggNjk5YTAwMWFjMTY2MjkuLjg5ZDA0NDNiNTMwNzMyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKQEAgLTcxLDggJiM0Mzs3MSw2IEBAIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYykKIAlORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9QUkVfUk9VVElORywKIAkJZGV2X25ldChkZXYpLCBOVUxMLCBza2IsIGRldiwgTlVMTCwKIAkJeGZybTZfdHJhbnNwb3J0X2ZpbmlzaDIpOwotCWlmIChhc3luYykKLQkJZGV2X3B1dChkZXYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuYwppbmRleCA5Y2ZmZWVmMThjZDkxYy4uMzIxNmY4OTdhMzA1ZTAgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMTIxOCw2ICYjNDM7MTIxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqIHBma2V5X21zZzJ4ZnJtX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCXN0cmNweSh4LSZndDtjYWxnLSZndDthbGdfbmFtZSwgYS0mZ3Q7bmFtZSk7CiYjNDM7CQkJeC0mZ3Q7Y2FsZy0mZ3Q7YWxnX2tleV9sZW4gPSAwOwogCQkJeC0mZ3Q7cHJvcHMuY2FsZ28gPSBzYS0mZ3Q7c2FkYl9zYV9lbmNyeXB0OwogCQl9IGVsc2UgewogCQkJaW50IGtleXNpemUgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmMKaW5kZXggZDkwMzU1NDYzNzVlYmEuLjM3NGUxYjk2NDQzODM5IDEwMDY0NAotLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL2VzcGludGNwLmMKQEAgLTIxMiw0MyAmIzQzOzIxMiwyMyBAQCBzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLAogCXN0cnVjdCBza19tc2cgKnNrbXNnID0gJmFtcDtlbXNnLSZndDtza21zZzsKIAlib29sIG1vcmUgPSBmbGFncyAmYW1wOyBNU0dfTU9SRTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCWludCBkb25lID0gMDsKIAlpbnQgcmV0OwogCi0Jc2cgPSAmYW1wO3NrbXNnLSZndDtzZy5kYXRhW3NrbXNnLSZndDtzZy5zdGFydF07CiAJZG8gewogCQlzdHJ1Y3QgYmlvX3ZlYyBidmVjOwotCQlzaXplX3Qgc2l6ZSA9IHNnLSZndDtsZW5ndGggLSBlbXNnLSZndDtvZmZzZXQ7Ci0JCWludCBvZmZzZXQgPSBzZy0mZ3Q7b2Zmc2V0ICYjNDM7IGVtc2ctJmd0O29mZnNldDsKLQkJc3RydWN0IHBhZ2UgKnA7Ci0KLQkJZW1zZy0mZ3Q7b2Zmc2V0ID0gMDsKIAomIzQzOwkJc2cgPSAmYW1wO3NrbXNnLSZndDtzZy5kYXRhW3NrbXNnLSZndDtzZy5zdGFydF07CiAJCWlmIChzZ19pc19sYXN0KHNnKSAmYW1wOyZhbXA7ICFtb3JlKQogCQkJbXNnaGRyLm1zZ19mbGFncyAmYW1wOz0gfk1TR19NT1JFOwogCi0JCXAgPSBzZ19wYWdlKHNnKTsKLXJldHJ5OgotCQlidmVjX3NldF9wYWdlKCZhbXA7YnZlYywgcCwgc2l6ZSwgb2Zmc2V0KTsKLQkJaW92X2l0ZXJfYnZlYygmYW1wO21zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsICZhbXA7YnZlYywgMSwgc2l6ZSk7Ci0JCXJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgJmFtcDttc2doZHIsIHNpemUpOwotCQlpZiAocmV0ICZsdDsgMCkgewotCQkJZW1zZy0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0IC0gc2ctJmd0O29mZnNldDsKLQkJCXNrbXNnLSZndDtzZy5zdGFydCAmIzQzOz0gZG9uZTsKJiM0MzsJCWJ2ZWNfc2V0X3BhZ2UoJmFtcDtidmVjLCBzZ19wYWdlKHNnKSwgc2ctJmd0O2xlbmd0aCwgc2ctJmd0O29mZnNldCk7CiYjNDM7CQlpb3ZfaXRlcl9idmVjKCZhbXA7bXNnaGRyLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgJmFtcDtidmVjLCAxLCBzZy0mZ3Q7bGVuZ3RoKTsKJiM0MzsJCXJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgJmFtcDttc2doZHIsIHNnLSZndDtsZW5ndGgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJaWYgKHJldCAhPSBzaXplKSB7Ci0JCQlvZmZzZXQgJiM0Mzs9IHJldDsKLQkJCXNpemUgLT0gcmV0OwotCQkJZ290byByZXRyeTsKLQkJfQogCi0JCWRvbmUmIzQzOyYjNDM7OwotCQlwdXRfcGFnZShwKTsKLQkJc2tfbWVtX3VuY2hhcmdlKHNrLCBzZy0mZ3Q7bGVuZ3RoKTsKLQkJc2cgPSBzZ19uZXh0KHNnKTsKLQl9IHdoaWxlIChzZyk7CiYjNDM7CQlza19tc2dfZnJlZV9wYXJ0aWFsKHNrLCBza21zZywgcmV0KTsKJiM0MzsJfSB3aGlsZSAoc2ttc2ctJmd0O3NnLnNpemUpOwogCiAJbWVtc2V0KGVtc2csIDAsIHNpemVvZigqZW1zZykpOwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKaW5kZXggZTRjMmNkMjQ5MzZkM2YuLmVlY2FiMzM3YmQwYTc5IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCkBAIC00NjcsNiAmIzQzOzQ2Nyw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIHsKIAljb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbzsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0mZ3Q7ZGV2OwogCWludCBlcnI7CiAJX19iZTMyIHNlcTsKIAlfX2JlMzIgc2VxX2hpOwpAQCAtNDkzLDcgJiM0Mzs0OTQsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAJCQkJCSAgICAgICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVJTlZBTElEKTsKIAogCQkJaWYgKGVuY2FwX3R5cGUgPT0gLTEpCi0JCQkJZGV2X3B1dChza2ItJmd0O2Rldik7CiYjNDM7CQkJCWRldl9wdXQoZGV2KTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCkBAIC02NTUsMTYgJiM0Mzs2NTYsMTYgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCiAJCWlmICghY3J5cHRvX2RvbmUpIHsKIAkJCXNwaW5fdW5sb2NrKCZhbXA7eC0mZ3Q7bG9jayk7Ci0JCQlkZXZfaG9sZChza2ItJmd0O2Rldik7CiYjNDM7CQkJZGV2X2hvbGQoZGV2KTsKIAogCQkJbmV4dGhkciA9IHgtJmd0O3R5cGUtJmd0O2lucHV0KHgsIHNrYik7CiAJCQlpZiAobmV4dGhkciA9PSAtRUlOUFJPR1JFU1MpIHsKIAkJCQlpZiAoYXN5bmMpCi0JCQkJCWRldl9wdXQoc2tiLSZndDtkZXYpOwomIzQzOwkJCQkJZGV2X3B1dChkZXYpOwogCQkJCXJldHVybiAwOwogCQkJfQogCi0JCQlkZXZfcHV0KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJCQlkZXZfcHV0KGRldik7CiAJCQlzcGluX2xvY2soJmFtcDt4LSZndDtsb2NrKTsKIAkJfQogcmVzdW1lOgpAQCAtNjk5LDcgJiM0Mzs3MDAsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAJCWVyciA9IHhmcm1faW5uZXJfbW9kZV9pbnB1dCh4LCBza2IpOwogCQlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykgewogCQkJaWYgKGFzeW5jKQotCQkJCWRldl9wdXQoc2tiLSZndDtkZXYpOwomIzQzOwkJCQlkZXZfcHV0KGRldik7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIGlmIChlcnIpIHsKIAkJCVhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTlNUQVRFTU9ERUVSUk9SKTsKQEAgLTcyNiw5ICYjNDM7NzI3LDEyIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAkJY3J5cHRvX2RvbmUgPSBmYWxzZTsKIAl9IHdoaWxlICghZXJyKTsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJZXJyID0geGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHgtJmd0O3R5cGUtJmd0O3Byb3RvLCAwKTsKLQlpZiAoZXJyKQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJZ290byBkcm9wOwomIzQzOwl9CiAKIAluZl9yZXNldF9jdChza2IpOwogCkBAIC03MzksOCAmIzQzOzc0Myw5IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAkJaWYgKHNrYl92YWxpZF9kc3Qoc2tiKSkKIAkJCXNrYl9kc3RfZHJvcChza2IpOwogCQlpZiAoYXN5bmMpCi0JCQlkZXZfcHV0KHNrYi0mZ3Q7ZGV2KTsKJiM0MzsJCQlkZXZfcHV0KGRldik7CiAJCWdyb19jZWxsc19yZWNlaXZlKCZhbXA7Z3JvX2NlbGxzLCBza2IpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCXhvID0geGZybV9vZmZsb2FkKHNrYik7CkBAIC03NDgsMjMgJiM0Mzs3NTMsMjEgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCQkJeGZybV9ncm8gPSB4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HUk87CiAKIAkJZXJyID0gLUVBRk5PU1VQUE9SVDsKLQkJcmN1X3JlYWRfbG9jaygpOwogCQlhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KHgtJmd0O3Byb3BzLmZhbWlseSk7CiAJCWlmIChsaWtlbHkoYWZpbmZvKSkKIAkJCWVyciA9IGFmaW5mby0mZ3Q7dHJhbnNwb3J0X2ZpbmlzaChza2IsIHhmcm1fZ3JvIHx8IGFzeW5jKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWlmICh4ZnJtX2dybykgewogCQkJc3AgPSBza2Jfc2VjX3BhdGgoc2tiKTsKIAkJCWlmIChzcCkKIAkJCQlzcC0mZ3Q7b2xlbiA9IDA7CiAJCQlpZiAoc2tiX3ZhbGlkX2RzdChza2IpKQogCQkJCXNrYl9kc3RfZHJvcChza2IpOwotCQkJaWYgKGFzeW5jKQotCQkJCWRldl9wdXQoc2tiLSZndDtkZXYpOwogCQkJZ3JvX2NlbGxzX3JlY2VpdmUoJmFtcDtncm9fY2VsbHMsIHNrYik7Ci0JCQlyZXR1cm4gZXJyOwogCQl9CiAKJiM0MzsJCWlmIChhc3luYykKJiM0MzsJCQlkZXZfcHV0KGRldik7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTc3Miw3ICYjNDM7Nzc1LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCXNwaW5fdW5sb2NrKCZhbXA7eC0mZ3Q7bG9jayk7CiBkcm9wOgogCWlmIChhc3luYykKLQkJZGV2X3B1dChza2ItJmd0O2Rldik7CiYjNDM7CQlkZXZfcHV0KGRldik7CiAJeGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHggJmFtcDsmYW1wOyB4LSZndDt0eXBlID8geC0mZ3Q7dHlwZS0mZ3Q7cHJvdG8gOiBuZXh0aGRyLCAtMSk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCA5NTk1NDQ0MjU2OTI5MC4uNjM5OTM0ZjMwMDE2N2UgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjQyLDYgJiM0MzsyNDIsOSBAQCBfX3hmcm02X3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwpCiBib29sIHhmcm1fc2VsZWN0b3JfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbCwKIAkJCSB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiYjNDM7CWlmIChmYW1pbHkgIT0gc2VsLSZndDtmYW1pbHkgJmFtcDsmYW1wOyBzZWwtJmd0O2ZhbWlseSAhPSBBRl9VTlNQRUMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJc3dpdGNoIChmYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6CiAJCXJldHVybiBfX3hmcm00X3NlbGVjdG9yX21hdGNoKHNlbCwgZmwpOwpAQCAtNjg1LDcgJiM0Mzs2ODgsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX2J5aWR4X3Jlc2l6ZShzdHJ1Y3QgbmV0ICpuZXQpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fYnlkc3Rfc2hvdWxkX3Jlc2l6ZShzdHJ1Y3QgbmV0ICpuZXQsIGludCBkaXIsIGludCAqdG90YWwpCiB7Ci0JdW5zaWduZWQgaW50IGNudCA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXTsKJiM0MzsJdW5zaWduZWQgaW50IGNudCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W2Rpcl0pOwogCXVuc2lnbmVkIGludCBobWFzayA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfYnlkc3RbZGlyXS5obWFzazsKIAogCWlmICh0b3RhbCkKQEAgLTcxMSwxMiAmIzQzOzcxNCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCB4ZnJtX2J5aWR4X3Nob3VsZF9yZXNpemUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG90YWwpCiAKIHZvaWQgeGZybV9zcGRfZ2V0aW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJta19zcGRpbmZvICpzaSkKIHsKLQlzaS0mZ3Q7aW5jbnQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0lOXTsKLQlzaS0mZ3Q7b3V0Y250ID0gbmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdOwotCXNpLSZndDtmd2RjbnQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRF07Ci0Jc2ktJmd0O2luc2NudCA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU4mIzQzO1hGUk1fUE9MSUNZX01BWF07Ci0Jc2ktJmd0O291dHNjbnQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVCYjNDM7WEZSTV9QT0xJQ1lfTUFYXTsKLQlzaS0mZ3Q7Zndkc2NudCA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEJiM0MztYRlJNX1BPTElDWV9NQVhdOwomIzQzOwlzaS0mZ3Q7aW5jbnQgPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTl0pOwomIzQzOwlzaS0mZ3Q7b3V0Y250ID0gUkVBRF9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSk7CiYjNDM7CXNpLSZndDtmd2RjbnQgPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9GV0RdKTsKJiM0MzsJc2ktJmd0O2luc2NudCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0lOJiM0MztYRlJNX1BPTElDWV9NQVhdKTsKJiM0MzsJc2ktJmd0O291dHNjbnQgPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVQmIzQzO1hGUk1fUE9MSUNZX01BWF0pOwomIzQzOwlzaS0mZ3Q7Zndkc2NudCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRCYjNDM7WEZSTV9QT0xJQ1lfTUFYXSk7CiAJc2ktJmd0O3NwZGhjbnQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2lkeF9obWFzazsKIAlzaS0mZ3Q7c3BkaG1jbnQgPSB4ZnJtX3BvbGljeV9oYXNobWF4OwogfQpAQCAtMjMxOCw3ICYjNDM7MjMyMSw3IEBAIHN0YXRpYyB2b2lkIF9feGZybV9wb2xpY3lfbGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcikKIAl9CiAKIAlsaXN0X2FkZCgmYW1wO3BvbC0mZ3Q7d2Fsay5hbGwsICZhbXA7bmV0LSZndDt4ZnJtLnBvbGljeV9hbGwpOwotCW5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXSYjNDM7JiM0Mzs7CiYjNDM7CVdSSVRFX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtkaXJdLCBuZXQtJmd0O3hmcm0ucG9saWN5X2NvdW50W2Rpcl0gJiM0MzsgMSk7CiAJeGZybV9wb2xfaG9sZChwb2wpOwogfQogCkBAIC0yMzM3LDcgJiM0MzsyMzQwLDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqX194ZnJtX3BvbGljeV91bmxpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsCiAJfQogCiAJbGlzdF9kZWxfaW5pdCgmYW1wO3BvbC0mZ3Q7d2Fsay5hbGwpOwotCW5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXS0tOwomIzQzOwlXUklURV9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbZGlyXSwgbmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtkaXJdIC0gMSk7CiAKIAlyZXR1cm4gcG9sOwogfQpAQCAtMzIyMiw3ICYjNDM7MzIyNSw3IEBAIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsCiAKIAkJLyogVG8gYWNjZWxlcmF0ZSBhIGJpdC4uLiAgKi8KIAkJaWYgKCFpZl9pZCAmYW1wOyZhbXA7ICgoZHN0X29yaWctJmd0O2ZsYWdzICZhbXA7IERTVF9OT1hGUk0pIHx8Ci0JCQkgICAgICAgIW5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSkpCiYjNDM7CQkJICAgICAgICFSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSkpCiAJCQlnb3RvIG5vcG9sOwogCiAJCXhkc3QgPSB4ZnJtX2J1bmRsZV9sb29rdXAobmV0LCBmbCwgZmFtaWx5LCBkaXIsICZhbXA7eGZsbywgaWZfaWQpOwpAQCAtMzI5Niw3ICYjNDM7MzI5OSw3IEBAIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsCiAKIG5vcG9sOgogCWlmICgoIWRzdF9vcmlnLSZndDtkZXYgfHwgIShkc3Rfb3JpZy0mZ3Q7ZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfTE9PUEJBQ0spKSAmYW1wOyZhbXA7Ci0JICAgIG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykgewomIzQzOwkgICAgUkVBRF9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdKSA9PSBYRlJNX1VTRVJQT0xJQ1lfQkxPQ0spIHsKIAkJZXJyID0gLUVQRVJNOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTM3NTAsNyAmIzQzOzM3NTMsNyBAQCBpbnQgX194ZnJtX3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWNvbnN0IGJvb2wgaXNfY3J5cHRvX29mZmxvYWQgPSBzcCAmYW1wOyZhbXA7CiAJCQkoeGZybV9pbnB1dF9zdGF0ZShza2IpLSZndDt4c28udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTyk7CiAKLQkJaWYgKG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykgewomIzQzOwkJaWYgKFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7CiAJCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1BPTFMpOwogCQkJcmV0dXJuIDA7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCA1ODljM2I2ZTQ2NzkxMy4uOWU4N2Y3MDI4MjAxMDggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTEyMDcsOSAmIzQzOzEyMDcsMTEgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJc3RydWN0IGhsaXN0X2hlYWQgKnN0YXRlX2NhY2hlX2lucHV0OwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDsKIAomIzQzOwkvKiBCSCBpcyBhbHdheXMgZGlzYWJsZWQgb24gdGhlIGlucHV0IHBhdGguICovCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2luX3NvZnRpcnEoKTsKJiM0MzsKIAlzdGF0ZV9jYWNoZV9pbnB1dCA9IHJhd19jcHVfcHRyKG5ldC0mZ3Q7eGZybS5zdGF0ZV9jYWNoZV9pbnB1dCk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHgsIHN0YXRlX2NhY2hlX2lucHV0LCBzdGF0ZV9jYWNoZV9pbnB1dCkgewogCQlpZiAoeC0mZ3Q7cHJvcHMuZmFtaWx5ICE9IGZhbWlseSB8fAogCQkgICAgeC0mZ3Q7aWQuc3BpICAgICAgICE9IHNwaSB8fApAQCAtMTIyNywyMCAmIzQzOzEyMjksMjUgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJeGZybV9oYXNoX3B0cnNfZ2V0KG5ldCwgJmFtcDtzdGF0ZV9wdHJzKTsKIAogCXggPSBfX3hmcm1fc3RhdGVfbG9va3VwKCZhbXA7c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7Ci0KLQlpZiAoeCAmYW1wOyZhbXA7IHgtJmd0O2ttLnN0YXRlID09IFhGUk1fU1RBVEVfVkFMSUQpIHsKLQkJc3Bpbl9sb2NrX2JoKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7Ci0JCWlmIChobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlX2lucHV0KSkgewomIzQzOwlpZiAoeCkgewomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7CiYjNDM7CQlpZiAoeC0mZ3Q7a20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogVGhlIHN0YXRlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIERvbiYjMzk7dCBhZGQgaXQgdG8gdGhlIGNhY2hlIGJ1dCBzdGlsbAomIzQzOwkJCSAqIHJldHVybiBpdCB0byB0aGUgY2FsbGVyLgomIzQzOwkJCSAqLwomIzQzOwkJfSBlbHNlIGlmIChobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlX2lucHV0KSkgewogCQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KTsKIAkJfSBlbHNlIHsKIAkJCWhsaXN0X2RlbF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZV9pbnB1dCk7CiAJCQlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZV9pbnB1dCwgc3RhdGVfY2FjaGVfaW5wdXQpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO25ldC0mZ3Q7eGZybS54ZnJtX3N0YXRlX2xvY2spOwogCX0KIAogb3V0OgotCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiB4OwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7CkBAIC0yOTc2LDcgJiM0MzsyOTgzLDcgQEAgaW50IHhmcm1fdXNlcl9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbikKIAlpZiAoSVNfRVJSKGRhdGEpKQogCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKIAotCWlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpICZhbXA7JmFtcDsgaW5fY29tcGF0X3N5c2NhbGwoKSkgewogCQlzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7CiAKIAkJaWYgKCF4dHIpIHsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggNzFhNGI3Mjc4ZWJhOTIuLjYxZWI1ZGUzM2I4N2VlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMjQ4NSw5ICYjNDM7MjQ4NSw5IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpCiAJfQogCiAJdXAgPSBubG1zZ19kYXRhKG5saCk7Ci0JdXAtJmd0O2luID0gbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXTsKLQl1cC0mZ3Q7ZndkID0gbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF07Ci0JdXAtJmd0O291dCA9IG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdOwomIzQzOwl1cC0mZ3Q7aW4gPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7CiYjNDM7CXVwLSZndDtmd2QgPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF0pOwomIzQzOwl1cC0mZ3Q7b3V0ID0gUkVBRF9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdKTsKIAogCW5sbXNnX2VuZChza2IsIG5saCk7CiAKQEAgLTI1MTEsMTMgJiM0MzsyNTExLDEzIEBAIHN0YXRpYyBpbnQgeGZybV9zZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlzdHJ1Y3QgeGZybV91c2VycG9saWN5X2RlZmF1bHQgKnVwID0gbmxtc2dfZGF0YShubGgpOwogCiAJaWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC0mZ3Q7aW4pKQotCQluZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dID0gdXAtJmd0O2luOwomIzQzOwkJV1JJVEVfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dLCB1cC0mZ3Q7aW4pOwogCiAJaWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC0mZ3Q7ZndkKSkKLQkJbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF0gPSB1cC0mZ3Q7ZndkOwomIzQzOwkJV1JJVEVfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSwgdXAtJmd0O2Z3ZCk7CiAKIAlpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLSZndDtvdXQpKQotCQluZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSA9IHVwLSZndDtvdXQ7CiYjNDM7CQlXUklURV9PTkNFKG5ldC0mZ3Q7eGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdLCB1cC0mZ3Q7b3V0KTsKIAogCXJ0X2dlbmlkX2J1bXBfYWxsKG5ldCk7CiAKQEAgLTI1NDcsOSAmIzQzOzI1NDcsOSBAQCBzdGF0aWMgaW50IHhmcm1fZ2V0X2RlZmF1bHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJfQogCiAJcl91cCA9IG5sbXNnX2RhdGEocl9ubGgpOwotCXJfdXAtJmd0O2luID0gbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXTsKLQlyX3VwLSZndDtmd2QgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXTsKLQlyX3VwLSZndDtvdXQgPSBuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXTsKJiM0MzsJcl91cC0mZ3Q7aW4gPSBSRUFEX09OQ0UobmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7CiYjNDM7CXJfdXAtJmd0O2Z3ZCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSk7CiYjNDM7CXJfdXAtJmd0O291dCA9IFJFQURfT05DRShuZXQtJmd0O3hmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSk7CiAJbmxtc2dfZW5kKHJfc2tiLCByX25saCk7CiAKIAlyZXR1cm4gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcl9za2IsIHBvcnRpZCk7CkBAIC0zNDcyLDcgJiM0MzszNDcyLDcgQEAgc3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlpZiAoIW5ldGxpbmtfbmV0X2NhcGFibGUoc2tiLCBDQVBfTkVUX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpICZhbXA7JmFtcDsgaW5fY29tcGF0X3N5c2NhbGwoKSkgewogCQlzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7CiAKIAkJaWYgKCF4dHIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgWEZSTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzLCBtb3N0bHkgd2l0aGluIHRoZSBgbmV0L3hmcm0vYCwgYG5ldC9pcHY0L2AsIGBuZXQvaXB2Ni9gLCBhbmQgYG5ldC9rZXkvYCBkaXJlY3Rvcmllcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoZXNlIHNlZW0gdG8gYmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdGluZyB0aGUgWEZSTSAoSVBzZWMpIHN1YnN5c3RlbS4gR29vZCwgSSBsaWtlIHRoYXQ7IGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwsIG5vIGRvdWJ0LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC4KCiogICBgaW5jbHVkZS9uZXQveGZybS5oYDogQm91bmRzIGNoZWNrcyBmb3IgYGFkZHJfbWF0Y2hgIGFuZCBgYWRkcjRfbWF0Y2hgIGFyZSBhIGdvb2QgdGhpbmcuIFByZXZlbnRpbmcgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aCBgcHJlZml4bGVuYCBpcyBhIHNpbXBsZSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBvZnRlbiBvdmVybG9va2VkLiBVc2luZyBgUkVBRF9PTkNFYCBmb3IgYG5ldC0mZ3Q7eGZybS5wb2xpY3lfY291bnRgIGFuZCBgbmV0LSZndDt4ZnJtLnBvbGljeV9kZWZhdWx0YCBzdWdnZXN0cyBwb3RlbnRpYWwgbG9ja2xlc3MgYWNjZXNzIG9wdGltaXphdGlvbiwgYW5kIGl0JiMzOTtzIG5pY2UgdG8gc2VlLgoqICAgYG5ldC9pcHY0L3hmcm00X2lucHV0LmNgIGFuZCBgbmV0L2lwdjYveGZybTZfaW5wdXQuY2A6IFJlbW92aW5nIHRoYXQgYGRldl9wdXRgIGluIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCBhbmQgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLi4uIEhtbSwgSSB3b25kZXIgYWJvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBgZGV2X3B1dGAuIElzIHRoaXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3IgcG90ZW50aWFsIGRvdWJsZS1mcmVlcz8gTmVlZHMgc29tZSBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgYnV0IHRoZSBsb2dpYyBtaWdodCBiZSBwcm9ibGVtYXRpYy4KKiAgIGBuZXQva2V5L2FmX2tleS5jYDogQWRkaW5nIGB4LSZndDtjYWxnLSZndDthbGdfa2V5X2xlbiA9IDA7YCBpbiBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgIGxvb2tzIGxpa2UgYSBrZXkgbGVuZ3RoIHplcm9pbmcgb3V0LiBJcyB0aGlzIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha2FnZSwgb3Igd2hhdD8KKiAgIGBuZXQveGZybS9lc3BpbnRjcC5jYDogUmVmYWN0b3JpbmcgYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgIHRvIHVzZSBgc2tfbXNnX2ZyZWVfcGFydGlhbGAgaXMgbGlrZWx5IGFuIGVmZmljaWVuY3kgZ2FpbiwgYXZvaWRpbmcgdGhlIGZ1bGwgc2tiIGZyZWUuCiogICBgbmV0L3hmcm0veGZybV9pbnB1dC5jYDogQWRqdXN0aW5nIGBkZXZfcHV0YCBhbmQgYHJjdV9yZWFkX2xvY2tgIGxvZ2ljIGluIGB4ZnJtX2lucHV0YCBpcyBpbnRlcmVzdGluZy4gVGhlIGByY3VfcmVhZGAgc3R1ZmYgbmVlZHMgY2FyZWZ1bCBhdHRlbnRpb247IFJDVSBpcyBhbHdheXMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY29udGVudGlvbi4KKiAgIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYDogQWRkaW5nIGZhbWlseSBjaGVjayBpbiBgeGZybV9zZWxlY3Rvcl9tYXRjaGAgaXMgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgbWF5YmUgc29tZXRoaW5nIG1pc3NlZCBvcmlnaW5hbGx5LCBhbmQgaXQmIzM5O3MgZ29vZCB0byBzZWUuIFRoZSBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIGZvciBwb2xpY3kgY291bnRzIGFuZCBkZWZhdWx0cyBpcyBwcm9iYWJseSB0aGUgc2FtZSBhcyBgeGZybS5oYCwgbWFraW5nIHRoZSBhY2Nlc3Mgc2FmZXIuCiogICBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYDogYGxvY2tkZXBfYXNzZXJ0X2luX3NvZnRpcnEoKWAgaW4gYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCBpcyBhIGxvY2tkZXAgYWRkaXRpb24sIGFuZCByZW1vdmluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBzdWdnZXN0cyBhIGRpZmZlcmVudCBsb2NraW5nIHN0cmF0ZWd5LiBUaGUgYHNwaW5fbG9ja19iaGAgdG8gYHNwaW5fbG9ja2AgY2hhbmdlIG5lZWRzIGNvbnRleHQuIEFuZCB0aGF0IGBJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpYCBjaGVjayB0byBgaW5fY29tcGF0X3N5c2NhbGwoKWAgaXMgcmVsYXRlZCB0byB0aGUgY29tcGF0aWJpbGl0eSBmb3IgYWxpZ25tZW50LCBhbmQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGl0IHRvIGRldGVybWluZSBpdHMgbmVjZXNzaXR5IGhlcmUuCiogICBgbmV0L3hmcm0veGZybV91c2VyLmNgOiBNb3JlIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgdXNhZ2UgZm9yIHBvbGljeSBkZWZhdWx0cywgZ29vZC4gQW5kIHRoZSBzYW1lIGBJU19FTkFCTEVEYCBjaGVjayBhcyBpbiBgeGZybV9zdGF0ZS5jYCwgYW5kIGFnYWluLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGxvZ2ljLgoKQWxyaWdodCwgc28gdGhlIG1ham9yIGNoYW5nZSBpcyBYRlJNIChJUHNlYykuIFRpbWUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkga25vdyBgQ09ORklHX1hGUk1gIGVuYWJsZXMgdGhlIFhGUk0gY29yZS4gYENPTkZJR19YRlJNX0VTUElOVENQYCBpcyBvYnZpb3VzbHkgZm9yIGBlc3BpbnRjcC5jYC4gYENPTkZJR19ORVRfS0VZYCBoYW5kbGVzIGBuZXQva2V5L2FmX2tleS5jYC4gYG5ldC9pcHY0L3hmcm00X2lucHV0LmNgLi4uIHRoYXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBFU1AsIGJ1dCBJIHNob3VsZCBsb29rIGF0IGFsbCB0aGUgZGVwZW5kZW5jaWVzLiBgQ09ORklHX1hGUk1fVVNFUmAgY292ZXJzIGB4ZnJtX3VzZXIuY2AsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIGZpcmUgdXAgc29tZSBjb25maWcgdG9vbHMgYW5kIGdldCB0aGlzIHJpZ2h0LiBJIG5lZWQgdG8gYmUgc3VyZSBJIGFtIHRlc3RpbmcgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBYRlJNIE1ha2VmaWxlIGZvciBgZXNwaW50Y3BgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGBlc3BpbnRjcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIFhGUk0gcG9ydGlvbiBvZiB0aGUga2VybmVsLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG5ldC94ZnJtL2AgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIEl04oCZcyB0aGUgY2VudHJhbCBodWIgZm9yIGhvdyBYRlJNIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHNvIGl0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgZGlyZWN0aXZlcyByZWdhcmRpbmcgYW55IHNwZWNpZmljIHByb3RvY29sIGltcGxlbWVudGF0aW9ucyBsaWtlIGBlc3BpbnRjcGAuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciB0aGF0IHN0cmluZyB3aXRoaW4gdGhlIE1ha2VmaWxlIHRvIHNlZSB3aGF0IHBvcHMgdXAuIFRoaXMgYXBwcm9hY2ggd2lsbCBxdWlja2x5IHJldmVhbCBob3cgYGVzcGludGNwYCBpcyBpbnRlZ3JhdGVkIG9yIGRlZmluZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIHByb3ZpZGluZyB2YWx1YWJsZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgWEZSTSBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX3N0YXRlX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBFU1AgaW4gVENQIEVuY2Fwc3VsYXRpb24qKgoKQWxyaWdodCwgdGhlIHB1enpsZSBwaWVjZSBJIG5lZWQgdG8gbG9vayBhdCBoZXJlIGlzIGRlZmluaXRlbHkgYENPTkZJR19YRlJNX0VTUElOVENQYC4gVGhhdCYjMzk7cyBhIGtleSBzZXR0aW5nLiBJdCBtZWFucyBJJiMzOTttIHdvcmtpbmcgd2l0aCBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgKEVTUCkgYW5kIGl0JiMzOTtzIGJlaW5nIHRyYW5zcG9ydGVkICp3aXRoaW4qIFRDUC4gTm93LCB3aGF0JiMzOTtzIHJlbGF0ZWQgdG8gdGhpcz8gSSBoYXZlIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSB3aWRlciBrZXJuZWwgc2VjdXJpdHkgYXJjaGl0ZWN0dXJlLgoKTGV0IG1lIHRoaW5rLi4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBuZXQva2V5L2FmX2tleS5jYD8gVGhhdCBzZWVtcyBsaWtlIGFuIG9idmlvdXMgcGxhY2UgdG8gY2hlY2sgZm9yIGFueSBob29rcyBvciBpbnRlcmFjdGlvbnMsIHNpbmNlIGl0IGRlYWxzIHdpdGgga2V5IG1hbmFnZW1lbnQgYW5kIHRoZSBjb3JlIHNlY3VyaXR5IGZyYW1ld29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgaW4gYGFmX2tleS5jYCBtaWdodCBiZSBpbnZvbHZlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzdHJ1Y3R1cmVzLCBvciBkYXRhIGZsb3dzIHRoYXQgcGVydGFpbiB0byB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIG1vZGlmaWVzIG9yIGFmZmVjdHMgYW55IG9mIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGtleSBoYW5kbGluZyBvciBpZiBpdCB1dGlsaXplcyBpdCBkaXJlY3RseS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggbW9kdWxlIHV0aWxpemVzIHdoaWNoIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIG9mIGJvdGggb2YgdGhvc2UgZmlsZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGV5IGZpdCB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZl9rZXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQva2V5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9rZXkvTWFrZWZpbGUtNS1cbm5ldC9rZXkvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0tFWSkgJiM0Mzs9IGFmX2tleS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgU2VjdXJpdHkgQ29udW5kcnVtcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBgQ09ORklHX05FVF9LRVlgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudCBoZXJlLiYjMzQ7IFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRoYXQgZW5hYmxlZC4gQnV0IGl0IGJlZ3MgdGhlIHF1ZXN0aW9uLCBpZiB0aGF0JiMzOTtzIHRoZSBiYXNlIHJlcXVpcmVtZW50LCBob3cgYXJlIHRoaW5ncyBiZWluZyBoYW5kbGVkLgoKTm93LCBteSBtaW5kIHNoaWZ0cyB0byBhIGNydWNpYWwgY29tcG9uZW50OiBgeGZybV91c2VyLmNgLiAgSSYjMzk7bSBhc2tpbmcgbXlzZWxmLCAqaG93KiBpcyB0aGlzIG1vZHVsZSBiZWluZyBlbXBsb3llZCBpbiB0aGUgcmVsZXZhbnQgdXNlIGNhc2U/IFdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGlzIGZpbGU/IElzIGB4ZnJtX3VzZXIuY2AgYmVpbmcgdXNlZCBhcyBleHBlY3RlZCBoZXJlPyBJcyBpdCBwcm9wZXJseSBpbnRlZ3JhdGluZyB3aXRoIHRoZSBrZXlpbmcgbWF0ZXJpYWw/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHN1YnRsZSBtaXNjb25maWd1cmF0aW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgc3RlbW1pbmcgZnJvbSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgQ09ORklHX05FVF9LRVlgIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBpbXBsZW1lbnRlZCBpbiB0aGF0IHVzZXItc3BhY2UgaW50ZXJmYWNlPyBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgaG93IGtleWluZyBtYXRlcmlhbCBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGtleWluZyBzdWJzeXN0ZW0sIHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gaXMgZWZmZWN0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV91c2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX1hGUk1fQUxHTykgJiM0Mzs9IHhmcm1fYWxnby5vXG5uZXQveGZybS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfWEZSTV9VU0VSKSAmIzQzOz0geGZybV91c2VyLm9cbm5ldC94ZnJtL01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19YRlJNX1VTRVJfQ09NUEFUKSAmIzQzOz0geGZybV9jb21wYXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBYRlJNIEtlcm5lbCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gKkNPTkZJR19YRlJNX1VTRVIqIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUuIEkga25vdyB0aGF0IG11Y2guIFRoaXMgaXMgYSBjb3JlIGJ1aWxkaW5nIGJsb2NrLiBOb3csIHdoZXJlIGFyZSB3ZSB3aXRoIHRoZSBpbnB1dCBwYXRoPyBMZXQgbWUgdGhpbmsuLi4gd2hhdCBhYm91dCAqeGZybV9pbnB1dC5jKj8gVGhhdCBmaWxlIGZlZWxzIGxpa2UgaXQmIzM5O3MgZ29pbmcgdG8gYmUgY2VudHJhbCB0byB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gdGhleSBhcnJpdmUuIFRoYXQgZmlsZSBpcyBwcm9iYWJseSBrZXkgdG8gaG93IHRoZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGlzIHNldCB1cCBhbmQgd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pbnB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTU6XHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfWEZSTWAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSBmb3IgYW55IFhGUk0tcmVsYXRlZCBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0JiMzOTtzIGV4cGVjdGVkLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBmZWF0dXJlIEkmIzM5O20gd29ya2luZyB3aXRoLCBzbyBsZXQmIzM5O3MgY2hlY2sgb24gdGhlIGBDT05GSUdfWEZSTV9FU1BJTlRDUGAgb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW4gYG5ldC94ZnJtL0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gYG5ldC9pcHY0L0tjb25maWdgIHRvIHBpbiBkb3duIHByZWNpc2VseSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCBvdGhlciBvcHRpb25zIGl0IG1heSBkZXBlbmQgb24uIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRlbHZpbmcgaW50byBYRlJNX0VTUElOVENQKioKClJpZ2h0LCBzbyBgWEZSTV9FU1BJTlRDUGAuLi4gYSBib29sZWFuLCBsaWtlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgY29udHJvbGxlZCBieSBzb21lIG90aGVyIHNldHRpbmcuIEkgc3VzcGVjdCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZXhwb3NlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIGJhY2sgdGhlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZsYWcgaXMgZGVmaW5lZCBhbmQgaG93IGl0cyB2YWx1ZSBpcyBkZXRlcm1pbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgZnJhbWV3b3JrOyB3aGF0IGRvZXMgaXQgaW1wYWN0LCBhbmQgd2hhdCB0cmlnZ2VycyBpdHMgc2V0dGluZz8gVGhpcyBpc24mIzM5O3QganVzdCBhIHJhbmRvbSBib29sZWFuOyBpdCBoYXMgaW1wbGljYXRpb25zLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRob3NlIGltcGxpY2F0aW9ucyB0byBmdWxseSBjb21wcmVoZW5kIGl0cyBpbnRlbmRlZCBmdW5jdGlvbi4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgZW5jYXBzdWxhdGlvbiwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByb3RvY29scyBvciBtZWNoYW5pc21zIGl0JiMzOTtzIHdvcmtpbmcgd2l0aC4gVGltZSB0byBkaXNzZWN0IHRoZSBjb2RlYmFzZSBhbmQgZm9sbG93IHRoZSBicmVhZGNydW1icy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk1fRVNQSU5UQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWc6Mzg3Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzg4LVx0aGVscFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NjgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTmV0d29yayBTZWN1cml0eSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIHVzZXItZmFjaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgRVNQIGluIFRDUCBhcmUgYElORVRfRVNQSU5UQ1BgIGFuZCBgSU5FVDZfRVNQSU5UQ1BgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBrZXkgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYENPTkZJR19ORVRfS0VZYCBvcHRpb24gaW4gdGhlIGBuZXQva2V5L0tjb25maWdgIGZpbGUuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgRVNQIG92ZXIgVENQIGZlYXR1cmVzIGludGVncmF0ZSB3aXRoaW4gdGhlIGxhcmdlciBuZXR3b3JrIHNlY3VyaXR5IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9LRVkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMDY9Y29uZmlnIFhGUk1fSVBDT01QXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMTEtXG5uZXQveGZybS9LY29uZmlnOjExMjpjb25maWcgTkVUX0tFWVxubmV0L3hmcm0vS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtQRl9LRVkgc29ja2V0cyAoZGVwcmVjYXRlZClcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTEyNC1cbm5ldC94ZnJtL0tjb25maWc6MTI1OmNvbmZpZyBORVRfS0VZX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctMTI2LVx0Ym9vbCBcJiMzNDtQRl9LRVkgTUlHUkFURVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRlY2lwaGVyaW5nIHRoZSBDb25maWd1cmF0aW9uIENsdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IHRoaW5nIGhlcmUgc2VlbXMgdG8gYmUgYE5FVF9LRVlgLiBUaGF0JiMzOTtzIGxpa2VseSB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIGtleWluZy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZW50YWlscyBpbiB0ZXJtcyBvZiB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4gTGV0IG1lIHNlZSB3aGF0IGBDT05GSUdfWEZSTV9VU0VSYCBsb29rcyBsaWtlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoYXQgdGllcyBpbnRvIGhvdyB0aGlzIGBORVRfS0VZYCBpcyBzZXQuIFdoZXJlIGRvZXMgdGhpcyBnbyBhbmQgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fVVNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTMxLVxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMDQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipYRlJNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBYRlJNX1VTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJpZ2h0IG5vdy4gVGhhdCBzZWVtcyB0byBiZSB0aGUga2V5IGZvciB1c2VyLXNwYWNlIGNvbnRyb2wsIHJpZ2h0PyBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjb25maXJtIHRoYXQgYENPTkZJR19YRlJNYCBpdHNlbGYgaXMgZW5hYmxlZC4gR290dGEgbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uYWwgWEZSTSBmcmFtZXdvcmsgaXMgZXZlbiB0aGVyZSBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGUgdXNlci1zcGFjZSBzcGVjaWZpY3MuIEl0JiMzOTtzIHRoZSBwcmUtcmVxdWlzaXRlLCByZWFsbHkuIEdvdHRhIHdhbGsgYmVmb3JlIEkgY2FuIHJ1biwgYW5kIGFsbCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbm5ldC94ZnJtL0tjb25maWctMTMtXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cbm5ldC94ZnJtL0tjb25maWctMTUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNDItXG5uZXQveGZybS9LY29uZmlnOjQzOmNvbmZpZyBYRlJNX0lOVEVSRkFDRVxubmV0L3hmcm0vS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHZpcnR1YWwgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy01MC1cbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxubmV0L3hmcm0vS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy02MC1cbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy02Mi1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNzEtXG5uZXQveGZybS9LY29uZmlnOjcyOmNvbmZpZyBYRlJNX1NUQVRJU1RJQ1Ncbm5ldC94ZnJtL0tjb25maWctNzMtXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTgzLSMgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcbm5ldC94ZnJtL0tjb25maWctODUtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cbm5ldC94ZnJtL0tjb25maWc6OTM6Y29uZmlnIFhGUk1fRVNQXG5uZXQveGZybS9LY29uZmlnLTk0LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwNS1cbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxubmV0L3hmcm0vS2NvbmZpZy0xMDctXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnLTE0MC1cbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTYzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBQb25kZXJpbmdzKioKClJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGBYRlJNYCBib29sLCBhbmQgbXkgZ3V0IHJlYWN0aW9uIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgYmVpbmcgYnJvdWdodCBpbnRvIHRoZSBtaXggYnkgZWl0aGVyIGBJTkVUX0VTUGAgb3IgcG9zc2libHkgdGhyb3VnaCBgWEZSTV9VU0VSYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4KCk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVGAuIFRoYXQgc2V0dGluZyBvZnRlbiBiaXRlcyBtZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB1c2Vyc3BhY2UgYW5kIDY0LWJpdCBhbGlnbmVkIHN0cnVjdHVyZXMuIFRoZXJlIGNvdWxkIGJlIHNvbWUgaW50ZXJhY3Rpb24gdGhlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgYWxpZ25tZW50IGlzIGhhbmRsZWQgY29ycmVjdGx5IGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLCBvciBJJiMzOTttIGluIGZvciBhIHdvcmxkIG9mIHBhaW4gZG93biB0aGUgbGluZS4gVGhhdCYjMzk7cyBhIGtleSBwb3RlbnRpYWwgcGl0ZmFsbCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTMxNjY9Y29uZmlnIENPTVBBVFxuLS1cbmFyY2gveDg2L0tjb25maWctMzE2OS1cbmFyY2gveDg2L0tjb25maWc6MzE3MDpjb25maWcgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UXG5hcmNoL3g4Ni9LY29uZmlnLTMxNzEtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTI3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBhbmQgSW1wYWN0IG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSBzZWUgdGhpcyBpcyBjb250cm9sbGVkIGJ5IGEgYm9vbGVhbiwgbGlrZWx5IGdhdGVkIGJ5IGBDT01QQVRgLiBSaWdodCwgc28gdGhhdCBtZWFucyB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgYXJlOiBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGBORVRfS0VZYCwgYW5kIGBYRlJNX1VTRVJgLiBNYWtlcyBzZW5zZSBnaXZlbiB0aGUgbGlrZWx5IGludGVyYWN0aW9uIHdpdGggSVBTZWMgYW5kIHJlbGF0ZWQga2VybmVsIGZlYXR1cmVzLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCB0b3VjaGVzLiBMb29rcyBsaWtlIGl0IG1vZGlmaWVzIGEgZGVjZW50IGNodW5rIG9mIHRoZSBgeGZybWAgaW5mcmFzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0byBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYGFkZHJfbWF0Y2hgLCBgYWRkcjRfbWF0Y2hgLCBgX194ZnJtX2NoZWNrX25vcG9saWN5YCwgYW5kIGB4ZnJtX3JvdXRlX2ZvcndhcmRgLiBJdCBhbHNvIGluY2x1ZGVzIG1vZGlmaWNhdGlvbnMgdG8gY29yZSBmdW5jdGlvbnMgbGlrZSBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAsIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoYCwgYW5kIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAuIFRoZSBsaXN0IGdvZXMgb24sIHRvdWNoaW5nIGEgbG90IG9mIGZ1bmRhbWVudGFsIHBpZWNlcyBvZiB0aGUgeGZybSBzdGFjay4gSSYjMzk7bSBzZWVpbmcgc3R1ZmYgbGlrZSBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAsIGB4ZnJtX2lucHV0YCwgYHhmcm1fc2VsZWN0b3JfbWF0Y2hgLCBgeGZybV9zcGRfZ2V0aW5mb2AsIHBsdXMgYSBidW5jaCBvZiBwb2xpY3kgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgX194ZnJtX3BvbGljeV9saW5rYCwgYF9feGZybV9wb2xpY3lfdW5saW5rYCwgYW5kIG1vcmUuIFRoZXJlJiMzOTtzIGFsc28gYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAsIGBfX3hmcm1fcG9saWN5X2NoZWNrYCwgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCwgYW5kIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gZnVuY3Rpb25zOiBgeGZybV91c2VyX3BvbGljeWAsIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGFuZCBgeGZybV91c2VyX3Jjdl9tc2dgLgoKVGhhdCYjMzk7cyBhIGxvdCB0byBkaWdlc3QuIExldCBtZSBmaWx0ZXIgdGhpcyBsaXN0IGRvd24uIE9rYXksIGB4ZnJtX2lucHV0YCBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGggYW5kIGl0JiMzOTtzIGhlYXZpbHkgbW9kaWZpZWQgaGVyZSwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgZm9jdXMuIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgYXMgaXQgaXMgbGlrZWx5IGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24uIFRoZW4sIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgaXMgb24gdGhlIGludGVyZmFjZS4gQWxzbywgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGFuZCBgeGZybV91c2VyX3Jjdl9tc2dgIGFyZSBpbXBvcnRhbnQgZnVuY3Rpb25zIGFzIHdlbGwuIEkgdGhpbmsgYHhmcm1fdXNlcl9wb2xpY3lgIGlzIGEgcG9pbnQgb2YgY29uY2VybiwgYW5kIGB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cGAgd2lsbCBiZSBpbXBvcnRhbnQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgb25lIG91dCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1faW5wdXRfc3RhdGVfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMTc1PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyMDAtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTIwMTpzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAyLVx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyNTItfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEyNTM6RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTI1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBkaXNzZWN0aW5nIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYCBpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2A6CgoqKkRlZXAgRGl2ZSBpbnRvIEVTUC1pbi1UQ1AmIzM5O3MgTG9ja2VkIFNlbmQgUGF0aCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBpbnRlcmVzdGluZyB0aGluZ3M6ICYjMzQ7RVNQLWluLVRDUCYjMzQ7IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIElQc2VjIHRyYWZmaWMgb3ZlciBUQ1AsIHdoaWNoIGJyaW5ncyB3aXRoIGl0IGEgd2hvbGUgc2xldyBvZiBjb25zaWRlcmF0aW9ucyBhcm91bmQgTVRVIG1hbmFnZW1lbnQsIHNlcXVlbmNpbmcsIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdHJhbnNwb3J0IGFuZCBzZWN1cml0eSBsYXllcnMuIFRoZSAmIzM0O3NlbmRza21zZyYjMzQ7IHBhcnQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UgYXJlIGluIHRoZSBwYXRoIG9mIHNlbmRpbmcgYSBzb2NrZXQgbWVzc2FnZSwgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGEgZGF0YSB0cmFuc2Zlci4gQW5kLCB0aGUgJiMzNDtsb2NrZWQmIzM0OyBwYXJ0IHN1Z2dlc3RzIHdlJiMzOTtyZSBvcGVyYXRpbmcgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiwgcG90ZW50aWFsbHkgcHJvdGVjdGVkIGJ5IGEgbXV0ZXggb3Igc3BpbmxvY2suIFRoaXMgaW1wbGllcyBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucyBhcmUgYXQgcGxheSwgbWFraW5nIHRocmVhZCBzYWZldHkgYSBwcmltZSBjb25jZXJuLgoKTm93LCBteSBmb2N1cyB3aWxsIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgc3BlY2lmaWNzIG9mIGVuY2Fwc3VsYXRpbmcgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpIHBhY2tldHMgaW5zaWRlIFRDUC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBob3cgdGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzb3VyY2UgZGF0YSwgaG93IGl0IGNhbGN1bGF0ZXMgYW5kIGFkZHMgdGhlIG5lY2Vzc2FyeSBFU1AgaGVhZGVycywgaG93IGl0IHNldHMgdXAgdGhlIFRDUCBwYXlsb2FkLCBhbmQgaG93IGl0IGZpbmFsbHkgdHJhbnNtaXRzIHRoZSBkYXRhIG92ZXIgdGhlIG5ldHdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gbm90ZSBhbnkgc3BlY2lmaWMgbG9naWMgZm9yIGhhbmRsaW5nIGZyYWdtZW50ZWQgRVNQIGRhdGFncmFtcyBvciByZWFzc2VtYmx5IGlmIG5lZWRlZC4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgWEZSTSAodGhlIElQc2VjIGZyYW1ld29yayksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbnRlcmZhY2Ugd2l0aCB0aGUgWEZSTSBzdWJzeXN0ZW0gdG8gaGFuZGxlIHRoZSBhY3R1YWwgRVNQIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGNvbnRlbnRpb24gcG9pbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24uIEFyZSB0aGVyZSBhbnkgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJsb2NrIG9yIGludHJvZHVjZSBsYXRlbmN5PyBBbmQgaG93IGlzIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgSVBzZWMgb3BlcmF0aW9ucz8KCk15IHBsYW4gaXMgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uJiMzOTtzIGV4ZWN1dGlvbiB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBFU1AgYW5kIFRDUCBoZWFkZXIgbWFuaXB1bGF0aW9uIGhhcHBlbnMuIEnigJlsbCBrZWVwIGEgbG9va291dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoYXQgaGFwcGVucyBpZiBlbmNyeXB0aW9uIGZhaWxzLCBvciBpZiB0aGUgdHJhbnNtaXNzaW9uIGl0c2VsZiBmYWlscy4gT3ZlcmFsbCwgSSB3YW50IHRvIG1hcCBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBFU1AtaW4tVENQIGNvbW11bmljYXRpb24sIGFuZCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIG9wdGltaXphdGlvbiBvciBmdXJ0aGVyIHNjcnV0aW55LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vZXNwaW50Y3AuYz0xODU9c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2tiX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0yMDUtXG5uZXQveGZybS9lc3BpbnRjcC5jOjIwNjpzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yMDctXHRcdFx0XHQgICAgIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csIGludCBmbGFncylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTIzOD1zdGF0aWMgaW50IGVzcGludGNwX3B1c2hfbXNncyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jLTI1My1cdGVsc2Vcbm5ldC94ZnJtL2VzcGludGNwLmM6MjU0Olx0XHRlcnIgPSBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHNrLCBlbXNnLCBmbGFncyk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTI1NS1cdGlmIChlcnIgPT0gLUVBR0FJTikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc2NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgSVBzZWMgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMgSVBzZWMgaXNzdWUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGhvdyB0aGUga2VybmVsIHRyYW5zbGF0ZXMgYSBQRl9LRVkgbWVzc2FnZSBpbnRvIGFuIFhGUk0gc3RhdGUgY2hhbmdlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBzdGFydCB3aXRoIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAuIExldCYjMzk7cyBuYXZpZ2F0ZSB0byBgbmV0L2tleS9hZl9rZXkuY2AgYW5kIHRha2UgYSBsb29rLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IHdoZXJlIHRoZSByYXcgUEZfS0VZIG1lc3NhZ2VzIGFyZSB1bnBhY2tlZCBhbmQgdXNlZCB0byBjb25maWd1cmUgdGhlIHNlY3VyaXR5IGFzc29jaWF0aW9ucyBhbmQgcG9saWNpZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgWEZSTSAoZVh0ZXJuYWwgRmlyZXdhbGwgYW5kIFJvdXRpbmcgTWVjaGFuaXNtKSBmcmFtZXdvcmsuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIGtleSBleGNoYW5nZXMgYXJlIGludGVycHJldGVkIGFuZCBob3cgdGhlIGRhdGEgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGJ1aWxkIChvciBtb2RpZnkpIGEgc3RhdGUgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhpcyBjb2RlIHBhdGggLSB0aGVzZSBhcmUgb2Z0ZW4ga2V5IHRvIHVuZGVyc3RhbmRpbmcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZmtleV9tc2cyeGZybV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9rZXkvYWZfa2V5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2tleS9hZl9rZXkuYz0xMDY5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnBma2V5X3hmcm1fc3RhdGUybXNnX2V4cGlyZShjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQva2V5L2FmX2tleS5jLTEwNzQtXG5uZXQva2V5L2FmX2tleS5jOjEwNzU6c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICogcGZrZXlfbXNnMnhmcm1fc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxubmV0L2tleS9hZl9rZXkuYy0xMDc2LVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBzYWRiX21zZyAqaGRyLFxuLS1cbm5ldC9rZXkvYWZfa2V5LmM9MTUxND1zdGF0aWMgaW50IHBma2V5X2FkZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzYWRiX21zZyAqaGRyLCB2b2lkICogY29uc3QgKmV4dF9oZHJzKVxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtMTUyMC1cbm5ldC9rZXkvYWZfa2V5LmM6MTUyMTpcdHggPSBwZmtleV9tc2cyeGZybV9zdGF0ZShuZXQsIGhkciwgZXh0X2hkcnMpO1xubmV0L2tleS9hZl9rZXkuYy0xNTIyLVx0aWYgKElTX0VSUih4KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczMzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8geGZybV9zZXRfZGVmYXVsdCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGB4ZnJtX3NldF9kZWZhdWx0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG5hdmlnYXRlIHN0cmFpZ2h0IHRvIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkZWZhdWx0cyBhcmUgYmVpbmcgaGFuZGxlZCBmcm9tIHRoZSB1c2VyIHNwYWNlIHBlcnNwZWN0aXZlLCB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIGludGVuZGVkIGZsb3cgaXMgYXMgZXhwZWN0ZWQuIFRoaXMgd2lsbCBnaXZlIGEgZ29vZCBncm91bmRpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGV4cGVjdGVkIG91dHB1dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTI1MDE9c3RhdGljIGJvb2wgeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKF9fdTggcG9saWN5KVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MDYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTA3OnN0YXRpYyBpbnQgeGZybV9zZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MDgtXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzODM9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MTgtXHRbWEZSTV9NU0dfR0VUU1BESU5GTyAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9zcGRpbmZvICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0MTk6XHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjAtXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBTdWJzeXN0ZW0mIzM5O3MgRGVmYXVsdCBQb2xpY3kgUmV0cmlldmFsKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgdGhlIGRlZmF1bHQgcG9saWN5IHdpdGhpbiB0aGUgWEZSTSAoSVBzZWMpIGZyYW1ld29yay4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIHRoaXMgZGVmYXVsdCBwb2xpY3kuIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYG5ldC94ZnJtL3hmcm1fdXNlci5jYCwgYXMgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHJlc2lkZSBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRgIHNvdW5kcyBsaWtlIGEgcHJvbWlzaW5nIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgZGVmYXVsdCBwb2xpY3kgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9nZXRfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTI1MDc9c3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTI4OnN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MjktXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzODM9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MTktXHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0MjA6XHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBVc2VyIFJlY2VpdmUgTWVzc2FnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHVzZXItc3BhY2UgWEZSTSBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgeGZybV91c2VyX3Jjdl9tc2dgIHdpdGhpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBYRlJNIHRvb2xzIGFuZCB0aGUga2VybmVsJiMzOTtzIFhGUk0gc3Vic3lzdGVtIGZvciBpbmJvdW5kIGRhdGEuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIHNvY2tldCByZWFkIGFuZCB1bnBhY2tzIHRoZSB1c2VyLXByb3ZpZGVkIGRhdGEuIEkgZXhwZWN0IGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciB2YXJpb3VzIFhGUk0gb3BlcmF0aW9ucywgbGlrZSBzZXR0aW5nIHVwIHBvbGljaWVzLCBzdGF0ZXMsIGFuZCBtYXliZSBldmVuIGtleSBtYW5hZ2VtZW50LiBJJiMzOTttIGFudGljaXBhdGluZyB0byBzZWUgYXJndW1lbnQgdmFsaWRhdGlvbiwgc2VjdXJpdHkgY2hlY2tzLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBkaXNwYXRjaCB0byB0aGUgcmVsZXZhbnQgaGFuZGxlcnMgYmFzZWQgb24gdGhlIG1lc3NhZ2UgdHlwZSDigJMgd2hldGhlciBpdCYjMzk7cyBhIHBvbGljeSBjcmVhdGlvbiwgc3RhdGUgYWRkaXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBUaW1lIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZGVhbGluZyB3aXRoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTM0MjM9c3RhdGljIGludCB4ZnJtX3JlamVjdF91bnVzZWRfYXR0cihpbnQgdHlwZSwgc3RydWN0IG5sYXR0ciAqKmF0dHJzLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0NTQtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDU1OnN0YXRpYyBpbnQgeGZybV91c2VyX3Jjdl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDU2LVx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1NDI9c3RhdGljIHZvaWQgeGZybV9uZXRsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDYtXHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NDc6XHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcdTAwMjZ4ZnJtX3VzZXJfcmN2X21zZyk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fY2ZnX211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5ODAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgSW1wbGVtZW50YXRpb24qKgoKT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB1c2VyLXNwYWNlIHBvbGljaWVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgdGhlIGB4ZnJtX3VzZXJfcG9saWN5YCBmdW5jdGlvbi4gSXQmIzM5O3MgaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGhlYWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlci1zdXBwbGllZCBwb2xpY3kgZW50cmllcyBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIFhGUk0gc3RhdGUgbWFuYWdlbWVudC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5OiBIb3cgYXJlIHRoZXNlIHBvbGljaWVzIHZhbGlkYXRlZD8gSG93IGFyZSB0aGV5IHN0b3JlZD8gSG93IGRvZXMgdGhlIHN5c3RlbSByZXNvbHZlIHRoZW0gdG8gYXBwbHkgc2VjdXJpdHkgYXNzb2NpYXRpb25zPyBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgcmVnYXJkaW5nIHBvdGVudGlhbCBjb25mbGljdHMgb3IgbWFsaWNpb3VzIHVzZXIgaW5wdXQ/IFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgcG9saWN5IGltcGxlbWVudGF0aW9uIHdpbGwgYmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3VzZXJfcG9saWN5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz0yOTYyPUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fdW5yZWdpc3Rlcl90cmFuc2xhdG9yKTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2NC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTY1OmludCB4ZnJtX3VzZXJfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2Ni17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjEtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjMwMjI6RVhQT1JUX1NZTUJPTCh4ZnJtX3VzZXJfcG9saWN5KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ0MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBJUHY0IFhGUk0gaW5wdXQgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0cmFuc3BvcnQgbGF5ZXIgcHJvY2Vzc2luZyB3cmFwcyB1cCBpbiB0aGUgY29udGV4dCBvZiBJUHNlYy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAgbG9jYXRlZCBpbiBgbmV0L2lwdjQveGZybTRfaW5wdXQuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBMZXQmIzM5O3MgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMgd2l0aGluIHRoYXQgZnVuY3Rpb24sIGZvY3VzaW5nIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgWEZSTSBmcmFtZXdvcmsgYW5kIHRoZSBldmVudHVhbCBkZWxpdmVyeSBvciBkcm9wIG9mIHRoZSBwYWNrZXQuIEdvdHRhIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGVycm9yIHBhdGhzLCBvZiBjb3Vyc2UuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgdHJhbnNwb3J0IGhlYWRlcnMgZ2V0IGhhbmRsZWQgYWZ0ZXIgSVBzZWMgcHJvY2Vzc2luZyBhbmQgd2hhdCB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIG91dGNvbWVzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTRfdHJhbnNwb3J0X2ZpbmlzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3hmcm00X2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQveGZybTRfaW5wdXQuYz0yOT1zdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNDgtXG5uZXQvaXB2NC94ZnJtNF9pbnB1dC5jOjQ5OmludCB4ZnJtNF90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElQdjYgVHJhbnNmb3JtYXRpb24gRW5naW5lKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGUgaXNzdWUgaXMgcHJvYmFibHkgaW4gdGhlIGZpbmFsaXphdGlvbiBvZiB0aGUgSVB2NiB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaGAgd2l0aGluIGBuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jYC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUga2V5IHBpZWNlIGluIGNsZWFuaW5nIHVwIGFuZCBmaW5hbGl6aW5nIGEgcHJvY2Vzc2VkIElQdjYgcGFja2V0LCBzcGVjaWZpY2FsbHkgYWZ0ZXIgaXQmIzM5O3MgYmVlbiB0aHJvdWdoIHZhcmlvdXMgWEZSTSB0cmFuc2Zvcm1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZGF0YSBwYXRoIOKAkyB3aGF0IGl0IGRvZXMgd2l0aCB0aGUgc2tiLCBhbnkgYXNzb2NpYXRlZCBzdGF0ZXMsIGFuZCBob3cgaXQgaGFuZHMgdGhpbmdzIG9mZiB0byB0aGUgbmV4dCBsYXllciBvciB0aGUgdXNlciBzcGFjZS4gSSYjMzk7bGwgYmUgbG9va2luZyBjYXJlZnVsbHkgYXQgdGhlIGVycm9yIGhhbmRsaW5nIGhlcmUsIHRvby4gQ291bGQgaXQgYmUgYSByZXNvdXJjZSBjbGVhbnVwIHByb2JsZW0gb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gaG93IHRoZSBza2IgaXMgYmVpbmcgaGFuZGxlZCBwb3N0LXRyYW5zZm9ybT8gVGhpcyBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNl90cmFuc3BvcnRfZmluaXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYveGZybTZfaW5wdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jPTMwPUVYUE9SVF9TWU1CT0woeGZybTZfcmN2X3NwaSk7XG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTMxLVxubmV0L2lwdjYveGZybTZfaW5wdXQuYzozMjpzdGF0aWMgaW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2gyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjYveGZybTZfaW5wdXQuYy0zMy1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYveGZybTZfaW5wdXQuYy00Mi1cbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6NDM6aW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKVxubmV0L2lwdjYveGZybTZfaW5wdXQuYy00NC17XG4tLVxubmV0L2lwdjYveGZybTZfaW5wdXQuYy03Mi1cdFx0ZGV2X25ldChkZXYpLCBOVUxMLCBza2IsIGRldiwgTlVMTCxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6NzM6XHRcdHhmcm02X3RyYW5zcG9ydF9maW5pc2gyKTtcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtNzQtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzODIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gSW5wdXQgUGF0aCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgWEZSTSBpc3N1ZS4gVGhlIG1vc3QgbGlrZWx5IGVudHJ5IHBvaW50IGZvciB0cm91Ymxlc2hvb3RpbmcgdGhpcyBwYXJ0aWN1bGFyIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhlIGB4ZnJtX2lucHV0YCBmdW5jdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdG8gYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUga2VybmVsIHByb2Nlc3NlcyBpbmJvdW5kIFhGUk0gdHJhZmZpYywgc28gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgd2l0aGluIGB4ZnJtX2lucHV0YCBpcyBjcnVjaWFsLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB0cmFjZSBob3cgdGhlIHBhY2tldHMgYXJlIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1faW5wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pbnB1dC5jLTItLypcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzozOiAqIHhmcm1faW5wdXQuY1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTQtICpcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9MzQ9c3RydWN0IHhmcm1fdHJhbnNfY2Ige1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00Ni1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo0NzpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1faW5wdXRfYWZpbmZvX2xvY2spO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjQ4OnN0YXRpYyBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gY29uc3QgX19yY3UgKnhmcm1faW5wdXRfYWZpbmZvWzJdW0FGX0lORVQ2ICYjNDM7IDFdO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTQ5LVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYz01Mz1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHhmcm1fdHJhbnNfdGFza2xldCwgeGZybV90cmFuc190YXNrbGV0KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01NC1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo1NTppbnQgeGZybV9pbnB1dF9yZWdpc3Rlcl9hZmluZm8oY29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICphZmluZm8pXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTYte1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy02MS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo2MjpcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX2lucHV0X2FmaW5mb19sb2NrKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo2MzpcdGlmICh1bmxpa2VseSh4ZnJtX2lucHV0X2FmaW5mb1thZmluZm8tXHUwMDNlaXNfaXBpcF1bYWZpbmZvLVx1MDAzZWZhbWlseV0pKVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTY0LVx0XHRlcnIgPSAtRUVYSVNUO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTY1LVx0ZWxzZVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjY2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVx1MDAzZWlzX2lwaXBdW2FmaW5mby1cdTAwM2VmYW1pbHldLCBhZmluZm8pO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjY3Olx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9pbnB1dF9hZmluZm9fbG9jayk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjgtXHRyZXR1cm4gZXJyO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTY5LX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo3MDpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfcmVnaXN0ZXJfYWZpbmZvKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03MS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo3MjppbnQgeGZybV9pbnB1dF91bnJlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gKmFmaW5mbylcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03My17XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc1LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc2Olx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1faW5wdXRfYWZpbmZvX2xvY2spO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjc3Olx0aWYgKGxpa2VseSh4ZnJtX2lucHV0X2FmaW5mb1thZmluZm8tXHUwMDNlaXNfaXBpcF1bYWZpbmZvLVx1MDAzZWZhbWlseV0pKSB7XG5uZXQveGZybS94ZnJtX2lucHV0LmM6Nzg6XHRcdGNvbnN0IHN0cnVjdCB4ZnJtX2lucHV0X2FmaW5mbyAqY3VyO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTc5LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjgwOlx0XHRjdXIgPSByY3VfYWNjZXNzX3BvaW50ZXIoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVx1MDAzZWlzX2lwaXBdW2FmaW5mby1cdTAwM2VmYW1pbHldKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04MS1cdFx0aWYgKHVubGlrZWx5KGN1ciAhPSBhZmluZm8pKVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04My1cdFx0ZWxzZVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0Olx0XHRcdFJDVV9JTklUX1BPSU5URVIoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVx1MDAzZWlzX2lwaXBdW2FmaW5mby1cdTAwM2VmYW1pbHldLCBOVUxMKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NS1cdH1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo4NjpcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1faW5wdXRfYWZpbmZvX2xvY2spO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTg3LVx0c3luY2hyb25pemVfcmN1KCk7XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg5LX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo5MDpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfdW5yZWdpc3Rlcl9hZmluZm8pO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTkxLVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjkyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gKnhmcm1faW5wdXRfZ2V0X2FmaW5mbyh1OCBmYW1pbHksIGJvb2wgaXNfaXBpcClcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy05My17XG5uZXQveGZybS94ZnJtX2lucHV0LmM6OTQ6XHRjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gKmFmaW5mbztcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy05NS1cbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtOTktXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQveGZybS94ZnJtX2lucHV0LmM6MTAwOlx0YWZpbmZvID0gcmN1X2RlcmVmZXJlbmNlKHhmcm1faW5wdXRfYWZpbmZvW2lzX2lwaXBdW2ZhbWlseV0pO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTEwMS1cdGlmICh1bmxpa2VseSghYWZpbmZvKSlcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9MTA2PXN0YXRpYyBpbnQgeGZybV9yY3ZfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGZhbWlseSwgdTggcHJvdG9jb2wsXG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTEwOS1cdGJvb2wgaXNfaXBpcCA9IChwcm90b2NvbCA9PSBJUFBST1RPX0lQSVAgfHwgcHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzoxMTA6XHRjb25zdCBzdHJ1Y3QgeGZybV9pbnB1dF9hZmluZm8gKmFmaW5mbztcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMTEtXHRpbnQgcmV0O1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTExMi1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzoxMTM6XHRhZmluZm8gPSB4ZnJtX2lucHV0X2dldF9hZmluZm8oZmFtaWx5LCBpc19pcGlwKTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMTQtXHRpZiAoIWFmaW5mbylcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9NDM1PXN0YXRpYyBpbnQgeGZybV9pbm5lcl9tb2RlX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00NjUtICovXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDY2OmludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00Njcte1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00ODYtXHRcdFx0XHQgICAgICBlbmNhcF90eXBlID09IFVEUF9FTkNBUF9FU1BJTlVEUCkpKSB7XG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDg3Olx0XHR4ID0geGZybV9pbnB1dF9zdGF0ZShza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTQ4OC1cbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNTkyLVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjU5MzpcdFx0eCA9IHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01OTQtXHRcdGlmICh4ID09IE5VTEwpIHtcbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzgyLX1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo3ODM6RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0KTtcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03ODQtXG5uZXQveGZybS94ZnJtX2lucHV0LmM6Nzg1OmludCB4ZnJtX2lucHV0X3Jlc3VtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkcilcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03ODYte1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4NzpcdHJldHVybiB4ZnJtX2lucHV0KHNrYiwgbmV4dGhkciwgMCwgLTEpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTc4OC19XG5uZXQveGZybS94ZnJtX2lucHV0LmM6Nzg5OkVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9yZXN1bWUpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTc5MC1cbi0tXG5uZXQveGZybS94ZnJtX2lucHV0LmM9ODQ2PUVYUE9SVF9TWU1CT0woeGZybV90cmFuc19xdWV1ZSk7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtODQ3LVxubmV0L3hmcm0veGZybV9pbnB1dC5jOjg0ODp2b2lkIF9faW5pdCB4ZnJtX2lucHV0X2luaXQodm9pZClcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjY5OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFBvaW50cyBmb3IgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGFuZCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgYXJlYXMgaW4gdGhlIFhGUk0gY29kZSB0aGF0IGFyZSBiZWluZyBtb2RpZmllZC4gYHhmcm1faW5wdXRgIGlzIGNhbGxlZCBieSBgeGZybTRfcmN2YCBhbmQgYHhmcm02X3JjdmAsIGFuZCBpdCYjMzk7cyBleHBvcnRlZCwgc28gdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgaW50ZXJlc3QuIEkmIzM5O2xsIGluY2x1ZGUgaXQgaW4gRm9jdXNTeW1ib2xzLCB0aG91Z2ggSSB3b25kZXIgaWYgaXQmIzM5O3MgdG9vIGJyb2FkOyB0aGUgcGF0Y2ggZG9lcyBtb2RpZnkgaXQgZGlyZWN0bHksIHdoaWNoIG1ha2VzIGl0IGEgc3Ryb25nIGNvbnRlbmRlci4KCmB4ZnJtX3VzZXJfcmN2X21zZ2AgaXMgZGVmaW5pdGVseSBjcnVjaWFsOyBpdCYjMzk7cyB0aGUgbmV0bGluayBlbnRyeSBwb2ludCwgc28gYW55IGNoYW5nZXMgdGhlcmUgd291bGQgYmUgc2lnbmlmaWNhbnQuIEkmIzM5O20gYWRkaW5nIHRoYXQgdG8gdGhlIGxpc3QuIEkmIzM5O20gYWxzbyBwdXR0aW5nIGB4ZnJtX3NldF9kZWZhdWx0YCBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRgIG9uIHRoZSBsaXN0OyB0aGV5JiMzOTtyZSBsaWtlbHkgdG91Y2hlZC4gVGhlbiB0aGVyZSYjMzk7cyBgeGZybV91c2VyX3BvbGljeWAsIHRoZSBzb2NrZXQgb3B0aW9uIGhhbmRsZXIsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIHRyYWNrIG9mLiBJJiMzOTtsbCBhZGQgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCwgYXMgd2VsbC4KCkkmIzM5O20gaW5jbHVkaW5nIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYC4gRmluYWxseSwgSSYjMzk7bSBub3RpbmcgYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgIGFuZCBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaGAsIGFzIHRoZXkgbGlrZWx5IGFyZSBpbnZvbHZlZC4KClJpZ2h0LCBzbyB0byBnZXQgYSBnb29kIHNlbnNlIG9mIGB4ZnJtX3VzZXJfcG9saWN5YCwgSSYjMzk7bGwgY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIGZvciBzdGFydGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV91c2VyX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9Mjk2Mj1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX3VucmVnaXN0ZXJfdHJhbnNsYXRvcik7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5NjQtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjk2NTppbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5NjYte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDIxLX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMDIyOkVYUE9SVF9TWU1CT0woeGZybV91c2VyX3BvbGljeSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMzAyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBYRlJNIElucHV0IFN0YXRlIExvb2t1cCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cGAgZnVuY3Rpb24gd2l0aGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBhdCBsZWFzdCwgKnNob3VsZCogaGFwcGVuLCBpbiB0ZXJtcyBvZiByZXNvbHZpbmcgaW5ib3VuZCBzZWN1cml0eSBwb2xpY3kgbG9va3Vwcy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB3aXRoIGhvdyB0cmFmZmljIGlzIGJlaW5nIHByb2Nlc3NlZCBhbmQgSSB3YW50IHRvIHZlcmlmeSB0aGUgbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IGFzc29jaWF0aW9uIGZvciBpbmNvbWluZyBwYWNrZXRzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaGFuZGxpbmcgdGhlIG1hdGNoaW5nIG9mIGluY29taW5nIHBhY2tldHMgdG8gZXhpc3RpbmcgWEZSTSBzdGF0ZXMuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBrZXkgZGVyaXZhdGlvbiBwcm9jZXNzLiBUaGUgbG9va3VwIGxpa2VseSBjb25zaWRlcnMgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBwcm90b2NvbCwgU1BJLCBhbmQgb3RoZXIgcmVsZXZhbnQgcGFja2V0IGhlYWRlcnMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBob3cgaXQgaGFuZGxlcyB3aWxkY2FyZGluZywgaWYgYW55LiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgZ2V0IHV0aWxpemVkLCBwYXJ0aWN1bGFybHkgdGhvc2UgaW52b2x2aW5nIHRoZSBYRlJNIHN0YXRlIGFuZCBpdHMgYXNzb2NpYXRlZCBrZXlzLiBUaGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmFyaW91cyBoYXNoIHRhYmxlcyBvciBvdGhlciBsb29rdXAgbWVjaGFuaXNtcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLCBsb2NraW5nLCBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBsb29rdXAgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBib3R0bGVuZWNrcyBpbiB0aGUgb3ZlcmFsbCBmbG93LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBib3RoIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvbGljeSBtaXNjb25maWd1cmF0aW9uIGFzIHRoYXQgd291bGQgbGlrZWx5IGhhdmUgYSBoYW5kIGluIHRoaXMgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1faW5wdXRfc3RhdGVfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMTc1PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyMDAtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTIwMTpzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAyLVx0XHRcdFx0XHQgICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEyNTItfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEyNTM6RVhQT1JUX1NZTUJPTCh4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTI1NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwOTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBQb2xpY3kgTWF0Y2hpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyBpZiBhIHBhY2tldCBtYXRjaGVzIGEgcGFydGljdWxhciBJUHNlYyBwb2xpY3kuIFRoZSBmaXJzdCBwbGFjZSB0byBzdGFydCBsb29raW5nLCBiYXNlZCBvbiBwcmlvciBleHBlcmllbmNlLCBpcyBsaWtlbHkgdGhlIGNvcmUgbWF0Y2hpbmcgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUuLi4gQWgsIHllcywgYHhmcm1fc2VsZWN0b3JfbWF0Y2hgIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBzb3VuZHMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4uIFRoYXQgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgcHJldHR5IGV4cGxpY2l0IOKAkyAmIzM0O3NlbGVjdG9yIG1hdGNoJiMzNDsg4oCTIGl0IHNob3VsZCBiZSB0aGUgY29yZSBvZiB0aGUgc2VsZWN0aW9uIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBzZWxlY3RvcnMgYXJlIGRlZmluZWQgYW5kIGhvdyBwYWNrZXRzIGFyZSBjb21wYXJlZCBhZ2FpbnN0IHRoZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBhZGRyZXNzIG1hdGNoaW5nLCBwcm90b2NvbCBjaGVja3MsIGFuZCBwb3J0IGNvbXBhcmlzb25zIGluIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgZG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VsZWN0b3JfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjMwPV9feGZybTZfc2VsZWN0b3JfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTI0MS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjQyOmJvb2wgeGZybV9zZWxlY3Rvcl9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yNDMtXHRcdFx0IHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE5NjQ9c3RhdGljIGludCB4ZnJtX3BvbGljeV9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NzctXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5Nzg6XHRtYXRjaCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBmbCwgZmFtaWx5KTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTk3OS1cdGlmIChtYXRjaClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIyMzQ9c3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9za19wb2xpY3lfbG9va3VwKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IGRpcixcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyNTEtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIyNTI6XHRcdG1hdGNoID0geGZybV9zZWxlY3Rvcl9tYXRjaChcdTAwMjZwb2wtXHUwMDNlc2VsZWN0b3IsIGZsLCBmYW1pbHkpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjUzLVx0XHRpZiAobWF0Y2gpIHtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2MDA9c3RhdGljIGJvb2wgeGZybV9zZWxlY3Rvcl9pbm5lcl9pY21wX21hdGNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIHNob3J0IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2MTEtXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM2MTI6XHRcdHJldCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBcdTAwMjZmbDEsIGZhbWlseSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2MTMtXHR9XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjcwPWludCBfX3hmcm1fcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM3MTctXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM3MTg6XHRcdFx0aWYgKCF4ZnJtX3NlbGVjdG9yX21hdGNoKFx1MDAyNngtXHUwMDNlc2VsLCBcdTAwMjZmbCwgZmFtaWx5KSkge1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNzE5LVx0XHRcdFx0cmV0ID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgQ2hlY2sqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgWEZSTSBwb2xpY3kgbWVjaGFuaXNtIGlzIGFjdHVhbGx5IGVuZm9yY2VkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUgYF9feGZybV9wb2xpY3lfY2hlY2tgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBjcnVjaWFsIHBvbGljeSB2YWxpZGF0aW9uIGxvZ2ljLCBhbmQgSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgcGFja2V0JiMzOTtzIGF0dHJpYnV0ZXMgYXJlIGV2YWx1YXRlZCBhZ2FpbnN0IHRoZSBjb25maWd1cmVkIHNlY3VyaXR5IHBvbGljaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgaXQgdXNlcywgaG93IGl0IGRldGVybWluZXMgdGhlIG1hdGNoaW5nIHBvbGljeSwgd2hhdCBpdCBkb2VzIHdpdGggdGhlIG1hdGNoZWQgcG9saWN5LCBhbmQgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIHJldHVybiBjb2RlcyBvciBzdGF0dXMgdmFsdWVzIHRoYXQgY291bGQgYmUgcmV0dXJuZWQgYmFzZWQgb24gdGhlIHBvbGljeSBldmFsdWF0aW9uIHJlc3VsdC4gRnJvbSB0aGVyZSBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgY2FsbHMgdG8gcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194ZnJtX3BvbGljeV9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjQxPWRzdF9lbnRyeSAqeGZybV9vdXRfZndkX2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2NjktXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM2NzA6aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNjcxLVx0XHRcdHVuc2lnbmVkIHNob3J0IGZhbWlseSlcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4MjYtXHRcdFx0LyogVGhpcyBwb2xpY3kgdGVtcGxhdGUgd2FzIGFscmVhZHkgY2hlY2tlZCBieSBIV1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzozODI3Olx0XHRcdCAqIGFuZCBzZWNwYXRoIHdhcyByZW1vdmVkIGluIF9feGZybV9wb2xpY3lfY2hlY2syLlxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zODI4LVx0XHRcdCAqL1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg2OS19XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM4NzA6RVhQT1JUX1NZTUJPTChfX3hmcm1fcG9saWN5X2NoZWNrKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXI6CgoqKkRpdmluZyBpbnRvIGB4ZnJtX2xvb2t1cF93aXRoX2lmaWRgKioKCk9rYXksIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBob3cgdGhlIFhGUk0gc3Vic3lzdGVtIGhhbmRsZXMgcG9saWN5IGxvb2t1cHMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCBpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AuIFRoYXQgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdCBwbGF5cyBhIGtleSByb2xlIGluIGZpbmRpbmcgdGhlIHJpZ2h0IHNlY3VyaXR5IHBvbGljeSwgYW5kIHRoZSAmIzM0O2lmaWQmIzM0OyBwYXJ0IGxpa2VseSBoYXMgdG8gZG8gd2l0aCBpbnRlcmZhY2UgaWRlbnRpZmljYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGluIGEgY29tcGxleCBuZXR3b3JraW5nIGVudmlyb25tZW50LiBJJiMzOTttIGFzc3VtaW5nIHRoZXJlJiMzOTtzIGFuIGludGVycGxheSBiZXR3ZWVuIHRoZSByb3V0aW5nIHRhYmxlIGluZm9ybWF0aW9uIGFuZCBpbnRlcmZhY2Utc3BlY2lmaWMgYXR0cmlidXRlcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IGZhY3RvcnMgaXQgdGFrZXMgaW50byBjb25zaWRlcmF0aW9uIHdoZW4gbWFraW5nIHRoZXNlIHBvbGljeSBsb29rdXBzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9sb29rdXBfd2l0aF9pZmlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jPTMxNDE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKm1ha2VfYmxhY2tob2xlKHN0cnVjdCBuZXQgKm5ldCwgdTE2IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMxNjUtICovXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjMxNjY6c3RydWN0IGRzdF9lbnRyeSAqeGZybV9sb29rdXBfd2l0aF9pZmlkKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzE2Ny1cdFx0XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzE4LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMxOTpFWFBPUlRfU1lNQk9MKHhmcm1fbG9va3VwX3dpdGhfaWZpZCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMjAtXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMzI2PXN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0X29yaWcsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzI5LXtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzMzMDpcdHJldHVybiB4ZnJtX2xvb2t1cF93aXRoX2lmaWQobmV0LCBkc3Rfb3JpZywgZmwsIHNrLCBmbGFncywgMCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjE1MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgRGV0YWlscyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIHdvcmtzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgeGZybV9zcGRfZ2V0aW5mb2AuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBsb29rIGF0IGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYC4gSSBrbm93IGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2UgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gdGhhdCBmdW5jdGlvbiBwcm92aWRlcyBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gcG9saWN5IGxvb2t1cHMsIGVzcGVjaWFsbHkgYXMgaXQgcGVydGFpbnMgdG8gdGhlIFNlY3VyaXR5IFBvbGljeSBEYXRhYmFzZSAoU1BEKS4gTGV0JiMzOTtzIHNlZSBob3cgaXQgaGFuZGxlcyBpbmZvcm1hdGlvbiBleHRyYWN0aW9uIGZvciBwb2xpY3kgZGV0YWlscy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIGRpZmZlcmVudCBwcm90b2NvbCB0eXBlcyBhbmQgc2VjdXJpdHkgYXNzb2NpYXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoYXQgZnVuY3Rpb24gaXMga2V5IHRvIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgaXMgd29ya2luZyBhcyBpdCBzaG91bGQgYW5kIGhlbHBpbmcgcGlucG9pbnQgYW55IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zcGRfZ2V0aW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz03MDQ9c3RhdGljIGlubGluZSBpbnQgeGZybV9ieWlkeF9zaG91bGRfcmVzaXplKHN0cnVjdCBuZXQgKm5ldCwgaW50IHRvdGFsKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNzE0LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo3MTU6dm9pZCB4ZnJtX3NwZF9nZXRpbmZvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1rX3NwZGluZm8gKnNpKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MTYte1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNzI1LX1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NzI2OkVYUE9SVF9TWU1CT0woeGZybV9zcGRfZ2V0aW5mbyk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgTGlua2FnZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFhGUk0gcG9saWNpZXMgYXJlIGxpbmtlZCwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgYF9feGZybV9wb2xpY3lfbGlua2AgZnVuY3Rpb24uIEl0JiMzOTtzIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBiZS4gSSBleHBlY3QgaXQmIzM5O2xsIGdpdmUgbWUgdGhlIGxvdy1kb3duIG9uIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCBsaW5raW5nIHRoZXNlIHBvbGljaWVzIOKAkyBwcm9iYWJseSBkZWFsaW5nIHdpdGggaG93IHRoZXkmIzM5O3JlIGluc2VydGVkIGludG8gdmFyaW91cyBkYXRhIHN0cnVjdHVyZXMsIGhvdyByZWZlcmVuY2VzIGFyZSBtYW5hZ2VkLCBhbmQgYWxsIHRoZSBjcml0aWNhbCBjb25jdXJyZW5jeSBhc3BlY3RzLiBUaGlzIGZ1bmN0aW9uIG5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcG9saWN5IGFzc29jaWF0aW9uIHByb2Nlc3MsIHNvIHRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4gdGhlIGRlZXAtZGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194ZnJtX3BvbGljeV9saW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3BvbGljeS5jPTE4OD1zdGF0aWMgdm9pZCB4ZnJtX3BvbGljeV9xdWV1ZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTg5LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTA6c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTkxLXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKl9feGZybV9wb2xpY3lfdW5saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTU3Mj1pbnQgeGZybV9wb2xpY3lfaW5zZXJ0KGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LCBpbnQgZXhjbClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE1OTItXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE1OTM6XHRfX3hmcm1fcG9saWN5X2xpbmsocG9saWN5LCBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNTk0LVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjI5MT1zdGF0aWMgdTMyIHhmcm1fZ2VuX3BvcyhzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzEwLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMzExOnN0YXRpYyB2b2lkIF9feGZybV9wb2xpY3lfbGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjMxMi17XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzQ4PXN0YXRpYyB2b2lkIHhmcm1fc2tfcG9saWN5X2xpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNDkte1xubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMzUwOlx0X194ZnJtX3BvbGljeV9saW5rKHBvbCwgWEZSTV9QT0xJQ1lfTUFYICYjNDM7IGRpcik7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzMzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgVW5saW5rIEZ1bmN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBfX3hmcm1fcG9saWN5X3VubGlua2AgZnVuY3Rpb24uIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgIGltbWVkaWF0ZWx5LiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1bmxpbmtpbmcgcG9saWNpZXMgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGNsZWFudXAgYW5kIHJlbW92YWwgb2Ygc2VjdXJpdHkgcG9saWNpZXMuIEl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IElQc2VjIHdvcmtzIHVuZGVyIHRoZSBob29kIGFuZCB0byBxdWlja2x5IGZpbmQgd2hlcmUgYSBwb3RlbnRpYWwgYnVnIGlzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNvZGUgdGhhdCBtYW5hZ2VzIHRoZSBwb2xpY3kgdGFibGUgZW50cmllcywgYW55IHJlZmVyZW5jZSBjb3VudGluZyBvciBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgYWN0dWFsIHJlbW92YWwgb2YgdGhlIHBvbGljeSBmcm9tIHRoZSBzeXN0ZW0mIzM5O3MgcG9saWN5IGRhdGFiYXNlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBkYXRhIHN0cnVjdHVyZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3hmcm1fcG9saWN5X3VubGluayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fcG9saWN5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTA9c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTkxOnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKl9feGZybV9wb2xpY3lfdW5saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTItXHRcdFx0XHRcdFx0aW50IGRpcik7XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNTcyPWludCB4ZnJtX3BvbGljeV9pbnNlcnQoaW50IGRpciwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksIGludCBleGNsKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYwMi1cdFx0eGZybV9wb2xpY3lfcmVxdWV1ZShkZWxwb2wsIHBvbGljeSk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE2MDM6XHRcdF9feGZybV9wb2xpY3lfdW5saW5rKGRlbHBvbCwgZGlyKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYwNC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE2NDU9eGZybV9wb2xpY3lfYnlzZWxfY3R4KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywgdTMyIGlmX2lkLFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTY5OS1cdFx0XHR9XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE3MDA6XHRcdFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNzAxLVx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xNzE1PXhmcm1fcG9saWN5X2J5aWQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1MzIgaWZfaWQsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNzM5LVx0XHRcdFx0fVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNzQwOlx0XHRcdFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNzQxLVx0XHRcdH1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE4MTI9aW50IHhmcm1fcG9saWN5X2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgdTggdHlwZSwgYm9vbCB0YXNrX3ZhbGlkKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTgzMi1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTgzMzpcdFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODM0LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3BvbGljeV9sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE4NTE9aW50IHhmcm1fZGV2X3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODcyLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxODczOlx0XHRfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE4NzQtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fcG9saWN5X2xvY2spO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjMxMT1zdGF0aWMgdm9pZCBfX3hmcm1fcG9saWN5X2xpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzI3LVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMzI4OnN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKl9feGZybV9wb2xpY3lfdW5saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzI5LVx0XHRcdFx0XHRcdGludCBkaXIpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzUzPXN0YXRpYyB2b2lkIHhmcm1fc2tfcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM1NC17XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIzNTU6XHRfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIFhGUk1fUE9MSUNZX01BWCAmIzQzOyBkaXIpO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzU2LX1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIzNTg9aW50IHhmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNjItXHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9wb2xpY3lfbG9jayk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIzNjM6XHRwb2wgPSBfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzNjQtXHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3BvbGljeV9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIEZvY3VzOiBYRlJNIFBvbGljeSBhbmQgSG90IFBhdGhzKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgWEZSTSBwb2xpY3kgZnVuY3Rpb25zIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHRoZXkgaGF2ZS4gSXQgbG9va3MgbGlrZSBgeGZybV9wb2xpY3lfaW5zZXJ0YCwgYHhmcm1fcG9saWN5X2RlbGV0ZWAsIGFuZCBgeGZybV9wb2xpY3lfZmx1c2hgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmcm9tIHRoZSB1c2VyIHNwYWNlLCBhcyB0aGV5IGNhbGwgdGhlIGludGVybmFsIGxpbmthZ2UgZnVuY3Rpb25zIGBfX3hmcm1fcG9saWN5X2xpbmtgIGFuZCBgX194ZnJtX3BvbGljeV91bmxpbmtgLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGB4ZnJtX3BvbGljeV9pbnNlcnRgIGFuZCBgeGZybV9wb2xpY3lfZGVsZXRlYCBmb3Igbm93LgoKTm93LCBsZXQgbWUgbGF5IG91dCB0aGUgaW5pdGlhbCBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcmVsZXZhbnQ6IGB4ZnJtX2lucHV0YCwgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGB4ZnJtX3VzZXJfcG9saWN5YCwgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCwgYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgLCBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAsIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoYCwgYHhmcm1fcG9saWN5X2luc2VydGAsIGB4ZnJtX3BvbGljeV9kZWxldGVgLCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCwgYF9feGZybV9wb2xpY3lfY2hlY2tgLCBhbmQgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYC4KCkFoLCBidXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBEYW1uISBPa2F5LCBgeGZybV9pbnB1dGAsIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCwgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCwgYF9feGZybV9wb2xpY3lfY2hlY2tgLCBhbmQgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCwgYW5kIGV2ZW4gYHhmcm1fc2VsZWN0b3JfbWF0Y2hgIGFyZSBhbGwgZGVmaW5pdGVseSBob3QgcGF0aCwgc28gdGhleSYjMzk7cmUgb3V0LgoKVGhhdCBsZWF2ZXM6IGB4ZnJtX3VzZXJfcmN2X21zZ2AsIGB4ZnJtX3NldF9kZWZhdWx0YCwgYHhmcm1fZ2V0X2RlZmF1bHRgLCBgeGZybV91c2VyX3BvbGljeWAsIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAsIGB4ZnJtX3BvbGljeV9pbnNlcnRgLCBhbmQgYHhmcm1fcG9saWN5X2RlbGV0ZWAuCgpXYWl0IGEgbWludXRlLCBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAuLi5pdCAqaXMqIG1vZGlmaWVkLCBidXQgaXMgaXQgYSBob3QgcGF0aD8gSXQmIzM5O3MgY2FsbGVkIGZvciBldmVyeSBzaW5nbGUgc2tiIHNlbnQgb3ZlciBlc3BpbnRjcC4gWWVhaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGhvdCBwYXRoLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFuIGFsdGVybmF0aXZlIGluIHRoZSBFU1AvVENQIGNvZGUuIFBlcmhhcHMgYGVzcGludGNwX3B1c2hfbXNnc2Agb3IgYGVzcGludGNwX3NlbmRtc2dgIGFyZSBiZXR0ZXIgcG9pbnRzIHRvIGxvb2sgYXQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBwZWVrIGF0IGBlc3BpbnRjcF9zZW5kbXNnYCBpbiBgbmV0L3hmcm0vZXNwaW50Y3AuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcGludGNwX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9Mjk5PUVYUE9SVF9TWU1CT0xfR1BMKGVzcGludGNwX3B1c2hfc2tiKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMzAwLVxubmV0L3hmcm0vZXNwaW50Y3AuYzozMDE6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC94ZnJtL2VzcGludGNwLmMtMzAyLXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTU0NT1zdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHByb3RvICplc3BpbnRjcF9wcm90LFxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtNTUxLVx0bWVtY3B5KGVzcGludGNwX29wcywgb3JpZ19vcHMsIHNpemVvZihzdHJ1Y3QgcHJvdG9fb3BzKSk7XG5uZXQveGZybS9lc3BpbnRjcC5jOjU1MjpcdGVzcGludGNwX3Byb3QtXHUwMDNlc2VuZG1zZyA9IGVzcGludGNwX3NlbmRtc2c7XG5uZXQveGZybS9lc3BpbnRjcC5jLTU1My1cdGVzcGludGNwX3Byb3QtXHUwMDNlcmVjdm1zZyA9IGVzcGludGNwX3JlY3Ztc2c7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTI3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIElQc2VjIEZ1bmN0aW9uIEluY2x1c2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoaWNoIElQc2VjLXJlbGF0ZWQgZnVuY3Rpb25zIHRvIGluY2x1ZGUuIFRoZSBpbml0aWFsIHByb21wdCBtZW50aW9uZWQgYGVzcGludGNwX3NlbmRtc2dgLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgaW4gdGhlIG1peC4gQnV0IHdoYXQgYWJvdXQgdGhlIG90aGVyIGNydWNpYWwgZnVuY3Rpb25zPyBgeGZybV9pbnB1dGAgaW1tZWRpYXRlbHkgY29tZXMgdG8gbWluZDsgaXQmIzM5O3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIElQc2VjIGlucHV0IHByb2Nlc3NpbmcgYW5kIEkga25vdyBpdCYjMzk7cyBiZWVuIGhlYXZpbHkgbW9kaWZpZWQuIE9uIHRoZSBvbmUgaGFuZCwgSSBuZWVkIHRvIHN0aWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgYW5kIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RzIGZyb20gc2tld2luZywgYW5kIGB4ZnJtX2lucHV0YCAqaXMqIGEgaG90LXBhdGggZnVuY3Rpb24gZm9yIElQc2VjLgoKQnV0IGhvbGQgb24sIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBidWdzIHdpdGhpbiBgeGZybV9pbnB1dGDigJRkZXZfcHV0IGFuZCByY3VfcmVhZF9sb2Nr4oCUc28gZXhjbHVkaW5nIGl0IG1pZ2h0IGJlIGEgbWlzdGFrZS4gUGVyaGFwcyBgeGZybV9yY3ZgIHdvdWxkIGJlIGEgYmV0dGVyIGNob2ljZSBhcyBhIHJlbGF0ZWQsIGxlc3MgaG90LXBhdGgsIGZ1bmN0aW9uLCBpZiBJIGNhbiBmaW5kIGEgcmVsZXZhbnQgY29ubmVjdGlvbi4KCk9rYXksIGxldOKAmXMgcmV0aGluay4gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlIGB4ZnJtX3VzZXJfcmN2X21zZ2AsIGB4ZnJtX3NldF9kZWZhdWx0YCwgYW5kIGB4ZnJtX2dldF9kZWZhdWx0YOKAlHRoZXkgc2VlbSByZWxldmFudCB0byBjb25maWd1cmF0aW9uIGFuZCByZXRyaWV2YWwuIGB4ZnJtX3VzZXJfcG9saWN5YCBhbmQgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCBhcmUgZGVmaW5pdGVseSBpbiwgZ2l2ZW4gdGhlaXIgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4gQW5kIG9mIGNvdXJzZSwgdGhlIGluaXRpYWwgbWVudGlvbiBvZiBgZXNwaW50Y3Bfc2VuZG1zZ2AuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBsb29rIGF0IGB4ZnJtX3NwZF9nZXRpbmZvYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYHhmcm1fZ2V0X3NwZGluZm9gLCBzbyBpdCBtaWdodCBiZSB1c2VmdWwgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9nZXRfc3BkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTE2Njc9c3RhdGljIGludCB4ZnJtX3NldF9zcGRpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE3MjAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzIxOnN0YXRpYyBpbnQgeGZybV9nZXRfc3BkaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTE3MjItXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKiphdHRycyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDE3LVx0XHRcdFx0XHRcdCAgIC5ubGFfbWF4ID0gWEZSTUFfU1BEX01BWCB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQxODpcdFtYRlJNX01TR19HRVRTUERJTkZPICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X3NwZGluZm8gICB9LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQxOS1cdFtYRlJNX01TR19TRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fc2V0X2RlZmF1bHQgICB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMiAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTA0NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU2VjdXJpdHkgUG9saWN5IERhdGFiYXNlIFVwZGF0ZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgdGhlIElQc2VjIFNQRCBsb29rdXAgaXMgY292ZXJlZCwgc28gSSYjMzk7bGwgYmUgaW5jbHVkaW5nIGB4ZnJtX2dldF9zcGRpbmZvYCBpbiBteSBhbmFseXNpcy4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIGxpbmsgYmV0d2VlbiB0aGUgcG9saWN5IGRhdGFiYXNlIGFuZCB0aGUgWEZSTSBzdWJzeXN0ZW0sIHNvIHRoYXQmIzM5O3Mgb2J2aW91c2x5IGtleS4KCk5vdywgd2hlcmUmIzM5O3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBhdCBob3cgdGhvc2UgcG9saWNpZXMgYXJlIGFjdHVhbGx5ICphZGRlZCo/IEkmIzM5O20gdGhpbmtpbmcgdGhlIGBwZmtleV9hZGRgIGZ1bmN0aW9uIGluIGBuZXQva2V5L2FmX2tleS5jYCBpcyBnb2luZyB0byBiZSB0aGUgbWVhdCBvZiB0aGUgbWF0dGVyLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3b3JrcyBmb3IgYWRkaW5nIHRoZXNlIHJ1bGVzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24gdG8gdHJhY2UgaG93IHRoZSBuZXcgcG9saWN5IGdldHMgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1bHRpbWF0ZWx5IGluc3RhbGxlZCBpbiB0aGUga2VybmVsJiMzOTtzIGRhdGEgc3RydWN0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgbGlmZWN5Y2xlIGlzIGNyaXRpY2FsLCBzbyBgcGZrZXlfYWRkYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIyIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Bma2V5X2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9rZXkvYWZfa2V5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2tleS9hZl9rZXkuYz0xNDkwPXN0YXRpYyBpbnQga2V5X25vdGlmeV9zYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKVxuLS1cbm5ldC9rZXkvYWZfa2V5LmMtMTUxMy1cbm5ldC9rZXkvYWZfa2V5LmM6MTUxNDpzdGF0aWMgaW50IHBma2V5X2FkZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBzYWRiX21zZyAqaGRyLCB2b2lkICogY29uc3QgKmV4dF9oZHJzKVxubmV0L2tleS9hZl9rZXkuYy0xNTE1LXtcbi0tXG5uZXQva2V5L2FmX2tleS5jPTI4MjI9c3RhdGljIGNvbnN0IHBma2V5X2hhbmRsZXIgcGZrZXlfZnVuY3NbU0FEQl9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L2tleS9hZl9rZXkuYy0yODI0LVx0W1NBREJfR0VUU1BJXVx0XHQ9IHBma2V5X2dldHNwaSxcbm5ldC9rZXkvYWZfa2V5LmM6MjgyNTpcdFtTQURCX1VQREFURV1cdFx0PSBwZmtleV9hZGQsXG5uZXQva2V5L2FmX2tleS5jOjI4MjY6XHRbU0FEQl9BRERdXHRcdD0gcGZrZXlfYWRkLFxubmV0L2tleS9hZl9rZXkuYy0yODI3LVx0W1NBREJfREVMRVRFXVx0XHQ9IHBma2V5X2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE2NDQKCQkJCQkJCW91dHB1dDogMTg3CgkJCQkJCQl0aG91Z2h0czogNzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBlbGVtZW50cyBvZiB0aGlzIFhGUk0gcGF0Y2guIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB3aGF0IEkgc2VlLCBJJiMzOTttIGdvaW5nIHRvIGluY2x1ZGUgYHBma2V5X2FkZGAsIGFuZCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgY3JpdGljYWwgZnVuY3Rpb25zOiBgeGZybV91c2VyX3Jjdl9tc2dgLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYHhmcm1fdXNlcl9wb2xpY3lgLCBhbmQgYHBma2V5X2FkZGAsIGBlc3BpbnRjcF9zZW5kbXNnYCwgYHhmcm1fZ2V0X3NwZGluZm9gLiBUaG9zZSBhcmUgdGhlIHByaW1hcnkgc3ltYm9scyBJJiMzOTttIHdhdGNoaW5nLgoKUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBJIHNlZSB0aGF0IGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYE5FVF9LRVlgLCBhbmQgYFhGUk1fVVNFUmAgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGRpcmVjdGx5IHJlbGV2YW50IGhlcmUsIGFuZCB0aGV5JiMzOTtsbCBuZWVkIGNhcmVmdWwgZXhhbWluYXRpb24uIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucywgbGlrZSBgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVGAsIHdoaWNoIGlzIGdlbmVyaWMgYW5kIHVzdWFsbHkgZmluZSBvbiB4ODZfNjQ7IEkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSBpdC4gVGhlIGBDT05GSUdfWEZSTV9FU1BJTlRDUGAgb3B0aW9uLCBpcyBzZWxlY3RlZCBieSBgSU5FVF9FU1BJTlRDUGAgYW5kIGBJTkVUNl9FU1BJTlRDUGAsIHRoYXQgbG9va3MgcmlnaHQuIEFuZCBJIGtub3cgYENPTkZJR19ORVRfS0VZYCBpcyBgTkVUX0tFWWAgYW5kIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBgWEZSTV9VU0VSYC4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGFkZCB0aGF0IGBDT05GSUdfWEZSTWAgaXMgc2VsZWN0ZWQgYnkgc2V2ZXJhbCwgaW5jbHVkaW5nIGBJTkVUX0VTUGAsIGBJTkVUX0FIYCwgYElORVRfSVBDT01QYCwgYW5kIGBYRlJNX1VTRVJgLiBTbywgZm9yIG15IGRvY3VtZW50YXRpb24gSSB3aWxsIGxpc3QgYElORVRfRVNQSU5UQ1BgLCBgSU5FVDZfRVNQSU5UQ1BgLCBgTkVUX0tFWWAsIGFuZCBgWEZSTV9VU0VSYCBhcyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zLgoKTm93LCBhIHF1aWNrIGZpbGUgcmV2aWV3IG9mIHRoZSBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIHRvIGFzc2VzcyBwb3RlbnRpYWwgaW1wYWN0LiBJIHNlZSBjaGFuZ2VzIGluIGBpbmNsdWRlL25ldC94ZnJtLmhgIHJlbGF0aW5nIHRvIGFkZHJlc3MgbWF0Y2hpbmcgKGBhZGRyX21hdGNoYCwgYGFkZHI0X21hdGNoYCksIHBvbGljeSBjaGVja2luZyAoYF9feGZybV9jaGVja19ub3BvbGljeWApLCBhbmQgcm91dGluZyAoYHhmcm1fcm91dGVfZm9yd2FyZGApLiBUaGVuLCBpbnB1dCBoYW5kbGluZyBpbiBgeGZybTRfaW5wdXQuY2AgYW5kIGB4ZnJtNl9pbnB1dC5jYCB3aXRoIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCBhbmQgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLiBLZXkgbWFuYWdlbWVudCB3aXRoIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAgaW4gYG5ldC9rZXkvYWZfa2V5LmNgLiBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAgaXMgaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBJbnB1dCBwcm9jZXNzaW5nIGFuZCBwb2xpY3kgaGFuZGxpbmcgaW4gYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AgKGB4ZnJtX2lucHV0YCkgYW5kIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCAoYHhmcm1fc2VsZWN0b3JfbWF0Y2hgLCBgeGZybV9zcGRfZ2V0aW5mb2AsIHBvbGljeSBsaW5raW5nL3VubGlua2luZywgbG9va3VwLCBhbmQgY2hlY2tpbmcpLiBgeGZybV9pbnB1dF9zdGF0ZV9sb29rdXBgIGFuZCBgeGZybV91c2VyX3BvbGljeWAgYXJlIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBGaW5hbGx5LCBgbmV0L3hmcm0veGZybV91c2VyLmNgIHdpdGggYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYW5kIGB4ZnJtX3VzZXJfcmN2X21zZ2AuCgpDb25zaWRlcmluZyBhbGwgb2YgdGhpcywgdGhlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gVGhleSB0b3VjaCBjb3JlIElQc2VjIGxvZ2ljIGFuZCBhZGRyZXNzIGJ1Z3MgbGlrZSBib3VuZHMgY2hlY2tzLCBkYXRhIHJhY2VzIGluIHBvbGljeSBtYW5hZ2VtZW50LCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBtaXNzaW5nIGxvY2tkZXAgY29uc2lkZXJhdGlvbnMsIGFuZCBjb21wYXQgc3lzY2FsbCBjaGVja3MuIFRoaXMgaW5kaWNhdGVzIHRoYXQgZnV6emluZyBpcyBoaWdobHkgd2FycmFudGVkLiBUaGUgY2hhbmdlcyBtb2RpZnkgY3JpdGljYWwgcGF0aHMgdGhhdCBhcmUgZGlyZWN0bHkgZXhwb3NlZCBhbmQgcG90ZW50aWFsbHkgcmVhY2hhYmxlLCBzbyB0aG9yb3VnaCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgYSBwcmlvcml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjIgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7TkVUX0tFWSYjMzQ7LAogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX3VzZXJfcmN2X21zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX3NldF9kZWZhdWx0JiMzNDssCiAgICAmIzM0O3hmcm1fZ2V0X2RlZmF1bHQmIzM0OywKICAgICYjMzQ7eGZybV91c2VyX3BvbGljeSYjMzQ7LAogICAgJiMzNDtwZmtleV9hZGQmIzM0OywKICAgICYjMzQ7ZXNwaW50Y3Bfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9zcGRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgWEZSTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBib3VuZHMgY2hlY2tzIGZvciBhZGRyZXNzIG1hdGNoaW5nLCBmaXhpbmcgZGF0YSByYWNlcyBpbiBwb2xpY3kgY291bnRzL2RlZmF1bHRzLCBhZGp1c3RpbmcgZGV2IHJlZmNvdW50aW5nIGluIHhmcm1faW5wdXQsIGFuZCByZWZhY3RvcmluZyBlc3BpbnRjcCBtZXNzYWdlIHNlbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIElQc2VjIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O05FVF9LRVkmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV91c2VyX3Jjdl9tc2cmIzM0OywKICAgICYjMzQ7eGZybV9zZXRfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDt4ZnJtX2dldF9kZWZhdWx0JiMzNDssCiAgICAmIzM0O3hmcm1fdXNlcl9wb2xpY3kmIzM0OywKICAgICYjMzQ7cGZrZXlfYWRkJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7eGZybV9nZXRfc3BkaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIFhGUk0gc3Vic3lzdGVtLCBpbmNsdWRpbmcgYm91bmRzIGNoZWNrcyBmb3IgYWRkcmVzcyBtYXRjaGluZywgZml4aW5nIGRhdGEgcmFjZXMgaW4gcG9saWN5IGNvdW50cy9kZWZhdWx0cywgYWRqdXN0aW5nIGRldiByZWZjb3VudGluZyBpbiB4ZnJtX2lucHV0LCBhbmQgcmVmYWN0b3JpbmcgZXNwaW50Y3AgbWVzc2FnZSBzZW5kaW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBJUHNlYyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjQ1LjA1OTUzNzEwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NjQ4Njc1NTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiLFxuICAgIFwiTkVUX0tFWVwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV91c2VyX3Jjdl9tc2dcIixcbiAgICBcInhmcm1fc2V0X2RlZmF1bHRcIixcbiAgICBcInhmcm1fZ2V0X2RlZmF1bHRcIixcbiAgICBcInhmcm1fdXNlcl9wb2xpY3lcIixcbiAgICBcInBma2V5X2FkZFwiLFxuICAgIFwiZXNwaW50Y3Bfc2VuZG1zZ1wiLFxuICAgIFwieGZybV9nZXRfc3BkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgWEZSTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBib3VuZHMgY2hlY2tzIGZvciBhZGRyZXNzIG1hdGNoaW5nLCBmaXhpbmcgZGF0YSByYWNlcyBpbiBwb2xpY3kgY291bnRzL2RlZmF1bHRzLCBhZGp1c3RpbmcgZGV2IHJlZmNvdW50aW5nIGluIHhmcm1faW5wdXQsIGFuZCByZWZhY3RvcmluZyBlc3BpbnRjcCBtZXNzYWdlIHNlbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIElQc2VjIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNTo0NS4wNTk1NDM2MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NTYyNTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY2NWVkMjZjZTEwYjhhMGJlNjcwZDlkODEwNDUwYTMwZDljYmVhNjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjIgMDg6MTU6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oXFxuaW5kZXggODc0NDA5MTI3ZTI5MjEuLmY4YzkwOWIwZjBjMzRlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaFxcbisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaFxcbkBAIC05NDMsNiArOTQzLDkgQEAgc3RhdGljIGlubGluZSBib29sIGFkZHJfbWF0Y2goY29uc3Qgdm9pZCAqdG9rZW4xLCBjb25zdCB2b2lkICp0b2tlbjIsXFxuIFxcdHVuc2lnbmVkIGludCBwZHc7XFxuIFxcdHVuc2lnbmVkIGludCBwYmk7XFxuIFxcbitcXHRpZiAocHJlZml4bGVuIFxcdTAwM2UgMTI4KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRwZHcgPSBwcmVmaXhsZW4gXFx1MDAzZVxcdTAwM2UgNTtcXHQgIC8qIG51bSBvZiB3aG9sZSB1MzIgaW4gcHJlZml4ICovXFxuIFxcdHBiaSA9IHByZWZpeGxlbiBcXHUwMDI2ICAweDFmOyAgLyogbnVtIG9mIGJpdHMgaW4gaW5jb21wbGV0ZSB1MzIgaW4gcHJlZml4ICovXFxuIFxcbkBAIC05NjcsNiArOTcwLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhZGRyNF9tYXRjaChfX2JlMzIgYTEsIF9fYmUzMiBhMiwgdTggcHJlZml4bGVuKVxcbiBcXHQvKiBDOTkgNi41LjcgKDMpOiB1MzIgXFx1MDAzY1xcdTAwM2MgMzIgaXMgdW5kZWZpbmVkIGJlaGF2aW91ciAqL1xcbiBcXHRpZiAoc2l6ZW9mKGxvbmcpID09IDQgXFx1MDAyNlxcdTAwMjYgcHJlZml4bGVuID09IDApXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aWYgKHByZWZpeGxlbiBcXHUwMDNlIDMyKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRyZXR1cm4gISgoYTEgXiBhMikgXFx1MDAyNiBodG9ubCh+MFVMIFxcdTAwM2NcXHUwMDNjICgzMiAtIHByZWZpeGxlbikpKTtcXG4gfVxcbiBcXG5AQCAtMTI1MCw4ICsxMjU3LDggQEAgaW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKiwgaW50IGRpciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gc3RhdGljIGlubGluZSBib29sIF9feGZybV9jaGVja19ub3BvbGljeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdCBpbnQgZGlyKVxcbiB7XFxuLVxcdGlmICghbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdIFxcdTAwMjZcXHUwMDI2ICFzZWNwYXRoX2V4aXN0cyhza2IpKVxcbi1cXHRcXHRyZXR1cm4gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0gPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVDtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdKSBcXHUwMDI2XFx1MDAyNiAhc2VjcGF0aF9leGlzdHMoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVDtcXG4gXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC0xMzUxLDggKzEzNTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCB4ZnJtX3JvdXRlX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiBcXG4tXFx0aWYgKCFuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0gXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdID09IFhGUk1fVVNFUlBPTElDWV9BQ0NFUFQpXFxuK1xcdGlmICghUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRyZXR1cm4gKHNrYl9kc3Qoc2tiKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBEU1RfTk9YRlJNKSB8fFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xcbmluZGV4IGMyZWFjODQ0YmNkYjRlLi5mNmYyYThlZjNmODg0NyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xcbkBAIC03Niw4ICs3Niw2IEBAIGludCB4ZnJtNF90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcXG4gXFx0TkZfSE9PSyhORlBST1RPX0lQVjQsIE5GX0lORVRfUFJFX1JPVVRJTkcsXFxuIFxcdFxcdGRldl9uZXQoZGV2KSwgTlVMTCwgc2tiLCBkZXYsIE5VTEwsXFxuIFxcdFxcdHhmcm00X3Jjdl9lbmNhcF9maW5pc2gpO1xcbi1cXHRpZiAoYXN5bmMpXFxuLVxcdFxcdGRldl9wdXQoZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuaW5kZXggNjk5YTAwMWFjMTY2MjkuLjg5ZDA0NDNiNTMwNzMyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmNcXG4rKysgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXFxuQEAgLTcxLDggKzcxLDYgQEAgaW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKVxcbiBcXHRORl9IT09LKE5GUFJPVE9fSVBWNiwgTkZfSU5FVF9QUkVfUk9VVElORyxcXG4gXFx0XFx0ZGV2X25ldChkZXYpLCBOVUxMLCBza2IsIGRldiwgTlVMTCxcXG4gXFx0XFx0eGZybTZfdHJhbnNwb3J0X2ZpbmlzaDIpO1xcbi1cXHRpZiAoYXN5bmMpXFxuLVxcdFxcdGRldl9wdXQoZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jXFxuaW5kZXggOWNmZmVlZjE4Y2Q5MWMuLjMyMTZmODk3YTMwNWUwIDEwMDY0NFxcbi0tLSBhL25ldC9rZXkvYWZfa2V5LmNcXG4rKysgYi9uZXQva2V5L2FmX2tleS5jXFxuQEAgLTEyMTgsNiArMTIxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqIHBma2V5X21zZzJ4ZnJtX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0c3RyY3B5KHgtXFx1MDAzZWNhbGctXFx1MDAzZWFsZ19uYW1lLCBhLVxcdTAwM2VuYW1lKTtcXG4rXFx0XFx0XFx0eC1cXHUwMDNlY2FsZy1cXHUwMDNlYWxnX2tleV9sZW4gPSAwO1xcbiBcXHRcXHRcXHR4LVxcdTAwM2Vwcm9wcy5jYWxnbyA9IHNhLVxcdTAwM2VzYWRiX3NhX2VuY3J5cHQ7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGludCBrZXlzaXplID0gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmNcXG5pbmRleCBkOTAzNTU0NjM3NWViYS4uMzc0ZTFiOTY0NDM4MzkgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcXG5AQCAtMjEyLDQzICsyMTIsMjMgQEAgc3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0c3RydWN0IHNrX21zZyAqc2ttc2cgPSBcXHUwMDI2ZW1zZy1cXHUwMDNlc2ttc2c7XFxuIFxcdGJvb2wgbW9yZSA9IGZsYWdzIFxcdTAwMjYgTVNHX01PUkU7XFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuLVxcdGludCBkb25lID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHNnID0gXFx1MDAyNnNrbXNnLVxcdTAwM2VzZy5kYXRhW3NrbXNnLVxcdTAwM2VzZy5zdGFydF07XFxuIFxcdGRvIHtcXG4gXFx0XFx0c3RydWN0IGJpb192ZWMgYnZlYztcXG4tXFx0XFx0c2l6ZV90IHNpemUgPSBzZy1cXHUwMDNlbGVuZ3RoIC0gZW1zZy1cXHUwMDNlb2Zmc2V0O1xcbi1cXHRcXHRpbnQgb2Zmc2V0ID0gc2ctXFx1MDAzZW9mZnNldCArIGVtc2ctXFx1MDAzZW9mZnNldDtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnA7XFxuLVxcbi1cXHRcXHRlbXNnLVxcdTAwM2VvZmZzZXQgPSAwO1xcbiBcXG4rXFx0XFx0c2cgPSBcXHUwMDI2c2ttc2ctXFx1MDAzZXNnLmRhdGFbc2ttc2ctXFx1MDAzZXNnLnN0YXJ0XTtcXG4gXFx0XFx0aWYgKHNnX2lzX2xhc3Qoc2cpIFxcdTAwMjZcXHUwMDI2ICFtb3JlKVxcbiBcXHRcXHRcXHRtc2doZHIubXNnX2ZsYWdzIFxcdTAwMjY9IH5NU0dfTU9SRTtcXG4gXFxuLVxcdFxcdHAgPSBzZ19wYWdlKHNnKTtcXG4tcmV0cnk6XFxuLVxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XFxuLVxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZ2hkci5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFxcdTAwMjZidmVjLCAxLCBzaXplKTtcXG4tXFx0XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnaGRyLCBzaXplKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0ZW1zZy1cXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0IC0gc2ctXFx1MDAzZW9mZnNldDtcXG4tXFx0XFx0XFx0c2ttc2ctXFx1MDAzZXNnLnN0YXJ0ICs9IGRvbmU7XFxuK1xcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHNnX3BhZ2Uoc2cpLCBzZy1cXHUwMDNlbGVuZ3RoLCBzZy1cXHUwMDNlb2Zmc2V0KTtcXG4rXFx0XFx0aW92X2l0ZXJfYnZlYyhcXHUwMDI2bXNnaGRyLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgXFx1MDAyNmJ2ZWMsIDEsIHNnLVxcdTAwM2VsZW5ndGgpO1xcbitcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNnLVxcdTAwM2VsZW5ndGgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKHJldCAhPSBzaXplKSB7XFxuLVxcdFxcdFxcdG9mZnNldCArPSByZXQ7XFxuLVxcdFxcdFxcdHNpemUgLT0gcmV0O1xcbi1cXHRcXHRcXHRnb3RvIHJldHJ5O1xcbi1cXHRcXHR9XFxuIFxcbi1cXHRcXHRkb25lKys7XFxuLVxcdFxcdHB1dF9wYWdlKHApO1xcbi1cXHRcXHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnLVxcdTAwM2VsZW5ndGgpO1xcbi1cXHRcXHRzZyA9IHNnX25leHQoc2cpO1xcbi1cXHR9IHdoaWxlIChzZyk7XFxuK1xcdFxcdHNrX21zZ19mcmVlX3BhcnRpYWwoc2ssIHNrbXNnLCByZXQpO1xcbitcXHR9IHdoaWxlIChza21zZy1cXHUwMDNlc2cuc2l6ZSk7XFxuIFxcbiBcXHRtZW1zZXQoZW1zZywgMCwgc2l6ZW9mKCplbXNnKSk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcXG5pbmRleCBlNGMyY2QyNDkzNmQzZi4uZWVjYWIzMzdiZDBhNzkgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXFxuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm87XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIFxcdGludCBlcnI7XFxuIFxcdF9fYmUzMiBzZXE7XFxuIFxcdF9fYmUzMiBzZXFfaGk7XFxuQEAgLTQ5Myw3ICs0OTQsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVJTlZBTElEKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChlbmNhcF90eXBlID09IC0xKVxcbi1cXHRcXHRcXHRcXHRkZXZfcHV0KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiBcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTY1NSwxNiArNjU2LDE2IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFxuIFxcdFxcdGlmICghY3J5cHRvX2RvbmUpIHtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRcXHRkZXZfaG9sZChza2ItXFx1MDAzZWRldik7XFxuK1xcdFxcdFxcdGRldl9ob2xkKGRldik7XFxuIFxcbiBcXHRcXHRcXHRuZXh0aGRyID0geC1cXHUwMDNldHlwZS1cXHUwMDNlaW5wdXQoeCwgc2tiKTtcXG4gXFx0XFx0XFx0aWYgKG5leHRoZHIgPT0gLUVJTlBST0dSRVNTKSB7XFxuIFxcdFxcdFxcdFxcdGlmIChhc3luYylcXG4tXFx0XFx0XFx0XFx0XFx0ZGV2X3B1dChza2ItXFx1MDAzZWRldik7XFxuK1xcdFxcdFxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGRldl9wdXQoc2tiLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2eC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdH1cXG4gcmVzdW1lOlxcbkBAIC02OTksNyArNzAwLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbiBcXHRcXHRlcnIgPSB4ZnJtX2lubmVyX21vZGVfaW5wdXQoeCwgc2tiKTtcXG4gXFx0XFx0aWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpIHtcXG4gXFx0XFx0XFx0aWYgKGFzeW5jKVxcbi1cXHRcXHRcXHRcXHRkZXZfcHV0KHNrYi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fSBlbHNlIGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOU1RBVEVNT0RFRVJST1IpO1xcbkBAIC03MjYsOSArNzI3LDEyIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFx0XFx0Y3J5cHRvX2RvbmUgPSBmYWxzZTtcXG4gXFx0fSB3aGlsZSAoIWVycik7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LVxcdTAwM2V0eXBlLVxcdTAwM2Vwcm90bywgMCk7XFxuLVxcdGlmIChlcnIpXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4rXFx0fVxcbiBcXG4gXFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gXFxuQEAgLTczOSw4ICs3NDMsOSBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIFxcdFxcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXFxuIFxcdFxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiBcXHRcXHRpZiAoYXN5bmMpXFxuLVxcdFxcdFxcdGRldl9wdXQoc2tiLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIFxcdFxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZncm9fY2VsbHMsIHNrYik7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0eG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG5AQCAtNzQ4LDIzICs3NTMsMjEgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbiBcXHRcXHRcXHR4ZnJtX2dybyA9IHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1JPO1xcbiBcXG4gXFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4tXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRcXHRhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KHgtXFx1MDAzZXByb3BzLmZhbWlseSk7XFxuIFxcdFxcdGlmIChsaWtlbHkoYWZpbmZvKSlcXG4gXFx0XFx0XFx0ZXJyID0gYWZpbmZvLVxcdTAwM2V0cmFuc3BvcnRfZmluaXNoKHNrYiwgeGZybV9ncm8gfHwgYXN5bmMpO1xcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0aWYgKHhmcm1fZ3JvKSB7XFxuIFxcdFxcdFxcdHNwID0gc2tiX3NlY19wYXRoKHNrYik7XFxuIFxcdFxcdFxcdGlmIChzcClcXG4gXFx0XFx0XFx0XFx0c3AtXFx1MDAzZW9sZW4gPSAwO1xcbiBcXHRcXHRcXHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxcbiBcXHRcXHRcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4tXFx0XFx0XFx0aWYgKGFzeW5jKVxcbi1cXHRcXHRcXHRcXHRkZXZfcHV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gXFx0XFx0XFx0Z3JvX2NlbGxzX3JlY2VpdmUoXFx1MDAyNmdyb19jZWxscywgc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKGFzeW5jKVxcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbkBAIC03NzIsNyArNzc1LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2eC1cXHUwMDNlbG9jayk7XFxuIGRyb3A6XFxuIFxcdGlmIChhc3luYylcXG4tXFx0XFx0ZGV2X3B1dChza2ItXFx1MDAzZWRldik7XFxuK1xcdFxcdGRldl9wdXQoZGV2KTtcXG4gXFx0eGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHggXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNldHlwZSA/IHgtXFx1MDAzZXR5cGUtXFx1MDAzZXByb3RvIDogbmV4dGhkciwgLTEpO1xcbiBcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXFxuaW5kZXggOTU5NTQ0NDI1NjkyOTAuLjYzOTkzNGYzMDAxNjdlIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXFxuQEAgLTI0Miw2ICsyNDIsOSBAQCBfX3hmcm02X3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwpXFxuIGJvb2wgeGZybV9zZWxlY3Rvcl9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxcbiB7XFxuK1xcdGlmIChmYW1pbHkgIT0gc2VsLVxcdTAwM2VmYW1pbHkgXFx1MDAyNlxcdTAwMjYgc2VsLVxcdTAwM2VmYW1pbHkgIT0gQUZfVU5TUEVDKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRzd2l0Y2ggKGZhbWlseSkge1xcbiBcXHRjYXNlIEFGX0lORVQ6XFxuIFxcdFxcdHJldHVybiBfX3hmcm00X3NlbGVjdG9yX21hdGNoKHNlbCwgZmwpO1xcbkBAIC02ODUsNyArNjg4LDcgQEAgc3RhdGljIHZvaWQgeGZybV9ieWlkeF9yZXNpemUoc3RydWN0IG5ldCAqbmV0KVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ieWRzdF9zaG91bGRfcmVzaXplKHN0cnVjdCBuZXQgKm5ldCwgaW50IGRpciwgaW50ICp0b3RhbClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgY250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdO1xcbitcXHR1bnNpZ25lZCBpbnQgY250ID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSk7XFxuIFxcdHVuc2lnbmVkIGludCBobWFzayA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfYnlkc3RbZGlyXS5obWFzaztcXG4gXFxuIFxcdGlmICh0b3RhbClcXG5AQCAtNzExLDEyICs3MTQsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgeGZybV9ieWlkeF9zaG91bGRfcmVzaXplKHN0cnVjdCBuZXQgKm5ldCwgaW50IHRvdGFsKVxcbiBcXG4gdm9pZCB4ZnJtX3NwZF9nZXRpbmZvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1rX3NwZGluZm8gKnNpKVxcbiB7XFxuLVxcdHNpLVxcdTAwM2VpbmNudCA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU5dO1xcbi1cXHRzaS1cXHUwMDNlb3V0Y250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdO1xcbi1cXHRzaS1cXHUwMDNlZndkY250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9GV0RdO1xcbi1cXHRzaS1cXHUwMDNlaW5zY250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTitYRlJNX1BPTElDWV9NQVhdO1xcbi1cXHRzaS1cXHUwMDNlb3V0c2NudCA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUK1hGUk1fUE9MSUNZX01BWF07XFxuLVxcdHNpLVxcdTAwM2Vmd2RzY250ID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9GV0QrWEZSTV9QT0xJQ1lfTUFYXTtcXG4rXFx0c2ktXFx1MDAzZWluY250ID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU5dKTtcXG4rXFx0c2ktXFx1MDAzZW91dGNudCA9IFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0pO1xcbitcXHRzaS1cXHUwMDNlZndkY250ID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEXSk7XFxuK1xcdHNpLVxcdTAwM2VpbnNjbnQgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTitYRlJNX1BPTElDWV9NQVhdKTtcXG4rXFx0c2ktXFx1MDAzZW91dHNjbnQgPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVQrWEZSTV9QT0xJQ1lfTUFYXSk7XFxuK1xcdHNpLVxcdTAwM2Vmd2RzY250ID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEK1hGUk1fUE9MSUNZX01BWF0pO1xcbiBcXHRzaS1cXHUwMDNlc3BkaGNudCA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfaWR4X2htYXNrO1xcbiBcXHRzaS1cXHUwMDNlc3BkaG1jbnQgPSB4ZnJtX3BvbGljeV9oYXNobWF4O1xcbiB9XFxuQEAgLTIzMTgsNyArMjMyMSw3IEBAIHN0YXRpYyB2b2lkIF9feGZybV9wb2xpY3lfbGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcXG4gXFx0fVxcbiBcXG4gXFx0bGlzdF9hZGQoXFx1MDAyNnBvbC1cXHUwMDNld2Fsay5hbGwsIFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2FsbCk7XFxuLVxcdG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSsrO1xcbitcXHRXUklURV9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSwgbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdICsgMSk7XFxuIFxcdHhmcm1fcG9sX2hvbGQocG9sKTtcXG4gfVxcbiBcXG5AQCAtMjMzNyw3ICsyMzQwLDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqX194ZnJtX3BvbGljeV91bmxpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsXFxuIFxcdH1cXG4gXFxuIFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnBvbC1cXHUwMDNld2Fsay5hbGwpO1xcbi1cXHRuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0tLTtcXG4rXFx0V1JJVEVfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0sIG5ldC1cXHUwMDNleGZybS5wb2xpY3lfY291bnRbZGlyXSAtIDEpO1xcbiBcXG4gXFx0cmV0dXJuIHBvbDtcXG4gfVxcbkBAIC0zMjIyLDcgKzMyMjUsNyBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cF93aXRoX2lmaWQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gXFx0XFx0LyogVG8gYWNjZWxlcmF0ZSBhIGJpdC4uLiAgKi9cXG4gXFx0XFx0aWYgKCFpZl9pZCBcXHUwMDI2XFx1MDAyNiAoKGRzdF9vcmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IERTVF9OT1hGUk0pIHx8XFxuLVxcdFxcdFxcdCAgICAgICAhbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSlcXG4rXFx0XFx0XFx0ICAgICAgICFSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSkpXFxuIFxcdFxcdFxcdGdvdG8gbm9wb2w7XFxuIFxcbiBcXHRcXHR4ZHN0ID0geGZybV9idW5kbGVfbG9va3VwKG5ldCwgZmwsIGZhbWlseSwgZGlyLCBcXHUwMDI2eGZsbywgaWZfaWQpO1xcbkBAIC0zMjk2LDcgKzMyOTksNyBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cF93aXRoX2lmaWQoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gbm9wb2w6XFxuIFxcdGlmICgoIWRzdF9vcmlnLVxcdTAwM2VkZXYgfHwgIShkc3Rfb3JpZy1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9MT09QQkFDSykpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQkxPQ0spIHtcXG4rXFx0ICAgIFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7XFxuIFxcdFxcdGVyciA9IC1FUEVSTTtcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFx0fVxcbkBAIC0zNzUwLDcgKzM3NTMsNyBAQCBpbnQgX194ZnJtX3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdGNvbnN0IGJvb2wgaXNfY3J5cHRvX29mZmxvYWQgPSBzcCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQoeGZybV9pbnB1dF9zdGF0ZShza2IpLVxcdTAwM2V4c28udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTyk7XFxuIFxcbi1cXHRcXHRpZiAobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0gPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7XFxuK1xcdFxcdGlmIChSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xcbiBcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1BPTFMpO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5pbmRleCA1ODljM2I2ZTQ2NzkxMy4uOWU4N2Y3MDI4MjAxMDggMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXFxuKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXFxuQEAgLTEyMDcsOSArMTIwNywxMSBAQCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9pbnB1dF9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyayxcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWQgKnN0YXRlX2NhY2hlX2lucHV0O1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IE5VTEw7XFxuIFxcbitcXHQvKiBCSCBpcyBhbHdheXMgZGlzYWJsZWQgb24gdGhlIGlucHV0IHBhdGguICovXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2luX3NvZnRpcnEoKTtcXG4rXFxuIFxcdHN0YXRlX2NhY2hlX2lucHV0ID0gcmF3X2NwdV9wdHIobmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2NhY2hlX2lucHV0KTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHgsIHN0YXRlX2NhY2hlX2lucHV0LCBzdGF0ZV9jYWNoZV9pbnB1dCkge1xcbiBcXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ICE9IGZhbWlseSB8fFxcbiBcXHRcXHQgICAgeC1cXHUwMDNlaWQuc3BpICAgICAgICE9IHNwaSB8fFxcbkBAIC0xMjI3LDIwICsxMjI5LDI1IEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxcbiBcXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcXHUwMDI2c3RhdGVfcHRycyk7XFxuIFxcbiBcXHR4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChcXHUwMDI2c3RhdGVfcHRycywgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7XFxuLVxcbi1cXHRpZiAoeCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX1ZBTElEKSB7XFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuLVxcdFxcdGlmIChobGlzdF91bmhhc2hlZChcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKSB7XFxuK1xcdGlmICh4KSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuK1xcdFxcdGlmICh4LVxcdTAwM2VrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSBzdGF0ZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIERvbid0IGFkZCBpdCB0byB0aGUgY2FjaGUgYnV0IHN0aWxsXFxuK1xcdFxcdFxcdCAqIHJldHVybiBpdCB0byB0aGUgY2FsbGVyLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0fSBlbHNlIGlmIChobGlzdF91bmhhc2hlZChcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKSB7XFxuIFxcdFxcdFxcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpO1xcbiBcXHRcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNngtXFx1MDAzZXN0YXRlX2NhY2hlX2lucHV0LCBzdGF0ZV9jYWNoZV9pbnB1dCk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIFxcdH1cXG4gXFxuIG91dDpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiB4O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9zdGF0ZV9sb29rdXApO1xcbkBAIC0yOTc2LDcgKzI5ODMsNyBAQCBpbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbiBcXHRpZiAoSVNfRVJSKGRhdGEpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihkYXRhKTtcXG4gXFxuLVxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFxcdTAwMjZcXHUwMDI2IGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcXG4gXFx0XFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbiBcXG4gXFx0XFx0aWYgKCF4dHIpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xcbmluZGV4IDcxYTRiNzI3OGViYTkyLi42MWViNWRlMzNiODdlZSAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuQEAgLTI0ODUsOSArMjQ4NSw5IEBAIHN0YXRpYyBpbnQgeGZybV9ub3RpZnlfdXNlcnBvbGljeShzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdH1cXG4gXFxuIFxcdHVwID0gbmxtc2dfZGF0YShubGgpO1xcbi1cXHR1cC1cXHUwMDNlaW4gPSBuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfSU5dO1xcbi1cXHR1cC1cXHUwMDNlZndkID0gbmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF07XFxuLVxcdHVwLVxcdTAwM2VvdXQgPSBuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXTtcXG4rXFx0dXAtXFx1MDAzZWluID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0pO1xcbitcXHR1cC1cXHUwMDNlZndkID0gUkVBRF9PTkNFKG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdKTtcXG4rXFx0dXAtXFx1MDAzZW91dCA9IFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSk7XFxuIFxcbiBcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbiBcXG5AQCAtMjUxMSwxMyArMjUxMSwxMyBAQCBzdGF0aWMgaW50IHhmcm1fc2V0X2RlZmF1bHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfZGVmYXVsdCAqdXAgPSBubG1zZ19kYXRhKG5saCk7XFxuIFxcbiBcXHRpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLVxcdTAwM2VpbikpXFxuLVxcdFxcdG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0gPSB1cC1cXHUwMDNlaW47XFxuK1xcdFxcdFdSSVRFX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSwgdXAtXFx1MDAzZWluKTtcXG4gXFxuIFxcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXFx1MDAzZWZ3ZCkpXFxuLVxcdFxcdG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdID0gdXAtXFx1MDAzZWZ3ZDtcXG4rXFx0XFx0V1JJVEVfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSwgdXAtXFx1MDAzZWZ3ZCk7XFxuIFxcbiBcXHRpZiAoeGZybV91c2VycG9saWN5X2lzX3ZhbGlkKHVwLVxcdTAwM2VvdXQpKVxcbi1cXHRcXHRuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSA9IHVwLVxcdTAwM2VvdXQ7XFxuK1xcdFxcdFdSSVRFX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0sIHVwLVxcdTAwM2VvdXQpO1xcbiBcXG4gXFx0cnRfZ2VuaWRfYnVtcF9hbGwobmV0KTtcXG4gXFxuQEAgLTI1NDcsOSArMjU0Nyw5IEBAIHN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0fVxcbiBcXG4gXFx0cl91cCA9IG5sbXNnX2RhdGEocl9ubGgpO1xcbi1cXHRyX3VwLVxcdTAwM2VpbiA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl07XFxuLVxcdHJfdXAtXFx1MDAzZWZ3ZCA9IG5ldC1cXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdO1xcbi1cXHRyX3VwLVxcdTAwM2VvdXQgPSBuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXTtcXG4rXFx0cl91cC1cXHUwMDNlaW4gPSBSRUFEX09OQ0UobmV0LVxcdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7XFxuK1xcdHJfdXAtXFx1MDAzZWZ3ZCA9IFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSk7XFxuK1xcdHJfdXAtXFx1MDAzZW91dCA9IFJFQURfT05DRShuZXQtXFx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSk7XFxuIFxcdG5sbXNnX2VuZChyX3NrYiwgcl9ubGgpO1xcbiBcXG4gXFx0cmV0dXJuIG5sbXNnX3VuaWNhc3QoeGZybV9uZXRfbmxzayhuZXQsIHNrYiksIHJfc2tiLCBwb3J0aWQpO1xcbkBAIC0zNDcyLDcgKzM0NzIsNyBAQCBzdGF0aWMgaW50IHhmcm1fdXNlcl9yY3ZfbXNnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRpZiAoIW5ldGxpbmtfbmV0X2NhcGFibGUoc2tiLCBDQVBfTkVUX0FETUlOKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFxcdTAwMjZcXHUwMDI2IGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcXG4gXFx0XFx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xcbiBcXG4gXFx0XFx0aWYgKCF4dHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE1OjQ1LjkxNTg3MTk5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NjMwNDA3MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJORVRfS0VZXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3VzZXJfcmN2X21zZ1wiLFxuICAgIFwieGZybV9zZXRfZGVmYXVsdFwiLFxuICAgIFwieGZybV9nZXRfZGVmYXVsdFwiLFxuICAgIFwieGZybV91c2VyX3BvbGljeVwiLFxuICAgIFwicGZrZXlfYWRkXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJ4ZnJtX2dldF9zcGRpbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBYRlJNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGJvdW5kcyBjaGVja3MgZm9yIGFkZHJlc3MgbWF0Y2hpbmcsIGZpeGluZyBkYXRhIHJhY2VzIGluIHBvbGljeSBjb3VudHMvZGVmYXVsdHMsIGFkanVzdGluZyBkZXYgcmVmY291bnRpbmcgaW4geGZybV9pbnB1dCwgYW5kIHJlZmFjdG9yaW5nIGVzcGludGNwIG1lc3NhZ2Ugc2VuZGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgSVBzZWMgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjY1ZWQyNmNlMTBiOGEwYmU2NzBkOWQ4MTA0NTBhMzBkOWNiZWE2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDIyIDA4OjE1OjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oXG5pbmRleCA4NzQ0MDkxMjdlMjkyMS4uZjhjOTA5YjBmMGMzNGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC94ZnJtLmhcbisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaFxuQEAgLTk0Myw2ICs5NDMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcl9tYXRjaChjb25zdCB2b2lkICp0b2tlbjEsIGNvbnN0IHZvaWQgKnRva2VuMixcbiBcdHVuc2lnbmVkIGludCBwZHc7XG4gXHR1bnNpZ25lZCBpbnQgcGJpO1xuIFxuK1x0aWYgKHByZWZpeGxlbiBcdTAwM2UgMTI4KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRwZHcgPSBwcmVmaXhsZW4gXHUwMDNlXHUwMDNlIDU7XHQgIC8qIG51bSBvZiB3aG9sZSB1MzIgaW4gcHJlZml4ICovXG4gXHRwYmkgPSBwcmVmaXhsZW4gXHUwMDI2ICAweDFmOyAgLyogbnVtIG9mIGJpdHMgaW4gaW5jb21wbGV0ZSB1MzIgaW4gcHJlZml4ICovXG4gXG5AQCAtOTY3LDYgKzk3MCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWRkcjRfbWF0Y2goX19iZTMyIGExLCBfX2JlMzIgYTIsIHU4IHByZWZpeGxlbilcbiBcdC8qIEM5OSA2LjUuNyAoMyk6IHUzMiBcdTAwM2NcdTAwM2MgMzIgaXMgdW5kZWZpbmVkIGJlaGF2aW91ciAqL1xuIFx0aWYgKHNpemVvZihsb25nKSA9PSA0IFx1MDAyNlx1MDAyNiBwcmVmaXhsZW4gPT0gMClcbiBcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocHJlZml4bGVuIFx1MDAzZSAzMilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0cmV0dXJuICEoKGExIF4gYTIpIFx1MDAyNiBodG9ubCh+MFVMIFx1MDAzY1x1MDAzYyAoMzIgLSBwcmVmaXhsZW4pKSk7XG4gfVxuIFxuQEAgLTEyNTAsOCArMTI1Nyw4IEBAIGludCBfX3hmcm1fcG9saWN5X2NoZWNrKHN0cnVjdCBzb2NrICosIGludCBkaXIsIHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGlubGluZSBib29sIF9feGZybV9jaGVja19ub3BvbGljeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCBpbnQgZGlyKVxuIHtcbi1cdGlmICghbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0gXHUwMDI2XHUwMDI2ICFzZWNwYXRoX2V4aXN0cyhza2IpKVxuLVx0XHRyZXR1cm4gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbZGlyXSA9PSBYRlJNX1VTRVJQT0xJQ1lfQUNDRVBUO1xuK1x0aWYgKCFSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0pIFx1MDAyNlx1MDAyNiAhc2VjcGF0aF9leGlzdHMoc2tiKSlcbitcdFx0cmV0dXJuIFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdKSA9PSBYRlJNX1VTRVJQT0xJQ1lfQUNDRVBUO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC0xMzUxLDggKzEzNTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCB4ZnJtX3JvdXRlX2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gXG4tXHRpZiAoIW5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0gPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVClcbitcdGlmICghUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSBcdTAwMjZcdTAwMjZcbitcdCAgICBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSkgPT0gWEZSTV9VU0VSUE9MSUNZX0FDQ0VQVClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gKHNrYl9kc3Qoc2tiKS1cdTAwM2VmbGFncyBcdTAwMjYgRFNUX05PWEZSTSkgfHxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xuaW5kZXggYzJlYWM4NDRiY2RiNGUuLmY2ZjJhOGVmM2Y4ODQ3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xuKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuY1xuQEAgLTc2LDggKzc2LDYgQEAgaW50IHhmcm00X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKVxuIFx0TkZfSE9PSyhORlBST1RPX0lQVjQsIE5GX0lORVRfUFJFX1JPVVRJTkcsXG4gXHRcdGRldl9uZXQoZGV2KSwgTlVMTCwgc2tiLCBkZXYsIE5VTEwsXG4gXHRcdHhmcm00X3Jjdl9lbmNhcF9maW5pc2gpO1xuLVx0aWYgKGFzeW5jKVxuLVx0XHRkZXZfcHV0KGRldik7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfaW5wdXQuYyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbmluZGV4IDY5OWEwMDFhYzE2NjI5Li44OWQwNDQzYjUzMDczMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbisrKyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmNcbkBAIC03MSw4ICs3MSw2IEBAIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhc3luYylcbiBcdE5GX0hPT0soTkZQUk9UT19JUFY2LCBORl9JTkVUX1BSRV9ST1VUSU5HLFxuIFx0XHRkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLFxuIFx0XHR4ZnJtNl90cmFuc3BvcnRfZmluaXNoMik7XG4tXHRpZiAoYXN5bmMpXG4tXHRcdGRldl9wdXQoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuY1xuaW5kZXggOWNmZmVlZjE4Y2Q5MWMuLjMyMTZmODk3YTMwNWUwIDEwMDY0NFxuLS0tIGEvbmV0L2tleS9hZl9rZXkuY1xuKysrIGIvbmV0L2tleS9hZl9rZXkuY1xuQEAgLTEyMTgsNiArMTIxOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqIHBma2V5X21zZzJ4ZnJtX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbiBcdFx0XHRzdHJjcHkoeC1cdTAwM2VjYWxnLVx1MDAzZWFsZ19uYW1lLCBhLVx1MDAzZW5hbWUpO1xuK1x0XHRcdHgtXHUwMDNlY2FsZy1cdTAwM2VhbGdfa2V5X2xlbiA9IDA7XG4gXHRcdFx0eC1cdTAwM2Vwcm9wcy5jYWxnbyA9IHNhLVx1MDAzZXNhZGJfc2FfZW5jcnlwdDtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpbnQga2V5c2l6ZSA9IDA7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmNcbmluZGV4IGQ5MDM1NTQ2Mzc1ZWJhLi4zNzRlMWI5NjQ0MzgzOSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL2VzcGludGNwLmNcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcbkBAIC0yMTIsNDMgKzIxMiwyMyBAQCBzdGF0aWMgaW50IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX21zZyAqc2ttc2cgPSBcdTAwMjZlbXNnLVx1MDAzZXNrbXNnO1xuIFx0Ym9vbCBtb3JlID0gZmxhZ3MgXHUwMDI2IE1TR19NT1JFO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbi1cdGludCBkb25lID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRzZyA9IFx1MDAyNnNrbXNnLVx1MDAzZXNnLmRhdGFbc2ttc2ctXHUwMDNlc2cuc3RhcnRdO1xuIFx0ZG8ge1xuIFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuLVx0XHRzaXplX3Qgc2l6ZSA9IHNnLVx1MDAzZWxlbmd0aCAtIGVtc2ctXHUwMDNlb2Zmc2V0O1xuLVx0XHRpbnQgb2Zmc2V0ID0gc2ctXHUwMDNlb2Zmc2V0ICsgZW1zZy1cdTAwM2VvZmZzZXQ7XG4tXHRcdHN0cnVjdCBwYWdlICpwO1xuLVxuLVx0XHRlbXNnLVx1MDAzZW9mZnNldCA9IDA7XG4gXG4rXHRcdHNnID0gXHUwMDI2c2ttc2ctXHUwMDNlc2cuZGF0YVtza21zZy1cdTAwM2VzZy5zdGFydF07XG4gXHRcdGlmIChzZ19pc19sYXN0KHNnKSBcdTAwMjZcdTAwMjYgIW1vcmUpXG4gXHRcdFx0bXNnaGRyLm1zZ19mbGFncyBcdTAwMjY9IH5NU0dfTU9SRTtcbiBcbi1cdFx0cCA9IHNnX3BhZ2Uoc2cpO1xuLXJldHJ5OlxuLVx0XHRidmVjX3NldF9wYWdlKFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XG4tXHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2bXNnaGRyLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YnZlYywgMSwgc2l6ZSk7XG4tXHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnaGRyLCBzaXplKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGVtc2ctXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0IC0gc2ctXHUwMDNlb2Zmc2V0O1xuLVx0XHRcdHNrbXNnLVx1MDAzZXNnLnN0YXJ0ICs9IGRvbmU7XG4rXHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2YnZlYywgc2dfcGFnZShzZyksIHNnLVx1MDAzZWxlbmd0aCwgc2ctXHUwMDNlb2Zmc2V0KTtcbitcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzZy1cdTAwM2VsZW5ndGgpO1xuK1x0XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFx1MDAyNm1zZ2hkciwgc2ctXHUwMDNlbGVuZ3RoKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9XG4tXG4tXHRcdGlmIChyZXQgIT0gc2l6ZSkge1xuLVx0XHRcdG9mZnNldCArPSByZXQ7XG4tXHRcdFx0c2l6ZSAtPSByZXQ7XG4tXHRcdFx0Z290byByZXRyeTtcbi1cdFx0fVxuIFxuLVx0XHRkb25lKys7XG4tXHRcdHB1dF9wYWdlKHApO1xuLVx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnLVx1MDAzZWxlbmd0aCk7XG4tXHRcdHNnID0gc2dfbmV4dChzZyk7XG4tXHR9IHdoaWxlIChzZyk7XG4rXHRcdHNrX21zZ19mcmVlX3BhcnRpYWwoc2ssIHNrbXNnLCByZXQpO1xuK1x0fSB3aGlsZSAoc2ttc2ctXHUwMDNlc2cuc2l6ZSk7XG4gXG4gXHRtZW1zZXQoZW1zZywgMCwgc2l6ZW9mKCplbXNnKSk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlNGMyY2QyNDkzNmQzZi4uZWVjYWIzMzdiZDBhNzkgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmNcbisrKyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuQEAgLTQ2Nyw2ICs0NjcsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm87XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gXHRpbnQgZXJyO1xuIFx0X19iZTMyIHNlcTtcbiBcdF9fYmUzMiBzZXFfaGk7XG5AQCAtNDkzLDcgKzQ5NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0XHRcdFx0ICAgICAgIExJTlVYX01JQl9YRlJNSU5TVEFURUlOVkFMSUQpO1xuIFxuIFx0XHRcdGlmIChlbmNhcF90eXBlID09IC0xKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbitcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbkBAIC02NTUsMTYgKzY1NiwxNiBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXG4gXHRcdGlmICghY3J5cHRvX2RvbmUpIHtcbiBcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuLVx0XHRcdGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO1xuK1x0XHRcdGRldl9ob2xkKGRldik7XG4gXG4gXHRcdFx0bmV4dGhkciA9IHgtXHUwMDNldHlwZS1cdTAwM2VpbnB1dCh4LCBza2IpO1xuIFx0XHRcdGlmIChuZXh0aGRyID09IC1FSU5QUk9HUkVTUykge1xuIFx0XHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuK1x0XHRcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbitcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNngtXHUwMDNlbG9jayk7XG4gXHRcdH1cbiByZXN1bWU6XG5AQCAtNjk5LDcgKzcwMCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0ZXJyID0geGZybV9pbm5lcl9tb2RlX2lucHV0KHgsIHNrYik7XG4gXHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTKSB7XG4gXHRcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdFx0ZGV2X3B1dChza2ItXHUwMDNlZGV2KTtcbitcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fSBlbHNlIGlmIChlcnIpIHtcbiBcdFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5TVEFURU1PREVFUlJPUik7XG5AQCAtNzI2LDkgKzcyNywxMiBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdGNyeXB0b19kb25lID0gZmFsc2U7XG4gXHR9IHdoaWxlICghZXJyKTtcbiBcbitcdHJjdV9yZWFkX2xvY2soKTtcbiBcdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8sIDApO1xuLVx0aWYgKGVycilcbitcdGlmIChlcnIpIHtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGdvdG8gZHJvcDtcbitcdH1cbiBcbiBcdG5mX3Jlc2V0X2N0KHNrYik7XG4gXG5AQCAtNzM5LDggKzc0Myw5IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0aWYgKHNrYl92YWxpZF9kc3Qoc2tiKSlcbiBcdFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiBcdFx0aWYgKGFzeW5jKVxuLVx0XHRcdGRldl9wdXQoc2tiLVx1MDAzZWRldik7XG4rXHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZncm9fY2VsbHMsIHNrYik7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG4gXHRcdHhvID0geGZybV9vZmZsb2FkKHNrYik7XG5AQCAtNzQ4LDIzICs3NTMsMjEgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0XHRcdHhmcm1fZ3JvID0geG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1JPO1xuIFxuIFx0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdGFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC1cdTAwM2Vwcm9wcy5mYW1pbHkpO1xuIFx0XHRpZiAobGlrZWx5KGFmaW5mbykpXG4gXHRcdFx0ZXJyID0gYWZpbmZvLVx1MDAzZXRyYW5zcG9ydF9maW5pc2goc2tiLCB4ZnJtX2dybyB8fCBhc3luYyk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpZiAoeGZybV9ncm8pIHtcbiBcdFx0XHRzcCA9IHNrYl9zZWNfcGF0aChza2IpO1xuIFx0XHRcdGlmIChzcClcbiBcdFx0XHRcdHNwLVx1MDAzZW9sZW4gPSAwO1xuIFx0XHRcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXG4gXHRcdFx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbi1cdFx0XHRpZiAoYXN5bmMpXG4tXHRcdFx0XHRkZXZfcHV0KHNrYi1cdTAwM2VkZXYpO1xuIFx0XHRcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNmdyb19jZWxscywgc2tiKTtcbi1cdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChhc3luYylcbitcdFx0XHRkZXZfcHV0KGRldik7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuQEAgLTc3Miw3ICs3NzUsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuIGRyb3A6XG4gXHRpZiAoYXN5bmMpXG4tXHRcdGRldl9wdXQoc2tiLVx1MDAzZWRldik7XG4rXHRcdGRldl9wdXQoZGV2KTtcbiBcdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4IFx1MDAyNlx1MDAyNiB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyLCAtMSk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5pbmRleCA5NTk1NDQ0MjU2OTI5MC4uNjM5OTM0ZjMwMDE2N2UgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5AQCAtMjQyLDYgKzI0Miw5IEBAIF9feGZybTZfc2VsZWN0b3JfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbClcbiBib29sIHhmcm1fc2VsZWN0b3JfbWF0Y2goY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbCxcbiBcdFx0XHQgdW5zaWduZWQgc2hvcnQgZmFtaWx5KVxuIHtcbitcdGlmIChmYW1pbHkgIT0gc2VsLVx1MDAzZWZhbWlseSBcdTAwMjZcdTAwMjYgc2VsLVx1MDAzZWZhbWlseSAhPSBBRl9VTlNQRUMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdHN3aXRjaCAoZmFtaWx5KSB7XG4gXHRjYXNlIEFGX0lORVQ6XG4gXHRcdHJldHVybiBfX3hmcm00X3NlbGVjdG9yX21hdGNoKHNlbCwgZmwpO1xuQEAgLTY4NSw3ICs2ODgsNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX2J5aWR4X3Jlc2l6ZShzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gc3RhdGljIGlubGluZSBpbnQgeGZybV9ieWRzdF9zaG91bGRfcmVzaXplKHN0cnVjdCBuZXQgKm5ldCwgaW50IGRpciwgaW50ICp0b3RhbClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgY250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl07XG4rXHR1bnNpZ25lZCBpbnQgY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdKTtcbiBcdHVuc2lnbmVkIGludCBobWFzayA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9ieWRzdFtkaXJdLmhtYXNrO1xuIFxuIFx0aWYgKHRvdGFsKVxuQEAgLTcxMSwxMiArNzE0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fYnlpZHhfc2hvdWxkX3Jlc2l6ZShzdHJ1Y3QgbmV0ICpuZXQsIGludCB0b3RhbClcbiBcbiB2b2lkIHhmcm1fc3BkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc3BkaW5mbyAqc2kpXG4ge1xuLVx0c2ktXHUwMDNlaW5jbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU5dO1xuLVx0c2ktXHUwMDNlb3V0Y250ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF07XG4tXHRzaS1cdTAwM2Vmd2RjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEXTtcbi1cdHNpLVx1MDAzZWluc2NudCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTitYRlJNX1BPTElDWV9NQVhdO1xuLVx0c2ktXHUwMDNlb3V0c2NudCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVQrWEZSTV9QT0xJQ1lfTUFYXTtcbi1cdHNpLVx1MDAzZWZ3ZHNjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfRldEK1hGUk1fUE9MSUNZX01BWF07XG4rXHRzaS1cdTAwM2VpbmNudCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfSU5dKTtcbitcdHNpLVx1MDAzZW91dGNudCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfY291bnRbWEZSTV9QT0xJQ1lfT1VUXSk7XG4rXHRzaS1cdTAwM2Vmd2RjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRF0pO1xuK1x0c2ktXHUwMDNlaW5zY250ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9JTitYRlJNX1BPTElDWV9NQVhdKTtcbitcdHNpLVx1MDAzZW91dHNjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVCtYRlJNX1BPTElDWV9NQVhdKTtcbitcdHNpLVx1MDAzZWZ3ZHNjbnQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX0ZXRCtYRlJNX1BPTElDWV9NQVhdKTtcbiBcdHNpLVx1MDAzZXNwZGhjbnQgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfaWR4X2htYXNrO1xuIFx0c2ktXHUwMDNlc3BkaG1jbnQgPSB4ZnJtX3BvbGljeV9oYXNobWF4O1xuIH1cbkBAIC0yMzE4LDcgKzIzMjEsNyBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fcG9saWN5X2xpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXG4gXHR9XG4gXG4gXHRsaXN0X2FkZChcdTAwMjZwb2wtXHUwMDNld2Fsay5hbGwsIFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnBvbGljeV9hbGwpO1xuLVx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0rKztcbitcdFdSSVRFX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0sIG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdICsgMSk7XG4gXHR4ZnJtX3BvbF9ob2xkKHBvbCk7XG4gfVxuIFxuQEAgLTIzMzcsNyArMjM0MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKl9feGZybV9wb2xpY3lfdW5saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxuIFx0fVxuIFxuIFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwb2wtXHUwMDNld2Fsay5hbGwpO1xuLVx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0tLTtcbitcdFdSSVRFX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W2Rpcl0sIG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtkaXJdIC0gMSk7XG4gXG4gXHRyZXR1cm4gcG9sO1xuIH1cbkBAIC0zMjIyLDcgKzMyMjUsNyBAQCBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cF93aXRoX2lmaWQoc3RydWN0IG5ldCAqbmV0LFxuIFxuIFx0XHQvKiBUbyBhY2NlbGVyYXRlIGEgYml0Li4uICAqL1xuIFx0XHRpZiAoIWlmX2lkIFx1MDAyNlx1MDAyNiAoKGRzdF9vcmlnLVx1MDAzZWZsYWdzIFx1MDAyNiBEU1RfTk9YRlJNKSB8fFxuLVx0XHRcdCAgICAgICAhbmV0LVx1MDAzZXhmcm0ucG9saWN5X2NvdW50W1hGUk1fUE9MSUNZX09VVF0pKVxuK1x0XHRcdCAgICAgICAhUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudFtYRlJNX1BPTElDWV9PVVRdKSkpXG4gXHRcdFx0Z290byBub3BvbDtcbiBcbiBcdFx0eGRzdCA9IHhmcm1fYnVuZGxlX2xvb2t1cChuZXQsIGZsLCBmYW1pbHksIGRpciwgXHUwMDI2eGZsbywgaWZfaWQpO1xuQEAgLTMyOTYsNyArMzI5OSw3IEBAIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gbm9wb2w6XG4gXHRpZiAoKCFkc3Rfb3JpZy1cdTAwM2VkZXYgfHwgIShkc3Rfb3JpZy1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9MT09QQkFDSykpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0gPT0gWEZSTV9VU0VSUE9MSUNZX0JMT0NLKSB7XG4rXHQgICAgUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xuIFx0XHRlcnIgPSAtRVBFUk07XG4gXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG5AQCAtMzc1MCw3ICszNzUzLDcgQEAgaW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRjb25zdCBib29sIGlzX2NyeXB0b19vZmZsb2FkID0gc3AgXHUwMDI2XHUwMDI2XG4gXHRcdFx0KHhmcm1faW5wdXRfc3RhdGUoc2tiKS1cdTAwM2V4c28udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX0NSWVBUTyk7XG4gXG4tXHRcdGlmIChuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtkaXJdID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xuK1x0XHRpZiAoUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W2Rpcl0pID09IFhGUk1fVVNFUlBPTElDWV9CTE9DSykge1xuIFx0XHRcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTk5PUE9MUyk7XG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IDU4OWMzYjZlNDY3OTEzLi45ZTg3ZjcwMjgyMDEwOCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5AQCAtMTIwNyw5ICsxMjA3LDExIEBAIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxuIFx0c3RydWN0IGhsaXN0X2hlYWQgKnN0YXRlX2NhY2hlX2lucHV0O1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xuIFxuK1x0LyogQkggaXMgYWx3YXlzIGRpc2FibGVkIG9uIHRoZSBpbnB1dCBwYXRoLiAqL1xuK1x0bG9ja2RlcF9hc3NlcnRfaW5fc29mdGlycSgpO1xuK1xuIFx0c3RhdGVfY2FjaGVfaW5wdXQgPSByYXdfY3B1X3B0cihuZXQtXHUwMDNleGZybS5zdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KSB7XG4gXHRcdGlmICh4LVx1MDAzZXByb3BzLmZhbWlseSAhPSBmYW1pbHkgfHxcbiBcdFx0ICAgIHgtXHUwMDNlaWQuc3BpICAgICAgICE9IHNwaSB8fFxuQEAgLTEyMjcsMjAgKzEyMjksMjUgQEAgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1faW5wdXRfc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssXG4gXHR4ZnJtX2hhc2hfcHRyc19nZXQobmV0LCBcdTAwMjZzdGF0ZV9wdHJzKTtcbiBcbiBcdHggPSBfX3hmcm1fc3RhdGVfbG9va3VwKFx1MDAyNnN0YXRlX3B0cnMsIG1hcmssIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpO1xuLVxuLVx0aWYgKHggXHUwMDI2XHUwMDI2IHgtXHUwMDNla20uc3RhdGUgPT0gWEZSTV9TVEFURV9WQUxJRCkge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbi1cdFx0aWYgKGhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKSB7XG4rXHRpZiAoeCkge1xuK1x0XHRzcGluX2xvY2soXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbitcdFx0aWYgKHgtXHUwMDNla20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVGhlIHN0YXRlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIERvbid0IGFkZCBpdCB0byB0aGUgY2FjaGUgYnV0IHN0aWxsXG4rXHRcdFx0ICogcmV0dXJuIGl0IHRvIHRoZSBjYWxsZXIuXG4rXHRcdFx0ICovXG4rXHRcdH0gZWxzZSBpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCkpIHtcbiBcdFx0XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCwgc3RhdGVfY2FjaGVfaW5wdXQpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXHRcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQsIHN0YXRlX2NhY2hlX2lucHV0KTtcbiBcdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFx0fVxuIFxuIG91dDpcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIHg7XG4gfVxuIEVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9zdGF0ZV9sb29rdXApO1xuQEAgLTI5NzYsNyArMjk4Myw3IEBAIGludCB4ZnJtX3VzZXJfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4gXHRpZiAoSVNfRVJSKGRhdGEpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihkYXRhKTtcbiBcbi1cdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UKSBcdTAwMjZcdTAwMjYgaW5fY29tcGF0X3N5c2NhbGwoKSkge1xuIFx0XHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XG4gXG4gXHRcdGlmICgheHRyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNzFhNGI3Mjc4ZWJhOTIuLjYxZWI1ZGUzM2I4N2VlIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXG5AQCAtMjQ4NSw5ICsyNDg1LDkgQEAgc3RhdGljIGludCB4ZnJtX25vdGlmeV91c2VycG9saWN5KHN0cnVjdCBuZXQgKm5ldClcbiBcdH1cbiBcbiBcdHVwID0gbmxtc2dfZGF0YShubGgpO1xuLVx0dXAtXHUwMDNlaW4gPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl07XG4tXHR1cC1cdTAwM2Vmd2QgPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdO1xuLVx0dXAtXHUwMDNlb3V0ID0gbmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXTtcbitcdHVwLVx1MDAzZWluID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7XG4rXHR1cC1cdTAwM2Vmd2QgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSk7XG4rXHR1cC1cdTAwM2VvdXQgPSBSRUFEX09OQ0UobmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfT1VUXSk7XG4gXG4gXHRubG1zZ19lbmQoc2tiLCBubGgpO1xuIFxuQEAgLTI1MTEsMTMgKzI1MTEsMTMgQEAgc3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0c3RydWN0IHhmcm1fdXNlcnBvbGljeV9kZWZhdWx0ICp1cCA9IG5sbXNnX2RhdGEobmxoKTtcbiBcbiBcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlaW4pKVxuLVx0XHRuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0gPSB1cC1cdTAwM2VpbjtcbitcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl0sIHVwLVx1MDAzZWluKTtcbiBcbiBcdGlmICh4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQodXAtXHUwMDNlZndkKSlcbi1cdFx0bmV0LVx1MDAzZXhmcm0ucG9saWN5X2RlZmF1bHRbWEZSTV9QT0xJQ1lfRldEXSA9IHVwLVx1MDAzZWZ3ZDtcbitcdFx0V1JJVEVfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdLCB1cC1cdTAwM2Vmd2QpO1xuIFxuIFx0aWYgKHhmcm1fdXNlcnBvbGljeV9pc192YWxpZCh1cC1cdTAwM2VvdXQpKVxuLVx0XHRuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9PVVRdID0gdXAtXHUwMDNlb3V0O1xuK1x0XHRXUklURV9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0sIHVwLVx1MDAzZW91dCk7XG4gXG4gXHRydF9nZW5pZF9idW1wX2FsbChuZXQpO1xuIFxuQEAgLTI1NDcsOSArMjU0Nyw5IEBAIHN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdH1cbiBcbiBcdHJfdXAgPSBubG1zZ19kYXRhKHJfbmxoKTtcbi1cdHJfdXAtXHUwMDNlaW4gPSBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9JTl07XG4tXHRyX3VwLVx1MDAzZWZ3ZCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0ZXRF07XG4tXHRyX3VwLVx1MDAzZW91dCA9IG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF07XG4rXHRyX3VwLVx1MDAzZWluID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX0lOXSk7XG4rXHRyX3VwLVx1MDAzZWZ3ZCA9IFJFQURfT05DRShuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdFtYRlJNX1BPTElDWV9GV0RdKTtcbitcdHJfdXAtXHUwMDNlb3V0ID0gUkVBRF9PTkNFKG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9kZWZhdWx0W1hGUk1fUE9MSUNZX09VVF0pO1xuIFx0bmxtc2dfZW5kKHJfc2tiLCByX25saCk7XG4gXG4gXHRyZXR1cm4gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcl9za2IsIHBvcnRpZCk7XG5AQCAtMzQ3Miw3ICszNDcyLDcgQEAgc3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdGlmICghbmV0bGlua19uZXRfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuLVx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpIHtcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpIFx1MDAyNlx1MDAyNiBpbl9jb21wYXRfc3lzY2FsbCgpKSB7XG4gXHRcdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbiBcbiBcdFx0aWYgKCF4dHIpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNTo0NS45MTU4NzM4ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDg5OTQxMTIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBYRlJNIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzLCBtb3N0bHkgd2l0aGluIHRoZSBgbmV0L3hmcm0vYCwgYG5ldC9pcHY0L2AsIGBuZXQvaXB2Ni9gLCBhbmQgYG5ldC9rZXkvYCBkaXJlY3Rvcmllcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoZXNlIHNlZW0gdG8gYmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdGluZyB0aGUgWEZSTSAoSVBzZWMpIHN1YnN5c3RlbS4gR29vZCwgSSBsaWtlIHRoYXQ7IGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIHN0YWNrLiBUaGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwsIG5vIGRvdWJ0LiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGJlZW4gbW9kaWZpZWQuXG5cbiogICBgaW5jbHVkZS9uZXQveGZybS5oYDogQm91bmRzIGNoZWNrcyBmb3IgYGFkZHJfbWF0Y2hgIGFuZCBgYWRkcjRfbWF0Y2hgIGFyZSBhIGdvb2QgdGhpbmcuIFByZXZlbnRpbmcgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aCBgcHJlZml4bGVuYCBpcyBhIHNpbXBsZSBzYW5pdHkgY2hlY2sgdGhhdCBpcyBvZnRlbiBvdmVybG9va2VkLiBVc2luZyBgUkVBRF9PTkNFYCBmb3IgYG5ldC1cdTAwM2V4ZnJtLnBvbGljeV9jb3VudGAgYW5kIGBuZXQtXHUwMDNleGZybS5wb2xpY3lfZGVmYXVsdGAgc3VnZ2VzdHMgcG90ZW50aWFsIGxvY2tsZXNzIGFjY2VzcyBvcHRpbWl6YXRpb24sIGFuZCBpdCdzIG5pY2UgdG8gc2VlLlxuKiAgIGBuZXQvaXB2NC94ZnJtNF9pbnB1dC5jYCBhbmQgYG5ldC9pcHY2L3hmcm02X2lucHV0LmNgOiBSZW1vdmluZyB0aGF0IGBkZXZfcHV0YCBpbiBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAgYW5kIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoYC4uLiBIbW0sIEkgd29uZGVyIGFib3V0IHRoZSBjb250ZXh0IG9mIHRoYXQgYGRldl9wdXRgLiBJcyB0aGlzIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nIG9yIHBvdGVudGlhbCBkb3VibGUtZnJlZXM/IE5lZWRzIHNvbWUgZGVlcGVyIGludmVzdGlnYXRpb24sIGJ1dCB0aGUgbG9naWMgbWlnaHQgYmUgcHJvYmxlbWF0aWMuXG4qICAgYG5ldC9rZXkvYWZfa2V5LmNgOiBBZGRpbmcgYHgtXHUwMDNlY2FsZy1cdTAwM2VhbGdfa2V5X2xlbiA9IDA7YCBpbiBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgIGxvb2tzIGxpa2UgYSBrZXkgbGVuZ3RoIHplcm9pbmcgb3V0LiBJcyB0aGlzIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gbGVha2FnZSwgb3Igd2hhdD9cbiogICBgbmV0L3hmcm0vZXNwaW50Y3AuY2A6IFJlZmFjdG9yaW5nIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYCB0byB1c2UgYHNrX21zZ19mcmVlX3BhcnRpYWxgIGlzIGxpa2VseSBhbiBlZmZpY2llbmN5IGdhaW4sIGF2b2lkaW5nIHRoZSBmdWxsIHNrYiBmcmVlLlxuKiAgIGBuZXQveGZybS94ZnJtX2lucHV0LmNgOiBBZGp1c3RpbmcgYGRldl9wdXRgIGFuZCBgcmN1X3JlYWRfbG9ja2AgbG9naWMgaW4gYHhmcm1faW5wdXRgIGlzIGludGVyZXN0aW5nLiBUaGUgYHJjdV9yZWFkYCBzdHVmZiBuZWVkcyBjYXJlZnVsIGF0dGVudGlvbjsgUkNVIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBhcmVhIGZvciBjb250ZW50aW9uLlxuKiAgIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYDogQWRkaW5nIGZhbWlseSBjaGVjayBpbiBgeGZybV9zZWxlY3Rvcl9tYXRjaGAgaXMgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgbWF5YmUgc29tZXRoaW5nIG1pc3NlZCBvcmlnaW5hbGx5LCBhbmQgaXQncyBnb29kIHRvIHNlZS4gVGhlIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAgZm9yIHBvbGljeSBjb3VudHMgYW5kIGRlZmF1bHRzIGlzIHByb2JhYmx5IHRoZSBzYW1lIGFzIGB4ZnJtLmhgLCBtYWtpbmcgdGhlIGFjY2VzcyBzYWZlci5cbiogICBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYDogYGxvY2tkZXBfYXNzZXJ0X2luX3NvZnRpcnEoKWAgaW4gYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCBpcyBhIGxvY2tkZXAgYWRkaXRpb24sIGFuZCByZW1vdmluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBzdWdnZXN0cyBhIGRpZmZlcmVudCBsb2NraW5nIHN0cmF0ZWd5LiBUaGUgYHNwaW5fbG9ja19iaGAgdG8gYHNwaW5fbG9ja2AgY2hhbmdlIG5lZWRzIGNvbnRleHQuIEFuZCB0aGF0IGBJU19FTkFCTEVEKENPTkZJR19DT01QQVRfRk9SX1U2NF9BTElHTk1FTlQpYCBjaGVjayB0byBgaW5fY29tcGF0X3N5c2NhbGwoKWAgaXMgcmVsYXRlZCB0byB0aGUgY29tcGF0aWJpbGl0eSBmb3IgYWxpZ25tZW50LCBhbmQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGl0IHRvIGRldGVybWluZSBpdHMgbmVjZXNzaXR5IGhlcmUuXG4qICAgYG5ldC94ZnJtL3hmcm1fdXNlci5jYDogTW9yZSBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgIHVzYWdlIGZvciBwb2xpY3kgZGVmYXVsdHMsIGdvb2QuIEFuZCB0aGUgc2FtZSBgSVNfRU5BQkxFRGAgY2hlY2sgYXMgaW4gYHhmcm1fc3RhdGUuY2AsIGFuZCBhZ2FpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYy5cblxuQWxyaWdodCwgc28gdGhlIG1ham9yIGNoYW5nZSBpcyBYRlJNIChJUHNlYykuIFRpbWUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkga25vdyBgQ09ORklHX1hGUk1gIGVuYWJsZXMgdGhlIFhGUk0gY29yZS4gYENPTkZJR19YRlJNX0VTUElOVENQYCBpcyBvYnZpb3VzbHkgZm9yIGBlc3BpbnRjcC5jYC4gYENPTkZJR19ORVRfS0VZYCBoYW5kbGVzIGBuZXQva2V5L2FmX2tleS5jYC4gYG5ldC9pcHY0L3hmcm00X2lucHV0LmNgLi4uIHRoYXQncyBwcm9iYWJseSByZWxhdGVkIHRvIEVTUCwgYnV0IEkgc2hvdWxkIGxvb2sgYXQgYWxsIHRoZSBkZXBlbmRlbmNpZXMuIGBDT05GSUdfWEZSTV9VU0VSYCBjb3ZlcnMgYHhmcm1fdXNlci5jYCwgb2YgY291cnNlLiBMZXQncyBmaXJlIHVwIHNvbWUgY29uZmlnIHRvb2xzIGFuZCBnZXQgdGhpcyByaWdodC4gSSBuZWVkIHRvIGJlIHN1cmUgSSBhbSB0ZXN0aW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODczNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjAwLjgxNTI4NzA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMjk4MDA3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3BpbnRjcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjowMC45MDc1OTI2OTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTgzOTcyNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgWEZSTSBNYWtlZmlsZSBmb3IgYGVzcGludGNwYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGBlc3BpbnRjcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIFhGUk0gcG9ydGlvbiBvZiB0aGUga2VybmVsLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLCB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG5ldC94ZnJtL2AgZGlyZWN0b3J5IGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMuIEl04oCZcyB0aGUgY2VudHJhbCBodWIgZm9yIGhvdyBYRlJNIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHNvIGl0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIGRpcmVjdGl2ZXMgcmVnYXJkaW5nIGFueSBzcGVjaWZpYyBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBgZXNwaW50Y3BgLiBJJ2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciB0aGF0IHN0cmluZyB3aXRoaW4gdGhlIE1ha2VmaWxlIHRvIHNlZSB3aGF0IHBvcHMgdXAuIFRoaXMgYXBwcm9hY2ggd2lsbCBxdWlja2x5IHJldmVhbCBob3cgYGVzcGludGNwYCBpcyBpbnRlZ3JhdGVkIG9yIGRlZmluZWQgd2l0aGluIHRoZSBidWlsZCBzeXN0ZW0sIHByb3ZpZGluZyB2YWx1YWJsZSBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgWEZSTSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6MDUuODkxNTY3Mzk0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDA0MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcGludGNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0geGZybV9zdGF0ZV9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNjowNS45OTA5NzgyODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDEzMDA2NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBFU1AgaW4gVENQIEVuY2Fwc3VsYXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgcHV6emxlIHBpZWNlIEkgbmVlZCB0byBsb29rIGF0IGhlcmUgaXMgZGVmaW5pdGVseSBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgLiBUaGF0J3MgYSBrZXkgc2V0dGluZy4gSXQgbWVhbnMgSSdtIHdvcmtpbmcgd2l0aCBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgKEVTUCkgYW5kIGl0J3MgYmVpbmcgdHJhbnNwb3J0ZWQgKndpdGhpbiogVENQLiBOb3csIHdoYXQncyByZWxhdGVkIHRvIHRoaXM/IEkgaGF2ZSB0byBjb25zaWRlciBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgd2lkZXIga2VybmVsIHNlY3VyaXR5IGFyY2hpdGVjdHVyZS5cblxuTGV0IG1lIHRoaW5rLi4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBuZXQva2V5L2FmX2tleS5jYD8gVGhhdCBzZWVtcyBsaWtlIGFuIG9idmlvdXMgcGxhY2UgdG8gY2hlY2sgZm9yIGFueSBob29rcyBvciBpbnRlcmFjdGlvbnMsIHNpbmNlIGl0IGRlYWxzIHdpdGgga2V5IG1hbmFnZW1lbnQgYW5kIHRoZSBjb3JlIHNlY3VyaXR5IGZyYW1ld29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgaW4gYGFmX2tleS5jYCBtaWdodCBiZSBpbnZvbHZlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBzdHJ1Y3R1cmVzLCBvciBkYXRhIGZsb3dzIHRoYXQgcGVydGFpbiB0byB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX1hGUk1fRVNQSU5UQ1BgIG1vZGlmaWVzIG9yIGFmZmVjdHMgYW55IG9mIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGtleSBoYW5kbGluZyBvciBpZiBpdCB1dGlsaXplcyBpdCBkaXJlY3RseS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggbW9kdWxlIHV0aWxpemVzIHdoaWNoIGNvZGUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgb2YgYm90aCBvZiB0aG9zZSBmaWxlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXkgZml0IHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDczNCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjE1LjQwMzk4NjUxMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM3NTcyMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZfa2V5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9rZXkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2tleS9NYWtlZmlsZS01LVxcbm5ldC9rZXkvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0tFWSkgKz0gYWZfa2V5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6MTUuNTA3NzcyMzM5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxODkzODk5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBTZWN1cml0eSBDb251bmRydW1zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBiYXNlZCBvbiB0aGUgY29udGV4dCwgSSdtIHRoaW5raW5nIGFib3V0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBDT05GSUdfTkVUX0tFWWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuXCIgVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGZvdW5kYXRpb24uIEkgbmVlZCB0aGF0IGVuYWJsZWQuIEJ1dCBpdCBiZWdzIHRoZSBxdWVzdGlvbiwgaWYgdGhhdCdzIHRoZSBiYXNlIHJlcXVpcmVtZW50LCBob3cgYXJlIHRoaW5ncyBiZWluZyBoYW5kbGVkLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGEgY3J1Y2lhbCBjb21wb25lbnQ6IGB4ZnJtX3VzZXIuY2AuICBJJ20gYXNraW5nIG15c2VsZiwgKmhvdyogaXMgdGhpcyBtb2R1bGUgYmVpbmcgZW1wbG95ZWQgaW4gdGhlIHJlbGV2YW50IHVzZSBjYXNlPyBXaGF0J3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjb25maWd1cmF0aW9uIGFuZCB0aGlzIGZpbGU/IElzIGB4ZnJtX3VzZXIuY2AgYmVpbmcgdXNlZCBhcyBleHBlY3RlZCBoZXJlPyBJcyBpdCBwcm9wZXJseSBpbnRlZ3JhdGluZyB3aXRoIHRoZSBrZXlpbmcgbWF0ZXJpYWw/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHN1YnRsZSBtaXNjb25maWd1cmF0aW9ucyBvciB2dWxuZXJhYmlsaXRpZXMgc3RlbW1pbmcgZnJvbSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgQ09ORklHX05FVF9LRVlgIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBpbXBsZW1lbnRlZCBpbiB0aGF0IHVzZXItc3BhY2UgaW50ZXJmYWNlPyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byB0cmFjZSBob3cga2V5aW5nIG1hdGVyaWFsIGlzIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUga2V5aW5nIHN1YnN5c3RlbSwgdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiBpcyBlZmZlY3RpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjI1LjY5NzE2NDY2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MDkwMTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSArPSB4ZnJtX2FsZ28ub1xcbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICs9IHhmcm1fdXNlci5vXFxubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICs9IHhmcm1fY29tcGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6MjUuOTE0MjYyMDAxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0OTAzOTI3MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBYRlJNIEtlcm5lbCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uICpDT05GSUdfWEZSTV9VU0VSKiBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBJIGtub3cgdGhhdCBtdWNoLiBUaGlzIGlzIGEgY29yZSBidWlsZGluZyBibG9jay4gTm93LCB3aGVyZSBhcmUgd2Ugd2l0aCB0aGUgaW5wdXQgcGF0aD8gTGV0IG1lIHRoaW5rLi4uIHdoYXQgYWJvdXQgKnhmcm1faW5wdXQuYyo/IFRoYXQgZmlsZSBmZWVscyBsaWtlIGl0J3MgZ29pbmcgdG8gYmUgY2VudHJhbCB0byB3aGF0IEknbSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHBhY2tldHMgYXJlIGhhbmRsZWQgd2hlbiB0aGV5IGFycml2ZS4gVGhhdCBmaWxlIGlzIHByb2JhYmx5IGtleSB0byBob3cgdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gaXMgc2V0IHVwIGFuZCB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjUwLjgxODE5MTgzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNTc3MTY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTU6XFx0XFx0ICAgICAgeGZybV9pbnB1dC5vIHhmcm1fb3V0cHV0Lm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE2LVxcdFxcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6NTIuNTUzOTcwMTU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDY0NDM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgQ09ORklHX1hGUk1gIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIHRoZSBiYXNlbGluZSBmb3IgYW55IFhGUk0tcmVsYXRlZCBmdW5jdGlvbmFsaXR5LCBzbyB0aGF0J3MgZXhwZWN0ZWQuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGZlYXR1cmUgSSdtIHdvcmtpbmcgd2l0aCwgc28gbGV0J3MgY2hlY2sgb24gdGhlIGBDT05GSUdfWEZSTV9FU1BJTlRDUGAgb3B0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBpbiBgbmV0L3hmcm0vS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gcGluIGRvd24gcHJlY2lzZWx5IGhvdyBpdCdzIGRlZmluZWQgYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBtYXkgZGVwZW5kIG9uLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODIzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTY6NTYuNzAwNDE3MDI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzU0NDY1MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNTYtXFxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS9LY29uZmlnLTE1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE2OjU5LjQ1NDg4Nzg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTQ5NDc2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWx2aW5nIGludG8gWEZSTV9FU1BJTlRDUCoqXG5cblJpZ2h0LCBzbyBgWEZSTV9FU1BJTlRDUGAuLi4gYSBib29sZWFuLCBsaWtlbHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgY29udHJvbGxlZCBieSBzb21lIG90aGVyIHNldHRpbmcuIEkgc3VzcGVjdCBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgYmFjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmbGFnIGlzIGRlZmluZWQgYW5kIGhvdyBpdHMgdmFsdWUgaXMgZGV0ZXJtaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIGZyYW1ld29yazsgd2hhdCBkb2VzIGl0IGltcGFjdCwgYW5kIHdoYXQgdHJpZ2dlcnMgaXRzIHNldHRpbmc/IFRoaXMgaXNuJ3QganVzdCBhIHJhbmRvbSBib29sZWFuOyBpdCBoYXMgaW1wbGljYXRpb25zLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRob3NlIGltcGxpY2F0aW9ucyB0byBmdWxseSBjb21wcmVoZW5kIGl0cyBpbnRlbmRlZCBmdW5jdGlvbi4gVGhpcyBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgZW5jYXBzdWxhdGlvbiwgYW5kIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJvdG9jb2xzIG9yIG1lY2hhbmlzbXMgaXQncyB3b3JraW5nIHdpdGguIFRpbWUgdG8gZGlzc2VjdCB0aGUgY29kZWJhc2UgYW5kIGZvbGxvdyB0aGUgYnJlYWRjcnVtYnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTUwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTc6MDQuNzY5ODM5ODE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkxNzkwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODYtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWc6Mzg3OlxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTc6MDcuNTYxNjM4MTE4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTU4NzM4MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgTmV0d29yayBTZWN1cml0eSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSB1c2VyLWZhY2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEVTUCBpbiBUQ1AgYXJlIGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGVzZSB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsga2V5IGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYENPTkZJR19ORVRfS0VZYCBvcHRpb24gaW4gdGhlIGBuZXQva2V5L0tjb25maWdgIGZpbGUuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgRVNQIG92ZXIgVENQIGZlYXR1cmVzIGludGVncmF0ZSB3aXRoaW4gdGhlIGxhcmdlciBuZXR3b3JrIHNlY3VyaXR5IGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzozMC41MjAzODE0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODU0NTc1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9LRVlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MTA2PWNvbmZpZyBYRlJNX0lQQ09NUFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMTEtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTI6Y29uZmlnIE5FVF9LRVlcXG5uZXQveGZybS9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiUEZfS0VZIHNvY2tldHMgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjQtXFxubmV0L3hmcm0vS2NvbmZpZzoxMjU6Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI2LVxcdGJvb2wgXFxcIlBGX0tFWSBNSUdSQVRFXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzozMy4zMDU4NDQ0NDZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4MTk1MjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGVjaXBoZXJpbmcgdGhlIENvbmZpZ3VyYXRpb24gQ2x1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUga2V5IHRoaW5nIGhlcmUgc2VlbXMgdG8gYmUgYE5FVF9LRVlgLiBUaGF0J3MgbGlrZWx5IHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3Iga2V5aW5nLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBlbnRhaWxzIGluIHRlcm1zIG9mIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLiBMZXQgbWUgc2VlIHdoYXQgYENPTkZJR19YRlJNX1VTRVJgIGxvb2tzIGxpa2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0IHRpZXMgaW50byBob3cgdGhpcyBgTkVUX0tFWWAgaXMgc2V0LiBXaGVyZSBkb2VzIHRoaXMgZ28gYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTEwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTc6MzguMjg3ODAwMzY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI3NDU5MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTMxLVxcbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5uZXQveGZybS9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzo0MC41MTUyNjQyNzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzNDc5NTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqWEZSTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYFhGUk1fVVNFUmAgY29uZmlndXJhdGlvbiBvcHRpb24gcmlnaHQgbm93LiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBrZXkgZm9yIHVzZXItc3BhY2UgY29udHJvbCwgcmlnaHQ/IE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1hGUk1gIGl0c2VsZiBpcyBlbmFibGVkLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb25hbCBYRlJNIGZyYW1ld29yayBpcyBldmVuIHRoZXJlIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoZSB1c2VyLXNwYWNlIHNwZWNpZmljcy4gSXQncyB0aGUgcHJlLXJlcXVpc2l0ZSwgcmVhbGx5LiBHb3R0YSB3YWxrIGJlZm9yZSBJIGNhbiBydW4sIGFuZCBhbGwgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzo0NS41NTAwNjMyNTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTM4MjM4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxNzo0Ny43NDM4OTgxMTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NDQzMzk5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gUG9uZGVyaW5ncyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoaXMgYFhGUk1gIGJvb2wsIGFuZCBteSBndXQgcmVhY3Rpb24gaXMgdGhhdCBpdCdzIHByb2JhYmx5IGJlaW5nIGJyb3VnaHQgaW50byB0aGUgbWl4IGJ5IGVpdGhlciBgSU5FVF9FU1BgIG9yIHBvc3NpYmx5IHRocm91Z2ggYFhGUk1fVVNFUmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuXG5cbk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVGAuIFRoYXQgc2V0dGluZyBvZnRlbiBiaXRlcyBtZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB1c2Vyc3BhY2UgYW5kIDY0LWJpdCBhbGlnbmVkIHN0cnVjdHVyZXMuIFRoZXJlIGNvdWxkIGJlIHNvbWUgaW50ZXJhY3Rpb24gdGhlcmUgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgYWxpZ25tZW50IGlzIGhhbmRsZWQgY29ycmVjdGx5IGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLCBvciBJJ20gaW4gZm9yIGEgd29ybGQgb2YgcGFpbiBkb3duIHRoZSBsaW5lLiBUaGF0J3MgYSBrZXkgcG90ZW50aWFsIHBpdGZhbGwgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTYzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MDAuMzg4MjQ2OTM1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE1MzA1ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MzE2Nj1jb25maWcgQ09NUEFUXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTMxNjktXFxuYXJjaC94ODYvS2NvbmZpZzozMTcwOmNvbmZpZyBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlRcXG5hcmNoL3g4Ni9LY29uZmlnLTMxNzEtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxODowMy4wMDM1NTc3NDhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3ODE1ODc3NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIGFuZCBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgaXMgY29udHJvbGxlZCBieSBhIGJvb2xlYW4sIGxpa2VseSBnYXRlZCBieSBgQ09NUEFUYC4gUmlnaHQsIHNvIHRoYXQgbWVhbnMgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zIGFyZTogYElORVRfRVNQSU5UQ1BgLCBgSU5FVDZfRVNQSU5UQ1BgLCBgTkVUX0tFWWAsIGFuZCBgWEZSTV9VU0VSYC4gTWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGxpa2VseSBpbnRlcmFjdGlvbiB3aXRoIElQU2VjIGFuZCByZWxhdGVkIGtlcm5lbCBmZWF0dXJlcy5cblxuTm93LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIHRvdWNoZXMuIExvb2tzIGxpa2UgaXQgbW9kaWZpZXMgYSBkZWNlbnQgY2h1bmsgb2YgdGhlIGB4ZnJtYCBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRvIGlubGluZSBmdW5jdGlvbnMgbGlrZSBgYWRkcl9tYXRjaGAsIGBhZGRyNF9tYXRjaGAsIGBfX3hmcm1fY2hlY2tfbm9wb2xpY3lgLCBhbmQgYHhmcm1fcm91dGVfZm9yd2FyZGAuIEl0IGFsc28gaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byBjb3JlIGZ1bmN0aW9ucyBsaWtlIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCwgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLCBhbmQgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYC4gVGhlIGxpc3QgZ29lcyBvbiwgdG91Y2hpbmcgYSBsb3Qgb2YgZnVuZGFtZW50YWwgcGllY2VzIG9mIHRoZSB4ZnJtIHN0YWNrLiBJJ20gc2VlaW5nIHN0dWZmIGxpa2UgYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgLCBgeGZybV9pbnB1dGAsIGB4ZnJtX3NlbGVjdG9yX21hdGNoYCwgYHhmcm1fc3BkX2dldGluZm9gLCBwbHVzIGEgYnVuY2ggb2YgcG9saWN5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGxpa2UgYF9feGZybV9wb2xpY3lfbGlua2AsIGBfX3hmcm1fcG9saWN5X3VubGlua2AsIGFuZCBtb3JlLiBUaGVyZSdzIGFsc28gYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAsIGBfX3hmcm1fcG9saWN5X2NoZWNrYCwgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCwgYW5kIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gZnVuY3Rpb25zOiBgeGZybV91c2VyX3BvbGljeWAsIGB4ZnJtX25vdGlmeV91c2VycG9saWN5YCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGFuZCBgeGZybV91c2VyX3Jjdl9tc2dgLlxuXG5UaGF0J3MgYSBsb3QgdG8gZGlnZXN0LiBMZXQgbWUgZmlsdGVyIHRoaXMgbGlzdCBkb3duLiBPa2F5LCBgeGZybV9pbnB1dGAgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoIGFuZCBpdCdzIGhlYXZpbHkgbW9kaWZpZWQgaGVyZSwgc28gdGhhdCdzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBmb2N1cy4gYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBhcyBpdCBpcyBsaWtlbHkgYSBsb3dlci1sZXZlbCBmdW5jdGlvbi4gVGhlbiwgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBpcyBvbiB0aGUgaW50ZXJmYWNlLiBBbHNvLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYW5kIGB4ZnJtX3VzZXJfcmN2X21zZ2AgYXJlIGltcG9ydGFudCBmdW5jdGlvbnMgYXMgd2VsbC4gSSB0aGluayBgeGZybV91c2VyX3BvbGljeWAgaXMgYSBwb2ludCBvZiBjb25jZXJuLCBhbmQgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCB3aWxsIGJlIGltcG9ydGFudC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBvbmUgb3V0IGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MTkuNzg1MTQ5NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxODY1NjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTExNzU9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAwLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMjAxOnN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAyLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjUyLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTI1MzpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTI1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MjEuNTAzODEwMDQ2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MDQ1NDAzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgIGluIGBuZXQveGZybS9lc3BpbnRjcC5jYDpcblxuKipEZWVwIERpdmUgaW50byBFU1AtaW4tVENQJ3MgTG9ja2VkIFNlbmQgUGF0aCoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGVzcGludGNwX3NlbmRza21zZ19sb2NrZWRgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGhpbnRzIGF0IHNvbWUgaW50ZXJlc3RpbmcgdGhpbmdzOiBcIkVTUC1pbi1UQ1BcIiBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggZW5jYXBzdWxhdGVkIElQc2VjIHRyYWZmaWMgb3ZlciBUQ1AsIHdoaWNoIGJyaW5ncyB3aXRoIGl0IGEgd2hvbGUgc2xldyBvZiBjb25zaWRlcmF0aW9ucyBhcm91bmQgTVRVIG1hbmFnZW1lbnQsIHNlcXVlbmNpbmcsIGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdHJhbnNwb3J0IGFuZCBzZWN1cml0eSBsYXllcnMuIFRoZSBcInNlbmRza21zZ1wiIHBhcnQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UgYXJlIGluIHRoZSBwYXRoIG9mIHNlbmRpbmcgYSBzb2NrZXQgbWVzc2FnZSwgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGEgZGF0YSB0cmFuc2Zlci4gQW5kLCB0aGUgXCJsb2NrZWRcIiBwYXJ0IHN1Z2dlc3RzIHdlJ3JlIG9wZXJhdGluZyB3aXRoaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBwb3RlbnRpYWxseSBwcm90ZWN0ZWQgYnkgYSBtdXRleCBvciBzcGlubG9jay4gVGhpcyBpbXBsaWVzIGNvbmN1cnJlbmN5IGNvbnNpZGVyYXRpb25zIGFyZSBhdCBwbGF5LCBtYWtpbmcgdGhyZWFkIHNhZmV0eSBhIHByaW1lIGNvbmNlcm4uXG5cbk5vdywgbXkgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHNwZWNpZmljcyBvZiBlbmNhcHN1bGF0aW5nIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKSBwYWNrZXRzIGluc2lkZSBUQ1AuIEknbGwgbmVlZCB0byBsb29rIGZvciBob3cgdGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzb3VyY2UgZGF0YSwgaG93IGl0IGNhbGN1bGF0ZXMgYW5kIGFkZHMgdGhlIG5lY2Vzc2FyeSBFU1AgaGVhZGVycywgaG93IGl0IHNldHMgdXAgdGhlIFRDUCBwYXlsb2FkLCBhbmQgaG93IGl0IGZpbmFsbHkgdHJhbnNtaXRzIHRoZSBkYXRhIG92ZXIgdGhlIG5ldHdvcmsuIEknbGwgbmVlZCB0byBub3RlIGFueSBzcGVjaWZpYyBsb2dpYyBmb3IgaGFuZGxpbmcgZnJhZ21lbnRlZCBFU1AgZGF0YWdyYW1zIG9yIHJlYXNzZW1ibHkgaWYgbmVlZGVkLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIFhGUk0gKHRoZSBJUHNlYyBmcmFtZXdvcmspLCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbnRlcmZhY2Ugd2l0aCB0aGUgWEZSTSBzdWJzeXN0ZW0gdG8gaGFuZGxlIHRoZSBhY3R1YWwgRVNQIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgY29udGVudGlvbiBwb2ludHMgd2l0aGluIHRoZSBmdW5jdGlvbi4gQXJlIHRoZXJlIGFueSBvcGVyYXRpb25zIHRoYXQgY291bGQgYmxvY2sgb3IgaW50cm9kdWNlIGxhdGVuY3k/IEFuZCBob3cgaXMgdGhpcyBjcml0aWNhbCBzZWN0aW9uIG1hbmFnZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBJUHNlYyBvcGVyYXRpb25zP1xuXG5NeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbiB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZSBFU1AgYW5kIFRDUCBoZWFkZXIgbWFuaXB1bGF0aW9uIGhhcHBlbnMuIEnigJlsbCBrZWVwIGEgbG9va291dCBmb3IgYW55IGVycm9yIGhhbmRsaW5nLCBlc3BlY2lhbGx5IHdoYXQgaGFwcGVucyBpZiBlbmNyeXB0aW9uIGZhaWxzLCBvciBpZiB0aGUgdHJhbnNtaXNzaW9uIGl0c2VsZiBmYWlscy4gT3ZlcmFsbCwgSSB3YW50IHRvIG1hcCBvdXQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBFU1AtaW4tVENQIGNvbW11bmljYXRpb24sIGFuZCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCByZXF1aXJlIG9wdGltaXphdGlvbiBvciBmdXJ0aGVyIHNjcnV0aW55LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTU3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MjkuMDA4MzUzMjg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTkzNjcxMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9lc3BpbnRjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmM9MTg1PXN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZHNrYl9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZXNwaW50Y3BfbXNnICplbXNnLFxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yMDUtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyMDY6c3RhdGljIGludCBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzayxcXG5uZXQveGZybS9lc3BpbnRjcC5jLTIwNy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBlc3BpbnRjcF9tc2cgKmVtc2csIGludCBmbGFncylcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9MjM4PXN0YXRpYyBpbnQgZXNwaW50Y3BfcHVzaF9tc2dzKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0yNTMtXFx0ZWxzZVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MjU0OlxcdFxcdGVyciA9IGVzcGludGNwX3NlbmRza21zZ19sb2NrZWQoc2ssIGVtc2csIGZsYWdzKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTI1NS1cXHRpZiAoZXJyID09IC1FQUdBSU4pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MjkuMzA3NzI1NDQ3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMjc5MDQyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBJUHNlYyBIYW5kbGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIElQc2VjIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgdGhlIGtlcm5lbCB0cmFuc2xhdGVzIGEgUEZfS0VZIG1lc3NhZ2UgaW50byBhbiBYRlJNIHN0YXRlIGNoYW5nZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gc3RhcnQgd2l0aCBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgLiBMZXQncyBuYXZpZ2F0ZSB0byBgbmV0L2tleS9hZl9rZXkuY2AgYW5kIHRha2UgYSBsb29rLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHJhdyBQRl9LRVkgbWVzc2FnZXMgYXJlIHVucGFja2VkIGFuZCB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc2VjdXJpdHkgYXNzb2NpYXRpb25zIGFuZCBwb2xpY2llcyB3aXRoaW4gdGhlIGtlcm5lbCdzIFhGUk0gKGVYdGVybmFsIEZpcmV3YWxsIGFuZCBSb3V0aW5nIE1lY2hhbmlzbSkgZnJhbWV3b3JrLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIGtleSBleGNoYW5nZXMgYXJlIGludGVycHJldGVkIGFuZCBob3cgdGhlIGRhdGEgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGJ1aWxkIChvciBtb2RpZnkpIGEgc3RhdGUgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSdtIGFsc28gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGlzIGNvZGUgcGF0aCAtIHRoZXNlIGFyZSBvZnRlbiBrZXkgdG8gdW5kZXJzdGFuZGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6MzguMzM1NjMyNzQ2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzIwMzgxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGZrZXlfbXNnMnhmcm1fc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2tleS9hZl9rZXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQva2V5L2FmX2tleS5jPTEwNjk9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqcGZrZXlfeGZybV9zdGF0ZTJtc2dfZXhwaXJlKGNvbnN0IHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2tleS9hZl9rZXkuYy0xMDc0LVxcbm5ldC9rZXkvYWZfa2V5LmM6MTA3NTpzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKiBwZmtleV9tc2cyeGZybV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2tleS9hZl9rZXkuYy0xMDc2LVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzYWRiX21zZyAqaGRyLFxcbi0tXFxubmV0L2tleS9hZl9rZXkuYz0xNTE0PXN0YXRpYyBpbnQgcGZrZXlfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNhZGJfbXNnICpoZHIsIHZvaWQgKiBjb25zdCAqZXh0X2hkcnMpXFxuLS1cXG5uZXQva2V5L2FmX2tleS5jLTE1MjAtXFxubmV0L2tleS9hZl9rZXkuYzoxNTIxOlxcdHggPSBwZmtleV9tc2cyeGZybV9zdGF0ZShuZXQsIGhkciwgZXh0X2hkcnMpO1xcbm5ldC9rZXkvYWZfa2V5LmMtMTUyMi1cXHRpZiAoSVNfRVJSKHgpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxODozOC43MDc2NzY2MDdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI2ODg4MDAxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8geGZybV9zZXRfZGVmYXVsdCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGB4ZnJtX3NldF9kZWZhdWx0YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG5hdmlnYXRlIHN0cmFpZ2h0IHRvIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkZWZhdWx0cyBhcmUgYmVpbmcgaGFuZGxlZCBmcm9tIHRoZSB1c2VyIHNwYWNlIHBlcnNwZWN0aXZlLCB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3QgYW5kIHRoYXQgdGhlIGludGVuZGVkIGZsb3cgaXMgYXMgZXhwZWN0ZWQuIFRoaXMgd2lsbCBnaXZlIGEgZ29vZCBncm91bmRpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbnRlbmRlZCBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGV4cGVjdGVkIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxODo0NS45NzY1NjA2ODJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjAzNDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2V0X2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MjUwMT1zdGF0aWMgYm9vbCB4ZnJtX3VzZXJwb2xpY3lfaXNfdmFsaWQoX191OCBwb2xpY3kpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTA2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI1MDc6c3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI1MDgtXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzM4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDE4LVxcdFtYRlJNX01TR19HRVRTUERJTkZPICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X3NwZGluZm8gICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0MTk6XFx0W1hGUk1fTVNHX1NFVERFRkFVTFQgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9zZXRfZGVmYXVsdCAgIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQyMC1cXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6NDYuMDU5MTcwNzg5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzI4MjcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIFN1YnN5c3RlbSdzIERlZmF1bHQgUG9saWN5IFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgdGhlIGRlZmF1bHQgcG9saWN5IHdpdGhpbiB0aGUgWEZSTSAoSVBzZWMpIGZyYW1ld29yay4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZXRyaWV2aW5nIHRoaXMgZGVmYXVsdCBwb2xpY3kuIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byBgbmV0L3hmcm0veGZybV91c2VyLmNgLCBhcyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIHJlc2lkZSBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRgIHNvdW5kcyBsaWtlIGEgcHJvbWlzaW5nIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgZGVmYXVsdCBwb2xpY3kgYmVoYXZpb3IuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODYwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6NTEuMDMyMDAwNzUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTgyNTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2dldF9kZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTI1MDc9c3RhdGljIGludCB4ZnJtX3NldF9kZWZhdWx0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjUyNy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNTI4OnN0YXRpYyBpbnQgeGZybV9nZXRfZGVmYXVsdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yNTI5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzODM9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzQxOS1cXHRbWEZSTV9NU0dfU0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX3NldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNDIwOlxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTg6NTEuMTIxODMzN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjcyMzk2Njk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIFVzZXIgUmVjZWl2ZSBNZXNzYWdlIEhhbmRsaW5nKipcblxuT2theSwgc28gd2UgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB1c2VyLXNwYWNlIFhGUk0gbWVzc2FnZXMgYXJlIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgeGZybV91c2VyX3Jjdl9tc2dgIHdpdGhpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBYRlJNIHRvb2xzIGFuZCB0aGUga2VybmVsJ3MgWEZSTSBzdWJzeXN0ZW0gZm9yIGluYm91bmQgZGF0YS4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzb2NrZXQgcmVhZCBhbmQgdW5wYWNrcyB0aGUgdXNlci1wcm92aWRlZCBkYXRhLiBJIGV4cGVjdCBpdCdzIHRoZSBnYXRld2F5IGZvciB2YXJpb3VzIFhGUk0gb3BlcmF0aW9ucywgbGlrZSBzZXR0aW5nIHVwIHBvbGljaWVzLCBzdGF0ZXMsIGFuZCBtYXliZSBldmVuIGtleSBtYW5hZ2VtZW50LiBJJ20gYW50aWNpcGF0aW5nIHRvIHNlZSBhcmd1bWVudCB2YWxpZGF0aW9uLCBzZWN1cml0eSBjaGVja3MsIGFuZCwgb2YgY291cnNlLCB0aGUgYWN0dWFsIGRpc3BhdGNoIHRvIHRoZSByZWxldmFudCBoYW5kbGVycyBiYXNlZCBvbiB0aGUgbWVzc2FnZSB0eXBlIOKAkyB3aGV0aGVyIGl0J3MgYSBwb2xpY3kgY3JlYXRpb24sIHN0YXRlIGFkZGl0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSByZWFsbHkgZGVhbGluZyB3aXRoIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM3NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE4OjU4LjM5NDIzMzIxNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4OTI4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV91c2VyX3Jjdl9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzQyMz1zdGF0aWMgaW50IHhmcm1fcmVqZWN0X3VudXNlZF9hdHRyKGludCB0eXBlLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDU0LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM0NTU6c3RhdGljIGludCB4ZnJtX3VzZXJfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDU2LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzU0Mj1zdGF0aWMgdm9pZCB4ZnJtX25ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ2LVxcdG11dGV4X2xvY2soXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX2NmZ19tdXRleCk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzU0NzpcXHRuZXRsaW5rX3Jjdl9za2Ioc2tiLCBcXHUwMDI2eGZybV91c2VyX3Jjdl9tc2cpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDgtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9jZmdfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxODo1OC40NzYxMzIxMDNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxMzUwNjIyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gUG9saWN5IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB1c2VyLXNwYWNlIHBvbGljaWVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgdGhlIGB4ZnJtX3VzZXJfcG9saWN5YCBmdW5jdGlvbi4gSXQncyBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBoZWFkLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdXNlci1zdXBwbGllZCBwb2xpY3kgZW50cmllcyBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIFhGUk0gc3RhdGUgbWFuYWdlbWVudC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHk6IEhvdyBhcmUgdGhlc2UgcG9saWNpZXMgdmFsaWRhdGVkPyBIb3cgYXJlIHRoZXkgc3RvcmVkPyBIb3cgZG9lcyB0aGUgc3lzdGVtIHJlc29sdmUgdGhlbSB0byBhcHBseSBzZWN1cml0eSBhc3NvY2lhdGlvbnM/IFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiByZWdhcmRpbmcgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBtYWxpY2lvdXMgdXNlciBpbnB1dD8gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBwb2xpY3kgaW1wbGVtZW50YXRpb24gd2lsbCBiZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOToxMC42MTExOTc0OTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzY1NjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3VzZXJfcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9Mjk2Mj1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX3VucmVnaXN0ZXJfdHJhbnNsYXRvcik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjk2NC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6Mjk2NTppbnQgeGZybV91c2VyX3BvbGljeShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTY2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDIxLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MzAyMjpFWFBPUlRfU1lNQk9MKHhmcm1fdXNlcl9wb2xpY3kpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMDIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOToxMC45NzQ4NjI3ODRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkwNDk1NjQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgSVB2NCBYRlJNIGlucHV0IHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhbnNwb3J0IGxheWVyIHByb2Nlc3Npbmcgd3JhcHMgdXAgaW4gdGhlIGNvbnRleHQgb2YgSVBzZWMuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBmdW5jdGlvbiBgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaGAgbG9jYXRlZCBpbiBgbmV0L2lwdjQveGZybTRfaW5wdXQuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIExldCdzIHRyYWNlIHRocm91Z2ggdGhlIGxvZ2ljIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBmb2N1c2luZyBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFhGUk0gZnJhbWV3b3JrIGFuZCB0aGUgZXZlbnR1YWwgZGVsaXZlcnkgb3IgZHJvcCBvZiB0aGUgcGFja2V0LiBHb3R0YSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBwYXRocywgb2YgY291cnNlLiBJJ20gbG9va2luZyBmb3IgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGUgdHJhbnNwb3J0IGhlYWRlcnMgZ2V0IGhhbmRsZWQgYWZ0ZXIgSVBzZWMgcHJvY2Vzc2luZyBhbmQgd2hhdCB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIG91dGNvbWVzIGFyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOToxOS44Nzk4MjI2NzdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTk0MjE0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfdHJhbnNwb3J0X2ZpbmlzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC94ZnJtNF9pbnB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3hmcm00X2lucHV0LmM9Mjk9c3RhdGljIGlubGluZSBpbnQgeGZybTRfcmN2X2VuY2FwX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3hmcm00X2lucHV0LmMtNDgtXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYzo0OTppbnQgeGZybTRfdHJhbnNwb3J0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXN5bmMpXFxubmV0L2lwdjQveGZybTRfaW5wdXQuYy01MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjIxLjQ3OTI1MjA4NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDAyOTA1Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IFRyYW5zZm9ybWF0aW9uIEVuZ2luZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGUgaXNzdWUgaXMgcHJvYmFibHkgaW4gdGhlIGZpbmFsaXphdGlvbiBvZiB0aGUgSVB2NiB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGB4ZnJtNl90cmFuc3BvcnRfZmluaXNoYCB3aXRoaW4gYG5ldC9pcHY2L3hmcm02X2lucHV0LmNgLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGtleSBwaWVjZSBpbiBjbGVhbmluZyB1cCBhbmQgZmluYWxpemluZyBhIHByb2Nlc3NlZCBJUHY2IHBhY2tldCwgc3BlY2lmaWNhbGx5IGFmdGVyIGl0J3MgYmVlbiB0aHJvdWdoIHZhcmlvdXMgWEZSTSB0cmFuc2Zvcm1zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZGF0YSBwYXRoIOKAkyB3aGF0IGl0IGRvZXMgd2l0aCB0aGUgc2tiLCBhbnkgYXNzb2NpYXRlZCBzdGF0ZXMsIGFuZCBob3cgaXQgaGFuZHMgdGhpbmdzIG9mZiB0byB0aGUgbmV4dCBsYXllciBvciB0aGUgdXNlciBzcGFjZS4gSSdsbCBiZSBsb29raW5nIGNhcmVmdWxseSBhdCB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSwgdG9vLiBDb3VsZCBpdCBiZSBhIHJlc291cmNlIGNsZWFudXAgcHJvYmxlbSBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBob3cgdGhlIHNrYiBpcyBiZWluZyBoYW5kbGVkIHBvc3QtdHJhbnNmb3JtPyBUaGlzIHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTk6MjcuODgyMTU5OTcyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTIwMjcwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTZfdHJhbnNwb3J0X2ZpbmlzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni94ZnJtNl9pbnB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3hmcm02X2lucHV0LmM9MzA9RVhQT1JUX1NZTUJPTCh4ZnJtNl9yY3Zfc3BpKTtcXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTMxLVxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6MzI6c3RhdGljIGludCB4ZnJtNl90cmFuc3BvcnRfZmluaXNoMihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTMzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jLTQyLVxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6NDM6aW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKVxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtNDQte1xcbi0tXFxubmV0L2lwdjYveGZybTZfaW5wdXQuYy03Mi1cXHRcXHRkZXZfbmV0KGRldiksIE5VTEwsIHNrYiwgZGV2LCBOVUxMLFxcbm5ldC9pcHY2L3hmcm02X2lucHV0LmM6NzM6XFx0XFx0eGZybTZfdHJhbnNwb3J0X2ZpbmlzaDIpO1xcbm5ldC9pcHY2L3hmcm02X2lucHV0LmMtNzQtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjI4LjI3NDIxOTIxMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcwOTY5Mjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gSW5wdXQgUGF0aCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBYRlJNIGlzc3VlLiBUaGUgbW9zdCBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIHRyb3VibGVzaG9vdGluZyB0aGlzIHBhcnRpY3VsYXIgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGUgYHhmcm1faW5wdXRgIGZ1bmN0aW9uLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBuZXQveGZybS94ZnJtX2lucHV0LmNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBwcm9jZXNzZXMgaW5ib3VuZCBYRlJNIHRyYWZmaWMsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGxvZ2ljIHdpdGhpbiBgeGZybV9pbnB1dGAgaXMgY3J1Y2lhbC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdHJhY2UgaG93IHRoZSBwYWNrZXRzIGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM4MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjMzLjE0NTE5MzEyOFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY1Mzk0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9pbnB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pbnB1dC5jLTItLypcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6MzogKiB4ZnJtX2lucHV0LmNcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNC0gKlxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jPTM0PXN0cnVjdCB4ZnJtX3RyYW5zX2NiIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00Ni1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDc6c3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX2lucHV0X2FmaW5mb19sb2NrKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDg6c3RhdGljIHN0cnVjdCB4ZnJtX2lucHV0X2FmaW5mbyBjb25zdCBfX3JjdSAqeGZybV9pbnB1dF9hZmluZm9bMl1bQUZfSU5FVDYgKyAxXTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNDktXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM9NTM9c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB4ZnJtX3RyYW5zX3Rhc2tsZXQsIHhmcm1fdHJhbnNfdGFza2xldCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU0LVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo1NTppbnQgeGZybV9pbnB1dF9yZWdpc3Rlcl9hZmluZm8oY29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICphZmluZm8pXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTU2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy02MS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NjI6XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4ZnJtX2lucHV0X2FmaW5mb19sb2NrKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NjM6XFx0aWYgKHVubGlrZWx5KHhmcm1faW5wdXRfYWZpbmZvW2FmaW5mby1cXHUwMDNlaXNfaXBpcF1bYWZpbmZvLVxcdTAwM2VmYW1pbHldKSlcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjQtXFx0XFx0ZXJyID0gLUVFWElTVDtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjUtXFx0ZWxzZVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo2NjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVxcdTAwM2Vpc19pcGlwXVthZmluZm8tXFx1MDAzZWZhbWlseV0sIGFmaW5mbyk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjY3OlxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX2lucHV0X2FmaW5mb19sb2NrKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjgtXFx0cmV0dXJuIGVycjtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNjktfVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo3MDpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfcmVnaXN0ZXJfYWZpbmZvKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzEtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjcyOmludCB4ZnJtX2lucHV0X3VucmVnaXN0ZXJfYWZpbmZvKGNvbnN0IHN0cnVjdCB4ZnJtX2lucHV0X2FmaW5mbyAqYWZpbmZvKVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03My17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzUtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc2OlxcdHNwaW5fbG9ja19iaChcXHUwMDI2eGZybV9pbnB1dF9hZmluZm9fbG9jayk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc3OlxcdGlmIChsaWtlbHkoeGZybV9pbnB1dF9hZmluZm9bYWZpbmZvLVxcdTAwM2Vpc19pcGlwXVthZmluZm8tXFx1MDAzZWZhbWlseV0pKSB7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4OlxcdFxcdGNvbnN0IHN0cnVjdCB4ZnJtX2lucHV0X2FmaW5mbyAqY3VyO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03OS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODA6XFx0XFx0Y3VyID0gcmN1X2FjY2Vzc19wb2ludGVyKHhmcm1faW5wdXRfYWZpbmZvW2FmaW5mby1cXHUwMDNlaXNfaXBpcF1bYWZpbmZvLVxcdTAwM2VmYW1pbHldKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtODEtXFx0XFx0aWYgKHVubGlrZWx5KGN1ciAhPSBhZmluZm8pKVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTgzLVxcdFxcdGVsc2VcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODQ6XFx0XFx0XFx0UkNVX0lOSVRfUE9JTlRFUih4ZnJtX2lucHV0X2FmaW5mb1thZmluZm8tXFx1MDAzZWlzX2lwaXBdW2FmaW5mby1cXHUwMDNlZmFtaWx5XSwgTlVMTCk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg1LVxcdH1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODY6XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1faW5wdXRfYWZpbmZvX2xvY2spO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04Ny1cXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04OS19XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjkwOkVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF91bnJlZ2lzdGVyX2FmaW5mbyk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTkxLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzo5MjpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICp4ZnJtX2lucHV0X2dldF9hZmluZm8odTggZmFtaWx5LCBib29sIGlzX2lwaXApXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTkzLXtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6OTQ6XFx0Y29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICphZmluZm87XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTk1LVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTk5LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6MTAwOlxcdGFmaW5mbyA9IHJjdV9kZXJlZmVyZW5jZSh4ZnJtX2lucHV0X2FmaW5mb1tpc19pcGlwXVtmYW1pbHldKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtMTAxLVxcdGlmICh1bmxpa2VseSghYWZpbmZvKSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYz0xMDY9c3RhdGljIGludCB4ZnJtX3Jjdl9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZmFtaWx5LCB1OCBwcm90b2NvbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMDktXFx0Ym9vbCBpc19pcGlwID0gKHByb3RvY29sID09IElQUFJPVE9fSVBJUCB8fCBwcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYzoxMTA6XFx0Y29uc3Qgc3RydWN0IHhmcm1faW5wdXRfYWZpbmZvICphZmluZm87XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTExMS1cXHRpbnQgcmV0O1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy0xMTItXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjExMzpcXHRhZmluZm8gPSB4ZnJtX2lucHV0X2dldF9hZmluZm8oZmFtaWx5LCBpc19pcGlwKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtMTE0LVxcdGlmICghYWZpbmZvKVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jPTQzNT1zdGF0aWMgaW50IHhmcm1faW5uZXJfbW9kZV9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy00NjUtICovXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjQ2NjppbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTQ2Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNDg2LVxcdFxcdFxcdFxcdCAgICAgIGVuY2FwX3R5cGUgPT0gVURQX0VOQ0FQX0VTUElOVURQKSkpIHtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NDg3OlxcdFxcdHggPSB4ZnJtX2lucHV0X3N0YXRlKHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTQ4OC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01OTItXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjU5MzpcXHRcXHR4ID0geGZybV9pbnB1dF9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBkYWRkciwgc3BpLCBuZXh0aGRyLCBmYW1pbHkpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy01OTQtXFx0XFx0aWYgKHggPT0gTlVMTCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc4Mi19XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4MzpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXQpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03ODQtXFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4NTppbnQgeGZybV9pbnB1dF9yZXN1bWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpXFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc4Ni17XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc4NzpcXHRyZXR1cm4geGZybV9pbnB1dChza2IsIG5leHRoZHIsIDAsIC0xKTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzg4LX1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6Nzg5OkVYUE9SVF9TWU1CT0woeGZybV9pbnB1dF9yZXN1bWUpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03OTAtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM9ODQ2PUVYUE9SVF9TWU1CT0woeGZybV90cmFuc19xdWV1ZSk7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTg0Ny1cXG5uZXQveGZybS94ZnJtX2lucHV0LmM6ODQ4OnZvaWQgX19pbml0IHhmcm1faW5wdXRfaW5pdCh2b2lkKVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy04NDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOTozMy4yNDE3Mzg3NDZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzMDUxMTU0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBQb2ludHMgZm9yIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYW5kIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBhcmVhcyBpbiB0aGUgWEZSTSBjb2RlIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkLiBgeGZybV9pbnB1dGAgaXMgY2FsbGVkIGJ5IGB4ZnJtNF9yY3ZgIGFuZCBgeGZybTZfcmN2YCwgYW5kIGl0J3MgZXhwb3J0ZWQsIHNvIHRoYXQncyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgaW50ZXJlc3QuIEknbGwgaW5jbHVkZSBpdCBpbiBGb2N1c1N5bWJvbHMsIHRob3VnaCBJIHdvbmRlciBpZiBpdCdzIHRvbyBicm9hZDsgdGhlIHBhdGNoIGRvZXMgbW9kaWZ5IGl0IGRpcmVjdGx5LCB3aGljaCBtYWtlcyBpdCBhIHN0cm9uZyBjb250ZW5kZXIuXG5cbmB4ZnJtX3VzZXJfcmN2X21zZ2AgaXMgZGVmaW5pdGVseSBjcnVjaWFsOyBpdCdzIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50LCBzbyBhbnkgY2hhbmdlcyB0aGVyZSB3b3VsZCBiZSBzaWduaWZpY2FudC4gSSdtIGFkZGluZyB0aGF0IHRvIHRoZSBsaXN0LiBJJ20gYWxzbyBwdXR0aW5nIGB4ZnJtX3NldF9kZWZhdWx0YCBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRgIG9uIHRoZSBsaXN0OyB0aGV5J3JlIGxpa2VseSB0b3VjaGVkLiBUaGVuIHRoZXJlJ3MgYHhmcm1fdXNlcl9wb2xpY3lgLCB0aGUgc29ja2V0IG9wdGlvbiBoYW5kbGVyLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZi4gSSdsbCBhZGQgYHBma2V5X21zZzJ4ZnJtX3N0YXRlYCwgYXMgd2VsbC5cblxuSSdtIGluY2x1ZGluZyBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAuIEZpbmFsbHksIEknbSBub3RpbmcgYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgIGFuZCBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaGAsIGFzIHRoZXkgbGlrZWx5IGFyZSBpbnZvbHZlZC5cblxuUmlnaHQsIHNvIHRvIGdldCBhIGdvb2Qgc2Vuc2Ugb2YgYHhmcm1fdXNlcl9wb2xpY3lgLCBJJ2xsIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBmb3Igc3RhcnRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjk4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjQzLjU0Njg1ODIwM1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg0NjQ1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdXNlcl9wb2xpY3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0yOTYyPUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fdW5yZWdpc3Rlcl90cmFuc2xhdG9yKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yOTY0LVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoyOTY1OmludCB4ZnJtX3VzZXJfcG9saWN5KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI5NjYte1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjEtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMDIyOkVYUE9SVF9TWU1CT0woeGZybV91c2VyX3BvbGljeSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMwMjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjE5OjQzLjkzMTUxMDA5M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDUwOTI5MDI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBJbnB1dCBTdGF0ZSBMb29rdXAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cGAgZnVuY3Rpb24gd2l0aGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIG9yIGF0IGxlYXN0LCAqc2hvdWxkKiBoYXBwZW4sIGluIHRlcm1zIG9mIHJlc29sdmluZyBpbmJvdW5kIHNlY3VyaXR5IHBvbGljeSBsb29rdXBzLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBhbiBpc3N1ZSB3aXRoIGhvdyB0cmFmZmljIGlzIGJlaW5nIHByb2Nlc3NlZCBhbmQgSSB3YW50IHRvIHZlcmlmeSB0aGUgbG9naWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlkZW50aWZpZXMgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IGFzc29jaWF0aW9uIGZvciBpbmNvbWluZyBwYWNrZXRzLiBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBoYW5kbGluZyB0aGUgbWF0Y2hpbmcgb2YgaW5jb21pbmcgcGFja2V0cyB0byBleGlzdGluZyBYRlJNIHN0YXRlcy4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIGtleSBkZXJpdmF0aW9uIHByb2Nlc3MuIFRoZSBsb29rdXAgbGlrZWx5IGNvbnNpZGVycyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsIHByb3RvY29sLCBTUEksIGFuZCBvdGhlciByZWxldmFudCBwYWNrZXQgaGVhZGVycy4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgaG93IGl0IGhhbmRsZXMgd2lsZGNhcmRpbmcsIGlmIGFueS4gSSdsbCBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgZ2V0IHV0aWxpemVkLCBwYXJ0aWN1bGFybHkgdGhvc2UgaW52b2x2aW5nIHRoZSBYRlJNIHN0YXRlIGFuZCBpdHMgYXNzb2NpYXRlZCBrZXlzLiBUaGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmFyaW91cyBoYXNoIHRhYmxlcyBvciBvdGhlciBsb29rdXAgbWVjaGFuaXNtcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBhbmQgSSBuZWVkIHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uLCBsb2NraW5nLCBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBsb29rdXAgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIGJvdHRsZW5lY2tzIGluIHRoZSBvdmVyYWxsIGZsb3cuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGNvcnJlY3RseSBoYW5kbGVzIGJvdGggSVB2NCBhbmQgSVB2NiB0cmFmZmljLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcG9saWN5IG1pc2NvbmZpZ3VyYXRpb24gYXMgdGhhdCB3b3VsZCBsaWtlbHkgaGF2ZSBhIGhhbmQgaW4gdGhpcyBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0ODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoxOTo1NC40NDA4MDQ0NzVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDY5Njg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTExNzU9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAwLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMjAxOnN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjAyLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMjUyLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTI1MzpFWFBPUlRfU1lNQk9MKHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTI1NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MTk6NTQuNTQ1NTA4NjcyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjk2MzE5NzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBQb2xpY3kgTWF0Y2hpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIGlmIGEgcGFja2V0IG1hdGNoZXMgYSBwYXJ0aWN1bGFyIElQc2VjIHBvbGljeS4gVGhlIGZpcnN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIGlzIGxpa2VseSB0aGUgY29yZSBtYXRjaGluZyBmdW5jdGlvbi4gTGV0J3Mgc2VlLi4uIEFoLCB5ZXMsIGB4ZnJtX3NlbGVjdG9yX21hdGNoYCBpbiBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2Agc291bmRzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdCDigJMgXCJzZWxlY3RvciBtYXRjaFwiIOKAkyBpdCBzaG91bGQgYmUgdGhlIGNvcmUgb2YgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUgc2VsZWN0b3JzIGFyZSBkZWZpbmVkIGFuZCBob3cgcGFja2V0cyBhcmUgY29tcGFyZWQgYWdhaW5zdCB0aGVtLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSBhZGRyZXNzIG1hdGNoaW5nLCBwcm90b2NvbCBjaGVja3MsIGFuZCBwb3J0IGNvbXBhcmlzb25zIGluIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgYmUuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwOTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMDowNi4yNDE4MzA3MDRaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDAzNzc4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX3NlbGVjdG9yX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMzA9X194ZnJtNl9zZWxlY3Rvcl9tYXRjaChjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yNDEtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyNDI6Ym9vbCB4ZnJtX3NlbGVjdG9yX21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yNDMtXFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IGZhbWlseSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTk2ND1zdGF0aWMgaW50IHhmcm1fcG9saWN5X21hdGNoKGNvbnN0IHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xOTc3LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTk3ODpcXHRtYXRjaCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBmbCwgZmFtaWx5KTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5NzktXFx0aWYgKG1hdGNoKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0yMjM0PXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fc2tfcG9saWN5X2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGludCBkaXIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIyNTEtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMjUyOlxcdFxcdG1hdGNoID0geGZybV9zZWxlY3Rvcl9tYXRjaChcXHUwMDI2cG9sLVxcdTAwM2VzZWxlY3RvciwgZmwsIGZhbWlseSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMjUzLVxcdFxcdGlmIChtYXRjaCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjAwPXN0YXRpYyBib29sIHhmcm1fc2VsZWN0b3JfaW5uZXJfaWNtcF9tYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM2MTEtXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozNjEyOlxcdFxcdHJldCA9IHhmcm1fc2VsZWN0b3JfbWF0Y2goc2VsLCBcXHUwMDI2ZmwxLCBmYW1pbHkpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzYxMy1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM2NzA9aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNzE3LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzcxODpcXHRcXHRcXHRpZiAoIXhmcm1fc2VsZWN0b3JfbWF0Y2goXFx1MDAyNngtXFx1MDAzZXNlbCwgXFx1MDAyNmZsLCBmYW1pbHkpKSB7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zNzE5LVxcdFxcdFxcdFxcdHJldCA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjIwOjA2LjQzNTg3MzU5OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk5NjA4NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gUG9saWN5IENoZWNrKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgWEZSTSBwb2xpY3kgbWVjaGFuaXNtIGlzIGFjdHVhbGx5IGVuZm9yY2VkLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBgX194ZnJtX3BvbGljeV9jaGVja2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIGNydWNpYWwgcG9saWN5IHZhbGlkYXRpb24gbG9naWMsIGFuZCBJIGtub3cgaXQncyBkZWZpbmVkIGluIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYC4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSBwYWNrZXQncyBhdHRyaWJ1dGVzIGFyZSBldmFsdWF0ZWQgYWdhaW5zdCB0aGUgY29uZmlndXJlZCBzZWN1cml0eSBwb2xpY2llcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhcmFtZXRlcnMgaXQgdXNlcywgaG93IGl0IGRldGVybWluZXMgdGhlIG1hdGNoaW5nIHBvbGljeSwgd2hhdCBpdCBkb2VzIHdpdGggdGhlIG1hdGNoZWQgcG9saWN5LCBhbmQgd2hhdCBhcmUgdGhlIHBvc3NpYmxlIHJldHVybiBjb2RlcyBvciBzdGF0dXMgdmFsdWVzIHRoYXQgY291bGQgYmUgcmV0dXJuZWQgYmFzZWQgb24gdGhlIHBvbGljeSBldmFsdWF0aW9uIHJlc3VsdC4gRnJvbSB0aGVyZSBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgY2FsbHMgdG8gcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMDoxOC40MzE5NjI5NzJaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjMxMjEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hmcm1fcG9saWN5X2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0zNjQxPWRzdF9lbnRyeSAqeGZybV9vdXRfZndkX2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzY2OS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjM2NzA6aW50IF9feGZybV9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzY3MS1cXHRcXHRcXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4MjYtXFx0XFx0XFx0LyogVGhpcyBwb2xpY3kgdGVtcGxhdGUgd2FzIGFscmVhZHkgY2hlY2tlZCBieSBIV1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MzgyNzpcXHRcXHRcXHQgKiBhbmQgc2VjcGF0aCB3YXMgcmVtb3ZlZCBpbiBfX3hmcm1fcG9saWN5X2NoZWNrMi5cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4MjgtXFx0XFx0XFx0ICovXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTM4NjktfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6Mzg3MDpFWFBPUlRfU1lNQk9MKF9feGZybV9wb2xpY3lfY2hlY2spO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzg3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjA6MTguNzc4Mjg1NjM0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjY4NjUwNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCB1c2VyOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX2xvb2t1cF93aXRoX2lmaWRgKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGUgWEZSTSBzdWJzeXN0ZW0gaGFuZGxlcyBwb2xpY3kgbG9va3Vwcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBUaGF0IGZ1bmN0aW9uJ3MgbmFtZSBzdWdnZXN0cyBpdCBwbGF5cyBhIGtleSByb2xlIGluIGZpbmRpbmcgdGhlIHJpZ2h0IHNlY3VyaXR5IHBvbGljeSwgYW5kIHRoZSBcImlmaWRcIiBwYXJ0IGxpa2VseSBoYXMgdG8gZG8gd2l0aCBpbnRlcmZhY2UgaWRlbnRpZmljYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGluIGEgY29tcGxleCBuZXR3b3JraW5nIGVudmlyb25tZW50LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBhbiBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgcm91dGluZyB0YWJsZSBpbmZvcm1hdGlvbiBhbmQgaW50ZXJmYWNlLXNwZWNpZmljIGF0dHJpYnV0ZXMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hhdCBmYWN0b3JzIGl0IHRha2VzIGludG8gY29uc2lkZXJhdGlvbiB3aGVuIG1ha2luZyB0aGVzZSBwb2xpY3kgbG9va3Vwcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjA6MjkuMDQ2OTM5MjAyWiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQwMDg4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9sb29rdXBfd2l0aF9pZmlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0zMTQxPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICptYWtlX2JsYWNraG9sZShzdHJ1Y3QgbmV0ICpuZXQsIHUxNiBmYW1pbHksXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMxNjUtICovXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzozMTY2OnN0cnVjdCBkc3RfZW50cnkgKnhmcm1fbG9va3VwX3dpdGhfaWZpZChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMTY3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzE4LX1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjMzMTk6RVhQT1JUX1NZTUJPTCh4ZnJtX2xvb2t1cF93aXRoX2lmaWQpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMzMyMC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MzMyNj1zdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0zMzI5LXtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjMzMzA6XFx0cmV0dXJuIHhmcm1fbG9va3VwX3dpdGhfaWZpZChuZXQsIGRzdF9vcmlnLCBmbCwgc2ssIGZsYWdzLCAwKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTMzMzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMDoyOS4zMDA5NTU0OTVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2NjYwNTkwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIFBvbGljeSBEZXRhaWxzKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGFsbCB3b3Jrcywgc28gbGV0J3Mgc3RhcnQgd2l0aCBgeGZybV9zcGRfZ2V0aW5mb2AuIFRoYXQncyB0aGUgZnVuY3Rpb24gSSBuZWVkIHRvIGxvb2sgYXQgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLiBJIGtub3cgaXQncyBhIGNyaXRpY2FsIHBpZWNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGtpbmQgb2YgaW5mb3JtYXRpb24gdGhhdCBmdW5jdGlvbiBwcm92aWRlcyBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gcG9saWN5IGxvb2t1cHMsIGVzcGVjaWFsbHkgYXMgaXQgcGVydGFpbnMgdG8gdGhlIFNlY3VyaXR5IFBvbGljeSBEYXRhYmFzZSAoU1BEKS4gTGV0J3Mgc2VlIGhvdyBpdCBoYW5kbGVzIGluZm9ybWF0aW9uIGV4dHJhY3Rpb24gZm9yIHBvbGljeSBkZXRhaWxzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBkZWFscyB3aXRoIHRoZSBkaWZmZXJlbnQgcHJvdG9jb2wgdHlwZXMgYW5kIHNlY3VyaXR5IGFzc29jaWF0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGF0IGZ1bmN0aW9uIGlzIGtleSB0byBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGlzIHdvcmtpbmcgYXMgaXQgc2hvdWxkIGFuZCBoZWxwaW5nIHBpbnBvaW50IGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTUwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjA6NDQuOTY3MDE3NzI2WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc1NzIxMjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3BkX2dldGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3BvbGljeS5jPTcwND1zdGF0aWMgaW5saW5lIGludCB4ZnJtX2J5aWR4X3Nob3VsZF9yZXNpemUoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG90YWwpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTcxNC1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjcxNTp2b2lkIHhmcm1fc3BkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc3BkaW5mbyAqc2kpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MTYte1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MjUtfVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NzI2OkVYUE9SVF9TWU1CT0woeGZybV9zcGRfZ2V0aW5mbyk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy03MjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIyVDA4OjIwOjQ2LjQ0Mjc3ODg0OFoiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTY1NTg4MTYxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFhGUk0gUG9saWN5IExpbmthZ2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFhGUk0gcG9saWNpZXMgYXJlIGxpbmtlZCwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCB0aGUgYF9feGZybV9wb2xpY3lfbGlua2AgZnVuY3Rpb24uIEl0J3MgaW4gYG5ldC94ZnJtL3hmcm1fcG9saWN5LmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZS4gSSBleHBlY3QgaXQnbGwgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gdGhlIGNvcmUgbG9naWMgYmVoaW5kIGxpbmtpbmcgdGhlc2UgcG9saWNpZXMg4oCTIHByb2JhYmx5IGRlYWxpbmcgd2l0aCBob3cgdGhleSdyZSBpbnNlcnRlZCBpbnRvIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzLCBob3cgcmVmZXJlbmNlcyBhcmUgbWFuYWdlZCwgYW5kIGFsbCB0aGUgY3JpdGljYWwgY29uY3VycmVuY3kgYXNwZWN0cy4gVGhpcyBmdW5jdGlvbiBuYW1lIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIGNydXggb2YgdGhlIHBvbGljeSBhc3NvY2lhdGlvbiBwcm9jZXNzLCBzbyB0aGlzIGlzIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIHRoZSBkZWVwLWRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjAyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjE6MDguMDk4NjYyOTI1WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTE4MzgyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194ZnJtX3BvbGljeV9saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODg9c3RhdGljIHZvaWQgeGZybV9wb2xpY3lfcXVldWVfcHJvY2VzcyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODktXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxOTA6c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5MS1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpfX3hmcm1fcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTU3Mj1pbnQgeGZybV9wb2xpY3lfaW5zZXJ0KGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LCBpbnQgZXhjbClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTU5Mi1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE1OTM6XFx0X194ZnJtX3BvbGljeV9saW5rKHBvbGljeSwgZGlyKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE1OTQtXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIyOTE9c3RhdGljIHUzMiB4ZnJtX2dlbl9wb3Moc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzEwLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjMxMTpzdGF0aWMgdm9pZCBfX3hmcm1fcG9saWN5X2xpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzEyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjM0OD1zdGF0aWMgdm9pZCB4ZnJtX3NrX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM0OS17XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoyMzUwOlxcdF9feGZybV9wb2xpY3lfbGluayhwb2wsIFhGUk1fUE9MSUNZX01BWCArIGRpcik7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzUxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjE6MDguNDkwNTA1NzU1WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzU3NTk5OTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBQb2xpY3kgVW5saW5rIEZ1bmN0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYF9feGZybV9wb2xpY3lfdW5saW5rYCBmdW5jdGlvbi4gTGV0J3MgaGVhZCBvdmVyIHRvIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCBpbW1lZGlhdGVseS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCB1bmxpbmtpbmcgcG9saWNpZXMgaW4gdGhlIFhGUk0gc3Vic3lzdGVtLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGNsZWFudXAgYW5kIHJlbW92YWwgb2Ygc2VjdXJpdHkgcG9saWNpZXMuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgSVBzZWMgd29ya3MgdW5kZXIgdGhlIGhvb2QgYW5kIHRvIHF1aWNrbHkgZmluZCB3aGVyZSBhIHBvdGVudGlhbCBidWcgaXMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY29kZSB0aGF0IG1hbmFnZXMgdGhlIHBvbGljeSB0YWJsZSBlbnRyaWVzLCBhbnkgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiB0aGUgcG9saWN5IGZyb20gdGhlIHN5c3RlbSdzIHBvbGljeSBkYXRhYmFzZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRldGFpbHMgb2YgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBkYXRhIHN0cnVjdHVyZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjczMzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMToxOC44NDgxMDgzNDFaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NTc0NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9feGZybV9wb2xpY3lfdW5saW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9wb2xpY3kuYz0xOTA9c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE5MTpzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpfX3hmcm1fcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE5Mi1cXHRcXHRcXHRcXHRcXHRcXHRpbnQgZGlyKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MTU3Mj1pbnQgeGZybV9wb2xpY3lfaW5zZXJ0KGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LCBpbnQgZXhjbClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYwMi1cXHRcXHR4ZnJtX3BvbGljeV9yZXF1ZXVlKGRlbHBvbCwgcG9saWN5KTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE2MDM6XFx0XFx0X194ZnJtX3BvbGljeV91bmxpbmsoZGVscG9sLCBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTYwNC1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE2NDU9eGZybV9wb2xpY3lfYnlzZWxfY3R4KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHhmcm1fbWFyayAqbWFyaywgdTMyIGlmX2lkLFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xNjk5LVxcdFxcdFxcdH1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE3MDA6XFx0XFx0XFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTcwMS1cXHRcXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTE3MTU9eGZybV9wb2xpY3lfYnlpZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssIHUzMiBpZl9pZCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTczOS1cXHRcXHRcXHRcXHR9XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYzoxNzQwOlxcdFxcdFxcdFxcdF9feGZybV9wb2xpY3lfdW5saW5rKHBvbCwgZGlyKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTE3NDEtXFx0XFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODEyPWludCB4ZnJtX3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsIGJvb2wgdGFza192YWxpZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTgzMi1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjE4MzM6XFx0XFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMTgzNC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fcG9saWN5X2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz0xODUxPWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODcyLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MTg3MzpcXHRcXHRfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0xODc0LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9wb2xpY3lfbG9jayk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIzMTE9c3RhdGljIHZvaWQgX194ZnJtX3BvbGljeV9saW5rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBpbnQgZGlyKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzI3LVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6MjMyODpzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5ICpfX3hmcm1fcG9saWN5X3VubGluayhzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCxcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTIzMjktXFx0XFx0XFx0XFx0XFx0XFx0aW50IGRpcilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9MjM1Mz1zdGF0aWMgdm9pZCB4ZnJtX3NrX3BvbGljeV91bmxpbmsoc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCBkaXIpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy0yMzU0LXtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIzNTU6XFx0X194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBYRlJNX1BPTElDWV9NQVggKyBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM1Ni19XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTIzNTg9aW50IHhmcm1fcG9saWN5X2RlbGV0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpcilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM2Mi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3BvbGljeV9sb2NrKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjIzNjM6XFx0cG9sID0gX194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtMjM2NC1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fcG9saWN5X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMToxOC45MDc2OTEzMjlaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MjAxNDM0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzOiBYRlJNIFBvbGljeSBhbmQgSG90IFBhdGhzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgWEZSTSBwb2xpY3kgZnVuY3Rpb25zIGFuZCB0aGUgaW50ZXJhY3Rpb25zIHRoZXkgaGF2ZS4gSXQgbG9va3MgbGlrZSBgeGZybV9wb2xpY3lfaW5zZXJ0YCwgYHhmcm1fcG9saWN5X2RlbGV0ZWAsIGFuZCBgeGZybV9wb2xpY3lfZmx1c2hgIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmcm9tIHRoZSB1c2VyIHNwYWNlLCBhcyB0aGV5IGNhbGwgdGhlIGludGVybmFsIGxpbmthZ2UgZnVuY3Rpb25zIGBfX3hmcm1fcG9saWN5X2xpbmtgIGFuZCBgX194ZnJtX3BvbGljeV91bmxpbmtgLiBJJ2xsIHplcm8gaW4gb24gYHhmcm1fcG9saWN5X2luc2VydGAgYW5kIGB4ZnJtX3BvbGljeV9kZWxldGVgIGZvciBub3cuXG5cbk5vdywgbGV0IG1lIGxheSBvdXQgdGhlIGluaXRpYWwgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgeGZybV9pbnB1dGAsIGB4ZnJtX3VzZXJfcmN2X21zZ2AsIGB4ZnJtX3NldF9kZWZhdWx0YCwgYHhmcm1fZ2V0X2RlZmF1bHRgLCBgeGZybV91c2VyX3BvbGljeWAsIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAsIGBlc3BpbnRjcF9zZW5kc2ttc2dfbG9ja2VkYCwgYHhmcm00X3RyYW5zcG9ydF9maW5pc2hgLCBgeGZybTZfdHJhbnNwb3J0X2ZpbmlzaGAsIGB4ZnJtX3BvbGljeV9pbnNlcnRgLCBgeGZybV9wb2xpY3lfZGVsZXRlYCwgYHhmcm1fbG9va3VwX3dpdGhfaWZpZGAsIGBfX3hmcm1fcG9saWN5X2NoZWNrYCwgYW5kIGB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cGAuXG5cbkFoLCBidXQgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gYXZvaWQgaG90LXBhdGggZnVuY3Rpb25zLiBEYW1uISBPa2F5LCBgeGZybV9pbnB1dGAsIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCwgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLCBgeGZybV9sb29rdXBfd2l0aF9pZmlkYCwgYF9feGZybV9wb2xpY3lfY2hlY2tgLCBhbmQgYHhmcm1faW5wdXRfc3RhdGVfbG9va3VwYCwgYW5kIGV2ZW4gYHhmcm1fc2VsZWN0b3JfbWF0Y2hgIGFyZSBhbGwgZGVmaW5pdGVseSBob3QgcGF0aCwgc28gdGhleSdyZSBvdXQuXG5cblRoYXQgbGVhdmVzOiBgeGZybV91c2VyX3Jjdl9tc2dgLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYHhmcm1fdXNlcl9wb2xpY3lgLCBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgLCBgeGZybV9wb2xpY3lfaW5zZXJ0YCwgYW5kIGB4ZnJtX3BvbGljeV9kZWxldGVgLlxuXG5XYWl0IGEgbWludXRlLCBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAuLi5pdCAqaXMqIG1vZGlmaWVkLCBidXQgaXMgaXQgYSBob3QgcGF0aD8gSXQncyBjYWxsZWQgZm9yIGV2ZXJ5IHNpbmdsZSBza2Igc2VudCBvdmVyIGVzcGludGNwLiBZZWFoLCB0aGF0J3MgZGVmaW5pdGVseSBob3QgcGF0aC4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW4gYWx0ZXJuYXRpdmUgaW4gdGhlIEVTUC9UQ1AgY29kZS4gUGVyaGFwcyBgZXNwaW50Y3BfcHVzaF9tc2dzYCBvciBgZXNwaW50Y3Bfc2VuZG1zZ2AgYXJlIGJldHRlciBwb2ludHMgdG8gbG9vayBhdC4gSSdsbCB0YWtlIGEgcXVpY2sgcGVlayBhdCBgZXNwaW50Y3Bfc2VuZG1zZ2AgaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODc0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMTozMC43Mjc4MzkwNzhaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDE3OTMwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz0yOTk9RVhQT1JUX1NZTUJPTF9HUEwoZXNwaW50Y3BfcHVzaF9za2IpO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzAwLVxcbm5ldC94ZnJtL2VzcGludGNwLmM6MzAxOnN0YXRpYyBpbnQgZXNwaW50Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zMDIte1xcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYz01NDU9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byAqZXNwaW50Y3BfcHJvdCxcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtNTUxLVxcdG1lbWNweShlc3BpbnRjcF9vcHMsIG9yaWdfb3BzLCBzaXplb2Yoc3RydWN0IHByb3RvX29wcykpO1xcbm5ldC94ZnJtL2VzcGludGNwLmM6NTUyOlxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXNlbmRtc2cgPSBlc3BpbnRjcF9zZW5kbXNnO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtNTUzLVxcdGVzcGludGNwX3Byb3QtXFx1MDAzZXJlY3Ztc2cgPSBlc3BpbnRjcF9yZWN2bXNnO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMTozMC45NjIwMzExMjJaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQzMjA2NjE0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyBJUHNlYyBGdW5jdGlvbiBJbmNsdXNpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggSVBzZWMtcmVsYXRlZCBmdW5jdGlvbnMgdG8gaW5jbHVkZS4gVGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25lZCBgZXNwaW50Y3Bfc2VuZG1zZ2AsIHNvIHRoYXQncyBkZWZpbml0ZWx5IGluIHRoZSBtaXguIEJ1dCB3aGF0IGFib3V0IHRoZSBvdGhlciBjcnVjaWFsIGZ1bmN0aW9ucz8gYHhmcm1faW5wdXRgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQ7IGl0J3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIElQc2VjIGlucHV0IHByb2Nlc3NpbmcgYW5kIEkga25vdyBpdCdzIGJlZW4gaGVhdmlseSBtb2RpZmllZC4gT24gdGhlIG9uZSBoYW5kLCBJIG5lZWQgdG8gc3RpY2sgdG8gdGhlIGluc3RydWN0aW9ucyBhbmQgYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdHMgZnJvbSBza2V3aW5nLCBhbmQgYHhmcm1faW5wdXRgICppcyogYSBob3QtcGF0aCBmdW5jdGlvbiBmb3IgSVBzZWMuXG5cbkJ1dCBob2xkIG9uLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYnVncyB3aXRoaW4gYHhmcm1faW5wdXRg4oCUZGV2X3B1dCBhbmQgcmN1X3JlYWRfbG9ja+KAlHNvIGV4Y2x1ZGluZyBpdCBtaWdodCBiZSBhIG1pc3Rha2UuIFBlcmhhcHMgYHhmcm1fcmN2YCB3b3VsZCBiZSBhIGJldHRlciBjaG9pY2UgYXMgYSByZWxhdGVkLCBsZXNzIGhvdC1wYXRoLCBmdW5jdGlvbiwgaWYgSSBjYW4gZmluZCBhIHJlbGV2YW50IGNvbm5lY3Rpb24uXG5cbk9rYXksIGxldOKAmXMgcmV0aGluay4gSSdtIGdvaW5nIHRvIGluY2x1ZGUgYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBhbmQgYHhmcm1fZ2V0X2RlZmF1bHRg4oCUdGhleSBzZWVtIHJlbGV2YW50IHRvIGNvbmZpZ3VyYXRpb24gYW5kIHJldHJpZXZhbC4gYHhmcm1fdXNlcl9wb2xpY3lgIGFuZCBgcGZrZXlfbXNnMnhmcm1fc3RhdGVgIGFyZSBkZWZpbml0ZWx5IGluLCBnaXZlbiB0aGVpciB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBBbmQgb2YgY291cnNlLCB0aGUgaW5pdGlhbCBtZW50aW9uIG9mIGBlc3BpbnRjcF9zZW5kbXNnYC5cblxuRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBhdCBgeGZybV9zcGRfZ2V0aW5mb2AuIEl0J3MgY2FsbGVkIGZyb20gYHhmcm1fZ2V0X3NwZGluZm9gLCBzbyBpdCBtaWdodCBiZSB1c2VmdWwgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAxMjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjE6NDAuMzk0MTAxNDkxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA3MzQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2dldF9zcGRpbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTE2Njc9c3RhdGljIGludCB4ZnJtX3NldF9zcGRpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTcyMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxNzIxOnN0YXRpYyBpbnQgeGZybV9nZXRfc3BkaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xNzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MTctXFx0XFx0XFx0XFx0XFx0XFx0ICAgLm5sYV9tYXggPSBYRlJNQV9TUERfTUFYIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQxODpcXHRbWEZSTV9NU0dfR0VUU1BESU5GTyAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9zcGRpbmZvICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDE5LVxcdFtYRlJNX01TR19TRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fc2V0X2RlZmF1bHQgICB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMTo0MC40NTIxNzkzOFoiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTkyNjM0Nzg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBTZWN1cml0eSBQb2xpY3kgRGF0YWJhc2UgVXBkYXRlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgSVBzZWMgU1BEIGxvb2t1cCBpcyBjb3ZlcmVkLCBzbyBJJ2xsIGJlIGluY2x1ZGluZyBgeGZybV9nZXRfc3BkaW5mb2AgaW4gbXkgYW5hbHlzaXMuIEl0J3MgdGhlIGNyaXRpY2FsIGxpbmsgYmV0d2VlbiB0aGUgcG9saWN5IGRhdGFiYXNlIGFuZCB0aGUgWEZSTSBzdWJzeXN0ZW0sIHNvIHRoYXQncyBvYnZpb3VzbHkga2V5LlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBhdCBob3cgdGhvc2UgcG9saWNpZXMgYXJlIGFjdHVhbGx5ICphZGRlZCo/IEknbSB0aGlua2luZyB0aGUgYHBma2V5X2FkZGAgZnVuY3Rpb24gaW4gYG5ldC9rZXkvYWZfa2V5LmNgIGlzIGdvaW5nIHRvIGJlIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXIuIFRoYXQncyB0aGUgY29yZSBvZiBob3cgdGhlIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd29ya3MgZm9yIGFkZGluZyB0aGVzZSBydWxlcy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoYXQgZnVuY3Rpb24gdG8gdHJhY2UgaG93IHRoZSBuZXcgcG9saWN5IGdldHMgcGFyc2VkLCB2YWxpZGF0ZWQsIGFuZCB1bHRpbWF0ZWx5IGluc3RhbGxlZCBpbiB0aGUga2VybmVsJ3MgZGF0YSBzdHJ1Y3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSBsaWZlY3ljbGUgaXMgY3JpdGljYWwsIHNvIGBwZmtleV9hZGRgIGlzIHRoZSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNDYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMlQwODoyMTo1Ni4zNzg1Mjk1MTNaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTU3NDM1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZmtleV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2tleS9hZl9rZXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQva2V5L2FmX2tleS5jPTE0OTA9c3RhdGljIGludCBrZXlfbm90aWZ5X3NhKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpXFxuLS1cXG5uZXQva2V5L2FmX2tleS5jLTE1MTMtXFxubmV0L2tleS9hZl9rZXkuYzoxNTE0OnN0YXRpYyBpbnQgcGZrZXlfYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNhZGJfbXNnICpoZHIsIHZvaWQgKiBjb25zdCAqZXh0X2hkcnMpXFxubmV0L2tleS9hZl9rZXkuYy0xNTE1LXtcXG4tLVxcbm5ldC9rZXkvYWZfa2V5LmM9MjgyMj1zdGF0aWMgY29uc3QgcGZrZXlfaGFuZGxlciBwZmtleV9mdW5jc1tTQURCX01BWCArIDFdID0ge1xcbi0tXFxubmV0L2tleS9hZl9rZXkuYy0yODI0LVxcdFtTQURCX0dFVFNQSV1cXHRcXHQ9IHBma2V5X2dldHNwaSxcXG5uZXQva2V5L2FmX2tleS5jOjI4MjU6XFx0W1NBREJfVVBEQVRFXVxcdFxcdD0gcGZrZXlfYWRkLFxcbm5ldC9rZXkvYWZfa2V5LmM6MjgyNjpcXHRbU0FEQl9BRERdXFx0XFx0PSBwZmtleV9hZGQsXFxubmV0L2tleS9hZl9rZXkuYy0yODI3LVxcdFtTQURCX0RFTEVURV1cXHRcXHQ9IHBma2V5X2RlbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjE6NTYuNjA0MTEzNzk4WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODM5ODI0MDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhGUk0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBlbGVtZW50cyBvZiB0aGlzIFhGUk0gcGF0Y2guIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB3aGF0IEkgc2VlLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBgcGZrZXlfYWRkYCwgYW5kIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGNyaXRpY2FsIGZ1bmN0aW9uczogYHhmcm1fdXNlcl9yY3ZfbXNnYCwgYHhmcm1fc2V0X2RlZmF1bHRgLCBgeGZybV9nZXRfZGVmYXVsdGAsIGB4ZnJtX3VzZXJfcG9saWN5YCwgYW5kIGBwZmtleV9hZGRgLCBgZXNwaW50Y3Bfc2VuZG1zZ2AsIGB4ZnJtX2dldF9zcGRpbmZvYC4gVGhvc2UgYXJlIHRoZSBwcmltYXJ5IHN5bWJvbHMgSSdtIHdhdGNoaW5nLlxuXG5SZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIEkgc2VlIHRoYXQgYElORVRfRVNQSU5UQ1BgLCBgSU5FVDZfRVNQSU5UQ1BgLCBgTkVUX0tFWWAsIGFuZCBgWEZSTV9VU0VSYCBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgZGlyZWN0bHkgcmVsZXZhbnQgaGVyZSwgYW5kIHRoZXknbGwgbmVlZCBjYXJlZnVsIGV4YW1pbmF0aW9uLiBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBvdGhlciBjb25maWd1cmF0aW9ucywgbGlrZSBgQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVGAsIHdoaWNoIGlzIGdlbmVyaWMgYW5kIHVzdWFsbHkgZmluZSBvbiB4ODZfNjQ7IEkgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGl0LiBUaGUgYENPTkZJR19YRlJNX0VTUElOVENQYCBvcHRpb24sIGlzIHNlbGVjdGVkIGJ5IGBJTkVUX0VTUElOVENQYCBhbmQgYElORVQ2X0VTUElOVENQYCwgdGhhdCBsb29rcyByaWdodC4gQW5kIEkga25vdyBgQ09ORklHX05FVF9LRVlgIGlzIGBORVRfS0VZYCBhbmQgYENPTkZJR19YRlJNX1VTRVJgIGlzIGBYRlJNX1VTRVJgLiBJJ20gYWxzbyBnb2luZyB0byBhZGQgdGhhdCBgQ09ORklHX1hGUk1gIGlzIHNlbGVjdGVkIGJ5IHNldmVyYWwsIGluY2x1ZGluZyBgSU5FVF9FU1BgLCBgSU5FVF9BSGAsIGBJTkVUX0lQQ09NUGAsIGFuZCBgWEZSTV9VU0VSYC4gU28sIGZvciBteSBkb2N1bWVudGF0aW9uIEkgd2lsbCBsaXN0IGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYE5FVF9LRVlgLCBhbmQgYFhGUk1fVVNFUmAgYXMgdGhlIGtleSBjb25maWd1cmF0aW9ucy5cblxuTm93LCBhIHF1aWNrIGZpbGUgcmV2aWV3IG9mIHRoZSBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIHRvIGFzc2VzcyBwb3RlbnRpYWwgaW1wYWN0LiBJIHNlZSBjaGFuZ2VzIGluIGBpbmNsdWRlL25ldC94ZnJtLmhgIHJlbGF0aW5nIHRvIGFkZHJlc3MgbWF0Y2hpbmcgKGBhZGRyX21hdGNoYCwgYGFkZHI0X21hdGNoYCksIHBvbGljeSBjaGVja2luZyAoYF9feGZybV9jaGVja19ub3BvbGljeWApLCBhbmQgcm91dGluZyAoYHhmcm1fcm91dGVfZm9yd2FyZGApLiBUaGVuLCBpbnB1dCBoYW5kbGluZyBpbiBgeGZybTRfaW5wdXQuY2AgYW5kIGB4ZnJtNl9pbnB1dC5jYCB3aXRoIGB4ZnJtNF90cmFuc3BvcnRfZmluaXNoYCBhbmQgYHhmcm02X3RyYW5zcG9ydF9maW5pc2hgLiBLZXkgbWFuYWdlbWVudCB3aXRoIGBwZmtleV9tc2cyeGZybV9zdGF0ZWAgaW4gYG5ldC9rZXkvYWZfa2V5LmNgLiBgZXNwaW50Y3Bfc2VuZHNrbXNnX2xvY2tlZGAgaXMgaW4gYG5ldC94ZnJtL2VzcGludGNwLmNgLiBJbnB1dCBwcm9jZXNzaW5nIGFuZCBwb2xpY3kgaGFuZGxpbmcgaW4gYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AgKGB4ZnJtX2lucHV0YCkgYW5kIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYCAoYHhmcm1fc2VsZWN0b3JfbWF0Y2hgLCBgeGZybV9zcGRfZ2V0aW5mb2AsIHBvbGljeSBsaW5raW5nL3VubGlua2luZywgbG9va3VwLCBhbmQgY2hlY2tpbmcpLiBgeGZybV9pbnB1dF9zdGF0ZV9sb29rdXBgIGFuZCBgeGZybV91c2VyX3BvbGljeWAgYXJlIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBGaW5hbGx5LCBgbmV0L3hmcm0veGZybV91c2VyLmNgIHdpdGggYHhmcm1fbm90aWZ5X3VzZXJwb2xpY3lgLCBgeGZybV9zZXRfZGVmYXVsdGAsIGB4ZnJtX2dldF9kZWZhdWx0YCwgYW5kIGB4ZnJtX3VzZXJfcmN2X21zZ2AuXG5cbkNvbnNpZGVyaW5nIGFsbCBvZiB0aGlzLCB0aGUgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBUaGV5IHRvdWNoIGNvcmUgSVBzZWMgbG9naWMgYW5kIGFkZHJlc3MgYnVncyBsaWtlIGJvdW5kcyBjaGVja3MsIGRhdGEgcmFjZXMgaW4gcG9saWN5IG1hbmFnZW1lbnQsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG1pc3NpbmcgbG9ja2RlcCBjb25zaWRlcmF0aW9ucywgYW5kIGNvbXBhdCBzeXNjYWxsIGNoZWNrcy4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBmdXp6aW5nIGlzIGhpZ2hseSB3YXJyYW50ZWQuIFRoZSBjaGFuZ2VzIG1vZGlmeSBjcml0aWNhbCBwYXRocyB0aGF0IGFyZSBkaXJlY3RseSBleHBvc2VkIGFuZCBwb3RlbnRpYWxseSByZWFjaGFibGUsIHNvIHRob3JvdWdoIGZ1enppbmcgaXMgZGVmaW5pdGVseSBhIHByaW9yaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY0NCwiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjJUMDg6MjI6MTEuNDQzOTQxMjA5WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMzMwMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiLFxuICAgIFwiTkVUX0tFWVwiLFxuICAgIFwiWEZSTV9VU0VSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV91c2VyX3Jjdl9tc2dcIixcbiAgICBcInhmcm1fc2V0X2RlZmF1bHRcIixcbiAgICBcInhmcm1fZ2V0X2RlZmF1bHRcIixcbiAgICBcInhmcm1fdXNlcl9wb2xpY3lcIixcbiAgICBcInBma2V5X2FkZFwiLFxuICAgIFwiZXNwaW50Y3Bfc2VuZG1zZ1wiLFxuICAgIFwieGZybV9nZXRfc3BkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgWEZSTSBzdWJzeXN0ZW0sIGluY2x1ZGluZyBib3VuZHMgY2hlY2tzIGZvciBhZGRyZXNzIG1hdGNoaW5nLCBmaXhpbmcgZGF0YSByYWNlcyBpbiBwb2xpY3kgY291bnRzL2RlZmF1bHRzLCBhZGp1c3RpbmcgZGV2IHJlZmNvdW50aW5nIGluIHhmcm1faW5wdXQsIGFuZCByZWZhY3RvcmluZyBlc3BpbnRjcCBtZXNzYWdlIHNlbmRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIElQc2VjIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJORVRfS0VZXCIsXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX3VzZXJfcmN2X21zZ1wiLFxuICAgIFwieGZybV9zZXRfZGVmYXVsdFwiLFxuICAgIFwieGZybV9nZXRfZGVmYXVsdFwiLFxuICAgIFwieGZybV91c2VyX3BvbGljeVwiLFxuICAgIFwicGZrZXlfYWRkXCIsXG4gICAgXCJlc3BpbnRjcF9zZW5kbXNnXCIsXG4gICAgXCJ4ZnJtX2dldF9zcGRpbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBYRlJNIHN1YnN5c3RlbSwgaW5jbHVkaW5nIGJvdW5kcyBjaGVja3MgZm9yIGFkZHJlc3MgbWF0Y2hpbmcsIGZpeGluZyBkYXRhIHJhY2VzIGluIHBvbGljeSBjb3VudHMvZGVmYXVsdHMsIGFkanVzdGluZyBkZXYgcmVmY291bnRpbmcgaW4geGZybV9pbnB1dCwgYW5kIHJlZmFjdG9yaW5nIGVzcGludGNwIG1lc3NhZ2Ugc2VuZGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgSVBzZWMgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[1] Phase: Succeeded StartedAt: 2026-06-22 08:23:50 +0000 UTC FinishedAt: 2026-06-22 08:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-22 08:23:50 +0000 UTC FinishedAt: 2026-06-22 08:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2] Phase: Succeeded StartedAt: 2026-06-22 08:23:50 +0000 UTC FinishedAt: 2026-06-22 12:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-22 08:23:50 +0000 UTC FinishedAt: 2026-06-22 12:42:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-22 08:23:50 +0000 UTC FinishedAt: 2026-06-22 08:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-22 08:23:50 +0000 UTC FinishedAt: 2026-06-22 08:23:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4mp9c/series-workflow4mp9c-convert-artifact-903431685/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-22 08:24:00 +0000 UTC FinishedAt: 2026-06-22 09:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-22 08:24:00 +0000 UTC FinishedAt: 2026-06-22 09:07:41 +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:*641b3e0b-9808-41e6-9225-d86cf934ccd0,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-workflow4mp9c/series-workflow4mp9c-convert-artifact-903431685/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": "16720ef5-c3f9-488c-bbdd-3b53f058d324", "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-workflow4mp9c/series-workflow4mp9c-build-action-647496107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-22 08:24:00 +0000 UTC FinishedAt: 2026-06-22 09:07:31 +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:*641b3e0b-9808-41e6-9225-d86cf934ccd0,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-workflow4mp9c/series-workflow4mp9c-convert-artifact-903431685/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": "16720ef5-c3f9-488c-bbdd-3b53f058d324", "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-workflow4mp9c/series-workflow4mp9c-build-action-647496107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-22 09:07:41 +0000 UTC FinishedAt: 2026-06-22 09:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-22 09:07:41 +0000 UTC FinishedAt: 2026-06-22 09:07:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-22 09:07:41 +0000 UTC FinishedAt: 2026-06-22 09:08:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-22 09:07:41 +0000 UTC FinishedAt: 2026-06-22 09:07:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4mp9c/series-workflow4mp9c-convert-artifact-2907149280/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-22 09:08:02 +0000 UTC FinishedAt: 2026-06-22 09:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-22 09:08:02 +0000 UTC FinishedAt: 2026-06-22 09:09:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*16720ef5-c3f9-488c-bbdd-3b53f058d324,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-workflow4mp9c/series-workflow4mp9c-build-action-647496107/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-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-22 09:09:52 +0000 UTC FinishedAt: 2026-06-22 09:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-22 09:09:52 +0000 UTC FinishedAt: 2026-06-22 09:09:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-22 09:09:52 +0000 UTC FinishedAt: 2026-06-22 09:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-22 09:09:52 +0000 UTC FinishedAt: 2026-06-22 09:35:45 +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:*641b3e0b-9808-41e6-9225-d86cf934ccd0,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-workflow4mp9c/series-workflow4mp9c-convert-artifact-2907149280/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": "995d8aca-feb2-4891-83d0-1d3a4fa450dc", "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-workflow4mp9c/series-workflow4mp9c-build-action-129630364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-22 09:09:52 +0000 UTC FinishedAt: 2026-06-22 09:34:34 +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:*641b3e0b-9808-41e6-9225-d86cf934ccd0,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-workflow4mp9c/series-workflow4mp9c-convert-artifact-2907149280/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": "995d8aca-feb2-4891-83d0-1d3a4fa450dc", "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-workflow4mp9c/series-workflow4mp9c-build-action-129630364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-22 09:35:45 +0000 UTC FinishedAt: 2026-06-22 09:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-22 09:35:45 +0000 UTC FinishedAt: 2026-06-22 09:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-22 09:35:45 +0000 UTC FinishedAt: 2026-06-22 09:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-22 09:35:45 +0000 UTC FinishedAt: 2026-06-22 09:37:48 +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:*995d8aca-feb2-4891-83d0-1d3a4fa450dc,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-workflow4mp9c/series-workflow4mp9c-build-action-129630364/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-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-22 09:37:58 +0000 UTC FinishedAt: 2026-06-22 12:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-22 09:37:58 +0000 UTC FinishedAt: 2026-06-22 12:42:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"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:*16720ef5-c3f9-488c-bbdd-3b53f058d324,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*995d8aca-feb2-4891-83d0-1d3a4fa450dc,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-workflow4mp9c/series-workflow4mp9c-build-action-647496107/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-workflow4mp9c/series-workflow4mp9c-build-action-129630364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-22 09:37:58 +0000 UTC FinishedAt: 2026-06-22 09:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-22 09:37:58 +0000 UTC FinishedAt: 2026-06-22 09:39:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"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-workflow4mp9c/series-workflow4mp9c-convert-artifact-3828363577/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-22 09:37:58 +0000 UTC FinishedAt: 2026-06-22 09:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-22 09:37:58 +0000 UTC FinishedAt: 2026-06-22 09:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-22 09:37:58 +0000 UTC FinishedAt: 2026-06-22 09:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-22 09:39:49 +0000 UTC FinishedAt: 2026-06-22 12:42:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4mp9c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_user_rcv_msg","xfrm_set_default","xfrm_get_default","xfrm_user_policy","pfkey_add","espintcp_sendmsg","xfrm_get_spdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"edb557b2ba38fea2c5eb710cf366c797e187218c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESPINTCP","INET6_ESPINTCP","NET_KEY","XFRM_USER"],"series_id":"deb7c863-a4be-435f-843c-d90ba7270dcd","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-22 09:39:49 +0000 UTC FinishedAt: 2026-06-22 12:42:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*16720ef5-c3f9-488c-bbdd-3b53f058d324,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*995d8aca-feb2-4891-83d0-1d3a4fa450dc,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-workflow4mp9c/series-workflow4mp9c-build-action-647496107/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-workflow4mp9c/series-workflow4mp9c-build-action-129630364/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-workflow4mp9c/series-workflow4mp9c-convert-artifact-3828363577/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,}