Name: series-workflow42m8z Phase: Succeeded StartedAt: 2026-08-07 16:19:58 +0000 UTC FinishedAt: 2026-08-07 20:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[0] Phase: Succeeded StartedAt: 2026-08-07 16:19:58 +0000 UTC FinishedAt: 2026-08-07 16:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 16:19:58 +0000 UTC FinishedAt: 2026-08-07 16:33:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "35b3cc7d-ddcb-4b28-828f-3e8e09559ced" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_incoming_options", "mptcp_pm_chk_stale", "mptcp_subflow_get_retrans", "mptcp_data_ready", "mptcp_recvmsg", "mptcp_sendmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9jaGtfc3RhbGUmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIE1QVENQIG1lbW9yeSBhY2NvdW50aW5nLCBwYWNrZXQgZHJvcHBpbmcgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBhbmQgcmV0cmFuc21pc3Npb24gbG9naWMuIEl0IGludHJvZHVjZXMgbmV3IE1JQiBjb3VudGVycywgYWRkcyBtZW1vcnkgbGltaXQgY2hlY2tzIChgbXB0Y3Bfb3Zlcl9saW1pdGAsIGBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZWApLCBpbXBsZW1lbnRzIG91dC1vZi1vcmRlciBxdWV1ZSBwcnVuaW5nIChgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCksIGFuZCByZWZhY3RvcnMgdGhlIHJldHJhbnNtaXNzaW9uIGxvb3AgKGBfX21wdGNwX3JldHJhbnNgKS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgYWxsb2NhdGluZyBuZXcgY29tcGxleCBzdHJ1Y3R1cmVzLCBleHBvc2luZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHlpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgZm9yIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1cmluZyBwYWNrZXQgZHJvcHBpbmcgb3IgcXVldWUgbWFuaXB1bGF0aW9uLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgYWRkcyBuZXcgTUlCIGNvdW50ZXJzIGFuZCBtb2RpZmllcyBjb3JlIE1QVENQIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgX19tcHRjcF9yZXRyYW5zYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHN0YW5kYXJkIE1QVENQIHNvY2tldCBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIHJlY2VpdmUgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI2MDZhN2JjNDY1MTBiOGE5ODQ4OGFiNTI2NGI3M2ZiODYzZmE4OWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjIxOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xuaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5jXG5AQCAtODUsNiAmIzQzOzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrXCYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7RmFsbGJhY2tGYWlsZWRcJiMzNDssIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O1dpblByb2JlXCYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7QmFja2xvZ0Ryb3BcJiMzNDssIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtSY3ZQcnVuZWRcJiMzNDssIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7T0ZPUHJ1bmVkXCYjMzQ7LCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcbiB9O1xuIFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmhcbmluZGV4IDgxMjIxOGI1ZWQyYmYuLjNhMzQyNWUyNThhNzYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaFxuQEAgLTg4LDYgJiM0Mzs4OCw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJiMzOTt0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXG4gXHRNUFRDUF9NSUJfV0lOUFJPQkUsXHRcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXG4mIzQzO1x0TVBUQ1BfTUlCX0JBQ0tMT0dEUk9QLFx0XHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXG4mIzQzO1x0TVBUQ1BfTUlCX1JDVlBSVU5FRCxcdFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzICovXG4mIzQzO1x0TVBUQ1BfTUlCX09GT1BSVU5FRCxcdFx0LyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqL1xuIFx0X19NUFRDUF9NSUJfTUFYXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggMTA1N2Q1MDA1NzdiMC4uYjgzMThlMDMwMTM4OSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTkwLDggJiM0MzsxMTkwLDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdHJldHVybiBobWFjID09IG1wX29wdC1cdTAwM2VhaG1hYztcbiB9XG4gXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxuLSAqIGVsc2UgcmV0dXJuIHRydWUuXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHUzMiByY3ZidWYgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseSgodTMyKXNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2M9IHJjdmJ1ZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgIFJFQURfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4pIFx1MDAzYz0gcmN2YnVmKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4sIHJzdCBvciBhbHJlYWR5LWFja2VkIHNlZ20uICovXG4mIzQzO1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbiYjNDM7XHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF9mbGFncyBcdTAwMjYgKFRDUEhEUl9GSU4gfCBUQ1BIRFJfUlNUKSB8fFxuJiM0MztcdCAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVx1MDAzZXJjdl9ueHQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi9cbiYjNDM7XHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4mIzQzO1x0aW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNzayk7XG4mIzQzO1xuJiM0MztcdC8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqL1xuJiM0MztcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUkNWUURST1ApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuJiM0MzsgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXG4gICovXG4gYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5AQCAtMTIxNyw3ICYjNDM7MTI0Myw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDY0YTEyMzZhYWJlZTkuLmQxZjczYzNlMzlmYTMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmNcbkBAIC0xMDY1LDcgJiM0MzsxMDY1LDggQEAgYm9vbCBtcHRjcF9wbV9pc19iYWNrdXAoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpXG4gXHRyZXR1cm4gbXB0Y3BfcG1fbmxfaXNfYmFja3VwKG1zaywgXHUwMDI2c2tjX2xvY2FsKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO21wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqaXRlciwgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuQEAgLTExMDIsMjIgJiM0MzsxMTAzLDM0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jXG4gXHR9XG4gfVxuIFxuLXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbiYjNDM7dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4tXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcbi1cdHUzMiByY3ZfdHN0YW1wID0gUkVBRF9PTkNFKHRjcF9zayhzc2spLVx1MDAzZXJjdl90c3RhbXApO1xuLVxuLVx0Lyoga2VlcCB0cmFjayBvZiBydHggcGVyaW9kcyB3aXRoIG5vIHByb2dyZXNzICovXG4tXHRpZiAoIXN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpIHtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCYjNDM7JiM0Mzs7XG4tXHR9IGVsc2UgaWYgKHN1YmZsb3ctXHUwMDNlc3RhbGVfcmN2X3RzdGFtcCA9PSByY3ZfdHN0YW1wKSB7XG4tXHRcdGlmIChzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50IFx1MDAzYyBVOF9NQVgpXG4mIzQzO1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbiYjNDM7XHRcdHN0cnVjdCBzb2NrICpzc2sgPSBtcHRjcF9zdWJmbG93X3RjcF9zb2NrKHN1YmZsb3cpO1xuJiM0MztcdFx0dTMyIHJjdl90c3RhbXA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFfX21wdGNwX3N1YmZsb3dfYWN0aXZlKHN1YmZsb3cpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBObyBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gbm90IHN0YWxlICovXG4mIzQzO1x0XHRpZiAodGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqL1xuJiM0MztcdFx0cmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS1cdTAwM2VyY3ZfdHN0YW1wKTtcbiYjNDM7XHRcdGlmICghc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCkge1xuJiM0MztcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX3Jjdl90c3RhbXAgPSByY3ZfdHN0YW1wO1xuIFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQmIzQzOyYjNDM7O1xuLVx0XHRtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUobXNrLCBzc2spO1xuLVx0fSBlbHNlIHtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCA9IDA7XG4tXHRcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHtcbiYjNDM7XHRcdFx0aWYgKHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQgXHUwMDNjIFU4X01BWClcbiYjNDM7XHRcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUobXNrLCBzc2spO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCA9IDA7XG4mIzQzO1x0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcbiYjNDM7XHRcdH1cbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uZWM4NzRkMmVhZDZhNCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTI0Miw2ICYjNDM7MjQyLDY1IEBAIHN0YXRpYyBib29sIG1wdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzOy8qIFwmIzM0O0luc3BpcmVkXCYjMzQ7IGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1BcbiYjNDM7ICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7XG4mIzQzO1x0Ym9vbCBwcnVuZWQgPSBmYWxzZTtcbiYjNDM7XHR1NjQgbWVtO1xuJiM0MztcbiYjNDM7XHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bm9kZSA9IFx1MDAyNm1zay1cdTAwM2Vvb29fbGFzdF9za2ItXHUwMDNlcmJub2RlO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFN0b3AgcHJ1bmluZyBpZiB0aGUgaW5jb21pbmcgc2tiIHdvdWxkIGxhbmQgaW4gT29PIHRhaWwuICovXG4mIzQzO1x0XHRpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0IoaW5fc2tiKS1cdTAwM2VtYXBfc2VxLFxuJiM0MztcdFx0XHQgICAgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHBydW5lZCA9IHRydWU7XG4mIzQzO1x0XHRwcmV2ID0gcmJfcHJldihub2RlKTtcbiYjNDM7XHRcdHJiX2VyYXNlKG5vZGUsIFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xuJiM0MztcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRcdG1zay1cdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XG4mIzQzO1xuJiM0MztcdFx0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XG4mIzQzO1x0XHRpZiAobWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRub2RlID0gcHJldjtcbiYjNDM7XHR9IHdoaWxlIChub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBydW5lZClcbiYjNDM7XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc3RhY2sgY2FuJiMzOTt0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IGF0IHRoZSBtc2sgbGV2ZWwsIG9yIHRoZVxuJiM0MzsgKiBzdHJlYW0gd2lsbCBicmVhay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX2Nhbl9pbmdlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2M9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSB8fFxuJiM0MztcdFx0XHRfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1wdGNwX3NrKHNrKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGlmICghbXB0Y3BfY2FuX2luZ2VzdChzaykpIHtcbiYjNDM7XHRcdG1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgc2tiKTtcbiYjNDM7XHRcdHJldHVybiBtcHRjcF9jYW5faW5nZXN0KHNrKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLyogXCYjMzQ7aW5zcGlyZWRcJiMzNDsgYnkgdGNwX2RhdGFfcXVldWVfb2ZvKCksIG1haW4gZGlmZmVyZW5jZXM6XG4gICogLSB1c2UgbXB0Y3Agc2Vxc1xuICAqIC0gZG9uJiMzOTt0IGNvcGUgd2l0aCBzYWNrc1xuQEAgLTI1Myw2ICYjNDM7MzEyLDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR1NjQgc2VxLCBlbmRfc2VxLCBtYXhfc2VxO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjE7XG4gXG4mIzQzO1x0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuJiM0MztcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4mIzQzO1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuIFx0ZW5kX3NlcSA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXE7XG4gXHRtYXhfc2VxID0gYXRvbWljNjRfcmVhZChcdTAwMjZtc2stXHUwMDNlcmN2X3duZF9zZW50KTtcbkBAIC0zODksNiAmIzQzOzQ1NCwxMyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdGlmIChNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxID09IG1zay1cdTAwM2VhY2tfc2VxKSB7XG4gXHRcdC8qIGluIHNlcXVlbmNlICovXG4mIzQzO2luc2VydDpcbiYjNDM7XHRcdGlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHtcbiYjNDM7XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4mIzQzO1x0XHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdG1zay1cdTAwM2VieXRlc19yZWNlaXZlZCAmIzQzOz0gY29weV9sZW47XG4gXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWFja19zZXEsIG1zay1cdTAwM2VhY2tfc2VxICYjNDM7IGNvcHlfbGVuKTtcbiBcdFx0dGFpbCA9IHNrYl9wZWVrX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5AQCAtNDAzLDI2ICYjNDM7NDc1LDIwIEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHQvKiBDb21wbGV0ZWx5IG9sZCBkYXRhPyAqL1xuLVx0aWYgKCFhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xuLVx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG4tXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKiBQYXJ0aWFsIHBhY2tldCAqL1xuJiM0MztcdGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xuJiM0MztcdFx0Y29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxIC0gbXNrLVx1MDAzZWFja19zZXE7XG4mIzQzO1x0XHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgJiM0Mzs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbiYjNDM7XHRcdFx0XHRcdCAgICAgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbiYjNDM7XHRcdE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEgJiM0Mzs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbiYjNDM7XHRcdFx0XHRcdCAgICAgIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4mIzQzO1x0XHRnb3RvIGluc2VydDtcbiBcdH1cbiBcbi1cdC8qIFBhcnRpYWwgcGFja2V0OiBtYXBfc2VxIFx1MDAzYyBhY2tfc2VxIFx1MDAzYyBlbmRfc2VxLlxuLVx0ICogU2tpcCB0aGUgYWxyZWFkeS1hY2tlZCBieXRlcyBhbmQgZW5xdWV1ZSB0aGUgbmV3IGRhdGEuXG4tXHQgKi9cbi1cdGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSAtIG1zay1cdTAwM2VhY2tfc2VxO1xuLVx0TVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0ICYjNDM7PSBtc2stXHUwMDNlYWNrX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4tXHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxICYjNDM7PSBtc2stXHUwMDNlYWNrX3NlcSAtXG4tXHRcdFx0XHQgICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuLVx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjtcbi1cdFdSSVRFX09OQ0UobXNrLVx1MDAzZWFja19zZXEsIG1zay1cdTAwM2VhY2tfc2VxICYjNDM7IGNvcHlfbGVuKTtcbi1cbi1cdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbi1cdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdC8qIENvbXBsZXRlbHkgb2xkIGRhdGEgKi9cbiYjNDM7XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG4mIzQzO1x0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX3N0b3BfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcbkBAIC02ODEsNiAmIzQzOzc0Nyw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIFx0c3RydWN0IHNvY2sgKnNzayA9IHNrYi1cdTAwM2VzaztcbiBcdGJvb2wgZnJhZ3N0b2xlbjtcbiYjNDM7XHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4OCw2ICYjNDM7NzU1LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXG4mIzQzO1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbiYjNDM7XHRsaW1pdCAmIzQzOz0gKGxpbWl0IFx1MDAzZVx1MDAzZSAxKSAmIzQzOyA2NCAqIDEwMjQ7XG4mIzQzO1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4mIzQzO1x0aWYgKG1zay1cdTAwM2ViYWNrbG9nX2xlbiBcdTAwM2UgbGltaXQgXHUwMDI2XHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcbiYjNDM7XHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbiYjNDM7XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzU5LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcbiBcdFx0XHRtcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pO1xuIFxuLVx0XHRcdGlmIChvd25fbXNrIFx1MDAyNlx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNjIHNrLVx1MDAzZXNrX3JjdmJ1Zikge1xuJiM0MztcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTQyLDEzICYjNDM7MTIxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIxNSwxMiAmIzQzOzIyODUsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMsIHUzMiAqZGVsdFxuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdGJvb2wgbW92ZWQgPSBmYWxzZTtcbiBcbi1cdCpkZWx0YSA9IDA7XG4gXHR3aGlsZSAoMSkge1xuLVx0XHQvKiBJZiB0aGUgbXNrIHJlY3ZidWYgaXMgZnVsbCBzdG9wLCBkb24mIzM5O3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgJiM0Mzs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQ4LDkgJiM0MzsyMzEzLDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXHUwMDNlYmFja2xvZ191bmFjY291bnRlZCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc29ja2V0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTtcbiBcbi1cdC8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjU4LDIwICYjNDM7MjMyMSwxMiBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfYmFja2xvZ19zcG9vbGVkKHN0cnVjdCBzb2NrICpzaywgdTMyIG1vdmVkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuLXtcbi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4tXG4tXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuLVx0bGlzdF9zcGxpY2Uoc2ticywgXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCk7XG4tfVxuLVxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4ge1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4mIzQzO1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3OSw4ICYjNDM7MjMzNCw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCk7XG4gXG4gXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuJiM0MztcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI0NjksNyAmIzQzOzI1MjQsNiBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFxuIFx0XHQvKiBzdGlsbCBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gc2tpcCB0aGlzICovXG4gXHRcdGlmICghdGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpIHtcbi1cdFx0XHRtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7XG4gXHRcdFx0bWluX3N0YWxlX2NvdW50ID0gbWluX3QoaW50LCBtaW5fc3RhbGVfY291bnQsIHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMjc5MSw0NCAmIzQzOzI4NDUsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4gXHRza19lcnJvcl9yZXBvcnQoc2spO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuJiM0MzsvKlxuJiM0MzsgKiBSZXRyYW5zbWl0IHRoZSBzcGVjaWZpZWQgZGF0YSBmcmFnbWVudCBvbiBhbGwgdGhlIHNlbGVjdGVkIHN1YmZsb3dzLFxuJiM0MzsgKiBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbiYjNDM7XHRcdFx0XHR1NjQgc2VudF9zZXEpXG4ge1xuIFx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9O1xuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4tXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcbiBcdHN0cnVjdCBzb2NrICpzc2s7XG4tXHRpbnQgcmV0LCBlcnI7XG4tXHR1MTYgbGVuID0gMDtcbi1cbi1cdG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVxuLVx0LyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgXCYjMzQ7c3RhbGVcJiMzNDsgbG9naWMgKi9cbi1cdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XG4tXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbi1cdGlmICghZGZyYWcpIHtcbi1cdFx0aWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkge1xuLVx0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbi1cbi1cdFx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcbi1cdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTtcbi1cdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbi1cdFx0XHRtcHRjcF9zZW5kX2Fjayhtc2spO1xuLVxuLVx0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuLVx0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuLVxuLVx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0fVxuLVxuLVx0aWYgKGVycilcbi1cdFx0Z290byByZXNldF90aW1lcjtcbiYjNDM7XHRpbnQgcmV0LCBsZW4gPSAwO1xuIFxuIFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbiBcdFx0aWYgKFJFQURfT05DRShzdWJmbG93LVx1MDAzZXNjaGVkdWxlZCkpIHtcbiYjNDM7XHRcdFx0dTE2IG9mZnNldCA9IHNlbnRfc2VxIC0gZGZyYWctXHUwMDNlZGF0YV9zZXE7XG4gXHRcdFx0dTE2IGNvcGllZCA9IDA7XG4gXG4gXHRcdFx0bXB0Y3Bfc3ViZmxvd19zZXRfc2NoZWR1bGVkKHN1YmZsb3csIGZhbHNlKTtcbkBAIC0yODM4LDcgJiM0MzsyODcwLDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRsb2NrX3NvY2soc3NrKTtcbiBcbiBcdFx0XHQvKiBsaW1pdCByZXRyYW5zbWlzc2lvbiB0byB0aGUgYnl0ZXMgYWxyZWFkeSBzZW50IG9uIHNvbWUgc3ViZmxvd3MgKi9cbi1cdFx0XHRpbmZvLnNlbnQgPSAwO1xuJiM0MztcdFx0XHRpbmZvLnNlbnQgPSBvZmZzZXQ7XG4gXHRcdFx0aW5mby5saW1pdCA9IFJFQURfT05DRShtc2stXHUwMDNlY3N1bV9lbmFibGVkKSA/IGRmcmFnLVx1MDAzZWRhdGFfbGVuIDpcbiBcdFx0XHRcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudDtcbiBcbkBAIC0yODUzLDcgJiM0MzsyODg1LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHQgICAgIW1zay1cdTAwM2VhbGxvd19zdWJmbG93cykge1xuIFx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZWZhbGxiYWNrX2xvY2spO1xuIFx0XHRcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4tXHRcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdHdoaWxlIChpbmZvLnNlbnQgXHUwMDNjIGluZm8ubGltaXQpIHtcbkBAIC0yODc2LDEzICYjNDM7MjkwOCw5OSBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcbiYjNDM7XHR1NjQgcmV0cmFuc19zZXEsIHNlbnRfc2VxO1xuJiM0MztcdGJvb2wgbmVlZF9yZXRyYW5zO1xuJiM0MztcdGludCBlcnIsIGxlbjtcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfcG1fY2hrX3N0YWxlKG1zayk7XG4mIzQzO1xuJiM0MztcdC8qIEdldCBhbiB1cGRhdGVkIGFuZCBjb25zaXN0ZW50IHJ0eCBxdWV1ZSBzdGF0dXMuICovXG4mIzQzO1x0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbiYjNDM7XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuJiM0MztcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4mIzQzO1x0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4mIzQzO1x0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcbiYjNDM7XHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdGJvb2wgYWxyZWFkeV9hY2tlZDtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbiYjNDM7XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWRmcmFnIHx8ICFkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIENhbiBmYWlsIG9ubHkgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbiYjNDM7XHRcdGxlbiA9IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHNrLCBkZnJhZywgcmV0cmFuc19zZXEpO1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0cmFuc19zZXEgJiM0Mzs9IGxlbjtcbiYjNDM7XHRcdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICYjNDM7PSBsZW47XG4mIzQzO1x0XHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCxcbiYjNDM7XHRcdFx0XHRcdCAgICByZXRyYW5zX3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXaXRoIGNzdW0gZW5hYmxlZCwgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4mIzQzO1x0XHRzZW50X3NlcSA9IGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiYjNDM7XHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4mIzQzO1x0XHQgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgJiM0MzsgZGZyYWctXHUwMDNlZGF0YV9sZW4pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcdTAwMjZkZnJhZy1cdTAwM2VsaXN0LCBcdTAwMjZtc2stXHUwMDNlcnR4X3F1ZXVlKSA/XG4mIzQzO1x0XHRcdFx0TlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7XG4mIzQzO1x0XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbmNvbWluZyBhY2tzIGNhbiBtb3ZlIHNuZF91bmEgYWZ0ZXIgdGhlIGN1cnJlbnQgZGZyYWdcbiYjNDM7XHRcdCAqIGFjcm9zcyBsb29wIGl0ZXJhdGlvbnMsIGlmIHNvIHN0YXJ0IGFnYWluIGZyb20gUlRYIGhlYWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4mIzQzO1x0XHRhbHJlYWR5X2Fja2VkID0gIWJlZm9yZTY0KG1zay1cdTAwM2VzbmRfdW5hLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpO1xuJiM0MztcdFx0aWYgKGFscmVhZHlfYWNrZWQpIHtcbiYjNDM7XHRcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjNDM7XHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4mIzQzO1x0XHRcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGFmdGVyNjQobXNrLVx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xuJiM0MztcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuJiM0MztcdH1cbiBcbi1cdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICYjNDM7PSBsZW47XG4tXHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50LCBsZW4pO1xuJiM0MztcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXG4mIzQzO1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbiYjNDM7XHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFxuLVx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4tXHRpZiAoYWZ0ZXI2NChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgJiM0MzsgZGZyYWctXHUwMDNlZGF0YV9zZXEsIG1zay1cdTAwM2VzbmRfbnh0KSlcbi1cdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLVx1MDAzZWRhdGFfc2VxKTtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4mIzQzO1x0XHRcdFx0ICAgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpO1xuJiM0MztcdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbiYjNDM7XHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbiYjNDM7XHRcdFx0Z290byByZXNldF90aW1lcjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpXG4mIzQzO1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuJiM0MztcdH1cbiBcbiByZXNldF90aW1lcjpcbiBcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XG5AQCAtMzY3NiwxMiAmIzQzOzM3OTQsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXHRfX211c3RfaG9sZChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4mIzQzO1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdGZvciAoOzspIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IChtc2stXHUwMDNlY2JfZmxhZ3MgXHUwMDI2IE1QVENQX0ZMQUdTX1BST0NFU1NfQ1RYX05FRUQpO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGpvaW5fbGlzdCwgc2ticztcbiBcdFx0Ym9vbCBzcG9vbF9ibDtcbi1cdFx0dTMyIG1vdmVkO1xuIFxuIFx0XHRzcG9vbF9ibCA9IG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHNrLCBcdTAwMjZza2JzKTtcbiBcdFx0aWYgKCFmbGFncyBcdTAwMjZcdTAwMjYgIXNwb29sX2JsKVxuQEAgLTM3MTQsOSAmIzQzOzM4MzIsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKTtcbi1cdFx0aWYgKHNwb29sX2JsKVxuLVx0XHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuJiM0MztcdGlmIChtb3ZlZClcbiYjNDM7XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXG4gXHRpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfQ0xFQU5fVU5BLCBcdTAwMjZtc2stXHUwMDNlY2JfZmxhZ3MpKVxuIFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDFiODBmMmQ2ZWM1YTIuLmIzYWYzNDYyYmRkMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC01ODAsMTIgJiM0Mzs1ODAsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7XG4gXHRcdHJlbW90ZV9rZXlfdmFsaWQgOiAxLCAgICAgICAgLyogcmVjZWl2ZWQgdGhlIHBlZXIga2V5IGZyb20gKi9cbiBcdFx0ZGlzcG9zYWJsZSA6IDEsXHQgICAgLyogY3R4IGNhbiBiZSBmcmVlIGF0IHVscCByZWxlYXNlIHRpbWUgKi9cbiBcdFx0Y2xvc2luZyA6IDEsXHQgICAgLyogbXVzdCBub3QgcGFzcyByeCBkYXRhIHRvIG1zayBhbnltb3JlICovXG4tXHRcdHN0YWxlIDogMSxcdCAgICAvKiB1bmFibGUgdG8gc25kL3JjdiBkYXRhLCBkbyBub3QgdXNlIGZvciB4bWl0ICovXG4gXHRcdHZhbGlkX2NzdW1fc2VlbiA6IDEsICAgICAgICAvKiBhdCBsZWFzdCBvbmUgY3N1bSB2YWxpZGF0ZWQgKi9cbiBcdFx0aXNfbXB0Zm8gOiAxLFx0ICAgIC8qIHN1YmZsb3cgaXMgZG9pbmcgVEZPICovXG4gXHRcdGNsb3NlX2V2ZW50X2RvbmUgOiAxLCAgICAgICAvKiBoYXMgZG9uZSB0aGUgcG9zdC1jbG9zZWQgcGFydCAqL1xuIFx0XHRtcGNfZHJvcCA6IDEsXHQgICAgLyogdGhlIE1QQyBvcHRpb24gaGFzIGJlZW4gZHJvcHBlZCBpbiBhIHJ0eCAqL1xuLVx0XHRfX3VudXNlZCA6IDg7XG4mIzQzO1x0XHRfX3VudXNlZCA6IDk7XG4gXHRib29sXHRkYXRhX2F2YWlsO1xuIFx0Ym9vbFx0c2NoZWR1bGVkO1xuIFx0Ym9vbFx0cG1fbGlzdGVuZXI7XHQgICAgLyogYSBsaXN0ZW5lciBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwgUE0/ICovXG5AQCAtNjA0LDcgJiM0Mzs2MDMsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7XG4gXHR1OFx0cmVzZXRfc2VlbjoxO1xuIFx0dThcdHJlc2V0X3RyYW5zaWVudDoxO1xuIFx0dThcdHJlc2V0X3JlYXNvbjo0O1xuLVx0dThcdHN0YWxlX2NvdW50O1xuJiM0MztcdHU4XHRzdGFsZV9jb3VudDtcdCAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jayAqL1xuJiM0MztcdHU4XHRzdGFsZTtcdFx0ICAgIC8qIFByb3RlY3RlZCBieSB0aGUgbXNrIHNvY2tldCBsb2NrLFxuJiM0MztcdFx0XHRcdCAgICAgKiBpZiBzZXQgdGhlIHN1YmZsb3cgaXMgdW5hYmxlIHRvIHNuZC9yY3ZcbiYjNDM7XHRcdFx0XHQgICAgICogZGF0YSwgdGhlIHNjaGVkdWxlIHNob3VsZCBza2lwIGl0XG4mIzQzO1x0XHRcdFx0ICAgICAqL1xuIFxuIFx0dTMyXHRzdWJmbG93X2lkO1xuIFxuQEAgLTExMDMsNyAmIzQzOzExMDYsNyBAQCBpbnQgbXB0Y3BfcG1fcGFyc2VfZW50cnkoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpsb2MsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbSk7XG4tdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKTtcbiYjNDM7dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gdm9pZCBtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgc2VydmVyX3NpZGUpO1xuIHZvaWQgbXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzayk7XG4gYm9vbCBtcHRjcF9wbV9hbGxvd19uZXdfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9pbmNvbWluZ19vcHRpb25zJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX2Noa19zdGFsZSYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zJiMzNDssCiAgICAmIzM0O21wdGNwX2RhdGFfcmVhZHkmIzM0OywKICAgICYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDttcHRjcF9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cywgYmFja2xvZyBkcm9wcywgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBhZGRzIG5ldyBNSUIgY291bnRlcnMgYW5kIG1vZGlmaWVzIGNvcmUgTVBUQ1AgZnVuY3Rpb25zIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYW5kIGBfX21wdGNwX3JldHJhbnNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gc3RhbmRhcmQgTVBUQ1Agc29ja2V0IG9wZXJhdGlvbnMgYW5kIG5ldHdvcmsgcmVjZWl2ZSBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjYwNmE3YmM0NjUxMGI4YTk4NDg4YWI1MjY0YjczZmI4NjNmYTg5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTY6MjE6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmMgYi9uZXQvbXB0Y3AvbWliLmMKaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuYwpAQCAtODUsNiAmIzQzOzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0spLAogCVNOTVBfTUlCX0lURU0oJiMzNDtGYWxsYmFja0ZhaWxlZCYjMzQ7LCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtXaW5Qcm9iZSYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7QmFja2xvZ0Ryb3AmIzM0OywgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O1JjdlBydW5lZCYjMzQ7LCBNUFRDUF9NSUJfUkNWUFJVTkVEKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O09GT1BydW5lZCYjMzQ7LCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSwKIH07CiAKIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnMKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaAppbmRleCA4MTIyMThiNWVkMmJmLi4zYTM0MjVlMjU4YTc2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvbWliLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5oCkBAIC04OCw2ICYjNDM7ODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7CiAJTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSywJLyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi8KIAlNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsCS8qIENhbiYjMzk7dCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqLwogCU1QVENQX01JQl9XSU5QUk9CRSwJCS8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovCiYjNDM7CU1QVENQX01JQl9CQUNLTE9HRFJPUCwJCS8qIEJhY2tsb2cgb3ZlciBtZW1vcnkgbGltaXQgKi8KJiM0MzsJTVBUQ1BfTUlCX1JDVlBSVU5FRCwJCS8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqLwomIzQzOwlNUFRDUF9NSUJfT0ZPUFJVTkVELAkJLyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqLwogCV9fTVBUQ1BfTUlCX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmMKaW5kZXggMTA1N2Q1MDA1NzdiMC4uYjgzMThlMDMwMTM4OSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC0xMTkwLDggJiM0MzsxMTkwLDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAlyZXR1cm4gaG1hYyA9PSBtcF9vcHQtJmd0O2FobWFjOwogfQogCi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksCi0gKiBlbHNlIHJldHVybiB0cnVlLgomIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXUzMiByY3ZidWYgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CiYjNDM7CWlmIChsaWtlbHkoKHUzMilza19ybWVtX2FsbG9jX2dldChzaykgJmx0Oz0gcmN2YnVmICZhbXA7JmFtcDsKJiM0MzsJCSAgIFJFQURfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuKSAmbHQ7PSByY3ZidWYpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiwgcnN0IG9yIGFscmVhZHktYWNrZWQgc2VnbS4gKi8KJiM0MzsJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxID09IFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSB8fAomIzQzOwkgICAgVENQX1NLQl9DQihza2IpLSZndDt0Y3BfZmxhZ3MgJmFtcDsgKFRDUEhEUl9GSU4gfCBUQ1BIRFJfUlNUKSB8fAomIzQzOwkgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSwgdGNwX3NrKHNzayktJmd0O3Jjdl9ueHQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi8KJiM0MzsJaW5ldF9jc2soc3NrKS0mZ3Q7aWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19OT01FTSB8IElDU0tfQUNLX05PVzsKJiM0MzsJaW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNzayk7CiYjNDM7CiYjNDM7CS8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqLwomIzQzOwlORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFJDVlFEUk9QKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJldHVybiBmYWxzZSB3aGVuIHRoZSBjYWxsZXIgbXVzdCBkcm9wIHRoZSBwYWNrZXQsIGkuZS4gaW4gY2FzZSBvZiBlcnJvciwKJiM0MzsgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuCiAgKi8KIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xMjE3LDcgJiM0MzsxMjQzLDcgQEAgYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCQlfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy0mZ3Q7Y29ubik7CiAJCW1wdGNwX2RhdGFfdW5sb2NrKHN1YmZsb3ctJmd0O2Nvbm4pOwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LSZndDtjb25uLCBzaywgc2tiKTsKIAl9CiAKIAltcHRjcF9nZXRfb3B0aW9ucyhza2IsICZhbXA7bXBfb3B0KTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmMKaW5kZXggNjRhMTIzNmFhYmVlOS4uZDFmNzNjM2UzOWZhMyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmMKQEAgLTEwNjUsNyAmIzQzOzEwNjUsOCBAQCBib29sIG1wdGNwX3BtX2lzX2JhY2t1cChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYykKIAlyZXR1cm4gbXB0Y3BfcG1fbmxfaXNfYmFja3VwKG1zaywgJmFtcDtza2NfbG9jYWwpOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaykKJiM0MztzdGF0aWMgdm9pZAomIzQzO21wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqaXRlciwgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spOwogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKQEAgLTExMDIsMjIgJiM0MzsxMTAzLDM0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jCiAJfQogfQogCi12b2lkIG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spCiYjNDM7dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIHsKLQlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTsKLQl1MzIgcmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS0mZ3Q7cmN2X3RzdGFtcCk7Ci0KLQkvKiBrZWVwIHRyYWNrIG9mIHJ0eCBwZXJpb2RzIHdpdGggbm8gcHJvZ3Jlc3MgKi8KLQlpZiAoIXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50KSB7Ci0JCXN1YmZsb3ctJmd0O3N0YWxlX3Jjdl90c3RhbXAgPSByY3ZfdHN0YW1wOwotCQlzdWJmbG93LSZndDtzdGFsZV9jb3VudCYjNDM7JiM0Mzs7Ci0JfSBlbHNlIGlmIChzdWJmbG93LSZndDtzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHsKLQkJaWYgKHN1YmZsb3ctJmd0O3N0YWxlX2NvdW50ICZsdDsgVThfTUFYKQomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93OwomIzQzOwomIzQzOwltcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykgewomIzQzOwkJc3RydWN0IHNvY2sgKnNzayA9IG1wdGNwX3N1YmZsb3dfdGNwX3NvY2soc3ViZmxvdyk7CiYjNDM7CQl1MzIgcmN2X3RzdGFtcDsKJiM0MzsKJiM0MzsJCWlmICghX19tcHRjcF9zdWJmbG93X2FjdGl2ZShzdWJmbG93KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIE5vIGRhdGEgb3V0c3RhbmRpbmcgYXQgVENQIGxldmVsPyBub3Qgc3RhbGUgKi8KJiM0MzsJCWlmICh0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc3NrKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqLwomIzQzOwkJcmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS0mZ3Q7cmN2X3RzdGFtcCk7CiYjNDM7CQlpZiAoIXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50KSB7CiYjNDM7CQkJc3ViZmxvdy0mZ3Q7c3RhbGVfcmN2X3RzdGFtcCA9IHJjdl90c3RhbXA7CiAJCQlzdWJmbG93LSZndDtzdGFsZV9jb3VudCYjNDM7JiM0Mzs7Ci0JCW1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShtc2ssIHNzayk7Ci0JfSBlbHNlIHsKLQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQgPSAwOwotCQltcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7CiYjNDM7CQl9IGVsc2UgaWYgKHN1YmZsb3ctJmd0O3N0YWxlX3Jjdl90c3RhbXAgPT0gcmN2X3RzdGFtcCkgewomIzQzOwkJCWlmIChzdWJmbG93LSZndDtzdGFsZV9jb3VudCAmbHQ7IFU4X01BWCkKJiM0MzsJCQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJCW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKG1zaywgc3NrKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQgPSAwOwomIzQzOwkJCW1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTsKJiM0MzsJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmMKaW5kZXggN2M4MTgwZDhkNWVmZi4uZWM4NzRkMmVhZDZhNCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmMKQEAgLTI0Miw2ICYjNDM7MjQyLDY1IEBAIHN0YXRpYyBib29sIG1wdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MzsvKiAmIzM0O0luc3BpcmVkJiMzNDsgZnJvbSB0aGUgVENQIHZlcnNpb247IG1haW4gZGlmZmVyZW5jZTogc3RvcCBhcyBzb29uIGFzIHRoZSBNUFRDUAomIzQzOyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2OwomIzQzOwlib29sIHBydW5lZCA9IGZhbHNlOwomIzQzOwl1NjQgbWVtOwomIzQzOwomIzQzOwlpZiAoUkJfRU1QVFlfUk9PVCgmYW1wO21zay0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbm9kZSA9ICZhbXA7bXNrLSZndDtvb29fbGFzdF9za2ItJmd0O3Jibm9kZTsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJiX3RvX3NrYihub2RlKTsKJiM0MzsKJiM0MzsJCS8qIFN0b3AgcHJ1bmluZyBpZiB0aGUgaW5jb21pbmcgc2tiIHdvdWxkIGxhbmQgaW4gT29PIHRhaWwuICovCiYjNDM7CQlpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0IoaW5fc2tiKS0mZ3Q7bWFwX3NlcSwKJiM0MzsJCQkgICAgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcHJ1bmVkID0gdHJ1ZTsKJiM0MzsJCXByZXYgPSByYl9wcmV2KG5vZGUpOwomIzQzOwkJcmJfZXJhc2Uobm9kZSwgJmFtcDttc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSk7CiYjNDM7CQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJbXNrLSZndDtvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7CiYjNDM7CiYjNDM7CQltZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTsKJiM0MzsJCWlmIChtZW0gJmx0Oz0gc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCW5vZGUgPSBwcmV2OwomIzQzOwl9IHdoaWxlIChub2RlKTsKJiM0MzsKJiM0MzsJaWYgKHBydW5lZCkKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgc3RhY2sgY2FuJiMzOTt0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IGF0IHRoZSBtc2sgbGV2ZWwsIG9yIHRoZQomIzQzOyAqIHN0cmVhbSB3aWxsIGJyZWFrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG1wdGNwX2Nhbl9pbmdlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmbHQ7PSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpIHx8CiYjNDM7CQkJX19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlpZiAoIW1wdGNwX2Nhbl9pbmdlc3Qoc2spKSB7CiYjNDM7CQltcHRjcF9wcnVuZV9vZm9fcXVldWUoc2ssIHNrYik7CiYjNDM7CQlyZXR1cm4gbXB0Y3BfY2FuX2luZ2VzdChzayk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyogJiMzNDtpbnNwaXJlZCYjMzQ7IGJ5IHRjcF9kYXRhX3F1ZXVlX29mbygpLCBtYWluIGRpZmZlcmVuY2VzOgogICogLSB1c2UgbXB0Y3Agc2VxcwogICogLSBkb24mIzM5O3QgY29wZSB3aXRoIHNhY2tzCkBAIC0yNTMsNiAmIzQzOzMxMiwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXU2NCBzZXEsIGVuZF9zZXEsIG1heF9zZXE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CiAKJiM0MzsJaWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkgewomIzQzOwkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7CiYjNDM7CQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJc2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXE7CiAJZW5kX3NlcSA9IE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxOwogCW1heF9zZXEgPSBhdG9taWM2NF9yZWFkKCZhbXA7bXNrLSZndDtyY3Zfd25kX3NlbnQpOwpAQCAtMzg5LDYgJiM0Mzs0NTQsMTMgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlpZiAoTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEgPT0gbXNrLSZndDthY2tfc2VxKSB7CiAJCS8qIGluIHNlcXVlbmNlICovCiYjNDM7aW5zZXJ0OgomIzQzOwkJaWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkgewomIzQzOwkJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpOwomIzQzOwkJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwogCQltc2stJmd0O2J5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjsKIAkJV1JJVEVfT05DRShtc2stJmd0O2Fja19zZXEsIG1zay0mZ3Q7YWNrX3NlcSAmIzQzOyBjb3B5X2xlbik7CiAJCXRhaWwgPSBza2JfcGVla190YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpOwpAQCAtNDAzLDI2ICYjNDM7NDc1LDIwIEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogQ29tcGxldGVseSBvbGQgZGF0YT8gKi8KLQlpZiAoIWFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEsIG1zay0mZ3Q7YWNrX3NlcSkpIHsKLQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpOwotCQltcHRjcF9kcm9wKHNrLCBza2IpOwotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CS8qIFBhcnRpYWwgcGFja2V0ICovCiYjNDM7CWlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxLCBtc2stJmd0O2Fja19zZXEpKSB7CiYjNDM7CQljb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxIC0gbXNrLSZndDthY2tfc2VxOwomIzQzOwkJTVBUQ1BfU0tCX0NCKHNrYiktJmd0O29mZnNldCAmIzQzOz0gbXNrLSZndDthY2tfc2VxIC0KJiM0MzsJCQkJCSAgICAgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXE7CiYjNDM7CQlNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcSAmIzQzOz0gbXNrLSZndDthY2tfc2VxIC0KJiM0MzsJCQkJCSAgICAgIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwomIzQzOwkJZ290byBpbnNlcnQ7CiAJfQogCi0JLyogUGFydGlhbCBwYWNrZXQ6IG1hcF9zZXEgJmx0OyBhY2tfc2VxICZsdDsgZW5kX3NlcS4KLQkgKiBTa2lwIHRoZSBhbHJlYWR5LWFja2VkIGJ5dGVzIGFuZCBlbnF1ZXVlIHRoZSBuZXcgZGF0YS4KLQkgKi8KLQljb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxIC0gbXNrLSZndDthY2tfc2VxOwotCU1QVENQX1NLQl9DQihza2IpLSZndDtvZmZzZXQgJiM0Mzs9IG1zay0mZ3Q7YWNrX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwotCU1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxICYjNDM7PSBtc2stJmd0O2Fja19zZXEgLQotCQkJCSAgICAgIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwotCW1zay0mZ3Q7Ynl0ZXNfcmVjZWl2ZWQgJiM0Mzs9IGNvcHlfbGVuOwotCVdSSVRFX09OQ0UobXNrLSZndDthY2tfc2VxLCBtc2stJmd0O2Fja19zZXEgJiM0MzsgY29weV9sZW4pOwotCi0Jc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwotCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJLyogQ29tcGxldGVseSBvbGQgZGF0YSAqLwomIzQzOwlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7CiYjNDM7CW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHZvaWQgbXB0Y3Bfc3RvcF9ydHhfdGltZXIoc3RydWN0IHNvY2sgKnNrKQpAQCAtNjgxLDYgJiM0Mzs3NDcsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNvY2sgKnNzayA9IHNrYi0mZ3Q7c2s7CiAJYm9vbCBmcmFnc3RvbGVuOwomIzQzOwl1NjQgbGltaXQ7CiAJaW50IGRlbHRhOwogCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7CkBAIC02ODgsNiAmIzQzOzc1NSwxNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAkJcmV0dXJuOwogCX0KIAomIzQzOwkvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi8KJiM0MzsJbGltaXQgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWxpbWl0ICYjNDM7PSAobGltaXQgJmd0OyZndDsgMSkgJiM0MzsgNjQgKiAxMDI0OwomIzQzOwlsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTsKJiM0MzsJaWYgKG1zay0mZ3Q7YmFja2xvZ19sZW4gJmd0OyBsaW1pdCAmYW1wOyZhbXA7ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHsKJiM0MzsJCV9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJLyogVHJ5IHRvIGNvYWxlc2NlIHdpdGggdGhlIGxhc3Qgc2tiIGluIG91ciBiYWNrbG9nICovCiAJaWYgKCFsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpKQogCQl0YWlsID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTsKQEAgLTc1OSw3ICYjNDM7ODM2LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAkJCW1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7CiAKLQkJCWlmIChvd25fbXNrICZhbXA7JmFtcDsgc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDsgc2stJmd0O3NrX3JjdmJ1ZikgewomIzQzOwkJCWlmIChvd25fbXNrKSB7CiAJCQkJbXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpOwogCQkJCXJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpOwogCQkJfSBlbHNlIHsKQEAgLTExNDIsMTMgJiM0MzsxMjE5LDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKIAltcHRjcF93cml0ZV9zcGFjZShzayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKQotewotCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKLQltcHRjcF9kYXRhX3VubG9jayhzayk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKQEAgLTIyMTUsMTIgJiM0MzsyMjg1LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHQKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCWJvb2wgbW92ZWQgPSBmYWxzZTsKIAotCSpkZWx0YSA9IDA7CiAJd2hpbGUgKDEpIHsKLQkJLyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJiMzOTt0IGRyb3AgKi8KLQkJaWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmZ3Q7IHNrLSZndDtza19yY3ZidWYpCi0JCQlicmVhazsKLQogCQlwcmVmZXRjaChza2ItJmd0O25leHQpOwogCQlsaXN0X2RlbCgmYW1wO3NrYi0mZ3Q7bGlzdCk7CiAJCSpkZWx0YSAmIzQzOz0gc2tiLSZndDt0cnVlc2l6ZTsKQEAgLTIyNDgsOSAmIzQzOzIzMTMsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpCiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stJmd0O2JhY2tsb2dfdW5hY2NvdW50ZWQgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc29ja2V0ICZhbXA7JmFtcDsKIAkJCSAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTsKIAotCS8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkgfHwKLQkgICAgc2tfcm1lbV9hbGxvY19nZXQoc2spICZndDsgc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkpCiAJCXJldHVybiBmYWxzZTsKIAogCUlOSVRfTElTVF9IRUFEKHNrYnMpOwpAQCAtMjI1OCwyMCAmIzQzOzIzMjEsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQotewotCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7Ci0KLQlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7Ci0JbGlzdF9zcGxpY2Uoc2ticywgJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCk7Ci19Ci0KIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJc3RydWN0IGxpc3RfaGVhZCBza2JzOwogCWJvb2wgZW5xdWV1ZWQgPSBmYWxzZTsKLQl1MzIgbW92ZWQ7CiYjNDM7CXUzMiBtb3ZlZCA9IDA7CiAKIAltcHRjcF9kYXRhX2xvY2soc2spOwogCXdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKSkgewpAQCAtMjI3OSw4ICYjNDM7MjMzNCw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiAJCWVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCAmYW1wO3NrYnMsICZhbXA7bW92ZWQpOwogCiAJCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JCW1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsICZhbXA7c2ticyk7CiAJfQomIzQzOwlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7CiAJbXB0Y3BfZGF0YV91bmxvY2soc2spOwogCiAJaWYgKGVucXVldWVkICZhbXA7JmFtcDsgbXB0Y3BfZXBvbGxpbl9yZWFkeShzaykpCkBAIC0yNDY5LDcgJiM0MzsyNTI0LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAogCQkvKiBzdGlsbCBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gc2tpcCB0aGlzICovCiAJCWlmICghdGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpIHsKLQkJCW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKG1zaywgc3NrKTsKIAkJCW1pbl9zdGFsZV9jb3VudCA9IG1pbl90KGludCwgbWluX3N0YWxlX2NvdW50LCBzdWJmbG93LSZndDtzdGFsZV9jb3VudCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjc5MSw0NCAmIzQzOzI4NDUsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiAJc2tfZXJyb3JfcmVwb3J0KHNrKTsKIH0KIAotc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKJiM0MzsvKgomIzQzOyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsCiYjNDM7ICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLAomIzQzOwkJCQl1NjQgc2VudF9zZXEpCiB7CiAJc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9OwogCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKLQlzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZzsKIAlzdHJ1Y3Qgc29jayAqc3NrOwotCWludCByZXQsIGVycjsKLQl1MTYgbGVuID0gMDsKLQotCW1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spOwotCi0JLyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgJiMzNDtzdGFsZSYjMzQ7IGxvZ2ljICovCi0JZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTsKLQlkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTsKLQlpZiAoIWRmcmFnKSB7Ci0JCWlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHsKLQkJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKLQotCQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAotCQkJCSAgIGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMgJiM0MzsgMSk7Ci0JCQltcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTsKLQkJCW1wdGNwX3NlbmRfYWNrKG1zayk7Ci0KLQkJCWdvdG8gcmVzZXRfdGltZXI7Ci0JCX0KLQotCQlpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpCi0JCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKLQotCQlnb3RvIHJlc2V0X3RpbWVyOwotCX0KLQotCWlmIChlcnIpCi0JCWdvdG8gcmVzZXRfdGltZXI7CiYjNDM7CWludCByZXQsIGxlbiA9IDA7CiAKIAltcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykgewogCQlpZiAoUkVBRF9PTkNFKHN1YmZsb3ctJmd0O3NjaGVkdWxlZCkpIHsKJiM0MzsJCQl1MTYgb2Zmc2V0ID0gc2VudF9zZXEgLSBkZnJhZy0mZ3Q7ZGF0YV9zZXE7CiAJCQl1MTYgY29waWVkID0gMDsKIAogCQkJbXB0Y3Bfc3ViZmxvd19zZXRfc2NoZWR1bGVkKHN1YmZsb3csIGZhbHNlKTsKQEAgLTI4MzgsNyAmIzQzOzI4NzAsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQogCQkJbG9ja19zb2NrKHNzayk7CiAKIAkJCS8qIGxpbWl0IHJldHJhbnNtaXNzaW9uIHRvIHRoZSBieXRlcyBhbHJlYWR5IHNlbnQgb24gc29tZSBzdWJmbG93cyAqLwotCQkJaW5mby5zZW50ID0gMDsKJiM0MzsJCQlpbmZvLnNlbnQgPSBvZmZzZXQ7CiAJCQlpbmZvLmxpbWl0ID0gUkVBRF9PTkNFKG1zay0mZ3Q7Y3N1bV9lbmFibGVkKSA/IGRmcmFnLSZndDtkYXRhX2xlbiA6CiAJCQkJCQkJCSAgICBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50OwogCkBAIC0yODUzLDcgJiM0MzsyODg1LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCSAgICAhbXNrLSZndDthbGxvd19zdWJmbG93cykgewogCQkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bXNrLSZndDtmYWxsYmFja19sb2NrKTsKIAkJCQlyZWxlYXNlX3NvY2soc3NrKTsKLQkJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsJCQkJcmV0dXJuIC0xOwogCQkJfQogCiAJCQl3aGlsZSAoaW5mby5zZW50ICZsdDsgaW5mby5saW1pdCkgewpAQCAtMjg3NiwxMyAmIzQzOzI5MDgsOTkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCXJlbGVhc2Vfc29jayhzc2spOwogCQl9CiAJfQomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKJiM0MzsJc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7CiYjNDM7CXU2NCByZXRyYW5zX3NlcSwgc2VudF9zZXE7CiYjNDM7CWJvb2wgbmVlZF9yZXRyYW5zOwomIzQzOwlpbnQgZXJyLCBsZW47CiYjNDM7CiYjNDM7CW1wdGNwX3BtX2Noa19zdGFsZShtc2spOwomIzQzOwomIzQzOwkvKiBHZXQgYW4gdXBkYXRlZCBhbmQgY29uc2lzdGVudCBydHggcXVldWUgc3RhdHVzLiAqLwomIzQzOwltcHRjcF9kYXRhX2xvY2soc2spOwomIzQzOwlfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spOwomIzQzOwlyZXRyYW5zX3NlcSA9IG1zay0mZ3Q7c25kX3VuYTsKJiM0MzsJZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7CiYjNDM7CW5lZWRfcmV0cmFucyA9ICEhZGZyYWc7CiYjNDM7CW1wdGNwX2RhdGFfdW5sb2NrKHNrKTsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJYm9vbCBhbHJlYWR5X2Fja2VkOwomIzQzOwomIzQzOwkJZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWAomIzQzOwkJICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghZGZyYWcgfHwgIWRmcmFnLSZndDthbHJlYWR5X3NlbnQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovCiYjNDM7CQlsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTsKJiM0MzsJCWlmIChsZW4gJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwomIzQzOwkJcmV0cmFuc19zZXEgJiM0Mzs9IGxlbjsKJiM0MzsJCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwomIzQzOwkJZGZyYWctJmd0O2FscmVhZHlfc2VudCA9IG1heF90KHUxNiwgZGZyYWctJmd0O2FscmVhZHlfc2VudCwKJiM0MzsJCQkJCSAgICByZXRyYW5zX3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CiYjNDM7CQkvKiBXaXRoIGNzdW0gZW5hYmxlZCwgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovCiYjNDM7CQlzZW50X3NlcSA9IGRmcmFnLSZndDthbHJlYWR5X3NlbnQgJiM0MzsgZGZyYWctJmd0O2RhdGFfc2VxOwomIzQzOwkJaWYgKGFmdGVyNjQoc2VudF9zZXEsIG1zay0mZ3Q7c25kX254dCkpCiYjNDM7CQkJV1JJVEVfT05DRShtc2stJmd0O3NuZF9ueHQsIHNlbnRfc2VxKTsKJiM0MzsKJiM0MzsJCS8qIEF0dGVtcHQgdGhlIG5leHQgZnJhZ21lbnQgb25seSBpZiB0aGUgY3VycmVudCBvbmUgaXMKJiM0MzsJCSAqIGNvbXBsZXRlbHkgcmV0cmFuc21pdHRlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGJlZm9yZTY0KHJldHJhbnNfc2VxLCBkZnJhZy0mZ3Q7ZGF0YV9zZXEgJiM0MzsgZGZyYWctJmd0O2RhdGFfbGVuKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWRmcmFnID0gbGlzdF9pc19sYXN0KCZhbXA7ZGZyYWctJmd0O2xpc3QsICZhbXA7bXNrLSZndDtydHhfcXVldWUpID8KJiM0MzsJCQkJTlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7CiYjNDM7CQlpZiAoIWRmcmFnKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogSW5jb21pbmcgYWNrcyBjYW4gbW92ZSBzbmRfdW5hIGFmdGVyIHRoZSBjdXJyZW50IGRmcmFnCiYjNDM7CQkgKiBhY3Jvc3MgbG9vcCBpdGVyYXRpb25zLCBpZiBzbyBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLgomIzQzOwkJICovCiYjNDM7CQltcHRjcF9kYXRhX2xvY2soc2spOwomIzQzOwkJYWxyZWFkeV9hY2tlZCA9ICFiZWZvcmU2NChtc2stJmd0O3NuZF91bmEsIGRmcmFnLSZndDtkYXRhX3NlcSAmIzQzOwomIzQzOwkJCQkJICBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50KTsKJiM0MzsJCWlmIChhbHJlYWR5X2Fja2VkKSB7CiYjNDM7CQkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJCQlyZXRyYW5zX3NlcSA9IG1zay0mZ3Q7c25kX3VuYTsKJiM0MzsJCQlkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTsKJiM0MzsJCQluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwkJfSBlbHNlIGlmIChhZnRlcjY0KG1zay0mZ3Q7c25kX3VuYSwgcmV0cmFuc19zZXEpKSB7CiYjNDM7CQkJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CQl9CiYjNDM7CQltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CX0KIAotCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwotCWRmcmFnLSZndDthbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctJmd0O2FscmVhZHlfc2VudCwgbGVuKTsKJiM0MzsJLyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi8KJiM0MzsJaWYgKCFuZWVkX3JldHJhbnMpIHsKJiM0MzsJCWlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHsKJiM0MzsJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKLQkvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi8KLQlpZiAoYWZ0ZXI2NChkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcSwgbXNrLSZndDtzbmRfbnh0KSkKLQkJV1JJVEVfT05DRShtc2stJmd0O3NuZF9ueHQsIGRmcmFnLSZndDthbHJlYWR5X3NlbnQgJiM0MzsgZGZyYWctJmd0O2RhdGFfc2VxKTsKJiM0MzsJCQlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMsCiYjNDM7CQkJCSAgIGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMgJiM0MzsgMSk7CiYjNDM7CQkJbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7CiYjNDM7CQkJbXB0Y3Bfc2VuZF9hY2sobXNrKTsKJiM0MzsJCQlnb3RvIHJlc2V0X3RpbWVyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKQomIzQzOwkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwl9CiAKIHJlc2V0X3RpbWVyOgogCW1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7CkBAIC0zNjc2LDEyICYjNDM7Mzc5NCwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaykKIAlfX211c3RfaG9sZCgmYW1wO3NrLSZndDtza19sb2NrLnNsb2NrKQogewogCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXUzMiBtb3ZlZCA9IDA7CiAKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLSZndDtjYl9mbGFncyAmYW1wOyBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTsKIAkJc3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7CiAJCWJvb2wgc3Bvb2xfYmw7Ci0JCXUzMiBtb3ZlZDsKIAogCQlzcG9vbF9ibCA9IG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHNrLCAmYW1wO3NrYnMpOwogCQlpZiAoIWZsYWdzICZhbXA7JmFtcDsgIXNwb29sX2JsKQpAQCAtMzcxNCw5ICYjNDM7MzgzMiw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKQogCiAJCWNvbmRfcmVzY2hlZCgpOwogCQlzcGluX2xvY2tfYmgoJmFtcDtzay0mZ3Q7c2tfbG9jay5zbG9jayk7Ci0JCWlmIChzcG9vbF9ibCkKLQkJCW1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsICZhbXA7c2ticyk7CiAJfQomIzQzOwlpZiAobW92ZWQpCiYjNDM7CQlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7CiAKIAlpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfQ0xFQU5fVU5BLCAmYW1wO21zay0mZ3Q7Y2JfZmxhZ3MpKQogCQlfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAxYjgwZjJkNmVjNWEyLi5iM2FmMzQ2MmJkZDE2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtNTgwLDEyICYjNDM7NTgwLDExIEBAIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgewogCQlyZW1vdGVfa2V5X3ZhbGlkIDogMSwgICAgICAgIC8qIHJlY2VpdmVkIHRoZSBwZWVyIGtleSBmcm9tICovCiAJCWRpc3Bvc2FibGUgOiAxLAkgICAgLyogY3R4IGNhbiBiZSBmcmVlIGF0IHVscCByZWxlYXNlIHRpbWUgKi8KIAkJY2xvc2luZyA6IDEsCSAgICAvKiBtdXN0IG5vdCBwYXNzIHJ4IGRhdGEgdG8gbXNrIGFueW1vcmUgKi8KLQkJc3RhbGUgOiAxLAkgICAgLyogdW5hYmxlIHRvIHNuZC9yY3YgZGF0YSwgZG8gbm90IHVzZSBmb3IgeG1pdCAqLwogCQl2YWxpZF9jc3VtX3NlZW4gOiAxLCAgICAgICAgLyogYXQgbGVhc3Qgb25lIGNzdW0gdmFsaWRhdGVkICovCiAJCWlzX21wdGZvIDogMSwJICAgIC8qIHN1YmZsb3cgaXMgZG9pbmcgVEZPICovCiAJCWNsb3NlX2V2ZW50X2RvbmUgOiAxLCAgICAgICAvKiBoYXMgZG9uZSB0aGUgcG9zdC1jbG9zZWQgcGFydCAqLwogCQltcGNfZHJvcCA6IDEsCSAgICAvKiB0aGUgTVBDIG9wdGlvbiBoYXMgYmVlbiBkcm9wcGVkIGluIGEgcnR4ICovCi0JCV9fdW51c2VkIDogODsKJiM0MzsJCV9fdW51c2VkIDogOTsKIAlib29sCWRhdGFfYXZhaWw7CiAJYm9vbAlzY2hlZHVsZWQ7CiAJYm9vbAlwbV9saXN0ZW5lcjsJICAgIC8qIGEgbGlzdGVuZXIgbWFuYWdlZCBieSB0aGUga2VybmVsIFBNPyAqLwpAQCAtNjA0LDcgJiM0Mzs2MDMsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7CiAJdTgJcmVzZXRfc2VlbjoxOwogCXU4CXJlc2V0X3RyYW5zaWVudDoxOwogCXU4CXJlc2V0X3JlYXNvbjo0OwotCXU4CXN0YWxlX2NvdW50OwomIzQzOwl1OAlzdGFsZV9jb3VudDsJICAgIC8qIFByb3RlY3RlZCBieSB0aGUgbXNrIHNvY2tldCBsb2NrICovCiYjNDM7CXU4CXN0YWxlOwkJICAgIC8qIFByb3RlY3RlZCBieSB0aGUgbXNrIHNvY2tldCBsb2NrLAomIzQzOwkJCQkgICAgICogaWYgc2V0IHRoZSBzdWJmbG93IGlzIHVuYWJsZSB0byBzbmQvcmN2CiYjNDM7CQkJCSAgICAgKiBkYXRhLCB0aGUgc2NoZWR1bGUgc2hvdWxkIHNraXAgaXQKJiM0MzsJCQkJICAgICAqLwogCiAJdTMyCXN1YmZsb3dfaWQ7CiAKQEAgLTExMDMsNyAmIzQzOzExMDYsNyBAQCBpbnQgbXB0Y3BfcG1fcGFyc2VfZW50cnkoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIGJvb2wgbXB0Y3BfcG1fYWRkcl9mYW1pbGllc19tYXRjaChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpsb2MsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpyZW0pOwotdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKTsKJiM0Mzt2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKIHZvaWQgbXB0Y3BfcG1fbmV3X2Nvbm5lY3Rpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgaW50IHNlcnZlcl9zaWRlKTsKIHZvaWQgbXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzayk7CiBib29sIG1wdGNwX3BtX2FsbG93X25ld19zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUFRDUCBDb2RlIENoYW5nZXMgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgTVBUQ1Agc3Vic3lzdGVtOiBgbmV0L21wdGNwL21pYi5jYCwgYG5ldC9tcHRjcC9taWIuaGAsIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCwgYG5ldC9tcHRjcC9wbS5jYCwgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgYW5kIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAuIExvb2tzIGxpa2UgdGhlIGNvcmUgTVBUQ1AgaW1wbGVtZW50YXRpb24gaXMgYmVpbmcgdXBkYXRlZC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbmV3IE1JQiBjb3VudGVycyBmb3IgTVBUQ1Atc3BlY2lmaWMgZXZlbnRzLCBsaWtlIGJhY2tsb2cgZHJvcHMsIHJlY2VpdmUgcHJ1bmluZywgYW5kIG91dC1vZi1vcmRlciBkYXRhIHBydW5pbmcuIFRoYXTigJlzIGEgZ29vZCBhZGRpdGlvbiBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy4KCkkgYWxzbyBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIHByb2JhYmx5IHRvIGludGVncmF0ZSBhIGNoZWNrIGZvciBgbXB0Y3Bfb3Zlcl9saW1pdGAuIE1ha2VzIHNlbnNlOyBtYW5hZ2luZyBtZW1vcnkgbGltaXRzIGlzIGNydWNpYWwgaW4gYSBNdWx0aXBhdGggY29udGV4dC4gQW5kIHRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIHNlZWluZyBjaGFuZ2VzIHRvIGBtcHRjcF9wbV9jaGtfc3RhbGVgIGFuZCBgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGVgIGhpbnRzIGF0IHNvbWUgdXBkYXRlcyB0byB0aGUgcGF0aCBtYW5hZ2VyLCBwb3NzaWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIHN0YWxlIHN1YmZsb3dzIG9yIG1lbW9yeSBsaW1pdGF0aW9ucy4KCkJleW9uZCB0aGF0LCB0aGUgcGF0Y2ggc2VlbXMgdG8gdG91Y2ggb24gY29yZSBkYXRhIGhhbmRsaW5nIHdpdGggYWRqdXN0bWVudHMgdG8gYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCwgYF9fbXB0Y3BfbW92ZV9za2JgLCBgX19tcHRjcF9hZGRfYmFja2xvZ2AsIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCBgbXB0Y3BfbW92ZV9za2JzYCwgYF9fbXB0Y3BfcmV0cmFuc2AsIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEl0IGRlZmluaXRlbHkgbG9va3MgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBNUFRDUC4gSXQmIzM5O3MgaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYywgd2hpY2ggbWVhbnMgaXQgaXMgaGFuZGxpbmcgY3J1Y2lhbCBzdGF0ZXMgYW5kIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgaG93IE1QVENQIG9wZXJhdGVzLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucywgdGhpcyBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgQ09ORklHIG9wdGlvbnMgZW5hYmxlIE1QVENQIHNvIEkgY2FuIGJ1aWxkIGEgdGVzdCBlbnZpcm9ubWVudC4gT2J2aW91c2x5LCBgQ09ORklHX01QVENQYCBpcyB0aGUga2V5LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBHb29kIGNoYW5jZSB0byByZWFsbHkgc2hha2UgdGhpbmdzIGRvd24gYW5kIGh1bnQgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNUFRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgTVBUQ1AgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgaXMgY2xlYXI6IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTVBUQ1AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2UmIzM5O3ZlIGdvdCB0aGUgY29yZSBjb21wb25lbnRzIGluIHBsYWNlOiBgTVBUQ1BgIGlzIHRoZSBlc3NlbnRpYWwgcGllY2UsIG9mIGNvdXJzZS4gVGhlbiwgYE1QVENQX0lQVjZg4oCUd2hpbGUgb3B0aW9uYWwsIGl0JiMzOTtzIHByZXR0eSBtdWNoIGEgbm8tYnJhaW5lciB0byBlbmFibGUgdGhhdCwgY29uc2lkZXJpbmcgdGhlIGZ1dHVyZSBvZiBuZXR3b3JraW5nLgoKTm93LCB3aGVyZSBkbyBJIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBjcnVjaWFsIGRldGFpbHM/IEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGltZSB0byBkaXNzZWN0IHRoYXQgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBleGVyY2lzZSwgYnV0IGFzIGFsd2F5cywgdGhvcm91Z2huZXNzIGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI3MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIE1vZGlmaWVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpczsgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGBJTkVUYCBkZXBlbmRlbmN5IGlzIHBsYXlpbmcgYSByb2xlLCBidXQgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbiBoZXJlIGNlbnRlcnMgYXJvdW5kIGBNUFRDUGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiB0d2Vha2VkLCBhbmQgd2h5LiBXZSBoYXZlIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaGF2ZSBiZWVuIGFsdGVyZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIGFsdGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBsaXN0IGluY2x1ZGVzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLCBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCwgYG1wdGNwX21vdmVfc2tic2AsIGBfX21wdGNwX3JldHJhbnNgLCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBJdCBzZWVtcyBhIHByZXR0eSBicm9hZCByYW5nZSBvZiBhcmVhcyBoYXZlIGJlZW4gdG91Y2hlZC4KCk9rYXksIGxldCYjMzk7cyBzZWUsIGdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGZvciBzcGVjaWZpYyBjaGFuZ2VzIHRvIGBfX21wdGNwX3JldHJhbnNgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIFRoYXQmIzM5O2xsIHByb2JhYmx5IHRlbGwgbWUgdGhlIGJlc3Qgd2F5IGZvcndhcmQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWVuIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODUyPXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTEzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkxNDpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkxNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIG1vc3QgcHJvbWlzaW5nIHRhcmdldHMgZm9yIGZ1enppbmcuIFdlJiMzOTtyZSBsb29raW5nIGZvciBjb2RlIHBhdGhzIHRoYXQgYXJlIGR5bmFtaWMsIHRoYXQgdGFrZSBpbnB1dCwgYW5kIGFyZSB0aGVyZWZvcmUgc3VzY2VwdGlibGUgdG8gdW5leHBlY3RlZCBkYXRhLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgdGhlaXIgbmF0dXJlLCBsZXNzIGxpa2VseSB0byBvZmZlciB1cyBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMg4oCTIHRoZXkmIzM5O3JlIHByZWRpY3RhYmxlLiBTbywgbGV0JiMzOTtzIHNraXAgdGhvc2UuIFRoZSByZWFsIGdvbGQgaXMgaW4gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBvc2VkLCB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBzeXN0ZW0sIHdoZXJlIGV4dGVybmFsIGRhdGEgY2FuIGZsb3cgaW4uCgpMZXQmIzM5O3Mgc2VlLi4uICptcHRjcF9pbmNvbWluZ19vcHRpb25zKi4gQWgsIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub24tc3RhdGljKiBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE5vbi1zdGF0aWMsIEkgaW50ZXJwcmV0IHRoYXQgYXMgcG90ZW50aWFsbHkgZXhwb3NlZCwgcG90ZW50aWFsbHkgYWNjZXB0aW5nIGV4dGVybmFsIGlucHV0LiBUaGlzIGlzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHRoYXQgZGVzZXJ2ZXMgYSBjbG9zZXIgbG9vay4gSXQmIzM5O3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHRoZSBwcmVjaXNlIG5hdHVyZSBvZiBpdHMgaW5wdXQgYW5kIHByb2Nlc3NpbmcgbG9naWMuIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBmdXp6aW5nIGFuZCB3aGF0IEkgc2hvdWxkIGFpbSBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15ib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYG1wdGNwX3BtX2Noa19zdGFsZWAqKgoKUmlnaHQsIGBtcHRjcF9wbV9jaGtfc3RhbGVgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGF0IGltcGxpZXMgdGhpcyBmdW5jdGlvbiBoYXMgZXh0ZXJuYWwgbGlua2FnZSB3aXRoaW4gdGhlIE11bHRpUGF0aCBUQ1AgKE1QVENQKSBrZXJuZWwgbW9kdWxlLiBJdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGFuZCBjYWxsYWJsZSBmcm9tIG90aGVyIG1vZHVsZXMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBleHBvc2VkIGluIHRoZSBtb2R1bGUmIzM5O3Mgc3ltYm9sIHRhYmxlLiBUaGlzIHJhaXNlcyBhIGZldyBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnM6CgoqICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSWYgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBNUFRDUCBlY29zeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBNUFRDUCBmdW5jdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGRldGVybWluZSB3aG8mIzM5O3MgcmVseWluZyBvbiBpdHMgZXhpc3RlbmNlIGFuZCB3aGF0IHRob3NlIGV4dGVybmFsIHVzYWdlcyBhcmUuCiogICAqKkFQSSBEZXNpZ24gKGlmIGFueSk6KiogSXMgYG1wdGNwX3BtX2Noa19zdGFsZWAgbWVhbnQgdG8gYmUgYSBwYXJ0IG9mIGEgZGVmaW5lZCBNUFRDUCBBUEk/IElmIHNvLCBpcyB0aGlzIGEgKmdvb2QqIEFQST8gSXMgaXQgc3RhYmxlLCB3ZWxsLWRvY3VtZW50ZWQsIGFuZCBiYWNrd2FyZCBjb21wYXRpYmxlPwoqICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogSWYgaXQmIzM5O3MgZXhwb3NlZCwgYSBjYXJlZnVsIHJldmlldyBpcyBuZWNlc3NhcnkgdG8gc2VlIGlmIGl0IGNvdWxkIGJlIGNhbGxlZCB3aXRoIG1hbGljaW91cyBpbnRlbnQuIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdHMgaW5wdXRzIG9yIHJldHVybiB2YWx1ZT8KKiAgICoqTWFpbnRhaW5hYmlsaXR5IGFuZCBSZWZhY3RvcmluZzoqKiBJZiBpdCYjMzk7cyB3aWRlbHkgdXNlZCwgbWFraW5nIGNoYW5nZXMgdG8gaXRzIHNpZ25hdHVyZSBvciBiZWhhdmlvciBiZWNvbWVzIGEgYmlnZ2VyIGRlYWwuIFRoaXMgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBwb3RlbnRpYWxseSBpbXBvc2VzIHJlc3RyaWN0aW9ucyBvbiBmdXR1cmUgcmVmYWN0b3JpbmcgZWZmb3J0cyB3aXRoaW4gdGhlIE1QVENQIGNvZGUuIElmIGl0JiMzOTtzIG9ubHkgdXNlZCBpbnRlcm5hbGx5LCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBtYWtlIGl0IHN0YXRpYyB3aXRob3V0IGFmZmVjdGluZyBhbnlvbmUuIEkgd2lsbCBhbHNvIGhhdmUgdG8gY2hlY2sgaWYgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIGFuZCBpZiBpdCBpcywgdGhlIGNvZGUgdXNpbmcgaXQuCgpNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQmIzM5O3Mgbm9uLXN0YXRpYy4gVGhlIGFuc3dlciB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIE1QVENQIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyBpZiB0aGlzIGlzIGludGVudGlvbmFsIEFQSSBkZXNpZ24gb3IgYW4gYWNjaWRlbnQgd2lsbCBiZSBteSBnb2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz0xMDY5PW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtLmMtMTEwNS1cbm5ldC9tcHRjcC9wbS5jOjExMDY6dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wbS5jLTExMDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk3NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludGVybmFsIE5vdGVzIG9uIGBtcHRjcF9yZWxlYXNlX2NiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3BfcmVsZWFzZV9jYmAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5LCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgIGp1bXBzIG91dCBhdCBtZS4gVGhhdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdCwgd2hpY2gsIGdpdmVuIGl0cyBuYW1lLCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gdGhlIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBtb2R1bGUuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IGNhbiBiZSBhY2Nlc3NlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0JiMzOTtzIGRlc2lnbmVkIHRoaXMgd2F5LiBJdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGV4dGVybmFsbHksIHdoaWNoIGlzIHR5cGljYWwgZm9yIGludGVybmFsIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJdCYjMzk7cyBnb2luZyB0byBiZSBzb21ldGhpbmcgaGFuZGxpbmcgY2xlYW51cCBvciByZWxlYXNlIG9mIHJlc291cmNlcyB3aXRoaW4gdGhlIE1QVENQIHN0YWNrIGl0c2VsZiwgYW5kIHRoZSBzdGF0aWMgZGVjbGFyYXRpb24gZW5mb3JjZXMgdGhhdCBlbmNhcHN1bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9yZWxlYXNlX2NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9Mzc4MD12b2lkIF9fbXB0Y3BfY2hlY2tfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc5Mi0vKiBwcm9jZXNzZXMgZGVmZXJyZWQgZXZlbnRzIGFuZCBmbHVzaCB3bWVtICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzkzOnN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc5NC1cdF9fbXVzdF9ob2xkKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDE5Nj1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIwOS1cdC5yZWN2bXNnXHQ9IG1wdGNwX3JlY3Ztc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjEwOlx0LnJlbGVhc2VfY2JcdD0gbXB0Y3BfcmVsZWFzZV9jYixcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMTEtXHQuaGFzaFx0XHQ9IG1wdGNwX2hhc2gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRoaW5raW5nIFRocm91Z2ggTVBUQ1AgUmVsZWFzZSBDYWxsYmFja3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbywgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHJlZ2lzdGVyZWQgaW4gYG1wdGNwX3Byb3RgLCBnb3QgaXQuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHBsYWNlLCBpdCYjMzk7cyB0aGUgY29yZSBwcm90b2NvbCBoYW5kbGluZy4gTWFrZXMgc2Vuc2UuIEJ1dCBteSBtaW5kIGlzIGFscmVhZHkgd2FuZGVyaW5nIGEgYml0IGRlZXBlci4uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZmxvdywgdGhlIGVkZ2UgY2FzZXMuCgpOb3csIHdhaXQgYSBtaW51dGUuLi4gd2hhdCBhYm91dCBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gPyBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGUgcGljdHVyZT8gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBvdXQtb2Ytb3JkZXIgcGFja2V0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG11bHRpcGF0aCBzY2VuYXJpb3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIHR3byBpbnRlcnBsYXkuIFRoZSByZWxlYXNlIGNhbGxiYWNrIHNob3VsZCBwcm9iYWJseSBpbnRlcmFjdCB3aXRoIHRoYXQgb3V0LW9mLW9yZGVyIHF1ZXVlIG9yIGRlcGVuZCBvbiBpdCBkaXJlY3RseSB0byBwZXJmb3JtIHNvbWUgbmVjZXNzYXJ5IGhvdXNlLWtlZXBpbmcuIEFyZSB3ZSByZW9yZGVyaW5nIHN0dWZmIGJlZm9yZSByZWxlYXNlPyBBZnRlcj8gT3IgaXMgaXQgbW9yZSBzdWJ0bGUgdGhhbiB0aGF0PyBHb3R0YSBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfZGF0YV9xdWV1ZV9vZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yOTU9c3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMwNy0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMwODpzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00NDc9c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDczLVx0fSBlbHNlIGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDc0Olx0XHRtcHRjcF9kYXRhX3F1ZXVlX29mbyhtc2ssIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NzUtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBNUFRDUCBEYXRhIFF1ZXVlIGFuZCBSZXRyYW5zbWlzc2lvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gIHRoaW5nLiBJdCYjMzk7cyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgaW50ZXJuYWwgdG8gaXRzIG1vZHVsZSBvciBmaWxlLiBUaGF0JiMzOTtzIGdvb2QsIGtlZXBzIGl0IGNvbnRhaW5lZCBhbmQgYXZvaWRzIHBvdGVudGlhbCBuYW1pbmcgY29sbGlzaW9ucy4KCkJ1dCwgaGFuZyBvbi4uLiB3aGF0IGFib3V0IHRoZSBmdW5jdGlvbiBgX19tcHRjcF9yZXRyYW5zYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb2ZmLW9yZGVyIHF1ZXVlLiBJcyBpdCBhY2Nlc3Npbmcgb3IgbW9kaWZ5aW5nIHRoYXQgcXVldWU/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcHVycG9zZSBvZiB0aGF0IHJldHJhbnNtaXNzaW9uIGZ1bmN0aW9uIGluIHRoZSBNUFRDUCBzdGFjay4gSXMgaXQgaW52b2x2ZWQgd2l0aCBoYW5kbGluZyBsb3N0IHNlZ21lbnRzLCBvciBzaW1wbHkgc2NoZWR1bGluZyByZXRyYW5zbWlzc2lvbnM/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGlmIHRoaXMgYHN0YXRpY2AgbmF0dXJlIG9mIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2Agd2lsbCBwcmVzZW50IGFueSBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIGxpbWl0ZWQgdmlzaWJpbGl0eSBvciBhY2Nlc3MgZm9yIHJldHJhbnNtaXNzaW9ucyB0aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfcmV0cmFucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTI1MTM9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTQ3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjU0ODpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjU0OS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYzMj1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY4MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2ODI6XHRuZWVkX3B1c2ggPSAoZmxhZ3MgXHUwMDI2IE1QVENQX0NGX1BVU0gpIFx1MDAyNlx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODMtXHRpZiAoIWRpc3Bvc2VfaXQpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODUyPXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTEzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkxNDpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkxNS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0MC1cdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDE6XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0Mi1cdFx0ICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzExMz1zdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTAtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX1dPUktfUlRYLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE1MTpcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTItXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzc5Mz1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODI1LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4MjY6XHRcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjctXHRcdGlmIChzcG9vbF9ibCBcdTAwMjZcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaWdnaW5nIGludG8gdGhlIE1QVENQIFJldHJhbnNtaXNzaW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCBoZXJlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGhvdyBkYXRhIHJldHJhbnNtaXNzaW9uIGlzIHRyaWdnZXJlZCBpbiB0aGUgTVBUQ1Agc3RhY2suIEl0IHNlZW1zIHRoYXQgdGhlIGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgZnVuY3Rpb25zIGJvdGggbGVhZCB0byBhIGNhbGwgdG8gYF9fbXB0Y3BfcmV0cmFuc2AuIFRoYXQmIzM5O3MgdGhlIGNvcmUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGVsc2UgZG8gd2Ugc2VlIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSByZXRyYW5zbWlzc2lvbj8gTGV0JiMzOTtzIGNoZWNrIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYC4gQWgsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtcHRjcF9zdWJmbG93X2Rpc2NhcmRfZGF0YWAgYW5kIGEgZmV3IG90aGVyIHBsYWNlcy4gSW50ZXJlc3RpbmcuIENvdWxkIHRoaXMgcGxheSBhIHJvbGUgaW4gaG93IHRoZSBzdGFjayBoYW5kbGVzIGluY29taW5nIGRhdGEgZHVyaW5nIGEgcmV0cmFuc21pc3Npb24gZXZlbnQ/IEl0JiMzOTtzIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBzZWUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgSSByZW1lbWJlciB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX21wdGNwX3JldHJhbnNgIGFzIHdlbGwuIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQmIzM5O3MgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIHJldHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byBzdGFsZSBwYXRoIG1hbmFnZW1lbnQgb3Igc29tZXRoaW5nIHNpbWlsYXIuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBoYXBwZW5zIGluIGBtcHRjcF9yZWN2bXNnYC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIHNpZGUgZHVyaW5nIHJldHJhbnNtaXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MjEzMD1zdGF0aWMgdm9pZCBtcHRjcF9lYXRfcmVjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDAtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTQxOnN0YXRpYyBpbnQgX19tcHRjcF9yZWN2bXNnX21za3Eoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQyLVx0XHRcdFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNDc9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM2Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNjg6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM2OS1cdFx0XHQgaW50IGZsYWdzKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDAtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDAxOlx0XHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDItXHRcdFx0XHRcdFx0ICBjb3BpZWQsIFx1MDAyNnRzcywgXHUwMDI2Y21zZ19mbGFncyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA4LVx0LmlvY3RsXHRcdD0gbXB0Y3BfaW9jdGwsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjA5Olx0LnJlY3Ztc2dcdD0gbXB0Y3BfcmVjdm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMTAtXHQucmVsZWFzZV9jYlx0PSBtcHRjcF9yZWxlYXNlX2NiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipNUFRDUCBFbnRyeSBQb2ludCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNUFRDUCBjb2RlLiBGcm9tIHdoYXQgSSByZWNhbGwsIGBtcHRjcF9yZWN2bXNnYCBpcyBkZWZpbml0ZWx5IGEga2V5IHN0YXJ0aW5nIHBvaW50LCBhbmQgSSB0aGluayBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgYW5vdGhlciBzb2xpZCBlbnRyeSBwb2ludCB0byBjb25zaWRlci4gSSBhbHNvIHJlY2FsbCB0aGUgYG1wdGNwX3dvcmtlcmAgZnVuY3Rpb24gLSBhbHRob3VnaCBpdCYjMzk7cyBsaWtlbHkgYSB3b3JrcXVldWUgZnVuY3Rpb24gYW5kIG5vdCBhICpkaXJlY3QqIGVudHJ5IHBvaW50IHBlciBzZSwgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gdGhlIG92ZXJhbGwgZmxvdywgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYG1wdGNwX2luY29taW5nX29wdGlvbnNgLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lJiMzOTtzIGRlZmluZWQgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSByZW1lbWJlciB0aGlzIGFyZWEgYmVpbmcgcHJldHR5IGNvbXBsZXgsIGJ1dCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgKnNob3VsZCogZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byBob3cgb3B0aW9ucyBhcmUgaGFuZGxlZCB3aGVuIGRhdGEgYXJyaXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xMTE2PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQxLVxubmV0L21wdGNwL29wdGlvbnMuYzoxMTQyOlx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xubmV0L21wdGNwL29wdGlvbnMuYy0xMTQzLVx0aWYgKGFmdGVyNjQobXNrLVx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZmluZGluZyB0aGUgY2FsbHMgdG8gYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqVHJhY2luZyB0aGUgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyBGdW5jdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIGJlaW5nIHVzZWQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgY29kZSB0aGF0IGhhbmRsZXMgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIG9wdGlvbiBuZWdvdGlhdGlvbi4gSSBrbm93IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhIGtleSBmdW5jdGlvbiBmb3IgcGFyc2luZyBhbmQgaGFuZGxpbmcgaW5jb21pbmcgTVBUQ1Agb3B0aW9ucy4gU28sIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBncmFzcCBob3cgdGhlIE1QVENQIHN0YWNrIHByb2Nlc3NlcyB0aGVzZSBpbmNvbWluZyBtZXNzYWdlcy4KCk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2smIzM5O3MgZW50cnkgcG9pbnRzLiBJJiMzOTtkIGZpcnN0IGxvb2sgYXQgdGhlIHVzdWFsIHN1c3BlY3RzOiBgaW5ldF9yY3Zfc2tiYCBvciBpdHMgTVBUQ1Atc3BlY2lmaWMgY291bnRlcnBhcnRzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocywgbGlrZWx5IGludm9sdmluZyB0aGUgcmF3IHNvY2tldCBoYW5kbGluZywgb3IgZXZlbiBiZXR0ZXIsIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0sIHdoZXJlIHN1Y2ggb3B0aW9ucyBtaWdodCBnZXQgcHJlcHJvY2Vzc2VkLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGhvb2tzIG9yIGNhbGxiYWNrcyB0aGF0IGNvdWxkIHRyaWdnZXIgb3B0aW9uIHByb2Nlc3NpbmcuCgpJIG5lZWQgdG8gc2VlIGhvdyB0aGUgTVBUQ1Agc3RhY2sgaW50ZXJjZXB0cyBhbmQgcHJvY2Vzc2VzIGluY29taW5nIGRhdGEsIGVzcGVjaWFsbHkgdGhlIHBhcnRzIGNvbmNlcm5lZCB3aXRoIG9wdGlvbiBwYXJzaW5nLiBUaGF0JiMzOTtzIG15IG1haW4gYXJlYSBvZiBmb2N1cy4gSeKAmWxsIHN0YXJ0IGJ5IHVzaW5nIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiBNUFRDUCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdG8gZ3VpZGUgbXkgc2VhcmNoLiBJIHdvdWxkIGJlIHVzaW5nIGBncmVwYCwgYGNzY29wZWAsIG9yIG15IElERSYjMzk7cyBzeW1ib2wgbG9va3VwIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgaW52b2tlZCwgYW5kIHRoZW4gYW5hbHl6aW5nIGVhY2ggY2FsbCBzaXRlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIE1QVENQIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGRhdGEgdHJhbnNmZXIgZmxvdy4gSSYjMzk7bSB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBhbnkgZnVuY3Rpb24gY2FsbHMgYWZ0ZXIgc29ja2V0IGNyZWF0aW9uLCBhbmQgc3BlY2lmaWNhbGx5IHRob3NlIHdoZXJlIG9wdGlvbnMgYXJlIGV4YW1pbmVkIG9uIGluY29taW5nIHBhY2tldHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoYXQgZnVuY3Rpb24sIGFuZCB3aGF0IGl0cyByb2xlIGlzIGluIHRoZSBNUFRDUCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xMTE2PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQxLVxubmV0L21wdGNwL29wdGlvbnMuYzoxMTQyOlx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xubmV0L21wdGNwL29wdGlvbnMuYy0xMTQzLVx0aWYgKGFmdGVyNjQobXNrLVx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIG15IGV4cGVydGlzZToKCioqRXhwYW5kaW5nIHRoZSBTY29wZSBvZiBNeSBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgd2FzIGluaXRpYWxseSBmb2N1c2VkIG9uIGBuZXQvbXB0Y3AvYCBmb3IgdGhhdCBncmVwLCBidXQgdGhhdCYjMzk7cyBwb3RlbnRpYWxseSB0b28gbmFycm93LiBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIHRvIGVuY29tcGFzcyB0aGUgbGlrZWx5IGFyZWFzIHdoZXJlIHRoaXMgY291bGQgYmUgaGFuZGxlZCBhdCBhIGxvd2VyIGxldmVsIG9yIGluIGEgcmVsYXRlZCBmdW5jdGlvbi4gU2hvdWxkIEkgY2hlY2sgYG5ldC9pcHY0L2AgYW5kIGBuZXQvaXB2Ni9gPyBUaG9zZSBhcmUgdGhlIGNvcmUgcHJvdG9jb2wgc3RhY2tzLCBzbyBpdCYjMzk7cyBlbnRpcmVseSBwb3NzaWJsZSB0aGUgY3JpdGljYWwgbG9naWMgcmVzaWRlcyB0aGVyZS4gT3IgcGVyaGFwcyBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1QVENQIHN1YmZsb3dzLCBpbiB3aGljaCBjYXNlIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCBpcyB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBhbmQgZXhoYXVzdCB0aGUgcGxhdXNpYmxlIGxvY2F0aW9ucyBmb3IgdGhpcyBpc3N1ZS4gVGhpcyBmZWVscyBsaWtlIEkgbWlnaHQgaGF2ZSBqdW1wZWQgdGhlIGd1biB3aXRoIHRoZSBmaXJzdCBncmVwLiBJIG5lZWQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ2NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogQSBgZ3JlcGAgU3RyYXRlZ3kqKgoKQWxyaWdodCwgSSYjMzk7bSBmYWNpbmcgYSBwcm9ibGVtIHdoZXJlIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZy4gSXQgY291bGQgYmUgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsLCBhIHZhcmlhYmxlIGRlZmluaXRpb24sIGEgcGFydGljdWxhciBzdHJpbmcgbGl0ZXJhbCwgb3IgbWF5YmUgZXZlbiBqdXN0IGEgcGF0dGVybiBvZiBjb2RlLiBUaGUgcHJvYmxlbSBpcywgSSBkb24mIzM5O3Qga25vdyAqZXhhY3RseSogd2hlcmUgaXQgbGl2ZXMgd2l0aGluIHRoaXMgY29kZWJhc2UuIEl0JiMzOTtzIGEgbGFyZ2UgcHJvamVjdCwgYW5kIG1hbnVhbGx5IHNlYXJjaGluZyB0aHJvdWdoIGZpbGVzIG9uZSBieSBvbmUgd291bGQgYmUgaW5zYW5lbHkgaW5lZmZpY2llbnQgYW5kIHByb25lIHRvIGVycm9yLgoKTXkgaW5zdGluY3QsIGFzIGFsd2F5cywgbGVhbnMgdG93YXJkcyBhdXRvbWF0aW9uIGFuZCBlZmZpY2llbmN5LiBJbnN0ZWFkIG9mIHRoYXQgYnJ1dGUtZm9yY2UgbWFudWFsIGFwcHJvYWNoLCBJIGltbWVkaWF0ZWx5IHRoaW5rLCAqYGdyZXBgIGlzIHRoZSB0b29sIGZvciB0aGUgam9iKi4KCkkmIzM5O20gcGljdHVyaW5nIG15c2VsZiBydW5uaW5nIGBncmVwYC4uLiBhbmQgaW1tZWRpYXRlbHkgSSBrbm93IEkgbmVlZCB0byBzcGVjaWZ5IHRoZSBzZWFyY2ggYWNyb3NzIHRoZSAqZW50aXJlKiBkaXJlY3RvcnkgdHJlZS4gSSBuZWVkIHRvIGNhc3QgYSB3aWRlIG5ldCB0byBlbnN1cmUgSSBkb27igJl0IG1pc3MgYW55IHBvdGVudGlhbCBvY2N1cnJlbmNlcywgd2hlcmV2ZXIgdGhleSBtaWdodCBiZSBoaWRkZW4uIFNvLCB0aGUgbWVudGFsIGltYWdlIGlzIG9mIHJ1bm5pbmcgYSByZWN1cnNpdmUgYGdyZXBgIGFjcm9zcyB0aGUgZW50aXJlIHByb2plY3Qgc3RydWN0dXJlLiBUaGlzIGlzIHRoZSBvcHRpbWFsIGFwcHJvYWNoIGZvciBhIGNvbXByZWhlbnNpdmUgc2VhcmNoOyBJIGNhbiByZWx5IG9uIGBncmVwYCB0byBxdWlja2x5IHNjYW4gYWxsIGZpbGVzLCBkaXJlY3RvcmllcywgYW5kIHN1YmRpcmVjdG9yaWVzLiBUaGlzIHdheSBJIGNhbiBmaW5kIHRoZSBpbmZvcm1hdGlvbiBpbiBhIHJlbGF0aXZlbHkgc2hvcnQgdGltZWZyYW1lIGFuZCBnZXQgb24gd2l0aCB0aGUgcmVhbCB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9pbmNvbWluZ19vcHRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L21wdGNwLmg9MTU2PWludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE1OC1cdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNTk6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9tcHRjcC5oLTE2MC1cbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI2Nj1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMjcyLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNzM6c3RhdGljIGlubGluZSBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzQtXHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00ODg0PXZvaWQgdGNwX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkwLVx0LyogbXB0Y3AgY2FuJiMzOTt0IHRlbGwgdXMgdG8gaWdub3JlIHJlc2V0IHBrdHMsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODkxOlx0ICogc28ganVzdCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkuXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkyLVx0ICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkzLVx0aWYgKHNrX2lzX21wdGNwKHNrKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ4OTQ6XHRcdG1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODk1LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2MTYtXHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU2MTc6XHRpZiAoc2tfaXNfbXB0Y3Aoc2spIFx1MDAyNlx1MDAyNiAhbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKSkge1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNTYxOC1cdFx0X19rZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTUyPXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzM3OS1cdFx0XHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjczODA6XHRcdFx0aWYgKHNrX2lzX21wdGNwKHNrKSBcdTAwMjZcdTAwMjYgIW1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYikpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MzgxLVx0XHRcdFx0Z290byBkaXNjYXJkO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTExNj1zdGF0aWMgdm9pZCBhY2tfdXBkYXRlX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE0MS1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE0MjpcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE0My1cdGlmIChhZnRlcjY0KG1zay1cdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTM9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIxLSAqL1xubmV0L21wdGNwL29wdGlvbnMuYzoxMjIyOmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTczMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTVBUQ1AgT3B0aW9uIEhhbmRsaW5nIGluIHRoZSBOZXR3b3JrIFN0YWNrKioKClJpZ2h0LCBzbyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgdHJpZ2dlcmVkIGRpcmVjdGx5IGZyb20gdGhlIGNvcmUgVENQIGRhdGEgcGF0aCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdGNwX2RhdGFfcXVldWVgIGFuZCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYC4gVGhhdCBpbnN0YW50bHkgY29uZmlybXMgaXRzIGltcG9ydGFuY2UgYW5kIHJlYWNoYWJpbGl0eSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrJiMzOTtzIHByb2Nlc3Npbmcgb2YgaW5jb21pbmcgc2VnbWVudHMuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbGwgdGhlIHBhdGhzIHRoYXQgY2FuIHBvc3NpYmx5IGJlIHRha2VuLiAKCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgb24gdGhlIGBtcHRjcF9wbV9jaGtfc3RhbGVgIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgZm9yIHN0YWxlIGZsb3dzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfcG1fY2hrX3N0YWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTEwNjk9bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMTA1LVxubmV0L21wdGNwL3BtLmM6MTEwNjp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTEwNy17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjkxND1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5MjItXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTIzOlx0bXB0Y3BfcG1fY2hrX3N0YWxlKG1zayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTI0LVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTExMDY9Ym9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMTA4LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpyZW0pO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTEwOTp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMTAtdm9pZCBtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgc2VydmVyX3NpZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipUcmFjaW5nIHRoZSBNUFRDUCBDb250cm9sIEZsb3cqKgoKUmlnaHQsIHNvIGBtcHRjcF9wbV9jaGtfc3RhbGVgIOKAkyB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiDigJMgaXMgY2FsbGVkIGZyb20gYF9fbXB0Y3BfcmV0cmFuc2AuIE5vdGVkLiBOb3csIHdoZXJlIGRvZXMgYF9fbXB0Y3BfcmV0cmFuc2AgZml0IGludG8gdGhlIHBpY3R1cmU/IEFoLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSB0d28ga2V5IHBsYWNlczogYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gVGhhdCBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIHJldHJhbnNtaXNzaW9uIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTVAtVENQIHdvcmtlciB0aHJlYWRzIGFuZCBjb25uZWN0aW9uIHJlbGVhc2UgcHJvY2VkdXJlcy4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGF0IGhvdyB1c2VyIHNwYWNlIGludGVyYWN0cy4gSSBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBjb3JlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gZnVuY3Rpb25zIGFyZSBjYWxsZWQuIGBtcHRjcF9yZWN2bXNnYC4uLiBZZXMsIGFic29sdXRlbHksIHRoYXQgb25lJiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gQ2hlY2suIEFuZCB3aGF0IGFib3V0IGBtcHRjcF9zZW5kbXNnYD8gVGhhdCYjMzk7cyBnb2luZyB0byBiZSBrZXkgZm9yIGhvdyBkYXRhIGdldHMgaW50byB0aGUga2VybmVsIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIEkgd2lsbCB3YW50IHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBteSBzdXNwZWN0ZWQgYXJlYSBvZiBjb25jZXJuLiBFeGNlbGxlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMjU1PW1wdGNwX2NhcnZlX2RhdGFfZnJhZyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjcyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTI3MzpzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEyNzQtXHRpbnQgbXNzX25vdztcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMzY4PXN0YXRpYyB2b2lkIG1wdGNwX3VwZGF0ZV9pbmZpbml0ZV9tYXAoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzg4LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTM4OTpzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2dfZnJhZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzkwLVx0XHRcdCAgICAgIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTM5MTpcdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTM5Mi17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTUyNy1cdFx0bXB0Y3BfdXBkYXRlX2luZmluaXRlX21hcChtc2ssIHNzaywgbXBleHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTUyODpcdHRyYWNlX21wdGNwX3NlbmRtc2dfZnJhZyhtcGV4dCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTI5LVx0bXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cdTAwM2VyZWxfd3JpdGVfc2VxICYjNDM7PSBjb3B5O1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1ODE9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjU2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTY1NzpzdGF0aWMgdm9pZCBtcHRjcF9wdXNoX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE2NTgte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE2OTk9c3RhdGljIGludCBfX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE3MDA6XHRcdFx0XHQgIHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gKmluZm8pXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzAxLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzEyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTcxMzpcdFx0XHRyZXQgPSBtcHRjcF9zZW5kbXNnX2ZyYWcoc2ssIHNzaywgZGZyYWcsIGluZm8pO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTcxNC1cdFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE3NDM9dm9pZCBfX21wdGNwX3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzQ2LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE3NDc6XHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzQ4LVx0XHRcdFx0LmZsYWdzID0gZmxhZ3MsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTgxMT1zdGF0aWMgdm9pZCBfX21wdGNwX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBmaXJzdClcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODEzLVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE4MTQ6XHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODE1LVx0XHQuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE4Nzg9c3RhdGljIGludCBtcHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4NzktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxODgwOnN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4ODEtXHRcdFx0XHQgIHNpemVfdCBsZW4sIGludCAqY29waWVkX3N5bilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xOTc0PXN0YXRpYyB2b2lkIG1wdGNwX3Jwc19yZWNvcmRfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTg3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTk4ODpzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTg5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMDA3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjAwODpcdFx0cmV0ID0gbXB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzaywgbXNnLCBsZW4sIFx1MDAyNmNvcGllZF9zeW4pO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjAwOS1cdFx0Y29waWVkICYjNDM7PSBjb3BpZWRfc3luO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTI9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NTQte1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg1NTpcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NTYtXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4OTEtXHRcdFx0d2hpbGUgKGluZm8uc2VudCBcdTAwM2MgaW5mby5saW1pdCkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg5MjpcdFx0XHRcdHJldCA9IG1wdGNwX3NlbmRtc2dfZnJhZyhzaywgc3NrLCBkZnJhZywgXHUwMDI2aW5mbyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODkzLVx0XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDE5Nj1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIwNi1cdC5kZXN0cm95XHQ9IG1wdGNwX2Rlc3Ryb3ksXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjA3Olx0LnNlbmRtc2dcdD0gbXB0Y3Bfc2VuZG1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDgtXHQuaW9jdGxcdFx0PSBtcHRjcF9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb246IGBtcHRjcF9zZW5kbXNnYCBhbmQgYG1wdGNwX3JlY3Ztc2dgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBiZWdpbnMgYW5kIGVuZHMgZnJvbSB0aGUgYXBwbGljYXRpb24mIzM5O3MgcGVyc3BlY3RpdmUuIEZyb20gdGhlcmUsIEkgc2VlIHRoZSByaXBwbGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2VzLgoKVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgc2VlbXMgdG8gYmUgaW4gc2V2ZXJhbCBrZXkgYXJlYXMuIEZpcnN0LCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIHdoaWNoIGlzIGNydWNpYWwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIuIFdlIGtub3cgaG93IHRoYXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiBiYXNlZCBvbiByZWNlaXZlZCBvcHRpb25zLgoKVGhlbiB0aGVyZSYjMzk7cyBgX19tcHRjcF9yZXRyYW5zYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBhcyBpdCYjMzk7cyB0cmlnZ2VyZWQgZnJvbSB0aGUgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBwYXRocy4gU28sIGl0JiMzOTtzIGludm9sdmVkIGluIGhhbmRsaW5nIHJldHJhbnNtaXNzaW9ucyBhbmQgdGhlIHJlbGVhc2UgcHJvY2VzcyBvZiByZXNvdXJjZXMuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGBfX21wdGNwX3JldHJhbnNgLCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoaXMgc3VnZ2VzdHMgYSBmb2N1cyBvbiBpbXByb3ZpbmcgdGhlIHN0YWxlIHBhdGggbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGluIHRoZSByZXRyYW5zbWlzc2lvbiBjb250ZXh0LgoKSSBzZWUgdGhhdCBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gIGlzIGFsc28gYmVpbmcgdG91Y2hlZCwgYW5kIHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fbXB0Y3BfbW92ZV9za2JgLiBgX19tcHRjcF9tb3ZlX3NrYmAgaXRzZWxmIGdldHMgY2FsbGVkIGZyb20gdHdvIGNyaXRpY2FsIGZ1bmN0aW9uczogYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgYW5kIGBfX21wdGNwX21vdmVfc2tic2AuIFRoaXMgcG9pbnRzIHRvd2FyZCBjaGFuZ2VzIGluIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIG1vdmVtZW50IG9mIFNvY2tldCBCdWZmZXIgKHNrYikgc3RydWN0dXJlcyBiZXR3ZWVuIHN1YmZsb3dzIGFuZCB3aXRoaW4gdGhlIG92ZXJhbGwgTVBUQ1AgY29ubmVjdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gb3V0LW9mLW9yZGVyIGRhdGEuCgpGaW5hbGx5LCBgX19tcHRjcF9hZGRfYmFja2xvZ2AgaXMgbW9kaWZpZWQsIHdoaWNoIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBtcHRjcF9hZGRfYmFja2xvZ2AuIEkmIzM5O2xsIGhhdmUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24gc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9hZGRfYmFja2xvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTczND1zdGF0aWMgdm9pZCBtcHRjcF9kc3NfY29ycnVwdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc0MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc0MjpzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc0My1cdFx0XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Nzk1PXN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTg0Mi1cdFx0XHR9IGVsc2Uge1xubmV0L21wdGNwL3Byb3RvY29sLmM6ODQzOlx0XHRcdFx0X19tcHRjcF9hZGRfYmFja2xvZyhzaywgc3ViZmxvdywgc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTg0NC1cdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjY2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipUcmFjaW5nIHRoZSBNUFRDUCBEYXRhIEZsb3cqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cmFja2luZyB0aGUgZGF0YSBmbG93IGluIE1QVENQLCBhbmQgSSYjMzk7dmUgemVyb2VkIGluIG9uIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSBgX19tcHRjcF9hZGRfYmFja2xvZ2AgZ2V0cyBpbnZva2VkLiBUaGUga2V5IHF1ZXN0aW9uIG5vdyBiZWNvbWVzLCAqd2hlcmUqIGRvZXMgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgaXRzZWxmIGdldCBjYWxsZWQ/IFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGhvdyB0aGUgU0tCcyBhcmUgbW92aW5nIGFuZCB3aGVyZSB0aGUgYmFja2xvZyBpcyBhY3R1YWxseSBiZWluZyBtYW5hZ2VkLiBQaW5wb2ludGluZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZsb3cgaW4gTVBUQ1AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTc0Mj1zdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03OTQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3OTU6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03OTYtXHRcdFx0XHRcdCAgIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgb3duX21zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NTk9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk2My1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk2NDpcdG1vdmVkID0gX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCB0cnVlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk2NS1cdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTAwNT12b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMjMtXHR9IGVsc2Uge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTAyNDpcdFx0X19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCBmYWxzZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDI1LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkxMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoIG9mIFByb3Bvc2VkIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGBtcHRjcF9kYXRhX3JlYWR5YCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgYnkgVENQIGRhdGEgcmVhZHkgY2FsbGJhY2tzLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG1lYW5zIGFueSBjaGFuZ2VzIGhlcmUgd2lsbCBsaWtlbHkgaGF2ZSBhIHByZXR0eSBicm9hZCBpbXBhY3QsIHRvdWNoaW5nIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBzdGFuZGFyZCBUQ1AgYW5kIE1QVENQIG9wZXJhdGlvbnMuIEl0IG1ha2VzIHNlbnNlIHRvIGZvY3VzIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHByb3BhZ2F0aW9uIG9mIHRob3NlIGVmZmVjdHMuCgpSaWdodCwgbGV0IG1lIHN1bW1hcml6ZSB0aG9zZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3Bfc2VuZG1zZ2AsIGFuZCB0aGVuLCBvZiBjb3Vyc2UsIHRoZSBldmVyLWltcG9ydGFudCBgbXB0Y3BfZGF0YV9yZWFkeWAuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIGBtcHRjcF9kYXRhX3JlYWR5YCBpdHNlbGYgaXMgYSByZWFsbHkgYXR0cmFjdGl2ZSBlbnRyeSBwb2ludC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGV2ZXJ5dGhpbmcga2luZCBvZiBjb252ZXJnZXMuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBtcHRjcF9kYXRhX3JlYWR5YCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyB3aWxsIHRlbGwgbWUgaG93IGVhc2lseSBJIGNhbiBob29rIGludG8gdGhhdCByb3V0aW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz05Nzk9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA0LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTAwNTp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNi17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9OTYxPXN0YXRpYyBpbmxpbmUgdTY0IG1wdGNwX3N0YW1wKHZvaWQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTY1LVxubmV0L21wdGNwL3Byb3RvY29sLmg6OTY2OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmgtOTY3LWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1MDE9c3RhdGljIHZvaWQgc3ViZmxvd19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MjUtXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpIHtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTUyNjpcdFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUyNy1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE4Njk9c3RhdGljIHZvaWQgc3ViZmxvd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4MC1cdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSlcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg4MTpcdFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4Mi1cdGVsc2UgaWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2VycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzcxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOb24tU3RhdGljIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMgaW4gdGhlIE1QVENQIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYG1wdGNwX2RhdGFfcmVhZHlgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIHN5c3RlbWF0aWNhbGx5IHJldmlldyB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBmdWxseS4gTGV0JiMzOTtzIHNlZS4uLiBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBpcyBhbHNvIG5vbi1zdGF0aWMuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYWxzbyBub24tc3RhdGljLiBHb29kLCBJJiMzOTttIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIHBhdHRlcm4uCgpUaW1lIHRvIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGluIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdGhhdCBhcmUgbm9uLXN0YXRpYy4gQWgsIGxldCYjMzk7cyBzZWUsIGBtcHRjcF9wbV9jaGtfc3RhbGVgIGlzIGluIGBuZXQvbXB0Y3AvcG0uY2AgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2Ag4oCUIHRoYXQmIzM5O3MgaGVscGZ1bCBjb250ZXh0LiBPa2F5LCBoZXJlJiMzOTtzIG9uZSwgYF9fbXB0Y3BfcHVzaF9wZW5kaW5nYCBpcyBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLiBXYWl0Li4ubm8sIGBfX21wdGNwX3B1c2hfcGVuZGluZ2AgKndhc24mIzM5O3QqIG1vZGlmaWVkLCB0aGF0JiMzOTtzIGEgcmVsaWVmIQoKT2theSwgc3VtbWFyaXppbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYW5kIHRoZWlyIHN0YXRpYy1uZXNzLCB0aGUgcGF0Y2ggYWN0dWFsbHkgY2hhbmdlZDoKCiogICBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgKG5vbi1zdGF0aWMpCiogICBgbXB0Y3BfcG1fY2hrX3N0YWxlYCAobm9uLXN0YXRpYykKKiAgIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCAobm9uLXN0YXRpYykKKiAgIGBtcHRjcF9yZWxlYXNlX2NiYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYykKKiAgIGBfX21wdGNwX21vdmVfc2tiYCAoc3RhdGljKQoqICAgYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIChzdGF0aWMpCiogICBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKQoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk4PXN0YXRpYyB2b2lkIG1wdGNwX3RvdXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUxMi0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI1MTM6c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcwNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgRnVuY3Rpb24gU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIE1QVENQIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRyeWluZyB0byBuYWlsIGRvd24gaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBoYXBwZW5pbmcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgZm9yIGEgZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zZW5kbXNnYC4KClRoZW4gaXQgY2xpY2tlZDogYG1wdGNwX2RhdGFfcmVhZHlgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AgYXJlbiYjMzk7dCAqZGlyZWN0bHkqIG1vZGlmaWVkIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkmIzM5O3JlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBjYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMuIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIHNpbmNlIHRoZXkgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLgoKQSBxdWljayBjaGVjayBjb25maXJtcyBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AgaXMgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIHZpc2libGUsIHNvIEkga25vdyBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci4gU2FtZSB3aXRoIGBtcHRjcF9wbV9jaGtfc3RhbGVgLiBOb3cgSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgdG8gYG1wdGNwX3dvcmtlcmAgd2hpY2ggaXMgdGhlIGJhY2tncm91bmQgcHJvY2Vzc2luZyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfd29ya2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MTA5MT1ib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwOTUtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDk2Olx0LyogR2V0IGEgcmVmZXJlbmNlIG9uIHRoaXMgc29ja2V0LCBtcHRjcF93b3JrZXIoKSB3aWxsIHJlbGVhc2UgaXQuXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDk3Olx0ICogQXMgbXB0Y3Bfd29ya2VyKCkgbWlnaHQgY29tcGxldGUgYmVmb3JlIHVzLCB3ZSBjYW4gbm90IGF2b2lkXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDk4LVx0ICogYSBzb2NrX2hvbGQoKS9zb2NrX3B1dCgpIGlmIHNjaGVkdWxlX3dvcmsoKSByZXR1cm5zIGZhbHNlLlxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2MzI9c3RhdGljIHZvaWQgX19tcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjctXHQgICAgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCBzb2NrX2ZsYWcoc3NrLCBTT0NLX0RFQUQpKSkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2ODpcdFx0LyogZW5zdXJlIGxhdGVyIGNoZWNrIGluIG1wdGNwX3dvcmtlcigpIHdpbGwgZGlzcG9zZSB0aGUgbXNrICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY5LVx0XHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI3OTk9c3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjgzOS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4NDA6XHQvKiB0aGUgY2FsbGluZyBtcHRjcF93b3JrZXIgd2lsbCBwcm9wZXJseSBkZXN0cm95IHRoZSBzb2NrZXQgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NDEtXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMwNzc9c3RhdGljIHZvaWQgbXB0Y3BfZG9fZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTEyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzExMzpzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzExNC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE2Mj1zdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE2OS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzE3MDpcdElOSVRfV09SSyhcdTAwMjZtc2stXHUwMDNld29yaywgbXB0Y3Bfd29ya2VyKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNzEtXHRtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1QVENQIEZ1bmN0aW9uIENhbGxzIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF93b3JrZXJgIGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEl0JiMzOTtzIGFsc28gc3RhdGljLCB3aGljaCBtZWFucyBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBlaXRoZXIgZGlyZWN0bHkgbW9kaWZ5IG9yIGNhbGwgaXQuIFJpZ2h0LCBzbywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhvc2UgZnVuY3Rpb25zIGFyZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIEFoLCBhbmQgaXQgbG9va3MgbGlrZSBgbXB0Y3BfcmVjdm1zZ2AgYW5kIGBtcHRjcF9zZW5kbXNnYCBjYWxsIGBtcHRjcF9yZWxlYXNlX2NiYCBpbmRpcmVjdGx5IHRocm91Z2ggYHJlbGVhc2Vfc29jaygpYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSYjMzk7cmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBNUFRDUCBzb2NrZXRzLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIEkgc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRob3NlIGZpdmUgZnVuY3Rpb25zOiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zZW5kbXNnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuCgpSaWdodCwgdGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIGBNUFRDUGAgaXMgdGhlIG1haW4gb25lLCBvYnZpb3VzbHkuIEFuZCBgTVBUQ1BfSVBWNmAgd291bGQgYmUgYSBnb29kIG9uZSB0byBoYXZlIGFzIHdlbGwsIGRlZmluaXRlbHkuIEFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZSBhZ2FpbiB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRcbiAgIDI6XHRjb25maWcgTVBUQ1BcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBjb25uZWN0aW9ucyBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBtdWx0aXBsZVxuICAxMDpcdFx0ICBzdWJmbG93cyBpbiBvcmRlciB0byB1dGlsaXplIG11bHRpcGxlIG5ldHdvcmsgcGF0aHMuIEVhY2ggc3ViZmxvd1xuICAxMTpcdFx0ICB1c2VzIHRoZSBUQ1AgcHJvdG9jb2wsIGFuZCBUQ1Agb3B0aW9ucyBjYXJyeSBoZWFkZXIgaW5mb3JtYXRpb24gZm9yXG4gIDEyOlx0XHQgIE1QVENQLlxuICAxMzpcdFxuICAxNDpcdGlmIE1QVENQXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbiAgMTg6XHRcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgTVBUQ1BfSVBWNlxuICAyMTpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIElQVjY9eVxuICAyMzpcdFx0ZGVmYXVsdCB5XG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcbiAgMjY6XHRcdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI3Olx0XHRkZXBlbmRzIG9uIEtVTklUXG4gIDI4Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAyOTpcdFx0aGVscFxuICAzMDpcdFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXG4gIDMxOlx0XHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxuICAzMjpcdFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAzMzpcdFxuICAzNDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxuICAzNTpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxNDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9ucywgYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGUgY2hhbmdlcy4gQmV5b25kIHRoZXNlIGNvbmZpZ3MsIHdoYXQgZWxzZSBoYXMgYmVlbiB0b3VjaGVkPyBMZXQgbWUgZG8gYSBxdWljayBhdWRpdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLgoKQWxyaWdodCwgYG1wdGNwX3BtX2Noa19zdGFsZWAgaXMgaW4gYG5ldC9tcHRjcC9wbS5jYC4gSSYjMzk7bGwgd2FudCB0byByZXZpc2l0IHRoYXQgb25lLiBUaGVuIHRoZXJlJiMzOTtzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AgYW5kIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLgoKSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBtcHRjcF9wbV9jaGtfc3RhbGVgOyB0aGF0IG9uZSBzZWVtcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3BtX2Noa19zdGFsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTEwNjk9bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMTA1LVxubmV0L21wdGNwL3BtLmM6MTEwNjp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTEwNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjIzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNdWx0aVBhdGggVENQIHN0YWNrIGhhbmRsZXMgcmV0cmFuc21pc3Npb25zIG9uIHN1YmZsb3dzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gYWNxdWlyZSB0aGUgY291bnQuIFRoaXMgaXMgYSBjcnVjaWFsIG1ldHJpYyB3aGVuIGNvbnNpZGVyaW5nIGNvbmdlc3Rpb24gY29udHJvbCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHJldHVybmVkIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkgcmVwcmVzZW50cyB0aGUgc3RhdGUgYW5kIGlmIGl0IGlzIHVzZWQgY29ycmVjdGx5IGluIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHJlbGF0ZWQgdG8gdGhlIGNvdW50IHVwZGF0ZSBhbmQgcmV0cmlldmFsPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gcGlucG9pbnQgd2hlcmUsIHdoZW4sIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk4PXN0YXRpYyB2b2lkIG1wdGNwX3RvdXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUxMi0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI1MTM6c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk4NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBzaXR1YXRpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5ICppbiogdGhpcyB0aGluZy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgaXQgcmVsYXRlZCB0byB0aGUgY29yZSBNUC1UQ1AgbmVnb3RpYXRpb24gb3IgbW9yZSBkb3duc3RyZWFtPyBXaGF0IGtpbmQgb2Ygb3B0aW9ucyBhcmUgd2UgdGFsa2luZyBhYm91dCBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc3RhbmRhcmQgTVAtVENQIG9wdGlvbnMgbGlrZSBgTVBfQ0FQQUJMRWAsIGBNUF9KT0lOYCwgZXRjLiwgb3Igc29tZXRoaW5nIG1vcmUgYXBwbGljYXRpb24tc3BlY2lmaWMgdGhhdCBtaWdodCBiZSBmbG93aW5nIHRocm91Z2ggdGhlIE1QVENQIGxheWVyLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHBhcnNpbmcgYW5kIHZhbGlkYXRpb24uIElzIHRoZXJlIGEgZGVmaW5lZCBzdHJ1Y3R1cmU/IEFyZSB0aGVyZSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgSSBzaG91bGQgYmUgbG9va2luZyBmb3I/IFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgY291bGQgYmUgY3J1Y2lhbCBmb3Igb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBzbyBJIGFtIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZGV0YWlscy4gV2Ugc2hvdWxkIGNoZWNrIHRoaXMgdGhvcm91Z2hseS4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9MTExNj1zdGF0aWMgdm9pZCBhY2tfdXBkYXRlX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE0MS1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE0MjpcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE0My1cdGlmIChhZnRlcjY0KG1zay1cdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTM9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIxLSAqL1xubmV0L21wdGNwL29wdGlvbnMuYzoxMjIyOmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ5MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgbXB0Y3BfZGF0YV9yZWFkeWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYG1wdGNwX2RhdGFfcmVhZHlgLiBJdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGlzIGZ1bmN0aW9uIHNpdHMgaW4gdGhlIE1QVENQIGRhdGEgZmxvdy4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCB0cmlnZ2VycyBpdD8gV2hhdCBhcmUgdGhlIGNvbW1vbiBwaXRmYWxscyBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlciwgZ2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCB3ZSBhcmUgdHJvdWJsZXNob290aW5nPwoKSXMgaXQgcmVsYXRlZCB0byBhbnkgc3BlY2lmaWMgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbXM/IFdoYXQgaGFwcGVucyBpZiB0aGUgbmV0d29yayBjb25kaXRpb25zIGNoYW5nZSByYXBpZGx5PyBJcyBpdCBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiBkYXRhIGluIHRoZSBzdWJmbG93cywgb3IgY291bGQgdGhlcmUgYmUgYSBzdWJ0bGUgc3luY2hyb25pemF0aW9uIGlzc3VlIGx1cmtpbmc/IEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IHF1ZXN0aW9uOiBoYXZlIEkgY2hlY2tlZCB0aGUgb2J2aW91cz8gQW55IHJlY2VudCBjb2RlIGNoYW5nZXMgaW4gdGhlIGFyZWE/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgb3B0aW1pc2F0aW9ucyBwb3RlbnRpYWxseSBhZmZlY3RpbmcgaXQ/IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9OTc5PXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9ydHRfdXBkYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwMDU6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg2NgoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgTVBUQ1AgcGF0Y2g6CgoqKk1QVENQIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gaW50ZWdyYXRpbmcgdGhlc2Ugc3BlY2lmaWMgTVBUQ1AgZnVuY3Rpb25zIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgZm9yIGZ1enppbmc6IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCwgYG1wdGNwX2RhdGFfcmVhZHlgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIFRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgZGVhbGluZyB3aXRoIG1lbW9yeSBsaW1pdHMgYW5kIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQuJiMzNDsgV2UgKm5lZWQqIHRvIHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLgoKTm93LCBiZWZvcmUgd2UgbGF1bmNoLCBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlJiMzOTt2ZSBnb3QgYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gTm8gc3VycHJpc2VzIHRoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlLCB0aG91Z2guIEFoLCByaWdodC4gYElORVRgIGlzIGEgZ2l2ZW4sIGEgZm91bmRhdGlvbmFsIGRlcGVuZGVuY3kuIEFuZCwgb2YgY291cnNlLCBgSVBWNmAgaXMgcmVxdWlyZWQgaWYgYE1QVENQX0lQVjZgIGlzIGVuYWJsZWQuIEdvb2QuCgpGaW5hbGx5LCBJJiMzOTtsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byBwcmVzZW50IHRoZSBmdXp6aW5nIHJlc3VsdHMgaW4gYSBjbGVhciBhbmQgc3RydWN0dXJlZCB3YXkuIFdlIHdhbnQgdGhpcyB0byBiZSBlYXNpbHkgZGlnZXN0aWJsZSBmb3IgdGhlIHRlYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9jaGtfc3RhbGUmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgYWRkcyBuZXcgTUlCIGNvdW50ZXJzIGFuZCBtb2RpZmllcyBjb3JlIE1QVENQIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgX19tcHRjcF9yZXRyYW5zYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHN0YW5kYXJkIE1QVENQIHNvY2tldCBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIHJlY2VpdmUgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fY2hrX3N0YWxlJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGF0YV9yZWFkeSYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBtZW1vcnkgbGltaXRzLCBiYWNrbG9nIGRyb3BzLCBhbmQgcmV0cmFuc21pc3Npb24gbG9naWMuIEl0IGFkZHMgbmV3IE1JQiBjb3VudGVycyBhbmQgbW9kaWZpZXMgY29yZSBNUFRDUCBmdW5jdGlvbnMgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCBhbmQgYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBzdGFuZGFyZCBNUFRDUCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgbmV0d29yayByZWNlaXZlIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gTVBUQ1AgbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgaW50cm9kdWNlcyBuZXcgTUlCIGNvdW50ZXJzLCBhZGRzIG1lbW9yeSBsaW1pdCBjaGVja3MgKGBtcHRjcF9vdmVyX2xpbWl0YCwgYG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlYCksIGltcGxlbWVudHMgb3V0LW9mLW9yZGVyIHF1ZXVlIHBydW5pbmcgKGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgKSwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9vcCAoYF9fbXB0Y3BfcmV0cmFuc2ApLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGV4cG9zaW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseWluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBmb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIHBhY2tldCBkcm9wcGluZyBvciBxdWV1ZSBtYW5pcHVsYXRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI2MDZhN2JjNDY1MTBiOGE5ODQ4OGFiNTI2NGI3M2ZiODYzZmE4OWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjIxOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jCmluZGV4IGYyM2ZkYTBjNTVhNzIuLjI1NjkzODViYWI3Y2EgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9taWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmMKQEAgLTg1LDYgJiM0Mzs4NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7CiAJU05NUF9NSUJfSVRFTSgmIzM0O1NpbXVsdENvbm5lY3RGYWxsYmFjayYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7RmFsbGJhY2tGYWlsZWQmIzM0OywgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7V2luUHJvYmUmIzM0OywgTVBUQ1BfTUlCX1dJTlBST0JFKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O0JhY2tsb2dEcm9wJiMzNDssIE1QVENQX01JQl9CQUNLTE9HRFJPUCksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtSY3ZQcnVuZWQmIzM0OywgTVBUQ1BfTUlCX1JDVlBSVU5FRCksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtPRk9QcnVuZWQmIzM0OywgTVBUQ1BfTUlCX09GT1BSVU5FRCksCiB9OwogCiAvKiBtcHRjcF9taWJfYWxsb2MgLSBhbGxvY2F0ZSBwZXJjcHUgbWliIGNvdW50ZXJzCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmgKaW5kZXggODEyMjE4YjVlZDJiZi4uM2EzNDI1ZTI1OGE3NiAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaApAQCAtODgsNiAmIzQzOzg4LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQgewogCU1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssCS8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovCiAJTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELAkvKiBDYW4mIzM5O3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi8KIAlNUFRDUF9NSUJfV0lOUFJPQkUsCQkvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqLwomIzQzOwlNUFRDUF9NSUJfQkFDS0xPR0RST1AsCQkvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovCiYjNDM7CU1QVENQX01JQl9SQ1ZQUlVORUQsCQkvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMgKi8KJiM0MzsJTVBUQ1BfTUlCX09GT1BSVU5FRCwJCS8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi8KIAlfX01QVENQX01JQl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9vcHRpb25zLmMgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCmluZGV4IDEwNTdkNTAwNTc3YjAuLmI4MzE4ZTAzMDEzODkgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL29wdGlvbnMuYwpAQCAtMTE5MCw4ICYjNDM7MTE5MCwzNCBAQCBzdGF0aWMgYm9vbCBhZGRfYWRkcl9obWFjX3ZhbGlkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAJcmV0dXJuIGhtYWMgPT0gbXBfb3B0LSZndDthaG1hYzsKIH0KIAotLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLAotICogZWxzZSByZXR1cm4gdHJ1ZS4KJiM0MztzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwl1MzIgcmN2YnVmID0gUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCh1MzIpc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDs9IHJjdmJ1ZiAmYW1wOyZhbXA7CiYjNDM7CQkgICBSRUFEX09OQ0UobXNrLSZndDtiYWNrbG9nX2xlbikgJmx0Oz0gcmN2YnVmKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4sIHJzdCBvciBhbHJlYWR5LWFja2VkIHNlZ20uICovCiYjNDM7CWlmIChUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSA9PSBUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEgfHwKJiM0MzsJICAgIFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7dGNwX2ZsYWdzICZhbXA7IChUQ1BIRFJfRklOIHwgVENQSERSX1JTVCkgfHwKJiM0MzsJICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEsIHRjcF9zayhzc2spLSZndDtyY3Zfbnh0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovCiYjNDM7CWluZXRfY3NrKHNzayktJmd0O2ljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7CiYjNDM7CWluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spOwomIzQzOwomIzQzOwkvKiBQbGFpbiBUQ1AgKGZhbGxiYWNrKSBhbmQgc2tiIGlzIGRyb3BwZWQgYmVmb3JlIHRoZSBUQ1AgcmVjdiBxdWV1ZS4gKi8KJiM0MzsJTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZRRFJPUCk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgZHJvcCB0aGUgcGFja2V0LCBpLmUuIGluIGNhc2Ugb2YgZXJyb3IsCiYjNDM7ICogc3ViZmxvdyBoYXMgYmVlbiByZXNldCwgb3Igb3ZlciBtZW1vcnkgbGltaXRzLgogICovCiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTIxNyw3ICYjNDM7MTI0Myw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAKIAkJX19tcHRjcF9kYXRhX2Fja2VkKHN1YmZsb3ctJmd0O2Nvbm4pOwogCQltcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LSZndDtjb25uKTsKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gIW1wdGNwX292ZXJfbGltaXQoc3ViZmxvdy0mZ3Q7Y29ubiwgc2ssIHNrYik7CiAJfQogCiAJbXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCAmYW1wO21wX29wdCk7CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jCmluZGV4IDY0YTEyMzZhYWJlZTkuLmQxZjczYzNlMzlmYTMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbS5jCkBAIC0xMDY1LDcgJiM0MzsxMDY1LDggQEAgYm9vbCBtcHRjcF9wbV9pc19iYWNrdXAoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpCiAJcmV0dXJuIG1wdGNwX3BtX25sX2lzX2JhY2t1cChtc2ssICZhbXA7c2tjX2xvY2FsKTsKIH0KIAotc3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spCiYjNDM7c3RhdGljIHZvaWQKJiM0MzttcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKQogewogCXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKml0ZXIsICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CkBAIC0xMTAyLDIyICYjNDM7MTEwMywzNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvYwogCX0KIH0KIAotdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKQomIzQzO3ZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiB7Ci0Jc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7Ci0JdTMyIHJjdl90c3RhbXAgPSBSRUFEX09OQ0UodGNwX3NrKHNzayktJmd0O3Jjdl90c3RhbXApOwotCi0JLyoga2VlcCB0cmFjayBvZiBydHggcGVyaW9kcyB3aXRoIG5vIHByb2dyZXNzICovCi0JaWYgKCFzdWJmbG93LSZndDtzdGFsZV9jb3VudCkgewotCQlzdWJmbG93LSZndDtzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDsKLQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQmIzQzOyYjNDM7OwotCX0gZWxzZSBpZiAoc3ViZmxvdy0mZ3Q7c3RhbGVfcmN2X3RzdGFtcCA9PSByY3ZfdHN0YW1wKSB7Ci0JCWlmIChzdWJmbG93LSZndDtzdGFsZV9jb3VudCAmbHQ7IFU4X01BWCkKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKJiM0MzsKJiM0MzsJbXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpzc2sgPSBtcHRjcF9zdWJmbG93X3RjcF9zb2NrKHN1YmZsb3cpOwomIzQzOwkJdTMyIHJjdl90c3RhbXA7CiYjNDM7CiYjNDM7CQlpZiAoIV9fbXB0Y3Bfc3ViZmxvd19hY3RpdmUoc3ViZmxvdykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBObyBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gbm90IHN0YWxlICovCiYjNDM7CQlpZiAodGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBrZWVwIHRyYWNrIG9mIHJ0eCBwZXJpb2RzIHdpdGggbm8gcHJvZ3Jlc3MgKi8KJiM0MzsJCXJjdl90c3RhbXAgPSBSRUFEX09OQ0UodGNwX3NrKHNzayktJmd0O3Jjdl90c3RhbXApOwomIzQzOwkJaWYgKCFzdWJmbG93LSZndDtzdGFsZV9jb3VudCkgewomIzQzOwkJCXN1YmZsb3ctJmd0O3N0YWxlX3Jjdl90c3RhbXAgPSByY3ZfdHN0YW1wOwogCQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQmIzQzOyYjNDM7OwotCQltcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUobXNrLCBzc2spOwotCX0gZWxzZSB7Ci0JCXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50ID0gMDsKLQkJbXB0Y3Bfc3ViZmxvd19zZXRfYWN0aXZlKHN1YmZsb3cpOwomIzQzOwkJfSBlbHNlIGlmIChzdWJmbG93LSZndDtzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHsKJiM0MzsJCQlpZiAoc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQgJmx0OyBVOF9NQVgpCiYjNDM7CQkJCXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50JiM0MzsmIzQzOzsKJiM0MzsJCQltcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50ID0gMDsKJiM0MzsJCQltcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7CiYjNDM7CQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IDdjODE4MGQ4ZDVlZmYuLmVjODc0ZDJlYWQ2YTQgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0yNDIsNiAmIzQzOzI0Miw2NSBAQCBzdGF0aWMgYm9vbCBtcHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7LyogJiMzNDtJbnNwaXJlZCYjMzQ7IGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1AKJiM0MzsgKiBzb2NrZXQgaXMgdW5kZXIgbWVtb3J5IGxpbWl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmluX3NrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXN0cnVjdCByYl9ub2RlICpub2RlLCAqcHJldjsKJiM0MzsJYm9vbCBwcnVuZWQgPSBmYWxzZTsKJiM0MzsJdTY0IG1lbTsKJiM0MzsKJiM0MzsJaWYgKFJCX0VNUFRZX1JPT1QoJmFtcDttc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5vZGUgPSAmYW1wO21zay0mZ3Q7b29vX2xhc3Rfc2tiLSZndDtyYm5vZGU7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7CiYjNDM7CiYjNDM7CQkvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqLwomIzQzOwkJaWYgKGFmdGVyNjQoTVBUQ1BfU0tCX0NCKGluX3NrYiktJmd0O21hcF9zZXEsCiYjNDM7CQkJICAgIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXBydW5lZCA9IHRydWU7CiYjNDM7CQlwcmV2ID0gcmJfcHJldihub2RlKTsKJiM0MzsJCXJiX2VyYXNlKG5vZGUsICZhbXA7bXNrLSZndDtvdXRfb2Zfb3JkZXJfcXVldWUpOwomIzQzOwkJbXB0Y3BfZHJvcChzaywgc2tiKTsKJiM0MzsJCW1zay0mZ3Q7b29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpOwomIzQzOwomIzQzOwkJbWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CQlpZiAobWVtICZsdDs9IHNrLSZndDtza19yY3ZidWYpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlub2RlID0gcHJldjsKJiM0MzsJfSB3aGlsZSAobm9kZSk7CiYjNDM7CiYjNDM7CWlmIChwcnVuZWQpCiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIHN0YWNrIGNhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCBhdCB0aGUgbXNrIGxldmVsLCBvciB0aGUKJiM0MzsgKiBzdHJlYW0gd2lsbCBicmVhay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBtcHRjcF9jYW5faW5nZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgJmx0Oz0gUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSB8fAomIzQzOwkJCV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKCFtcHRjcF9jYW5faW5nZXN0KHNrKSkgewomIzQzOwkJbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHNrLCBza2IpOwomIzQzOwkJcmV0dXJuIG1wdGNwX2Nhbl9pbmdlc3Qoc2spOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qICYjMzQ7aW5zcGlyZWQmIzM0OyBieSB0Y3BfZGF0YV9xdWV1ZV9vZm8oKSwgbWFpbiBkaWZmZXJlbmNlczoKICAqIC0gdXNlIG1wdGNwIHNlcXMKICAqIC0gZG9uJiMzOTt0IGNvcGUgd2l0aCBzYWNrcwpAQCAtMjUzLDYgJiM0MzszMTIsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl1NjQgc2VxLCBlbmRfc2VxLCBtYXhfc2VxOwogCXN0cnVjdCBza19idWZmICpza2IxOwogCiYjNDM7CWlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHsKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpOwomIzQzOwkJbXB0Y3BfZHJvcChzaywgc2tiKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXNlcSA9IE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwogCWVuZF9zZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcTsKIAltYXhfc2VxID0gYXRvbWljNjRfcmVhZCgmYW1wO21zay0mZ3Q7cmN2X3duZF9zZW50KTsKQEAgLTM4OSw2ICYjNDM7NDU0LDEzIEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJaWYgKE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxID09IG1zay0mZ3Q7YWNrX3NlcSkgewogCQkvKiBpbiBzZXF1ZW5jZSAqLwomIzQzO2luc2VydDoKJiM0MzsJCWlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHsKJiM0MzsJCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTsKJiM0MzsJCQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsKIAkJbXNrLSZndDtieXRlc19yZWNlaXZlZCAmIzQzOz0gY29weV9sZW47CiAJCVdSSVRFX09OQ0UobXNrLSZndDthY2tfc2VxLCBtc2stJmd0O2Fja19zZXEgJiM0MzsgY29weV9sZW4pOwogCQl0YWlsID0gc2tiX3BlZWtfdGFpbCgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKTsKQEAgLTQwMywyNiAmIzQzOzQ3NSwyMCBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIENvbXBsZXRlbHkgb2xkIGRhdGE/ICovCi0JaWYgKCFhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxLCBtc2stJmd0O2Fja19zZXEpKSB7Ci0JCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTsKLQkJbXB0Y3BfZHJvcChzaywgc2tiKTsKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKiBQYXJ0aWFsIHBhY2tldCAqLwomIzQzOwlpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSwgbXNrLSZndDthY2tfc2VxKSkgewomIzQzOwkJY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSAtIG1zay0mZ3Q7YWNrX3NlcTsKJiM0MzsJCU1QVENQX1NLQl9DQihza2IpLSZndDtvZmZzZXQgJiM0Mzs9IG1zay0mZ3Q7YWNrX3NlcSAtCiYjNDM7CQkJCQkgICAgIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwomIzQzOwkJTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEgJiM0Mzs9IG1zay0mZ3Q7YWNrX3NlcSAtCiYjNDM7CQkJCQkgICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcTsKJiM0MzsJCWdvdG8gaW5zZXJ0OwogCX0KIAotCS8qIFBhcnRpYWwgcGFja2V0OiBtYXBfc2VxICZsdDsgYWNrX3NlcSAmbHQ7IGVuZF9zZXEuCi0JICogU2tpcCB0aGUgYWxyZWFkeS1hY2tlZCBieXRlcyBhbmQgZW5xdWV1ZSB0aGUgbmV3IGRhdGEuCi0JICovCi0JY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSAtIG1zay0mZ3Q7YWNrX3NlcTsKLQlNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7b2Zmc2V0ICYjNDM7PSBtc2stJmd0O2Fja19zZXEgLSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcTsKLQlNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcSAmIzQzOz0gbXNrLSZndDthY2tfc2VxIC0KLQkJCQkgICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcTsKLQltc2stJmd0O2J5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjsKLQlXUklURV9PTkNFKG1zay0mZ3Q7YWNrX3NlcSwgbXNrLSZndDthY2tfc2VxICYjNDM7IGNvcHlfbGVuKTsKLQotCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKLQlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUsIHNrYik7Ci0JcmV0dXJuIHRydWU7CiYjNDM7CS8qIENvbXBsZXRlbHkgb2xkIGRhdGEgKi8KJiM0MzsJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpOwomIzQzOwltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyB2b2lkIG1wdGNwX3N0b3BfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaykKQEAgLTY4MSw2ICYjNDM7NzQ3LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssCiAJc3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMOwogCXN0cnVjdCBzb2NrICpzc2sgPSBza2ItJmd0O3NrOwogCWJvb2wgZnJhZ3N0b2xlbjsKJiM0MzsJdTY0IGxpbWl0OwogCWludCBkZWx0YTsKIAogCWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0NMT1NFKSkgewpAQCAtNjg4LDYgJiM0Mzs3NTUsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJLyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovCiYjNDM7CWxpbWl0ID0gUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpOwomIzQzOwlsaW1pdCAmIzQzOz0gKGxpbWl0ICZndDsmZ3Q7IDEpICYjNDM7IDY0ICogMTAyNDsKJiM0MzsJbGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7CiYjNDM7CWlmIChtc2stJmd0O2JhY2tsb2dfbGVuICZndDsgbGltaXQgJmFtcDsmYW1wOyAhX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7CiYjNDM7CQlfX01QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9CQUNLTE9HRFJPUCk7CiYjNDM7CQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9CQUNLTE9HKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCS8qIFRyeSB0byBjb2FsZXNjZSB3aXRoIHRoZSBsYXN0IHNrYiBpbiBvdXIgYmFja2xvZyAqLwogCWlmICghbGlzdF9lbXB0eSgmYW1wO21zay0mZ3Q7YmFja2xvZ19saXN0KSkKIAkJdGFpbCA9IGxpc3RfbGFzdF9lbnRyeSgmYW1wO21zay0mZ3Q7YmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7CkBAIC03NTksNyAmIzQzOzgzNiw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAogCiAJCQltcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pOwogCi0JCQlpZiAob3duX21zayAmYW1wOyZhbXA7IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmbHQ7IHNrLSZndDtza19yY3ZidWYpIHsKJiM0MzsJCQlpZiAob3duX21zaykgewogCQkJCW1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTsKIAkJCQlyZXQgfD0gX19tcHRjcF9tb3ZlX3NrYihzaywgc2tiKTsKIAkJCX0gZWxzZSB7CkBAIC0xMTQyLDEzICYjNDM7MTIxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spCiAJbXB0Y3Bfd3JpdGVfc3BhY2Uoc2spOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKLXsKLQltcHRjcF9kYXRhX2xvY2soc2spOwotCV9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7Ci0JbXB0Y3BfZGF0YV91bmxvY2soc2spOwotfQotCiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7CkBAIC0yMjE1LDEyICYjNDM7MjI4NSw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticywgdTMyICpkZWx0CiAJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKIAlib29sIG1vdmVkID0gZmFsc2U7CiAKLQkqZGVsdGEgPSAwOwogCXdoaWxlICgxKSB7Ci0JCS8qIElmIHRoZSBtc2sgcmVjdmJ1ZiBpcyBmdWxsIHN0b3AsIGRvbiYjMzk7dCBkcm9wICovCi0JCWlmIChza19ybWVtX2FsbG9jX2dldChzaykgJmd0OyBzay0mZ3Q7c2tfcmN2YnVmKQotCQkJYnJlYWs7Ci0KIAkJcHJlZmV0Y2goc2tiLSZndDtuZXh0KTsKIAkJbGlzdF9kZWwoJmFtcDtza2ItJmd0O2xpc3QpOwogCQkqZGVsdGEgJiM0Mzs9IHNrYi0mZ3Q7dHJ1ZXNpemU7CkBAIC0yMjQ4LDkgJiM0MzsyMzEzLDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQogCURFQlVHX05FVF9XQVJOX09OX09OQ0UobXNrLSZndDtiYWNrbG9nX3VuYWNjb3VudGVkICZhbXA7JmFtcDsgc2stJmd0O3NrX3NvY2tldCAmYW1wOyZhbXA7CiAJCQkgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7CiAKLQkvKiBEb24mIzM5O3Qgc3Bvb2wgdGhlIGJhY2tsb2cgaWYgdGhlIHJjdmJ1ZiBpcyBmdWxsLiAqLwotCWlmIChsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpIHx8Ci0JICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmZ3Q7IHNrLSZndDtza19yY3ZidWYpCiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlJTklUX0xJU1RfSEVBRChza2JzKTsKQEAgLTIyNTgsMjAgJiM0MzsyMzIxLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgbXB0Y3BfYmFja2xvZ19zcG9vbGVkKHN0cnVjdCBzb2NrICpzaywgdTMyIG1vdmVkLAotCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqc2ticykKLXsKLQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwotCi0JV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwotCWxpc3Rfc3BsaWNlKHNrYnMsICZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpOwotfQotCiBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKQogewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCXN0cnVjdCBsaXN0X2hlYWQgc2ticzsKIAlib29sIGVucXVldWVkID0gZmFsc2U7Ci0JdTMyIG1vdmVkOwomIzQzOwl1MzIgbW92ZWQgPSAwOwogCiAJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKIAl3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssICZhbXA7c2ticykpIHsKQEAgLTIyNzksOCAmIzQzOzIzMzQsOCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKQogCQllbnF1ZXVlZCB8PSBfX21wdGNwX21vdmVfc2ticyhzaywgJmFtcDtza2JzLCAmYW1wO21vdmVkKTsKIAogCQltcHRjcF9kYXRhX2xvY2soc2spOwotCQltcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCAmYW1wO3NrYnMpOwogCX0KJiM0MzsJV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwogCW1wdGNwX2RhdGFfdW5sb2NrKHNrKTsKIAogCWlmIChlbnF1ZXVlZCAmYW1wOyZhbXA7IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKQpAQCAtMjQ2OSw3ICYjNDM7MjUyNCw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zKHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiAKIAkJLyogc3RpbGwgZGF0YSBvdXRzdGFuZGluZyBhdCBUQ1AgbGV2ZWw/IHNraXAgdGhpcyAqLwogCQlpZiAoIXRjcF9ydHhfYW5kX3dyaXRlX3F1ZXVlc19lbXB0eShzc2spKSB7Ci0JCQltcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7CiAJCQltaW5fc3RhbGVfY291bnQgPSBtaW5fdChpbnQsIG1pbl9zdGFsZV9jb3VudCwgc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTI3OTEsNDQgJiM0MzsyODQ1LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKQogCXNrX2Vycm9yX3JlcG9ydChzayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7LyoKJiM0MzsgKiBSZXRyYW5zbWl0IHRoZSBzcGVjaWZpZWQgZGF0YSBmcmFnbWVudCBvbiBhbGwgdGhlIHNlbGVjdGVkIHN1YmZsb3dzLAomIzQzOyAqIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZywKJiM0MzsJCQkJdTY0IHNlbnRfc2VxKQogewogCXN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7Ci0Jc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7CiAJc3RydWN0IHNvY2sgKnNzazsKLQlpbnQgcmV0LCBlcnI7Ci0JdTE2IGxlbiA9IDA7Ci0KLQltcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKLQotCS8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrICYjMzQ7c3RhbGUmIzM0OyBsb2dpYyAqLwotCWVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7Ci0JZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7Ci0JaWYgKCFkZnJhZykgewotCQlpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7Ci0JCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0KLQkJCVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19yZXRyYW5zbWl0cywKLQkJCQkgICBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpOwotCQkJbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7Ci0JCQltcHRjcF9zZW5kX2Fjayhtc2spOwotCi0JCQlnb3RvIHJlc2V0X3RpbWVyOwotCQl9Ci0KLQkJaWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKQotCQkJZ290byBjbGVhcl9zY2hlZHVsZWQ7Ci0KLQkJZ290byByZXNldF90aW1lcjsKLQl9Ci0KLQlpZiAoZXJyKQotCQlnb3RvIHJlc2V0X3RpbWVyOwomIzQzOwlpbnQgcmV0LCBsZW4gPSAwOwogCiAJbXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHsKIAkJaWYgKFJFQURfT05DRShzdWJmbG93LSZndDtzY2hlZHVsZWQpKSB7CiYjNDM7CQkJdTE2IG9mZnNldCA9IHNlbnRfc2VxIC0gZGZyYWctJmd0O2RhdGFfc2VxOwogCQkJdTE2IGNvcGllZCA9IDA7CiAKIAkJCW1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7CkBAIC0yODM4LDcgJiM0MzsyODcwLDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCWxvY2tfc29jayhzc2spOwogCiAJCQkvKiBsaW1pdCByZXRyYW5zbWlzc2lvbiB0byB0aGUgYnl0ZXMgYWxyZWFkeSBzZW50IG9uIHNvbWUgc3ViZmxvd3MgKi8KLQkJCWluZm8uc2VudCA9IDA7CiYjNDM7CQkJaW5mby5zZW50ID0gb2Zmc2V0OwogCQkJaW5mby5saW1pdCA9IFJFQURfT05DRShtc2stJmd0O2NzdW1fZW5hYmxlZCkgPyBkZnJhZy0mZ3Q7ZGF0YV9sZW4gOgogCQkJCQkJCQkgICAgZGZyYWctJmd0O2FscmVhZHlfc2VudDsKIApAQCAtMjg1Myw3ICYjNDM7Mjg4NSw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiAJCQkgICAgIW1zay0mZ3Q7YWxsb3dfc3ViZmxvd3MpIHsKIAkJCQlzcGluX3VubG9ja19iaCgmYW1wO21zay0mZ3Q7ZmFsbGJhY2tfbG9jayk7CiAJCQkJcmVsZWFzZV9zb2NrKHNzayk7Ci0JCQkJZ290byBjbGVhcl9zY2hlZHVsZWQ7CiYjNDM7CQkJCXJldHVybiAtMTsKIAkJCX0KIAogCQkJd2hpbGUgKGluZm8uc2VudCAmbHQ7IGluZm8ubGltaXQpIHsKQEAgLTI4NzYsMTMgJiM0MzsyOTA4LDk5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiAJCQlyZWxlYXNlX3NvY2soc3NrKTsKIAkJfQogCX0KJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7CiYjNDM7CXN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnOwomIzQzOwl1NjQgcmV0cmFuc19zZXEsIHNlbnRfc2VxOwomIzQzOwlib29sIG5lZWRfcmV0cmFuczsKJiM0MzsJaW50IGVyciwgbGVuOwomIzQzOwomIzQzOwltcHRjcF9wbV9jaGtfc3RhbGUobXNrKTsKJiM0MzsKJiM0MzsJLyogR2V0IGFuIHVwZGF0ZWQgYW5kIGNvbnNpc3RlbnQgcnR4IHF1ZXVlIHN0YXR1cy4gKi8KJiM0MzsJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKJiM0MzsJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwomIzQzOwluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWJvb2wgYWxyZWFkeV9hY2tlZDsKJiM0MzsKJiM0MzsJCWVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFgKJiM0MzsJCSAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWRmcmFnIHx8ICFkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50KQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogQ2FuIGZhaWwgb25seSBpbiBjYXNlIG9mIGZhbGxiYWNrLiAqLwomIzQzOwkJbGVuID0gX19tcHRjcF9wdXNoX3JldHJhbnMoc2ssIGRmcmFnLCByZXRyYW5zX3NlcSk7CiYjNDM7CQlpZiAobGVuICZsdDsgMCkKJiM0MzsJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsKJiM0MzsJCXJldHJhbnNfc2VxICYjNDM7PSBsZW47CiYjNDM7CQltc2stJmd0O2J5dGVzX3JldHJhbnMgJiM0Mzs9IGxlbjsKJiM0MzsJCWRmcmFnLSZndDthbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLSZndDthbHJlYWR5X3NlbnQsCiYjNDM7CQkJCQkgICAgcmV0cmFuc19zZXEgLSBkZnJhZy0mZ3Q7ZGF0YV9zZXEpOwomIzQzOwomIzQzOwkJLyogV2l0aCBjc3VtIGVuYWJsZWQsIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqLwomIzQzOwkJc2VudF9zZXEgPSBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcTsKJiM0MzsJCWlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stJmd0O3NuZF9ueHQpKQomIzQzOwkJCVdSSVRFX09OQ0UobXNrLSZndDtzbmRfbnh0LCBzZW50X3NlcSk7CiYjNDM7CiYjNDM7CQkvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzCiYjNDM7CQkgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctJmd0O2RhdGFfc2VxICYjNDM7IGRmcmFnLSZndDtkYXRhX2xlbikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlkZnJhZyA9IGxpc3RfaXNfbGFzdCgmYW1wO2RmcmFnLSZndDtsaXN0LCAmYW1wO21zay0mZ3Q7cnR4X3F1ZXVlKSA/CiYjNDM7CQkJCU5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpOwomIzQzOwkJaWYgKCFkZnJhZykKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIEluY29taW5nIGFja3MgY2FuIG1vdmUgc25kX3VuYSBhZnRlciB0aGUgY3VycmVudCBkZnJhZwomIzQzOwkJICogYWNyb3NzIGxvb3AgaXRlcmF0aW9ucywgaWYgc28gc3RhcnQgYWdhaW4gZnJvbSBSVFggaGVhZC4KJiM0MzsJCSAqLwomIzQzOwkJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKJiM0MzsJCWFscmVhZHlfYWNrZWQgPSAhYmVmb3JlNjQobXNrLSZndDtzbmRfdW5hLCBkZnJhZy0mZ3Q7ZGF0YV9zZXEgJiM0MzsKJiM0MzsJCQkJCSAgZGZyYWctJmd0O2FscmVhZHlfc2VudCk7CiYjNDM7CQlpZiAoYWxyZWFkeV9hY2tlZCkgewomIzQzOwkJCV9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7CiYjNDM7CQkJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CQkJZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7CiYjNDM7CQkJbmVlZF9yZXRyYW5zID0gISFkZnJhZzsKJiM0MzsJCX0gZWxzZSBpZiAoYWZ0ZXI2NChtc2stJmd0O3NuZF91bmEsIHJldHJhbnNfc2VxKSkgewomIzQzOwkJCXJldHJhbnNfc2VxID0gbXNrLSZndDtzbmRfdW5hOwomIzQzOwkJfQomIzQzOwkJbXB0Y3BfZGF0YV91bmxvY2soc2spOwomIzQzOwl9CiAKLQltc2stJmd0O2J5dGVzX3JldHJhbnMgJiM0Mzs9IGxlbjsKLQlkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ID0gbWF4KGRmcmFnLSZndDthbHJlYWR5X3NlbnQsIGxlbik7CiYjNDM7CS8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovCiYjNDM7CWlmICghbmVlZF9yZXRyYW5zKSB7CiYjNDM7CQlpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7CiYjNDM7CQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCi0JLyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovCi0JaWYgKGFmdGVyNjQoZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXEsIG1zay0mZ3Q7c25kX254dCkpCi0JCVdSSVRFX09OQ0UobXNrLSZndDtzbmRfbnh0LCBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAomIzQzOwkJCQkgICBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpOwomIzQzOwkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwomIzQzOwkJCW1wdGNwX3NlbmRfYWNrKG1zayk7CiYjNDM7CQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKJiM0MzsJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsJfQogCiByZXNldF90aW1lcjoKIAltcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spOwpAQCAtMzY3NiwxMiAmIzQzOzM3OTQsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spCiAJX19tdXN0X2hvbGQoJmFtcDtzay0mZ3Q7c2tfbG9jay5zbG9jaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwl1MzIgbW92ZWQgPSAwOwogCiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay0mZ3Q7Y2JfZmxhZ3MgJmFtcDsgTVBUQ1BfRkxBR1NfUFJPQ0VTU19DVFhfTkVFRCk7CiAJCXN0cnVjdCBsaXN0X2hlYWQgam9pbl9saXN0LCBza2JzOwogCQlib29sIHNwb29sX2JsOwotCQl1MzIgbW92ZWQ7CiAKIAkJc3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKTsKIAkJaWYgKCFmbGFncyAmYW1wOyZhbXA7ICFzcG9vbF9ibCkKQEAgLTM3MTQsOSAmIzQzOzM4MzIsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaykKIAogCQljb25kX3Jlc2NoZWQoKTsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2xvY2suc2xvY2spOwotCQlpZiAoc3Bvb2xfYmwpCi0JCQltcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCAmYW1wO3NrYnMpOwogCX0KJiM0MzsJaWYgKG1vdmVkKQomIzQzOwkJV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwogCiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgJmFtcDttc2stJmd0O2NiX2ZsYWdzKSkKIAkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmgKaW5kZXggMWI4MGYyZDZlYzVhMi4uYjNhZjM0NjJiZGQxNiAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmgKQEAgLTU4MCwxMiAmIzQzOzU4MCwxMSBAQCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0IHsKIAkJcmVtb3RlX2tleV92YWxpZCA6IDEsICAgICAgICAvKiByZWNlaXZlZCB0aGUgcGVlciBrZXkgZnJvbSAqLwogCQlkaXNwb3NhYmxlIDogMSwJICAgIC8qIGN0eCBjYW4gYmUgZnJlZSBhdCB1bHAgcmVsZWFzZSB0aW1lICovCiAJCWNsb3NpbmcgOiAxLAkgICAgLyogbXVzdCBub3QgcGFzcyByeCBkYXRhIHRvIG1zayBhbnltb3JlICovCi0JCXN0YWxlIDogMSwJICAgIC8qIHVuYWJsZSB0byBzbmQvcmN2IGRhdGEsIGRvIG5vdCB1c2UgZm9yIHhtaXQgKi8KIAkJdmFsaWRfY3N1bV9zZWVuIDogMSwgICAgICAgIC8qIGF0IGxlYXN0IG9uZSBjc3VtIHZhbGlkYXRlZCAqLwogCQlpc19tcHRmbyA6IDEsCSAgICAvKiBzdWJmbG93IGlzIGRvaW5nIFRGTyAqLwogCQljbG9zZV9ldmVudF9kb25lIDogMSwgICAgICAgLyogaGFzIGRvbmUgdGhlIHBvc3QtY2xvc2VkIHBhcnQgKi8KIAkJbXBjX2Ryb3AgOiAxLAkgICAgLyogdGhlIE1QQyBvcHRpb24gaGFzIGJlZW4gZHJvcHBlZCBpbiBhIHJ0eCAqLwotCQlfX3VudXNlZCA6IDg7CiYjNDM7CQlfX3VudXNlZCA6IDk7CiAJYm9vbAlkYXRhX2F2YWlsOwogCWJvb2wJc2NoZWR1bGVkOwogCWJvb2wJcG1fbGlzdGVuZXI7CSAgICAvKiBhIGxpc3RlbmVyIG1hbmFnZWQgYnkgdGhlIGtlcm5lbCBQTT8gKi8KQEAgLTYwNCw3ICYjNDM7NjAzLDExIEBAIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgewogCXU4CXJlc2V0X3NlZW46MTsKIAl1OAlyZXNldF90cmFuc2llbnQ6MTsKIAl1OAlyZXNldF9yZWFzb246NDsKLQl1OAlzdGFsZV9jb3VudDsKJiM0MzsJdTgJc3RhbGVfY291bnQ7CSAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jayAqLwomIzQzOwl1OAlzdGFsZTsJCSAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jaywKJiM0MzsJCQkJICAgICAqIGlmIHNldCB0aGUgc3ViZmxvdyBpcyB1bmFibGUgdG8gc25kL3JjdgomIzQzOwkJCQkgICAgICogZGF0YSwgdGhlIHNjaGVkdWxlIHNob3VsZCBza2lwIGl0CiYjNDM7CQkJCSAgICAgKi8KIAogCXUzMglzdWJmbG93X2lkOwogCkBAIC0xMTAzLDcgJiM0MzsxMTA2LDcgQEAgaW50IG1wdGNwX3BtX3BhcnNlX2VudHJ5KHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiBib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqbG9jLAogCQkJCSAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqcmVtKTsKLXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzayk7CiYjNDM7dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7CiB2b2lkIG1wdGNwX3BtX25ld19jb25uZWN0aW9uKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCBzZXJ2ZXJfc2lkZSk7CiB2b2lkIG1wdGNwX3BtX2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spOwogYm9vbCBtcHRjcF9wbV9hbGxvd19uZXdfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjk1CgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNZW1vcnkgTWFuYWdlbWVudCBhbmQgTVBUQ1AgU3RhYmlsaXR5IFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBNUFRDUCBwYXRjaCBpbiBmcm9udCBvZiBtZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgcHJpbWFyaWx5IGZvY3VzZXMgb24gaW1wcm92aW5nIE1QVENQJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdyBjb25kaXRpb25zLiBJIHNlZSBpdCYjMzk7cyBhZGRpbmcgbmV3IE1JQiBjb3VudGVycyB0byB0cmFjayB0aGluZ3MgbGlrZSBiYWNrbG9nIGRyb3BzLCByZWNlaXZlciBwcnVuZWQgcGFja2V0cywgYW5kIG91dC1vZi1vcmRlciBxdWV1ZSBwcnVuaW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydCBmb3Igb2JzZXJ2YWJpbGl0eS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIG5vdyBjaGVja3MgYG1wdGNwX292ZXJfbGltaXRgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW5ncmVzcyBmbG93IGNvbnRyb2wuIFNpbWlsYXJseSwgYG1wdGNwX3BtX2Noa19zdGFsZWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gaHVudCBkb3duIHN0YWxlIHN1YmZsb3dzLiBUaGUga2V5IGFyZWFzIGZvciByZXZpZXcgYXJlIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYW5kIGBfX21wdGNwX2FkZF9iYWNrbG9nYCwgYWxsIG9mIHdoaWNoIGFyZSBub3cgY2hlY2tpbmcgbWVtb3J5IGxpbWl0cyBhbmQgZHJvcHBpbmcgcGFja2V0cyBpZiBuZWVkZWQgdXNpbmcgYG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlYC4gYF9fbXB0Y3BfcmV0cmFuc2AgYWxzbyBsb29rcyBsaWtlIGl0JiMzOTtzIGdldHRpbmcgc29tZSB0d2Vha3MgdG8gaW1wcm92ZSBpdHMgcmV0cmFuc21pc3Npb24gY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgd2l0aCBtdWx0aXBsZSBmcmFnbWVudHMuIEFuZCBmaW5hbGx5LCBgbXB0Y3BfcmVsZWFzZV9jYmAgYW5kIGBtcHRjcF9tb3ZlX3NrYnNgIGFyZSB0b3VjaGVkIHRvIG1ha2Ugc3VyZSBiYWNrbG9nIHNwb29saW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZT8gVGhhdCYjMzk7cyBhbHdheXMgbXkgZmlyc3Qgd29ycnkgd2l0aCBrZXJuZWwgY2hhbmdlcy4gQnV0IGJhc2VkIG9uIGEgcXVpY2sgc2NhbiwgYW5kIEkmIzM5O3ZlIGdvdCB0byBkbyBhIGRlZXBlciBkaXZlLCBJIGRvbiYjMzk7dCBzZWUgYW55IGdsYXJpbmcgaXNzdWVzLiBUaGUgY2hhbmdlcyBhcmUgYWxtb3N0IGVudGlyZWx5IGZvY3VzZWQgb24gbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIHJlYWNoZWQsIGFuZCBtYWtpbmcgcmV0cmFuc21pc3Npb24gbG9naWMgbW9yZSByb2J1c3QuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIHBhcnRpYWxseSBpbml0aWFsaXplZC4gVGhlIHBhdHRlcm4gaGVyZSBzdWdnZXN0cyBjYXJlZnVsIGF0dGVudGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgZW5jb3VyYWdpbmcuIFNvLCBhdCBmaXJzdCBnbGFuY2UsIEkgKmRvbiYjMzk7dCogc2VlIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNoYW5nZXMgaW4gYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZSBgX19tcHRjcF9wdXNoX3JldHJhbnNgIGZ1bmN0aW9uIGlzIGV4dHJhY3RlZCBmb3IgY2xhcml0eS4gSXQgaXRlcmF0ZXMgb3ZlciBmcmFnbWVudHMsIHRoZW4gaXQgY2FsbHMgdGhhdCBuZXcgZnVuY3Rpb24gdG8gYWN0dWFsbHkgcHVzaCBhIHJldHJhbnNtaXNzaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIHBvcHBpbmcgb3V0IGhlcmUgZWl0aGVyLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBtcHRjcF9vdmVyX2xpbWl0YC4gVGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCByZWFkaW5nIGV4aXN0aW5nIGBza19yY3ZidWZgIGFuZCBgbXNrLSZndDtiYWNrbG9nX2xlbmAgZmllbGRzIGFuZCBwZXJmb3JtaW5nIGNvbXBhcmlzb25zLiBJdCYjMzk7cyBqdXN0IGNoZWNraW5nIGxpbWl0cywgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyB3cm9uZyB3aXRoIHRoYXQuCgpMYXN0bHksIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIGlzIGl0ZXJhdGluZyBvdmVyIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgdG8gZnJlZSB1cCBtZW1vcnkuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gaGFuZGxpbmcgY29uZ2VzdGlvbi4KCkFsbCBvZiB0aGVzZSBjaGFuZ2VzIHJlYWxseSBzZWVtIHRhcmdldGVkIGF0IHByZXZlbnRpbmcgYW5kIG1pdGlnYXRpbmcgbWVtb3J5IGV4aGF1c3Rpb24gd2l0aGluIE1QVENQLiBCYXNlZCBvbiB0aGlzIGRlZXBlciByZXZpZXcsIGl04oCZcyBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbmQgaW1wb3J0YW50bHksIGl0IHNlZW1zIGxpa2UgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBmYWlybHkgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOLiBXZSB3b3VsZCBleHBlY3QgS0FTQU4gdG8gcXVpY2tseSBmbGFnIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgdGhhdCB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGludHJvZHVjZS4gSG9uZXN0bHksIEkgZG9uJiMzOTt0IHRoaW5rIEtNU0FOIGlzIG5lZWRlZCBoZXJlLCB1bmxlc3MgdGhlcmUgYXJlIG90aGVyIGNoYW5nZXMgaW4gdGhlIHBhdGNoLiBPdmVyYWxsLCBJJiMzOTttIGZlZWxpbmcgZmFpcmx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLCBwZW5kaW5nIGEgbW9yZSB0aG9yb3VnaCB0ZXN0IHJ1bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gTVBUQ1AgbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgaW50cm9kdWNlcyBuZXcgTUlCIGNvdW50ZXJzLCBhZGRzIG1lbW9yeSBsaW1pdCBjaGVja3MgKGBtcHRjcF9vdmVyX2xpbWl0YCwgYG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlYCksIGltcGxlbWVudHMgb3V0LW9mLW9yZGVyIHF1ZXVlIHBydW5pbmcgKGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgKSwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9vcCAoYF9fbXB0Y3BfcmV0cmFuc2ApLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGV4cG9zaW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseWluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBmb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIHBhY2tldCBkcm9wcGluZyBvciBxdWV1ZSBtYW5pcHVsYXRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBNUFRDUCBtZW1vcnkgYWNjb3VudGluZywgcGFja2V0IGRyb3BwaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5ldyBNSUIgY291bnRlcnMsIGFkZHMgbWVtb3J5IGxpbWl0IGNoZWNrcyAoYG1wdGNwX292ZXJfbGltaXRgLCBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgKSwgaW1wbGVtZW50cyBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZyAoYG1wdGNwX3BydW5lX29mb19xdWV1ZWApLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb29wIChgX19tcHRjcF9yZXRyYW5zYCkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgZXhwb3Npbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgcGFja2V0IGRyb3BwaW5nIG9yIHF1ZXVlIG1hbmlwdWxhdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MTQuMTUwMDUwNzc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5OTgzNzI0NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICAgIFwibXB0Y3BfcG1fY2hrX3N0YWxlXCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCIsXG4gICAgXCJtcHRjcF9yZWN2bXNnXCIsXG4gICAgXCJtcHRjcF9zZW5kbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBNUFRDUCBtZW1vcnkgYWNjb3VudGluZywgcGFja2V0IGRyb3BwaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5ldyBNSUIgY291bnRlcnMsIGFkZHMgbWVtb3J5IGxpbWl0IGNoZWNrcyAoYG1wdGNwX292ZXJfbGltaXRgLCBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgKSwgaW1wbGVtZW50cyBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZyAoYG1wdGNwX3BydW5lX29mb19xdWV1ZWApLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb29wIChgX19tcHRjcF9yZXRyYW5zYCkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgZXhwb3Npbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgcGFja2V0IGRyb3BwaW5nIG9yIHF1ZXVlIG1hbmlwdWxhdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgYWRkcyBuZXcgTUlCIGNvdW50ZXJzIGFuZCBtb2RpZmllcyBjb3JlIE1QVENQIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgX19tcHRjcF9yZXRyYW5zYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHN0YW5kYXJkIE1QVENQIHNvY2tldCBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIHJlY2VpdmUgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MTQuMTUwMDU4MjE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NDczNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjYwNmE3YmM0NjUxMGI4YTk4NDg4YWI1MjY0YjczZmI4NjNmYTg5YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjIxOjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xcbmluZGV4IGYyM2ZkYTBjNTVhNzIuLjI1NjkzODViYWI3Y2EgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXFxuKysrIGIvbmV0L21wdGNwL21pYi5jXFxuQEAgLTg1LDYgKzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiU2ltdWx0Q29ubmVjdEZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIkZhbGxiYWNrRmFpbGVkXFxcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiV2luUHJvYmVcXFwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJCYWNrbG9nRHJvcFxcXCIsIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIlJjdlBydW5lZFxcXCIsIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJPRk9QcnVuZWRcXFwiLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcXG4gfTtcXG4gXFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXFxuaW5kZXggODEyMjE4YjVlZDJiZi4uM2EzNDI1ZTI1OGE3NiAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcXG4rKysgYi9uZXQvbXB0Y3AvbWliLmhcXG5AQCAtODgsNiArODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XFxuIFxcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXFx0LyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi9cXG4gXFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFxcdC8qIENhbid0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXFxuIFxcdE1QVENQX01JQl9XSU5QUk9CRSxcXHRcXHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xcbitcXHRNUFRDUF9NSUJfQkFDS0xPR0RST1AsXFx0XFx0LyogQmFja2xvZyBvdmVyIG1lbW9yeSBsaW1pdCAqL1xcbitcXHRNUFRDUF9NSUJfUkNWUFJVTkVELFxcdFxcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqL1xcbitcXHRNUFRDUF9NSUJfT0ZPUFJVTkVELFxcdFxcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cXG4gXFx0X19NUFRDUF9NSUJfTUFYXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xcbmluZGV4IDEwNTdkNTAwNTc3YjAuLmI4MzE4ZTAzMDEzODkgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuY1xcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcXG5AQCAtMTE5MCw4ICsxMTkwLDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFx0cmV0dXJuIGhtYWMgPT0gbXBfb3B0LVxcdTAwM2VhaG1hYztcXG4gfVxcbiBcXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxcbi0gKiBlbHNlIHJldHVybiB0cnVlLlxcbitzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuK1xcdHUzMiByY3ZidWYgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1Zik7XFxuK1xcbitcXHRpZiAobGlrZWx5KCh1MzIpc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2M9IHJjdmJ1ZiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICBSRUFEX09OQ0UobXNrLVxcdTAwM2ViYWNrbG9nX2xlbikgXFx1MDAzYz0gcmN2YnVmKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4sIHJzdCBvciBhbHJlYWR5LWFja2VkIHNlZ20uICovXFxuK1xcdGlmIChUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSA9PSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEgfHxcXG4rXFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgKFRDUEhEUl9GSU4gfCBUQ1BIRFJfUlNUKSB8fFxcbitcXHQgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSwgdGNwX3NrKHNzayktXFx1MDAzZXJjdl9ueHQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi9cXG4rXFx0aW5ldF9jc2soc3NrKS1cXHUwMDNlaWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19OT01FTSB8IElDU0tfQUNLX05PVztcXG4rXFx0aW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNzayk7XFxuK1xcbitcXHQvKiBQbGFpbiBUQ1AgKGZhbGxiYWNrKSBhbmQgc2tiIGlzIGRyb3BwZWQgYmVmb3JlIHRoZSBUQ1AgcmVjdiBxdWV1ZS4gKi9cXG4rXFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZRRFJPUCk7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxcbisgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXFxuICAqL1xcbiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuQEAgLTEyMTcsNyArMTI0Myw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRcXHRfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy1cXHUwMDNlY29ubik7XFxuIFxcdFxcdG1wdGNwX2RhdGFfdW5sb2NrKHN1YmZsb3ctXFx1MDAzZWNvbm4pO1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXFx1MDAzZWNvbm4sIHNrLCBza2IpO1xcbiBcXHR9XFxuIFxcbiBcXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFxcdTAwMjZtcF9vcHQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jXFxuaW5kZXggNjRhMTIzNmFhYmVlOS4uZDFmNzNjM2UzOWZhMyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xcbisrKyBiL25ldC9tcHRjcC9wbS5jXFxuQEAgLTEwNjUsNyArMTA2NSw4IEBAIGJvb2wgbXB0Y3BfcG1faXNfYmFja3VwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjKVxcbiBcXHRyZXR1cm4gbXB0Y3BfcG1fbmxfaXNfYmFja3VwKG1zaywgXFx1MDAyNnNrY19sb2NhbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbitzdGF0aWMgdm9pZFxcbittcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbiB7XFxuIFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKml0ZXIsICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbkBAIC0xMTAyLDIyICsxMTAzLDM0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jXFxuIFxcdH1cXG4gfVxcbiBcXG4tdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbit2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbiB7XFxuLVxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xcbi1cXHR1MzIgcmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS1cXHUwMDNlcmN2X3RzdGFtcCk7XFxuLVxcbi1cXHQvKiBrZWVwIHRyYWNrIG9mIHJ0eCBwZXJpb2RzIHdpdGggbm8gcHJvZ3Jlc3MgKi9cXG4tXFx0aWYgKCFzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCkge1xcbi1cXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDtcXG4tXFx0XFx0c3ViZmxvdy1cXHUwMDNlc3RhbGVfY291bnQrKztcXG4tXFx0fSBlbHNlIGlmIChzdWJmbG93LVxcdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHtcXG4tXFx0XFx0aWYgKHN1YmZsb3ctXFx1MDAzZXN0YWxlX2NvdW50IFxcdTAwM2MgVThfTUFYKVxcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbitcXG4rXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcXG4rXFx0XFx0c3RydWN0IHNvY2sgKnNzayA9IG1wdGNwX3N1YmZsb3dfdGNwX3NvY2soc3ViZmxvdyk7XFxuK1xcdFxcdHUzMiByY3ZfdHN0YW1wO1xcbitcXG4rXFx0XFx0aWYgKCFfX21wdGNwX3N1YmZsb3dfYWN0aXZlKHN1YmZsb3cpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIE5vIGRhdGEgb3V0c3RhbmRpbmcgYXQgVENQIGxldmVsPyBub3Qgc3RhbGUgKi9cXG4rXFx0XFx0aWYgKHRjcF9ydHhfYW5kX3dyaXRlX3F1ZXVlc19lbXB0eShzc2spKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqL1xcbitcXHRcXHRyY3ZfdHN0YW1wID0gUkVBRF9PTkNFKHRjcF9zayhzc2spLVxcdTAwM2VyY3ZfdHN0YW1wKTtcXG4rXFx0XFx0aWYgKCFzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCkge1xcbitcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDtcXG4gXFx0XFx0XFx0c3ViZmxvdy1cXHUwMDNlc3RhbGVfY291bnQrKztcXG4tXFx0XFx0bXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKG1zaywgc3NrKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3ViZmxvdy1cXHUwMDNlc3RhbGVfY291bnQgPSAwO1xcbi1cXHRcXHRtcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7XFxuK1xcdFxcdH0gZWxzZSBpZiAoc3ViZmxvdy1cXHUwMDNlc3RhbGVfcmN2X3RzdGFtcCA9PSByY3ZfdHN0YW1wKSB7XFxuK1xcdFxcdFxcdGlmIChzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCBcXHUwMDNjIFU4X01BWClcXG4rXFx0XFx0XFx0XFx0c3ViZmxvdy1cXHUwMDNlc3RhbGVfY291bnQrKztcXG4rXFx0XFx0XFx0bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUobXNrLCBzc2spO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCA9IDA7XFxuK1xcdFxcdFxcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCA3YzgxODBkOGQ1ZWZmLi5lYzg3NGQyZWFkNmE0IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMjQyLDYgKzI0Miw2NSBAQCBzdGF0aWMgYm9vbCBtcHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rLyogXFxcIkluc3BpcmVkXFxcIiBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXFxuKyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBza19idWZmICppbl9za2IpXFxuK3tcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4rXFx0c3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2O1xcbitcXHRib29sIHBydW5lZCA9IGZhbHNlO1xcbitcXHR1NjQgbWVtO1xcbitcXG4rXFx0aWYgKFJCX0VNUFRZX1JPT1QoXFx1MDAyNm1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bm9kZSA9IFxcdTAwMjZtc2stXFx1MDAzZW9vb19sYXN0X3NrYi1cXHUwMDNlcmJub2RlO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xcbitcXG4rXFx0XFx0LyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi9cXG4rXFx0XFx0aWYgKGFmdGVyNjQoTVBUQ1BfU0tCX0NCKGluX3NrYiktXFx1MDAzZW1hcF9zZXEsXFxuK1xcdFxcdFxcdCAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbWFwX3NlcSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0cHJ1bmVkID0gdHJ1ZTtcXG4rXFx0XFx0cHJldiA9IHJiX3ByZXYobm9kZSk7XFxuK1xcdFxcdHJiX2VyYXNlKG5vZGUsIFxcdTAwMjZtc2stXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XFxuK1xcdFxcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XFxuK1xcdFxcdG1zay1cXHUwMDNlb29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpO1xcbitcXG4rXFx0XFx0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XFxuK1xcdFxcdGlmIChtZW0gXFx1MDAzYz0gc2stXFx1MDAzZXNrX3JjdmJ1ZilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRub2RlID0gcHJldjtcXG4rXFx0fSB3aGlsZSAobm9kZSk7XFxuK1xcbitcXHRpZiAocHJ1bmVkKVxcbitcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKTtcXG4rfVxcbitcXG4rLyogVGhlIHN0YWNrIGNhbid0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IGF0IHRoZSBtc2sgbGV2ZWwsIG9yIHRoZVxcbisgKiBzdHJlYW0gd2lsbCBicmVhay5cXG4rICovXFxuK3N0YXRpYyBib29sIG1wdGNwX2Nhbl9pbmdlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHJldHVybiB1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgXFx1MDAzYz0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSB8fFxcbitcXHRcXHRcXHRfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1wdGNwX3NrKHNrKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRpZiAoIW1wdGNwX2Nhbl9pbmdlc3Qoc2spKSB7XFxuK1xcdFxcdG1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIG1wdGNwX2Nhbl9pbmdlc3Qoc2spO1xcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAvKiBcXFwiaW5zcGlyZWRcXFwiIGJ5IHRjcF9kYXRhX3F1ZXVlX29mbygpLCBtYWluIGRpZmZlcmVuY2VzOlxcbiAgKiAtIHVzZSBtcHRjcCBzZXFzXFxuICAqIC0gZG9uJ3QgY29wZSB3aXRoIHNhY2tzXFxuQEAgLTI1Myw2ICszMTIsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0dTY0IHNlcSwgZW5kX3NlcSwgbWF4X3NlcTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjE7XFxuIFxcbitcXHRpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7XFxuK1xcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xcbitcXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdHNlcSA9IE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxO1xcbiBcXHRlbmRfc2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXE7XFxuIFxcdG1heF9zZXEgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZtc2stXFx1MDAzZXJjdl93bmRfc2VudCk7XFxuQEAgLTM4OSw2ICs0NTQsMTMgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRpZiAoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEgPT0gbXNrLVxcdTAwM2VhY2tfc2VxKSB7XFxuIFxcdFxcdC8qIGluIHNlcXVlbmNlICovXFxuK2luc2VydDpcXG4rXFx0XFx0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xcbitcXHRcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcXG4rXFx0XFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRtc2stXFx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xcbiBcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYWNrX3NlcSwgbXNrLVxcdTAwM2VhY2tfc2VxICsgY29weV9sZW4pO1xcbiBcXHRcXHR0YWlsID0gc2tiX3BlZWtfdGFpbChcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbkBAIC00MDMsMjYgKzQ3NSwyMCBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBDb21wbGV0ZWx5IG9sZCBkYXRhPyAqL1xcbi1cXHRpZiAoIWFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEsIG1zay1cXHUwMDNlYWNrX3NlcSkpIHtcXG4tXFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xcbi1cXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qIFBhcnRpYWwgcGFja2V0ICovXFxuK1xcdGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxLCBtc2stXFx1MDAzZWFja19zZXEpKSB7XFxuK1xcdFxcdGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEgLSBtc2stXFx1MDAzZWFja19zZXE7XFxuK1xcdFxcdE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgKz0gbXNrLVxcdTAwM2VhY2tfc2VxIC1cXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbWFwX3NlcTtcXG4rXFx0XFx0TVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEgKz0gbXNrLVxcdTAwM2VhY2tfc2VxIC1cXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXE7XFxuK1xcdFxcdGdvdG8gaW5zZXJ0O1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBQYXJ0aWFsIHBhY2tldDogbWFwX3NlcSBcXHUwMDNjIGFja19zZXEgXFx1MDAzYyBlbmRfc2VxLlxcbi1cXHQgKiBTa2lwIHRoZSBhbHJlYWR5LWFja2VkIGJ5dGVzIGFuZCBlbnF1ZXVlIHRoZSBuZXcgZGF0YS5cXG4tXFx0ICovXFxuLVxcdGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEgLSBtc2stXFx1MDAzZWFja19zZXE7XFxuLVxcdE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgKz0gbXNrLVxcdTAwM2VhY2tfc2VxIC0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXE7XFxuLVxcdE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxICs9IG1zay1cXHUwMDNlYWNrX3NlcSAtXFxuLVxcdFxcdFxcdFxcdCAgICAgIE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxO1xcbi1cXHRtc2stXFx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xcbi1cXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYWNrX3NlcSwgbXNrLVxcdTAwM2VhY2tfc2VxICsgY29weV9sZW4pO1xcbi1cXG4tXFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xcbi1cXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdC8qIENvbXBsZXRlbHkgb2xkIGRhdGEgKi9cXG4rXFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xcbitcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1wdGNwX3N0b3BfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcXG5AQCAtNjgxLDYgKzc0Nyw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBzb2NrICpzc2sgPSBza2ItXFx1MDAzZXNrO1xcbiBcXHRib29sIGZyYWdzdG9sZW47XFxuK1xcdHU2NCBsaW1pdDtcXG4gXFx0aW50IGRlbHRhO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7XFxuQEAgLTY4OCw2ICs3NTUsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXFxuK1xcdGxpbWl0ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbitcXHRsaW1pdCArPSAobGltaXQgXFx1MDAzZVxcdTAwM2UgMSkgKyA2NCAqIDEwMjQ7XFxuK1xcdGxpbWl0ID0gbWluX3QodTY0LCBsaW1pdCwgVUlOVF9NQVgpO1xcbitcXHRpZiAobXNrLVxcdTAwM2ViYWNrbG9nX2xlbiBcXHUwMDNlIGxpbWl0IFxcdTAwMjZcXHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcXG4rXFx0XFx0X19NUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfQkFDS0xPR0RST1ApO1xcbitcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9CQUNLTE9HKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkpXFxuIFxcdFxcdHRhaWwgPSBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XFxuQEAgLTc1OSw3ICs4MzYsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFxuIFxcdFxcdFxcdG1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7XFxuIFxcbi1cXHRcXHRcXHRpZiAob3duX21zayBcXHUwMDI2XFx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXFx1MDAzYyBzay1cXHUwMDNlc2tfcmN2YnVmKSB7XFxuK1xcdFxcdFxcdGlmIChvd25fbXNrKSB7XFxuIFxcdFxcdFxcdFxcdG1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTtcXG4gXFx0XFx0XFx0XFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTExNDIsMTMgKzEyMTksNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbi17XFxuLVxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuLVxcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuLVxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgbXB0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbkBAIC0yMjE1LDEyICsyMjg1LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRcXG4gXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4gXFx0Ym9vbCBtb3ZlZCA9IGZhbHNlO1xcbiBcXG4tXFx0KmRlbHRhID0gMDtcXG4gXFx0d2hpbGUgKDEpIHtcXG4tXFx0XFx0LyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJ3QgZHJvcCAqL1xcbi1cXHRcXHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2Ugc2stXFx1MDAzZXNrX3JjdmJ1ZilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbiBcXHRcXHRwcmVmZXRjaChza2ItXFx1MDAzZW5leHQpO1xcbiBcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2tiLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0KmRlbHRhICs9IHNrYi1cXHUwMDNldHJ1ZXNpemU7XFxuQEAgLTIyNDgsOSArMjMxMyw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXFx1MDAzZWJhY2tsb2dfdW5hY2NvdW50ZWQgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3NvY2tldCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7XFxuIFxcbi1cXHQvKiBEb24ndCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkgfHxcXG4tXFx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNlIHNrLVxcdTAwM2Vza19yY3ZidWYpXFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKHNrYnMpO1xcbkBAIC0yMjU4LDIwICsyMzIxLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtb3ZlZCxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxcbi17XFxuLVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuLVxcbi1cXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XFxuLVxcdGxpc3Rfc3BsaWNlKHNrYnMsIFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBza2JzO1xcbiBcXHRib29sIGVucXVldWVkID0gZmFsc2U7XFxuLVxcdHUzMiBtb3ZlZDtcXG4rXFx0dTMyIG1vdmVkID0gMDtcXG4gXFxuIFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuIFxcdHdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXFx1MDAyNnNrYnMpKSB7XFxuQEAgLTIyNzksOCArMjMzNCw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcXHUwMDI2c2ticywgXFx1MDAyNm1vdmVkKTtcXG4gXFxuIFxcdFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuLVxcdFxcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFxcdTAwMjZza2JzKTtcXG4gXFx0fVxcbitcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XFxuIFxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4gXFxuIFxcdGlmIChlbnF1ZXVlZCBcXHUwMDI2XFx1MDAyNiBtcHRjcF9lcG9sbGluX3JlYWR5KHNrKSlcXG5AQCAtMjQ2OSw3ICsyNTI0LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4gXFxuIFxcdFxcdC8qIHN0aWxsIGRhdGEgb3V0c3RhbmRpbmcgYXQgVENQIGxldmVsPyBza2lwIHRoaXMgKi9cXG4gXFx0XFx0aWYgKCF0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc3NrKSkge1xcbi1cXHRcXHRcXHRtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7XFxuIFxcdFxcdFxcdG1pbl9zdGFsZV9jb3VudCA9IG1pbl90KGludCwgbWluX3N0YWxlX2NvdW50LCBzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuQEAgLTI3OTEsNDQgKzI4NDUsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIFxcdHNrX2Vycm9yX3JlcG9ydChzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuKy8qXFxuKyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsXFxuKyAqIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZVxcbisgKi9cXG4rc3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbitcXHRcXHRcXHRcXHR1NjQgc2VudF9zZXEpXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9O1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbi1cXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcXG4gXFx0c3RydWN0IHNvY2sgKnNzaztcXG4tXFx0aW50IHJldCwgZXJyO1xcbi1cXHR1MTYgbGVuID0gMDtcXG4tXFxuLVxcdG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbi1cXG4tXFx0LyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgXFxcInN0YWxlXFxcIiBsb2dpYyAqL1xcbi1cXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xcbi1cXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcXG4tXFx0aWYgKCFkZnJhZykge1xcbi1cXHRcXHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4tXFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcXG4tXFx0XFx0XFx0XFx0ICAgaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xcbi1cXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG4tXFx0XFx0XFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcXG4tXFxuLVxcdFxcdFxcdGdvdG8gcmVzZXRfdGltZXI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcXG4tXFx0XFx0XFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XFxuLVxcbi1cXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbitcXHRpbnQgcmV0LCBsZW4gPSAwO1xcbiBcXG4gXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcXG4gXFx0XFx0aWYgKFJFQURfT05DRShzdWJmbG93LVxcdTAwM2VzY2hlZHVsZWQpKSB7XFxuK1xcdFxcdFxcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVxcdTAwM2VkYXRhX3NlcTtcXG4gXFx0XFx0XFx0dTE2IGNvcGllZCA9IDA7XFxuIFxcbiBcXHRcXHRcXHRtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpO1xcbkBAIC0yODM4LDcgKzI4NzAsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHRsb2NrX3NvY2soc3NrKTtcXG4gXFxuIFxcdFxcdFxcdC8qIGxpbWl0IHJldHJhbnNtaXNzaW9uIHRvIHRoZSBieXRlcyBhbHJlYWR5IHNlbnQgb24gc29tZSBzdWJmbG93cyAqL1xcbi1cXHRcXHRcXHRpbmZvLnNlbnQgPSAwO1xcbitcXHRcXHRcXHRpbmZvLnNlbnQgPSBvZmZzZXQ7XFxuIFxcdFxcdFxcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVxcdTAwM2Vjc3VtX2VuYWJsZWQpID8gZGZyYWctXFx1MDAzZWRhdGFfbGVuIDpcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQ7XFxuIFxcbkBAIC0yODUzLDcgKzI4ODUsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHQgICAgIW1zay1cXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlZmFsbGJhY2tfbG9jayk7XFxuIFxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzc2spO1xcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHR3aGlsZSAoaW5mby5zZW50IFxcdTAwM2MgaW5mby5saW1pdCkge1xcbkBAIC0yODc2LDEzICsyOTA4LDk5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzc2spO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbitcXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcXG4rXFx0dTY0IHJldHJhbnNfc2VxLCBzZW50X3NlcTtcXG4rXFx0Ym9vbCBuZWVkX3JldHJhbnM7XFxuK1xcdGludCBlcnIsIGxlbjtcXG4rXFxuK1xcdG1wdGNwX3BtX2Noa19zdGFsZShtc2spO1xcbitcXG4rXFx0LyogR2V0IGFuIHVwZGF0ZWQgYW5kIGNvbnNpc3RlbnQgcnR4IHF1ZXVlIHN0YXR1cy4gKi9cXG4rXFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcXG4rXFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcXG4rXFx0cmV0cmFuc19zZXEgPSBtc2stXFx1MDAzZXNuZF91bmE7XFxuK1xcdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xcbitcXHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xcbitcXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdGJvb2wgYWxyZWFkeV9hY2tlZDtcXG4rXFxuK1xcdFxcdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcXG4rXFx0XFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIWRmcmFnIHx8ICFkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIENhbiBmYWlsIG9ubHkgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cXG4rXFx0XFx0bGVuID0gX19tcHRjcF9wdXNoX3JldHJhbnMoc2ssIGRmcmFnLCByZXRyYW5zX3NlcSk7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFxuK1xcdFxcdHJldHJhbnNfc2VxICs9IGxlbjtcXG4rXFx0XFx0bXNrLVxcdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcXG4rXFx0XFx0ZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCA9IG1heF90KHUxNiwgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHJldHJhbnNfc2VxIC0gZGZyYWctXFx1MDAzZWRhdGFfc2VxKTtcXG4rXFxuK1xcdFxcdC8qIFdpdGggY3N1bSBlbmFibGVkLCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi9cXG4rXFx0XFx0c2VudF9zZXEgPSBkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXFx1MDAzZWRhdGFfc2VxO1xcbitcXHRcXHRpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLVxcdTAwM2VzbmRfbnh0KSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcXG4rXFxuK1xcdFxcdC8qIEF0dGVtcHQgdGhlIG5leHQgZnJhZ21lbnQgb25seSBpZiB0aGUgY3VycmVudCBvbmUgaXNcXG4rXFx0XFx0ICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGJlZm9yZTY0KHJldHJhbnNfc2VxLCBkZnJhZy1cXHUwMDNlZGF0YV9zZXEgKyBkZnJhZy1cXHUwMDNlZGF0YV9sZW4pKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGRmcmFnID0gbGlzdF9pc19sYXN0KFxcdTAwMjZkZnJhZy1cXHUwMDNlbGlzdCwgXFx1MDAyNm1zay1cXHUwMDNlcnR4X3F1ZXVlKSA/XFxuK1xcdFxcdFxcdFxcdE5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpO1xcbitcXHRcXHRpZiAoIWRmcmFnKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIEluY29taW5nIGFja3MgY2FuIG1vdmUgc25kX3VuYSBhZnRlciB0aGUgY3VycmVudCBkZnJhZ1xcbitcXHRcXHQgKiBhY3Jvc3MgbG9vcCBpdGVyYXRpb25zLCBpZiBzbyBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcXG4rXFx0XFx0YWxyZWFkeV9hY2tlZCA9ICFiZWZvcmU2NChtc2stXFx1MDAzZXNuZF91bmEsIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSArXFxuK1xcdFxcdFxcdFxcdFxcdCAgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCk7XFxuK1xcdFxcdGlmIChhbHJlYWR5X2Fja2VkKSB7XFxuK1xcdFxcdFxcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuK1xcdFxcdFxcdHJldHJhbnNfc2VxID0gbXNrLVxcdTAwM2VzbmRfdW5hO1xcbitcXHRcXHRcXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcXG4rXFx0XFx0XFx0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcXG4rXFx0XFx0fSBlbHNlIGlmIChhZnRlcjY0KG1zay1cXHUwMDNlc25kX3VuYSwgcmV0cmFuc19zZXEpKSB7XFxuK1xcdFxcdFxcdHJldHJhbnNfc2VxID0gbXNrLVxcdTAwM2VzbmRfdW5hO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4rXFx0fVxcbiBcXG4tXFx0bXNrLVxcdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcXG4tXFx0ZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCA9IG1heChkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50LCBsZW4pO1xcbitcXHQvKiBBdHRlbXB0IGRhdGEtZmluIHJldHJhbnNtaXNzaW9uIG9ubHkgd2hlbiB0aGUgUlRYIHF1ZXVlIGlzIGVtcHR5LiAqL1xcbitcXHRpZiAoIW5lZWRfcmV0cmFucykge1xcbitcXHRcXHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4gXFxuLVxcdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xcbi1cXHRpZiAoYWZ0ZXI2NChkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXFx1MDAzZWRhdGFfc2VxLCBtc2stXFx1MDAzZXNuZF9ueHQpKVxcbi1cXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlc25kX254dCwgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSk7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcXG4rXFx0XFx0XFx0XFx0ICAgaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xcbitcXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG4rXFx0XFx0XFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcXG4rXFx0XFx0XFx0Z290byByZXNldF90aW1lcjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFx0fVxcbiBcXG4gcmVzZXRfdGltZXI6XFxuIFxcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XFxuQEAgLTM2NzYsMTIgKzM3OTQsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHR1MzIgbW92ZWQgPSAwO1xcbiBcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay1cXHUwMDNlY2JfZmxhZ3MgXFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XFxuIFxcdFxcdGJvb2wgc3Bvb2xfYmw7XFxuLVxcdFxcdHUzMiBtb3ZlZDtcXG4gXFxuIFxcdFxcdHNwb29sX2JsID0gbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFxcdTAwMjZza2JzKTtcXG4gXFx0XFx0aWYgKCFmbGFncyBcXHUwMDI2XFx1MDAyNiAhc3Bvb2xfYmwpXFxuQEAgLTM3MTQsOSArMzgzMiw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spO1xcbi1cXHRcXHRpZiAoc3Bvb2xfYmwpXFxuLVxcdFxcdFxcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFxcdTAwMjZza2JzKTtcXG4gXFx0fVxcbitcXHRpZiAobW92ZWQpXFxuK1xcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVxcdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcXG4gXFxuIFxcdGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChNUFRDUF9DTEVBTl9VTkEsIFxcdTAwMjZtc2stXFx1MDAzZWNiX2ZsYWdzKSlcXG4gXFx0XFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbmluZGV4IDFiODBmMmQ2ZWM1YTIuLmIzYWYzNDYyYmRkMTYgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbkBAIC01ODAsMTIgKzU4MCwxMSBAQCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0IHtcXG4gXFx0XFx0cmVtb3RlX2tleV92YWxpZCA6IDEsICAgICAgICAvKiByZWNlaXZlZCB0aGUgcGVlciBrZXkgZnJvbSAqL1xcbiBcXHRcXHRkaXNwb3NhYmxlIDogMSxcXHQgICAgLyogY3R4IGNhbiBiZSBmcmVlIGF0IHVscCByZWxlYXNlIHRpbWUgKi9cXG4gXFx0XFx0Y2xvc2luZyA6IDEsXFx0ICAgIC8qIG11c3Qgbm90IHBhc3MgcnggZGF0YSB0byBtc2sgYW55bW9yZSAqL1xcbi1cXHRcXHRzdGFsZSA6IDEsXFx0ICAgIC8qIHVuYWJsZSB0byBzbmQvcmN2IGRhdGEsIGRvIG5vdCB1c2UgZm9yIHhtaXQgKi9cXG4gXFx0XFx0dmFsaWRfY3N1bV9zZWVuIDogMSwgICAgICAgIC8qIGF0IGxlYXN0IG9uZSBjc3VtIHZhbGlkYXRlZCAqL1xcbiBcXHRcXHRpc19tcHRmbyA6IDEsXFx0ICAgIC8qIHN1YmZsb3cgaXMgZG9pbmcgVEZPICovXFxuIFxcdFxcdGNsb3NlX2V2ZW50X2RvbmUgOiAxLCAgICAgICAvKiBoYXMgZG9uZSB0aGUgcG9zdC1jbG9zZWQgcGFydCAqL1xcbiBcXHRcXHRtcGNfZHJvcCA6IDEsXFx0ICAgIC8qIHRoZSBNUEMgb3B0aW9uIGhhcyBiZWVuIGRyb3BwZWQgaW4gYSBydHggKi9cXG4tXFx0XFx0X191bnVzZWQgOiA4O1xcbitcXHRcXHRfX3VudXNlZCA6IDk7XFxuIFxcdGJvb2xcXHRkYXRhX2F2YWlsO1xcbiBcXHRib29sXFx0c2NoZWR1bGVkO1xcbiBcXHRib29sXFx0cG1fbGlzdGVuZXI7XFx0ICAgIC8qIGEgbGlzdGVuZXIgbWFuYWdlZCBieSB0aGUga2VybmVsIFBNPyAqL1xcbkBAIC02MDQsNyArNjAzLDExIEBAIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQge1xcbiBcXHR1OFxcdHJlc2V0X3NlZW46MTtcXG4gXFx0dThcXHRyZXNldF90cmFuc2llbnQ6MTtcXG4gXFx0dThcXHRyZXNldF9yZWFzb246NDtcXG4tXFx0dThcXHRzdGFsZV9jb3VudDtcXG4rXFx0dThcXHRzdGFsZV9jb3VudDtcXHQgICAgLyogUHJvdGVjdGVkIGJ5IHRoZSBtc2sgc29ja2V0IGxvY2sgKi9cXG4rXFx0dThcXHRzdGFsZTtcXHRcXHQgICAgLyogUHJvdGVjdGVkIGJ5IHRoZSBtc2sgc29ja2V0IGxvY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgKiBpZiBzZXQgdGhlIHN1YmZsb3cgaXMgdW5hYmxlIHRvIHNuZC9yY3ZcXG4rXFx0XFx0XFx0XFx0ICAgICAqIGRhdGEsIHRoZSBzY2hlZHVsZSBzaG91bGQgc2tpcCBpdFxcbitcXHRcXHRcXHRcXHQgICAgICovXFxuIFxcbiBcXHR1MzJcXHRzdWJmbG93X2lkO1xcbiBcXG5AQCAtMTEwMyw3ICsxMTA2LDcgQEAgaW50IG1wdGNwX3BtX3BhcnNlX2VudHJ5KHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuIGJvb2wgbXB0Y3BfcG1fYWRkcl9mYW1pbGllc19tYXRjaChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqbG9jLFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbSk7XFxuLXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzayk7XFxuK3ZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbiB2b2lkIG1wdGNwX3BtX25ld19jb25uZWN0aW9uKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCBzZXJ2ZXJfc2lkZSk7XFxuIHZvaWQgbXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzayk7XFxuIGJvb2wgbXB0Y3BfcG1fYWxsb3dfbmV3X3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjE1LjQxNTIzNTEwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcyNjEyNDgxNjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX3BtX2Noa19zdGFsZVwiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc1wiLFxuICAgIFwibXB0Y3BfZGF0YV9yZWFkeVwiLFxuICAgIFwibXB0Y3BfcmVjdm1zZ1wiLFxuICAgIFwibXB0Y3Bfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cywgYmFja2xvZyBkcm9wcywgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBhZGRzIG5ldyBNSUIgY291bnRlcnMgYW5kIG1vZGlmaWVzIGNvcmUgTVBUQ1AgZnVuY3Rpb25zIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYW5kIGBfX21wdGNwX3JldHJhbnNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gc3RhbmRhcmQgTVBUQ1Agc29ja2V0IG9wZXJhdGlvbnMgYW5kIG5ldHdvcmsgcmVjZWl2ZSBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNjA2YTdiYzQ2NTEwYjhhOTg0ODhhYjUyNjRiNzNmYjg2M2ZhODlhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjoyMToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xuaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuY1xuKysrIGIvbmV0L21wdGNwL21pYi5jXG5AQCAtODUsNiArODUsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xuIFx0U05NUF9NSUJfSVRFTShcIlNpbXVsdENvbm5lY3RGYWxsYmFja1wiLCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJGYWxsYmFja0ZhaWxlZFwiLCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLFxuIFx0U05NUF9NSUJfSVRFTShcIldpblByb2JlXCIsIE1QVENQX01JQl9XSU5QUk9CRSksXG4rXHRTTk1QX01JQl9JVEVNKFwiQmFja2xvZ0Ryb3BcIiwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKSxcbitcdFNOTVBfTUlCX0lURU0oXCJSY3ZQcnVuZWRcIiwgTVBUQ1BfTUlCX1JDVlBSVU5FRCksXG4rXHRTTk1QX01JQl9JVEVNKFwiT0ZPUHJ1bmVkXCIsIE1QVENQX01JQl9PRk9QUlVORUQpLFxuIH07XG4gXG4gLyogbXB0Y3BfbWliX2FsbG9jIC0gYWxsb2NhdGUgcGVyY3B1IG1pYiBjb3VudGVyc1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggODEyMjE4YjVlZDJiZi4uM2EzNDI1ZTI1OGE3NiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxuKysrIGIvbmV0L21wdGNwL21pYi5oXG5AQCAtODgsNiArODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLLFx0LyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi9cbiBcdE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCxcdC8qIENhbid0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXG4gXHRNUFRDUF9NSUJfV0lOUFJPQkUsXHRcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXG4rXHRNUFRDUF9NSUJfQkFDS0xPR0RST1AsXHRcdC8qIEJhY2tsb2cgb3ZlciBtZW1vcnkgbGltaXQgKi9cbitcdE1QVENQX01JQl9SQ1ZQUlVORUQsXHRcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqL1xuK1x0TVBUQ1BfTUlCX09GT1BSVU5FRCxcdFx0LyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqL1xuIFx0X19NUFRDUF9NSUJfTUFYXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggMTA1N2Q1MDA1NzdiMC4uYjgzMThlMDMwMTM4OSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTkwLDggKzExOTAsMzQgQEAgc3RhdGljIGJvb2wgYWRkX2FkZHJfaG1hY192YWxpZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0cmV0dXJuIGhtYWMgPT0gbXBfb3B0LVx1MDAzZWFobWFjO1xuIH1cbiBcbi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksXG4tICogZWxzZSByZXR1cm4gdHJ1ZS5cbitzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbitcdHUzMiByY3ZidWYgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbitcbitcdGlmIChsaWtlbHkoKHUzMilza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNjPSByY3ZidWYgXHUwMDI2XHUwMDI2XG4rXHRcdCAgIFJFQURfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4pIFx1MDAzYz0gcmN2YnVmKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4sIHJzdCBvciBhbHJlYWR5LWFja2VkIHNlZ20uICovXG4rXHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSB8fFxuK1x0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IChUQ1BIRFJfRklOIHwgVENQSERSX1JTVCkgfHxcbitcdCAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVx1MDAzZXJjdl9ueHQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi9cbitcdGluZXRfY3NrKHNzayktXHUwMDNlaWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19OT01FTSB8IElDU0tfQUNLX05PVztcbitcdGluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spO1xuK1xuK1x0LyogUGxhaW4gVENQIChmYWxsYmFjaykgYW5kIHNrYiBpcyBkcm9wcGVkIGJlZm9yZSB0aGUgVENQIHJlY3YgcXVldWUuICovXG4rXHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFJDVlFEUk9QKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgZHJvcCB0aGUgcGFja2V0LCBpLmUuIGluIGNhc2Ugb2YgZXJyb3IsXG4rICogc3ViZmxvdyBoYXMgYmVlbiByZXNldCwgb3Igb3ZlciBtZW1vcnkgbGltaXRzLlxuICAqL1xuIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuQEAgLTEyMTcsNyArMTI0Myw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXHUwMDNlY29ubiwgc2ssIHNrYik7XG4gXHR9XG4gXG4gXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFx1MDAyNm1wX29wdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uY1xuaW5kZXggNjRhMTIzNmFhYmVlOS4uZDFmNzNjM2UzOWZhMyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbS5jXG4rKysgYi9uZXQvbXB0Y3AvcG0uY1xuQEAgLTEwNjUsNyArMTA2NSw4IEBAIGJvb2wgbXB0Y3BfcG1faXNfYmFja3VwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjKVxuIFx0cmV0dXJuIG1wdGNwX3BtX25sX2lzX2JhY2t1cChtc2ssIFx1MDAyNnNrY19sb2NhbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuK3N0YXRpYyB2b2lkXG4rbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICppdGVyLCAqc3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG5AQCAtMTEwMiwyMiArMTEwMywzNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY1xuIFx0fVxuIH1cbiBcbi12b2lkIG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4rdm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4tXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcbi1cdHUzMiByY3ZfdHN0YW1wID0gUkVBRF9PTkNFKHRjcF9zayhzc2spLVx1MDAzZXJjdl90c3RhbXApO1xuLVxuLVx0Lyoga2VlcCB0cmFjayBvZiBydHggcGVyaW9kcyB3aXRoIG5vIHByb2dyZXNzICovXG4tXHRpZiAoIXN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpIHtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCsrO1xuLVx0fSBlbHNlIGlmIChzdWJmbG93LVx1MDAzZXN0YWxlX3Jjdl90c3RhbXAgPT0gcmN2X3RzdGFtcCkge1xuLVx0XHRpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCBcdTAwM2MgVThfTUFYKVxuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbitcbitcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4rXHRcdHN0cnVjdCBzb2NrICpzc2sgPSBtcHRjcF9zdWJmbG93X3RjcF9zb2NrKHN1YmZsb3cpO1xuK1x0XHR1MzIgcmN2X3RzdGFtcDtcbitcbitcdFx0aWYgKCFfX21wdGNwX3N1YmZsb3dfYWN0aXZlKHN1YmZsb3cpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBObyBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gbm90IHN0YWxlICovXG4rXHRcdGlmICh0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc3NrKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Lyoga2VlcCB0cmFjayBvZiBydHggcGVyaW9kcyB3aXRoIG5vIHByb2dyZXNzICovXG4rXHRcdHJjdl90c3RhbXAgPSBSRUFEX09OQ0UodGNwX3NrKHNzayktXHUwMDNlcmN2X3RzdGFtcCk7XG4rXHRcdGlmICghc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCkge1xuK1x0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfcmN2X3RzdGFtcCA9IHJjdl90c3RhbXA7XG4gXHRcdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCsrO1xuLVx0XHRtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUobXNrLCBzc2spO1xuLVx0fSBlbHNlIHtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCA9IDA7XG4tXHRcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcbitcdFx0fSBlbHNlIGlmIChzdWJmbG93LVx1MDAzZXN0YWxlX3Jjdl90c3RhbXAgPT0gcmN2X3RzdGFtcCkge1xuK1x0XHRcdGlmIChzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50IFx1MDAzYyBVOF9NQVgpXG4rXHRcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50Kys7XG4rXHRcdFx0bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUobXNrLCBzc2spO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQgPSAwO1xuK1x0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcbitcdFx0fVxuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCA3YzgxODBkOGQ1ZWZmLi5lYzg3NGQyZWFkNmE0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMjQyLDYgKzI0Miw2NSBAQCBzdGF0aWMgYm9vbCBtcHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qIFwiSW5zcGlyZWRcIiBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXG4rICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cbisgKi9cbitzdGF0aWMgdm9pZCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7XG4rXHRib29sIHBydW5lZCA9IGZhbHNlO1xuK1x0dTY0IG1lbTtcbitcbitcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRub2RlID0gXHUwMDI2bXNrLVx1MDAzZW9vb19sYXN0X3NrYi1cdTAwM2VyYm5vZGU7XG4rXG4rXHRkbyB7XG4rXHRcdHN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7XG4rXG4rXHRcdC8qIFN0b3AgcHJ1bmluZyBpZiB0aGUgaW5jb21pbmcgc2tiIHdvdWxkIGxhbmQgaW4gT29PIHRhaWwuICovXG4rXHRcdGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihpbl9za2IpLVx1MDAzZW1hcF9zZXEsXG4rXHRcdFx0ICAgIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRwcnVuZWQgPSB0cnVlO1xuK1x0XHRwcmV2ID0gcmJfcHJldihub2RlKTtcbitcdFx0cmJfZXJhc2Uobm9kZSwgXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XG4rXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdG1zay1cdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XG4rXG4rXHRcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xuK1x0XHRpZiAobWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRub2RlID0gcHJldjtcbitcdH0gd2hpbGUgKG5vZGUpO1xuK1xuK1x0aWYgKHBydW5lZClcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT1BSVU5FRCk7XG4rfVxuK1xuKy8qIFRoZSBzdGFjayBjYW4ndCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCBhdCB0aGUgbXNrIGxldmVsLCBvciB0aGVcbisgKiBzdHJlYW0gd2lsbCBicmVhay5cbisgKi9cbitzdGF0aWMgYm9vbCBtcHRjcF9jYW5faW5nZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRyZXR1cm4gdW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYz0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpIHx8XG4rXHRcdFx0X19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpO1xuK31cbitcbitzdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0aWYgKCFtcHRjcF9jYW5faW5nZXN0KHNrKSkge1xuK1x0XHRtcHRjcF9wcnVuZV9vZm9fcXVldWUoc2ssIHNrYik7XG4rXHRcdHJldHVybiBtcHRjcF9jYW5faW5nZXN0KHNrKTtcbitcdH1cbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKiBcImluc3BpcmVkXCIgYnkgdGNwX2RhdGFfcXVldWVfb2ZvKCksIG1haW4gZGlmZmVyZW5jZXM6XG4gICogLSB1c2UgbXB0Y3Agc2Vxc1xuICAqIC0gZG9uJ3QgY29wZSB3aXRoIHNhY2tzXG5AQCAtMjUzLDYgKzMxMiwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0dTY0IHNlcSwgZW5kX3NlcSwgbWF4X3NlcTtcbiBcdHN0cnVjdCBza19idWZmICpza2IxO1xuIFxuK1x0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuK1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcbitcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0c2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbiBcdGVuZF9zZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxO1xuIFx0bWF4X3NlcSA9IGF0b21pYzY0X3JlYWQoXHUwMDI2bXNrLVx1MDAzZXJjdl93bmRfc2VudCk7XG5AQCAtMzg5LDYgKzQ1NCwxMyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdGlmIChNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxID09IG1zay1cdTAwM2VhY2tfc2VxKSB7XG4gXHRcdC8qIGluIHNlcXVlbmNlICovXG4raW5zZXJ0OlxuK1x0XHRpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4rXHRcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcbiBcdFx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xuIFx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VhY2tfc2VxLCBtc2stXHUwMDNlYWNrX3NlcSArIGNvcHlfbGVuKTtcbiBcdFx0dGFpbCA9IHNrYl9wZWVrX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5AQCAtNDAzLDI2ICs0NzUsMjAgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdC8qIENvbXBsZXRlbHkgb2xkIGRhdGE/ICovXG4tXHRpZiAoIWFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgbXNrLVx1MDAzZWFja19zZXEpKSB7XG4tXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbi1cdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0LyogUGFydGlhbCBwYWNrZXQgKi9cbitcdGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xuK1x0XHRjb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgLSBtc2stXHUwMDNlYWNrX3NlcTtcbitcdFx0TVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0ICs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbitcdFx0XHRcdFx0ICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuK1x0XHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxICs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbitcdFx0XHRcdFx0ICAgICAgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbitcdFx0Z290byBpbnNlcnQ7XG4gXHR9XG4gXG4tXHQvKiBQYXJ0aWFsIHBhY2tldDogbWFwX3NlcSBcdTAwM2MgYWNrX3NlcSBcdTAwM2MgZW5kX3NlcS5cbi1cdCAqIFNraXAgdGhlIGFscmVhZHktYWNrZWQgYnl0ZXMgYW5kIGVucXVldWUgdGhlIG5ldyBkYXRhLlxuLVx0ICovXG4tXHRjb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgLSBtc2stXHUwMDNlYWNrX3NlcTtcbi1cdE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldCArPSBtc2stXHUwMDNlYWNrX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4tXHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxICs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbi1cdFx0XHRcdCAgICAgIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4tXHRtc2stXHUwMDNlYnl0ZXNfcmVjZWl2ZWQgKz0gY29weV9sZW47XG4tXHRXUklURV9PTkNFKG1zay1cdTAwM2VhY2tfc2VxLCBtc2stXHUwMDNlYWNrX3NlcSArIGNvcHlfbGVuKTtcbi1cbi1cdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbi1cdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcbi1cdHJldHVybiB0cnVlO1xuK1x0LyogQ29tcGxldGVseSBvbGQgZGF0YSAqL1xuK1x0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xuK1x0bXB0Y3BfZHJvcChzaywgc2tiKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXB0Y3Bfc3RvcF9ydHhfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxuQEAgLTY4MSw2ICs3NDcsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbiBcdHN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDtcbiBcdHN0cnVjdCBzb2NrICpzc2sgPSBza2ItXHUwMDNlc2s7XG4gXHRib29sIGZyYWdzdG9sZW47XG4rXHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4OCw2ICs3NTUsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdC8qIFNpbWlsYXIgYWRkaXRpb25hbCBhbGxvd2FuY2UgYXMgcGxhaW4gVENQLiAqL1xuK1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbitcdGxpbWl0ICs9IChsaW1pdCBcdTAwM2VcdTAwM2UgMSkgKyA2NCAqIDEwMjQ7XG4rXHRsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTtcbitcdGlmIChtc2stXHUwMDNlYmFja2xvZ19sZW4gXHUwMDNlIGxpbWl0IFx1MDAyNlx1MDAyNiAhX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7XG4rXHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbitcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfQkFDS0xPRyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdC8qIFRyeSB0byBjb2FsZXNjZSB3aXRoIHRoZSBsYXN0IHNrYiBpbiBvdXIgYmFja2xvZyAqL1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHR0YWlsID0gbGlzdF9sYXN0X2VudHJ5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTtcbkBAIC03NTksNyArODM2LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXG4gXHRcdFx0bXB0Y3BfaW5pdF9za2Ioc3NrLCBza2IsIG9mZnNldCwgbGVuKTtcbiBcbi1cdFx0XHRpZiAob3duX21zayBcdTAwMjZcdTAwMjYgc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYyBzay1cdTAwM2Vza19yY3ZidWYpIHtcbitcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTQyLDEzICsxMjE5LDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcbiBcdG1wdGNwX3dyaXRlX3NwYWNlKHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4te1xuLVx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbi1cdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4tXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbkBAIC0yMjE1LDEyICsyMjg1LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRib29sIG1vdmVkID0gZmFsc2U7XG4gXG4tXHQqZGVsdGEgPSAwO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJ3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgKz0gc2tiLVx1MDAzZXRydWVzaXplO1xuQEAgLTIyNDgsOSArMjMxMyw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfdW5hY2NvdW50ZWQgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3NvY2tldCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7XG4gXG4tXHQvKiBEb24ndCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdElOSVRfTElTVF9IRUFEKHNrYnMpO1xuQEAgLTIyNTgsMjAgKzIzMjEsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtb3ZlZCxcbi1cdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbi17XG4tXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuLVxuLVx0V1JJVEVfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcbi1cdGxpc3Rfc3BsaWNlKHNrYnMsIFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpO1xuLX1cbi1cbiBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxuIHtcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4rXHR1MzIgbW92ZWQgPSAwO1xuIFxuIFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbiBcdHdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticykpIHtcbkBAIC0yMjc5LDggKzIzMzQsOCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRlbnF1ZXVlZCB8PSBfX21wdGNwX21vdmVfc2ticyhzaywgXHUwMDI2c2ticywgXHUwMDI2bW92ZWQpO1xuIFxuIFx0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuLVx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbitcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI0NjksNyArMjUyNCw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4gXG4gXHRcdC8qIHN0aWxsIGRhdGEgb3V0c3RhbmRpbmcgYXQgVENQIGxldmVsPyBza2lwIHRoaXMgKi9cbiBcdFx0aWYgKCF0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc3NrKSkge1xuLVx0XHRcdG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKG1zaywgc3NrKTtcbiBcdFx0XHRtaW5fc3RhbGVfY291bnQgPSBtaW5fdChpbnQsIG1pbl9zdGFsZV9jb3VudCwgc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC0yNzkxLDQ0ICsyODQ1LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbisvKlxuKyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsXG4rICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXG4rICovXG4rc3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuK1x0XHRcdFx0dTY0IHNlbnRfc2VxKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuLVx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrO1xuLVx0aW50IHJldCwgZXJyO1xuLVx0dTE2IGxlbiA9IDA7XG4tXG4tXHRtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbi1cbi1cdC8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrIFwic3RhbGVcIiBsb2dpYyAqL1xuLVx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbi1cdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xuLVx0aWYgKCFkZnJhZykge1xuLVx0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4tXHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuLVxuLVx0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuLVx0XHRcdFx0ICAgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XG4tXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4tXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbi1cbi1cdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbi1cdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbi1cbi1cdFx0Z290byByZXNldF90aW1lcjtcbi1cdH1cbi1cbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4rXHRpbnQgcmV0LCBsZW4gPSAwO1xuIFxuIFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbiBcdFx0aWYgKFJFQURfT05DRShzdWJmbG93LVx1MDAzZXNjaGVkdWxlZCkpIHtcbitcdFx0XHR1MTYgb2Zmc2V0ID0gc2VudF9zZXEgLSBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiBcdFx0XHR1MTYgY29waWVkID0gMDtcbiBcbiBcdFx0XHRtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpO1xuQEAgLTI4MzgsNyArMjg3MCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0bG9ja19zb2NrKHNzayk7XG4gXG4gXHRcdFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXG4tXHRcdFx0aW5mby5zZW50ID0gMDtcbitcdFx0XHRpbmZvLnNlbnQgPSBvZmZzZXQ7XG4gXHRcdFx0aW5mby5saW1pdCA9IFJFQURfT05DRShtc2stXHUwMDNlY3N1bV9lbmFibGVkKSA/IGRmcmFnLVx1MDAzZWRhdGFfbGVuIDpcbiBcdFx0XHRcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudDtcbiBcbkBAIC0yODUzLDcgKzI4ODUsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdCAgICAhbXNrLVx1MDAzZWFsbG93X3N1YmZsb3dzKSB7XG4gXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlZmFsbGJhY2tfbG9jayk7XG4gXHRcdFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbi1cdFx0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1x0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3aGlsZSAoaW5mby5zZW50IFx1MDAzYyBpbmZvLmxpbWl0KSB7XG5AQCAtMjg3NiwxMyArMjkwOCw5OSBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuIFx0XHR9XG4gXHR9XG4rXHRyZXR1cm4gbGVuO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuK1x0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4rXHR1NjQgcmV0cmFuc19zZXEsIHNlbnRfc2VxO1xuK1x0Ym9vbCBuZWVkX3JldHJhbnM7XG4rXHRpbnQgZXJyLCBsZW47XG4rXG4rXHRtcHRjcF9wbV9jaGtfc3RhbGUobXNrKTtcbitcbitcdC8qIEdldCBhbiB1cGRhdGVkIGFuZCBjb25zaXN0ZW50IHJ0eCBxdWV1ZSBzdGF0dXMuICovXG4rXHRtcHRjcF9kYXRhX2xvY2soc2spO1xuK1x0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbitcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbitcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4rXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdGJvb2wgYWxyZWFkeV9hY2tlZDtcbitcbitcdFx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRicmVhaztcbitcbitcdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbitcdFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWRmcmFnIHx8ICFkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIENhbiBmYWlsIG9ubHkgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbitcdFx0bGVuID0gX19tcHRjcF9wdXNoX3JldHJhbnMoc2ssIGRmcmFnLCByZXRyYW5zX3NlcSk7XG4rXHRcdGlmIChsZW4gXHUwMDNjIDApXG4rXHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4rXG4rXHRcdHJldHJhbnNfc2VxICs9IGxlbjtcbitcdFx0bXNrLVx1MDAzZWJ5dGVzX3JldHJhbnMgKz0gbGVuO1xuK1x0XHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCxcbitcdFx0XHRcdFx0ICAgIHJldHJhbnNfc2VxIC0gZGZyYWctXHUwMDNlZGF0YV9zZXEpO1xuK1xuK1x0XHQvKiBXaXRoIGNzdW0gZW5hYmxlZCwgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4rXHRcdHNlbnRfc2VxID0gZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXE7XG4rXHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4rXHRcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgc2VudF9zZXEpO1xuK1xuK1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4rXHRcdCAqIGNvbXBsZXRlbHkgcmV0cmFuc21pdHRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgKyBkZnJhZy1cdTAwM2VkYXRhX2xlbikpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGRmcmFnID0gbGlzdF9pc19sYXN0KFx1MDAyNmRmcmFnLVx1MDAzZWxpc3QsIFx1MDAyNm1zay1cdTAwM2VydHhfcXVldWUpID9cbitcdFx0XHRcdE5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpO1xuK1x0XHRpZiAoIWRmcmFnKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBJbmNvbWluZyBhY2tzIGNhbiBtb3ZlIHNuZF91bmEgYWZ0ZXIgdGhlIGN1cnJlbnQgZGZyYWdcbitcdFx0ICogYWNyb3NzIGxvb3AgaXRlcmF0aW9ucywgaWYgc28gc3RhcnQgYWdhaW4gZnJvbSBSVFggaGVhZC5cbitcdFx0ICovXG4rXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4rXHRcdGFscmVhZHlfYWNrZWQgPSAhYmVmb3JlNjQobXNrLVx1MDAzZXNuZF91bmEsIGRmcmFnLVx1MDAzZWRhdGFfc2VxICtcbitcdFx0XHRcdFx0ICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpO1xuK1x0XHRpZiAoYWxyZWFkeV9hY2tlZCkge1xuK1x0XHRcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4rXHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbitcdFx0XHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbitcdFx0XHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuK1x0XHR9IGVsc2UgaWYgKGFmdGVyNjQobXNrLVx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xuK1x0XHRcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRcdH1cbitcdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuK1x0fVxuIFxuLVx0bXNrLVx1MDAzZWJ5dGVzX3JldHJhbnMgKz0gbGVuO1xuLVx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4KGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCwgbGVuKTtcbitcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXG4rXHRpZiAoIW5lZWRfcmV0cmFucykge1xuK1x0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4rXHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFxuLVx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4tXHRpZiAoYWZ0ZXI2NChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcSwgbXNrLVx1MDAzZXNuZF9ueHQpKVxuLVx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VzbmRfbnh0LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4rXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4rXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgKyAxKTtcbitcdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbitcdFx0XHRtcHRjcF9zZW5kX2Fjayhtc2spO1xuK1x0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuK1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1x0fVxuIFxuIHJlc2V0X3RpbWVyOlxuIFx0bXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHNrKTtcbkBAIC0zNjc2LDEyICszNzk0LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdGZvciAoOzspIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IChtc2stXHUwMDNlY2JfZmxhZ3MgXHUwMDI2IE1QVENQX0ZMQUdTX1BST0NFU1NfQ1RYX05FRUQpO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGpvaW5fbGlzdCwgc2ticztcbiBcdFx0Ym9vbCBzcG9vbF9ibDtcbi1cdFx0dTMyIG1vdmVkO1xuIFxuIFx0XHRzcG9vbF9ibCA9IG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHNrLCBcdTAwMjZza2JzKTtcbiBcdFx0aWYgKCFmbGFncyBcdTAwMjZcdTAwMjYgIXNwb29sX2JsKVxuQEAgLTM3MTQsOSArMzgzMiw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spO1xuLVx0XHRpZiAoc3Bvb2xfYmwpXG4tXHRcdFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXHUwMDI2c2ticyk7XG4gXHR9XG4rXHRpZiAobW92ZWQpXG4rXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXG4gXHRpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfQ0xFQU5fVU5BLCBcdTAwMjZtc2stXHUwMDNlY2JfZmxhZ3MpKVxuIFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDFiODBmMmQ2ZWM1YTIuLmIzYWYzNDYyYmRkMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC01ODAsMTIgKzU4MCwxMSBAQCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0IHtcbiBcdFx0cmVtb3RlX2tleV92YWxpZCA6IDEsICAgICAgICAvKiByZWNlaXZlZCB0aGUgcGVlciBrZXkgZnJvbSAqL1xuIFx0XHRkaXNwb3NhYmxlIDogMSxcdCAgICAvKiBjdHggY2FuIGJlIGZyZWUgYXQgdWxwIHJlbGVhc2UgdGltZSAqL1xuIFx0XHRjbG9zaW5nIDogMSxcdCAgICAvKiBtdXN0IG5vdCBwYXNzIHJ4IGRhdGEgdG8gbXNrIGFueW1vcmUgKi9cbi1cdFx0c3RhbGUgOiAxLFx0ICAgIC8qIHVuYWJsZSB0byBzbmQvcmN2IGRhdGEsIGRvIG5vdCB1c2UgZm9yIHhtaXQgKi9cbiBcdFx0dmFsaWRfY3N1bV9zZWVuIDogMSwgICAgICAgIC8qIGF0IGxlYXN0IG9uZSBjc3VtIHZhbGlkYXRlZCAqL1xuIFx0XHRpc19tcHRmbyA6IDEsXHQgICAgLyogc3ViZmxvdyBpcyBkb2luZyBURk8gKi9cbiBcdFx0Y2xvc2VfZXZlbnRfZG9uZSA6IDEsICAgICAgIC8qIGhhcyBkb25lIHRoZSBwb3N0LWNsb3NlZCBwYXJ0ICovXG4gXHRcdG1wY19kcm9wIDogMSxcdCAgICAvKiB0aGUgTVBDIG9wdGlvbiBoYXMgYmVlbiBkcm9wcGVkIGluIGEgcnR4ICovXG4tXHRcdF9fdW51c2VkIDogODtcbitcdFx0X191bnVzZWQgOiA5O1xuIFx0Ym9vbFx0ZGF0YV9hdmFpbDtcbiBcdGJvb2xcdHNjaGVkdWxlZDtcbiBcdGJvb2xcdHBtX2xpc3RlbmVyO1x0ICAgIC8qIGEgbGlzdGVuZXIgbWFuYWdlZCBieSB0aGUga2VybmVsIFBNPyAqL1xuQEAgLTYwNCw3ICs2MDMsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7XG4gXHR1OFx0cmVzZXRfc2VlbjoxO1xuIFx0dThcdHJlc2V0X3RyYW5zaWVudDoxO1xuIFx0dThcdHJlc2V0X3JlYXNvbjo0O1xuLVx0dThcdHN0YWxlX2NvdW50O1xuK1x0dThcdHN0YWxlX2NvdW50O1x0ICAgIC8qIFByb3RlY3RlZCBieSB0aGUgbXNrIHNvY2tldCBsb2NrICovXG4rXHR1OFx0c3RhbGU7XHRcdCAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jayxcbitcdFx0XHRcdCAgICAgKiBpZiBzZXQgdGhlIHN1YmZsb3cgaXMgdW5hYmxlIHRvIHNuZC9yY3ZcbitcdFx0XHRcdCAgICAgKiBkYXRhLCB0aGUgc2NoZWR1bGUgc2hvdWxkIHNraXAgaXRcbitcdFx0XHRcdCAgICAgKi9cbiBcbiBcdHUzMlx0c3ViZmxvd19pZDtcbiBcbkBAIC0xMTAzLDcgKzExMDYsNyBAQCBpbnQgbXB0Y3BfcG1fcGFyc2VfZW50cnkoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpsb2MsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbSk7XG4tdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKTtcbit2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiB2b2lkIG1wdGNwX3BtX25ld19jb25uZWN0aW9uKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCBzZXJ2ZXJfc2lkZSk7XG4gdm9pZCBtcHRjcF9wbV9mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKTtcbiBib29sIG1wdGNwX3BtX2FsbG93X25ld19zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MTUuNDE1MjM3Mzg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4OTk3NzU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNUFRDUCBDb2RlIENoYW5nZXMgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgTVBUQ1Agc3Vic3lzdGVtOiBgbmV0L21wdGNwL21pYi5jYCwgYG5ldC9tcHRjcC9taWIuaGAsIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCwgYG5ldC9tcHRjcC9wbS5jYCwgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgYW5kIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAuIExvb2tzIGxpa2UgdGhlIGNvcmUgTVBUQ1AgaW1wbGVtZW50YXRpb24gaXMgYmVpbmcgdXBkYXRlZC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbmV3IE1JQiBjb3VudGVycyBmb3IgTVBUQ1Atc3BlY2lmaWMgZXZlbnRzLCBsaWtlIGJhY2tsb2cgZHJvcHMsIHJlY2VpdmUgcHJ1bmluZywgYW5kIG91dC1vZi1vcmRlciBkYXRhIHBydW5pbmcuIFRoYXTigJlzIGEgZ29vZCBhZGRpdGlvbiBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy5cblxuSSBhbHNvIHNlZSBtb2RpZmljYXRpb25zIHRvIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgcHJvYmFibHkgdG8gaW50ZWdyYXRlIGEgY2hlY2sgZm9yIGBtcHRjcF9vdmVyX2xpbWl0YC4gTWFrZXMgc2Vuc2U7IG1hbmFnaW5nIG1lbW9yeSBsaW1pdHMgaXMgY3J1Y2lhbCBpbiBhIE11bHRpcGF0aCBjb250ZXh0LiBBbmQgdGhlIGZhY3QgdGhhdCB3ZSdyZSBzZWVpbmcgY2hhbmdlcyB0byBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBhbmQgYG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlYCBoaW50cyBhdCBzb21lIHVwZGF0ZXMgdG8gdGhlIHBhdGggbWFuYWdlciwgcG9zc2libHkgcmVsYXRlZCB0byBoYW5kbGluZyBzdGFsZSBzdWJmbG93cyBvciBtZW1vcnkgbGltaXRhdGlvbnMuXG5cbkJleW9uZCB0aGF0LCB0aGUgcGF0Y2ggc2VlbXMgdG8gdG91Y2ggb24gY29yZSBkYXRhIGhhbmRsaW5nIHdpdGggYWRqdXN0bWVudHMgdG8gYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCwgYF9fbXB0Y3BfbW92ZV9za2JgLCBgX19tcHRjcF9hZGRfYmFja2xvZ2AsIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCBgbXB0Y3BfbW92ZV9za2JzYCwgYF9fbXB0Y3BfcmV0cmFuc2AsIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEl0IGRlZmluaXRlbHkgbG9va3MgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBNUFRDUC4gSXQncyBoYW5kbGluZyBtZW1vcnkgbWFuYWdlbWVudCwgYmFja2xvZyBkcm9wcywgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLCB3aGljaCBtZWFucyBpdCBpcyBoYW5kbGluZyBjcnVjaWFsIHN0YXRlcyBhbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBob3cgTVBUQ1Agb3BlcmF0ZXMuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IENPTkZJRyBvcHRpb25zIGVuYWJsZSBNUFRDUCBzbyBJIGNhbiBidWlsZCBhIHRlc3QgZW52aXJvbm1lbnQuIE9idmlvdXNseSwgYENPTkZJR19NUFRDUGAgaXMgdGhlIGtleSwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBHb29kIGNoYW5jZSB0byByZWFsbHkgc2hha2UgdGhpbmdzIGRvd24gYW5kIGh1bnQgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjIxLjkwNTIxODA1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY4NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMToyMS45NDg5MDU5NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYwMTM1MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgaXMgY2xlYXI6IHdlJ3JlIGRlYWxpbmcgd2l0aCBNUFRDUC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3ZSd2ZSBnb3QgdGhlIGNvcmUgY29tcG9uZW50cyBpbiBwbGFjZTogYE1QVENQYCBpcyB0aGUgZXNzZW50aWFsIHBpZWNlLCBvZiBjb3Vyc2UuIFRoZW4sIGBNUFRDUF9JUFY2YOKAlHdoaWxlIG9wdGlvbmFsLCBpdCdzIHByZXR0eSBtdWNoIGEgbm8tYnJhaW5lciB0byBlbmFibGUgdGhhdCwgY29uc2lkZXJpbmcgdGhlIGZ1dHVyZSBvZiBuZXR3b3JraW5nLlxuXG5Ob3csIHdoZXJlIGRvIEkgc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGNydWNpYWwgZGV0YWlscz8gSSdsbCBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L21wdGNwL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGltZSB0byBkaXNzZWN0IHRoYXQgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBleGVyY2lzZSwgYnV0IGFzIGFsd2F5cywgdGhvcm91Z2huZXNzIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMToyNS4zMDkwNDM5MTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MjUuMzA5MTkxNjUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MDE5MjA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIE1vZGlmaWVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXM7IGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHRoZSBgSU5FVGAgZGVwZW5kZW5jeSBpcyBwbGF5aW5nIGEgcm9sZSwgYnV0IHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaGVyZSBjZW50ZXJzIGFyb3VuZCBgTVBUQ1BgLiBUaGF0J3MgdGhlIGNvcmUgZm9jdXMuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiB0d2Vha2VkLCBhbmQgd2h5LiBXZSBoYXZlIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaGF2ZSBiZWVuIGFsdGVyZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIGFsdGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBsaXN0IGluY2x1ZGVzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLCBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCwgYG1wdGNwX21vdmVfc2tic2AsIGBfX21wdGNwX3JldHJhbnNgLCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBJdCBzZWVtcyBhIHByZXR0eSBicm9hZCByYW5nZSBvZiBhcmVhcyBoYXZlIGJlZW4gdG91Y2hlZC5cblxuT2theSwgbGV0J3Mgc2VlLCBnaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGlnIGludG8gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBmb3Igc3BlY2lmaWMgY2hhbmdlcyB0byBgX19tcHRjcF9yZXRyYW5zYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBUaGF0J2xsIHByb2JhYmx5IHRlbGwgbWUgdGhlIGJlc3Qgd2F5IGZvcndhcmQuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMTozMS4xOTkzODY1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA3NjEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTI9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkxMy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTE0OnN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkxNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjMxLjI0NTQ2NjM5N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTU1ODEzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSdyZSBsb29raW5nIGZvciBjb2RlIHBhdGhzIHRoYXQgYXJlIGR5bmFtaWMsIHRoYXQgdGFrZSBpbnB1dCwgYW5kIGFyZSB0aGVyZWZvcmUgc3VzY2VwdGlibGUgdG8gdW5leHBlY3RlZCBkYXRhLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgdGhlaXIgbmF0dXJlLCBsZXNzIGxpa2VseSB0byBvZmZlciB1cyBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMg4oCTIHRoZXkncmUgcHJlZGljdGFibGUuIFNvLCBsZXQncyBza2lwIHRob3NlLiBUaGUgcmVhbCBnb2xkIGlzIGluIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCwgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgc3lzdGVtLCB3aGVyZSBleHRlcm5hbCBkYXRhIGNhbiBmbG93IGluLlxuXG5MZXQncyBzZWUuLi4gKm1wdGNwX2luY29taW5nX29wdGlvbnMqLiBBaCwgaW50ZXJlc3RpbmcuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm9uLXN0YXRpYyogaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBOb24tc3RhdGljLCBJIGludGVycHJldCB0aGF0IGFzIHBvdGVudGlhbGx5IGV4cG9zZWQsIHBvdGVudGlhbGx5IGFjY2VwdGluZyBleHRlcm5hbCBpbnB1dC4gVGhpcyBpcyB0aGUga2luZCBvZiBmdW5jdGlvbiB0aGF0IGRlc2VydmVzIGEgY2xvc2VyIGxvb2suIEl0J3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHRoZSBwcmVjaXNlIG5hdHVyZSBvZiBpdHMgaW5wdXQgYW5kIHByb2Nlc3NpbmcgbG9naWMuIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBmdXp6aW5nIGFuZCB3aGF0IEkgc2hvdWxkIGFpbSBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MzUuMjYxMDUwMDI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI0ODE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL29wdGlvbnMuYz0xMTkzPXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIxLSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTIyMjpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjM1LjMwNjMwMjYwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTk0MDc4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBgbXB0Y3BfcG1fY2hrX3N0YWxlYCoqXG5cblJpZ2h0LCBgbXB0Y3BfcG1fY2hrX3N0YWxlYC4gVGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGF0IGltcGxpZXMgdGhpcyBmdW5jdGlvbiBoYXMgZXh0ZXJuYWwgbGlua2FnZSB3aXRoaW4gdGhlIE11bHRpUGF0aCBUQ1AgKE1QVENQKSBrZXJuZWwgbW9kdWxlLiBJdCBtZWFucyBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgYW5kIGNhbGxhYmxlIGZyb20gb3RoZXIgbW9kdWxlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGV4cG9zZWQgaW4gdGhlIG1vZHVsZSdzIHN5bWJvbCB0YWJsZS4gVGhpcyByYWlzZXMgYSBmZXcgaW1tZWRpYXRlIGNvbnNpZGVyYXRpb25zOlxuXG4qICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSWYgaXQncyB1c2VkIGVsc2V3aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIE1QVENQIGVjb3N5c3RlbSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIE1QVENQIGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQga2VybmVsIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgd2hvJ3MgcmVseWluZyBvbiBpdHMgZXhpc3RlbmNlIGFuZCB3aGF0IHRob3NlIGV4dGVybmFsIHVzYWdlcyBhcmUuXG4qICAgKipBUEkgRGVzaWduIChpZiBhbnkpOioqIElzIGBtcHRjcF9wbV9jaGtfc3RhbGVgIG1lYW50IHRvIGJlIGEgcGFydCBvZiBhIGRlZmluZWQgTVBUQ1AgQVBJPyBJZiBzbywgaXMgdGhpcyBhICpnb29kKiBBUEk/IElzIGl0IHN0YWJsZSwgd2VsbC1kb2N1bWVudGVkLCBhbmQgYmFja3dhcmQgY29tcGF0aWJsZT9cbiogICAqKlNlY3VyaXR5IEltcGxpY2F0aW9uczoqKiBJZiBpdCdzIGV4cG9zZWQsIGEgY2FyZWZ1bCByZXZpZXcgaXMgbmVjZXNzYXJ5IHRvIHNlZSBpZiBpdCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBtYWxpY2lvdXMgaW50ZW50LiBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyBhc3NvY2lhdGVkIHdpdGggaXRzIGlucHV0cyBvciByZXR1cm4gdmFsdWU/XG4qICAgKipNYWludGFpbmFiaWxpdHkgYW5kIFJlZmFjdG9yaW5nOioqIElmIGl0J3Mgd2lkZWx5IHVzZWQsIG1ha2luZyBjaGFuZ2VzIHRvIGl0cyBzaWduYXR1cmUgb3IgYmVoYXZpb3IgYmVjb21lcyBhIGJpZ2dlciBkZWFsLiBUaGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gcG90ZW50aWFsbHkgaW1wb3NlcyByZXN0cmljdGlvbnMgb24gZnV0dXJlIHJlZmFjdG9yaW5nIGVmZm9ydHMgd2l0aGluIHRoZSBNUFRDUCBjb2RlLiBJZiBpdCdzIG9ubHkgdXNlZCBpbnRlcm5hbGx5LCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBtYWtlIGl0IHN0YXRpYyB3aXRob3V0IGFmZmVjdGluZyBhbnlvbmUuIEkgd2lsbCBhbHNvIGhhdmUgdG8gY2hlY2sgaWYgaXQncyB1c2VkIGVsc2V3aGVyZSwgYW5kIGlmIGl0IGlzLCB0aGUgY29kZSB1c2luZyBpdC5cblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmaWd1cmUgb3V0ICp3aHkqIGl0J3Mgbm9uLXN0YXRpYy4gVGhlIGFuc3dlciB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIE1QVENQIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyBpZiB0aGlzIGlzIGludGVudGlvbmFsIEFQSSBkZXNpZ24gb3IgYW4gYWNjaWRlbnQgd2lsbCBiZSBteSBnb2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjM5LjkwMDM4Mjc0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjEwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wbS5jPTEwNjk9bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTExMDUtXFxubmV0L21wdGNwL3BtLmM6MTEwNjp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbS5jLTExMDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMTozOS45NDYxMDczMDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMTU1MzkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnRlcm5hbCBOb3RlcyBvbiBgbXB0Y3BfcmVsZWFzZV9jYmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF9yZWxlYXNlX2NiYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHksIHRoZSBmYWN0IHRoYXQgaXQncyBkZWNsYXJlZCBgc3RhdGljYCBqdW1wcyBvdXQgYXQgbWUuIFRoYXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoLCBnaXZlbiBpdHMgbmFtZSwgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gdGhlIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBtb2R1bGUuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IGNhbiBiZSBhY2Nlc3NlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0J3MgZGVzaWduZWQgdGhpcyB3YXkuIEl0J3Mgbm90IG1lYW50IHRvIGJlIGNhbGxlZCBleHRlcm5hbGx5LCB3aGljaCBpcyB0eXBpY2FsIGZvciBpbnRlcm5hbCBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSXQncyBnb2luZyB0byBiZSBzb21ldGhpbmcgaGFuZGxpbmcgY2xlYW51cCBvciByZWxlYXNlIG9mIHJlc291cmNlcyB3aXRoaW4gdGhlIE1QVENQIHN0YWNrIGl0c2VsZiwgYW5kIHRoZSBzdGF0aWMgZGVjbGFyYXRpb24gZW5mb3JjZXMgdGhhdCBlbmNhcHN1bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjQzLjQ1NzY2MzQ0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NDkyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfcmVsZWFzZV9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzgwPXZvaWQgX19tcHRjcF9jaGVja19wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3OTItLyogcHJvY2Vzc2VzIGRlZmVycmVkIGV2ZW50cyBhbmQgZmx1c2ggd21lbSAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3OTM6c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc5NC1cXHRfX211c3RfaG9sZChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDktXFx0LnJlY3Ztc2dcXHQ9IG1wdGNwX3JlY3Ztc2csXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIxMDpcXHQucmVsZWFzZV9jYlxcdD0gbXB0Y3BfcmVsZWFzZV9jYixcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjExLVxcdC5oYXNoXFx0XFx0PSBtcHRjcF9oYXNoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMTo0My41MDMxMTY1NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4NzMyMDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBNUFRDUCBSZWxlYXNlIENhbGxiYWNrcyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBzbywgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHJlZ2lzdGVyZWQgaW4gYG1wdGNwX3Byb3RgLCBnb3QgaXQuIFRoYXQncyB0aGUgZXhwZWN0ZWQgcGxhY2UsIGl0J3MgdGhlIGNvcmUgcHJvdG9jb2wgaGFuZGxpbmcuIE1ha2VzIHNlbnNlLiBCdXQgbXkgbWluZCBpcyBhbHJlYWR5IHdhbmRlcmluZyBhIGJpdCBkZWVwZXIuLi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3csIHRoZSBlZGdlIGNhc2VzLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUuLi4gd2hhdCBhYm91dCBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gPyBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGUgcGljdHVyZT8gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBvdXQtb2Ytb3JkZXIgcGFja2V0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG11bHRpcGF0aCBzY2VuYXJpb3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIHR3byBpbnRlcnBsYXkuIFRoZSByZWxlYXNlIGNhbGxiYWNrIHNob3VsZCBwcm9iYWJseSBpbnRlcmFjdCB3aXRoIHRoYXQgb3V0LW9mLW9yZGVyIHF1ZXVlIG9yIGRlcGVuZCBvbiBpdCBkaXJlY3RseSB0byBwZXJmb3JtIHNvbWUgbmVjZXNzYXJ5IGhvdXNlLWtlZXBpbmcuIEFyZSB3ZSByZW9yZGVyaW5nIHN0dWZmIGJlZm9yZSByZWxlYXNlPyBBZnRlcj8gT3IgaXMgaXQgbW9yZSBzdWJ0bGUgdGhhbiB0aGF0PyBHb3R0YSBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMTo0Ny45OTA0NDA1NTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTc3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2RhdGFfcXVldWVfb2ZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTI5NT1zdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDctICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzA4OnN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA5LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ0Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3My1cXHR9IGVsc2UgaWYgKGFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEsIG1zay1cXHUwMDNlYWNrX3NlcSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0NzQ6XFx0XFx0bXB0Y3BfZGF0YV9xdWV1ZV9vZm8obXNrLCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3NS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjQ4LjAzNDQyMjMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTMzOTA1NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIE1QVENQIERhdGEgUXVldWUgYW5kIFJldHJhbnNtaXNzaW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gIHRoaW5nLiBJdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBpbnRlcm5hbCB0byBpdHMgbW9kdWxlIG9yIGZpbGUuIFRoYXQncyBnb29kLCBrZWVwcyBpdCBjb250YWluZWQgYW5kIGF2b2lkcyBwb3RlbnRpYWwgbmFtaW5nIGNvbGxpc2lvbnMuXG5cbkJ1dCwgaGFuZyBvbi4uLiB3aGF0IGFib3V0IHRoZSBmdW5jdGlvbiBgX19tcHRjcF9yZXRyYW5zYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb2ZmLW9yZGVyIHF1ZXVlLiBJcyBpdCBhY2Nlc3Npbmcgb3IgbW9kaWZ5aW5nIHRoYXQgcXVldWU/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcHVycG9zZSBvZiB0aGF0IHJldHJhbnNtaXNzaW9uIGZ1bmN0aW9uIGluIHRoZSBNUFRDUCBzdGFjay4gSXMgaXQgaW52b2x2ZWQgd2l0aCBoYW5kbGluZyBsb3N0IHNlZ21lbnRzLCBvciBzaW1wbHkgc2NoZWR1bGluZyByZXRyYW5zbWlzc2lvbnM/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGlmIHRoaXMgYHN0YXRpY2AgbmF0dXJlIG9mIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2Agd2lsbCBwcmVzZW50IGFueSBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIGxpbWl0ZWQgdmlzaWJpbGl0eSBvciBhY2Nlc3MgZm9yIHJldHJhbnNtaXNzaW9ucyB0aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6NTguMTY4MzMwMzgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc3MTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX3JldHJhbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MjUxMz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjU0Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTQ4OmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjU0OS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjMyPXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODEtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY4MjpcXHRuZWVkX3B1c2ggPSAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DRl9QVVNIKSBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjgzLVxcdGlmICghZGlzcG9zZV9pdCkge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mjg1Mj1zdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTEzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5MTQ6c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTE1LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NDAtXFx0XFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTQxOlxcdFxcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NDItXFx0XFx0ICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTEzPXN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTUwLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfV09SS19SVFgsIFxcdTAwMjZtc2stXFx1MDAzZWZsYWdzKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTUxOlxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE1Mi1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3OTM9c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODI1LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODI2OlxcdFxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgyNy1cXHRcXHRpZiAoc3Bvb2xfYmwgXFx1MDAyNlxcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjU4LjIxMzEwNDAyOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDI4Nzk3NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgaW50byB0aGUgTVBUQ1AgUmV0cmFuc21pc3Npb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCBoZXJlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGhvdyBkYXRhIHJldHJhbnNtaXNzaW9uIGlzIHRyaWdnZXJlZCBpbiB0aGUgTVBUQ1Agc3RhY2suIEl0IHNlZW1zIHRoYXQgdGhlIGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgZnVuY3Rpb25zIGJvdGggbGVhZCB0byBhIGNhbGwgdG8gYF9fbXB0Y3BfcmV0cmFuc2AuIFRoYXQncyB0aGUgY29yZS5cblxuTm93LCBJJ20gdGhpbmtpbmcsIHdoZXJlIGVsc2UgZG8gd2Ugc2VlIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSByZXRyYW5zbWlzc2lvbj8gTGV0J3MgY2hlY2sgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLiBBaCwgaXQncyBjYWxsZWQgZnJvbSBgbXB0Y3Bfc3ViZmxvd19kaXNjYXJkX2RhdGFgIGFuZCBhIGZldyBvdGhlciBwbGFjZXMuIEludGVyZXN0aW5nLiBDb3VsZCB0aGlzIHBsYXkgYSByb2xlIGluIGhvdyB0aGUgc3RhY2sgaGFuZGxlcyBpbmNvbWluZyBkYXRhIGR1cmluZyBhIHJldHJhbnNtaXNzaW9uIGV2ZW50PyBJdCdzIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBzZWUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCBJIHJlbWVtYmVyIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgX19tcHRjcF9yZXRyYW5zYCBhcyB3ZWxsLiBUaGF0IGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0J3MgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIHJldHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byBzdGFsZSBwYXRoIG1hbmFnZW1lbnQgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB3aGF0IGhhcHBlbnMgaW4gYG1wdGNwX3JlY3Ztc2dgLiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHJlY2VpdmluZyBhbmQgcHJvY2Vzc2luZyBzaWRlIGR1cmluZyByZXRyYW5zbWlzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MDIuNjQxOTA0MzUxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM2MDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9yZWN2bXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxMzA9c3RhdGljIHZvaWQgbXB0Y3BfZWF0X3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDAtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjE0MTpzdGF0aWMgaW50IF9fbXB0Y3BfcmVjdm1zZ19tc2txKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDItXFx0XFx0XFx0XFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM0Nz1zdGF0aWMgdW5zaWduZWQgaW50IG1wdGNwX2lucV9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzNjctXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM2ODpzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM2OS1cXHRcXHRcXHQgaW50IGZsYWdzKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDAxOlxcdFxcdGJ5dGVzX3JlYWQgPSBfX21wdGNwX3JlY3Ztc2dfbXNrcShzaywgbXNnLCBsZW4gLSBjb3BpZWQsIGZsYWdzLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDItXFx0XFx0XFx0XFx0XFx0XFx0ICBjb3BpZWQsIFxcdTAwMjZ0c3MsIFxcdTAwMjZjbXNnX2ZsYWdzLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDE5Nj1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA4LVxcdC5pb2N0bFxcdFxcdD0gbXB0Y3BfaW9jdGwsXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwOTpcXHQucmVjdm1zZ1xcdD0gbXB0Y3BfcmVjdm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjEwLVxcdC5yZWxlYXNlX2NiXFx0PSBtcHRjcF9yZWxlYXNlX2NiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMjowMi42ODkyNjg1NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwODcxNzcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqTVBUQ1AgRW50cnkgUG9pbnQgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE1QVENQIGNvZGUuIEZyb20gd2hhdCBJIHJlY2FsbCwgYG1wdGNwX3JlY3Ztc2dgIGlzIGRlZmluaXRlbHkgYSBrZXkgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIHRoaW5rIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhbm90aGVyIHNvbGlkIGVudHJ5IHBvaW50IHRvIGNvbnNpZGVyLiBJIGFsc28gcmVjYWxsIHRoZSBgbXB0Y3Bfd29ya2VyYCBmdW5jdGlvbiAtIGFsdGhvdWdoIGl0J3MgbGlrZWx5IGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGFuZCBub3QgYSAqZGlyZWN0KiBlbnRyeSBwb2ludCBwZXIgc2UsIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRoZSBvdmVyYWxsIGZsb3csIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSdzIGRlZmluZWQgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgLiBMZXQncyB0YWtlIGEgbG9vayB0aGVyZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgcmVtZW1iZXIgdGhpcyBhcmVhIGJlaW5nIHByZXR0eSBjb21wbGV4LCBidXQgYG1wdGNwX2luY29taW5nX29wdGlvbnNgICpzaG91bGQqIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gaG93IG9wdGlvbnMgYXJlIGhhbmRsZWQgd2hlbiBkYXRhIGFycml2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MDcuMTk3OTg4NzgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk0NTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL29wdGlvbnMuYz0xMTE2PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNDEtXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMTQyOlxcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNDMtXFx0aWYgKGFmdGVyNjQobXNrLVxcdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMS0gKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMjowNy4yNjY5MzgzMDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NzY4MTEyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyBvbiBmaW5kaW5nIHRoZSBjYWxscyB0byBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgYmVpbmcgdXNlZC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayBjb2RlIHRoYXQgaGFuZGxlcyBNdWx0aXBhdGggVENQIChNUFRDUCkgb3B0aW9uIG5lZ290aWF0aW9uLiBJIGtub3cgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIGEga2V5IGZ1bmN0aW9uIGZvciBwYXJzaW5nIGFuZCBoYW5kbGluZyBpbmNvbWluZyBNUFRDUCBvcHRpb25zLiBTbywgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGdyYXNwIGhvdyB0aGUgTVBUQ1Agc3RhY2sgcHJvY2Vzc2VzIHRoZXNlIGluY29taW5nIG1lc3NhZ2VzLlxuXG5NeSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrJ3MgZW50cnkgcG9pbnRzLiBJJ2QgZmlyc3QgbG9vayBhdCB0aGUgdXN1YWwgc3VzcGVjdHM6IGBpbmV0X3Jjdl9za2JgIG9yIGl0cyBNUFRDUC1zcGVjaWZpYyBjb3VudGVycGFydHMuIEknbSBnb2luZyB0byBxdWlja2x5IHNraW0gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMsIGxpa2VseSBpbnZvbHZpbmcgdGhlIHJhdyBzb2NrZXQgaGFuZGxpbmcsIG9yIGV2ZW4gYmV0dGVyLCB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtLCB3aGVyZSBzdWNoIG9wdGlvbnMgbWlnaHQgZ2V0IHByZXByb2Nlc3NlZC4gSSdkIGJlIGxvb2tpbmcgZm9yIGhvb2tzIG9yIGNhbGxiYWNrcyB0aGF0IGNvdWxkIHRyaWdnZXIgb3B0aW9uIHByb2Nlc3NpbmcuXG5cbkkgbmVlZCB0byBzZWUgaG93IHRoZSBNUFRDUCBzdGFjayBpbnRlcmNlcHRzIGFuZCBwcm9jZXNzZXMgaW5jb21pbmcgZGF0YSwgZXNwZWNpYWxseSB0aGUgcGFydHMgY29uY2VybmVkIHdpdGggb3B0aW9uIHBhcnNpbmcuIFRoYXQncyBteSBtYWluIGFyZWEgb2YgZm9jdXMuIEnigJlsbCBzdGFydCBieSB1c2luZyBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgTVBUQ1Agc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRvIGd1aWRlIG15IHNlYXJjaC4gSSB3b3VsZCBiZSB1c2luZyBgZ3JlcGAsIGBjc2NvcGVgLCBvciBteSBJREUncyBzeW1ib2wgbG9va3VwIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgaW52b2tlZCwgYW5kIHRoZW4gYW5hbHl6aW5nIGVhY2ggY2FsbCBzaXRlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIE1QVENQIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGRhdGEgdHJhbnNmZXIgZmxvdy4gSSdtIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIGFueSBmdW5jdGlvbiBjYWxscyBhZnRlciBzb2NrZXQgY3JlYXRpb24sIGFuZCBzcGVjaWZpY2FsbHkgdGhvc2Ugd2hlcmUgb3B0aW9ucyBhcmUgZXhhbWluZWQgb24gaW5jb21pbmcgcGFja2V0cy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhhdCBmdW5jdGlvbiwgYW5kIHdoYXQgaXRzIHJvbGUgaXMgaW4gdGhlIE1QVENQIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIyOjE3Ljk0Mzc1MTkyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMTAzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9MTExNj1zdGF0aWMgdm9pZCBhY2tfdXBkYXRlX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQxLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE0MjpcXHQvKiB0aGlzIGFzc3VtZXMgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpIGlzIGludm9rZWQgYWZ0ZXIgdGNwX2FjaygpICovXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQzLVxcdGlmIChhZnRlcjY0KG1zay1cXHUwMDNld25kX2VuZCwgc25kX254dCkpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTM9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMjIyOmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MTcuOTg3ODY1NTA4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODk5NDM3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkV4cGFuZGluZyB0aGUgU2NvcGUgb2YgTXkgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgd2FzIGluaXRpYWxseSBmb2N1c2VkIG9uIGBuZXQvbXB0Y3AvYCBmb3IgdGhhdCBncmVwLCBidXQgdGhhdCdzIHBvdGVudGlhbGx5IHRvbyBuYXJyb3cuIEkgbmVlZCB0byBicm9hZGVuIHRoZSBzZWFyY2ggdG8gZW5jb21wYXNzIHRoZSBsaWtlbHkgYXJlYXMgd2hlcmUgdGhpcyBjb3VsZCBiZSBoYW5kbGVkIGF0IGEgbG93ZXIgbGV2ZWwgb3IgaW4gYSByZWxhdGVkIGZ1bmN0aW9uLiBTaG91bGQgSSBjaGVjayBgbmV0L2lwdjQvYCBhbmQgYG5ldC9pcHY2L2A/IFRob3NlIGFyZSB0aGUgY29yZSBwcm90b2NvbCBzdGFja3MsIHNvIGl0J3MgZW50aXJlbHkgcG9zc2libGUgdGhlIGNyaXRpY2FsIGxvZ2ljIHJlc2lkZXMgdGhlcmUuIE9yIHBlcmhhcHMgaXQncyByZWxhdGVkIHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1QVENQIHN1YmZsb3dzLCBpbiB3aGljaCBjYXNlIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCBpcyB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBhbmQgZXhoYXVzdCB0aGUgcGxhdXNpYmxlIGxvY2F0aW9ucyBmb3IgdGhpcyBpc3N1ZS4gVGhpcyBmZWVscyBsaWtlIEkgbWlnaHQgaGF2ZSBqdW1wZWQgdGhlIGd1biB3aXRoIHRoZSBmaXJzdCBncmVwLiBJIG5lZWQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MjUuNzc3ODExMTA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcxNzcwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMjoyNS44MjE1Mzg3NzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3NTgyMzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogQSBgZ3JlcGAgU3RyYXRlZ3kqKlxuXG5BbHJpZ2h0LCBJJ20gZmFjaW5nIGEgcHJvYmxlbSB3aGVyZSBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbCwgYSB2YXJpYWJsZSBkZWZpbml0aW9uLCBhIHBhcnRpY3VsYXIgc3RyaW5nIGxpdGVyYWwsIG9yIG1heWJlIGV2ZW4ganVzdCBhIHBhdHRlcm4gb2YgY29kZS4gVGhlIHByb2JsZW0gaXMsIEkgZG9uJ3Qga25vdyAqZXhhY3RseSogd2hlcmUgaXQgbGl2ZXMgd2l0aGluIHRoaXMgY29kZWJhc2UuIEl0J3MgYSBsYXJnZSBwcm9qZWN0LCBhbmQgbWFudWFsbHkgc2VhcmNoaW5nIHRocm91Z2ggZmlsZXMgb25lIGJ5IG9uZSB3b3VsZCBiZSBpbnNhbmVseSBpbmVmZmljaWVudCBhbmQgcHJvbmUgdG8gZXJyb3IuXG5cbk15IGluc3RpbmN0LCBhcyBhbHdheXMsIGxlYW5zIHRvd2FyZHMgYXV0b21hdGlvbiBhbmQgZWZmaWNpZW5jeS4gSW5zdGVhZCBvZiB0aGF0IGJydXRlLWZvcmNlIG1hbnVhbCBhcHByb2FjaCwgSSBpbW1lZGlhdGVseSB0aGluaywgKmBncmVwYCBpcyB0aGUgdG9vbCBmb3IgdGhlIGpvYiouXG5cbkknbSBwaWN0dXJpbmcgbXlzZWxmIHJ1bm5pbmcgYGdyZXBgLi4uIGFuZCBpbW1lZGlhdGVseSBJIGtub3cgSSBuZWVkIHRvIHNwZWNpZnkgdGhlIHNlYXJjaCBhY3Jvc3MgdGhlICplbnRpcmUqIGRpcmVjdG9yeSB0cmVlLiBJIG5lZWQgdG8gY2FzdCBhIHdpZGUgbmV0IHRvIGVuc3VyZSBJIGRvbuKAmXQgbWlzcyBhbnkgcG90ZW50aWFsIG9jY3VycmVuY2VzLCB3aGVyZXZlciB0aGV5IG1pZ2h0IGJlIGhpZGRlbi4gU28sIHRoZSBtZW50YWwgaW1hZ2UgaXMgb2YgcnVubmluZyBhIHJlY3Vyc2l2ZSBgZ3JlcGAgYWNyb3NzIHRoZSBlbnRpcmUgcHJvamVjdCBzdHJ1Y3R1cmUuIFRoaXMgaXMgdGhlIG9wdGltYWwgYXBwcm9hY2ggZm9yIGEgY29tcHJlaGVuc2l2ZSBzZWFyY2g7IEkgY2FuIHJlbHkgb24gYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiBhbGwgZmlsZXMsIGRpcmVjdG9yaWVzLCBhbmQgc3ViZGlyZWN0b3JpZXMuIFRoaXMgd2F5IEkgY2FuIGZpbmQgdGhlIGluZm9ybWF0aW9uIGluIGEgcmVsYXRpdmVseSBzaG9ydCB0aW1lZnJhbWUgYW5kIGdldCBvbiB3aXRoIHRoZSByZWFsIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDY3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMjozMC41OTczNjQ4MTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTkwODQ3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbXB0Y3AuaD0xNTY9aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNTgtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE1OTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE2MC1cXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmg9MjY2PXN0YXRpYyBpbmxpbmUgYm9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI3Mi1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI3MzpzdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzQtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDg4ND12b2lkIHRjcF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkwLVxcdC8qIG1wdGNwIGNhbid0IHRlbGwgdXMgdG8gaWdub3JlIHJlc2V0IHBrdHMsXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg5MTpcXHQgKiBzbyBqdXN0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIG1wdGNwX2luY29taW5nX29wdGlvbnMoKS5cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkyLVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTMtXFx0aWYgKHNrX2lzX21wdGNwKHNrKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODk0OlxcdFxcdG1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYik7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5NS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTYxNi1cXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1NjE3OlxcdGlmIChza19pc19tcHRjcChzaykgXFx1MDAyNlxcdTAwMjYgIW1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYikpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NjE4LVxcdFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTUyPXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Mzc5LVxcdFxcdFxcdCAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjczODA6XFx0XFx0XFx0aWYgKHNrX2lzX21wdGNwKHNrKSBcXHUwMDI2XFx1MDAyNiAhbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MzgxLVxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTExNj1zdGF0aWMgdm9pZCBhY2tfdXBkYXRlX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQxLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE0MjpcXHQvKiB0aGlzIGFzc3VtZXMgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpIGlzIGludm9rZWQgYWZ0ZXIgdGNwX2FjaygpICovXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQzLVxcdGlmIChhZnRlcjY0KG1zay1cXHUwMDNld25kX2VuZCwgc25kX254dCkpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTM9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMjIyOmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MzIuNzE2NDU3OTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMDY1MTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNUFRDUCBPcHRpb24gSGFuZGxpbmcgaW4gdGhlIE5ldHdvcmsgU3RhY2sqKlxuXG5SaWdodCwgc28gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIHRyaWdnZXJlZCBkaXJlY3RseSBmcm9tIHRoZSBjb3JlIFRDUCBkYXRhIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYHRjcF9kYXRhX3F1ZXVlYCBhbmQgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AuIFRoYXQgaW5zdGFudGx5IGNvbmZpcm1zIGl0cyBpbXBvcnRhbmNlIGFuZCByZWFjaGFiaWxpdHkgZnJvbSB0aGUgbmV0d29yayBzdGFjaydzIHByb2Nlc3Npbmcgb2YgaW5jb21pbmcgc2VnbWVudHMuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbGwgdGhlIHBhdGhzIHRoYXQgY2FuIHBvc3NpYmx5IGJlIHRha2VuLiBcblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGZvY3VzIG9uIHRoZSBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrIGZvciBzdGFsZSBmbG93cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzMyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MzYuNjQ3MTExODI3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNzA1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3BtX2Noa19zdGFsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9MTA2OT1tcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTEwNS1cXG5uZXQvbXB0Y3AvcG0uYzoxMTA2OnZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3BtLmMtMTEwNy17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yOTE0PXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTIyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5MjM6XFx0bXB0Y3BfcG1fY2hrX3N0YWxlKG1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkyNC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTExMDY9Ym9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMDgtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpyZW0pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjExMDk6dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTExMC12b2lkIG1wdGNwX3BtX25ld19jb25uZWN0aW9uKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCBzZXJ2ZXJfc2lkZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIyOjM4LjM0MDg1NTI5NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzYxNzU1MzkxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipUcmFjaW5nIHRoZSBNUFRDUCBDb250cm9sIEZsb3cqKlxuXG5SaWdodCwgc28gYG1wdGNwX3BtX2Noa19zdGFsZWAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gd2UncmUgaW50ZXJlc3RlZCBpbiDigJMgaXMgY2FsbGVkIGZyb20gYF9fbXB0Y3BfcmV0cmFuc2AuIE5vdGVkLiBOb3csIHdoZXJlIGRvZXMgYF9fbXB0Y3BfcmV0cmFuc2AgZml0IGludG8gdGhlIHBpY3R1cmU/IEFoLCBpdCdzIGNhbGxlZCBmcm9tIHR3byBrZXkgcGxhY2VzOiBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBUaGF0IGdpdmVzIHVzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgcmV0cmFuc21pc3Npb24gcHJvY2VzcyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBNUC1UQ1Agd29ya2VyIHRocmVhZHMgYW5kIGNvbm5lY3Rpb24gcmVsZWFzZSBwcm9jZWR1cmVzLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGF0IGhvdyB1c2VyIHNwYWNlIGludGVyYWN0cy4gSSBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBjb3JlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gZnVuY3Rpb25zIGFyZSBjYWxsZWQuIGBtcHRjcF9yZWN2bXNnYC4uLiBZZXMsIGFic29sdXRlbHksIHRoYXQgb25lJ3MgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBDaGVjay4gQW5kIHdoYXQgYWJvdXQgYG1wdGNwX3NlbmRtc2dgPyBUaGF0J3MgZ29pbmcgdG8gYmUga2V5IGZvciBob3cgZGF0YSBnZXRzIGludG8gdGhlIGtlcm5lbCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCBJIHdpbGwgd2FudCB0byBzZWUgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggbXkgc3VzcGVjdGVkIGFyZWEgb2YgY29uY2Vybi4gRXhjZWxsZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjE0LjUxNjM5NzE1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NjQ2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMjU1PW1wdGNwX2NhcnZlX2RhdGFfZnJhZyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEyNzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTI3MzpzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjc0LVxcdGludCBtc3Nfbm93O1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTM2OD1zdGF0aWMgdm9pZCBtcHRjcF91cGRhdGVfaW5maW5pdGVfbWFwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzg4LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzODk6c3RhdGljIGludCBtcHRjcF9zZW5kbXNnX2ZyYWcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzOTAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTM5MTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzOTIte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTUyNy1cXHRcXHRtcHRjcF91cGRhdGVfaW5maW5pdGVfbWFwKG1zaywgc3NrLCBtcGV4dCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTUyODpcXHR0cmFjZV9tcHRjcF9zZW5kbXNnX2ZyYWcobXBleHQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MjktXFx0bXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cXHUwMDNlcmVsX3dyaXRlX3NlcSArPSBjb3B5O1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTU4MT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY1Ni1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjU3OnN0YXRpYyB2b2lkIG1wdGNwX3B1c2hfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE2NTgte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTY5OT1zdGF0aWMgaW50IF9fc3ViZmxvd19wdXNoX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE3MDA6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3MDEte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTcxMi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzEzOlxcdFxcdFxcdHJldCA9IG1wdGNwX3NlbmRtc2dfZnJhZyhzaywgc3NrLCBkZnJhZywgaW5mbyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTcxNC1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE3NDM9dm9pZCBfX21wdGNwX3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3NDYtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzQ3OlxcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzQ4LVxcdFxcdFxcdFxcdC5mbGFncyA9IGZsYWdzLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTgxMT1zdGF0aWMgdm9pZCBfX21wdGNwX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBmaXJzdClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4MTMtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxODE0OlxcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODE1LVxcdFxcdC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xODc4PXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTg3OS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxODgwOnN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODgxLVxcdFxcdFxcdFxcdCAgc2l6ZV90IGxlbiwgaW50ICpjb3BpZWRfc3luKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTk3ND1zdGF0aWMgdm9pZCBtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTg3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE5ODg6c3RhdGljIGludCBtcHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE5ODkte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjAwNy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMDA4OlxcdFxcdHJldCA9IG1wdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgbGVuLCBcXHUwMDI2Y29waWVkX3N5bik7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjAwOS1cXHRcXHRjb3BpZWQgKz0gY29waWVkX3N5bjtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTI9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg1NC17XFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg1NTpcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg1Ni1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5MS1cXHRcXHRcXHR3aGlsZSAoaW5mby5zZW50IFxcdTAwM2MgaW5mby5saW1pdCkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4OTI6XFx0XFx0XFx0XFx0cmV0ID0gbXB0Y3Bfc2VuZG1zZ19mcmFnKHNrLCBzc2ssIGRmcmFnLCBcXHUwMDI2aW5mbyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5My1cXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDYtXFx0LmRlc3Ryb3lcXHQ9IG1wdGNwX2Rlc3Ryb3ksXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwNzpcXHQuc2VuZG1zZ1xcdD0gbXB0Y3Bfc2VuZG1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA4LVxcdC5pb2N0bFxcdFxcdD0gbXB0Y3BfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjE0LjU2MDk2NDY2OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjc2MDY4Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbjogYG1wdGNwX3NlbmRtc2dgIGFuZCBgbXB0Y3BfcmVjdm1zZ2AuIFRoYXQncyB3aGVyZSBpdCBhbGwgYmVnaW5zIGFuZCBlbmRzIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MgcGVyc3BlY3RpdmUuIEZyb20gdGhlcmUsIEkgc2VlIHRoZSByaXBwbGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2VzLlxuXG5UaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtcyB0byBiZSBpbiBzZXZlcmFsIGtleSBhcmVhcy4gRmlyc3QsIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgd2hpY2ggaXMgY3J1Y2lhbCBhcyBpdCdzIGRpcmVjdGx5IGludGVncmF0ZWQgaW50byB0aGUgVENQIHJlY2VpdmUgcGF0aC4gVGhhdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIuIFdlIGtub3cgaG93IHRoYXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiBiYXNlZCBvbiByZWNlaXZlZCBvcHRpb25zLlxuXG5UaGVuIHRoZXJlJ3MgYF9fbXB0Y3BfcmV0cmFuc2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYXMgaXQncyB0cmlnZ2VyZWQgZnJvbSB0aGUgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBwYXRocy4gU28sIGl0J3MgaW52b2x2ZWQgaW4gaGFuZGxpbmcgcmV0cmFuc21pc3Npb25zIGFuZCB0aGUgcmVsZWFzZSBwcm9jZXNzIG9mIHJlc291cmNlcy4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG1wdGNwX3BtX2Noa19zdGFsZWAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYF9fbXB0Y3BfcmV0cmFuc2AsIGFyZSBhbHNvIGltcG9ydGFudC4gVGhpcyBzdWdnZXN0cyBhIGZvY3VzIG9uIGltcHJvdmluZyB0aGUgc3RhbGUgcGF0aCBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgaW4gdGhlIHJldHJhbnNtaXNzaW9uIGNvbnRleHQuXG5cbkkgc2VlIHRoYXQgYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCBpcyBhbHNvIGJlaW5nIHRvdWNoZWQsIGFuZCB0aGF0J3MgY2FsbGVkIGZyb20gYF9fbXB0Y3BfbW92ZV9za2JgLiBgX19tcHRjcF9tb3ZlX3NrYmAgaXRzZWxmIGdldHMgY2FsbGVkIGZyb20gdHdvIGNyaXRpY2FsIGZ1bmN0aW9uczogYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgYW5kIGBfX21wdGNwX21vdmVfc2tic2AuIFRoaXMgcG9pbnRzIHRvd2FyZCBjaGFuZ2VzIGluIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgbW92ZW1lbnQgb2YgU29ja2V0IEJ1ZmZlciAoc2tiKSBzdHJ1Y3R1cmVzIGJldHdlZW4gc3ViZmxvd3MgYW5kIHdpdGhpbiB0aGUgb3ZlcmFsbCBNUFRDUCBjb25uZWN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBvdXQtb2Ytb3JkZXIgZGF0YS5cblxuRmluYWxseSwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGlzIG1vZGlmaWVkLCB3aGljaCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbXB0Y3BfYWRkX2JhY2tsb2dgLiBJJ2xsIGhhdmUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24gc3BlY2lmaWNhbGx5LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzMjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzI6MjIuODM3MDM1MzE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg3MTU5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9hZGRfYmFja2xvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MzQ9c3RhdGljIHZvaWQgbXB0Y3BfZHNzX2NvcnJ1cHRpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc0MS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3NDI6c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzQzLVxcdFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz03OTU9c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04NDItXFx0XFx0XFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo4NDM6XFx0XFx0XFx0XFx0X19tcHRjcF9hZGRfYmFja2xvZyhzaywgc3ViZmxvdywgc2tiKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04NDQtXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjoyMi44ODE5MTA3MzFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2NDk1NjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipUcmFjaW5nIHRoZSBNUFRDUCBEYXRhIEZsb3cqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSB0cmFja2luZyB0aGUgZGF0YSBmbG93IGluIE1QVENQLCBhbmQgSSd2ZSB6ZXJvZWQgaW4gb24gYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AuIEkga25vdyB0aGF0J3Mgd2hlcmUgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGdldHMgaW52b2tlZC4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lcywgKndoZXJlKiBkb2VzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIGl0c2VsZiBnZXQgY2FsbGVkPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBob3cgdGhlIFNLQnMgYXJlIG1vdmluZyBhbmQgd2hlcmUgdGhlIGJhY2tsb2cgaXMgYWN0dWFsbHkgYmVpbmcgbWFuYWdlZC4gUGlucG9pbnRpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmbG93IGluIE1QVENQLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI2NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjI3LjE0Njg3MDgzOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NDMxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTc0Mj1zdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc5NC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3OTU6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzk2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgb3duX21zaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk1OT1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NjMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6OTY0OlxcdG1vdmVkID0gX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCB0cnVlKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NjUtXFx0X19tcHRjcF9vZm9fcXVldWUobXNrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwMDU9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMjMtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDI0OlxcdFxcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMjUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjoyNy4xOTE4MTYwMDVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEyODU2NzE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoIG9mIFByb3Bvc2VkIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYG1wdGNwX2RhdGFfcmVhZHlgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBieSBUQ1AgZGF0YSByZWFkeSBjYWxsYmFja3MuIFRoYXQncyBnb29kOyBpdCBtZWFucyBhbnkgY2hhbmdlcyBoZXJlIHdpbGwgbGlrZWx5IGhhdmUgYSBwcmV0dHkgYnJvYWQgaW1wYWN0LCB0b3VjaGluZyBhIHNpZ25pZmljYW50IHBvcnRpb24gb2Ygc3RhbmRhcmQgVENQIGFuZCBNUFRDUCBvcGVyYXRpb25zLiBJdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBwcm9wYWdhdGlvbiBvZiB0aG9zZSBlZmZlY3RzLlxuXG5SaWdodCwgbGV0IG1lIHN1bW1hcml6ZSB0aG9zZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3Bfc2VuZG1zZ2AsIGFuZCB0aGVuLCBvZiBjb3Vyc2UsIHRoZSBldmVyLWltcG9ydGFudCBgbXB0Y3BfZGF0YV9yZWFkeWAuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgYG1wdGNwX2RhdGFfcmVhZHlgIGl0c2VsZiBpcyBhIHJlYWxseSBhdHRyYWN0aXZlIGVudHJ5IHBvaW50LiBJdCdzIHRoZSBwb2ludCB3aGVyZSBldmVyeXRoaW5nIGtpbmQgb2YgY29udmVyZ2VzLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgbXB0Y3BfZGF0YV9yZWFkeWAgaXNuJ3QgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyB3aWxsIHRlbGwgbWUgaG93IGVhc2lseSBJIGNhbiBob29rIGludG8gdGhhdCByb3V0aW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjozNS4zMjAzODUwNDFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTI5NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz05Nzk9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTAwNTp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDYte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTYxPXN0YXRpYyBpbmxpbmUgdTY0IG1wdGNwX3N0YW1wKHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05NjUtXFxubmV0L21wdGNwL3Byb3RvY29sLmg6OTY2OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2Ny1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1MDE9c3RhdGljIHZvaWQgc3ViZmxvd19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUyNS1cXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MjY6XFx0XFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MjctXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE4Njk9c3RhdGljIHZvaWQgc3ViZmxvd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xODgwLVxcdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4ODE6XFx0XFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODItXFx0ZWxzZSBpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2VycikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjM1LjM2NTkxODY5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM3NTM0ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOb24tU3RhdGljIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMgaW4gdGhlIE1QVENQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGBtcHRjcF9kYXRhX3JlYWR5YCBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMg4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBzeXN0ZW1hdGljYWxseSByZXZpZXcgdGhpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgZnVsbHkuIExldCdzIHNlZS4uLiBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBpcyBhbHNvIG5vbi1zdGF0aWMuIEFuZCB0aGVuIHRoZXJlJ3MgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBhbHNvIG5vbi1zdGF0aWMuIEdvb2QsIEknbSBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBwYXR0ZXJuLlxuXG5UaW1lIHRvIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBub24tc3RhdGljLiBBaCwgbGV0J3Mgc2VlLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBpcyBpbiBgbmV0L21wdGNwL3BtLmNgIGFuZCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIOKAlCB0aGF0J3MgaGVscGZ1bCBjb250ZXh0LiBPa2F5LCBoZXJlJ3Mgb25lLCBgX19tcHRjcF9wdXNoX3BlbmRpbmdgIGlzIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AuIFdhaXQuLi5ubywgYF9fbXB0Y3BfcHVzaF9wZW5kaW5nYCAqd2Fzbid0KiBtb2RpZmllZCwgdGhhdCdzIGEgcmVsaWVmIVxuXG5Pa2F5LCBzdW1tYXJpemluZyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgdGhlaXIgc3RhdGljLW5lc3MsIHRoZSBwYXRjaCBhY3R1YWxseSBjaGFuZ2VkOlxuXG4qICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIChub24tc3RhdGljKVxuKiAgIGBtcHRjcF9wbV9jaGtfc3RhbGVgIChub24tc3RhdGljKVxuKiAgIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCAobm9uLXN0YXRpYylcbiogICBgbXB0Y3BfcmVsZWFzZV9jYmAgKHN0YXRpYylcbiogICBgX19tcHRjcF9yZXRyYW5zYCAoc3RhdGljKVxuKiAgIGBfX21wdGNwX21vdmVfc2tiYCAoc3RhdGljKVxuKiAgIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AgKHN0YXRpYylcbiogICBgX19tcHRjcF9hZGRfYmFja2xvZ2AgKHN0YXRpYylcbiogICBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKVxuXG5Ob3csIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc3MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjo0My41MDM0NTU4MDJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTY1NTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0OTg9c3RhdGljIHZvaWQgbXB0Y3BfdG91dF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MTItICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjUxMzpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjo0NC4zMTkxMTYwMTJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg0NjQ3MDI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBUQ1AgRnVuY3Rpb24gU2NvcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBNUFRDUCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gbmFpbCBkb3duIGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBoYXBwZW5pbmcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgZm9yIGEgZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zZW5kbXNnYC5cblxuVGhlbiBpdCBjbGlja2VkOiBgbXB0Y3BfZGF0YV9yZWFkeWAsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zZW5kbXNnYCBhcmVuJ3QgKmRpcmVjdGx5KiBtb2RpZmllZCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5J3JlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBjYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMuIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIHNpbmNlIHRoZXkgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgdmlzaWJsZSwgc28gSSBrbm93IEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIuIFNhbWUgd2l0aCBgbXB0Y3BfcG1fY2hrX3N0YWxlYC4gTm93IEkgc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNhbGxzIHRvIGBtcHRjcF93b3JrZXJgIHdoaWNoIGlzIHRoZSBiYWNrZ3JvdW5kIHByb2Nlc3NpbmcgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjUwLjE2NTU4OTE0NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4Nzc1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfd29ya2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwOTE9Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwOTUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA5NjpcXHQvKiBHZXQgYSByZWZlcmVuY2Ugb24gdGhpcyBzb2NrZXQsIG1wdGNwX3dvcmtlcigpIHdpbGwgcmVsZWFzZSBpdC5cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDk3OlxcdCAqIEFzIG1wdGNwX3dvcmtlcigpIG1pZ2h0IGNvbXBsZXRlIGJlZm9yZSB1cywgd2UgY2FuIG5vdCBhdm9pZFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwOTgtXFx0ICogYSBzb2NrX2hvbGQoKS9zb2NrX3B1dCgpIGlmIHNjaGVkdWxlX3dvcmsoKSByZXR1cm5zIGZhbHNlLlxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYzMj1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY3LVxcdCAgICAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8IHNvY2tfZmxhZyhzc2ssIFNPQ0tfREVBRCkpKSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2ODpcXHRcXHQvKiBlbnN1cmUgbGF0ZXIgY2hlY2sgaW4gbXB0Y3Bfd29ya2VyKCkgd2lsbCBkaXNwb3NlIHRoZSBtc2sgKi9cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY5LVxcdFxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNzk5PXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjgzOS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyODQwOlxcdC8qIHRoZSBjYWxsaW5nIG1wdGNwX3dvcmtlciB3aWxsIHByb3Blcmx5IGRlc3Ryb3kgdGhlIHNvY2tldCAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NDEtXFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMwNzc9c3RhdGljIHZvaWQgbXB0Y3BfZG9fZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMTItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzExMzpzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMTQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE2Mj1zdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTY5LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE3MDpcXHRJTklUX1dPUksoXFx1MDAyNm1zay1cXHUwMDNld29yaywgbXB0Y3Bfd29ya2VyKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTcxLVxcdG1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzI6NTAuMjA5NDY5NTkyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTQ0MjA5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIEZ1bmN0aW9uIENhbGxzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3Bfd29ya2VyYCBmdW5jdGlvbiDigJMgaXQncyBzdGF0aWMuIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG1wdGNwX3JlbGVhc2VfY2JgLiBJdCdzIGFsc28gc3RhdGljLCB3aGljaCBtZWFucyBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBlaXRoZXIgZGlyZWN0bHkgbW9kaWZ5IG9yIGNhbGwgaXQuIFJpZ2h0LCBzbywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhvc2UgZnVuY3Rpb25zIGFyZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIEFoLCBhbmQgaXQgbG9va3MgbGlrZSBgbXB0Y3BfcmVjdm1zZ2AgYW5kIGBtcHRjcF9zZW5kbXNnYCBjYWxsIGBtcHRjcF9yZWxlYXNlX2NiYCBpbmRpcmVjdGx5IHRocm91Z2ggYHJlbGVhc2Vfc29jaygpYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSdyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIE1QVENQIHNvY2tldHMuXG5cbkdpdmVuIGFsbCBvZiB0aGF0LCBJIHNob3VsZCBjb25jZW50cmF0ZSBvbiB0aG9zZSBmaXZlIGZ1bmN0aW9uczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuXG5cblJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gYE1QVENQYCBpcyB0aGUgbWFpbiBvbmUsIG9idmlvdXNseS4gQW5kIGBNUFRDUF9JUFY2YCB3b3VsZCBiZSBhIGdvb2Qgb25lIHRvIGhhdmUgYXMgd2VsbCwgZGVmaW5pdGVseS4gQW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlIGFnYWluIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzI6NTcuMzYzODkyNzc4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0XFxuICAgMjpcXHRjb25maWcgTVBUQ1BcXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXFxuICAxMDpcXHRcXHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XFxuICAxMTpcXHRcXHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcXG4gIDEyOlxcdFxcdCAgTVBUQ1AuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIE1QVENQXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICAxODpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNUFRDUF9JUFY2XFxuICAyMTpcXHRcXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2PXlcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbiAgMjY6XFx0XFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiAgMjg6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDI5OlxcdFxcdGhlbHBcXG4gIDMwOlxcdFxcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxcbiAgMzE6XFx0XFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcXG4gIDMyOlxcdFxcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxcbiAgMzU6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzI6NTcuMzYzOTU0MTY4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTU3MDQyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEJleW9uZCB0aGVzZSBjb25maWdzLCB3aGF0IGVsc2UgaGFzIGJlZW4gdG91Y2hlZD8gTGV0IG1lIGRvIGEgcXVpY2sgYXVkaXQgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy5cblxuQWxyaWdodCwgYG1wdGNwX3BtX2Noa19zdGFsZWAgaXMgaW4gYG5ldC9tcHRjcC9wbS5jYC4gSSdsbCB3YW50IHRvIHJldmlzaXQgdGhhdCBvbmUuIFRoZW4gdGhlcmUncyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIGFuZCBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYC5cblxuSSdsbCBkZWZpbml0ZWx5IG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYG1wdGNwX3BtX2Noa19zdGFsZWA7IHRoYXQgb25lIHNlZW1zIHBhcnRpY3VsYXJseSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMzowMS44NTk2NjEyMzlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njk2Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3BtX2Noa19zdGFsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcG0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDY5PW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0xMTA1LVxcbm5ldC9tcHRjcC9wbS5jOjExMDY6dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcG0uYy0xMTA3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MDEuOTA0MzYxOTc2WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDEwMzUwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNdWx0aVBhdGggVENQIHN0YWNrIGhhbmRsZXMgcmV0cmFuc21pc3Npb25zIG9uIHN1YmZsb3dzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gYWNxdWlyZSB0aGUgY291bnQuIFRoaXMgaXMgYSBjcnVjaWFsIG1ldHJpYyB3aGVuIGNvbnNpZGVyaW5nIGNvbmdlc3Rpb24gY29udHJvbCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHJldHVybmVkIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkgcmVwcmVzZW50cyB0aGUgc3RhdGUgYW5kIGlmIGl0IGlzIHVzZWQgY29ycmVjdGx5IGluIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHJlbGF0ZWQgdG8gdGhlIGNvdW50IHVwZGF0ZSBhbmQgcmV0cmlldmFsPyBJdCdzIGVzc2VudGlhbCB0byBwaW5wb2ludCB3aGVyZSwgd2hlbiwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBMZXQncyBzdGFydCB3aXRoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMzOjA1LjgwNTM5OTc0MVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NzU1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk4PXN0YXRpYyB2b2lkIG1wdGNwX3RvdXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTEyLSAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI1MTM6c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MDUuODQ5Mjc5NDE3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDk4NTAyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2Agc2l0dWF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hhdCdzIGFjdHVhbGx5ICppbiogdGhpcyB0aGluZy4gV2hhdCdzIHRoZSBjb250ZXh0PyBJcyBpdCByZWxhdGVkIHRvIHRoZSBjb3JlIE1QLVRDUCBuZWdvdGlhdGlvbiBvciBtb3JlIGRvd25zdHJlYW0/IFdoYXQga2luZCBvZiBvcHRpb25zIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSdyZSBsb29raW5nIGF0IHN0YW5kYXJkIE1QLVRDUCBvcHRpb25zIGxpa2UgYE1QX0NBUEFCTEVgLCBgTVBfSk9JTmAsIGV0Yy4sIG9yIHNvbWV0aGluZyBtb3JlIGFwcGxpY2F0aW9uLXNwZWNpZmljIHRoYXQgbWlnaHQgYmUgZmxvd2luZyB0aHJvdWdoIHRoZSBNUFRDUCBsYXllci4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uLiBJcyB0aGVyZSBhIGRlZmluZWQgc3RydWN0dXJlPyBBcmUgdGhlcmUgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yPyBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGNvdWxkIGJlIGNydWNpYWwgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugc28gSSBhbSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIGRldGFpbHMuIFdlIHNob3VsZCBjaGVjayB0aGlzIHRob3JvdWdobHkuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MTEuMTk5MTMyMTU2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MDIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL29wdGlvbnMuYz0xMTE2PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNDEtXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMTQyOlxcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNDMtXFx0aWYgKGFmdGVyNjQobXNrLVxcdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMS0gKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMzoxMS4yNDY4OTU1NDJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxNDUzNjIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYG1wdGNwX2RhdGFfcmVhZHlgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBgbXB0Y3BfZGF0YV9yZWFkeWAuIEl0J3MgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIGluIHRoZSBNUFRDUCBkYXRhIGZsb3cuIFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgdHJpZ2dlcnMgaXQ/IFdoYXQgYXJlIHRoZSBjb21tb24gcGl0ZmFsbHMgSSBzaG91bGQgaW1tZWRpYXRlbHkgY29uc2lkZXIsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgd2UgYXJlIHRyb3VibGVzaG9vdGluZz9cblxuSXMgaXQgcmVsYXRlZCB0byBhbnkgc3BlY2lmaWMgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbXM/IFdoYXQgaGFwcGVucyBpZiB0aGUgbmV0d29yayBjb25kaXRpb25zIGNoYW5nZSByYXBpZGx5PyBJcyBpdCBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiBkYXRhIGluIHRoZSBzdWJmbG93cywgb3IgY291bGQgdGhlcmUgYmUgYSBzdWJ0bGUgc3luY2hyb25pemF0aW9uIGlzc3VlIGx1cmtpbmc/IEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IHF1ZXN0aW9uOiBoYXZlIEkgY2hlY2tlZCB0aGUgb2J2aW91cz8gQW55IHJlY2VudCBjb2RlIGNoYW5nZXMgaW4gdGhlIGFyZWE/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgb3B0aW1pc2F0aW9ucyBwb3RlbnRpYWxseSBhZmZlY3RpbmcgaXQ/IExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDkwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MTUuMjYxNDMzODQ5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxMDY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9kYXRhX3JlYWR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTk3OT1zdGF0aWMgdm9pZCBtcHRjcF9yY3ZfcnR0X3VwZGF0ZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA1OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMzOjE1LjMwNjA1MDIzNloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTQ1MzExMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgTVBUQ1AgcGF0Y2g6XG5cbioqTVBUQ1AgUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gaW50ZWdyYXRpbmcgdGhlc2Ugc3BlY2lmaWMgTVBUQ1AgZnVuY3Rpb25zIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgZm9yIGZ1enppbmc6IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCwgYG1wdGNwX2RhdGFfcmVhZHlgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIFRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgZGVhbGluZyB3aXRoIG1lbW9yeSBsaW1pdHMgYW5kIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXQuXCIgV2UgKm5lZWQqIHRvIHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLlxuXG5Ob3csIGJlZm9yZSB3ZSBsYXVuY2gsIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UndmUgZ290IGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gTGV0J3MgbWFrZSBzdXJlLCB0aG91Z2guIEFoLCByaWdodC4gYElORVRgIGlzIGEgZ2l2ZW4sIGEgZm91bmRhdGlvbmFsIGRlcGVuZGVuY3kuIEFuZCwgb2YgY291cnNlLCBgSVBWNmAgaXMgcmVxdWlyZWQgaWYgYE1QVENQX0lQVjZgIGlzIGVuYWJsZWQuIEdvb2QuXG5cbkZpbmFsbHksIEknbGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcHJlc2VudCB0aGUgZnV6emluZyByZXN1bHRzIGluIGEgY2xlYXIgYW5kIHN0cnVjdHVyZWQgd2F5LiBXZSB3YW50IHRoaXMgdG8gYmUgZWFzaWx5IGRpZ2VzdGlibGUgZm9yIHRoZSB0ZWFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg2NiwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MjEuNDUxMzY0ODY2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2ODM3MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICAgIFwibXB0Y3BfcG1fY2hrX3N0YWxlXCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCIsXG4gICAgXCJtcHRjcF9yZWN2bXNnXCIsXG4gICAgXCJtcHRjcF9zZW5kbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBtZW1vcnkgbGltaXRzLCBiYWNrbG9nIGRyb3BzLCBhbmQgcmV0cmFuc21pc3Npb24gbG9naWMuIEl0IGFkZHMgbmV3IE1JQiBjb3VudGVycyBhbmQgbW9kaWZpZXMgY29yZSBNUFRDUCBmdW5jdGlvbnMgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCBhbmQgYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBzdGFuZGFyZCBNUFRDUCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgbmV0d29yayByZWNlaXZlIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9wbV9jaGtfc3RhbGVcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgYWRkcyBuZXcgTUlCIGNvdW50ZXJzIGFuZCBtb2RpZmllcyBjb3JlIE1QVENQIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgX19tcHRjcF9yZXRyYW5zYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHN0YW5kYXJkIE1QVENQIHNvY2tldCBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIHJlY2VpdmUgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MjEuNTQwMDU1Mzg5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU5MzcxMTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMzOjIxLjU0MDUyNDYwOVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjU5MzIzNzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gTVBUQ1AgbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgaW50cm9kdWNlcyBuZXcgTUlCIGNvdW50ZXJzLCBhZGRzIG1lbW9yeSBsaW1pdCBjaGVja3MgKGBtcHRjcF9vdmVyX2xpbWl0YCwgYG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlYCksIGltcGxlbWVudHMgb3V0LW9mLW9yZGVyIHF1ZXVlIHBydW5pbmcgKGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgKSwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9vcCAoYF9fbXB0Y3BfcmV0cmFuc2ApLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGV4cG9zaW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseWluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBmb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIHBhY2tldCBkcm9wcGluZyBvciBxdWV1ZSBtYW5pcHVsYXRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjYwNmE3YmM0NjUxMGI4YTk4NDg4YWI1MjY0YjczZmI4NjNmYTg5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTY6MjE6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmMgYi9uZXQvbXB0Y3AvbWliLmNcbmluZGV4IGYyM2ZkYTBjNTVhNzIuLjI1NjkzODViYWI3Y2EgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmNcbisrKyBiL25ldC9tcHRjcC9taWIuY1xuQEAgLTg1LDYgKzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiRmFsbGJhY2tGYWlsZWRcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJXaW5Qcm9iZVwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuK1x0U05NUF9NSUJfSVRFTShcIkJhY2tsb2dEcm9wXCIsIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXG4rXHRTTk1QX01JQl9JVEVNKFwiUmN2UHJ1bmVkXCIsIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxuK1x0U05NUF9NSUJfSVRFTShcIk9GT1BydW5lZFwiLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcbiB9O1xuIFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmhcbmluZGV4IDgxMjIxOGI1ZWQyYmYuLjNhMzQyNWUyNThhNzYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcbisrKyBiL25ldC9tcHRjcC9taWIuaFxuQEAgLTg4LDYgKzg4LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQge1xuIFx0TVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyxcdC8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovXG4gXHRNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsXHQvKiBDYW4ndCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqL1xuIFx0TVBUQ1BfTUlCX1dJTlBST0JFLFx0XHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xuK1x0TVBUQ1BfTUlCX0JBQ0tMT0dEUk9QLFx0XHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXG4rXHRNUFRDUF9NSUJfUkNWUFJVTkVELFx0XHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMgKi9cbitcdE1QVENQX01JQl9PRk9QUlVORUQsXHRcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cbiBcdF9fTVBUQ1BfTUlCX01BWFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbmluZGV4IDEwNTdkNTAwNTc3YjAuLmI4MzE4ZTAzMDEzODkgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avb3B0aW9ucy5jXG4rKysgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXG5AQCAtMTE5MCw4ICsxMTkwLDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdHJldHVybiBobWFjID09IG1wX29wdC1cdTAwM2VhaG1hYztcbiB9XG4gXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxuLSAqIGVsc2UgcmV0dXJuIHRydWUuXG4rc3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHR1MzIgcmN2YnVmID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4rXG4rXHRpZiAobGlrZWx5KCh1MzIpc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYz0gcmN2YnVmIFx1MDAyNlx1MDAyNlxuK1x0XHQgICBSRUFEX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuKSBcdTAwM2M9IHJjdmJ1ZikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIEF2b2lkIHNpbGVudGx5IGRyb3BwaW5nIHB1cmUgYWNrcywgZmluLCByc3Qgb3IgYWxyZWFkeS1hY2tlZCBzZWdtLiAqL1xuK1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbitcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiAoVENQSERSX0ZJTiB8IFRDUEhEUl9SU1QpIHx8XG4rXHQgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxLCB0Y3Bfc2soc3NrKS1cdTAwM2VyY3Zfbnh0KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXG4rXHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4rXHRpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTtcbitcbitcdC8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqL1xuK1x0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZRRFJPUCk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuKyAqIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQsIG9yIG92ZXIgbWVtb3J5IGxpbWl0cy5cbiAgKi9cbiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbkBAIC0xMjE3LDcgKzEyNDMsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0XHRfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy1cdTAwM2Vjb25uKTtcbiBcdFx0bXB0Y3BfZGF0YV91bmxvY2soc3ViZmxvdy1cdTAwM2Vjb25uKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDY0YTEyMzZhYWJlZTkuLmQxZjczYzNlMzlmYTMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuKysrIGIvbmV0L21wdGNwL3BtLmNcbkBAIC0xMDY1LDcgKzEwNjUsOCBAQCBib29sIG1wdGNwX3BtX2lzX2JhY2t1cChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYylcbiBcdHJldHVybiBtcHRjcF9wbV9ubF9pc19iYWNrdXAobXNrLCBcdTAwMjZza2NfbG9jYWwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbitzdGF0aWMgdm9pZFxuK21wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqaXRlciwgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuQEAgLTExMDIsMjIgKzExMDMsMzQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NcbiBcdH1cbiB9XG4gXG4tdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuK3ZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XG4tXHR1MzIgcmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS1cdTAwM2VyY3ZfdHN0YW1wKTtcbi1cbi1cdC8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqL1xuLVx0aWYgKCFzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50KSB7XG4tXHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfcmN2X3RzdGFtcCA9IHJjdl90c3RhbXA7XG4tXHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQrKztcbi1cdH0gZWxzZSBpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHtcbi1cdFx0aWYgKHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQgXHUwMDNjIFU4X01BWClcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4rXG4rXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xuK1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbitcdFx0dTMyIHJjdl90c3RhbXA7XG4rXG4rXHRcdGlmICghX19tcHRjcF9zdWJmbG93X2FjdGl2ZShzdWJmbG93KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogTm8gZGF0YSBvdXRzdGFuZGluZyBhdCBUQ1AgbGV2ZWw/IG5vdCBzdGFsZSAqL1xuK1x0XHRpZiAodGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqL1xuK1x0XHRyY3ZfdHN0YW1wID0gUkVBRF9PTkNFKHRjcF9zayhzc2spLVx1MDAzZXJjdl90c3RhbXApO1xuK1x0XHRpZiAoIXN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpIHtcbitcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX3Jjdl90c3RhbXAgPSByY3ZfdHN0YW1wO1xuIFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQrKztcbi1cdFx0bXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKG1zaywgc3NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQgPSAwO1xuLVx0XHRtcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7XG4rXHRcdH0gZWxzZSBpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHtcbitcdFx0XHRpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCBcdTAwM2MgVThfTUFYKVxuK1x0XHRcdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCsrO1xuK1x0XHRcdG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKG1zaywgc3NrKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50ID0gMDtcbitcdFx0XHRtcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uZWM4NzRkMmVhZDZhNCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTI0Miw2ICsyNDIsNjUgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcmN2YnVmX2dyb3coc3RydWN0IHNvY2sgKnNrLCB1MzIgbmV3dmFsKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbisvKiBcIkluc3BpcmVkXCIgZnJvbSB0aGUgVENQIHZlcnNpb247IG1haW4gZGlmZmVyZW5jZTogc3RvcCBhcyBzb29uIGFzIHRoZSBNUFRDUFxuKyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuXG4rICovXG4rc3RhdGljIHZvaWQgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmluX3NrYilcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2O1xuK1x0Ym9vbCBwcnVuZWQgPSBmYWxzZTtcbitcdHU2NCBtZW07XG4rXG4rXHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bm9kZSA9IFx1MDAyNm1zay1cdTAwM2Vvb29fbGFzdF9za2ItXHUwMDNlcmJub2RlO1xuK1xuK1x0ZG8ge1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xuK1xuK1x0XHQvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqL1xuK1x0XHRpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0IoaW5fc2tiKS1cdTAwM2VtYXBfc2VxLFxuK1x0XHRcdCAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxKSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0cHJ1bmVkID0gdHJ1ZTtcbitcdFx0cHJldiA9IHJiX3ByZXYobm9kZSk7XG4rXHRcdHJiX2VyYXNlKG5vZGUsIFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xuK1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuK1x0XHRtc2stXHUwMDNlb29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpO1xuK1xuK1x0XHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbitcdFx0aWYgKG1lbSBcdTAwM2M9IHNrLVx1MDAzZXNrX3JjdmJ1ZilcbitcdFx0XHRicmVhaztcbitcbitcdFx0bm9kZSA9IHByZXY7XG4rXHR9IHdoaWxlIChub2RlKTtcbitcbitcdGlmIChwcnVuZWQpXG4rXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpO1xuK31cbitcbisvKiBUaGUgc3RhY2sgY2FuJ3QgZHJvcCBwYWNrZXRzIGZvciBmYWxsYmFjayBzb2NrZXQgYXQgdGhlIG1zayBsZXZlbCwgb3IgdGhlXG4rICogc3RyZWFtIHdpbGwgYnJlYWsuXG4rICovXG4rc3RhdGljIGJvb2wgbXB0Y3BfY2FuX2luZ2VzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0cmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2M9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSB8fFxuK1x0XHRcdF9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGlmICghbXB0Y3BfY2FuX2luZ2VzdChzaykpIHtcbitcdFx0bXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHNrLCBza2IpO1xuK1x0XHRyZXR1cm4gbXB0Y3BfY2FuX2luZ2VzdChzayk7XG4rXHR9XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLyogXCJpbnNwaXJlZFwiIGJ5IHRjcF9kYXRhX3F1ZXVlX29mbygpLCBtYWluIGRpZmZlcmVuY2VzOlxuICAqIC0gdXNlIG1wdGNwIHNlcXNcbiAgKiAtIGRvbid0IGNvcGUgd2l0aCBzYWNrc1xuQEAgLTI1Myw2ICszMTIsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHU2NCBzZXEsIGVuZF9zZXEsIG1heF9zZXE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMTtcbiBcbitcdGlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHtcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4rXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdHNlcSA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4gXHRlbmRfc2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcTtcbiBcdG1heF9zZXEgPSBhdG9taWM2NF9yZWFkKFx1MDAyNm1zay1cdTAwM2VyY3Zfd25kX3NlbnQpO1xuQEAgLTM4OSw2ICs0NTQsMTMgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRpZiAoTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSA9PSBtc2stXHUwMDNlYWNrX3NlcSkge1xuIFx0XHQvKiBpbiBzZXF1ZW5jZSAqL1xuK2luc2VydDpcbitcdFx0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuK1x0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuK1x0XHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXG4gXHRcdG1zay1cdTAwM2VieXRlc19yZWNlaXZlZCArPSBjb3B5X2xlbjtcbiBcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlYWNrX3NlcSwgbXNrLVx1MDAzZWFja19zZXEgKyBjb3B5X2xlbik7XG4gXHRcdHRhaWwgPSBza2JfcGVla190YWlsKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuQEAgLTQwMywyNiArNDc1LDIwIEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHQvKiBDb21wbGV0ZWx5IG9sZCBkYXRhPyAqL1xuLVx0aWYgKCFhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xuLVx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG4tXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4tXHRcdHJldHVybiBmYWxzZTtcbitcdC8qIFBhcnRpYWwgcGFja2V0ICovXG4rXHRpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxLCBtc2stXHUwMDNlYWNrX3NlcSkpIHtcbitcdFx0Y29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxIC0gbXNrLVx1MDAzZWFja19zZXE7XG4rXHRcdE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldCArPSBtc2stXHUwMDNlYWNrX3NlcSAtXG4rXHRcdFx0XHRcdCAgICAgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbitcdFx0TVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSArPSBtc2stXHUwMDNlYWNrX3NlcSAtXG4rXHRcdFx0XHRcdCAgICAgIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4rXHRcdGdvdG8gaW5zZXJ0O1xuIFx0fVxuIFxuLVx0LyogUGFydGlhbCBwYWNrZXQ6IG1hcF9zZXEgXHUwMDNjIGFja19zZXEgXHUwMDNjIGVuZF9zZXEuXG4tXHQgKiBTa2lwIHRoZSBhbHJlYWR5LWFja2VkIGJ5dGVzIGFuZCBlbnF1ZXVlIHRoZSBuZXcgZGF0YS5cbi1cdCAqL1xuLVx0Y29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxIC0gbXNrLVx1MDAzZWFja19zZXE7XG4tXHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgKz0gbXNrLVx1MDAzZWFja19zZXEgLSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuLVx0TVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSArPSBtc2stXHUwMDNlYWNrX3NlcSAtXG4tXHRcdFx0XHQgICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuLVx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xuLVx0V1JJVEVfT05DRShtc2stXHUwMDNlYWNrX3NlcSwgbXNrLVx1MDAzZWFja19zZXEgKyBjb3B5X2xlbik7XG4tXG4tXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG4tXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XG4tXHRyZXR1cm4gdHJ1ZTtcbitcdC8qIENvbXBsZXRlbHkgb2xkIGRhdGEgKi9cbitcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbitcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX3N0b3BfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcbkBAIC02ODEsNiArNzQ3LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrID0gc2tiLVx1MDAzZXNrO1xuIFx0Ym9vbCBmcmFnc3RvbGVuO1xuK1x0dTY0IGxpbWl0O1xuIFx0aW50IGRlbHRhO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkpIHtcbkBAIC02ODgsNiArNzU1LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHQvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi9cbitcdGxpbWl0ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4rXHRsaW1pdCArPSAobGltaXQgXHUwMDNlXHUwMDNlIDEpICsgNjQgKiAxMDI0O1xuK1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4rXHRpZiAobXNrLVx1MDAzZWJhY2tsb2dfbGVuIFx1MDAzZSBsaW1pdCBcdTAwMjZcdTAwMjYgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSkge1xuK1x0XHRfX01QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9CQUNLTE9HRFJPUCk7XG4rXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzU5LDcgKzgzNiw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFxuIFx0XHRcdG1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7XG4gXG4tXHRcdFx0aWYgKG93bl9tc2sgXHUwMDI2XHUwMDI2IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Mgc2stXHUwMDNlc2tfcmN2YnVmKSB7XG4rXHRcdFx0aWYgKG93bl9tc2spIHtcbiBcdFx0XHRcdG1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTtcbiBcdFx0XHRcdHJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpO1xuIFx0XHRcdH0gZWxzZSB7XG5AQCAtMTE0MiwxMyArMTIxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIxNSwxMiArMjI4NSw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticywgdTMyICpkZWx0XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0Ym9vbCBtb3ZlZCA9IGZhbHNlO1xuIFxuLVx0KmRlbHRhID0gMDtcbiBcdHdoaWxlICgxKSB7XG4tXHRcdC8qIElmIHRoZSBtc2sgcmVjdmJ1ZiBpcyBmdWxsIHN0b3AsIGRvbid0IGRyb3AgKi9cbi1cdFx0aWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuLVx0XHRcdGJyZWFrO1xuLVxuIFx0XHRwcmVmZXRjaChza2ItXHUwMDNlbmV4dCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnNrYi1cdTAwM2VsaXN0KTtcbiBcdFx0KmRlbHRhICs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQ4LDkgKzIzMTMsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX3VuYWNjb3VudGVkIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zb2NrZXQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIG1lbV9jZ3JvdXBfZnJvbV9zayhzaykpO1xuIFxuLVx0LyogRG9uJ3Qgc3Bvb2wgdGhlIGJhY2tsb2cgaWYgdGhlIHJjdmJ1ZiBpcyBmdWxsLiAqL1xuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkgfHxcbi1cdCAgICBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNlIHNrLVx1MDAzZXNrX3JjdmJ1ZilcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjU4LDIwICsyMzIxLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsXG4tXHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4te1xuLVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbi1cbi1cdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4tXHRsaXN0X3NwbGljZShza2JzLCBcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KTtcbi19XG4tXG4gc3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBza2JzO1xuIFx0Ym9vbCBlbnF1ZXVlZCA9IGZhbHNlO1xuLVx0dTMyIG1vdmVkO1xuK1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3OSw4ICsyMzM0LDggQEAgc3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKTtcbiBcbiBcdFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbi1cdFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXHUwMDI2c2ticyk7XG4gXHR9XG4rXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuIFxuIFx0aWYgKGVucXVldWVkIFx1MDAyNlx1MDAyNiBtcHRjcF9lcG9sbGluX3JlYWR5KHNrKSlcbkBAIC0yNDY5LDcgKzI1MjQsNiBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFxuIFx0XHQvKiBzdGlsbCBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gc2tpcCB0aGlzICovXG4gXHRcdGlmICghdGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpIHtcbi1cdFx0XHRtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7XG4gXHRcdFx0bWluX3N0YWxlX2NvdW50ID0gbWluX3QoaW50LCBtaW5fc3RhbGVfY291bnQsIHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMjc5MSw0NCArMjg0NSwyMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiBcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4rLypcbisgKiBSZXRyYW5zbWl0IHRoZSBzcGVjaWZpZWQgZGF0YSBmcmFnbWVudCBvbiBhbGwgdGhlIHNlbGVjdGVkIHN1YmZsb3dzLFxuKyAqIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZVxuKyAqL1xuK3N0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbitcdFx0XHRcdHU2NCBzZW50X3NlcSlcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbi1cdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuIFx0c3RydWN0IHNvY2sgKnNzaztcbi1cdGludCByZXQsIGVycjtcbi1cdHUxNiBsZW4gPSAwO1xuLVxuLVx0bXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4tXG4tXHQvKiBmaXJzdCBjaGVjayBzc2s6IG5lZWQgdG8ga2ljayBcInN0YWxlXCIgbG9naWMgKi9cbi1cdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XG4tXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbi1cdGlmICghZGZyYWcpIHtcbi1cdFx0aWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkge1xuLVx0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbi1cbi1cdFx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcbi1cdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xuLVx0XHRcdG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spO1xuLVx0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4tXG4tXHRcdFx0Z290byByZXNldF90aW1lcjtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpXG4tXHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4tXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4tXHR9XG4tXG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuK1x0aW50IHJldCwgbGVuID0gMDtcbiBcbiBcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4gXHRcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2VzY2hlZHVsZWQpKSB7XG4rXHRcdFx0dTE2IG9mZnNldCA9IHNlbnRfc2VxIC0gZGZyYWctXHUwMDNlZGF0YV9zZXE7XG4gXHRcdFx0dTE2IGNvcGllZCA9IDA7XG4gXG4gXHRcdFx0bXB0Y3Bfc3ViZmxvd19zZXRfc2NoZWR1bGVkKHN1YmZsb3csIGZhbHNlKTtcbkBAIC0yODM4LDcgKzI4NzAsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdGxvY2tfc29jayhzc2spO1xuIFxuIFx0XHRcdC8qIGxpbWl0IHJldHJhbnNtaXNzaW9uIHRvIHRoZSBieXRlcyBhbHJlYWR5IHNlbnQgb24gc29tZSBzdWJmbG93cyAqL1xuLVx0XHRcdGluZm8uc2VudCA9IDA7XG4rXHRcdFx0aW5mby5zZW50ID0gb2Zmc2V0O1xuIFx0XHRcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVx1MDAzZWNzdW1fZW5hYmxlZCkgPyBkZnJhZy1cdTAwM2VkYXRhX2xlbiA6XG4gXHRcdFx0XHRcdFx0XHRcdCAgICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQ7XG4gXG5AQCAtMjg1Myw3ICsyODg1LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHQgICAgIW1zay1cdTAwM2VhbGxvd19zdWJmbG93cykge1xuIFx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZWZhbGxiYWNrX2xvY2spO1xuIFx0XHRcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4tXHRcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbitcdFx0XHRcdHJldHVybiAtMTtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0d2hpbGUgKGluZm8uc2VudCBcdTAwM2MgaW5mby5saW1pdCkge1xuQEAgLTI4NzYsMTMgKzI5MDgsOTkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbiBcdFx0fVxuIFx0fVxuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbitcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuK1x0dTY0IHJldHJhbnNfc2VxLCBzZW50X3NlcTtcbitcdGJvb2wgbmVlZF9yZXRyYW5zO1xuK1x0aW50IGVyciwgbGVuO1xuK1xuK1x0bXB0Y3BfcG1fY2hrX3N0YWxlKG1zayk7XG4rXG4rXHQvKiBHZXQgYW4gdXBkYXRlZCBhbmQgY29uc2lzdGVudCBydHggcXVldWUgc3RhdHVzLiAqL1xuK1x0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbitcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4rXHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4rXHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuK1x0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRib29sIGFscmVhZHlfYWNrZWQ7XG4rXG4rXHRcdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXG4rXHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXG4rXHRcdGxlbiA9IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHNrLCBkZnJhZywgcmV0cmFuc19zZXEpO1xuK1x0XHRpZiAobGVuIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1xuK1x0XHRyZXRyYW5zX3NlcSArPSBsZW47XG4rXHRcdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcbitcdFx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsXG4rXHRcdFx0XHRcdCAgICByZXRyYW5zX3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxKTtcbitcbitcdFx0LyogV2l0aCBjc3VtIGVuYWJsZWQsIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuK1x0XHRzZW50X3NlcSA9IGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVx1MDAzZWRhdGFfc2VxO1xuK1x0XHRpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLVx1MDAzZXNuZF9ueHQpKVxuK1x0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcbitcbitcdFx0LyogQXR0ZW1wdCB0aGUgbmV4dCBmcmFnbWVudCBvbmx5IGlmIHRoZSBjdXJyZW50IG9uZSBpc1xuK1x0XHQgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAoYmVmb3JlNjQocmV0cmFuc19zZXEsIGRmcmFnLVx1MDAzZWRhdGFfc2VxICsgZGZyYWctXHUwMDNlZGF0YV9sZW4pKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcdTAwMjZkZnJhZy1cdTAwM2VsaXN0LCBcdTAwMjZtc2stXHUwMDNlcnR4X3F1ZXVlKSA/XG4rXHRcdFx0XHROVUxMIDogbGlzdF9uZXh0X2VudHJ5KGRmcmFnLCBsaXN0KTtcbitcdFx0aWYgKCFkZnJhZylcbitcdFx0XHRicmVhaztcbitcbitcdFx0LyogSW5jb21pbmcgYWNrcyBjYW4gbW92ZSBzbmRfdW5hIGFmdGVyIHRoZSBjdXJyZW50IGRmcmFnXG4rXHRcdCAqIGFjcm9zcyBsb29wIGl0ZXJhdGlvbnMsIGlmIHNvIHN0YXJ0IGFnYWluIGZyb20gUlRYIGhlYWQuXG4rXHRcdCAqL1xuK1x0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuK1x0XHRhbHJlYWR5X2Fja2VkID0gIWJlZm9yZTY0KG1zay1cdTAwM2VzbmRfdW5hLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSArXG4rXHRcdFx0XHRcdCAgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KTtcbitcdFx0aWYgKGFscmVhZHlfYWNrZWQpIHtcbitcdFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuK1x0XHRcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4rXHRcdFx0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcbitcdFx0fSBlbHNlIGlmIChhZnRlcjY0KG1zay1cdTAwM2VzbmRfdW5hLCByZXRyYW5zX3NlcSkpIHtcbitcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0XHR9XG4rXHRcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbitcdH1cbiBcbi1cdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcbi1cdGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCA9IG1heChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsIGxlbik7XG4rXHQvKiBBdHRlbXB0IGRhdGEtZmluIHJldHJhbnNtaXNzaW9uIG9ubHkgd2hlbiB0aGUgUlRYIHF1ZXVlIGlzIGVtcHR5LiAqL1xuK1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbitcdFx0aWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkge1xuK1x0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiBcbi1cdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuLVx0aWYgKGFmdGVyNjQoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXEsIG1zay1cdTAwM2VzbmRfbnh0KSlcbi1cdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXEpO1xuK1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuK1x0XHRcdFx0ICAgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XG4rXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4rXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbitcdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbitcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbitcdH1cbiBcbiByZXNldF90aW1lcjpcbiBcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XG5AQCAtMzY3NiwxMiArMzc5NCwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbiBcdF9fbXVzdF9ob2xkKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbitcdHUzMiBtb3ZlZCA9IDA7XG4gXG4gXHRmb3IgKDs7KSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLVx1MDAzZWNiX2ZsYWdzIFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XG4gXHRcdGJvb2wgc3Bvb2xfYmw7XG4tXHRcdHUzMiBtb3ZlZDtcbiBcbiBcdFx0c3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticyk7XG4gXHRcdGlmICghZmxhZ3MgXHUwMDI2XHUwMDI2ICFzcG9vbF9ibClcbkBAIC0zNzE0LDkgKzM4MzIsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKTtcbi1cdFx0aWYgKHNwb29sX2JsKVxuLVx0XHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuK1x0aWYgKG1vdmVkKVxuK1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFxuIFx0aWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgXHUwMDI2bXNrLVx1MDAzZWNiX2ZsYWdzKSlcbiBcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCAxYjgwZjJkNmVjNWEyLi5iM2FmMzQ2MmJkZDE2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtNTgwLDEyICs1ODAsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7XG4gXHRcdHJlbW90ZV9rZXlfdmFsaWQgOiAxLCAgICAgICAgLyogcmVjZWl2ZWQgdGhlIHBlZXIga2V5IGZyb20gKi9cbiBcdFx0ZGlzcG9zYWJsZSA6IDEsXHQgICAgLyogY3R4IGNhbiBiZSBmcmVlIGF0IHVscCByZWxlYXNlIHRpbWUgKi9cbiBcdFx0Y2xvc2luZyA6IDEsXHQgICAgLyogbXVzdCBub3QgcGFzcyByeCBkYXRhIHRvIG1zayBhbnltb3JlICovXG4tXHRcdHN0YWxlIDogMSxcdCAgICAvKiB1bmFibGUgdG8gc25kL3JjdiBkYXRhLCBkbyBub3QgdXNlIGZvciB4bWl0ICovXG4gXHRcdHZhbGlkX2NzdW1fc2VlbiA6IDEsICAgICAgICAvKiBhdCBsZWFzdCBvbmUgY3N1bSB2YWxpZGF0ZWQgKi9cbiBcdFx0aXNfbXB0Zm8gOiAxLFx0ICAgIC8qIHN1YmZsb3cgaXMgZG9pbmcgVEZPICovXG4gXHRcdGNsb3NlX2V2ZW50X2RvbmUgOiAxLCAgICAgICAvKiBoYXMgZG9uZSB0aGUgcG9zdC1jbG9zZWQgcGFydCAqL1xuIFx0XHRtcGNfZHJvcCA6IDEsXHQgICAgLyogdGhlIE1QQyBvcHRpb24gaGFzIGJlZW4gZHJvcHBlZCBpbiBhIHJ0eCAqL1xuLVx0XHRfX3VudXNlZCA6IDg7XG4rXHRcdF9fdW51c2VkIDogOTtcbiBcdGJvb2xcdGRhdGFfYXZhaWw7XG4gXHRib29sXHRzY2hlZHVsZWQ7XG4gXHRib29sXHRwbV9saXN0ZW5lcjtcdCAgICAvKiBhIGxpc3RlbmVyIG1hbmFnZWQgYnkgdGhlIGtlcm5lbCBQTT8gKi9cbkBAIC02MDQsNyArNjAzLDExIEBAIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQge1xuIFx0dThcdHJlc2V0X3NlZW46MTtcbiBcdHU4XHRyZXNldF90cmFuc2llbnQ6MTtcbiBcdHU4XHRyZXNldF9yZWFzb246NDtcbi1cdHU4XHRzdGFsZV9jb3VudDtcbitcdHU4XHRzdGFsZV9jb3VudDtcdCAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jayAqL1xuK1x0dThcdHN0YWxlO1x0XHQgICAgLyogUHJvdGVjdGVkIGJ5IHRoZSBtc2sgc29ja2V0IGxvY2ssXG4rXHRcdFx0XHQgICAgICogaWYgc2V0IHRoZSBzdWJmbG93IGlzIHVuYWJsZSB0byBzbmQvcmN2XG4rXHRcdFx0XHQgICAgICogZGF0YSwgdGhlIHNjaGVkdWxlIHNob3VsZCBza2lwIGl0XG4rXHRcdFx0XHQgICAgICovXG4gXG4gXHR1MzJcdHN1YmZsb3dfaWQ7XG4gXG5AQCAtMTEwMyw3ICsxMTA2LDcgQEAgaW50IG1wdGNwX3BtX3BhcnNlX2VudHJ5KHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4gYm9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqbG9jLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpyZW0pO1xuLXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzayk7XG4rdm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gdm9pZCBtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgc2VydmVyX3NpZGUpO1xuIHZvaWQgbXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzayk7XG4gYm9vbCBtcHRjcF9wbV9hbGxvd19uZXdfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMzOjIxLjU0MDUyODY2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTkzMjE1NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1lbW9yeSBNYW5hZ2VtZW50IGFuZCBNUFRDUCBTdGFiaWxpdHkgUmV2aWV3KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBNUFRDUCBwYXRjaCBpbiBmcm9udCBvZiBtZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgcHJpbWFyaWx5IGZvY3VzZXMgb24gaW1wcm92aW5nIE1QVENQJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhhbmRsaW5nIG9mIG92ZXJmbG93IGNvbmRpdGlvbnMuIEkgc2VlIGl0J3MgYWRkaW5nIG5ldyBNSUIgY291bnRlcnMgdG8gdHJhY2sgdGhpbmdzIGxpa2UgYmFja2xvZyBkcm9wcywgcmVjZWl2ZXIgcHJ1bmVkIHBhY2tldHMsIGFuZCBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZy4gVGhhdCdzIGEgZ29vZCBzdGFydCBmb3Igb2JzZXJ2YWJpbGl0eS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2Agbm93IGNoZWNrcyBgbXB0Y3Bfb3Zlcl9saW1pdGAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBpbmdyZXNzIGZsb3cgY29udHJvbC4gU2ltaWxhcmx5LCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBpcyBiZWluZyBtb2RpZmllZCB0byBodW50IGRvd24gc3RhbGUgc3ViZmxvd3MuIFRoZSBrZXkgYXJlYXMgZm9yIHJldmlldyBhcmUgYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCwgYF9fbXB0Y3BfbW92ZV9za2JgLCBhbmQgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLCBhbGwgb2Ygd2hpY2ggYXJlIG5vdyBjaGVja2luZyBtZW1vcnkgbGltaXRzIGFuZCBkcm9wcGluZyBwYWNrZXRzIGlmIG5lZWRlZCB1c2luZyBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgLiBgX19tcHRjcF9yZXRyYW5zYCBhbHNvIGxvb2tzIGxpa2UgaXQncyBnZXR0aW5nIHNvbWUgdHdlYWtzIHRvIGltcHJvdmUgaXRzIHJldHJhbnNtaXNzaW9uIGNhcGFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHdpdGggbXVsdGlwbGUgZnJhZ21lbnRzLiBBbmQgZmluYWxseSwgYG1wdGNwX3JlbGVhc2VfY2JgIGFuZCBgbXB0Y3BfbW92ZV9za2JzYCBhcmUgdG91Y2hlZCB0byBtYWtlIHN1cmUgYmFja2xvZyBzcG9vbGluZyBpcyBoYW5kbGVkIGNvcnJlY3RseS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZT8gVGhhdCdzIGFsd2F5cyBteSBmaXJzdCB3b3JyeSB3aXRoIGtlcm5lbCBjaGFuZ2VzLiBCdXQgYmFzZWQgb24gYSBxdWljayBzY2FuLCBhbmQgSSd2ZSBnb3QgdG8gZG8gYSBkZWVwZXIgZGl2ZSwgSSBkb24ndCBzZWUgYW55IGdsYXJpbmcgaXNzdWVzLiBUaGUgY2hhbmdlcyBhcmUgYWxtb3N0IGVudGlyZWx5IGZvY3VzZWQgb24gbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIHJlYWNoZWQsIGFuZCBtYWtpbmcgcmV0cmFuc21pc3Npb24gbG9naWMgbW9yZSByb2J1c3QuIFRoZXJlIGFyZW4ndCBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBhbmQgcGFydGlhbGx5IGluaXRpYWxpemVkLiBUaGUgcGF0dGVybiBoZXJlIHN1Z2dlc3RzIGNhcmVmdWwgYXR0ZW50aW9uIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBlbmNvdXJhZ2luZy4gU28sIGF0IGZpcnN0IGdsYW5jZSwgSSAqZG9uJ3QqIHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuXG5cbkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNoYW5nZXMgaW4gYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZSBgX19tcHRjcF9wdXNoX3JldHJhbnNgIGZ1bmN0aW9uIGlzIGV4dHJhY3RlZCBmb3IgY2xhcml0eS4gSXQgaXRlcmF0ZXMgb3ZlciBmcmFnbWVudHMsIHRoZW4gaXQgY2FsbHMgdGhhdCBuZXcgZnVuY3Rpb24gdG8gYWN0dWFsbHkgcHVzaCBhIHJldHJhbnNtaXNzaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIHBvcHBpbmcgb3V0IGhlcmUgZWl0aGVyLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgbXB0Y3Bfb3Zlcl9saW1pdGAuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgcmVhZGluZyBleGlzdGluZyBgc2tfcmN2YnVmYCBhbmQgYG1zay1cdTAwM2ViYWNrbG9nX2xlbmAgZmllbGRzIGFuZCBwZXJmb3JtaW5nIGNvbXBhcmlzb25zLiBJdCdzIGp1c3QgY2hlY2tpbmcgbGltaXRzLCBhbmQgSSBkb24ndCBzZWUgYW55dGhpbmcgd3Jvbmcgd2l0aCB0aGF0LlxuXG5MYXN0bHksIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIGlzIGl0ZXJhdGluZyBvdmVyIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgdG8gZnJlZSB1cCBtZW1vcnkuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gaGFuZGxpbmcgY29uZ2VzdGlvbi5cblxuQWxsIG9mIHRoZXNlIGNoYW5nZXMgcmVhbGx5IHNlZW0gdGFyZ2V0ZWQgYXQgcHJldmVudGluZyBhbmQgbWl0aWdhdGluZyBtZW1vcnkgZXhoYXVzdGlvbiB3aXRoaW4gTVBUQ1AuIEJhc2VkIG9uIHRoaXMgZGVlcGVyIHJldmlldywgaXTigJlzIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFuZCBpbXBvcnRhbnRseSwgaXQgc2VlbXMgbGlrZSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGZhaXJseSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4uIFdlIHdvdWxkIGV4cGVjdCBLQVNBTiB0byBxdWlja2x5IGZsYWcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW50cm9kdWNlLiBIb25lc3RseSwgSSBkb24ndCB0aGluayBLTVNBTiBpcyBuZWVkZWQgaGVyZSwgdW5sZXNzIHRoZXJlIGFyZSBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gT3ZlcmFsbCwgSSdtIGZlZWxpbmcgZmFpcmx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLCBwZW5kaW5nIGEgbW9yZSB0aG9yb3VnaCB0ZXN0IHJ1bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTUsIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MzQuMTMzNzQ3MDU4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBNUFRDUCBtZW1vcnkgYWNjb3VudGluZywgcGFja2V0IGRyb3BwaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5ldyBNSUIgY291bnRlcnMsIGFkZHMgbWVtb3J5IGxpbWl0IGNoZWNrcyAoYG1wdGNwX292ZXJfbGltaXRgLCBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgKSwgaW1wbGVtZW50cyBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZyAoYG1wdGNwX3BydW5lX29mb19xdWV1ZWApLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb29wIChgX19tcHRjcF9yZXRyYW5zYCkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgZXhwb3Npbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgcGFja2V0IGRyb3BwaW5nIG9yIHF1ZXVlIG1hbmlwdWxhdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBNUFRDUCBtZW1vcnkgYWNjb3VudGluZywgcGFja2V0IGRyb3BwaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5ldyBNSUIgY291bnRlcnMsIGFkZHMgbWVtb3J5IGxpbWl0IGNoZWNrcyAoYG1wdGNwX292ZXJfbGltaXRgLCBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgKSwgaW1wbGVtZW50cyBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZyAoYG1wdGNwX3BydW5lX29mb19xdWV1ZWApLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb29wIChgX19tcHRjcF9yZXRyYW5zYCkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgZXhwb3Npbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgcGFja2V0IGRyb3BwaW5nIG9yIHF1ZXVlIG1hbmlwdWxhdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow42m8z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 16:19:58 +0000 UTC FinishedAt: 2026-08-07 16:33:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "35b3cc7d-ddcb-4b28-828f-3e8e09559ced" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_incoming_options", "mptcp_pm_chk_stale", "mptcp_subflow_get_retrans", "mptcp_data_ready", "mptcp_recvmsg", "mptcp_sendmsg" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9jaGtfc3RhbGUmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBmb2N1c2VzIG9uIE1QVENQIG1lbW9yeSBhY2NvdW50aW5nLCBwYWNrZXQgZHJvcHBpbmcgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBhbmQgcmV0cmFuc21pc3Npb24gbG9naWMuIEl0IGludHJvZHVjZXMgbmV3IE1JQiBjb3VudGVycywgYWRkcyBtZW1vcnkgbGltaXQgY2hlY2tzIChgbXB0Y3Bfb3Zlcl9saW1pdGAsIGBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZWApLCBpbXBsZW1lbnRzIG91dC1vZi1vcmRlciBxdWV1ZSBwcnVuaW5nIChgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCksIGFuZCByZWZhY3RvcnMgdGhlIHJldHJhbnNtaXNzaW9uIGxvb3AgKGBfX21wdGNwX3JldHJhbnNgKS4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludm9sdmUgYWxsb2NhdGluZyBuZXcgY29tcGxleCBzdHJ1Y3R1cmVzLCBleHBvc2luZyBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHJlbHlpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgZm9yIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGR1cmluZyBwYWNrZXQgZHJvcHBpbmcgb3IgcXVldWUgbWFuaXB1bGF0aW9uLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgYWRkcyBuZXcgTUlCIGNvdW50ZXJzIGFuZCBtb2RpZmllcyBjb3JlIE1QVENQIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgX19tcHRjcF9yZXRyYW5zYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHN0YW5kYXJkIE1QVENQIHNvY2tldCBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIHJlY2VpdmUgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI2MDZhN2JjNDY1MTBiOGE5ODQ4OGFiNTI2NGI3M2ZiODYzZmE4OWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjIxOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xuaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5jXG5AQCAtODUsNiAmIzQzOzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrXCYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCYjMzQ7RmFsbGJhY2tGYWlsZWRcJiMzNDssIE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O1dpblByb2JlXCYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7QmFja2xvZ0Ryb3BcJiMzNDssIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXG4mIzQzO1x0U05NUF9NSUJfSVRFTShcJiMzNDtSY3ZQcnVuZWRcJiMzNDssIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7T0ZPUHJ1bmVkXCYjMzQ7LCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcbiB9O1xuIFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmhcbmluZGV4IDgxMjIxOGI1ZWQyYmYuLjNhMzQyNWUyNThhNzYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaFxuQEAgLTg4LDYgJiM0Mzs4OCw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcbiBcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xuIFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFx0LyogQ2FuJiMzOTt0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXG4gXHRNUFRDUF9NSUJfV0lOUFJPQkUsXHRcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXG4mIzQzO1x0TVBUQ1BfTUlCX0JBQ0tMT0dEUk9QLFx0XHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXG4mIzQzO1x0TVBUQ1BfTUlCX1JDVlBSVU5FRCxcdFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzICovXG4mIzQzO1x0TVBUQ1BfTUlCX09GT1BSVU5FRCxcdFx0LyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqL1xuIFx0X19NUFRDUF9NSUJfTUFYXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggMTA1N2Q1MDA1NzdiMC4uYjgzMThlMDMwMTM4OSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTkwLDggJiM0MzsxMTkwLDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdHJldHVybiBobWFjID09IG1wX29wdC1cdTAwM2VhaG1hYztcbiB9XG4gXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxuLSAqIGVsc2UgcmV0dXJuIHRydWUuXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHUzMiByY3ZidWYgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseSgodTMyKXNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2M9IHJjdmJ1ZiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgIFJFQURfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4pIFx1MDAzYz0gcmN2YnVmKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4sIHJzdCBvciBhbHJlYWR5LWFja2VkIHNlZ20uICovXG4mIzQzO1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbiYjNDM7XHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF9mbGFncyBcdTAwMjYgKFRDUEhEUl9GSU4gfCBUQ1BIRFJfUlNUKSB8fFxuJiM0MztcdCAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVx1MDAzZXJjdl9ueHQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi9cbiYjNDM7XHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4mIzQzO1x0aW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNzayk7XG4mIzQzO1xuJiM0MztcdC8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqL1xuJiM0MztcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQUkNWUURST1ApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuJiM0MzsgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXG4gICovXG4gYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5AQCAtMTIxNyw3ICYjNDM7MTI0Myw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDY0YTEyMzZhYWJlZTkuLmQxZjczYzNlMzlmYTMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmNcbkBAIC0xMDY1LDcgJiM0MzsxMDY1LDggQEAgYm9vbCBtcHRjcF9wbV9pc19iYWNrdXAoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpXG4gXHRyZXR1cm4gbXB0Y3BfcG1fbmxfaXNfYmFja3VwKG1zaywgXHUwMDI2c2tjX2xvY2FsKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO21wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqaXRlciwgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuQEAgLTExMDIsMjIgJiM0MzsxMTAzLDM0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jXG4gXHR9XG4gfVxuIFxuLXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbiYjNDM7dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4tXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcbi1cdHUzMiByY3ZfdHN0YW1wID0gUkVBRF9PTkNFKHRjcF9zayhzc2spLVx1MDAzZXJjdl90c3RhbXApO1xuLVxuLVx0Lyoga2VlcCB0cmFjayBvZiBydHggcGVyaW9kcyB3aXRoIG5vIHByb2dyZXNzICovXG4tXHRpZiAoIXN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpIHtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCYjNDM7JiM0Mzs7XG4tXHR9IGVsc2UgaWYgKHN1YmZsb3ctXHUwMDNlc3RhbGVfcmN2X3RzdGFtcCA9PSByY3ZfdHN0YW1wKSB7XG4tXHRcdGlmIChzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50IFx1MDAzYyBVOF9NQVgpXG4mIzQzO1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbiYjNDM7XHRcdHN0cnVjdCBzb2NrICpzc2sgPSBtcHRjcF9zdWJmbG93X3RjcF9zb2NrKHN1YmZsb3cpO1xuJiM0MztcdFx0dTMyIHJjdl90c3RhbXA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFfX21wdGNwX3N1YmZsb3dfYWN0aXZlKHN1YmZsb3cpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBObyBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gbm90IHN0YWxlICovXG4mIzQzO1x0XHRpZiAodGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqL1xuJiM0MztcdFx0cmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS1cdTAwM2VyY3ZfdHN0YW1wKTtcbiYjNDM7XHRcdGlmICghc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCkge1xuJiM0MztcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX3Jjdl90c3RhbXAgPSByY3ZfdHN0YW1wO1xuIFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQmIzQzOyYjNDM7O1xuLVx0XHRtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUobXNrLCBzc2spO1xuLVx0fSBlbHNlIHtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCA9IDA7XG4tXHRcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHtcbiYjNDM7XHRcdFx0aWYgKHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQgXHUwMDNjIFU4X01BWClcbiYjNDM7XHRcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUobXNrLCBzc2spO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCA9IDA7XG4mIzQzO1x0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcbiYjNDM7XHRcdH1cbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uZWM4NzRkMmVhZDZhNCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTI0Miw2ICYjNDM7MjQyLDY1IEBAIHN0YXRpYyBib29sIG1wdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzOy8qIFwmIzM0O0luc3BpcmVkXCYjMzQ7IGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1BcbiYjNDM7ICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7XG4mIzQzO1x0Ym9vbCBwcnVuZWQgPSBmYWxzZTtcbiYjNDM7XHR1NjQgbWVtO1xuJiM0MztcbiYjNDM7XHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bm9kZSA9IFx1MDAyNm1zay1cdTAwM2Vvb29fbGFzdF9za2ItXHUwMDNlcmJub2RlO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFN0b3AgcHJ1bmluZyBpZiB0aGUgaW5jb21pbmcgc2tiIHdvdWxkIGxhbmQgaW4gT29PIHRhaWwuICovXG4mIzQzO1x0XHRpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0IoaW5fc2tiKS1cdTAwM2VtYXBfc2VxLFxuJiM0MztcdFx0XHQgICAgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHBydW5lZCA9IHRydWU7XG4mIzQzO1x0XHRwcmV2ID0gcmJfcHJldihub2RlKTtcbiYjNDM7XHRcdHJiX2VyYXNlKG5vZGUsIFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xuJiM0MztcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRcdG1zay1cdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XG4mIzQzO1xuJiM0MztcdFx0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XG4mIzQzO1x0XHRpZiAobWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRub2RlID0gcHJldjtcbiYjNDM7XHR9IHdoaWxlIChub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBydW5lZClcbiYjNDM7XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc3RhY2sgY2FuJiMzOTt0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IGF0IHRoZSBtc2sgbGV2ZWwsIG9yIHRoZVxuJiM0MzsgKiBzdHJlYW0gd2lsbCBicmVhay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX2Nhbl9pbmdlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2M9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSB8fFxuJiM0MztcdFx0XHRfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1wdGNwX3NrKHNrKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGlmICghbXB0Y3BfY2FuX2luZ2VzdChzaykpIHtcbiYjNDM7XHRcdG1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgc2tiKTtcbiYjNDM7XHRcdHJldHVybiBtcHRjcF9jYW5faW5nZXN0KHNrKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLyogXCYjMzQ7aW5zcGlyZWRcJiMzNDsgYnkgdGNwX2RhdGFfcXVldWVfb2ZvKCksIG1haW4gZGlmZmVyZW5jZXM6XG4gICogLSB1c2UgbXB0Y3Agc2Vxc1xuICAqIC0gZG9uJiMzOTt0IGNvcGUgd2l0aCBzYWNrc1xuQEAgLTI1Myw2ICYjNDM7MzEyLDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR1NjQgc2VxLCBlbmRfc2VxLCBtYXhfc2VxO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjE7XG4gXG4mIzQzO1x0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuJiM0MztcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4mIzQzO1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuIFx0ZW5kX3NlcSA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXE7XG4gXHRtYXhfc2VxID0gYXRvbWljNjRfcmVhZChcdTAwMjZtc2stXHUwMDNlcmN2X3duZF9zZW50KTtcbkBAIC0zODksNiAmIzQzOzQ1NCwxMyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdGlmIChNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxID09IG1zay1cdTAwM2VhY2tfc2VxKSB7XG4gXHRcdC8qIGluIHNlcXVlbmNlICovXG4mIzQzO2luc2VydDpcbiYjNDM7XHRcdGlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHtcbiYjNDM7XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4mIzQzO1x0XHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdG1zay1cdTAwM2VieXRlc19yZWNlaXZlZCAmIzQzOz0gY29weV9sZW47XG4gXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWFja19zZXEsIG1zay1cdTAwM2VhY2tfc2VxICYjNDM7IGNvcHlfbGVuKTtcbiBcdFx0dGFpbCA9IHNrYl9wZWVrX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5AQCAtNDAzLDI2ICYjNDM7NDc1LDIwIEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHQvKiBDb21wbGV0ZWx5IG9sZCBkYXRhPyAqL1xuLVx0aWYgKCFhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xuLVx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG4tXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKiBQYXJ0aWFsIHBhY2tldCAqL1xuJiM0MztcdGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xuJiM0MztcdFx0Y29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxIC0gbXNrLVx1MDAzZWFja19zZXE7XG4mIzQzO1x0XHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgJiM0Mzs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbiYjNDM7XHRcdFx0XHRcdCAgICAgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbiYjNDM7XHRcdE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEgJiM0Mzs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbiYjNDM7XHRcdFx0XHRcdCAgICAgIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4mIzQzO1x0XHRnb3RvIGluc2VydDtcbiBcdH1cbiBcbi1cdC8qIFBhcnRpYWwgcGFja2V0OiBtYXBfc2VxIFx1MDAzYyBhY2tfc2VxIFx1MDAzYyBlbmRfc2VxLlxuLVx0ICogU2tpcCB0aGUgYWxyZWFkeS1hY2tlZCBieXRlcyBhbmQgZW5xdWV1ZSB0aGUgbmV3IGRhdGEuXG4tXHQgKi9cbi1cdGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSAtIG1zay1cdTAwM2VhY2tfc2VxO1xuLVx0TVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0ICYjNDM7PSBtc2stXHUwMDNlYWNrX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4tXHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxICYjNDM7PSBtc2stXHUwMDNlYWNrX3NlcSAtXG4tXHRcdFx0XHQgICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuLVx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjtcbi1cdFdSSVRFX09OQ0UobXNrLVx1MDAzZWFja19zZXEsIG1zay1cdTAwM2VhY2tfc2VxICYjNDM7IGNvcHlfbGVuKTtcbi1cbi1cdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbi1cdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdC8qIENvbXBsZXRlbHkgb2xkIGRhdGEgKi9cbiYjNDM7XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG4mIzQzO1x0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX3N0b3BfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcbkBAIC02ODEsNiAmIzQzOzc0Nyw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIFx0c3RydWN0IHNvY2sgKnNzayA9IHNrYi1cdTAwM2VzaztcbiBcdGJvb2wgZnJhZ3N0b2xlbjtcbiYjNDM7XHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4OCw2ICYjNDM7NzU1LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXG4mIzQzO1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbiYjNDM7XHRsaW1pdCAmIzQzOz0gKGxpbWl0IFx1MDAzZVx1MDAzZSAxKSAmIzQzOyA2NCAqIDEwMjQ7XG4mIzQzO1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4mIzQzO1x0aWYgKG1zay1cdTAwM2ViYWNrbG9nX2xlbiBcdTAwM2UgbGltaXQgXHUwMDI2XHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcbiYjNDM7XHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbiYjNDM7XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzU5LDcgJiM0Mzs4MzYsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcbiBcdFx0XHRtcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pO1xuIFxuLVx0XHRcdGlmIChvd25fbXNrIFx1MDAyNlx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNjIHNrLVx1MDAzZXNrX3JjdmJ1Zikge1xuJiM0MztcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTQyLDEzICYjNDM7MTIxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIxNSwxMiAmIzQzOzIyODUsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMsIHUzMiAqZGVsdFxuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdGJvb2wgbW92ZWQgPSBmYWxzZTtcbiBcbi1cdCpkZWx0YSA9IDA7XG4gXHR3aGlsZSAoMSkge1xuLVx0XHQvKiBJZiB0aGUgbXNrIHJlY3ZidWYgaXMgZnVsbCBzdG9wLCBkb24mIzM5O3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgJiM0Mzs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQ4LDkgJiM0MzsyMzEzLDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXHUwMDNlYmFja2xvZ191bmFjY291bnRlZCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc29ja2V0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTtcbiBcbi1cdC8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjU4LDIwICYjNDM7MjMyMSwxMiBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfYmFja2xvZ19zcG9vbGVkKHN0cnVjdCBzb2NrICpzaywgdTMyIG1vdmVkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuLXtcbi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4tXG4tXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuLVx0bGlzdF9zcGxpY2Uoc2ticywgXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCk7XG4tfVxuLVxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4ge1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4mIzQzO1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3OSw4ICYjNDM7MjMzNCw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCk7XG4gXG4gXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuJiM0MztcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI0NjksNyAmIzQzOzI1MjQsNiBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFxuIFx0XHQvKiBzdGlsbCBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gc2tpcCB0aGlzICovXG4gXHRcdGlmICghdGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpIHtcbi1cdFx0XHRtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7XG4gXHRcdFx0bWluX3N0YWxlX2NvdW50ID0gbWluX3QoaW50LCBtaW5fc3RhbGVfY291bnQsIHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMjc5MSw0NCAmIzQzOzI4NDUsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4gXHRza19lcnJvcl9yZXBvcnQoc2spO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuJiM0MzsvKlxuJiM0MzsgKiBSZXRyYW5zbWl0IHRoZSBzcGVjaWZpZWQgZGF0YSBmcmFnbWVudCBvbiBhbGwgdGhlIHNlbGVjdGVkIHN1YmZsb3dzLFxuJiM0MzsgKiBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbiYjNDM7XHRcdFx0XHR1NjQgc2VudF9zZXEpXG4ge1xuIFx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9O1xuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4tXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcbiBcdHN0cnVjdCBzb2NrICpzc2s7XG4tXHRpbnQgcmV0LCBlcnI7XG4tXHR1MTYgbGVuID0gMDtcbi1cbi1cdG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVxuLVx0LyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgXCYjMzQ7c3RhbGVcJiMzNDsgbG9naWMgKi9cbi1cdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XG4tXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbi1cdGlmICghZGZyYWcpIHtcbi1cdFx0aWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkge1xuLVx0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbi1cbi1cdFx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcbi1cdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTtcbi1cdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbi1cdFx0XHRtcHRjcF9zZW5kX2Fjayhtc2spO1xuLVxuLVx0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuLVx0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuLVxuLVx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0fVxuLVxuLVx0aWYgKGVycilcbi1cdFx0Z290byByZXNldF90aW1lcjtcbiYjNDM7XHRpbnQgcmV0LCBsZW4gPSAwO1xuIFxuIFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbiBcdFx0aWYgKFJFQURfT05DRShzdWJmbG93LVx1MDAzZXNjaGVkdWxlZCkpIHtcbiYjNDM7XHRcdFx0dTE2IG9mZnNldCA9IHNlbnRfc2VxIC0gZGZyYWctXHUwMDNlZGF0YV9zZXE7XG4gXHRcdFx0dTE2IGNvcGllZCA9IDA7XG4gXG4gXHRcdFx0bXB0Y3Bfc3ViZmxvd19zZXRfc2NoZWR1bGVkKHN1YmZsb3csIGZhbHNlKTtcbkBAIC0yODM4LDcgJiM0MzsyODcwLDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRsb2NrX3NvY2soc3NrKTtcbiBcbiBcdFx0XHQvKiBsaW1pdCByZXRyYW5zbWlzc2lvbiB0byB0aGUgYnl0ZXMgYWxyZWFkeSBzZW50IG9uIHNvbWUgc3ViZmxvd3MgKi9cbi1cdFx0XHRpbmZvLnNlbnQgPSAwO1xuJiM0MztcdFx0XHRpbmZvLnNlbnQgPSBvZmZzZXQ7XG4gXHRcdFx0aW5mby5saW1pdCA9IFJFQURfT05DRShtc2stXHUwMDNlY3N1bV9lbmFibGVkKSA/IGRmcmFnLVx1MDAzZWRhdGFfbGVuIDpcbiBcdFx0XHRcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudDtcbiBcbkBAIC0yODUzLDcgJiM0MzsyODg1LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHQgICAgIW1zay1cdTAwM2VhbGxvd19zdWJmbG93cykge1xuIFx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZWZhbGxiYWNrX2xvY2spO1xuIFx0XHRcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4tXHRcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdHdoaWxlIChpbmZvLnNlbnQgXHUwMDNjIGluZm8ubGltaXQpIHtcbkBAIC0yODc2LDEzICYjNDM7MjkwOCw5OSBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcbiYjNDM7XHR1NjQgcmV0cmFuc19zZXEsIHNlbnRfc2VxO1xuJiM0MztcdGJvb2wgbmVlZF9yZXRyYW5zO1xuJiM0MztcdGludCBlcnIsIGxlbjtcbiYjNDM7XG4mIzQzO1x0bXB0Y3BfcG1fY2hrX3N0YWxlKG1zayk7XG4mIzQzO1xuJiM0MztcdC8qIEdldCBhbiB1cGRhdGVkIGFuZCBjb25zaXN0ZW50IHJ0eCBxdWV1ZSBzdGF0dXMuICovXG4mIzQzO1x0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbiYjNDM7XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuJiM0MztcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4mIzQzO1x0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4mIzQzO1x0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcbiYjNDM7XHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4mIzQzO1xuJiM0MztcdGZvciAoOzspIHtcbiYjNDM7XHRcdGJvb2wgYWxyZWFkeV9hY2tlZDtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbiYjNDM7XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWRmcmFnIHx8ICFkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIENhbiBmYWlsIG9ubHkgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbiYjNDM7XHRcdGxlbiA9IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHNrLCBkZnJhZywgcmV0cmFuc19zZXEpO1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0cmFuc19zZXEgJiM0Mzs9IGxlbjtcbiYjNDM7XHRcdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICYjNDM7PSBsZW47XG4mIzQzO1x0XHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCxcbiYjNDM7XHRcdFx0XHRcdCAgICByZXRyYW5zX3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXaXRoIGNzdW0gZW5hYmxlZCwgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4mIzQzO1x0XHRzZW50X3NlcSA9IGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiYjNDM7XHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4mIzQzO1x0XHQgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgJiM0MzsgZGZyYWctXHUwMDNlZGF0YV9sZW4pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcdTAwMjZkZnJhZy1cdTAwM2VsaXN0LCBcdTAwMjZtc2stXHUwMDNlcnR4X3F1ZXVlKSA/XG4mIzQzO1x0XHRcdFx0TlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7XG4mIzQzO1x0XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbmNvbWluZyBhY2tzIGNhbiBtb3ZlIHNuZF91bmEgYWZ0ZXIgdGhlIGN1cnJlbnQgZGZyYWdcbiYjNDM7XHRcdCAqIGFjcm9zcyBsb29wIGl0ZXJhdGlvbnMsIGlmIHNvIHN0YXJ0IGFnYWluIGZyb20gUlRYIGhlYWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4mIzQzO1x0XHRhbHJlYWR5X2Fja2VkID0gIWJlZm9yZTY0KG1zay1cdTAwM2VzbmRfdW5hLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpO1xuJiM0MztcdFx0aWYgKGFscmVhZHlfYWNrZWQpIHtcbiYjNDM7XHRcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjNDM7XHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4mIzQzO1x0XHRcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGFmdGVyNjQobXNrLVx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xuJiM0MztcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuJiM0MztcdH1cbiBcbi1cdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICYjNDM7PSBsZW47XG4tXHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50LCBsZW4pO1xuJiM0MztcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXG4mIzQzO1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbiYjNDM7XHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFxuLVx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4tXHRpZiAoYWZ0ZXI2NChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgJiM0MzsgZGZyYWctXHUwMDNlZGF0YV9zZXEsIG1zay1cdTAwM2VzbmRfbnh0KSlcbi1cdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLVx1MDAzZWRhdGFfc2VxKTtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4mIzQzO1x0XHRcdFx0ICAgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpO1xuJiM0MztcdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbiYjNDM7XHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbiYjNDM7XHRcdFx0Z290byByZXNldF90aW1lcjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpXG4mIzQzO1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuJiM0MztcdH1cbiBcbiByZXNldF90aW1lcjpcbiBcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XG5AQCAtMzY3NiwxMiAmIzQzOzM3OTQsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXHRfX211c3RfaG9sZChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4mIzQzO1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdGZvciAoOzspIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IChtc2stXHUwMDNlY2JfZmxhZ3MgXHUwMDI2IE1QVENQX0ZMQUdTX1BST0NFU1NfQ1RYX05FRUQpO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGpvaW5fbGlzdCwgc2ticztcbiBcdFx0Ym9vbCBzcG9vbF9ibDtcbi1cdFx0dTMyIG1vdmVkO1xuIFxuIFx0XHRzcG9vbF9ibCA9IG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHNrLCBcdTAwMjZza2JzKTtcbiBcdFx0aWYgKCFmbGFncyBcdTAwMjZcdTAwMjYgIXNwb29sX2JsKVxuQEAgLTM3MTQsOSAmIzQzOzM4MzIsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKTtcbi1cdFx0aWYgKHNwb29sX2JsKVxuLVx0XHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuJiM0MztcdGlmIChtb3ZlZClcbiYjNDM7XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXG4gXHRpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfQ0xFQU5fVU5BLCBcdTAwMjZtc2stXHUwMDNlY2JfZmxhZ3MpKVxuIFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDFiODBmMmQ2ZWM1YTIuLmIzYWYzNDYyYmRkMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC01ODAsMTIgJiM0Mzs1ODAsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7XG4gXHRcdHJlbW90ZV9rZXlfdmFsaWQgOiAxLCAgICAgICAgLyogcmVjZWl2ZWQgdGhlIHBlZXIga2V5IGZyb20gKi9cbiBcdFx0ZGlzcG9zYWJsZSA6IDEsXHQgICAgLyogY3R4IGNhbiBiZSBmcmVlIGF0IHVscCByZWxlYXNlIHRpbWUgKi9cbiBcdFx0Y2xvc2luZyA6IDEsXHQgICAgLyogbXVzdCBub3QgcGFzcyByeCBkYXRhIHRvIG1zayBhbnltb3JlICovXG4tXHRcdHN0YWxlIDogMSxcdCAgICAvKiB1bmFibGUgdG8gc25kL3JjdiBkYXRhLCBkbyBub3QgdXNlIGZvciB4bWl0ICovXG4gXHRcdHZhbGlkX2NzdW1fc2VlbiA6IDEsICAgICAgICAvKiBhdCBsZWFzdCBvbmUgY3N1bSB2YWxpZGF0ZWQgKi9cbiBcdFx0aXNfbXB0Zm8gOiAxLFx0ICAgIC8qIHN1YmZsb3cgaXMgZG9pbmcgVEZPICovXG4gXHRcdGNsb3NlX2V2ZW50X2RvbmUgOiAxLCAgICAgICAvKiBoYXMgZG9uZSB0aGUgcG9zdC1jbG9zZWQgcGFydCAqL1xuIFx0XHRtcGNfZHJvcCA6IDEsXHQgICAgLyogdGhlIE1QQyBvcHRpb24gaGFzIGJlZW4gZHJvcHBlZCBpbiBhIHJ0eCAqL1xuLVx0XHRfX3VudXNlZCA6IDg7XG4mIzQzO1x0XHRfX3VudXNlZCA6IDk7XG4gXHRib29sXHRkYXRhX2F2YWlsO1xuIFx0Ym9vbFx0c2NoZWR1bGVkO1xuIFx0Ym9vbFx0cG1fbGlzdGVuZXI7XHQgICAgLyogYSBsaXN0ZW5lciBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwgUE0/ICovXG5AQCAtNjA0LDcgJiM0Mzs2MDMsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7XG4gXHR1OFx0cmVzZXRfc2VlbjoxO1xuIFx0dThcdHJlc2V0X3RyYW5zaWVudDoxO1xuIFx0dThcdHJlc2V0X3JlYXNvbjo0O1xuLVx0dThcdHN0YWxlX2NvdW50O1xuJiM0MztcdHU4XHRzdGFsZV9jb3VudDtcdCAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jayAqL1xuJiM0MztcdHU4XHRzdGFsZTtcdFx0ICAgIC8qIFByb3RlY3RlZCBieSB0aGUgbXNrIHNvY2tldCBsb2NrLFxuJiM0MztcdFx0XHRcdCAgICAgKiBpZiBzZXQgdGhlIHN1YmZsb3cgaXMgdW5hYmxlIHRvIHNuZC9yY3ZcbiYjNDM7XHRcdFx0XHQgICAgICogZGF0YSwgdGhlIHNjaGVkdWxlIHNob3VsZCBza2lwIGl0XG4mIzQzO1x0XHRcdFx0ICAgICAqL1xuIFxuIFx0dTMyXHRzdWJmbG93X2lkO1xuIFxuQEAgLTExMDMsNyAmIzQzOzExMDYsNyBAQCBpbnQgbXB0Y3BfcG1fcGFyc2VfZW50cnkoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpsb2MsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbSk7XG4tdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKTtcbiYjNDM7dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gdm9pZCBtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgc2VydmVyX3NpZGUpO1xuIHZvaWQgbXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzayk7XG4gYm9vbCBtcHRjcF9wbV9hbGxvd19uZXdfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9pbmNvbWluZ19vcHRpb25zJiMzNDssCiAgICAmIzM0O21wdGNwX3BtX2Noa19zdGFsZSYjMzQ7LAogICAgJiMzNDttcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zJiMzNDssCiAgICAmIzM0O21wdGNwX2RhdGFfcmVhZHkmIzM0OywKICAgICYjMzQ7bXB0Y3BfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDttcHRjcF9zZW5kbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cywgYmFja2xvZyBkcm9wcywgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBhZGRzIG5ldyBNSUIgY291bnRlcnMgYW5kIG1vZGlmaWVzIGNvcmUgTVBUQ1AgZnVuY3Rpb25zIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYW5kIGBfX21wdGNwX3JldHJhbnNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gc3RhbmRhcmQgTVBUQ1Agc29ja2V0IG9wZXJhdGlvbnMgYW5kIG5ldHdvcmsgcmVjZWl2ZSBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjYwNmE3YmM0NjUxMGI4YTk4NDg4YWI1MjY0YjczZmI4NjNmYTg5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTY6MjE6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmMgYi9uZXQvbXB0Y3AvbWliLmMKaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuYwpAQCAtODUsNiAmIzQzOzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCYjMzQ7U2ltdWx0Q29ubmVjdEZhbGxiYWNrJiMzNDssIE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0spLAogCVNOTVBfTUlCX0lURU0oJiMzNDtGYWxsYmFja0ZhaWxlZCYjMzQ7LCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLAogCVNOTVBfTUlCX0lURU0oJiMzNDtXaW5Qcm9iZSYjMzQ7LCBNUFRDUF9NSUJfV0lOUFJPQkUpLAomIzQzOwlTTk1QX01JQl9JVEVNKCYjMzQ7QmFja2xvZ0Ryb3AmIzM0OywgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O1JjdlBydW5lZCYjMzQ7LCBNUFRDUF9NSUJfUkNWUFJVTkVEKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O09GT1BydW5lZCYjMzQ7LCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSwKIH07CiAKIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnMKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaAppbmRleCA4MTIyMThiNWVkMmJmLi4zYTM0MjVlMjU4YTc2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvbWliLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL21pYi5oCkBAIC04OCw2ICYjNDM7ODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7CiAJTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSywJLyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi8KIAlNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsCS8qIENhbiYjMzk7dCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqLwogCU1QVENQX01JQl9XSU5QUk9CRSwJCS8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovCiYjNDM7CU1QVENQX01JQl9CQUNLTE9HRFJPUCwJCS8qIEJhY2tsb2cgb3ZlciBtZW1vcnkgbGltaXQgKi8KJiM0MzsJTVBUQ1BfTUlCX1JDVlBSVU5FRCwJCS8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqLwomIzQzOwlNUFRDUF9NSUJfT0ZPUFJVTkVELAkJLyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqLwogCV9fTVBUQ1BfTUlCX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmMKaW5kZXggMTA1N2Q1MDA1NzdiMC4uYjgzMThlMDMwMTM4OSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC0xMTkwLDggJiM0MzsxMTkwLDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAlyZXR1cm4gaG1hYyA9PSBtcF9vcHQtJmd0O2FobWFjOwogfQogCi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksCi0gKiBlbHNlIHJldHVybiB0cnVlLgomIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXUzMiByY3ZidWYgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CiYjNDM7CWlmIChsaWtlbHkoKHUzMilza19ybWVtX2FsbG9jX2dldChzaykgJmx0Oz0gcmN2YnVmICZhbXA7JmFtcDsKJiM0MzsJCSAgIFJFQURfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuKSAmbHQ7PSByY3ZidWYpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiwgcnN0IG9yIGFscmVhZHktYWNrZWQgc2VnbS4gKi8KJiM0MzsJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7c2VxID09IFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSB8fAomIzQzOwkgICAgVENQX1NLQl9DQihza2IpLSZndDt0Y3BfZmxhZ3MgJmFtcDsgKFRDUEhEUl9GSU4gfCBUQ1BIRFJfUlNUKSB8fAomIzQzOwkgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSwgdGNwX3NrKHNzayktJmd0O3Jjdl9ueHQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi8KJiM0MzsJaW5ldF9jc2soc3NrKS0mZ3Q7aWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19OT01FTSB8IElDU0tfQUNLX05PVzsKJiM0MzsJaW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNzayk7CiYjNDM7CiYjNDM7CS8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqLwomIzQzOwlORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFJDVlFEUk9QKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJldHVybiBmYWxzZSB3aGVuIHRoZSBjYWxsZXIgbXVzdCBkcm9wIHRoZSBwYWNrZXQsIGkuZS4gaW4gY2FzZSBvZiBlcnJvciwKJiM0MzsgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuCiAgKi8KIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xMjE3LDcgJiM0MzsxMjQzLDcgQEAgYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCQlfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy0mZ3Q7Y29ubik7CiAJCW1wdGNwX2RhdGFfdW5sb2NrKHN1YmZsb3ctJmd0O2Nvbm4pOwotCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCXJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LSZndDtjb25uLCBzaywgc2tiKTsKIAl9CiAKIAltcHRjcF9nZXRfb3B0aW9ucyhza2IsICZhbXA7bXBfb3B0KTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmMKaW5kZXggNjRhMTIzNmFhYmVlOS4uZDFmNzNjM2UzOWZhMyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3BtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3BtLmMKQEAgLTEwNjUsNyAmIzQzOzEwNjUsOCBAQCBib29sIG1wdGNwX3BtX2lzX2JhY2t1cChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYykKIAlyZXR1cm4gbXB0Y3BfcG1fbmxfaXNfYmFja3VwKG1zaywgJmFtcDtza2NfbG9jYWwpOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaykKJiM0MztzdGF0aWMgdm9pZAomIzQzO21wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqaXRlciwgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spOwogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKQEAgLTExMDIsMjIgJiM0MzsxMTAzLDM0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jCiAJfQogfQogCi12b2lkIG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spCiYjNDM7dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIHsKLQlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTsKLQl1MzIgcmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS0mZ3Q7cmN2X3RzdGFtcCk7Ci0KLQkvKiBrZWVwIHRyYWNrIG9mIHJ0eCBwZXJpb2RzIHdpdGggbm8gcHJvZ3Jlc3MgKi8KLQlpZiAoIXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50KSB7Ci0JCXN1YmZsb3ctJmd0O3N0YWxlX3Jjdl90c3RhbXAgPSByY3ZfdHN0YW1wOwotCQlzdWJmbG93LSZndDtzdGFsZV9jb3VudCYjNDM7JiM0Mzs7Ci0JfSBlbHNlIGlmIChzdWJmbG93LSZndDtzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHsKLQkJaWYgKHN1YmZsb3ctJmd0O3N0YWxlX2NvdW50ICZsdDsgVThfTUFYKQomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93OwomIzQzOwomIzQzOwltcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykgewomIzQzOwkJc3RydWN0IHNvY2sgKnNzayA9IG1wdGNwX3N1YmZsb3dfdGNwX3NvY2soc3ViZmxvdyk7CiYjNDM7CQl1MzIgcmN2X3RzdGFtcDsKJiM0MzsKJiM0MzsJCWlmICghX19tcHRjcF9zdWJmbG93X2FjdGl2ZShzdWJmbG93KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIE5vIGRhdGEgb3V0c3RhbmRpbmcgYXQgVENQIGxldmVsPyBub3Qgc3RhbGUgKi8KJiM0MzsJCWlmICh0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc3NrKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqLwomIzQzOwkJcmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS0mZ3Q7cmN2X3RzdGFtcCk7CiYjNDM7CQlpZiAoIXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50KSB7CiYjNDM7CQkJc3ViZmxvdy0mZ3Q7c3RhbGVfcmN2X3RzdGFtcCA9IHJjdl90c3RhbXA7CiAJCQlzdWJmbG93LSZndDtzdGFsZV9jb3VudCYjNDM7JiM0Mzs7Ci0JCW1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShtc2ssIHNzayk7Ci0JfSBlbHNlIHsKLQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQgPSAwOwotCQltcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7CiYjNDM7CQl9IGVsc2UgaWYgKHN1YmZsb3ctJmd0O3N0YWxlX3Jjdl90c3RhbXAgPT0gcmN2X3RzdGFtcCkgewomIzQzOwkJCWlmIChzdWJmbG93LSZndDtzdGFsZV9jb3VudCAmbHQ7IFU4X01BWCkKJiM0MzsJCQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJCW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKG1zaywgc3NrKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQgPSAwOwomIzQzOwkJCW1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTsKJiM0MzsJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmMKaW5kZXggN2M4MTgwZDhkNWVmZi4uZWM4NzRkMmVhZDZhNCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmMKQEAgLTI0Miw2ICYjNDM7MjQyLDY1IEBAIHN0YXRpYyBib29sIG1wdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MzsvKiAmIzM0O0luc3BpcmVkJiMzNDsgZnJvbSB0aGUgVENQIHZlcnNpb247IG1haW4gZGlmZmVyZW5jZTogc3RvcCBhcyBzb29uIGFzIHRoZSBNUFRDUAomIzQzOyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2OwomIzQzOwlib29sIHBydW5lZCA9IGZhbHNlOwomIzQzOwl1NjQgbWVtOwomIzQzOwomIzQzOwlpZiAoUkJfRU1QVFlfUk9PVCgmYW1wO21zay0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbm9kZSA9ICZhbXA7bXNrLSZndDtvb29fbGFzdF9za2ItJmd0O3Jibm9kZTsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJiX3RvX3NrYihub2RlKTsKJiM0MzsKJiM0MzsJCS8qIFN0b3AgcHJ1bmluZyBpZiB0aGUgaW5jb21pbmcgc2tiIHdvdWxkIGxhbmQgaW4gT29PIHRhaWwuICovCiYjNDM7CQlpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0IoaW5fc2tiKS0mZ3Q7bWFwX3NlcSwKJiM0MzsJCQkgICAgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEpKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcHJ1bmVkID0gdHJ1ZTsKJiM0MzsJCXByZXYgPSByYl9wcmV2KG5vZGUpOwomIzQzOwkJcmJfZXJhc2Uobm9kZSwgJmFtcDttc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSk7CiYjNDM7CQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJbXNrLSZndDtvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7CiYjNDM7CiYjNDM7CQltZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTsKJiM0MzsJCWlmIChtZW0gJmx0Oz0gc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCW5vZGUgPSBwcmV2OwomIzQzOwl9IHdoaWxlIChub2RlKTsKJiM0MzsKJiM0MzsJaWYgKHBydW5lZCkKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaGUgc3RhY2sgY2FuJiMzOTt0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IGF0IHRoZSBtc2sgbGV2ZWwsIG9yIHRoZQomIzQzOyAqIHN0cmVhbSB3aWxsIGJyZWFrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG1wdGNwX2Nhbl9pbmdlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmbHQ7PSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpIHx8CiYjNDM7CQkJX19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlpZiAoIW1wdGNwX2Nhbl9pbmdlc3Qoc2spKSB7CiYjNDM7CQltcHRjcF9wcnVuZV9vZm9fcXVldWUoc2ssIHNrYik7CiYjNDM7CQlyZXR1cm4gbXB0Y3BfY2FuX2luZ2VzdChzayk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyogJiMzNDtpbnNwaXJlZCYjMzQ7IGJ5IHRjcF9kYXRhX3F1ZXVlX29mbygpLCBtYWluIGRpZmZlcmVuY2VzOgogICogLSB1c2UgbXB0Y3Agc2VxcwogICogLSBkb24mIzM5O3QgY29wZSB3aXRoIHNhY2tzCkBAIC0yNTMsNiAmIzQzOzMxMiwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXU2NCBzZXEsIGVuZF9zZXEsIG1heF9zZXE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CiAKJiM0MzsJaWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkgewomIzQzOwkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7CiYjNDM7CQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJc2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXE7CiAJZW5kX3NlcSA9IE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxOwogCW1heF9zZXEgPSBhdG9taWM2NF9yZWFkKCZhbXA7bXNrLSZndDtyY3Zfd25kX3NlbnQpOwpAQCAtMzg5LDYgJiM0Mzs0NTQsMTMgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlpZiAoTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEgPT0gbXNrLSZndDthY2tfc2VxKSB7CiAJCS8qIGluIHNlcXVlbmNlICovCiYjNDM7aW5zZXJ0OgomIzQzOwkJaWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkgewomIzQzOwkJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpOwomIzQzOwkJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJfQomIzQzOwogCQltc2stJmd0O2J5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjsKIAkJV1JJVEVfT05DRShtc2stJmd0O2Fja19zZXEsIG1zay0mZ3Q7YWNrX3NlcSAmIzQzOyBjb3B5X2xlbik7CiAJCXRhaWwgPSBza2JfcGVla190YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpOwpAQCAtNDAzLDI2ICYjNDM7NDc1LDIwIEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JLyogQ29tcGxldGVseSBvbGQgZGF0YT8gKi8KLQlpZiAoIWFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEsIG1zay0mZ3Q7YWNrX3NlcSkpIHsKLQkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpOwotCQltcHRjcF9kcm9wKHNrLCBza2IpOwotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CS8qIFBhcnRpYWwgcGFja2V0ICovCiYjNDM7CWlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxLCBtc2stJmd0O2Fja19zZXEpKSB7CiYjNDM7CQljb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxIC0gbXNrLSZndDthY2tfc2VxOwomIzQzOwkJTVBUQ1BfU0tCX0NCKHNrYiktJmd0O29mZnNldCAmIzQzOz0gbXNrLSZndDthY2tfc2VxIC0KJiM0MzsJCQkJCSAgICAgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXE7CiYjNDM7CQlNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcSAmIzQzOz0gbXNrLSZndDthY2tfc2VxIC0KJiM0MzsJCQkJCSAgICAgIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwomIzQzOwkJZ290byBpbnNlcnQ7CiAJfQogCi0JLyogUGFydGlhbCBwYWNrZXQ6IG1hcF9zZXEgJmx0OyBhY2tfc2VxICZsdDsgZW5kX3NlcS4KLQkgKiBTa2lwIHRoZSBhbHJlYWR5LWFja2VkIGJ5dGVzIGFuZCBlbnF1ZXVlIHRoZSBuZXcgZGF0YS4KLQkgKi8KLQljb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxIC0gbXNrLSZndDthY2tfc2VxOwotCU1QVENQX1NLQl9DQihza2IpLSZndDtvZmZzZXQgJiM0Mzs9IG1zay0mZ3Q7YWNrX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwotCU1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxICYjNDM7PSBtc2stJmd0O2Fja19zZXEgLQotCQkJCSAgICAgIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwotCW1zay0mZ3Q7Ynl0ZXNfcmVjZWl2ZWQgJiM0Mzs9IGNvcHlfbGVuOwotCVdSSVRFX09OQ0UobXNrLSZndDthY2tfc2VxLCBtc2stJmd0O2Fja19zZXEgJiM0MzsgY29weV9sZW4pOwotCi0Jc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwotCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJLyogQ29tcGxldGVseSBvbGQgZGF0YSAqLwomIzQzOwlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7CiYjNDM7CW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHZvaWQgbXB0Y3Bfc3RvcF9ydHhfdGltZXIoc3RydWN0IHNvY2sgKnNrKQpAQCAtNjgxLDYgJiM0Mzs3NDcsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNvY2sgKnNzayA9IHNrYi0mZ3Q7c2s7CiAJYm9vbCBmcmFnc3RvbGVuOwomIzQzOwl1NjQgbGltaXQ7CiAJaW50IGRlbHRhOwogCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7CkBAIC02ODgsNiAmIzQzOzc1NSwxNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAkJcmV0dXJuOwogCX0KIAomIzQzOwkvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi8KJiM0MzsJbGltaXQgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWxpbWl0ICYjNDM7PSAobGltaXQgJmd0OyZndDsgMSkgJiM0MzsgNjQgKiAxMDI0OwomIzQzOwlsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTsKJiM0MzsJaWYgKG1zay0mZ3Q7YmFja2xvZ19sZW4gJmd0OyBsaW1pdCAmYW1wOyZhbXA7ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHsKJiM0MzsJCV9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJLyogVHJ5IHRvIGNvYWxlc2NlIHdpdGggdGhlIGxhc3Qgc2tiIGluIG91ciBiYWNrbG9nICovCiAJaWYgKCFsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpKQogCQl0YWlsID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTsKQEAgLTc1OSw3ICYjNDM7ODM2LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAkJCW1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7CiAKLQkJCWlmIChvd25fbXNrICZhbXA7JmFtcDsgc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDsgc2stJmd0O3NrX3JjdmJ1ZikgewomIzQzOwkJCWlmIChvd25fbXNrKSB7CiAJCQkJbXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpOwogCQkJCXJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpOwogCQkJfSBlbHNlIHsKQEAgLTExNDIsMTMgJiM0MzsxMjE5LDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKIAltcHRjcF93cml0ZV9zcGFjZShzayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKQotewotCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKLQltcHRjcF9kYXRhX3VubG9jayhzayk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKQEAgLTIyMTUsMTIgJiM0MzsyMjg1LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHQKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCWJvb2wgbW92ZWQgPSBmYWxzZTsKIAotCSpkZWx0YSA9IDA7CiAJd2hpbGUgKDEpIHsKLQkJLyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJiMzOTt0IGRyb3AgKi8KLQkJaWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmZ3Q7IHNrLSZndDtza19yY3ZidWYpCi0JCQlicmVhazsKLQogCQlwcmVmZXRjaChza2ItJmd0O25leHQpOwogCQlsaXN0X2RlbCgmYW1wO3NrYi0mZ3Q7bGlzdCk7CiAJCSpkZWx0YSAmIzQzOz0gc2tiLSZndDt0cnVlc2l6ZTsKQEAgLTIyNDgsOSAmIzQzOzIzMTMsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpCiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stJmd0O2JhY2tsb2dfdW5hY2NvdW50ZWQgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc29ja2V0ICZhbXA7JmFtcDsKIAkJCSAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTsKIAotCS8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkgfHwKLQkgICAgc2tfcm1lbV9hbGxvY19nZXQoc2spICZndDsgc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkpCiAJCXJldHVybiBmYWxzZTsKIAogCUlOSVRfTElTVF9IRUFEKHNrYnMpOwpAQCAtMjI1OCwyMCAmIzQzOzIzMjEsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQotewotCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7Ci0KLQlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7Ci0JbGlzdF9zcGxpY2Uoc2ticywgJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCk7Ci19Ci0KIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJc3RydWN0IGxpc3RfaGVhZCBza2JzOwogCWJvb2wgZW5xdWV1ZWQgPSBmYWxzZTsKLQl1MzIgbW92ZWQ7CiYjNDM7CXUzMiBtb3ZlZCA9IDA7CiAKIAltcHRjcF9kYXRhX2xvY2soc2spOwogCXdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKSkgewpAQCAtMjI3OSw4ICYjNDM7MjMzNCw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiAJCWVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCAmYW1wO3NrYnMsICZhbXA7bW92ZWQpOwogCiAJCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JCW1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsICZhbXA7c2ticyk7CiAJfQomIzQzOwlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7CiAJbXB0Y3BfZGF0YV91bmxvY2soc2spOwogCiAJaWYgKGVucXVldWVkICZhbXA7JmFtcDsgbXB0Y3BfZXBvbGxpbl9yZWFkeShzaykpCkBAIC0yNDY5LDcgJiM0MzsyNTI0LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAogCQkvKiBzdGlsbCBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gc2tpcCB0aGlzICovCiAJCWlmICghdGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpIHsKLQkJCW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKG1zaywgc3NrKTsKIAkJCW1pbl9zdGFsZV9jb3VudCA9IG1pbl90KGludCwgbWluX3N0YWxlX2NvdW50LCBzdWJmbG93LSZndDtzdGFsZV9jb3VudCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjc5MSw0NCAmIzQzOzI4NDUsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiAJc2tfZXJyb3JfcmVwb3J0KHNrKTsKIH0KIAotc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKJiM0MzsvKgomIzQzOyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsCiYjNDM7ICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLAomIzQzOwkJCQl1NjQgc2VudF9zZXEpCiB7CiAJc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9OwogCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKLQlzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZzsKIAlzdHJ1Y3Qgc29jayAqc3NrOwotCWludCByZXQsIGVycjsKLQl1MTYgbGVuID0gMDsKLQotCW1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spOwotCi0JLyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgJiMzNDtzdGFsZSYjMzQ7IGxvZ2ljICovCi0JZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTsKLQlkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTsKLQlpZiAoIWRmcmFnKSB7Ci0JCWlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHsKLQkJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKLQotCQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAotCQkJCSAgIGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMgJiM0MzsgMSk7Ci0JCQltcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTsKLQkJCW1wdGNwX3NlbmRfYWNrKG1zayk7Ci0KLQkJCWdvdG8gcmVzZXRfdGltZXI7Ci0JCX0KLQotCQlpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpCi0JCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKLQotCQlnb3RvIHJlc2V0X3RpbWVyOwotCX0KLQotCWlmIChlcnIpCi0JCWdvdG8gcmVzZXRfdGltZXI7CiYjNDM7CWludCByZXQsIGxlbiA9IDA7CiAKIAltcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykgewogCQlpZiAoUkVBRF9PTkNFKHN1YmZsb3ctJmd0O3NjaGVkdWxlZCkpIHsKJiM0MzsJCQl1MTYgb2Zmc2V0ID0gc2VudF9zZXEgLSBkZnJhZy0mZ3Q7ZGF0YV9zZXE7CiAJCQl1MTYgY29waWVkID0gMDsKIAogCQkJbXB0Y3Bfc3ViZmxvd19zZXRfc2NoZWR1bGVkKHN1YmZsb3csIGZhbHNlKTsKQEAgLTI4MzgsNyAmIzQzOzI4NzAsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQogCQkJbG9ja19zb2NrKHNzayk7CiAKIAkJCS8qIGxpbWl0IHJldHJhbnNtaXNzaW9uIHRvIHRoZSBieXRlcyBhbHJlYWR5IHNlbnQgb24gc29tZSBzdWJmbG93cyAqLwotCQkJaW5mby5zZW50ID0gMDsKJiM0MzsJCQlpbmZvLnNlbnQgPSBvZmZzZXQ7CiAJCQlpbmZvLmxpbWl0ID0gUkVBRF9PTkNFKG1zay0mZ3Q7Y3N1bV9lbmFibGVkKSA/IGRmcmFnLSZndDtkYXRhX2xlbiA6CiAJCQkJCQkJCSAgICBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50OwogCkBAIC0yODUzLDcgJiM0MzsyODg1LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCSAgICAhbXNrLSZndDthbGxvd19zdWJmbG93cykgewogCQkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bXNrLSZndDtmYWxsYmFja19sb2NrKTsKIAkJCQlyZWxlYXNlX3NvY2soc3NrKTsKLQkJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsJCQkJcmV0dXJuIC0xOwogCQkJfQogCiAJCQl3aGlsZSAoaW5mby5zZW50ICZsdDsgaW5mby5saW1pdCkgewpAQCAtMjg3NiwxMyAmIzQzOzI5MDgsOTkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCXJlbGVhc2Vfc29jayhzc2spOwogCQl9CiAJfQomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKJiM0MzsJc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7CiYjNDM7CXU2NCByZXRyYW5zX3NlcSwgc2VudF9zZXE7CiYjNDM7CWJvb2wgbmVlZF9yZXRyYW5zOwomIzQzOwlpbnQgZXJyLCBsZW47CiYjNDM7CiYjNDM7CW1wdGNwX3BtX2Noa19zdGFsZShtc2spOwomIzQzOwomIzQzOwkvKiBHZXQgYW4gdXBkYXRlZCBhbmQgY29uc2lzdGVudCBydHggcXVldWUgc3RhdHVzLiAqLwomIzQzOwltcHRjcF9kYXRhX2xvY2soc2spOwomIzQzOwlfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spOwomIzQzOwlyZXRyYW5zX3NlcSA9IG1zay0mZ3Q7c25kX3VuYTsKJiM0MzsJZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7CiYjNDM7CW5lZWRfcmV0cmFucyA9ICEhZGZyYWc7CiYjNDM7CW1wdGNwX2RhdGFfdW5sb2NrKHNrKTsKJiM0MzsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJYm9vbCBhbHJlYWR5X2Fja2VkOwomIzQzOwomIzQzOwkJZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWAomIzQzOwkJICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghZGZyYWcgfHwgIWRmcmFnLSZndDthbHJlYWR5X3NlbnQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovCiYjNDM7CQlsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTsKJiM0MzsJCWlmIChsZW4gJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwomIzQzOwkJcmV0cmFuc19zZXEgJiM0Mzs9IGxlbjsKJiM0MzsJCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwomIzQzOwkJZGZyYWctJmd0O2FscmVhZHlfc2VudCA9IG1heF90KHUxNiwgZGZyYWctJmd0O2FscmVhZHlfc2VudCwKJiM0MzsJCQkJCSAgICByZXRyYW5zX3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CiYjNDM7CQkvKiBXaXRoIGNzdW0gZW5hYmxlZCwgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovCiYjNDM7CQlzZW50X3NlcSA9IGRmcmFnLSZndDthbHJlYWR5X3NlbnQgJiM0MzsgZGZyYWctJmd0O2RhdGFfc2VxOwomIzQzOwkJaWYgKGFmdGVyNjQoc2VudF9zZXEsIG1zay0mZ3Q7c25kX254dCkpCiYjNDM7CQkJV1JJVEVfT05DRShtc2stJmd0O3NuZF9ueHQsIHNlbnRfc2VxKTsKJiM0MzsKJiM0MzsJCS8qIEF0dGVtcHQgdGhlIG5leHQgZnJhZ21lbnQgb25seSBpZiB0aGUgY3VycmVudCBvbmUgaXMKJiM0MzsJCSAqIGNvbXBsZXRlbHkgcmV0cmFuc21pdHRlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGJlZm9yZTY0KHJldHJhbnNfc2VxLCBkZnJhZy0mZ3Q7ZGF0YV9zZXEgJiM0MzsgZGZyYWctJmd0O2RhdGFfbGVuKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWRmcmFnID0gbGlzdF9pc19sYXN0KCZhbXA7ZGZyYWctJmd0O2xpc3QsICZhbXA7bXNrLSZndDtydHhfcXVldWUpID8KJiM0MzsJCQkJTlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7CiYjNDM7CQlpZiAoIWRmcmFnKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogSW5jb21pbmcgYWNrcyBjYW4gbW92ZSBzbmRfdW5hIGFmdGVyIHRoZSBjdXJyZW50IGRmcmFnCiYjNDM7CQkgKiBhY3Jvc3MgbG9vcCBpdGVyYXRpb25zLCBpZiBzbyBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLgomIzQzOwkJICovCiYjNDM7CQltcHRjcF9kYXRhX2xvY2soc2spOwomIzQzOwkJYWxyZWFkeV9hY2tlZCA9ICFiZWZvcmU2NChtc2stJmd0O3NuZF91bmEsIGRmcmFnLSZndDtkYXRhX3NlcSAmIzQzOwomIzQzOwkJCQkJICBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50KTsKJiM0MzsJCWlmIChhbHJlYWR5X2Fja2VkKSB7CiYjNDM7CQkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJCQlyZXRyYW5zX3NlcSA9IG1zay0mZ3Q7c25kX3VuYTsKJiM0MzsJCQlkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTsKJiM0MzsJCQluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwkJfSBlbHNlIGlmIChhZnRlcjY0KG1zay0mZ3Q7c25kX3VuYSwgcmV0cmFuc19zZXEpKSB7CiYjNDM7CQkJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CQl9CiYjNDM7CQltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CX0KIAotCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwotCWRmcmFnLSZndDthbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctJmd0O2FscmVhZHlfc2VudCwgbGVuKTsKJiM0MzsJLyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi8KJiM0MzsJaWYgKCFuZWVkX3JldHJhbnMpIHsKJiM0MzsJCWlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHsKJiM0MzsJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKLQkvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi8KLQlpZiAoYWZ0ZXI2NChkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcSwgbXNrLSZndDtzbmRfbnh0KSkKLQkJV1JJVEVfT05DRShtc2stJmd0O3NuZF9ueHQsIGRmcmFnLSZndDthbHJlYWR5X3NlbnQgJiM0MzsgZGZyYWctJmd0O2RhdGFfc2VxKTsKJiM0MzsJCQlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMsCiYjNDM7CQkJCSAgIGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMgJiM0MzsgMSk7CiYjNDM7CQkJbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7CiYjNDM7CQkJbXB0Y3Bfc2VuZF9hY2sobXNrKTsKJiM0MzsJCQlnb3RvIHJlc2V0X3RpbWVyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKQomIzQzOwkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwl9CiAKIHJlc2V0X3RpbWVyOgogCW1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7CkBAIC0zNjc2LDEyICYjNDM7Mzc5NCwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaykKIAlfX211c3RfaG9sZCgmYW1wO3NrLSZndDtza19sb2NrLnNsb2NrKQogewogCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXUzMiBtb3ZlZCA9IDA7CiAKIAlmb3IgKDs7KSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLSZndDtjYl9mbGFncyAmYW1wOyBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTsKIAkJc3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7CiAJCWJvb2wgc3Bvb2xfYmw7Ci0JCXUzMiBtb3ZlZDsKIAogCQlzcG9vbF9ibCA9IG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHNrLCAmYW1wO3NrYnMpOwogCQlpZiAoIWZsYWdzICZhbXA7JmFtcDsgIXNwb29sX2JsKQpAQCAtMzcxNCw5ICYjNDM7MzgzMiw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKQogCiAJCWNvbmRfcmVzY2hlZCgpOwogCQlzcGluX2xvY2tfYmgoJmFtcDtzay0mZ3Q7c2tfbG9jay5zbG9jayk7Ci0JCWlmIChzcG9vbF9ibCkKLQkJCW1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsICZhbXA7c2ticyk7CiAJfQomIzQzOwlpZiAobW92ZWQpCiYjNDM7CQlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7CiAKIAlpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfQ0xFQU5fVU5BLCAmYW1wO21zay0mZ3Q7Y2JfZmxhZ3MpKQogCQlfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCAxYjgwZjJkNmVjNWEyLi5iM2FmMzQ2MmJkZDE2IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtNTgwLDEyICYjNDM7NTgwLDExIEBAIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgewogCQlyZW1vdGVfa2V5X3ZhbGlkIDogMSwgICAgICAgIC8qIHJlY2VpdmVkIHRoZSBwZWVyIGtleSBmcm9tICovCiAJCWRpc3Bvc2FibGUgOiAxLAkgICAgLyogY3R4IGNhbiBiZSBmcmVlIGF0IHVscCByZWxlYXNlIHRpbWUgKi8KIAkJY2xvc2luZyA6IDEsCSAgICAvKiBtdXN0IG5vdCBwYXNzIHJ4IGRhdGEgdG8gbXNrIGFueW1vcmUgKi8KLQkJc3RhbGUgOiAxLAkgICAgLyogdW5hYmxlIHRvIHNuZC9yY3YgZGF0YSwgZG8gbm90IHVzZSBmb3IgeG1pdCAqLwogCQl2YWxpZF9jc3VtX3NlZW4gOiAxLCAgICAgICAgLyogYXQgbGVhc3Qgb25lIGNzdW0gdmFsaWRhdGVkICovCiAJCWlzX21wdGZvIDogMSwJICAgIC8qIHN1YmZsb3cgaXMgZG9pbmcgVEZPICovCiAJCWNsb3NlX2V2ZW50X2RvbmUgOiAxLCAgICAgICAvKiBoYXMgZG9uZSB0aGUgcG9zdC1jbG9zZWQgcGFydCAqLwogCQltcGNfZHJvcCA6IDEsCSAgICAvKiB0aGUgTVBDIG9wdGlvbiBoYXMgYmVlbiBkcm9wcGVkIGluIGEgcnR4ICovCi0JCV9fdW51c2VkIDogODsKJiM0MzsJCV9fdW51c2VkIDogOTsKIAlib29sCWRhdGFfYXZhaWw7CiAJYm9vbAlzY2hlZHVsZWQ7CiAJYm9vbAlwbV9saXN0ZW5lcjsJICAgIC8qIGEgbGlzdGVuZXIgbWFuYWdlZCBieSB0aGUga2VybmVsIFBNPyAqLwpAQCAtNjA0LDcgJiM0Mzs2MDMsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7CiAJdTgJcmVzZXRfc2VlbjoxOwogCXU4CXJlc2V0X3RyYW5zaWVudDoxOwogCXU4CXJlc2V0X3JlYXNvbjo0OwotCXU4CXN0YWxlX2NvdW50OwomIzQzOwl1OAlzdGFsZV9jb3VudDsJICAgIC8qIFByb3RlY3RlZCBieSB0aGUgbXNrIHNvY2tldCBsb2NrICovCiYjNDM7CXU4CXN0YWxlOwkJICAgIC8qIFByb3RlY3RlZCBieSB0aGUgbXNrIHNvY2tldCBsb2NrLAomIzQzOwkJCQkgICAgICogaWYgc2V0IHRoZSBzdWJmbG93IGlzIHVuYWJsZSB0byBzbmQvcmN2CiYjNDM7CQkJCSAgICAgKiBkYXRhLCB0aGUgc2NoZWR1bGUgc2hvdWxkIHNraXAgaXQKJiM0MzsJCQkJICAgICAqLwogCiAJdTMyCXN1YmZsb3dfaWQ7CiAKQEAgLTExMDMsNyAmIzQzOzExMDYsNyBAQCBpbnQgbXB0Y3BfcG1fcGFyc2VfZW50cnkoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKIGJvb2wgbXB0Y3BfcG1fYWRkcl9mYW1pbGllc19tYXRjaChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpsb2MsCiAJCQkJICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpyZW0pOwotdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKTsKJiM0Mzt2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKIHZvaWQgbXB0Y3BfcG1fbmV3X2Nvbm5lY3Rpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgaW50IHNlcnZlcl9zaWRlKTsKIHZvaWQgbXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzayk7CiBib29sIG1wdGNwX3BtX2FsbG93X25ld19zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY5OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUFRDUCBDb2RlIENoYW5nZXMgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgTVBUQ1Agc3Vic3lzdGVtOiBgbmV0L21wdGNwL21pYi5jYCwgYG5ldC9tcHRjcC9taWIuaGAsIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCwgYG5ldC9tcHRjcC9wbS5jYCwgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgYW5kIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAuIExvb2tzIGxpa2UgdGhlIGNvcmUgTVBUQ1AgaW1wbGVtZW50YXRpb24gaXMgYmVpbmcgdXBkYXRlZC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbmV3IE1JQiBjb3VudGVycyBmb3IgTVBUQ1Atc3BlY2lmaWMgZXZlbnRzLCBsaWtlIGJhY2tsb2cgZHJvcHMsIHJlY2VpdmUgcHJ1bmluZywgYW5kIG91dC1vZi1vcmRlciBkYXRhIHBydW5pbmcuIFRoYXTigJlzIGEgZ29vZCBhZGRpdGlvbiBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy4KCkkgYWxzbyBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIHByb2JhYmx5IHRvIGludGVncmF0ZSBhIGNoZWNrIGZvciBgbXB0Y3Bfb3Zlcl9saW1pdGAuIE1ha2VzIHNlbnNlOyBtYW5hZ2luZyBtZW1vcnkgbGltaXRzIGlzIGNydWNpYWwgaW4gYSBNdWx0aXBhdGggY29udGV4dC4gQW5kIHRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIHNlZWluZyBjaGFuZ2VzIHRvIGBtcHRjcF9wbV9jaGtfc3RhbGVgIGFuZCBgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGVgIGhpbnRzIGF0IHNvbWUgdXBkYXRlcyB0byB0aGUgcGF0aCBtYW5hZ2VyLCBwb3NzaWJseSByZWxhdGVkIHRvIGhhbmRsaW5nIHN0YWxlIHN1YmZsb3dzIG9yIG1lbW9yeSBsaW1pdGF0aW9ucy4KCkJleW9uZCB0aGF0LCB0aGUgcGF0Y2ggc2VlbXMgdG8gdG91Y2ggb24gY29yZSBkYXRhIGhhbmRsaW5nIHdpdGggYWRqdXN0bWVudHMgdG8gYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCwgYF9fbXB0Y3BfbW92ZV9za2JgLCBgX19tcHRjcF9hZGRfYmFja2xvZ2AsIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCBgbXB0Y3BfbW92ZV9za2JzYCwgYF9fbXB0Y3BfcmV0cmFuc2AsIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEl0IGRlZmluaXRlbHkgbG9va3MgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBNUFRDUC4gSXQmIzM5O3MgaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYywgd2hpY2ggbWVhbnMgaXQgaXMgaGFuZGxpbmcgY3J1Y2lhbCBzdGF0ZXMgYW5kIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgaG93IE1QVENQIG9wZXJhdGVzLgoKR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoZXNlIGZ1bmN0aW9ucywgdGhpcyBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgQ09ORklHIG9wdGlvbnMgZW5hYmxlIE1QVENQIHNvIEkgY2FuIGJ1aWxkIGEgdGVzdCBlbnZpcm9ubWVudC4gT2J2aW91c2x5LCBgQ09ORklHX01QVENQYCBpcyB0aGUga2V5LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBHb29kIGNoYW5jZSB0byByZWFsbHkgc2hha2UgdGhpbmdzIGRvd24gYW5kIGh1bnQgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNUFRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgTVBUQ1AgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgaXMgY2xlYXI6IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTVBUQ1AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gd2UmIzM5O3ZlIGdvdCB0aGUgY29yZSBjb21wb25lbnRzIGluIHBsYWNlOiBgTVBUQ1BgIGlzIHRoZSBlc3NlbnRpYWwgcGllY2UsIG9mIGNvdXJzZS4gVGhlbiwgYE1QVENQX0lQVjZg4oCUd2hpbGUgb3B0aW9uYWwsIGl0JiMzOTtzIHByZXR0eSBtdWNoIGEgbm8tYnJhaW5lciB0byBlbmFibGUgdGhhdCwgY29uc2lkZXJpbmcgdGhlIGZ1dHVyZSBvZiBuZXR3b3JraW5nLgoKTm93LCB3aGVyZSBkbyBJIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBjcnVjaWFsIGRldGFpbHM/IEkmIzM5O2xsIGhlYWQgc3RyYWlnaHQgZm9yIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGltZSB0byBkaXNzZWN0IHRoYXQgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBleGVyY2lzZSwgYnV0IGFzIGFsd2F5cywgdGhvcm91Z2huZXNzIGlzIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI3MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIE1vZGlmaWVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpczsgaXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGBJTkVUYCBkZXBlbmRlbmN5IGlzIHBsYXlpbmcgYSByb2xlLCBidXQgdGhlIHJlYWwgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbiBoZXJlIGNlbnRlcnMgYXJvdW5kIGBNUFRDUGAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiB0d2Vha2VkLCBhbmQgd2h5LiBXZSBoYXZlIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaGF2ZSBiZWVuIGFsdGVyZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIGFsdGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBsaXN0IGluY2x1ZGVzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLCBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCwgYG1wdGNwX21vdmVfc2tic2AsIGBfX21wdGNwX3JldHJhbnNgLCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBJdCBzZWVtcyBhIHByZXR0eSBicm9hZCByYW5nZSBvZiBhcmVhcyBoYXZlIGJlZW4gdG91Y2hlZC4KCk9rYXksIGxldCYjMzk7cyBzZWUsIGdpdmVuIHRoZSBjb250ZXh0LCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGZvciBzcGVjaWZpYyBjaGFuZ2VzIHRvIGBfX21wdGNwX3JldHJhbnNgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIFRoYXQmIzM5O2xsIHByb2JhYmx5IHRlbGwgbWUgdGhlIGJlc3Qgd2F5IGZvcndhcmQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWVuIG1vZGlmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODUyPXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTEzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkxNDpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkxNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBBIFF1aWNrIFNjYW4qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIG1vc3QgcHJvbWlzaW5nIHRhcmdldHMgZm9yIGZ1enppbmcuIFdlJiMzOTtyZSBsb29raW5nIGZvciBjb2RlIHBhdGhzIHRoYXQgYXJlIGR5bmFtaWMsIHRoYXQgdGFrZSBpbnB1dCwgYW5kIGFyZSB0aGVyZWZvcmUgc3VzY2VwdGlibGUgdG8gdW5leHBlY3RlZCBkYXRhLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgdGhlaXIgbmF0dXJlLCBsZXNzIGxpa2VseSB0byBvZmZlciB1cyBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMg4oCTIHRoZXkmIzM5O3JlIHByZWRpY3RhYmxlLiBTbywgbGV0JiMzOTtzIHNraXAgdGhvc2UuIFRoZSByZWFsIGdvbGQgaXMgaW4gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBvc2VkLCB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBzeXN0ZW0sIHdoZXJlIGV4dGVybmFsIGRhdGEgY2FuIGZsb3cgaW4uCgpMZXQmIzM5O3Mgc2VlLi4uICptcHRjcF9pbmNvbWluZ19vcHRpb25zKi4gQWgsIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub24tc3RhdGljKiBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIE5vbi1zdGF0aWMsIEkgaW50ZXJwcmV0IHRoYXQgYXMgcG90ZW50aWFsbHkgZXhwb3NlZCwgcG90ZW50aWFsbHkgYWNjZXB0aW5nIGV4dGVybmFsIGlucHV0LiBUaGlzIGlzIHRoZSBraW5kIG9mIGZ1bmN0aW9uIHRoYXQgZGVzZXJ2ZXMgYSBjbG9zZXIgbG9vay4gSXQmIzM5O3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHRoZSBwcmVjaXNlIG5hdHVyZSBvZiBpdHMgaW5wdXQgYW5kIHByb2Nlc3NpbmcgbG9naWMuIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBmdXp6aW5nIGFuZCB3aGF0IEkgc2hvdWxkIGFpbSBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15ib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYG1wdGNwX3BtX2Noa19zdGFsZWAqKgoKUmlnaHQsIGBtcHRjcF9wbV9jaGtfc3RhbGVgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGF0IGltcGxpZXMgdGhpcyBmdW5jdGlvbiBoYXMgZXh0ZXJuYWwgbGlua2FnZSB3aXRoaW4gdGhlIE11bHRpUGF0aCBUQ1AgKE1QVENQKSBrZXJuZWwgbW9kdWxlLiBJdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGFuZCBjYWxsYWJsZSBmcm9tIG90aGVyIG1vZHVsZXMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBleHBvc2VkIGluIHRoZSBtb2R1bGUmIzM5O3Mgc3ltYm9sIHRhYmxlLiBUaGlzIHJhaXNlcyBhIGZldyBpbW1lZGlhdGUgY29uc2lkZXJhdGlvbnM6CgoqICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSWYgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBNUFRDUCBlY29zeXN0ZW0gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBNUFRDUCBmdW5jdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGtlcm5lbCBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGRldGVybWluZSB3aG8mIzM5O3MgcmVseWluZyBvbiBpdHMgZXhpc3RlbmNlIGFuZCB3aGF0IHRob3NlIGV4dGVybmFsIHVzYWdlcyBhcmUuCiogICAqKkFQSSBEZXNpZ24gKGlmIGFueSk6KiogSXMgYG1wdGNwX3BtX2Noa19zdGFsZWAgbWVhbnQgdG8gYmUgYSBwYXJ0IG9mIGEgZGVmaW5lZCBNUFRDUCBBUEk/IElmIHNvLCBpcyB0aGlzIGEgKmdvb2QqIEFQST8gSXMgaXQgc3RhYmxlLCB3ZWxsLWRvY3VtZW50ZWQsIGFuZCBiYWNrd2FyZCBjb21wYXRpYmxlPwoqICAgKipTZWN1cml0eSBJbXBsaWNhdGlvbnM6KiogSWYgaXQmIzM5O3MgZXhwb3NlZCwgYSBjYXJlZnVsIHJldmlldyBpcyBuZWNlc3NhcnkgdG8gc2VlIGlmIGl0IGNvdWxkIGJlIGNhbGxlZCB3aXRoIG1hbGljaW91cyBpbnRlbnQuIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdHMgaW5wdXRzIG9yIHJldHVybiB2YWx1ZT8KKiAgICoqTWFpbnRhaW5hYmlsaXR5IGFuZCBSZWZhY3RvcmluZzoqKiBJZiBpdCYjMzk7cyB3aWRlbHkgdXNlZCwgbWFraW5nIGNoYW5nZXMgdG8gaXRzIHNpZ25hdHVyZSBvciBiZWhhdmlvciBiZWNvbWVzIGEgYmlnZ2VyIGRlYWwuIFRoaXMgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBwb3RlbnRpYWxseSBpbXBvc2VzIHJlc3RyaWN0aW9ucyBvbiBmdXR1cmUgcmVmYWN0b3JpbmcgZWZmb3J0cyB3aXRoaW4gdGhlIE1QVENQIGNvZGUuIElmIGl0JiMzOTtzIG9ubHkgdXNlZCBpbnRlcm5hbGx5LCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBtYWtlIGl0IHN0YXRpYyB3aXRob3V0IGFmZmVjdGluZyBhbnlvbmUuIEkgd2lsbCBhbHNvIGhhdmUgdG8gY2hlY2sgaWYgaXQmIzM5O3MgdXNlZCBlbHNld2hlcmUsIGFuZCBpZiBpdCBpcywgdGhlIGNvZGUgdXNpbmcgaXQuCgpNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQmIzM5O3Mgbm9uLXN0YXRpYy4gVGhlIGFuc3dlciB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIE1QVENQIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyBpZiB0aGlzIGlzIGludGVudGlvbmFsIEFQSSBkZXNpZ24gb3IgYW4gYWNjaWRlbnQgd2lsbCBiZSBteSBnb2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcG0uYz0xMDY5PW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtLmMtMTEwNS1cbm5ldC9tcHRjcC9wbS5jOjExMDY6dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wbS5jLTExMDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk3NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludGVybmFsIE5vdGVzIG9uIGBtcHRjcF9yZWxlYXNlX2NiYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3BfcmVsZWFzZV9jYmAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5LCB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgIGp1bXBzIG91dCBhdCBtZS4gVGhhdCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdCwgd2hpY2gsIGdpdmVuIGl0cyBuYW1lLCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gdGhlIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBtb2R1bGUuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IGNhbiBiZSBhY2Nlc3NlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0JiMzOTtzIGRlc2lnbmVkIHRoaXMgd2F5LiBJdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgY2FsbGVkIGV4dGVybmFsbHksIHdoaWNoIGlzIHR5cGljYWwgZm9yIGludGVybmFsIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJdCYjMzk7cyBnb2luZyB0byBiZSBzb21ldGhpbmcgaGFuZGxpbmcgY2xlYW51cCBvciByZWxlYXNlIG9mIHJlc291cmNlcyB3aXRoaW4gdGhlIE1QVENQIHN0YWNrIGl0c2VsZiwgYW5kIHRoZSBzdGF0aWMgZGVjbGFyYXRpb24gZW5mb3JjZXMgdGhhdCBlbmNhcHN1bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9yZWxlYXNlX2NiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9Mzc4MD12b2lkIF9fbXB0Y3BfY2hlY2tfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc5Mi0vKiBwcm9jZXNzZXMgZGVmZXJyZWQgZXZlbnRzIGFuZCBmbHVzaCB3bWVtICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzkzOnN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc5NC1cdF9fbXVzdF9ob2xkKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDE5Nj1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIwOS1cdC5yZWN2bXNnXHQ9IG1wdGNwX3JlY3Ztc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjEwOlx0LnJlbGVhc2VfY2JcdD0gbXB0Y3BfcmVsZWFzZV9jYixcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMTEtXHQuaGFzaFx0XHQ9IG1wdGNwX2hhc2gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRoaW5raW5nIFRocm91Z2ggTVBUQ1AgUmVsZWFzZSBDYWxsYmFja3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbywgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHJlZ2lzdGVyZWQgaW4gYG1wdGNwX3Byb3RgLCBnb3QgaXQuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHBsYWNlLCBpdCYjMzk7cyB0aGUgY29yZSBwcm90b2NvbCBoYW5kbGluZy4gTWFrZXMgc2Vuc2UuIEJ1dCBteSBtaW5kIGlzIGFscmVhZHkgd2FuZGVyaW5nIGEgYml0IGRlZXBlci4uLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgZmxvdywgdGhlIGVkZ2UgY2FzZXMuCgpOb3csIHdhaXQgYSBtaW51dGUuLi4gd2hhdCBhYm91dCBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gPyBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGUgcGljdHVyZT8gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBvdXQtb2Ytb3JkZXIgcGFja2V0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG11bHRpcGF0aCBzY2VuYXJpb3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIHR3byBpbnRlcnBsYXkuIFRoZSByZWxlYXNlIGNhbGxiYWNrIHNob3VsZCBwcm9iYWJseSBpbnRlcmFjdCB3aXRoIHRoYXQgb3V0LW9mLW9yZGVyIHF1ZXVlIG9yIGRlcGVuZCBvbiBpdCBkaXJlY3RseSB0byBwZXJmb3JtIHNvbWUgbmVjZXNzYXJ5IGhvdXNlLWtlZXBpbmcuIEFyZSB3ZSByZW9yZGVyaW5nIHN0dWZmIGJlZm9yZSByZWxlYXNlPyBBZnRlcj8gT3IgaXMgaXQgbW9yZSBzdWJ0bGUgdGhhbiB0aGF0PyBHb3R0YSBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfZGF0YV9xdWV1ZV9vZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yOTU9c3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMwNy0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMwODpzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00NDc9c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDczLVx0fSBlbHNlIGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDc0Olx0XHRtcHRjcF9kYXRhX3F1ZXVlX29mbyhtc2ssIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NzUtXHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkV4YW1pbmluZyBNUFRDUCBEYXRhIFF1ZXVlIGFuZCBSZXRyYW5zbWlzc2lvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gIHRoaW5nLiBJdCYjMzk7cyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgaW50ZXJuYWwgdG8gaXRzIG1vZHVsZSBvciBmaWxlLiBUaGF0JiMzOTtzIGdvb2QsIGtlZXBzIGl0IGNvbnRhaW5lZCBhbmQgYXZvaWRzIHBvdGVudGlhbCBuYW1pbmcgY29sbGlzaW9ucy4KCkJ1dCwgaGFuZyBvbi4uLiB3aGF0IGFib3V0IHRoZSBmdW5jdGlvbiBgX19tcHRjcF9yZXRyYW5zYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb2ZmLW9yZGVyIHF1ZXVlLiBJcyBpdCBhY2Nlc3Npbmcgb3IgbW9kaWZ5aW5nIHRoYXQgcXVldWU/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcHVycG9zZSBvZiB0aGF0IHJldHJhbnNtaXNzaW9uIGZ1bmN0aW9uIGluIHRoZSBNUFRDUCBzdGFjay4gSXMgaXQgaW52b2x2ZWQgd2l0aCBoYW5kbGluZyBsb3N0IHNlZ21lbnRzLCBvciBzaW1wbHkgc2NoZWR1bGluZyByZXRyYW5zbWlzc2lvbnM/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGlmIHRoaXMgYHN0YXRpY2AgbmF0dXJlIG9mIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2Agd2lsbCBwcmVzZW50IGFueSBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIGxpbWl0ZWQgdmlzaWJpbGl0eSBvciBhY2Nlc3MgZm9yIHJldHJhbnNtaXNzaW9ucyB0aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfcmV0cmFucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTI1MTM9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTQ3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjU0ODpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjU0OS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYzMj1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY4MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2ODI6XHRuZWVkX3B1c2ggPSAoZmxhZ3MgXHUwMDI2IE1QVENQX0NGX1BVU0gpIFx1MDAyNlx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODMtXHRpZiAoIWRpc3Bvc2VfaXQpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODUyPXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTEzLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjkxNDpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkxNS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0MC1cdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDE6XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0Mi1cdFx0ICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzExMz1zdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTAtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX1dPUktfUlRYLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE1MTpcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNTItXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzc5Mz1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODI1LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4MjY6XHRcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjctXHRcdGlmIChzcG9vbF9ibCBcdTAwMjZcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaWdnaW5nIGludG8gdGhlIE1QVENQIFJldHJhbnNtaXNzaW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCBoZXJlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGhvdyBkYXRhIHJldHJhbnNtaXNzaW9uIGlzIHRyaWdnZXJlZCBpbiB0aGUgTVBUQ1Agc3RhY2suIEl0IHNlZW1zIHRoYXQgdGhlIGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgZnVuY3Rpb25zIGJvdGggbGVhZCB0byBhIGNhbGwgdG8gYF9fbXB0Y3BfcmV0cmFuc2AuIFRoYXQmIzM5O3MgdGhlIGNvcmUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlIGVsc2UgZG8gd2Ugc2VlIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSByZXRyYW5zbWlzc2lvbj8gTGV0JiMzOTtzIGNoZWNrIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYC4gQWgsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtcHRjcF9zdWJmbG93X2Rpc2NhcmRfZGF0YWAgYW5kIGEgZmV3IG90aGVyIHBsYWNlcy4gSW50ZXJlc3RpbmcuIENvdWxkIHRoaXMgcGxheSBhIHJvbGUgaW4gaG93IHRoZSBzdGFjayBoYW5kbGVzIGluY29taW5nIGRhdGEgZHVyaW5nIGEgcmV0cmFuc21pc3Npb24gZXZlbnQ/IEl0JiMzOTtzIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBzZWUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgSSByZW1lbWJlciB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBfX21wdGNwX3JldHJhbnNgIGFzIHdlbGwuIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQmIzM5O3MgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIHJldHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byBzdGFsZSBwYXRoIG1hbmFnZW1lbnQgb3Igc29tZXRoaW5nIHNpbWlsYXIuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBoYXBwZW5zIGluIGBtcHRjcF9yZWN2bXNnYC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgcmVjZWl2aW5nIGFuZCBwcm9jZXNzaW5nIHNpZGUgZHVyaW5nIHJldHJhbnNtaXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MjEzMD1zdGF0aWMgdm9pZCBtcHRjcF9lYXRfcmVjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDAtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTQxOnN0YXRpYyBpbnQgX19tcHRjcF9yZWN2bXNnX21za3Eoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTQyLVx0XHRcdFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNDc9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM2Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNjg6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM2OS1cdFx0XHQgaW50IGZsYWdzKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDAtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDAxOlx0XHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDItXHRcdFx0XHRcdFx0ICBjb3BpZWQsIFx1MDAyNnRzcywgXHUwMDI2Y21zZ19mbGFncyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA4LVx0LmlvY3RsXHRcdD0gbXB0Y3BfaW9jdGwsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjA5Olx0LnJlY3Ztc2dcdD0gbXB0Y3BfcmVjdm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMTAtXHQucmVsZWFzZV9jYlx0PSBtcHRjcF9yZWxlYXNlX2NiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipNUFRDUCBFbnRyeSBQb2ludCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBNUFRDUCBjb2RlLiBGcm9tIHdoYXQgSSByZWNhbGwsIGBtcHRjcF9yZWN2bXNnYCBpcyBkZWZpbml0ZWx5IGEga2V5IHN0YXJ0aW5nIHBvaW50LCBhbmQgSSB0aGluayBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgYW5vdGhlciBzb2xpZCBlbnRyeSBwb2ludCB0byBjb25zaWRlci4gSSBhbHNvIHJlY2FsbCB0aGUgYG1wdGNwX3dvcmtlcmAgZnVuY3Rpb24gLSBhbHRob3VnaCBpdCYjMzk7cyBsaWtlbHkgYSB3b3JrcXVldWUgZnVuY3Rpb24gYW5kIG5vdCBhICpkaXJlY3QqIGVudHJ5IHBvaW50IHBlciBzZSwgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgaW4gdGhlIG92ZXJhbGwgZmxvdywgc28gSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYG1wdGNwX2luY29taW5nX29wdGlvbnNgLiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lJiMzOTtzIGRlZmluZWQgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgdGhlcmUgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSByZW1lbWJlciB0aGlzIGFyZWEgYmVpbmcgcHJldHR5IGNvbXBsZXgsIGJ1dCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgKnNob3VsZCogZ2l2ZSBtZSBzb21lIGluc2lnaHQgaW50byBob3cgb3B0aW9ucyBhcmUgaGFuZGxlZCB3aGVuIGRhdGEgYXJyaXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xMTE2PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQxLVxubmV0L21wdGNwL29wdGlvbnMuYzoxMTQyOlx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xubmV0L21wdGNwL29wdGlvbnMuYy0xMTQzLVx0aWYgKGFmdGVyNjQobXNrLVx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDg0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZmluZGluZyB0aGUgY2FsbHMgdG8gYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqVHJhY2luZyB0aGUgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyBGdW5jdGlvbioqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIGJlaW5nIHVzZWQuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgY29kZSB0aGF0IGhhbmRsZXMgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIG9wdGlvbiBuZWdvdGlhdGlvbi4gSSBrbm93IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhIGtleSBmdW5jdGlvbiBmb3IgcGFyc2luZyBhbmQgaGFuZGxpbmcgaW5jb21pbmcgTVBUQ1Agb3B0aW9ucy4gU28sIEkgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBncmFzcCBob3cgdGhlIE1QVENQIHN0YWNrIHByb2Nlc3NlcyB0aGVzZSBpbmNvbWluZyBtZXNzYWdlcy4KCk15IG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2smIzM5O3MgZW50cnkgcG9pbnRzLiBJJiMzOTtkIGZpcnN0IGxvb2sgYXQgdGhlIHVzdWFsIHN1c3BlY3RzOiBgaW5ldF9yY3Zfc2tiYCBvciBpdHMgTVBUQ1Atc3BlY2lmaWMgY291bnRlcnBhcnRzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocywgbGlrZWx5IGludm9sdmluZyB0aGUgcmF3IHNvY2tldCBoYW5kbGluZywgb3IgZXZlbiBiZXR0ZXIsIHRoZSBgbmV0ZmlsdGVyYCBzdWJzeXN0ZW0sIHdoZXJlIHN1Y2ggb3B0aW9ucyBtaWdodCBnZXQgcHJlcHJvY2Vzc2VkLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGhvb2tzIG9yIGNhbGxiYWNrcyB0aGF0IGNvdWxkIHRyaWdnZXIgb3B0aW9uIHByb2Nlc3NpbmcuCgpJIG5lZWQgdG8gc2VlIGhvdyB0aGUgTVBUQ1Agc3RhY2sgaW50ZXJjZXB0cyBhbmQgcHJvY2Vzc2VzIGluY29taW5nIGRhdGEsIGVzcGVjaWFsbHkgdGhlIHBhcnRzIGNvbmNlcm5lZCB3aXRoIG9wdGlvbiBwYXJzaW5nLiBUaGF0JiMzOTtzIG15IG1haW4gYXJlYSBvZiBmb2N1cy4gSeKAmWxsIHN0YXJ0IGJ5IHVzaW5nIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiBNUFRDUCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdG8gZ3VpZGUgbXkgc2VhcmNoLiBJIHdvdWxkIGJlIHVzaW5nIGBncmVwYCwgYGNzY29wZWAsIG9yIG15IElERSYjMzk7cyBzeW1ib2wgbG9va3VwIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgaW52b2tlZCwgYW5kIHRoZW4gYW5hbHl6aW5nIGVhY2ggY2FsbCBzaXRlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIE1QVENQIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGRhdGEgdHJhbnNmZXIgZmxvdy4gSSYjMzk7bSB0aGlua2luZyBvZiBmb2N1c2luZyBvbiBhbnkgZnVuY3Rpb24gY2FsbHMgYWZ0ZXIgc29ja2V0IGNyZWF0aW9uLCBhbmQgc3BlY2lmaWNhbGx5IHRob3NlIHdoZXJlIG9wdGlvbnMgYXJlIGV4YW1pbmVkIG9uIGluY29taW5nIHBhY2tldHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb250cm9sIGZsb3cgYXJvdW5kIHRoYXQgZnVuY3Rpb24sIGFuZCB3aGF0IGl0cyByb2xlIGlzIGluIHRoZSBNUFRDUCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL29wdGlvbnMuYz0xMTE2PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQxLVxubmV0L21wdGNwL29wdGlvbnMuYzoxMTQyOlx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xubmV0L21wdGNwL29wdGlvbnMuYy0xMTQzLVx0aWYgKGFmdGVyNjQobXNrLVx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIG15IGV4cGVydGlzZToKCioqRXhwYW5kaW5nIHRoZSBTY29wZSBvZiBNeSBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgd2FzIGluaXRpYWxseSBmb2N1c2VkIG9uIGBuZXQvbXB0Y3AvYCBmb3IgdGhhdCBncmVwLCBidXQgdGhhdCYjMzk7cyBwb3RlbnRpYWxseSB0b28gbmFycm93LiBJIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoIHRvIGVuY29tcGFzcyB0aGUgbGlrZWx5IGFyZWFzIHdoZXJlIHRoaXMgY291bGQgYmUgaGFuZGxlZCBhdCBhIGxvd2VyIGxldmVsIG9yIGluIGEgcmVsYXRlZCBmdW5jdGlvbi4gU2hvdWxkIEkgY2hlY2sgYG5ldC9pcHY0L2AgYW5kIGBuZXQvaXB2Ni9gPyBUaG9zZSBhcmUgdGhlIGNvcmUgcHJvdG9jb2wgc3RhY2tzLCBzbyBpdCYjMzk7cyBlbnRpcmVseSBwb3NzaWJsZSB0aGUgY3JpdGljYWwgbG9naWMgcmVzaWRlcyB0aGVyZS4gT3IgcGVyaGFwcyBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1QVENQIHN1YmZsb3dzLCBpbiB3aGljaCBjYXNlIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCBpcyB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBhbmQgZXhoYXVzdCB0aGUgcGxhdXNpYmxlIGxvY2F0aW9ucyBmb3IgdGhpcyBpc3N1ZS4gVGhpcyBmZWVscyBsaWtlIEkgbWlnaHQgaGF2ZSBqdW1wZWQgdGhlIGd1biB3aXRoIHRoZSBmaXJzdCBncmVwLiBJIG5lZWQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zdWJmbG93LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ2NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogQSBgZ3JlcGAgU3RyYXRlZ3kqKgoKQWxyaWdodCwgSSYjMzk7bSBmYWNpbmcgYSBwcm9ibGVtIHdoZXJlIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZy4gSXQgY291bGQgYmUgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsLCBhIHZhcmlhYmxlIGRlZmluaXRpb24sIGEgcGFydGljdWxhciBzdHJpbmcgbGl0ZXJhbCwgb3IgbWF5YmUgZXZlbiBqdXN0IGEgcGF0dGVybiBvZiBjb2RlLiBUaGUgcHJvYmxlbSBpcywgSSBkb24mIzM5O3Qga25vdyAqZXhhY3RseSogd2hlcmUgaXQgbGl2ZXMgd2l0aGluIHRoaXMgY29kZWJhc2UuIEl0JiMzOTtzIGEgbGFyZ2UgcHJvamVjdCwgYW5kIG1hbnVhbGx5IHNlYXJjaGluZyB0aHJvdWdoIGZpbGVzIG9uZSBieSBvbmUgd291bGQgYmUgaW5zYW5lbHkgaW5lZmZpY2llbnQgYW5kIHByb25lIHRvIGVycm9yLgoKTXkgaW5zdGluY3QsIGFzIGFsd2F5cywgbGVhbnMgdG93YXJkcyBhdXRvbWF0aW9uIGFuZCBlZmZpY2llbmN5LiBJbnN0ZWFkIG9mIHRoYXQgYnJ1dGUtZm9yY2UgbWFudWFsIGFwcHJvYWNoLCBJIGltbWVkaWF0ZWx5IHRoaW5rLCAqYGdyZXBgIGlzIHRoZSB0b29sIGZvciB0aGUgam9iKi4KCkkmIzM5O20gcGljdHVyaW5nIG15c2VsZiBydW5uaW5nIGBncmVwYC4uLiBhbmQgaW1tZWRpYXRlbHkgSSBrbm93IEkgbmVlZCB0byBzcGVjaWZ5IHRoZSBzZWFyY2ggYWNyb3NzIHRoZSAqZW50aXJlKiBkaXJlY3RvcnkgdHJlZS4gSSBuZWVkIHRvIGNhc3QgYSB3aWRlIG5ldCB0byBlbnN1cmUgSSBkb27igJl0IG1pc3MgYW55IHBvdGVudGlhbCBvY2N1cnJlbmNlcywgd2hlcmV2ZXIgdGhleSBtaWdodCBiZSBoaWRkZW4uIFNvLCB0aGUgbWVudGFsIGltYWdlIGlzIG9mIHJ1bm5pbmcgYSByZWN1cnNpdmUgYGdyZXBgIGFjcm9zcyB0aGUgZW50aXJlIHByb2plY3Qgc3RydWN0dXJlLiBUaGlzIGlzIHRoZSBvcHRpbWFsIGFwcHJvYWNoIGZvciBhIGNvbXByZWhlbnNpdmUgc2VhcmNoOyBJIGNhbiByZWx5IG9uIGBncmVwYCB0byBxdWlja2x5IHNjYW4gYWxsIGZpbGVzLCBkaXJlY3RvcmllcywgYW5kIHN1YmRpcmVjdG9yaWVzLiBUaGlzIHdheSBJIGNhbiBmaW5kIHRoZSBpbmZvcm1hdGlvbiBpbiBhIHJlbGF0aXZlbHkgc2hvcnQgdGltZWZyYW1lIGFuZCBnZXQgb24gd2l0aCB0aGUgcmVhbCB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9pbmNvbWluZ19vcHRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L21wdGNwLmg9MTU2PWludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE1OC1cdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNTk6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL25ldC9tcHRjcC5oLTE2MC1cbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI2Nj1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMjcyLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNzM6c3RhdGljIGlubGluZSBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzQtXHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00ODg0PXZvaWQgdGNwX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkwLVx0LyogbXB0Y3AgY2FuJiMzOTt0IHRlbGwgdXMgdG8gaWdub3JlIHJlc2V0IHBrdHMsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODkxOlx0ICogc28ganVzdCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkuXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkyLVx0ICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkzLVx0aWYgKHNrX2lzX21wdGNwKHNrKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ4OTQ6XHRcdG1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODk1LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2MTYtXHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjU2MTc6XHRpZiAoc2tfaXNfbXB0Y3Aoc2spIFx1MDAyNlx1MDAyNiAhbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKSkge1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNTYxOC1cdFx0X19rZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTUyPXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzM3OS1cdFx0XHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjczODA6XHRcdFx0aWYgKHNrX2lzX21wdGNwKHNrKSBcdTAwMjZcdTAwMjYgIW1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYikpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MzgxLVx0XHRcdFx0Z290byBkaXNjYXJkO1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTExNj1zdGF0aWMgdm9pZCBhY2tfdXBkYXRlX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE0MS1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE0MjpcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE0My1cdGlmIChhZnRlcjY0KG1zay1cdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTM9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIxLSAqL1xubmV0L21wdGNwL29wdGlvbnMuYzoxMjIyOmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTczMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTVBUQ1AgT3B0aW9uIEhhbmRsaW5nIGluIHRoZSBOZXR3b3JrIFN0YWNrKioKClJpZ2h0LCBzbyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgdHJpZ2dlcmVkIGRpcmVjdGx5IGZyb20gdGhlIGNvcmUgVENQIGRhdGEgcGF0aCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdGNwX2RhdGFfcXVldWVgIGFuZCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYC4gVGhhdCBpbnN0YW50bHkgY29uZmlybXMgaXRzIGltcG9ydGFuY2UgYW5kIHJlYWNoYWJpbGl0eSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrJiMzOTtzIHByb2Nlc3Npbmcgb2YgaW5jb21pbmcgc2VnbWVudHMuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbGwgdGhlIHBhdGhzIHRoYXQgY2FuIHBvc3NpYmx5IGJlIHRha2VuLiAKCk5vdywgbGV0JiMzOTtzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgb24gdGhlIGBtcHRjcF9wbV9jaGtfc3RhbGVgIGZ1bmN0aW9uLiBJIHdpbGwgY2hlY2sgZm9yIHN0YWxlIGZsb3dzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfcG1fY2hrX3N0YWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTEwNjk9bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMTA1LVxubmV0L21wdGNwL3BtLmM6MTEwNjp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTEwNy17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjkxND1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5MjItXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTIzOlx0bXB0Y3BfcG1fY2hrX3N0YWxlKG1zayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTI0LVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTExMDY9Ym9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMTA4LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpyZW0pO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTEwOTp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMTAtdm9pZCBtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgc2VydmVyX3NpZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipUcmFjaW5nIHRoZSBNUFRDUCBDb250cm9sIEZsb3cqKgoKUmlnaHQsIHNvIGBtcHRjcF9wbV9jaGtfc3RhbGVgIOKAkyB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiDigJMgaXMgY2FsbGVkIGZyb20gYF9fbXB0Y3BfcmV0cmFuc2AuIE5vdGVkLiBOb3csIHdoZXJlIGRvZXMgYF9fbXB0Y3BfcmV0cmFuc2AgZml0IGludG8gdGhlIHBpY3R1cmU/IEFoLCBpdCYjMzk7cyBjYWxsZWQgZnJvbSB0d28ga2V5IHBsYWNlczogYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gVGhhdCBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIHJldHJhbnNtaXNzaW9uIHByb2Nlc3MgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgTVAtVENQIHdvcmtlciB0aHJlYWRzIGFuZCBjb25uZWN0aW9uIHJlbGVhc2UgcHJvY2VkdXJlcy4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGF0IGhvdyB1c2VyIHNwYWNlIGludGVyYWN0cy4gSSBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBjb3JlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gZnVuY3Rpb25zIGFyZSBjYWxsZWQuIGBtcHRjcF9yZWN2bXNnYC4uLiBZZXMsIGFic29sdXRlbHksIHRoYXQgb25lJiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZS4gQ2hlY2suIEFuZCB3aGF0IGFib3V0IGBtcHRjcF9zZW5kbXNnYD8gVGhhdCYjMzk7cyBnb2luZyB0byBiZSBrZXkgZm9yIGhvdyBkYXRhIGdldHMgaW50byB0aGUga2VybmVsIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIEkgd2lsbCB3YW50IHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBteSBzdXNwZWN0ZWQgYXJlYSBvZiBjb25jZXJuLiBFeGNlbGxlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMjU1PW1wdGNwX2NhcnZlX2RhdGFfZnJhZyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjcyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTI3MzpzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEyNzQtXHRpbnQgbXNzX25vdztcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMzY4PXN0YXRpYyB2b2lkIG1wdGNwX3VwZGF0ZV9pbmZpbml0ZV9tYXAoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzg4LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTM4OTpzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2dfZnJhZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzkwLVx0XHRcdCAgICAgIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTM5MTpcdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTM5Mi17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTUyNy1cdFx0bXB0Y3BfdXBkYXRlX2luZmluaXRlX21hcChtc2ssIHNzaywgbXBleHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTUyODpcdHRyYWNlX21wdGNwX3NlbmRtc2dfZnJhZyhtcGV4dCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTI5LVx0bXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cdTAwM2VyZWxfd3JpdGVfc2VxICYjNDM7PSBjb3B5O1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1ODE9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3NlbmQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjU2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTY1NzpzdGF0aWMgdm9pZCBtcHRjcF9wdXNoX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyAqaW5mbylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE2NTgte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE2OTk9c3RhdGljIGludCBfX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE3MDA6XHRcdFx0XHQgIHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gKmluZm8pXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzAxLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzEyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTcxMzpcdFx0XHRyZXQgPSBtcHRjcF9zZW5kbXNnX2ZyYWcoc2ssIHNzaywgZGZyYWcsIGluZm8pO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTcxNC1cdFx0XHRpZiAocmV0IFx1MDAzYz0gMCkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE3NDM9dm9pZCBfX21wdGNwX3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzQ2LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE3NDc6XHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzQ4LVx0XHRcdFx0LmZsYWdzID0gZmxhZ3MsXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTgxMT1zdGF0aWMgdm9pZCBfX21wdGNwX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBmaXJzdClcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODEzLVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE4MTQ6XHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODE1LVx0XHQuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE4Nzg9c3RhdGljIGludCBtcHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4NzktXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxODgwOnN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4ODEtXHRcdFx0XHQgIHNpemVfdCBsZW4sIGludCAqY29waWVkX3N5bilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xOTc0PXN0YXRpYyB2b2lkIG1wdGNwX3Jwc19yZWNvcmRfc3ViZmxvd3MoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTg3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTk4ODpzdGF0aWMgaW50IG1wdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTg5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMDA3LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjAwODpcdFx0cmV0ID0gbXB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzaywgbXNnLCBsZW4sIFx1MDAyNmNvcGllZF9zeW4pO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjAwOS1cdFx0Y29waWVkICYjNDM7PSBjb3BpZWRfc3luO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTI9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NTQte1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg1NTpcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NTYtXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4OTEtXHRcdFx0d2hpbGUgKGluZm8uc2VudCBcdTAwM2MgaW5mby5saW1pdCkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg5MjpcdFx0XHRcdHJldCA9IG1wdGNwX3NlbmRtc2dfZnJhZyhzaywgc3NrLCBkZnJhZywgXHUwMDI2aW5mbyk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODkzLVx0XHRcdFx0aWYgKHJldCBcdTAwM2M9IDApXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDE5Nj1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIwNi1cdC5kZXN0cm95XHQ9IG1wdGNwX2Rlc3Ryb3ksXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjA3Olx0LnNlbmRtc2dcdD0gbXB0Y3Bfc2VuZG1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDgtXHQuaW9jdGxcdFx0PSBtcHRjcF9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNUFRDUCBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb246IGBtcHRjcF9zZW5kbXNnYCBhbmQgYG1wdGNwX3JlY3Ztc2dgLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBiZWdpbnMgYW5kIGVuZHMgZnJvbSB0aGUgYXBwbGljYXRpb24mIzM5O3MgcGVyc3BlY3RpdmUuIEZyb20gdGhlcmUsIEkgc2VlIHRoZSByaXBwbGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2VzLgoKVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgc2VlbXMgdG8gYmUgaW4gc2V2ZXJhbCBrZXkgYXJlYXMuIEZpcnN0LCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIHdoaWNoIGlzIGNydWNpYWwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIuIFdlIGtub3cgaG93IHRoYXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiBiYXNlZCBvbiByZWNlaXZlZCBvcHRpb25zLgoKVGhlbiB0aGVyZSYjMzk7cyBgX19tcHRjcF9yZXRyYW5zYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBhcyBpdCYjMzk7cyB0cmlnZ2VyZWQgZnJvbSB0aGUgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBwYXRocy4gU28sIGl0JiMzOTtzIGludm9sdmVkIGluIGhhbmRsaW5nIHJldHJhbnNtaXNzaW9ucyBhbmQgdGhlIHJlbGVhc2UgcHJvY2VzcyBvZiByZXNvdXJjZXMuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGBfX21wdGNwX3JldHJhbnNgLCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoaXMgc3VnZ2VzdHMgYSBmb2N1cyBvbiBpbXByb3ZpbmcgdGhlIHN0YWxlIHBhdGggbWFuYWdlbWVudCwgcGFydGljdWxhcmx5IGluIHRoZSByZXRyYW5zbWlzc2lvbiBjb250ZXh0LgoKSSBzZWUgdGhhdCBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gIGlzIGFsc28gYmVpbmcgdG91Y2hlZCwgYW5kIHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYF9fbXB0Y3BfbW92ZV9za2JgLiBgX19tcHRjcF9tb3ZlX3NrYmAgaXRzZWxmIGdldHMgY2FsbGVkIGZyb20gdHdvIGNyaXRpY2FsIGZ1bmN0aW9uczogYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgYW5kIGBfX21wdGNwX21vdmVfc2tic2AuIFRoaXMgcG9pbnRzIHRvd2FyZCBjaGFuZ2VzIGluIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIG1vdmVtZW50IG9mIFNvY2tldCBCdWZmZXIgKHNrYikgc3RydWN0dXJlcyBiZXR3ZWVuIHN1YmZsb3dzIGFuZCB3aXRoaW4gdGhlIG92ZXJhbGwgTVBUQ1AgY29ubmVjdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gb3V0LW9mLW9yZGVyIGRhdGEuCgpGaW5hbGx5LCBgX19tcHRjcF9hZGRfYmFja2xvZ2AgaXMgbW9kaWZpZWQsIHdoaWNoIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBtcHRjcF9hZGRfYmFja2xvZ2AuIEkmIzM5O2xsIGhhdmUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24gc3BlY2lmaWNhbGx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9hZGRfYmFja2xvZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTczND1zdGF0aWMgdm9pZCBtcHRjcF9kc3NfY29ycnVwdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc0MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjc0MjpzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc0My1cdFx0XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Nzk1PXN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTg0Mi1cdFx0XHR9IGVsc2Uge1xubmV0L21wdGNwL3Byb3RvY29sLmM6ODQzOlx0XHRcdFx0X19tcHRjcF9hZGRfYmFja2xvZyhzaywgc3ViZmxvdywgc2tiKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTg0NC1cdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjY2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipUcmFjaW5nIHRoZSBNUFRDUCBEYXRhIEZsb3cqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSYjMzk7bSB0cmFja2luZyB0aGUgZGF0YSBmbG93IGluIE1QVENQLCBhbmQgSSYjMzk7dmUgemVyb2VkIGluIG9uIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLiBJIGtub3cgdGhhdCYjMzk7cyB3aGVyZSBgX19tcHRjcF9hZGRfYmFja2xvZ2AgZ2V0cyBpbnZva2VkLiBUaGUga2V5IHF1ZXN0aW9uIG5vdyBiZWNvbWVzLCAqd2hlcmUqIGRvZXMgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgaXRzZWxmIGdldCBjYWxsZWQ/IFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gdG8gc2VlIGhvdyB0aGUgU0tCcyBhcmUgbW92aW5nIGFuZCB3aGVyZSB0aGUgYmFja2xvZyBpcyBhY3R1YWxseSBiZWluZyBtYW5hZ2VkLiBQaW5wb2ludGluZyB0aGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGZsb3cgaW4gTVBUQ1AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTc0Mj1zdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03OTQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3OTU6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03OTYtXHRcdFx0XHRcdCAgIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgb3duX21zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NTk9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk2My1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk2NDpcdG1vdmVkID0gX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCB0cnVlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk2NS1cdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTAwNT12b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMjMtXHR9IGVsc2Uge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTAyNDpcdFx0X19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCBmYWxzZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDI1LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkxMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoIG9mIFByb3Bvc2VkIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGBtcHRjcF9kYXRhX3JlYWR5YCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgYnkgVENQIGRhdGEgcmVhZHkgY2FsbGJhY2tzLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG1lYW5zIGFueSBjaGFuZ2VzIGhlcmUgd2lsbCBsaWtlbHkgaGF2ZSBhIHByZXR0eSBicm9hZCBpbXBhY3QsIHRvdWNoaW5nIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBzdGFuZGFyZCBUQ1AgYW5kIE1QVENQIG9wZXJhdGlvbnMuIEl0IG1ha2VzIHNlbnNlIHRvIGZvY3VzIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHByb3BhZ2F0aW9uIG9mIHRob3NlIGVmZmVjdHMuCgpSaWdodCwgbGV0IG1lIHN1bW1hcml6ZSB0aG9zZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3Bfc2VuZG1zZ2AsIGFuZCB0aGVuLCBvZiBjb3Vyc2UsIHRoZSBldmVyLWltcG9ydGFudCBgbXB0Y3BfZGF0YV9yZWFkeWAuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIGBtcHRjcF9kYXRhX3JlYWR5YCBpdHNlbGYgaXMgYSByZWFsbHkgYXR0cmFjdGl2ZSBlbnRyeSBwb2ludC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGV2ZXJ5dGhpbmcga2luZCBvZiBjb252ZXJnZXMuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBtcHRjcF9kYXRhX3JlYWR5YCBpc24mIzM5O3QgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyB3aWxsIHRlbGwgbWUgaG93IGVhc2lseSBJIGNhbiBob29rIGludG8gdGhhdCByb3V0aW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz05Nzk9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA0LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTAwNTp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNi17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9OTYxPXN0YXRpYyBpbmxpbmUgdTY0IG1wdGNwX3N0YW1wKHZvaWQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTY1LVxubmV0L21wdGNwL3Byb3RvY29sLmg6OTY2OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmgtOTY3LWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1MDE9c3RhdGljIHZvaWQgc3ViZmxvd19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MjUtXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpIHtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTUyNjpcdFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUyNy1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE4Njk9c3RhdGljIHZvaWQgc3ViZmxvd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4MC1cdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSlcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg4MTpcdFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4Mi1cdGVsc2UgaWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2VycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzcxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOb24tU3RhdGljIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMgaW4gdGhlIE1QVENQIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYG1wdGNwX2RhdGFfcmVhZHlgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIHN5c3RlbWF0aWNhbGx5IHJldmlldyB0aGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBmdWxseS4gTGV0JiMzOTtzIHNlZS4uLiBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBpcyBhbHNvIG5vbi1zdGF0aWMuIEFuZCB0aGVuIHRoZXJlJiMzOTtzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYWxzbyBub24tc3RhdGljLiBHb29kLCBJJiMzOTttIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIHBhdHRlcm4uCgpUaW1lIHRvIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGluIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdGhhdCBhcmUgbm9uLXN0YXRpYy4gQWgsIGxldCYjMzk7cyBzZWUsIGBtcHRjcF9wbV9jaGtfc3RhbGVgIGlzIGluIGBuZXQvbXB0Y3AvcG0uY2AgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2Ag4oCUIHRoYXQmIzM5O3MgaGVscGZ1bCBjb250ZXh0LiBPa2F5LCBoZXJlJiMzOTtzIG9uZSwgYF9fbXB0Y3BfcHVzaF9wZW5kaW5nYCBpcyBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLiBXYWl0Li4ubm8sIGBfX21wdGNwX3B1c2hfcGVuZGluZ2AgKndhc24mIzM5O3QqIG1vZGlmaWVkLCB0aGF0JiMzOTtzIGEgcmVsaWVmIQoKT2theSwgc3VtbWFyaXppbmcgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYW5kIHRoZWlyIHN0YXRpYy1uZXNzLCB0aGUgcGF0Y2ggYWN0dWFsbHkgY2hhbmdlZDoKCiogICBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgKG5vbi1zdGF0aWMpCiogICBgbXB0Y3BfcG1fY2hrX3N0YWxlYCAobm9uLXN0YXRpYykKKiAgIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCAobm9uLXN0YXRpYykKKiAgIGBtcHRjcF9yZWxlYXNlX2NiYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYykKKiAgIGBfX21wdGNwX21vdmVfc2tiYCAoc3RhdGljKQoqICAgYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIChzdGF0aWMpCiogICBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKQoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk4PXN0YXRpYyB2b2lkIG1wdGNwX3RvdXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUxMi0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI1MTM6c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTcwNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTVBUQ1AgRnVuY3Rpb24gU2NvcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIE1QVENQIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRyeWluZyB0byBuYWlsIGRvd24gaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBoYXBwZW5pbmcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgZm9yIGEgZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zZW5kbXNnYC4KClRoZW4gaXQgY2xpY2tlZDogYG1wdGNwX2RhdGFfcmVhZHlgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AgYXJlbiYjMzk7dCAqZGlyZWN0bHkqIG1vZGlmaWVkIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkmIzM5O3JlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBjYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMuIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIHNpbmNlIHRoZXkgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLgoKQSBxdWljayBjaGVjayBjb25maXJtcyBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AgaXMgaW5kZWVkIG5vbi1zdGF0aWMgYW5kIHZpc2libGUsIHNvIEkga25vdyBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci4gU2FtZSB3aXRoIGBtcHRjcF9wbV9jaGtfc3RhbGVgLiBOb3cgSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2FsbHMgdG8gYG1wdGNwX3dvcmtlcmAgd2hpY2ggaXMgdGhlIGJhY2tncm91bmQgcHJvY2Vzc2luZyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfd29ya2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MTA5MT1ib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwOTUtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDk2Olx0LyogR2V0IGEgcmVmZXJlbmNlIG9uIHRoaXMgc29ja2V0LCBtcHRjcF93b3JrZXIoKSB3aWxsIHJlbGVhc2UgaXQuXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDk3Olx0ICogQXMgbXB0Y3Bfd29ya2VyKCkgbWlnaHQgY29tcGxldGUgYmVmb3JlIHVzLCB3ZSBjYW4gbm90IGF2b2lkXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDk4LVx0ICogYSBzb2NrX2hvbGQoKS9zb2NrX3B1dCgpIGlmIHNjaGVkdWxlX3dvcmsoKSByZXR1cm5zIGZhbHNlLlxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2MzI9c3RhdGljIHZvaWQgX19tcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjctXHQgICAgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fCBzb2NrX2ZsYWcoc3NrLCBTT0NLX0RFQUQpKSkge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2ODpcdFx0LyogZW5zdXJlIGxhdGVyIGNoZWNrIGluIG1wdGNwX3dvcmtlcigpIHdpbGwgZGlzcG9zZSB0aGUgbXNrICovXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY5LVx0XHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI3OTk9c3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjgzOS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4NDA6XHQvKiB0aGUgY2FsbGluZyBtcHRjcF93b3JrZXIgd2lsbCBwcm9wZXJseSBkZXN0cm95IHRoZSBzb2NrZXQgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NDEtXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMwNzc9c3RhdGljIHZvaWQgbXB0Y3BfZG9fZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTEyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzExMzpzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzExNC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE2Mj1zdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE2OS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzE3MDpcdElOSVRfV09SSyhcdTAwMjZtc2stXHUwMDNld29yaywgbXB0Y3Bfd29ya2VyKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNzEtXHRtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1QVENQIEZ1bmN0aW9uIENhbGxzIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF93b3JrZXJgIGZ1bmN0aW9uIOKAkyBpdCYjMzk7cyBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEl0JiMzOTtzIGFsc28gc3RhdGljLCB3aGljaCBtZWFucyBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBlaXRoZXIgZGlyZWN0bHkgbW9kaWZ5IG9yIGNhbGwgaXQuIFJpZ2h0LCBzbywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhvc2UgZnVuY3Rpb25zIGFyZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIEFoLCBhbmQgaXQgbG9va3MgbGlrZSBgbXB0Y3BfcmVjdm1zZ2AgYW5kIGBtcHRjcF9zZW5kbXNnYCBjYWxsIGBtcHRjcF9yZWxlYXNlX2NiYCBpbmRpcmVjdGx5IHRocm91Z2ggYHJlbGVhc2Vfc29jaygpYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSYjMzk7cmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBNUFRDUCBzb2NrZXRzLgoKR2l2ZW4gYWxsIG9mIHRoYXQsIEkgc2hvdWxkIGNvbmNlbnRyYXRlIG9uIHRob3NlIGZpdmUgZnVuY3Rpb25zOiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zZW5kbXNnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuCgpSaWdodCwgdGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbnMuIGBNUFRDUGAgaXMgdGhlIG1haW4gb25lLCBvYnZpb3VzbHkuIEFuZCBgTVBUQ1BfSVBWNmAgd291bGQgYmUgYSBnb29kIG9uZSB0byBoYXZlIGFzIHdlbGwsIGRlZmluaXRlbHkuIEFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIHRvIGNvbnNpZGVyPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZSBhZ2FpbiB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRcbiAgIDI6XHRjb25maWcgTVBUQ1BcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gICA2Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcbiAgIDc6XHRcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBjb25uZWN0aW9ucyBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb3ZlciBtdWx0aXBsZVxuICAxMDpcdFx0ICBzdWJmbG93cyBpbiBvcmRlciB0byB1dGlsaXplIG11bHRpcGxlIG5ldHdvcmsgcGF0aHMuIEVhY2ggc3ViZmxvd1xuICAxMTpcdFx0ICB1c2VzIHRoZSBUQ1AgcHJvdG9jb2wsIGFuZCBUQ1Agb3B0aW9ucyBjYXJyeSBoZWFkZXIgaW5mb3JtYXRpb24gZm9yXG4gIDEyOlx0XHQgIE1QVENQLlxuICAxMzpcdFxuICAxNDpcdGlmIE1QVENQXG4gIDE1Olx0XG4gIDE2Olx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbiAgMTg6XHRcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgTVBUQ1BfSVBWNlxuICAyMTpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIElQVjY9eVxuICAyMzpcdFx0ZGVmYXVsdCB5XG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcbiAgMjY6XHRcdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI3Olx0XHRkZXBlbmRzIG9uIEtVTklUXG4gIDI4Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAyOTpcdFx0aGVscFxuICAzMDpcdFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXG4gIDMxOlx0XHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxuICAzMjpcdFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAzMzpcdFxuICAzNDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxuICAzNTpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gIDM2Olx0XG4gIDM3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxNDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIENhbGxzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9ucywgYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGUgY2hhbmdlcy4gQmV5b25kIHRoZXNlIGNvbmZpZ3MsIHdoYXQgZWxzZSBoYXMgYmVlbiB0b3VjaGVkPyBMZXQgbWUgZG8gYSBxdWljayBhdWRpdCBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLgoKQWxyaWdodCwgYG1wdGNwX3BtX2Noa19zdGFsZWAgaXMgaW4gYG5ldC9tcHRjcC9wbS5jYC4gSSYjMzk7bGwgd2FudCB0byByZXZpc2l0IHRoYXQgb25lLiBUaGVuIHRoZXJlJiMzOTtzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AgYW5kIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgLgoKSSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBtcHRjcF9wbV9jaGtfc3RhbGVgOyB0aGF0IG9uZSBzZWVtcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3BtX2Noa19zdGFsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTEwNjk9bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMTA1LVxubmV0L21wdGNwL3BtLmM6MTEwNjp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxubmV0L21wdGNwL3BtLmMtMTEwNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjIzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNdWx0aVBhdGggVENQIHN0YWNrIGhhbmRsZXMgcmV0cmFuc21pc3Npb25zIG9uIHN1YmZsb3dzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gYWNxdWlyZSB0aGUgY291bnQuIFRoaXMgaXMgYSBjcnVjaWFsIG1ldHJpYyB3aGVuIGNvbnNpZGVyaW5nIGNvbmdlc3Rpb24gY29udHJvbCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHJldHVybmVkIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkgcmVwcmVzZW50cyB0aGUgc3RhdGUgYW5kIGlmIGl0IGlzIHVzZWQgY29ycmVjdGx5IGluIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHJlbGF0ZWQgdG8gdGhlIGNvdW50IHVwZGF0ZSBhbmQgcmV0cmlldmFsPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gcGlucG9pbnQgd2hlcmUsIHdoZW4sIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aGluIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk4PXN0YXRpYyB2b2lkIG1wdGNwX3RvdXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUxMi0gKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI1MTM6c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk4NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBzaXR1YXRpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5ICppbiogdGhpcyB0aGluZy4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gSXMgaXQgcmVsYXRlZCB0byB0aGUgY29yZSBNUC1UQ1AgbmVnb3RpYXRpb24gb3IgbW9yZSBkb3duc3RyZWFtPyBXaGF0IGtpbmQgb2Ygb3B0aW9ucyBhcmUgd2UgdGFsa2luZyBhYm91dCBoZXJlPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgd2UmIzM5O3JlIGxvb2tpbmcgYXQgc3RhbmRhcmQgTVAtVENQIG9wdGlvbnMgbGlrZSBgTVBfQ0FQQUJMRWAsIGBNUF9KT0lOYCwgZXRjLiwgb3Igc29tZXRoaW5nIG1vcmUgYXBwbGljYXRpb24tc3BlY2lmaWMgdGhhdCBtaWdodCBiZSBmbG93aW5nIHRocm91Z2ggdGhlIE1QVENQIGxheWVyLiBJIGltbWVkaWF0ZWx5IHRoaW5rIGFib3V0IHBhcnNpbmcgYW5kIHZhbGlkYXRpb24uIElzIHRoZXJlIGEgZGVmaW5lZCBzdHJ1Y3R1cmU/IEFyZSB0aGVyZSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cyBvciBvdGhlciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgSSBzaG91bGQgYmUgbG9va2luZyBmb3I/IFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgY291bGQgYmUgY3J1Y2lhbCBmb3Igb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBzbyBJIGFtIGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgZGV0YWlscy4gV2Ugc2hvdWxkIGNoZWNrIHRoaXMgdGhvcm91Z2hseS4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9vcHRpb25zLmM9MTExNj1zdGF0aWMgdm9pZCBhY2tfdXBkYXRlX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE0MS1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE0MjpcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE0My1cdGlmIChhZnRlcjY0KG1zay1cdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTM9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIxLSAqL1xubmV0L21wdGNwL29wdGlvbnMuYzoxMjIyOmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ5MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgbXB0Y3BfZGF0YV9yZWFkeWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIG1lbnRhbCBjaGVja2xpc3Qgc3RhcnRzIHdpdGggYG1wdGNwX2RhdGFfcmVhZHlgLiBJdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGlzIGZ1bmN0aW9uIHNpdHMgaW4gdGhlIE1QVENQIGRhdGEgZmxvdy4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gV2hhdCB0cmlnZ2VycyBpdD8gV2hhdCBhcmUgdGhlIGNvbW1vbiBwaXRmYWxscyBJIHNob3VsZCBpbW1lZGlhdGVseSBjb25zaWRlciwgZ2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCB3ZSBhcmUgdHJvdWJsZXNob290aW5nPwoKSXMgaXQgcmVsYXRlZCB0byBhbnkgc3BlY2lmaWMgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbXM/IFdoYXQgaGFwcGVucyBpZiB0aGUgbmV0d29yayBjb25kaXRpb25zIGNoYW5nZSByYXBpZGx5PyBJcyBpdCBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiBkYXRhIGluIHRoZSBzdWJmbG93cywgb3IgY291bGQgdGhlcmUgYmUgYSBzdWJ0bGUgc3luY2hyb25pemF0aW9uIGlzc3VlIGx1cmtpbmc/IEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IHF1ZXN0aW9uOiBoYXZlIEkgY2hlY2tlZCB0aGUgb2J2aW91cz8gQW55IHJlY2VudCBjb2RlIGNoYW5nZXMgaW4gdGhlIGFyZWE/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgb3B0aW1pc2F0aW9ucyBwb3RlbnRpYWxseSBhZmZlY3RpbmcgaXQ/IExldCYjMzk7cyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9OTc5PXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9ydHRfdXBkYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwMDU6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg2NgoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgTVBUQ1AgcGF0Y2g6CgoqKk1QVENQIFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gaW50ZWdyYXRpbmcgdGhlc2Ugc3BlY2lmaWMgTVBUQ1AgZnVuY3Rpb25zIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgZm9yIGZ1enppbmc6IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCwgYG1wdGNwX2RhdGFfcmVhZHlgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIFRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgZGVhbGluZyB3aXRoIG1lbW9yeSBsaW1pdHMgYW5kIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQuJiMzNDsgV2UgKm5lZWQqIHRvIHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLgoKTm93LCBiZWZvcmUgd2UgbGF1bmNoLCBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlJiMzOTt2ZSBnb3QgYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4gTm8gc3VycHJpc2VzIHRoZXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlLCB0aG91Z2guIEFoLCByaWdodC4gYElORVRgIGlzIGEgZ2l2ZW4sIGEgZm91bmRhdGlvbmFsIGRlcGVuZGVuY3kuIEFuZCwgb2YgY291cnNlLCBgSVBWNmAgaXMgcmVxdWlyZWQgaWYgYE1QVENQX0lQVjZgIGlzIGVuYWJsZWQuIEdvb2QuCgpGaW5hbGx5LCBJJiMzOTtsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byBwcmVzZW50IHRoZSBmdXp6aW5nIHJlc3VsdHMgaW4gYSBjbGVhciBhbmQgc3RydWN0dXJlZCB3YXkuIFdlIHdhbnQgdGhpcyB0byBiZSBlYXNpbHkgZGlnZXN0aWJsZSBmb3IgdGhlIHRlYW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7LAogICAgJiMzNDtNUFRDUF9JUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9wbV9jaGtfc3RhbGUmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDssCiAgICAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2VuZG1zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgYWRkcyBuZXcgTUlCIGNvdW50ZXJzIGFuZCBtb2RpZmllcyBjb3JlIE1QVENQIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgX19tcHRjcF9yZXRyYW5zYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHN0YW5kYXJkIE1QVENQIHNvY2tldCBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIHJlY2VpdmUgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7TVBUQ1BfSVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfcG1fY2hrX3N0YWxlJiMzNDssCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGF0YV9yZWFkeSYjMzQ7LAogICAgJiMzNDttcHRjcF9yZWN2bXNnJiMzNDssCiAgICAmIzM0O21wdGNwX3NlbmRtc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBtZW1vcnkgbGltaXRzLCBiYWNrbG9nIGRyb3BzLCBhbmQgcmV0cmFuc21pc3Npb24gbG9naWMuIEl0IGFkZHMgbmV3IE1JQiBjb3VudGVycyBhbmQgbW9kaWZpZXMgY29yZSBNUFRDUCBmdW5jdGlvbnMgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCBhbmQgYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBzdGFuZGFyZCBNUFRDUCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgbmV0d29yayByZWNlaXZlIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gTVBUQ1AgbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgaW50cm9kdWNlcyBuZXcgTUlCIGNvdW50ZXJzLCBhZGRzIG1lbW9yeSBsaW1pdCBjaGVja3MgKGBtcHRjcF9vdmVyX2xpbWl0YCwgYG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlYCksIGltcGxlbWVudHMgb3V0LW9mLW9yZGVyIHF1ZXVlIHBydW5pbmcgKGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgKSwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9vcCAoYF9fbXB0Y3BfcmV0cmFuc2ApLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGV4cG9zaW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseWluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBmb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIHBhY2tldCBkcm9wcGluZyBvciBxdWV1ZSBtYW5pcHVsYXRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGI2MDZhN2JjNDY1MTBiOGE5ODQ4OGFiNTI2NGI3M2ZiODYzZmE4OWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjIxOjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jCmluZGV4IGYyM2ZkYTBjNTVhNzIuLjI1NjkzODViYWI3Y2EgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9taWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmMKQEAgLTg1LDYgJiM0Mzs4NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7CiAJU05NUF9NSUJfSVRFTSgmIzM0O1NpbXVsdENvbm5lY3RGYWxsYmFjayYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7RmFsbGJhY2tGYWlsZWQmIzM0OywgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7V2luUHJvYmUmIzM0OywgTVBUQ1BfTUlCX1dJTlBST0JFKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O0JhY2tsb2dEcm9wJiMzNDssIE1QVENQX01JQl9CQUNLTE9HRFJPUCksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtSY3ZQcnVuZWQmIzM0OywgTVBUQ1BfTUlCX1JDVlBSVU5FRCksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtPRk9QcnVuZWQmIzM0OywgTVBUQ1BfTUlCX09GT1BSVU5FRCksCiB9OwogCiAvKiBtcHRjcF9taWJfYWxsb2MgLSBhbGxvY2F0ZSBwZXJjcHUgbWliIGNvdW50ZXJzCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmgKaW5kZXggODEyMjE4YjVlZDJiZi4uM2EzNDI1ZTI1OGE3NiAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaApAQCAtODgsNiAmIzQzOzg4LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQgewogCU1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssCS8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovCiAJTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELAkvKiBDYW4mIzM5O3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi8KIAlNUFRDUF9NSUJfV0lOUFJPQkUsCQkvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqLwomIzQzOwlNUFRDUF9NSUJfQkFDS0xPR0RST1AsCQkvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovCiYjNDM7CU1QVENQX01JQl9SQ1ZQUlVORUQsCQkvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMgKi8KJiM0MzsJTVBUQ1BfTUlCX09GT1BSVU5FRCwJCS8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi8KIAlfX01QVENQX01JQl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9vcHRpb25zLmMgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCmluZGV4IDEwNTdkNTAwNTc3YjAuLmI4MzE4ZTAzMDEzODkgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL29wdGlvbnMuYwpAQCAtMTE5MCw4ICYjNDM7MTE5MCwzNCBAQCBzdGF0aWMgYm9vbCBhZGRfYWRkcl9obWFjX3ZhbGlkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAJcmV0dXJuIGhtYWMgPT0gbXBfb3B0LSZndDthaG1hYzsKIH0KIAotLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLAotICogZWxzZSByZXR1cm4gdHJ1ZS4KJiM0MztzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwl1MzIgcmN2YnVmID0gUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCh1MzIpc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDs9IHJjdmJ1ZiAmYW1wOyZhbXA7CiYjNDM7CQkgICBSRUFEX09OQ0UobXNrLSZndDtiYWNrbG9nX2xlbikgJmx0Oz0gcmN2YnVmKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4sIHJzdCBvciBhbHJlYWR5LWFja2VkIHNlZ20uICovCiYjNDM7CWlmIChUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSA9PSBUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEgfHwKJiM0MzsJICAgIFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7dGNwX2ZsYWdzICZhbXA7IChUQ1BIRFJfRklOIHwgVENQSERSX1JTVCkgfHwKJiM0MzsJICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEsIHRjcF9zayhzc2spLSZndDtyY3Zfbnh0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovCiYjNDM7CWluZXRfY3NrKHNzayktJmd0O2ljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7CiYjNDM7CWluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spOwomIzQzOwomIzQzOwkvKiBQbGFpbiBUQ1AgKGZhbGxiYWNrKSBhbmQgc2tiIGlzIGRyb3BwZWQgYmVmb3JlIHRoZSBUQ1AgcmVjdiBxdWV1ZS4gKi8KJiM0MzsJTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZRRFJPUCk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgZHJvcCB0aGUgcGFja2V0LCBpLmUuIGluIGNhc2Ugb2YgZXJyb3IsCiYjNDM7ICogc3ViZmxvdyBoYXMgYmVlbiByZXNldCwgb3Igb3ZlciBtZW1vcnkgbGltaXRzLgogICovCiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTIxNyw3ICYjNDM7MTI0Myw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAKIAkJX19tcHRjcF9kYXRhX2Fja2VkKHN1YmZsb3ctJmd0O2Nvbm4pOwogCQltcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LSZndDtjb25uKTsKLQkJcmV0dXJuIHRydWU7CiYjNDM7CQlyZXR1cm4gIW1wdGNwX292ZXJfbGltaXQoc3ViZmxvdy0mZ3Q7Y29ubiwgc2ssIHNrYik7CiAJfQogCiAJbXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCAmYW1wO21wX29wdCk7CmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jCmluZGV4IDY0YTEyMzZhYWJlZTkuLmQxZjczYzNlMzlmYTMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wbS5jCkBAIC0xMDY1LDcgJiM0MzsxMDY1LDggQEAgYm9vbCBtcHRjcF9wbV9pc19iYWNrdXAoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2tfY29tbW9uICpza2MpCiAJcmV0dXJuIG1wdGNwX3BtX25sX2lzX2JhY2t1cChtc2ssICZhbXA7c2tjX2xvY2FsKTsKIH0KIAotc3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spCiYjNDM7c3RhdGljIHZvaWQKJiM0MzttcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKQogewogCXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKml0ZXIsICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CkBAIC0xMTAyLDIyICYjNDM7MTEwMywzNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvYwogCX0KIH0KIAotdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKQomIzQzO3ZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiB7Ci0Jc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7Ci0JdTMyIHJjdl90c3RhbXAgPSBSRUFEX09OQ0UodGNwX3NrKHNzayktJmd0O3Jjdl90c3RhbXApOwotCi0JLyoga2VlcCB0cmFjayBvZiBydHggcGVyaW9kcyB3aXRoIG5vIHByb2dyZXNzICovCi0JaWYgKCFzdWJmbG93LSZndDtzdGFsZV9jb3VudCkgewotCQlzdWJmbG93LSZndDtzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDsKLQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQmIzQzOyYjNDM7OwotCX0gZWxzZSBpZiAoc3ViZmxvdy0mZ3Q7c3RhbGVfcmN2X3RzdGFtcCA9PSByY3ZfdHN0YW1wKSB7Ci0JCWlmIChzdWJmbG93LSZndDtzdGFsZV9jb3VudCAmbHQ7IFU4X01BWCkKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKJiM0MzsKJiM0MzsJbXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpzc2sgPSBtcHRjcF9zdWJmbG93X3RjcF9zb2NrKHN1YmZsb3cpOwomIzQzOwkJdTMyIHJjdl90c3RhbXA7CiYjNDM7CiYjNDM7CQlpZiAoIV9fbXB0Y3Bfc3ViZmxvd19hY3RpdmUoc3ViZmxvdykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBObyBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gbm90IHN0YWxlICovCiYjNDM7CQlpZiAodGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBrZWVwIHRyYWNrIG9mIHJ0eCBwZXJpb2RzIHdpdGggbm8gcHJvZ3Jlc3MgKi8KJiM0MzsJCXJjdl90c3RhbXAgPSBSRUFEX09OQ0UodGNwX3NrKHNzayktJmd0O3Jjdl90c3RhbXApOwomIzQzOwkJaWYgKCFzdWJmbG93LSZndDtzdGFsZV9jb3VudCkgewomIzQzOwkJCXN1YmZsb3ctJmd0O3N0YWxlX3Jjdl90c3RhbXAgPSByY3ZfdHN0YW1wOwogCQkJc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQmIzQzOyYjNDM7OwotCQltcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUobXNrLCBzc2spOwotCX0gZWxzZSB7Ci0JCXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50ID0gMDsKLQkJbXB0Y3Bfc3ViZmxvd19zZXRfYWN0aXZlKHN1YmZsb3cpOwomIzQzOwkJfSBlbHNlIGlmIChzdWJmbG93LSZndDtzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHsKJiM0MzsJCQlpZiAoc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQgJmx0OyBVOF9NQVgpCiYjNDM7CQkJCXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50JiM0MzsmIzQzOzsKJiM0MzsJCQltcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN1YmZsb3ctJmd0O3N0YWxlX2NvdW50ID0gMDsKJiM0MzsJCQltcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7CiYjNDM7CQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IDdjODE4MGQ4ZDVlZmYuLmVjODc0ZDJlYWQ2YTQgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0yNDIsNiAmIzQzOzI0Miw2NSBAQCBzdGF0aWMgYm9vbCBtcHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7LyogJiMzNDtJbnNwaXJlZCYjMzQ7IGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1AKJiM0MzsgKiBzb2NrZXQgaXMgdW5kZXIgbWVtb3J5IGxpbWl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmluX3NrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXN0cnVjdCByYl9ub2RlICpub2RlLCAqcHJldjsKJiM0MzsJYm9vbCBwcnVuZWQgPSBmYWxzZTsKJiM0MzsJdTY0IG1lbTsKJiM0MzsKJiM0MzsJaWYgKFJCX0VNUFRZX1JPT1QoJmFtcDttc2stJmd0O291dF9vZl9vcmRlcl9xdWV1ZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW5vZGUgPSAmYW1wO21zay0mZ3Q7b29vX2xhc3Rfc2tiLSZndDtyYm5vZGU7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7CiYjNDM7CiYjNDM7CQkvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqLwomIzQzOwkJaWYgKGFmdGVyNjQoTVBUQ1BfU0tCX0NCKGluX3NrYiktJmd0O21hcF9zZXEsCiYjNDM7CQkJICAgIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXBydW5lZCA9IHRydWU7CiYjNDM7CQlwcmV2ID0gcmJfcHJldihub2RlKTsKJiM0MzsJCXJiX2VyYXNlKG5vZGUsICZhbXA7bXNrLSZndDtvdXRfb2Zfb3JkZXJfcXVldWUpOwomIzQzOwkJbXB0Y3BfZHJvcChzaywgc2tiKTsKJiM0MzsJCW1zay0mZ3Q7b29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpOwomIzQzOwomIzQzOwkJbWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CQlpZiAobWVtICZsdDs9IHNrLSZndDtza19yY3ZidWYpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlub2RlID0gcHJldjsKJiM0MzsJfSB3aGlsZSAobm9kZSk7CiYjNDM7CiYjNDM7CWlmIChwcnVuZWQpCiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIHN0YWNrIGNhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCBhdCB0aGUgbXNrIGxldmVsLCBvciB0aGUKJiM0MzsgKiBzdHJlYW0gd2lsbCBicmVhay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBtcHRjcF9jYW5faW5nZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgJmx0Oz0gUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpKSB8fAomIzQzOwkJCV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJaWYgKCFtcHRjcF9jYW5faW5nZXN0KHNrKSkgewomIzQzOwkJbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHNrLCBza2IpOwomIzQzOwkJcmV0dXJuIG1wdGNwX2Nhbl9pbmdlc3Qoc2spOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIC8qICYjMzQ7aW5zcGlyZWQmIzM0OyBieSB0Y3BfZGF0YV9xdWV1ZV9vZm8oKSwgbWFpbiBkaWZmZXJlbmNlczoKICAqIC0gdXNlIG1wdGNwIHNlcXMKICAqIC0gZG9uJiMzOTt0IGNvcGUgd2l0aCBzYWNrcwpAQCAtMjUzLDYgJiM0MzszMTIsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl1NjQgc2VxLCBlbmRfc2VxLCBtYXhfc2VxOwogCXN0cnVjdCBza19idWZmICpza2IxOwogCiYjNDM7CWlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHsKJiM0MzsJCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpOwomIzQzOwkJbXB0Y3BfZHJvcChzaywgc2tiKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCXNlcSA9IE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwogCWVuZF9zZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcTsKIAltYXhfc2VxID0gYXRvbWljNjRfcmVhZCgmYW1wO21zay0mZ3Q7cmN2X3duZF9zZW50KTsKQEAgLTM4OSw2ICYjNDM7NDU0LDEzIEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJaWYgKE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxID09IG1zay0mZ3Q7YWNrX3NlcSkgewogCQkvKiBpbiBzZXF1ZW5jZSAqLwomIzQzO2luc2VydDoKJiM0MzsJCWlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHsKJiM0MzsJCQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTsKJiM0MzsJCQltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCX0KJiM0MzsKIAkJbXNrLSZndDtieXRlc19yZWNlaXZlZCAmIzQzOz0gY29weV9sZW47CiAJCVdSSVRFX09OQ0UobXNrLSZndDthY2tfc2VxLCBtc2stJmd0O2Fja19zZXEgJiM0MzsgY29weV9sZW4pOwogCQl0YWlsID0gc2tiX3BlZWtfdGFpbCgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKTsKQEAgLTQwMywyNiAmIzQzOzQ3NSwyMCBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCS8qIENvbXBsZXRlbHkgb2xkIGRhdGE/ICovCi0JaWYgKCFhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLSZndDtlbmRfc2VxLCBtc2stJmd0O2Fja19zZXEpKSB7Ci0JCU1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTsKLQkJbXB0Y3BfZHJvcChzaywgc2tiKTsKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKiBQYXJ0aWFsIHBhY2tldCAqLwomIzQzOwlpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSwgbXNrLSZndDthY2tfc2VxKSkgewomIzQzOwkJY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSAtIG1zay0mZ3Q7YWNrX3NlcTsKJiM0MzsJCU1QVENQX1NLQl9DQihza2IpLSZndDtvZmZzZXQgJiM0Mzs9IG1zay0mZ3Q7YWNrX3NlcSAtCiYjNDM7CQkJCQkgICAgIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwomIzQzOwkJTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEgJiM0Mzs9IG1zay0mZ3Q7YWNrX3NlcSAtCiYjNDM7CQkJCQkgICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcTsKJiM0MzsJCWdvdG8gaW5zZXJ0OwogCX0KIAotCS8qIFBhcnRpYWwgcGFja2V0OiBtYXBfc2VxICZsdDsgYWNrX3NlcSAmbHQ7IGVuZF9zZXEuCi0JICogU2tpcCB0aGUgYWxyZWFkeS1hY2tlZCBieXRlcyBhbmQgZW5xdWV1ZSB0aGUgbmV3IGRhdGEuCi0JICovCi0JY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSAtIG1zay0mZ3Q7YWNrX3NlcTsKLQlNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7b2Zmc2V0ICYjNDM7PSBtc2stJmd0O2Fja19zZXEgLSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcTsKLQlNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcSAmIzQzOz0gbXNrLSZndDthY2tfc2VxIC0KLQkJCQkgICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcTsKLQltc2stJmd0O2J5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjsKLQlXUklURV9PTkNFKG1zay0mZ3Q7YWNrX3NlcSwgbXNrLSZndDthY2tfc2VxICYjNDM7IGNvcHlfbGVuKTsKLQotCXNrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKLQlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUsIHNrYik7Ci0JcmV0dXJuIHRydWU7CiYjNDM7CS8qIENvbXBsZXRlbHkgb2xkIGRhdGEgKi8KJiM0MzsJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpOwomIzQzOwltcHRjcF9kcm9wKHNrLCBza2IpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyB2b2lkIG1wdGNwX3N0b3BfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaykKQEAgLTY4MSw2ICYjNDM7NzQ3LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssCiAJc3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMOwogCXN0cnVjdCBzb2NrICpzc2sgPSBza2ItJmd0O3NrOwogCWJvb2wgZnJhZ3N0b2xlbjsKJiM0MzsJdTY0IGxpbWl0OwogCWludCBkZWx0YTsKIAogCWlmICh1bmxpa2VseShzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0NMT1NFKSkgewpAQCAtNjg4LDYgJiM0Mzs3NTUsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJLyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovCiYjNDM7CWxpbWl0ID0gUkVBRF9PTkNFKHNrLSZndDtza19yY3ZidWYpOwomIzQzOwlsaW1pdCAmIzQzOz0gKGxpbWl0ICZndDsmZ3Q7IDEpICYjNDM7IDY0ICogMTAyNDsKJiM0MzsJbGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7CiYjNDM7CWlmIChtc2stJmd0O2JhY2tsb2dfbGVuICZndDsgbGltaXQgJmFtcDsmYW1wOyAhX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7CiYjNDM7CQlfX01QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9CQUNLTE9HRFJPUCk7CiYjNDM7CQlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9CQUNLTE9HKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCS8qIFRyeSB0byBjb2FsZXNjZSB3aXRoIHRoZSBsYXN0IHNrYiBpbiBvdXIgYmFja2xvZyAqLwogCWlmICghbGlzdF9lbXB0eSgmYW1wO21zay0mZ3Q7YmFja2xvZ19saXN0KSkKIAkJdGFpbCA9IGxpc3RfbGFzdF9lbnRyeSgmYW1wO21zay0mZ3Q7YmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7CkBAIC03NTksNyAmIzQzOzgzNiw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLAogCiAJCQltcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pOwogCi0JCQlpZiAob3duX21zayAmYW1wOyZhbXA7IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmbHQ7IHNrLSZndDtza19yY3ZidWYpIHsKJiM0MzsJCQlpZiAob3duX21zaykgewogCQkJCW1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTsKIAkJCQlyZXQgfD0gX19tcHRjcF9tb3ZlX3NrYihzaywgc2tiKTsKIAkJCX0gZWxzZSB7CkBAIC0xMTQyLDEzICYjNDM7MTIxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spCiAJbXB0Y3Bfd3JpdGVfc3BhY2Uoc2spOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKLXsKLQltcHRjcF9kYXRhX2xvY2soc2spOwotCV9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7Ci0JbXB0Y3BfZGF0YV91bmxvY2soc2spOwotfQotCiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7CkBAIC0yMjE1LDEyICYjNDM7MjI4NSw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticywgdTMyICpkZWx0CiAJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKIAlib29sIG1vdmVkID0gZmFsc2U7CiAKLQkqZGVsdGEgPSAwOwogCXdoaWxlICgxKSB7Ci0JCS8qIElmIHRoZSBtc2sgcmVjdmJ1ZiBpcyBmdWxsIHN0b3AsIGRvbiYjMzk7dCBkcm9wICovCi0JCWlmIChza19ybWVtX2FsbG9jX2dldChzaykgJmd0OyBzay0mZ3Q7c2tfcmN2YnVmKQotCQkJYnJlYWs7Ci0KIAkJcHJlZmV0Y2goc2tiLSZndDtuZXh0KTsKIAkJbGlzdF9kZWwoJmFtcDtza2ItJmd0O2xpc3QpOwogCQkqZGVsdGEgJiM0Mzs9IHNrYi0mZ3Q7dHJ1ZXNpemU7CkBAIC0yMjQ4LDkgJiM0MzsyMzEzLDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQogCURFQlVHX05FVF9XQVJOX09OX09OQ0UobXNrLSZndDtiYWNrbG9nX3VuYWNjb3VudGVkICZhbXA7JmFtcDsgc2stJmd0O3NrX3NvY2tldCAmYW1wOyZhbXA7CiAJCQkgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7CiAKLQkvKiBEb24mIzM5O3Qgc3Bvb2wgdGhlIGJhY2tsb2cgaWYgdGhlIHJjdmJ1ZiBpcyBmdWxsLiAqLwotCWlmIChsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpIHx8Ci0JICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmZ3Q7IHNrLSZndDtza19yY3ZidWYpCiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlJTklUX0xJU1RfSEVBRChza2JzKTsKQEAgLTIyNTgsMjAgJiM0MzsyMzIxLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgbXB0Y3BfYmFja2xvZ19zcG9vbGVkKHN0cnVjdCBzb2NrICpzaywgdTMyIG1vdmVkLAotCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqc2ticykKLXsKLQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwotCi0JV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwotCWxpc3Rfc3BsaWNlKHNrYnMsICZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpOwotfQotCiBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKQogewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCXN0cnVjdCBsaXN0X2hlYWQgc2ticzsKIAlib29sIGVucXVldWVkID0gZmFsc2U7Ci0JdTMyIG1vdmVkOwomIzQzOwl1MzIgbW92ZWQgPSAwOwogCiAJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKIAl3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssICZhbXA7c2ticykpIHsKQEAgLTIyNzksOCAmIzQzOzIzMzQsOCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKQogCQllbnF1ZXVlZCB8PSBfX21wdGNwX21vdmVfc2ticyhzaywgJmFtcDtza2JzLCAmYW1wO21vdmVkKTsKIAogCQltcHRjcF9kYXRhX2xvY2soc2spOwotCQltcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCAmYW1wO3NrYnMpOwogCX0KJiM0MzsJV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwogCW1wdGNwX2RhdGFfdW5sb2NrKHNrKTsKIAogCWlmIChlbnF1ZXVlZCAmYW1wOyZhbXA7IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKQpAQCAtMjQ2OSw3ICYjNDM7MjUyNCw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zKHN0cnVjdCBtcHRjcF9zb2NrICptc2spCiAKIAkJLyogc3RpbGwgZGF0YSBvdXRzdGFuZGluZyBhdCBUQ1AgbGV2ZWw/IHNraXAgdGhpcyAqLwogCQlpZiAoIXRjcF9ydHhfYW5kX3dyaXRlX3F1ZXVlc19lbXB0eShzc2spKSB7Ci0JCQltcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7CiAJCQltaW5fc3RhbGVfY291bnQgPSBtaW5fdChpbnQsIG1pbl9zdGFsZV9jb3VudCwgc3ViZmxvdy0mZ3Q7c3RhbGVfY291bnQpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTI3OTEsNDQgJiM0MzsyODQ1LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKQogCXNrX2Vycm9yX3JlcG9ydChzayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7LyoKJiM0MzsgKiBSZXRyYW5zbWl0IHRoZSBzcGVjaWZpZWQgZGF0YSBmcmFnbWVudCBvbiBhbGwgdGhlIHNlbGVjdGVkIHN1YmZsb3dzLAomIzQzOyAqIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZywKJiM0MzsJCQkJdTY0IHNlbnRfc2VxKQogewogCXN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7Ci0Jc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7CiAJc3RydWN0IHNvY2sgKnNzazsKLQlpbnQgcmV0LCBlcnI7Ci0JdTE2IGxlbiA9IDA7Ci0KLQltcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKLQotCS8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrICYjMzQ7c3RhbGUmIzM0OyBsb2dpYyAqLwotCWVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7Ci0JZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7Ci0JaWYgKCFkZnJhZykgewotCQlpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7Ci0JCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0KLQkJCVdSSVRFX09OQ0UoaWNzay0mZ3Q7aWNza19yZXRyYW5zbWl0cywKLQkJCQkgICBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpOwotCQkJbXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7Ci0JCQltcHRjcF9zZW5kX2Fjayhtc2spOwotCi0JCQlnb3RvIHJlc2V0X3RpbWVyOwotCQl9Ci0KLQkJaWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKQotCQkJZ290byBjbGVhcl9zY2hlZHVsZWQ7Ci0KLQkJZ290byByZXNldF90aW1lcjsKLQl9Ci0KLQlpZiAoZXJyKQotCQlnb3RvIHJlc2V0X3RpbWVyOwomIzQzOwlpbnQgcmV0LCBsZW4gPSAwOwogCiAJbXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHsKIAkJaWYgKFJFQURfT05DRShzdWJmbG93LSZndDtzY2hlZHVsZWQpKSB7CiYjNDM7CQkJdTE2IG9mZnNldCA9IHNlbnRfc2VxIC0gZGZyYWctJmd0O2RhdGFfc2VxOwogCQkJdTE2IGNvcGllZCA9IDA7CiAKIAkJCW1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7CkBAIC0yODM4LDcgJiM0MzsyODcwLDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCWxvY2tfc29jayhzc2spOwogCiAJCQkvKiBsaW1pdCByZXRyYW5zbWlzc2lvbiB0byB0aGUgYnl0ZXMgYWxyZWFkeSBzZW50IG9uIHNvbWUgc3ViZmxvd3MgKi8KLQkJCWluZm8uc2VudCA9IDA7CiYjNDM7CQkJaW5mby5zZW50ID0gb2Zmc2V0OwogCQkJaW5mby5saW1pdCA9IFJFQURfT05DRShtc2stJmd0O2NzdW1fZW5hYmxlZCkgPyBkZnJhZy0mZ3Q7ZGF0YV9sZW4gOgogCQkJCQkJCQkgICAgZGZyYWctJmd0O2FscmVhZHlfc2VudDsKIApAQCAtMjg1Myw3ICYjNDM7Mjg4NSw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiAJCQkgICAgIW1zay0mZ3Q7YWxsb3dfc3ViZmxvd3MpIHsKIAkJCQlzcGluX3VubG9ja19iaCgmYW1wO21zay0mZ3Q7ZmFsbGJhY2tfbG9jayk7CiAJCQkJcmVsZWFzZV9zb2NrKHNzayk7Ci0JCQkJZ290byBjbGVhcl9zY2hlZHVsZWQ7CiYjNDM7CQkJCXJldHVybiAtMTsKIAkJCX0KIAogCQkJd2hpbGUgKGluZm8uc2VudCAmbHQ7IGluZm8ubGltaXQpIHsKQEAgLTI4NzYsMTMgJiM0MzsyOTA4LDk5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiAJCQlyZWxlYXNlX3NvY2soc3NrKTsKIAkJfQogCX0KJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7CiYjNDM7CXN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnOwomIzQzOwl1NjQgcmV0cmFuc19zZXEsIHNlbnRfc2VxOwomIzQzOwlib29sIG5lZWRfcmV0cmFuczsKJiM0MzsJaW50IGVyciwgbGVuOwomIzQzOwomIzQzOwltcHRjcF9wbV9jaGtfc3RhbGUobXNrKTsKJiM0MzsKJiM0MzsJLyogR2V0IGFuIHVwZGF0ZWQgYW5kIGNvbnNpc3RlbnQgcnR4IHF1ZXVlIHN0YXR1cy4gKi8KJiM0MzsJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKJiM0MzsJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwomIzQzOwluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWJvb2wgYWxyZWFkeV9hY2tlZDsKJiM0MzsKJiM0MzsJCWVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFgKJiM0MzsJCSAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIWRmcmFnIHx8ICFkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50KQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogQ2FuIGZhaWwgb25seSBpbiBjYXNlIG9mIGZhbGxiYWNrLiAqLwomIzQzOwkJbGVuID0gX19tcHRjcF9wdXNoX3JldHJhbnMoc2ssIGRmcmFnLCByZXRyYW5zX3NlcSk7CiYjNDM7CQlpZiAobGVuICZsdDsgMCkKJiM0MzsJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsKJiM0MzsJCXJldHJhbnNfc2VxICYjNDM7PSBsZW47CiYjNDM7CQltc2stJmd0O2J5dGVzX3JldHJhbnMgJiM0Mzs9IGxlbjsKJiM0MzsJCWRmcmFnLSZndDthbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLSZndDthbHJlYWR5X3NlbnQsCiYjNDM7CQkJCQkgICAgcmV0cmFuc19zZXEgLSBkZnJhZy0mZ3Q7ZGF0YV9zZXEpOwomIzQzOwomIzQzOwkJLyogV2l0aCBjc3VtIGVuYWJsZWQsIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqLwomIzQzOwkJc2VudF9zZXEgPSBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcTsKJiM0MzsJCWlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stJmd0O3NuZF9ueHQpKQomIzQzOwkJCVdSSVRFX09OQ0UobXNrLSZndDtzbmRfbnh0LCBzZW50X3NlcSk7CiYjNDM7CiYjNDM7CQkvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzCiYjNDM7CQkgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctJmd0O2RhdGFfc2VxICYjNDM7IGRmcmFnLSZndDtkYXRhX2xlbikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlkZnJhZyA9IGxpc3RfaXNfbGFzdCgmYW1wO2RmcmFnLSZndDtsaXN0LCAmYW1wO21zay0mZ3Q7cnR4X3F1ZXVlKSA/CiYjNDM7CQkJCU5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpOwomIzQzOwkJaWYgKCFkZnJhZykKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIEluY29taW5nIGFja3MgY2FuIG1vdmUgc25kX3VuYSBhZnRlciB0aGUgY3VycmVudCBkZnJhZwomIzQzOwkJICogYWNyb3NzIGxvb3AgaXRlcmF0aW9ucywgaWYgc28gc3RhcnQgYWdhaW4gZnJvbSBSVFggaGVhZC4KJiM0MzsJCSAqLwomIzQzOwkJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKJiM0MzsJCWFscmVhZHlfYWNrZWQgPSAhYmVmb3JlNjQobXNrLSZndDtzbmRfdW5hLCBkZnJhZy0mZ3Q7ZGF0YV9zZXEgJiM0MzsKJiM0MzsJCQkJCSAgZGZyYWctJmd0O2FscmVhZHlfc2VudCk7CiYjNDM7CQlpZiAoYWxyZWFkeV9hY2tlZCkgewomIzQzOwkJCV9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7CiYjNDM7CQkJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CQkJZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7CiYjNDM7CQkJbmVlZF9yZXRyYW5zID0gISFkZnJhZzsKJiM0MzsJCX0gZWxzZSBpZiAoYWZ0ZXI2NChtc2stJmd0O3NuZF91bmEsIHJldHJhbnNfc2VxKSkgewomIzQzOwkJCXJldHJhbnNfc2VxID0gbXNrLSZndDtzbmRfdW5hOwomIzQzOwkJfQomIzQzOwkJbXB0Y3BfZGF0YV91bmxvY2soc2spOwomIzQzOwl9CiAKLQltc2stJmd0O2J5dGVzX3JldHJhbnMgJiM0Mzs9IGxlbjsKLQlkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ID0gbWF4KGRmcmFnLSZndDthbHJlYWR5X3NlbnQsIGxlbik7CiYjNDM7CS8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovCiYjNDM7CWlmICghbmVlZF9yZXRyYW5zKSB7CiYjNDM7CQlpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7CiYjNDM7CQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCi0JLyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovCi0JaWYgKGFmdGVyNjQoZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXEsIG1zay0mZ3Q7c25kX254dCkpCi0JCVdSSVRFX09OQ0UobXNrLSZndDtzbmRfbnh0LCBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAomIzQzOwkJCQkgICBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpOwomIzQzOwkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwomIzQzOwkJCW1wdGNwX3NlbmRfYWNrKG1zayk7CiYjNDM7CQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKJiM0MzsJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsJfQogCiByZXNldF90aW1lcjoKIAltcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spOwpAQCAtMzY3NiwxMiAmIzQzOzM3OTQsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spCiAJX19tdXN0X2hvbGQoJmFtcDtzay0mZ3Q7c2tfbG9jay5zbG9jaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwl1MzIgbW92ZWQgPSAwOwogCiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay0mZ3Q7Y2JfZmxhZ3MgJmFtcDsgTVBUQ1BfRkxBR1NfUFJPQ0VTU19DVFhfTkVFRCk7CiAJCXN0cnVjdCBsaXN0X2hlYWQgam9pbl9saXN0LCBza2JzOwogCQlib29sIHNwb29sX2JsOwotCQl1MzIgbW92ZWQ7CiAKIAkJc3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKTsKIAkJaWYgKCFmbGFncyAmYW1wOyZhbXA7ICFzcG9vbF9ibCkKQEAgLTM3MTQsOSAmIzQzOzM4MzIsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaykKIAogCQljb25kX3Jlc2NoZWQoKTsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2xvY2suc2xvY2spOwotCQlpZiAoc3Bvb2xfYmwpCi0JCQltcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCAmYW1wO3NrYnMpOwogCX0KJiM0MzsJaWYgKG1vdmVkKQomIzQzOwkJV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwogCiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgJmFtcDttc2stJmd0O2NiX2ZsYWdzKSkKIAkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmgKaW5kZXggMWI4MGYyZDZlYzVhMi4uYjNhZjM0NjJiZGQxNiAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmgKQEAgLTU4MCwxMiAmIzQzOzU4MCwxMSBAQCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0IHsKIAkJcmVtb3RlX2tleV92YWxpZCA6IDEsICAgICAgICAvKiByZWNlaXZlZCB0aGUgcGVlciBrZXkgZnJvbSAqLwogCQlkaXNwb3NhYmxlIDogMSwJICAgIC8qIGN0eCBjYW4gYmUgZnJlZSBhdCB1bHAgcmVsZWFzZSB0aW1lICovCiAJCWNsb3NpbmcgOiAxLAkgICAgLyogbXVzdCBub3QgcGFzcyByeCBkYXRhIHRvIG1zayBhbnltb3JlICovCi0JCXN0YWxlIDogMSwJICAgIC8qIHVuYWJsZSB0byBzbmQvcmN2IGRhdGEsIGRvIG5vdCB1c2UgZm9yIHhtaXQgKi8KIAkJdmFsaWRfY3N1bV9zZWVuIDogMSwgICAgICAgIC8qIGF0IGxlYXN0IG9uZSBjc3VtIHZhbGlkYXRlZCAqLwogCQlpc19tcHRmbyA6IDEsCSAgICAvKiBzdWJmbG93IGlzIGRvaW5nIFRGTyAqLwogCQljbG9zZV9ldmVudF9kb25lIDogMSwgICAgICAgLyogaGFzIGRvbmUgdGhlIHBvc3QtY2xvc2VkIHBhcnQgKi8KIAkJbXBjX2Ryb3AgOiAxLAkgICAgLyogdGhlIE1QQyBvcHRpb24gaGFzIGJlZW4gZHJvcHBlZCBpbiBhIHJ0eCAqLwotCQlfX3VudXNlZCA6IDg7CiYjNDM7CQlfX3VudXNlZCA6IDk7CiAJYm9vbAlkYXRhX2F2YWlsOwogCWJvb2wJc2NoZWR1bGVkOwogCWJvb2wJcG1fbGlzdGVuZXI7CSAgICAvKiBhIGxpc3RlbmVyIG1hbmFnZWQgYnkgdGhlIGtlcm5lbCBQTT8gKi8KQEAgLTYwNCw3ICYjNDM7NjAzLDExIEBAIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgewogCXU4CXJlc2V0X3NlZW46MTsKIAl1OAlyZXNldF90cmFuc2llbnQ6MTsKIAl1OAlyZXNldF9yZWFzb246NDsKLQl1OAlzdGFsZV9jb3VudDsKJiM0MzsJdTgJc3RhbGVfY291bnQ7CSAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jayAqLwomIzQzOwl1OAlzdGFsZTsJCSAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jaywKJiM0MzsJCQkJICAgICAqIGlmIHNldCB0aGUgc3ViZmxvdyBpcyB1bmFibGUgdG8gc25kL3JjdgomIzQzOwkJCQkgICAgICogZGF0YSwgdGhlIHNjaGVkdWxlIHNob3VsZCBza2lwIGl0CiYjNDM7CQkJCSAgICAgKi8KIAogCXUzMglzdWJmbG93X2lkOwogCkBAIC0xMTAzLDcgJiM0MzsxMTA2LDcgQEAgaW50IG1wdGNwX3BtX3BhcnNlX2VudHJ5KHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiBib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqbG9jLAogCQkJCSAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqcmVtKTsKLXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzayk7CiYjNDM7dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7CiB2b2lkIG1wdGNwX3BtX25ld19jb25uZWN0aW9uKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCBzZXJ2ZXJfc2lkZSk7CiB2b2lkIG1wdGNwX3BtX2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spOwogYm9vbCBtcHRjcF9wbV9hbGxvd19uZXdfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjk1CgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDcwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNZW1vcnkgTWFuYWdlbWVudCBhbmQgTVBUQ1AgU3RhYmlsaXR5IFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBNUFRDUCBwYXRjaCBpbiBmcm9udCBvZiBtZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgcHJpbWFyaWx5IGZvY3VzZXMgb24gaW1wcm92aW5nIE1QVENQJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdyBjb25kaXRpb25zLiBJIHNlZSBpdCYjMzk7cyBhZGRpbmcgbmV3IE1JQiBjb3VudGVycyB0byB0cmFjayB0aGluZ3MgbGlrZSBiYWNrbG9nIGRyb3BzLCByZWNlaXZlciBwcnVuZWQgcGFja2V0cywgYW5kIG91dC1vZi1vcmRlciBxdWV1ZSBwcnVuaW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydCBmb3Igb2JzZXJ2YWJpbGl0eS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIG5vdyBjaGVja3MgYG1wdGNwX292ZXJfbGltaXRgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaW5ncmVzcyBmbG93IGNvbnRyb2wuIFNpbWlsYXJseSwgYG1wdGNwX3BtX2Noa19zdGFsZWAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gaHVudCBkb3duIHN0YWxlIHN1YmZsb3dzLiBUaGUga2V5IGFyZWFzIGZvciByZXZpZXcgYXJlIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYW5kIGBfX21wdGNwX2FkZF9iYWNrbG9nYCwgYWxsIG9mIHdoaWNoIGFyZSBub3cgY2hlY2tpbmcgbWVtb3J5IGxpbWl0cyBhbmQgZHJvcHBpbmcgcGFja2V0cyBpZiBuZWVkZWQgdXNpbmcgYG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlYC4gYF9fbXB0Y3BfcmV0cmFuc2AgYWxzbyBsb29rcyBsaWtlIGl0JiMzOTtzIGdldHRpbmcgc29tZSB0d2Vha3MgdG8gaW1wcm92ZSBpdHMgcmV0cmFuc21pc3Npb24gY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgd2l0aCBtdWx0aXBsZSBmcmFnbWVudHMuIEFuZCBmaW5hbGx5LCBgbXB0Y3BfcmVsZWFzZV9jYmAgYW5kIGBtcHRjcF9tb3ZlX3NrYnNgIGFyZSB0b3VjaGVkIHRvIG1ha2Ugc3VyZSBiYWNrbG9nIHNwb29saW5nIGlzIGhhbmRsZWQgY29ycmVjdGx5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZT8gVGhhdCYjMzk7cyBhbHdheXMgbXkgZmlyc3Qgd29ycnkgd2l0aCBrZXJuZWwgY2hhbmdlcy4gQnV0IGJhc2VkIG9uIGEgcXVpY2sgc2NhbiwgYW5kIEkmIzM5O3ZlIGdvdCB0byBkbyBhIGRlZXBlciBkaXZlLCBJIGRvbiYjMzk7dCBzZWUgYW55IGdsYXJpbmcgaXNzdWVzLiBUaGUgY2hhbmdlcyBhcmUgYWxtb3N0IGVudGlyZWx5IGZvY3VzZWQgb24gbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIHJlYWNoZWQsIGFuZCBtYWtpbmcgcmV0cmFuc21pc3Npb24gbG9naWMgbW9yZSByb2J1c3QuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIHBhcnRpYWxseSBpbml0aWFsaXplZC4gVGhlIHBhdHRlcm4gaGVyZSBzdWdnZXN0cyBjYXJlZnVsIGF0dGVudGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgZW5jb3VyYWdpbmcuIFNvLCBhdCBmaXJzdCBnbGFuY2UsIEkgKmRvbiYjMzk7dCogc2VlIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcy4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNoYW5nZXMgaW4gYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZSBgX19tcHRjcF9wdXNoX3JldHJhbnNgIGZ1bmN0aW9uIGlzIGV4dHJhY3RlZCBmb3IgY2xhcml0eS4gSXQgaXRlcmF0ZXMgb3ZlciBmcmFnbWVudHMsIHRoZW4gaXQgY2FsbHMgdGhhdCBuZXcgZnVuY3Rpb24gdG8gYWN0dWFsbHkgcHVzaCBhIHJldHJhbnNtaXNzaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIHBvcHBpbmcgb3V0IGhlcmUgZWl0aGVyLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBtcHRjcF9vdmVyX2xpbWl0YC4gVGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCByZWFkaW5nIGV4aXN0aW5nIGBza19yY3ZidWZgIGFuZCBgbXNrLSZndDtiYWNrbG9nX2xlbmAgZmllbGRzIGFuZCBwZXJmb3JtaW5nIGNvbXBhcmlzb25zLiBJdCYjMzk7cyBqdXN0IGNoZWNraW5nIGxpbWl0cywgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyB3cm9uZyB3aXRoIHRoYXQuCgpMYXN0bHksIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIGlzIGl0ZXJhdGluZyBvdmVyIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgdG8gZnJlZSB1cCBtZW1vcnkuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gaGFuZGxpbmcgY29uZ2VzdGlvbi4KCkFsbCBvZiB0aGVzZSBjaGFuZ2VzIHJlYWxseSBzZWVtIHRhcmdldGVkIGF0IHByZXZlbnRpbmcgYW5kIG1pdGlnYXRpbmcgbWVtb3J5IGV4aGF1c3Rpb24gd2l0aGluIE1QVENQLiBCYXNlZCBvbiB0aGlzIGRlZXBlciByZXZpZXcsIGl04oCZcyBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbmQgaW1wb3J0YW50bHksIGl0IHNlZW1zIGxpa2UgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSBmYWlybHkgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOLiBXZSB3b3VsZCBleHBlY3QgS0FTQU4gdG8gcXVpY2tseSBmbGFnIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgdGhhdCB0aGVzZSBjaGFuZ2VzIG1pZ2h0IGludHJvZHVjZS4gSG9uZXN0bHksIEkgZG9uJiMzOTt0IHRoaW5rIEtNU0FOIGlzIG5lZWRlZCBoZXJlLCB1bmxlc3MgdGhlcmUgYXJlIG90aGVyIGNoYW5nZXMgaW4gdGhlIHBhdGNoLiBPdmVyYWxsLCBJJiMzOTttIGZlZWxpbmcgZmFpcmx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLCBwZW5kaW5nIGEgbW9yZSB0aG9yb3VnaCB0ZXN0IHJ1bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gTVBUQ1AgbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgaW50cm9kdWNlcyBuZXcgTUlCIGNvdW50ZXJzLCBhZGRzIG1lbW9yeSBsaW1pdCBjaGVja3MgKGBtcHRjcF9vdmVyX2xpbWl0YCwgYG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlYCksIGltcGxlbWVudHMgb3V0LW9mLW9yZGVyIHF1ZXVlIHBydW5pbmcgKGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgKSwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9vcCAoYF9fbXB0Y3BfcmV0cmFuc2ApLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGV4cG9zaW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseWluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBmb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIHBhY2tldCBkcm9wcGluZyBvciBxdWV1ZSBtYW5pcHVsYXRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBNUFRDUCBtZW1vcnkgYWNjb3VudGluZywgcGFja2V0IGRyb3BwaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5ldyBNSUIgY291bnRlcnMsIGFkZHMgbWVtb3J5IGxpbWl0IGNoZWNrcyAoYG1wdGNwX292ZXJfbGltaXRgLCBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgKSwgaW1wbGVtZW50cyBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZyAoYG1wdGNwX3BydW5lX29mb19xdWV1ZWApLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb29wIChgX19tcHRjcF9yZXRyYW5zYCkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgZXhwb3Npbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgcGFja2V0IGRyb3BwaW5nIG9yIHF1ZXVlIG1hbmlwdWxhdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MTQuMTUwMDUwNzc1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5OTgzNzI0NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICAgIFwibXB0Y3BfcG1fY2hrX3N0YWxlXCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCIsXG4gICAgXCJtcHRjcF9yZWN2bXNnXCIsXG4gICAgXCJtcHRjcF9zZW5kbXNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBNUFRDUCBtZW1vcnkgYWNjb3VudGluZywgcGFja2V0IGRyb3BwaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5ldyBNSUIgY291bnRlcnMsIGFkZHMgbWVtb3J5IGxpbWl0IGNoZWNrcyAoYG1wdGNwX292ZXJfbGltaXRgLCBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgKSwgaW1wbGVtZW50cyBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZyAoYG1wdGNwX3BydW5lX29mb19xdWV1ZWApLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb29wIChgX19tcHRjcF9yZXRyYW5zYCkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgZXhwb3Npbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgcGFja2V0IGRyb3BwaW5nIG9yIHF1ZXVlIG1hbmlwdWxhdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgYWRkcyBuZXcgTUlCIGNvdW50ZXJzIGFuZCBtb2RpZmllcyBjb3JlIE1QVENQIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgX19tcHRjcF9yZXRyYW5zYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHN0YW5kYXJkIE1QVENQIHNvY2tldCBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIHJlY2VpdmUgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MTQuMTUwMDU4MjE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NDczNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjYwNmE3YmM0NjUxMGI4YTk4NDg4YWI1MjY0YjczZmI4NjNmYTg5YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjIxOjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xcbmluZGV4IGYyM2ZkYTBjNTVhNzIuLjI1NjkzODViYWI3Y2EgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL21pYi5jXFxuKysrIGIvbmV0L21wdGNwL21pYi5jXFxuQEAgLTg1LDYgKzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiU2ltdWx0Q29ubmVjdEZhbGxiYWNrXFxcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXFxuIFxcdFNOTVBfTUlCX0lURU0oXFxcIkZhbGxiYWNrRmFpbGVkXFxcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiV2luUHJvYmVcXFwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJCYWNrbG9nRHJvcFxcXCIsIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIlJjdlBydW5lZFxcXCIsIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxcbitcXHRTTk1QX01JQl9JVEVNKFxcXCJPRk9QcnVuZWRcXFwiLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcXG4gfTtcXG4gXFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXFxuaW5kZXggODEyMjE4YjVlZDJiZi4uM2EzNDI1ZTI1OGE3NiAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcXG4rKysgYi9uZXQvbXB0Y3AvbWliLmhcXG5AQCAtODgsNiArODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XFxuIFxcdE1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssXFx0LyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi9cXG4gXFx0TVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELFxcdC8qIENhbid0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXFxuIFxcdE1QVENQX01JQl9XSU5QUk9CRSxcXHRcXHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xcbitcXHRNUFRDUF9NSUJfQkFDS0xPR0RST1AsXFx0XFx0LyogQmFja2xvZyBvdmVyIG1lbW9yeSBsaW1pdCAqL1xcbitcXHRNUFRDUF9NSUJfUkNWUFJVTkVELFxcdFxcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqL1xcbitcXHRNUFRDUF9NSUJfT0ZPUFJVTkVELFxcdFxcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cXG4gXFx0X19NUFRDUF9NSUJfTUFYXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xcbmluZGV4IDEwNTdkNTAwNTc3YjAuLmI4MzE4ZTAzMDEzODkgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuY1xcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcXG5AQCAtMTE5MCw4ICsxMTkwLDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFx0cmV0dXJuIGhtYWMgPT0gbXBfb3B0LVxcdTAwM2VhaG1hYztcXG4gfVxcbiBcXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxcbi0gKiBlbHNlIHJldHVybiB0cnVlLlxcbitzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuK1xcdHUzMiByY3ZidWYgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3JjdmJ1Zik7XFxuK1xcbitcXHRpZiAobGlrZWx5KCh1MzIpc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2M9IHJjdmJ1ZiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICBSRUFEX09OQ0UobXNrLVxcdTAwM2ViYWNrbG9nX2xlbikgXFx1MDAzYz0gcmN2YnVmKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4sIHJzdCBvciBhbHJlYWR5LWFja2VkIHNlZ20uICovXFxuK1xcdGlmIChUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSA9PSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEgfHxcXG4rXFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgKFRDUEhEUl9GSU4gfCBUQ1BIRFJfUlNUKSB8fFxcbitcXHQgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSwgdGNwX3NrKHNzayktXFx1MDAzZXJjdl9ueHQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi9cXG4rXFx0aW5ldF9jc2soc3NrKS1cXHUwMDNlaWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19OT01FTSB8IElDU0tfQUNLX05PVztcXG4rXFx0aW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNzayk7XFxuK1xcbitcXHQvKiBQbGFpbiBUQ1AgKGZhbGxiYWNrKSBhbmQgc2tiIGlzIGRyb3BwZWQgYmVmb3JlIHRoZSBUQ1AgcmVjdiBxdWV1ZS4gKi9cXG4rXFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZRRFJPUCk7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxcbisgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXFxuICAqL1xcbiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuQEAgLTEyMTcsNyArMTI0Myw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRcXHRfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy1cXHUwMDNlY29ubik7XFxuIFxcdFxcdG1wdGNwX2RhdGFfdW5sb2NrKHN1YmZsb3ctXFx1MDAzZWNvbm4pO1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXFx1MDAzZWNvbm4sIHNrLCBza2IpO1xcbiBcXHR9XFxuIFxcbiBcXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFxcdTAwMjZtcF9vcHQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcG0uYyBiL25ldC9tcHRjcC9wbS5jXFxuaW5kZXggNjRhMTIzNmFhYmVlOS4uZDFmNzNjM2UzOWZhMyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xcbisrKyBiL25ldC9tcHRjcC9wbS5jXFxuQEAgLTEwNjUsNyArMTA2NSw4IEBAIGJvb2wgbXB0Y3BfcG1faXNfYmFja3VwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjKVxcbiBcXHRyZXR1cm4gbXB0Y3BfcG1fbmxfaXNfYmFja3VwKG1zaywgXFx1MDAyNnNrY19sb2NhbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbitzdGF0aWMgdm9pZFxcbittcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbiB7XFxuIFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKml0ZXIsICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbkBAIC0xMTAyLDIyICsxMTAzLDM0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jXFxuIFxcdH1cXG4gfVxcbiBcXG4tdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbit2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbiB7XFxuLVxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xcbi1cXHR1MzIgcmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS1cXHUwMDNlcmN2X3RzdGFtcCk7XFxuLVxcbi1cXHQvKiBrZWVwIHRyYWNrIG9mIHJ0eCBwZXJpb2RzIHdpdGggbm8gcHJvZ3Jlc3MgKi9cXG4tXFx0aWYgKCFzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCkge1xcbi1cXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDtcXG4tXFx0XFx0c3ViZmxvdy1cXHUwMDNlc3RhbGVfY291bnQrKztcXG4tXFx0fSBlbHNlIGlmIChzdWJmbG93LVxcdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHtcXG4tXFx0XFx0aWYgKHN1YmZsb3ctXFx1MDAzZXN0YWxlX2NvdW50IFxcdTAwM2MgVThfTUFYKVxcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbitcXG4rXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcXG4rXFx0XFx0c3RydWN0IHNvY2sgKnNzayA9IG1wdGNwX3N1YmZsb3dfdGNwX3NvY2soc3ViZmxvdyk7XFxuK1xcdFxcdHUzMiByY3ZfdHN0YW1wO1xcbitcXG4rXFx0XFx0aWYgKCFfX21wdGNwX3N1YmZsb3dfYWN0aXZlKHN1YmZsb3cpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIE5vIGRhdGEgb3V0c3RhbmRpbmcgYXQgVENQIGxldmVsPyBub3Qgc3RhbGUgKi9cXG4rXFx0XFx0aWYgKHRjcF9ydHhfYW5kX3dyaXRlX3F1ZXVlc19lbXB0eShzc2spKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqL1xcbitcXHRcXHRyY3ZfdHN0YW1wID0gUkVBRF9PTkNFKHRjcF9zayhzc2spLVxcdTAwM2VyY3ZfdHN0YW1wKTtcXG4rXFx0XFx0aWYgKCFzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCkge1xcbitcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDtcXG4gXFx0XFx0XFx0c3ViZmxvdy1cXHUwMDNlc3RhbGVfY291bnQrKztcXG4tXFx0XFx0bXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKG1zaywgc3NrKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3ViZmxvdy1cXHUwMDNlc3RhbGVfY291bnQgPSAwO1xcbi1cXHRcXHRtcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7XFxuK1xcdFxcdH0gZWxzZSBpZiAoc3ViZmxvdy1cXHUwMDNlc3RhbGVfcmN2X3RzdGFtcCA9PSByY3ZfdHN0YW1wKSB7XFxuK1xcdFxcdFxcdGlmIChzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCBcXHUwMDNjIFU4X01BWClcXG4rXFx0XFx0XFx0XFx0c3ViZmxvdy1cXHUwMDNlc3RhbGVfY291bnQrKztcXG4rXFx0XFx0XFx0bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUobXNrLCBzc2spO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCA9IDA7XFxuK1xcdFxcdFxcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCA3YzgxODBkOGQ1ZWZmLi5lYzg3NGQyZWFkNmE0IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMjQyLDYgKzI0Miw2NSBAQCBzdGF0aWMgYm9vbCBtcHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rLyogXFxcIkluc3BpcmVkXFxcIiBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXFxuKyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBza19idWZmICppbl9za2IpXFxuK3tcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4rXFx0c3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2O1xcbitcXHRib29sIHBydW5lZCA9IGZhbHNlO1xcbitcXHR1NjQgbWVtO1xcbitcXG4rXFx0aWYgKFJCX0VNUFRZX1JPT1QoXFx1MDAyNm1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bm9kZSA9IFxcdTAwMjZtc2stXFx1MDAzZW9vb19sYXN0X3NrYi1cXHUwMDNlcmJub2RlO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xcbitcXG4rXFx0XFx0LyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi9cXG4rXFx0XFx0aWYgKGFmdGVyNjQoTVBUQ1BfU0tCX0NCKGluX3NrYiktXFx1MDAzZW1hcF9zZXEsXFxuK1xcdFxcdFxcdCAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbWFwX3NlcSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0cHJ1bmVkID0gdHJ1ZTtcXG4rXFx0XFx0cHJldiA9IHJiX3ByZXYobm9kZSk7XFxuK1xcdFxcdHJiX2VyYXNlKG5vZGUsIFxcdTAwMjZtc2stXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XFxuK1xcdFxcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XFxuK1xcdFxcdG1zay1cXHUwMDNlb29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpO1xcbitcXG4rXFx0XFx0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XFxuK1xcdFxcdGlmIChtZW0gXFx1MDAzYz0gc2stXFx1MDAzZXNrX3JjdmJ1ZilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRub2RlID0gcHJldjtcXG4rXFx0fSB3aGlsZSAobm9kZSk7XFxuK1xcbitcXHRpZiAocHJ1bmVkKVxcbitcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKTtcXG4rfVxcbitcXG4rLyogVGhlIHN0YWNrIGNhbid0IGRyb3AgcGFja2V0cyBmb3IgZmFsbGJhY2sgc29ja2V0IGF0IHRoZSBtc2sgbGV2ZWwsIG9yIHRoZVxcbisgKiBzdHJlYW0gd2lsbCBicmVhay5cXG4rICovXFxuK3N0YXRpYyBib29sIG1wdGNwX2Nhbl9pbmdlc3QoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHJldHVybiB1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgXFx1MDAzYz0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSB8fFxcbitcXHRcXHRcXHRfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1wdGNwX3NrKHNrKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRpZiAoIW1wdGNwX2Nhbl9pbmdlc3Qoc2spKSB7XFxuK1xcdFxcdG1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgc2tiKTtcXG4rXFx0XFx0cmV0dXJuIG1wdGNwX2Nhbl9pbmdlc3Qoc2spO1xcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiAvKiBcXFwiaW5zcGlyZWRcXFwiIGJ5IHRjcF9kYXRhX3F1ZXVlX29mbygpLCBtYWluIGRpZmZlcmVuY2VzOlxcbiAgKiAtIHVzZSBtcHRjcCBzZXFzXFxuICAqIC0gZG9uJ3QgY29wZSB3aXRoIHNhY2tzXFxuQEAgLTI1Myw2ICszMTIsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0dTY0IHNlcSwgZW5kX3NlcSwgbWF4X3NlcTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjE7XFxuIFxcbitcXHRpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7XFxuK1xcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xcbitcXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdHNlcSA9IE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxO1xcbiBcXHRlbmRfc2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXE7XFxuIFxcdG1heF9zZXEgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZtc2stXFx1MDAzZXJjdl93bmRfc2VudCk7XFxuQEAgLTM4OSw2ICs0NTQsMTMgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRpZiAoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEgPT0gbXNrLVxcdTAwM2VhY2tfc2VxKSB7XFxuIFxcdFxcdC8qIGluIHNlcXVlbmNlICovXFxuK2luc2VydDpcXG4rXFx0XFx0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xcbitcXHRcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcXG4rXFx0XFx0XFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRtc2stXFx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xcbiBcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYWNrX3NlcSwgbXNrLVxcdTAwM2VhY2tfc2VxICsgY29weV9sZW4pO1xcbiBcXHRcXHR0YWlsID0gc2tiX3BlZWtfdGFpbChcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xcbkBAIC00MDMsMjYgKzQ3NSwyMCBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBDb21wbGV0ZWx5IG9sZCBkYXRhPyAqL1xcbi1cXHRpZiAoIWFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEsIG1zay1cXHUwMDNlYWNrX3NlcSkpIHtcXG4tXFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xcbi1cXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdC8qIFBhcnRpYWwgcGFja2V0ICovXFxuK1xcdGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxLCBtc2stXFx1MDAzZWFja19zZXEpKSB7XFxuK1xcdFxcdGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEgLSBtc2stXFx1MDAzZWFja19zZXE7XFxuK1xcdFxcdE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgKz0gbXNrLVxcdTAwM2VhY2tfc2VxIC1cXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbWFwX3NlcTtcXG4rXFx0XFx0TVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEgKz0gbXNrLVxcdTAwM2VhY2tfc2VxIC1cXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXE7XFxuK1xcdFxcdGdvdG8gaW5zZXJ0O1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBQYXJ0aWFsIHBhY2tldDogbWFwX3NlcSBcXHUwMDNjIGFja19zZXEgXFx1MDAzYyBlbmRfc2VxLlxcbi1cXHQgKiBTa2lwIHRoZSBhbHJlYWR5LWFja2VkIGJ5dGVzIGFuZCBlbnF1ZXVlIHRoZSBuZXcgZGF0YS5cXG4tXFx0ICovXFxuLVxcdGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEgLSBtc2stXFx1MDAzZWFja19zZXE7XFxuLVxcdE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQgKz0gbXNrLVxcdTAwM2VhY2tfc2VxIC0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXE7XFxuLVxcdE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxICs9IG1zay1cXHUwMDNlYWNrX3NlcSAtXFxuLVxcdFxcdFxcdFxcdCAgICAgIE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VtYXBfc2VxO1xcbi1cXHRtc2stXFx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xcbi1cXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYWNrX3NlcSwgbXNrLVxcdTAwM2VhY2tfc2VxICsgY29weV9sZW4pO1xcbi1cXG4tXFx0c2tiX3NldF9vd25lcl9yKHNrYiwgc2spO1xcbi1cXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdC8qIENvbXBsZXRlbHkgb2xkIGRhdGEgKi9cXG4rXFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xcbitcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1wdGNwX3N0b3BfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcXG5AQCAtNjgxLDYgKzc0Nyw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBzb2NrICpzc2sgPSBza2ItXFx1MDAzZXNrO1xcbiBcXHRib29sIGZyYWdzdG9sZW47XFxuK1xcdHU2NCBsaW1pdDtcXG4gXFx0aW50IGRlbHRhO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7XFxuQEAgLTY4OCw2ICs3NTUsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXFxuK1xcdGxpbWl0ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbitcXHRsaW1pdCArPSAobGltaXQgXFx1MDAzZVxcdTAwM2UgMSkgKyA2NCAqIDEwMjQ7XFxuK1xcdGxpbWl0ID0gbWluX3QodTY0LCBsaW1pdCwgVUlOVF9NQVgpO1xcbitcXHRpZiAobXNrLVxcdTAwM2ViYWNrbG9nX2xlbiBcXHUwMDNlIGxpbWl0IFxcdTAwMjZcXHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcXG4rXFx0XFx0X19NUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfQkFDS0xPR0RST1ApO1xcbitcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9CQUNLTE9HKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkpXFxuIFxcdFxcdHRhaWwgPSBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XFxuQEAgLTc1OSw3ICs4MzYsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFxuIFxcdFxcdFxcdG1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7XFxuIFxcbi1cXHRcXHRcXHRpZiAob3duX21zayBcXHUwMDI2XFx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXFx1MDAzYyBzay1cXHUwMDNlc2tfcmN2YnVmKSB7XFxuK1xcdFxcdFxcdGlmIChvd25fbXNrKSB7XFxuIFxcdFxcdFxcdFxcdG1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTtcXG4gXFx0XFx0XFx0XFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTExNDIsMTMgKzEyMTksNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbi17XFxuLVxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuLVxcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuLVxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgbXB0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbkBAIC0yMjE1LDEyICsyMjg1LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRcXG4gXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4gXFx0Ym9vbCBtb3ZlZCA9IGZhbHNlO1xcbiBcXG4tXFx0KmRlbHRhID0gMDtcXG4gXFx0d2hpbGUgKDEpIHtcXG4tXFx0XFx0LyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJ3QgZHJvcCAqL1xcbi1cXHRcXHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2Ugc2stXFx1MDAzZXNrX3JjdmJ1ZilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbiBcXHRcXHRwcmVmZXRjaChza2ItXFx1MDAzZW5leHQpO1xcbiBcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2tiLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0KmRlbHRhICs9IHNrYi1cXHUwMDNldHJ1ZXNpemU7XFxuQEAgLTIyNDgsOSArMjMxMyw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXFx1MDAzZWJhY2tsb2dfdW5hY2NvdW50ZWQgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3NvY2tldCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7XFxuIFxcbi1cXHQvKiBEb24ndCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkgfHxcXG4tXFx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNlIHNrLVxcdTAwM2Vza19yY3ZidWYpXFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKHNrYnMpO1xcbkBAIC0yMjU4LDIwICsyMzIxLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtb3ZlZCxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxcbi17XFxuLVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuLVxcbi1cXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XFxuLVxcdGxpc3Rfc3BsaWNlKHNrYnMsIFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBza2JzO1xcbiBcXHRib29sIGVucXVldWVkID0gZmFsc2U7XFxuLVxcdHUzMiBtb3ZlZDtcXG4rXFx0dTMyIG1vdmVkID0gMDtcXG4gXFxuIFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuIFxcdHdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXFx1MDAyNnNrYnMpKSB7XFxuQEAgLTIyNzksOCArMjMzNCw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcXHUwMDI2c2ticywgXFx1MDAyNm1vdmVkKTtcXG4gXFxuIFxcdFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuLVxcdFxcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFxcdTAwMjZza2JzKTtcXG4gXFx0fVxcbitcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XFxuIFxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4gXFxuIFxcdGlmIChlbnF1ZXVlZCBcXHUwMDI2XFx1MDAyNiBtcHRjcF9lcG9sbGluX3JlYWR5KHNrKSlcXG5AQCAtMjQ2OSw3ICsyNTI0LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4gXFxuIFxcdFxcdC8qIHN0aWxsIGRhdGEgb3V0c3RhbmRpbmcgYXQgVENQIGxldmVsPyBza2lwIHRoaXMgKi9cXG4gXFx0XFx0aWYgKCF0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc3NrKSkge1xcbi1cXHRcXHRcXHRtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7XFxuIFxcdFxcdFxcdG1pbl9zdGFsZV9jb3VudCA9IG1pbl90KGludCwgbWluX3N0YWxlX2NvdW50LCBzdWJmbG93LVxcdTAwM2VzdGFsZV9jb3VudCk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuQEAgLTI3OTEsNDQgKzI4NDUsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIFxcdHNrX2Vycm9yX3JlcG9ydChzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuKy8qXFxuKyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsXFxuKyAqIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZVxcbisgKi9cXG4rc3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbitcXHRcXHRcXHRcXHR1NjQgc2VudF9zZXEpXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9O1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbi1cXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcXG4gXFx0c3RydWN0IHNvY2sgKnNzaztcXG4tXFx0aW50IHJldCwgZXJyO1xcbi1cXHR1MTYgbGVuID0gMDtcXG4tXFxuLVxcdG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbi1cXG4tXFx0LyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgXFxcInN0YWxlXFxcIiBsb2dpYyAqL1xcbi1cXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xcbi1cXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcXG4tXFx0aWYgKCFkZnJhZykge1xcbi1cXHRcXHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4tXFxuLVxcdFxcdFxcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcXG4tXFx0XFx0XFx0XFx0ICAgaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xcbi1cXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG4tXFx0XFx0XFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcXG4tXFxuLVxcdFxcdFxcdGdvdG8gcmVzZXRfdGltZXI7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcXG4tXFx0XFx0XFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XFxuLVxcbi1cXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbitcXHRpbnQgcmV0LCBsZW4gPSAwO1xcbiBcXG4gXFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcXG4gXFx0XFx0aWYgKFJFQURfT05DRShzdWJmbG93LVxcdTAwM2VzY2hlZHVsZWQpKSB7XFxuK1xcdFxcdFxcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVxcdTAwM2VkYXRhX3NlcTtcXG4gXFx0XFx0XFx0dTE2IGNvcGllZCA9IDA7XFxuIFxcbiBcXHRcXHRcXHRtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpO1xcbkBAIC0yODM4LDcgKzI4NzAsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHRsb2NrX3NvY2soc3NrKTtcXG4gXFxuIFxcdFxcdFxcdC8qIGxpbWl0IHJldHJhbnNtaXNzaW9uIHRvIHRoZSBieXRlcyBhbHJlYWR5IHNlbnQgb24gc29tZSBzdWJmbG93cyAqL1xcbi1cXHRcXHRcXHRpbmZvLnNlbnQgPSAwO1xcbitcXHRcXHRcXHRpbmZvLnNlbnQgPSBvZmZzZXQ7XFxuIFxcdFxcdFxcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVxcdTAwM2Vjc3VtX2VuYWJsZWQpID8gZGZyYWctXFx1MDAzZWRhdGFfbGVuIDpcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQ7XFxuIFxcbkBAIC0yODUzLDcgKzI4ODUsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRcXHRcXHQgICAgIW1zay1cXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1zay1cXHUwMDNlZmFsbGJhY2tfbG9jayk7XFxuIFxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzc2spO1xcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHR3aGlsZSAoaW5mby5zZW50IFxcdTAwM2MgaW5mby5saW1pdCkge1xcbkBAIC0yODc2LDEzICsyOTA4LDk5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzc2spO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbitcXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcXG4rXFx0dTY0IHJldHJhbnNfc2VxLCBzZW50X3NlcTtcXG4rXFx0Ym9vbCBuZWVkX3JldHJhbnM7XFxuK1xcdGludCBlcnIsIGxlbjtcXG4rXFxuK1xcdG1wdGNwX3BtX2Noa19zdGFsZShtc2spO1xcbitcXG4rXFx0LyogR2V0IGFuIHVwZGF0ZWQgYW5kIGNvbnNpc3RlbnQgcnR4IHF1ZXVlIHN0YXR1cy4gKi9cXG4rXFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcXG4rXFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcXG4rXFx0cmV0cmFuc19zZXEgPSBtc2stXFx1MDAzZXNuZF91bmE7XFxuK1xcdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xcbitcXHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xcbitcXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdGJvb2wgYWxyZWFkeV9hY2tlZDtcXG4rXFxuK1xcdFxcdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcXG4rXFx0XFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIWRmcmFnIHx8ICFkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIENhbiBmYWlsIG9ubHkgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cXG4rXFx0XFx0bGVuID0gX19tcHRjcF9wdXNoX3JldHJhbnMoc2ssIGRmcmFnLCByZXRyYW5zX3NlcSk7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFxuK1xcdFxcdHJldHJhbnNfc2VxICs9IGxlbjtcXG4rXFx0XFx0bXNrLVxcdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcXG4rXFx0XFx0ZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCA9IG1heF90KHUxNiwgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHJldHJhbnNfc2VxIC0gZGZyYWctXFx1MDAzZWRhdGFfc2VxKTtcXG4rXFxuK1xcdFxcdC8qIFdpdGggY3N1bSBlbmFibGVkLCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi9cXG4rXFx0XFx0c2VudF9zZXEgPSBkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXFx1MDAzZWRhdGFfc2VxO1xcbitcXHRcXHRpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLVxcdTAwM2VzbmRfbnh0KSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcXG4rXFxuK1xcdFxcdC8qIEF0dGVtcHQgdGhlIG5leHQgZnJhZ21lbnQgb25seSBpZiB0aGUgY3VycmVudCBvbmUgaXNcXG4rXFx0XFx0ICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGJlZm9yZTY0KHJldHJhbnNfc2VxLCBkZnJhZy1cXHUwMDNlZGF0YV9zZXEgKyBkZnJhZy1cXHUwMDNlZGF0YV9sZW4pKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGRmcmFnID0gbGlzdF9pc19sYXN0KFxcdTAwMjZkZnJhZy1cXHUwMDNlbGlzdCwgXFx1MDAyNm1zay1cXHUwMDNlcnR4X3F1ZXVlKSA/XFxuK1xcdFxcdFxcdFxcdE5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpO1xcbitcXHRcXHRpZiAoIWRmcmFnKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIEluY29taW5nIGFja3MgY2FuIG1vdmUgc25kX3VuYSBhZnRlciB0aGUgY3VycmVudCBkZnJhZ1xcbitcXHRcXHQgKiBhY3Jvc3MgbG9vcCBpdGVyYXRpb25zLCBpZiBzbyBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcXG4rXFx0XFx0YWxyZWFkeV9hY2tlZCA9ICFiZWZvcmU2NChtc2stXFx1MDAzZXNuZF91bmEsIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSArXFxuK1xcdFxcdFxcdFxcdFxcdCAgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCk7XFxuK1xcdFxcdGlmIChhbHJlYWR5X2Fja2VkKSB7XFxuK1xcdFxcdFxcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuK1xcdFxcdFxcdHJldHJhbnNfc2VxID0gbXNrLVxcdTAwM2VzbmRfdW5hO1xcbitcXHRcXHRcXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcXG4rXFx0XFx0XFx0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcXG4rXFx0XFx0fSBlbHNlIGlmIChhZnRlcjY0KG1zay1cXHUwMDNlc25kX3VuYSwgcmV0cmFuc19zZXEpKSB7XFxuK1xcdFxcdFxcdHJldHJhbnNfc2VxID0gbXNrLVxcdTAwM2VzbmRfdW5hO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4rXFx0fVxcbiBcXG4tXFx0bXNrLVxcdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcXG4tXFx0ZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCA9IG1heChkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50LCBsZW4pO1xcbitcXHQvKiBBdHRlbXB0IGRhdGEtZmluIHJldHJhbnNtaXNzaW9uIG9ubHkgd2hlbiB0aGUgUlRYIHF1ZXVlIGlzIGVtcHR5LiAqL1xcbitcXHRpZiAoIW5lZWRfcmV0cmFucykge1xcbitcXHRcXHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4gXFxuLVxcdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xcbi1cXHRpZiAoYWZ0ZXI2NChkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXFx1MDAzZWRhdGFfc2VxLCBtc2stXFx1MDAzZXNuZF9ueHQpKVxcbi1cXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlc25kX254dCwgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSk7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcXG4rXFx0XFx0XFx0XFx0ICAgaWNzay1cXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xcbitcXHRcXHRcXHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcXG4rXFx0XFx0XFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcXG4rXFx0XFx0XFx0Z290byByZXNldF90aW1lcjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxcbitcXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4rXFx0fVxcbiBcXG4gcmVzZXRfdGltZXI6XFxuIFxcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XFxuQEAgLTM2NzYsMTIgKzM3OTQsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdF9fbXVzdF9ob2xkKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHR1MzIgbW92ZWQgPSAwO1xcbiBcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay1cXHUwMDNlY2JfZmxhZ3MgXFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XFxuIFxcdFxcdGJvb2wgc3Bvb2xfYmw7XFxuLVxcdFxcdHUzMiBtb3ZlZDtcXG4gXFxuIFxcdFxcdHNwb29sX2JsID0gbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFxcdTAwMjZza2JzKTtcXG4gXFx0XFx0aWYgKCFmbGFncyBcXHUwMDI2XFx1MDAyNiAhc3Bvb2xfYmwpXFxuQEAgLTM3MTQsOSArMzgzMiw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbiBcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spO1xcbi1cXHRcXHRpZiAoc3Bvb2xfYmwpXFxuLVxcdFxcdFxcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFxcdTAwMjZza2JzKTtcXG4gXFx0fVxcbitcXHRpZiAobW92ZWQpXFxuK1xcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVxcdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcXG4gXFxuIFxcdGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChNUFRDUF9DTEVBTl9VTkEsIFxcdTAwMjZtc2stXFx1MDAzZWNiX2ZsYWdzKSlcXG4gXFx0XFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbmluZGV4IDFiODBmMmQ2ZWM1YTIuLmIzYWYzNDYyYmRkMTYgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbkBAIC01ODAsMTIgKzU4MCwxMSBAQCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0IHtcXG4gXFx0XFx0cmVtb3RlX2tleV92YWxpZCA6IDEsICAgICAgICAvKiByZWNlaXZlZCB0aGUgcGVlciBrZXkgZnJvbSAqL1xcbiBcXHRcXHRkaXNwb3NhYmxlIDogMSxcXHQgICAgLyogY3R4IGNhbiBiZSBmcmVlIGF0IHVscCByZWxlYXNlIHRpbWUgKi9cXG4gXFx0XFx0Y2xvc2luZyA6IDEsXFx0ICAgIC8qIG11c3Qgbm90IHBhc3MgcnggZGF0YSB0byBtc2sgYW55bW9yZSAqL1xcbi1cXHRcXHRzdGFsZSA6IDEsXFx0ICAgIC8qIHVuYWJsZSB0byBzbmQvcmN2IGRhdGEsIGRvIG5vdCB1c2UgZm9yIHhtaXQgKi9cXG4gXFx0XFx0dmFsaWRfY3N1bV9zZWVuIDogMSwgICAgICAgIC8qIGF0IGxlYXN0IG9uZSBjc3VtIHZhbGlkYXRlZCAqL1xcbiBcXHRcXHRpc19tcHRmbyA6IDEsXFx0ICAgIC8qIHN1YmZsb3cgaXMgZG9pbmcgVEZPICovXFxuIFxcdFxcdGNsb3NlX2V2ZW50X2RvbmUgOiAxLCAgICAgICAvKiBoYXMgZG9uZSB0aGUgcG9zdC1jbG9zZWQgcGFydCAqL1xcbiBcXHRcXHRtcGNfZHJvcCA6IDEsXFx0ICAgIC8qIHRoZSBNUEMgb3B0aW9uIGhhcyBiZWVuIGRyb3BwZWQgaW4gYSBydHggKi9cXG4tXFx0XFx0X191bnVzZWQgOiA4O1xcbitcXHRcXHRfX3VudXNlZCA6IDk7XFxuIFxcdGJvb2xcXHRkYXRhX2F2YWlsO1xcbiBcXHRib29sXFx0c2NoZWR1bGVkO1xcbiBcXHRib29sXFx0cG1fbGlzdGVuZXI7XFx0ICAgIC8qIGEgbGlzdGVuZXIgbWFuYWdlZCBieSB0aGUga2VybmVsIFBNPyAqL1xcbkBAIC02MDQsNyArNjAzLDExIEBAIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQge1xcbiBcXHR1OFxcdHJlc2V0X3NlZW46MTtcXG4gXFx0dThcXHRyZXNldF90cmFuc2llbnQ6MTtcXG4gXFx0dThcXHRyZXNldF9yZWFzb246NDtcXG4tXFx0dThcXHRzdGFsZV9jb3VudDtcXG4rXFx0dThcXHRzdGFsZV9jb3VudDtcXHQgICAgLyogUHJvdGVjdGVkIGJ5IHRoZSBtc2sgc29ja2V0IGxvY2sgKi9cXG4rXFx0dThcXHRzdGFsZTtcXHRcXHQgICAgLyogUHJvdGVjdGVkIGJ5IHRoZSBtc2sgc29ja2V0IGxvY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgKiBpZiBzZXQgdGhlIHN1YmZsb3cgaXMgdW5hYmxlIHRvIHNuZC9yY3ZcXG4rXFx0XFx0XFx0XFx0ICAgICAqIGRhdGEsIHRoZSBzY2hlZHVsZSBzaG91bGQgc2tpcCBpdFxcbitcXHRcXHRcXHRcXHQgICAgICovXFxuIFxcbiBcXHR1MzJcXHRzdWJmbG93X2lkO1xcbiBcXG5AQCAtMTEwMyw3ICsxMTA2LDcgQEAgaW50IG1wdGNwX3BtX3BhcnNlX2VudHJ5KHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuIGJvb2wgbXB0Y3BfcG1fYWRkcl9mYW1pbGllc19tYXRjaChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqbG9jLFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbSk7XFxuLXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzayk7XFxuK3ZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbiB2b2lkIG1wdGNwX3BtX25ld19jb25uZWN0aW9uKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCBzZXJ2ZXJfc2lkZSk7XFxuIHZvaWQgbXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzayk7XFxuIGJvb2wgbXB0Y3BfcG1fYWxsb3dfbmV3X3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjE1LjQxNTIzNTEwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcyNjEyNDgxNjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX3BtX2Noa19zdGFsZVwiLFxuICAgIFwibXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc1wiLFxuICAgIFwibXB0Y3BfZGF0YV9yZWFkeVwiLFxuICAgIFwibXB0Y3BfcmVjdm1zZ1wiLFxuICAgIFwibXB0Y3Bfc2VuZG1zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNUFRDUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBoYW5kbGUgbWVtb3J5IGxpbWl0cywgYmFja2xvZyBkcm9wcywgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBhZGRzIG5ldyBNSUIgY291bnRlcnMgYW5kIG1vZGlmaWVzIGNvcmUgTVBUQ1AgZnVuY3Rpb25zIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYW5kIGBfX21wdGNwX3JldHJhbnNgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gc3RhbmRhcmQgTVBUQ1Agc29ja2V0IG9wZXJhdGlvbnMgYW5kIG5ldHdvcmsgcmVjZWl2ZSBwYXRocywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNjA2YTdiYzQ2NTEwYjhhOTg0ODhhYjUyNjRiNzNmYjg2M2ZhODlhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjoyMToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xuaW5kZXggZjIzZmRhMGM1NWE3Mi4uMjU2OTM4NWJhYjdjYSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuY1xuKysrIGIvbmV0L21wdGNwL21pYi5jXG5AQCAtODUsNiArODUsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xuIFx0U05NUF9NSUJfSVRFTShcIlNpbXVsdENvbm5lY3RGYWxsYmFja1wiLCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJGYWxsYmFja0ZhaWxlZFwiLCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLFxuIFx0U05NUF9NSUJfSVRFTShcIldpblByb2JlXCIsIE1QVENQX01JQl9XSU5QUk9CRSksXG4rXHRTTk1QX01JQl9JVEVNKFwiQmFja2xvZ0Ryb3BcIiwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKSxcbitcdFNOTVBfTUlCX0lURU0oXCJSY3ZQcnVuZWRcIiwgTVBUQ1BfTUlCX1JDVlBSVU5FRCksXG4rXHRTTk1QX01JQl9JVEVNKFwiT0ZPUHJ1bmVkXCIsIE1QVENQX01JQl9PRk9QUlVORUQpLFxuIH07XG4gXG4gLyogbXB0Y3BfbWliX2FsbG9jIC0gYWxsb2NhdGUgcGVyY3B1IG1pYiBjb3VudGVyc1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggODEyMjE4YjVlZDJiZi4uM2EzNDI1ZTI1OGE3NiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxuKysrIGIvbmV0L21wdGNwL21pYi5oXG5AQCAtODgsNiArODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLLFx0LyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi9cbiBcdE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCxcdC8qIENhbid0IGZhbGxiYWNrIGR1ZSB0byBtc2sgc3RhdHVzICovXG4gXHRNUFRDUF9NSUJfV0lOUFJPQkUsXHRcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXG4rXHRNUFRDUF9NSUJfQkFDS0xPR0RST1AsXHRcdC8qIEJhY2tsb2cgb3ZlciBtZW1vcnkgbGltaXQgKi9cbitcdE1QVENQX01JQl9SQ1ZQUlVORUQsXHRcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cyAqL1xuK1x0TVBUQ1BfTUlCX09GT1BSVU5FRCxcdFx0LyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqL1xuIFx0X19NUFRDUF9NSUJfTUFYXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avb3B0aW9ucy5jIGIvbmV0L21wdGNwL29wdGlvbnMuY1xuaW5kZXggMTA1N2Q1MDA1NzdiMC4uYjgzMThlMDMwMTM4OSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTkwLDggKzExOTAsMzQgQEAgc3RhdGljIGJvb2wgYWRkX2FkZHJfaG1hY192YWxpZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0cmV0dXJuIGhtYWMgPT0gbXBfb3B0LVx1MDAzZWFobWFjO1xuIH1cbiBcbi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksXG4tICogZWxzZSByZXR1cm4gdHJ1ZS5cbitzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbitcdHUzMiByY3ZidWYgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbitcbitcdGlmIChsaWtlbHkoKHUzMilza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNjPSByY3ZidWYgXHUwMDI2XHUwMDI2XG4rXHRcdCAgIFJFQURfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4pIFx1MDAzYz0gcmN2YnVmKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4sIHJzdCBvciBhbHJlYWR5LWFja2VkIHNlZ20uICovXG4rXHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSB8fFxuK1x0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IChUQ1BIRFJfRklOIHwgVENQSERSX1JTVCkgfHxcbitcdCAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVx1MDAzZXJjdl9ueHQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMsIHNjaGVkdWxlIGFuIGFjay4gKi9cbitcdGluZXRfY3NrKHNzayktXHUwMDNlaWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19OT01FTSB8IElDU0tfQUNLX05PVztcbitcdGluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spO1xuK1xuK1x0LyogUGxhaW4gVENQIChmYWxsYmFjaykgYW5kIHNrYiBpcyBkcm9wcGVkIGJlZm9yZSB0aGUgVENQIHJlY3YgcXVldWUuICovXG4rXHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFJDVlFEUk9QKTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgZHJvcCB0aGUgcGFja2V0LCBpLmUuIGluIGNhc2Ugb2YgZXJyb3IsXG4rICogc3ViZmxvdyBoYXMgYmVlbiByZXNldCwgb3Igb3ZlciBtZW1vcnkgbGltaXRzLlxuICAqL1xuIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuQEAgLTEyMTcsNyArMTI0Myw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXHUwMDNlY29ubiwgc2ssIHNrYik7XG4gXHR9XG4gXG4gXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFx1MDAyNm1wX29wdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3BtLmMgYi9uZXQvbXB0Y3AvcG0uY1xuaW5kZXggNjRhMTIzNmFhYmVlOS4uZDFmNzNjM2UzOWZhMyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wbS5jXG4rKysgYi9uZXQvbXB0Y3AvcG0uY1xuQEAgLTEwNjUsNyArMTA2NSw4IEBAIGJvb2wgbXB0Y3BfcG1faXNfYmFja3VwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjKVxuIFx0cmV0dXJuIG1wdGNwX3BtX25sX2lzX2JhY2t1cChtc2ssIFx1MDAyNnNrY19sb2NhbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuK3N0YXRpYyB2b2lkXG4rbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICppdGVyLCAqc3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG5AQCAtMTEwMiwyMiArMTEwMywzNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY1xuIFx0fVxuIH1cbiBcbi12b2lkIG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4rdm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiB7XG4tXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc3NrKTtcbi1cdHUzMiByY3ZfdHN0YW1wID0gUkVBRF9PTkNFKHRjcF9zayhzc2spLVx1MDAzZXJjdl90c3RhbXApO1xuLVxuLVx0Lyoga2VlcCB0cmFjayBvZiBydHggcGVyaW9kcyB3aXRoIG5vIHByb2dyZXNzICovXG4tXHRpZiAoIXN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpIHtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID0gcmN2X3RzdGFtcDtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCsrO1xuLVx0fSBlbHNlIGlmIChzdWJmbG93LVx1MDAzZXN0YWxlX3Jjdl90c3RhbXAgPT0gcmN2X3RzdGFtcCkge1xuLVx0XHRpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCBcdTAwM2MgVThfTUFYKVxuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbitcbitcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4rXHRcdHN0cnVjdCBzb2NrICpzc2sgPSBtcHRjcF9zdWJmbG93X3RjcF9zb2NrKHN1YmZsb3cpO1xuK1x0XHR1MzIgcmN2X3RzdGFtcDtcbitcbitcdFx0aWYgKCFfX21wdGNwX3N1YmZsb3dfYWN0aXZlKHN1YmZsb3cpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBObyBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gbm90IHN0YWxlICovXG4rXHRcdGlmICh0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc3NrKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Lyoga2VlcCB0cmFjayBvZiBydHggcGVyaW9kcyB3aXRoIG5vIHByb2dyZXNzICovXG4rXHRcdHJjdl90c3RhbXAgPSBSRUFEX09OQ0UodGNwX3NrKHNzayktXHUwMDNlcmN2X3RzdGFtcCk7XG4rXHRcdGlmICghc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCkge1xuK1x0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfcmN2X3RzdGFtcCA9IHJjdl90c3RhbXA7XG4gXHRcdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCsrO1xuLVx0XHRtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUobXNrLCBzc2spO1xuLVx0fSBlbHNlIHtcbi1cdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCA9IDA7XG4tXHRcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcbitcdFx0fSBlbHNlIGlmIChzdWJmbG93LVx1MDAzZXN0YWxlX3Jjdl90c3RhbXAgPT0gcmN2X3RzdGFtcCkge1xuK1x0XHRcdGlmIChzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50IFx1MDAzYyBVOF9NQVgpXG4rXHRcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50Kys7XG4rXHRcdFx0bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUobXNrLCBzc2spO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQgPSAwO1xuK1x0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdWJmbG93KTtcbitcdFx0fVxuIFx0fVxuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCA3YzgxODBkOGQ1ZWZmLi5lYzg3NGQyZWFkNmE0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMjQyLDYgKzI0Miw2NSBAQCBzdGF0aWMgYm9vbCBtcHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qIFwiSW5zcGlyZWRcIiBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXG4rICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cbisgKi9cbitzdGF0aWMgdm9pZCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7XG4rXHRib29sIHBydW5lZCA9IGZhbHNlO1xuK1x0dTY0IG1lbTtcbitcbitcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRub2RlID0gXHUwMDI2bXNrLVx1MDAzZW9vb19sYXN0X3NrYi1cdTAwM2VyYm5vZGU7XG4rXG4rXHRkbyB7XG4rXHRcdHN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7XG4rXG4rXHRcdC8qIFN0b3AgcHJ1bmluZyBpZiB0aGUgaW5jb21pbmcgc2tiIHdvdWxkIGxhbmQgaW4gT29PIHRhaWwuICovXG4rXHRcdGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihpbl9za2IpLVx1MDAzZW1hcF9zZXEsXG4rXHRcdFx0ICAgIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRwcnVuZWQgPSB0cnVlO1xuK1x0XHRwcmV2ID0gcmJfcHJldihub2RlKTtcbitcdFx0cmJfZXJhc2Uobm9kZSwgXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XG4rXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdG1zay1cdTAwM2Vvb29fbGFzdF9za2IgPSByYl90b19za2IocHJldik7XG4rXG4rXHRcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xuK1x0XHRpZiAobWVtIFx1MDAzYz0gc2stXHUwMDNlc2tfcmN2YnVmKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRub2RlID0gcHJldjtcbitcdH0gd2hpbGUgKG5vZGUpO1xuK1xuK1x0aWYgKHBydW5lZClcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT1BSVU5FRCk7XG4rfVxuK1xuKy8qIFRoZSBzdGFjayBjYW4ndCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCBhdCB0aGUgbXNrIGxldmVsLCBvciB0aGVcbisgKiBzdHJlYW0gd2lsbCBicmVhay5cbisgKi9cbitzdGF0aWMgYm9vbCBtcHRjcF9jYW5faW5nZXN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRyZXR1cm4gdW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYz0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1ZikpIHx8XG4rXHRcdFx0X19tcHRjcF9jaGVja19mYWxsYmFjayhtcHRjcF9zayhzaykpO1xuK31cbitcbitzdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0aWYgKCFtcHRjcF9jYW5faW5nZXN0KHNrKSkge1xuK1x0XHRtcHRjcF9wcnVuZV9vZm9fcXVldWUoc2ssIHNrYik7XG4rXHRcdHJldHVybiBtcHRjcF9jYW5faW5nZXN0KHNrKTtcbitcdH1cbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKiBcImluc3BpcmVkXCIgYnkgdGNwX2RhdGFfcXVldWVfb2ZvKCksIG1haW4gZGlmZmVyZW5jZXM6XG4gICogLSB1c2UgbXB0Y3Agc2Vxc1xuICAqIC0gZG9uJ3QgY29wZSB3aXRoIHNhY2tzXG5AQCAtMjUzLDYgKzMxMiwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9kYXRhX3F1ZXVlX29mbyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0dTY0IHNlcSwgZW5kX3NlcSwgbWF4X3NlcTtcbiBcdHN0cnVjdCBza19idWZmICpza2IxO1xuIFxuK1x0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuK1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcbitcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0c2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbiBcdGVuZF9zZXEgPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxO1xuIFx0bWF4X3NlcSA9IGF0b21pYzY0X3JlYWQoXHUwMDI2bXNrLVx1MDAzZXJjdl93bmRfc2VudCk7XG5AQCAtMzg5LDYgKzQ1NCwxMyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdGlmIChNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxID09IG1zay1cdTAwM2VhY2tfc2VxKSB7XG4gXHRcdC8qIGluIHNlcXVlbmNlICovXG4raW5zZXJ0OlxuK1x0XHRpZiAoIW1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlKHNrLCBza2IpKSB7XG4rXHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4rXHRcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcbiBcdFx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xuIFx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VhY2tfc2VxLCBtc2stXHUwMDNlYWNrX3NlcSArIGNvcHlfbGVuKTtcbiBcdFx0dGFpbCA9IHNrYl9wZWVrX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5AQCAtNDAzLDI2ICs0NzUsMjAgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbi1cdC8qIENvbXBsZXRlbHkgb2xkIGRhdGE/ICovXG4tXHRpZiAoIWFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgbXNrLVx1MDAzZWFja19zZXEpKSB7XG4tXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbi1cdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0LyogUGFydGlhbCBwYWNrZXQgKi9cbitcdGlmIChhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xuK1x0XHRjb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgLSBtc2stXHUwMDNlYWNrX3NlcTtcbitcdFx0TVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlb2Zmc2V0ICs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbitcdFx0XHRcdFx0ICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuK1x0XHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxICs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbitcdFx0XHRcdFx0ICAgICAgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbitcdFx0Z290byBpbnNlcnQ7XG4gXHR9XG4gXG4tXHQvKiBQYXJ0aWFsIHBhY2tldDogbWFwX3NlcSBcdTAwM2MgYWNrX3NlcSBcdTAwM2MgZW5kX3NlcS5cbi1cdCAqIFNraXAgdGhlIGFscmVhZHktYWNrZWQgYnl0ZXMgYW5kIGVucXVldWUgdGhlIG5ldyBkYXRhLlxuLVx0ICovXG4tXHRjb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgLSBtc2stXHUwMDNlYWNrX3NlcTtcbi1cdE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldCArPSBtc2stXHUwMDNlYWNrX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4tXHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxICs9IG1zay1cdTAwM2VhY2tfc2VxIC1cbi1cdFx0XHRcdCAgICAgIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4tXHRtc2stXHUwMDNlYnl0ZXNfcmVjZWl2ZWQgKz0gY29weV9sZW47XG4tXHRXUklURV9PTkNFKG1zay1cdTAwM2VhY2tfc2VxLCBtc2stXHUwMDNlYWNrX3NlcSArIGNvcHlfbGVuKTtcbi1cbi1cdHNrYl9zZXRfb3duZXJfcihza2IsIHNrKTtcbi1cdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTtcbi1cdHJldHVybiB0cnVlO1xuK1x0LyogQ29tcGxldGVseSBvbGQgZGF0YSAqL1xuK1x0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0RVUERBVEEpO1xuK1x0bXB0Y3BfZHJvcChzaywgc2tiKTtcbitcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXB0Y3Bfc3RvcF9ydHhfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxuQEAgLTY4MSw2ICs3NDcsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbiBcdHN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDtcbiBcdHN0cnVjdCBzb2NrICpzc2sgPSBza2ItXHUwMDNlc2s7XG4gXHRib29sIGZyYWdzdG9sZW47XG4rXHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4OCw2ICs3NTUsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdC8qIFNpbWlsYXIgYWRkaXRpb25hbCBhbGxvd2FuY2UgYXMgcGxhaW4gVENQLiAqL1xuK1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbitcdGxpbWl0ICs9IChsaW1pdCBcdTAwM2VcdTAwM2UgMSkgKyA2NCAqIDEwMjQ7XG4rXHRsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTtcbitcdGlmIChtc2stXHUwMDNlYmFja2xvZ19sZW4gXHUwMDNlIGxpbWl0IFx1MDAyNlx1MDAyNiAhX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7XG4rXHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbitcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfQkFDS0xPRyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdC8qIFRyeSB0byBjb2FsZXNjZSB3aXRoIHRoZSBsYXN0IHNrYiBpbiBvdXIgYmFja2xvZyAqL1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHR0YWlsID0gbGlzdF9sYXN0X2VudHJ5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTtcbkBAIC03NTksNyArODM2LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXG4gXHRcdFx0bXB0Y3BfaW5pdF9za2Ioc3NrLCBza2IsIG9mZnNldCwgbGVuKTtcbiBcbi1cdFx0XHRpZiAob3duX21zayBcdTAwMjZcdTAwMjYgc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYyBzay1cdTAwM2Vza19yY3ZidWYpIHtcbitcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTQyLDEzICsxMjE5LDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcbiBcdG1wdGNwX3dyaXRlX3NwYWNlKHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4te1xuLVx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbi1cdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4tXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbkBAIC0yMjE1LDEyICsyMjg1LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRib29sIG1vdmVkID0gZmFsc2U7XG4gXG4tXHQqZGVsdGEgPSAwO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJ3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgKz0gc2tiLVx1MDAzZXRydWVzaXplO1xuQEAgLTIyNDgsOSArMjMxMyw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfdW5hY2NvdW50ZWQgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3NvY2tldCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7XG4gXG4tXHQvKiBEb24ndCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdElOSVRfTElTVF9IRUFEKHNrYnMpO1xuQEAgLTIyNTgsMjAgKzIzMjEsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtb3ZlZCxcbi1cdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbi17XG4tXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuLVxuLVx0V1JJVEVfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcbi1cdGxpc3Rfc3BsaWNlKHNrYnMsIFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpO1xuLX1cbi1cbiBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxuIHtcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4rXHR1MzIgbW92ZWQgPSAwO1xuIFxuIFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbiBcdHdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticykpIHtcbkBAIC0yMjc5LDggKzIzMzQsOCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRlbnF1ZXVlZCB8PSBfX21wdGNwX21vdmVfc2ticyhzaywgXHUwMDI2c2ticywgXHUwMDI2bW92ZWQpO1xuIFxuIFx0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuLVx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbitcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI0NjksNyArMjUyNCw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4gXG4gXHRcdC8qIHN0aWxsIGRhdGEgb3V0c3RhbmRpbmcgYXQgVENQIGxldmVsPyBza2lwIHRoaXMgKi9cbiBcdFx0aWYgKCF0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc3NrKSkge1xuLVx0XHRcdG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKG1zaywgc3NrKTtcbiBcdFx0XHRtaW5fc3RhbGVfY291bnQgPSBtaW5fdChpbnQsIG1pbl9zdGFsZV9jb3VudCwgc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbkBAIC0yNzkxLDQ0ICsyODQ1LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbisvKlxuKyAqIFJldHJhbnNtaXQgdGhlIHNwZWNpZmllZCBkYXRhIGZyYWdtZW50IG9uIGFsbCB0aGUgc2VsZWN0ZWQgc3ViZmxvd3MsXG4rICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXG4rICovXG4rc3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxuK1x0XHRcdFx0dTY0IHNlbnRfc2VxKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuLVx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrO1xuLVx0aW50IHJldCwgZXJyO1xuLVx0dTE2IGxlbiA9IDA7XG4tXG4tXHRtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbi1cbi1cdC8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrIFwic3RhbGVcIiBsb2dpYyAqL1xuLVx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbi1cdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xuLVx0aWYgKCFkZnJhZykge1xuLVx0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4tXHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuLVxuLVx0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuLVx0XHRcdFx0ICAgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XG4tXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4tXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbi1cbi1cdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbi1cdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbi1cbi1cdFx0Z290byByZXNldF90aW1lcjtcbi1cdH1cbi1cbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4rXHRpbnQgcmV0LCBsZW4gPSAwO1xuIFxuIFx0bXB0Y3BfZm9yX2VhY2hfc3ViZmxvdyhtc2ssIHN1YmZsb3cpIHtcbiBcdFx0aWYgKFJFQURfT05DRShzdWJmbG93LVx1MDAzZXNjaGVkdWxlZCkpIHtcbitcdFx0XHR1MTYgb2Zmc2V0ID0gc2VudF9zZXEgLSBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiBcdFx0XHR1MTYgY29waWVkID0gMDtcbiBcbiBcdFx0XHRtcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpO1xuQEAgLTI4MzgsNyArMjg3MCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0bG9ja19zb2NrKHNzayk7XG4gXG4gXHRcdFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXG4tXHRcdFx0aW5mby5zZW50ID0gMDtcbitcdFx0XHRpbmZvLnNlbnQgPSBvZmZzZXQ7XG4gXHRcdFx0aW5mby5saW1pdCA9IFJFQURfT05DRShtc2stXHUwMDNlY3N1bV9lbmFibGVkKSA/IGRmcmFnLVx1MDAzZWRhdGFfbGVuIDpcbiBcdFx0XHRcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudDtcbiBcbkBAIC0yODUzLDcgKzI4ODUsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdCAgICAhbXNrLVx1MDAzZWFsbG93X3N1YmZsb3dzKSB7XG4gXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtc2stXHUwMDNlZmFsbGJhY2tfbG9jayk7XG4gXHRcdFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbi1cdFx0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1x0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3aGlsZSAoaW5mby5zZW50IFx1MDAzYyBpbmZvLmxpbWl0KSB7XG5AQCAtMjg3NiwxMyArMjkwOCw5OSBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuIFx0XHR9XG4gXHR9XG4rXHRyZXR1cm4gbGVuO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuK1x0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4rXHR1NjQgcmV0cmFuc19zZXEsIHNlbnRfc2VxO1xuK1x0Ym9vbCBuZWVkX3JldHJhbnM7XG4rXHRpbnQgZXJyLCBsZW47XG4rXG4rXHRtcHRjcF9wbV9jaGtfc3RhbGUobXNrKTtcbitcbitcdC8qIEdldCBhbiB1cGRhdGVkIGFuZCBjb25zaXN0ZW50IHJ0eCBxdWV1ZSBzdGF0dXMuICovXG4rXHRtcHRjcF9kYXRhX2xvY2soc2spO1xuK1x0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbitcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbitcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4rXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdGJvb2wgYWxyZWFkeV9hY2tlZDtcbitcbitcdFx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRicmVhaztcbitcbitcdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbitcdFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWRmcmFnIHx8ICFkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIENhbiBmYWlsIG9ubHkgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbitcdFx0bGVuID0gX19tcHRjcF9wdXNoX3JldHJhbnMoc2ssIGRmcmFnLCByZXRyYW5zX3NlcSk7XG4rXHRcdGlmIChsZW4gXHUwMDNjIDApXG4rXHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4rXG4rXHRcdHJldHJhbnNfc2VxICs9IGxlbjtcbitcdFx0bXNrLVx1MDAzZWJ5dGVzX3JldHJhbnMgKz0gbGVuO1xuK1x0XHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCxcbitcdFx0XHRcdFx0ICAgIHJldHJhbnNfc2VxIC0gZGZyYWctXHUwMDNlZGF0YV9zZXEpO1xuK1xuK1x0XHQvKiBXaXRoIGNzdW0gZW5hYmxlZCwgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4rXHRcdHNlbnRfc2VxID0gZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXE7XG4rXHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4rXHRcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgc2VudF9zZXEpO1xuK1xuK1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4rXHRcdCAqIGNvbXBsZXRlbHkgcmV0cmFuc21pdHRlZC5cbitcdFx0ICovXG4rXHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgKyBkZnJhZy1cdTAwM2VkYXRhX2xlbikpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGRmcmFnID0gbGlzdF9pc19sYXN0KFx1MDAyNmRmcmFnLVx1MDAzZWxpc3QsIFx1MDAyNm1zay1cdTAwM2VydHhfcXVldWUpID9cbitcdFx0XHRcdE5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpO1xuK1x0XHRpZiAoIWRmcmFnKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBJbmNvbWluZyBhY2tzIGNhbiBtb3ZlIHNuZF91bmEgYWZ0ZXIgdGhlIGN1cnJlbnQgZGZyYWdcbitcdFx0ICogYWNyb3NzIGxvb3AgaXRlcmF0aW9ucywgaWYgc28gc3RhcnQgYWdhaW4gZnJvbSBSVFggaGVhZC5cbitcdFx0ICovXG4rXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4rXHRcdGFscmVhZHlfYWNrZWQgPSAhYmVmb3JlNjQobXNrLVx1MDAzZXNuZF91bmEsIGRmcmFnLVx1MDAzZWRhdGFfc2VxICtcbitcdFx0XHRcdFx0ICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpO1xuK1x0XHRpZiAoYWxyZWFkeV9hY2tlZCkge1xuK1x0XHRcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4rXHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbitcdFx0XHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbitcdFx0XHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuK1x0XHR9IGVsc2UgaWYgKGFmdGVyNjQobXNrLVx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xuK1x0XHRcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRcdH1cbitcdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuK1x0fVxuIFxuLVx0bXNrLVx1MDAzZWJ5dGVzX3JldHJhbnMgKz0gbGVuO1xuLVx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4KGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCwgbGVuKTtcbitcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXG4rXHRpZiAoIW5lZWRfcmV0cmFucykge1xuK1x0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4rXHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFxuLVx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4tXHRpZiAoYWZ0ZXI2NChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcSwgbXNrLVx1MDAzZXNuZF9ueHQpKVxuLVx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VzbmRfbnh0LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4rXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4rXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgKyAxKTtcbitcdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbitcdFx0XHRtcHRjcF9zZW5kX2Fjayhtc2spO1xuK1x0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuK1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1x0fVxuIFxuIHJlc2V0X3RpbWVyOlxuIFx0bXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHNrKTtcbkBAIC0zNjc2LDEyICszNzk0LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdGZvciAoOzspIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IChtc2stXHUwMDNlY2JfZmxhZ3MgXHUwMDI2IE1QVENQX0ZMQUdTX1BST0NFU1NfQ1RYX05FRUQpO1xuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGpvaW5fbGlzdCwgc2ticztcbiBcdFx0Ym9vbCBzcG9vbF9ibDtcbi1cdFx0dTMyIG1vdmVkO1xuIFxuIFx0XHRzcG9vbF9ibCA9IG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHNrLCBcdTAwMjZza2JzKTtcbiBcdFx0aWYgKCFmbGFncyBcdTAwMjZcdTAwMjYgIXNwb29sX2JsKVxuQEAgLTM3MTQsOSArMzgzMiw5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spO1xuLVx0XHRpZiAoc3Bvb2xfYmwpXG4tXHRcdFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXHUwMDI2c2ticyk7XG4gXHR9XG4rXHRpZiAobW92ZWQpXG4rXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXG4gXHRpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfQ0xFQU5fVU5BLCBcdTAwMjZtc2stXHUwMDNlY2JfZmxhZ3MpKVxuIFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDFiODBmMmQ2ZWM1YTIuLmIzYWYzNDYyYmRkMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC01ODAsMTIgKzU4MCwxMSBAQCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0IHtcbiBcdFx0cmVtb3RlX2tleV92YWxpZCA6IDEsICAgICAgICAvKiByZWNlaXZlZCB0aGUgcGVlciBrZXkgZnJvbSAqL1xuIFx0XHRkaXNwb3NhYmxlIDogMSxcdCAgICAvKiBjdHggY2FuIGJlIGZyZWUgYXQgdWxwIHJlbGVhc2UgdGltZSAqL1xuIFx0XHRjbG9zaW5nIDogMSxcdCAgICAvKiBtdXN0IG5vdCBwYXNzIHJ4IGRhdGEgdG8gbXNrIGFueW1vcmUgKi9cbi1cdFx0c3RhbGUgOiAxLFx0ICAgIC8qIHVuYWJsZSB0byBzbmQvcmN2IGRhdGEsIGRvIG5vdCB1c2UgZm9yIHhtaXQgKi9cbiBcdFx0dmFsaWRfY3N1bV9zZWVuIDogMSwgICAgICAgIC8qIGF0IGxlYXN0IG9uZSBjc3VtIHZhbGlkYXRlZCAqL1xuIFx0XHRpc19tcHRmbyA6IDEsXHQgICAgLyogc3ViZmxvdyBpcyBkb2luZyBURk8gKi9cbiBcdFx0Y2xvc2VfZXZlbnRfZG9uZSA6IDEsICAgICAgIC8qIGhhcyBkb25lIHRoZSBwb3N0LWNsb3NlZCBwYXJ0ICovXG4gXHRcdG1wY19kcm9wIDogMSxcdCAgICAvKiB0aGUgTVBDIG9wdGlvbiBoYXMgYmVlbiBkcm9wcGVkIGluIGEgcnR4ICovXG4tXHRcdF9fdW51c2VkIDogODtcbitcdFx0X191bnVzZWQgOiA5O1xuIFx0Ym9vbFx0ZGF0YV9hdmFpbDtcbiBcdGJvb2xcdHNjaGVkdWxlZDtcbiBcdGJvb2xcdHBtX2xpc3RlbmVyO1x0ICAgIC8qIGEgbGlzdGVuZXIgbWFuYWdlZCBieSB0aGUga2VybmVsIFBNPyAqL1xuQEAgLTYwNCw3ICs2MDMsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7XG4gXHR1OFx0cmVzZXRfc2VlbjoxO1xuIFx0dThcdHJlc2V0X3RyYW5zaWVudDoxO1xuIFx0dThcdHJlc2V0X3JlYXNvbjo0O1xuLVx0dThcdHN0YWxlX2NvdW50O1xuK1x0dThcdHN0YWxlX2NvdW50O1x0ICAgIC8qIFByb3RlY3RlZCBieSB0aGUgbXNrIHNvY2tldCBsb2NrICovXG4rXHR1OFx0c3RhbGU7XHRcdCAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jayxcbitcdFx0XHRcdCAgICAgKiBpZiBzZXQgdGhlIHN1YmZsb3cgaXMgdW5hYmxlIHRvIHNuZC9yY3ZcbitcdFx0XHRcdCAgICAgKiBkYXRhLCB0aGUgc2NoZWR1bGUgc2hvdWxkIHNraXAgaXRcbitcdFx0XHRcdCAgICAgKi9cbiBcbiBcdHUzMlx0c3ViZmxvd19pZDtcbiBcbkBAIC0xMTAzLDcgKzExMDYsNyBAQCBpbnQgbXB0Y3BfcG1fcGFyc2VfZW50cnkoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyxcbiBib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpsb2MsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbSk7XG4tdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKTtcbit2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiB2b2lkIG1wdGNwX3BtX25ld19jb25uZWN0aW9uKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCBzZXJ2ZXJfc2lkZSk7XG4gdm9pZCBtcHRjcF9wbV9mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKTtcbiBib29sIG1wdGNwX3BtX2FsbG93X25ld19zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MTUuNDE1MjM3Mzg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4OTk3NzU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNUFRDUCBDb2RlIENoYW5nZXMgYW5kIEZ1enppbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgTVBUQ1Agc3Vic3lzdGVtOiBgbmV0L21wdGNwL21pYi5jYCwgYG5ldC9tcHRjcC9taWIuaGAsIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCwgYG5ldC9tcHRjcC9wbS5jYCwgYG5ldC9tcHRjcC9wcm90b2NvbC5jYCwgYW5kIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAuIExvb2tzIGxpa2UgdGhlIGNvcmUgTVBUQ1AgaW1wbGVtZW50YXRpb24gaXMgYmVpbmcgdXBkYXRlZC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbmV3IE1JQiBjb3VudGVycyBmb3IgTVBUQ1Atc3BlY2lmaWMgZXZlbnRzLCBsaWtlIGJhY2tsb2cgZHJvcHMsIHJlY2VpdmUgcHJ1bmluZywgYW5kIG91dC1vZi1vcmRlciBkYXRhIHBydW5pbmcuIFRoYXTigJlzIGEgZ29vZCBhZGRpdGlvbiBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcy5cblxuSSBhbHNvIHNlZSBtb2RpZmljYXRpb25zIHRvIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgcHJvYmFibHkgdG8gaW50ZWdyYXRlIGEgY2hlY2sgZm9yIGBtcHRjcF9vdmVyX2xpbWl0YC4gTWFrZXMgc2Vuc2U7IG1hbmFnaW5nIG1lbW9yeSBsaW1pdHMgaXMgY3J1Y2lhbCBpbiBhIE11bHRpcGF0aCBjb250ZXh0LiBBbmQgdGhlIGZhY3QgdGhhdCB3ZSdyZSBzZWVpbmcgY2hhbmdlcyB0byBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBhbmQgYG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlYCBoaW50cyBhdCBzb21lIHVwZGF0ZXMgdG8gdGhlIHBhdGggbWFuYWdlciwgcG9zc2libHkgcmVsYXRlZCB0byBoYW5kbGluZyBzdGFsZSBzdWJmbG93cyBvciBtZW1vcnkgbGltaXRhdGlvbnMuXG5cbkJleW9uZCB0aGF0LCB0aGUgcGF0Y2ggc2VlbXMgdG8gdG91Y2ggb24gY29yZSBkYXRhIGhhbmRsaW5nIHdpdGggYWRqdXN0bWVudHMgdG8gYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCwgYF9fbXB0Y3BfbW92ZV9za2JgLCBgX19tcHRjcF9hZGRfYmFja2xvZ2AsIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCBgbXB0Y3BfbW92ZV9za2JzYCwgYF9fbXB0Y3BfcmV0cmFuc2AsIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEl0IGRlZmluaXRlbHkgbG9va3MgbGlrZSBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBNUFRDUC4gSXQncyBoYW5kbGluZyBtZW1vcnkgbWFuYWdlbWVudCwgYmFja2xvZyBkcm9wcywgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLCB3aGljaCBtZWFucyBpdCBpcyBoYW5kbGluZyBjcnVjaWFsIHN0YXRlcyBhbmQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBvZiBob3cgTVBUQ1Agb3BlcmF0ZXMuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiB0aGVzZSBmdW5jdGlvbnMsIHRoaXMgaXMgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IENPTkZJRyBvcHRpb25zIGVuYWJsZSBNUFRDUCBzbyBJIGNhbiBidWlsZCBhIHRlc3QgZW52aXJvbm1lbnQuIE9idmlvdXNseSwgYENPTkZJR19NUFRDUGAgaXMgdGhlIGtleSwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBHb29kIGNoYW5jZSB0byByZWFsbHkgc2hha2UgdGhpbmdzIGRvd24gYW5kIGh1bnQgZm9yIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjIxLjkwNTIxODA1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY4NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvS2NvbmZpZy0xLVxcbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMy1cXHRib29sIFxcXCJNUFRDUDogTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxcbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxubmV0L21wdGNwL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMToyMS45NDg5MDU5NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzYwMTM1MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgaXMgY2xlYXI6IHdlJ3JlIGRlYWxpbmcgd2l0aCBNUFRDUC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3ZSd2ZSBnb3QgdGhlIGNvcmUgY29tcG9uZW50cyBpbiBwbGFjZTogYE1QVENQYCBpcyB0aGUgZXNzZW50aWFsIHBpZWNlLCBvZiBjb3Vyc2UuIFRoZW4sIGBNUFRDUF9JUFY2YOKAlHdoaWxlIG9wdGlvbmFsLCBpdCdzIHByZXR0eSBtdWNoIGEgbm8tYnJhaW5lciB0byBlbmFibGUgdGhhdCwgY29uc2lkZXJpbmcgdGhlIGZ1dHVyZSBvZiBuZXR3b3JraW5nLlxuXG5Ob3csIHdoZXJlIGRvIEkgc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGNydWNpYWwgZGV0YWlscz8gSSdsbCBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L21wdGNwL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGltZSB0byBkaXNzZWN0IHRoYXQgYW5kIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBleGVyY2lzZSwgYnV0IGFzIGFsd2F5cywgdGhvcm91Z2huZXNzIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMToyNS4zMDkwNDM5MTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MjUuMzA5MTkxNjUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MDE5MjA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIE1vZGlmaWVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXM7IGl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IHRoZSBgSU5FVGAgZGVwZW5kZW5jeSBpcyBwbGF5aW5nIGEgcm9sZSwgYnV0IHRoZSByZWFsIG1lYXQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaGVyZSBjZW50ZXJzIGFyb3VuZCBgTVBUQ1BgLiBUaGF0J3MgdGhlIGNvcmUgZm9jdXMuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiB0d2Vha2VkLCBhbmQgd2h5LiBXZSBoYXZlIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaGF2ZSBiZWVuIGFsdGVyZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIGFsdGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIHRoZSBsaXN0IGluY2x1ZGVzIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AsIGBfX21wdGNwX21vdmVfc2tiYCwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLCBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCwgYG1wdGNwX21vdmVfc2tic2AsIGBfX21wdGNwX3JldHJhbnNgLCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBJdCBzZWVtcyBhIHByZXR0eSBicm9hZCByYW5nZSBvZiBhcmVhcyBoYXZlIGJlZW4gdG91Y2hlZC5cblxuT2theSwgbGV0J3Mgc2VlLCBnaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGlnIGludG8gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBmb3Igc3BlY2lmaWMgY2hhbmdlcyB0byBgX19tcHRjcF9yZXRyYW5zYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBUaGF0J2xsIHByb2JhYmx5IHRlbGwgbWUgdGhlIGJlc3Qgd2F5IGZvcndhcmQuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMTozMS4xOTkzODY1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA3NjEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTI9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkxMy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTE0OnN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkxNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjMxLjI0NTQ2NjM5N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTU1ODEzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEEgUXVpY2sgU2NhbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nLiBXZSdyZSBsb29raW5nIGZvciBjb2RlIHBhdGhzIHRoYXQgYXJlIGR5bmFtaWMsIHRoYXQgdGFrZSBpbnB1dCwgYW5kIGFyZSB0aGVyZWZvcmUgc3VzY2VwdGlibGUgdG8gdW5leHBlY3RlZCBkYXRhLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSwgYnkgdGhlaXIgbmF0dXJlLCBsZXNzIGxpa2VseSB0byBvZmZlciB1cyBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMg4oCTIHRoZXkncmUgcHJlZGljdGFibGUuIFNvLCBsZXQncyBza2lwIHRob3NlLiBUaGUgcmVhbCBnb2xkIGlzIGluIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCwgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgc3lzdGVtLCB3aGVyZSBleHRlcm5hbCBkYXRhIGNhbiBmbG93IGluLlxuXG5MZXQncyBzZWUuLi4gKm1wdGNwX2luY29taW5nX29wdGlvbnMqLiBBaCwgaW50ZXJlc3RpbmcuIFRoZSBmYWN0IHRoYXQgaXQncyAqbm9uLXN0YXRpYyogaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBOb24tc3RhdGljLCBJIGludGVycHJldCB0aGF0IGFzIHBvdGVudGlhbGx5IGV4cG9zZWQsIHBvdGVudGlhbGx5IGFjY2VwdGluZyBleHRlcm5hbCBpbnB1dC4gVGhpcyBpcyB0aGUga2luZCBvZiBmdW5jdGlvbiB0aGF0IGRlc2VydmVzIGEgY2xvc2VyIGxvb2suIEl0J3MgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHRoZSBwcmVjaXNlIG5hdHVyZSBvZiBpdHMgaW5wdXQgYW5kIHByb2Nlc3NpbmcgbG9naWMuIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBmdXp6aW5nIGFuZCB3aGF0IEkgc2hvdWxkIGFpbSBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTA3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6MzUuMjYxMDUwMDI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI0ODE0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL29wdGlvbnMuYz0xMTkzPXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIxLSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTIyMjpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjM1LjMwNjMwMjYwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTk0MDc4MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBgbXB0Y3BfcG1fY2hrX3N0YWxlYCoqXG5cblJpZ2h0LCBgbXB0Y3BfcG1fY2hrX3N0YWxlYC4gVGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGF0IGltcGxpZXMgdGhpcyBmdW5jdGlvbiBoYXMgZXh0ZXJuYWwgbGlua2FnZSB3aXRoaW4gdGhlIE11bHRpUGF0aCBUQ1AgKE1QVENQKSBrZXJuZWwgbW9kdWxlLiBJdCBtZWFucyBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgYW5kIGNhbGxhYmxlIGZyb20gb3RoZXIgbW9kdWxlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIGV4cG9zZWQgaW4gdGhlIG1vZHVsZSdzIHN5bWJvbCB0YWJsZS4gVGhpcyByYWlzZXMgYSBmZXcgaW1tZWRpYXRlIGNvbnNpZGVyYXRpb25zOlxuXG4qICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSWYgaXQncyB1c2VkIGVsc2V3aGVyZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIE1QVENQIGVjb3N5c3RlbSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIE1QVENQIGZ1bmN0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQga2VybmVsIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgd2hvJ3MgcmVseWluZyBvbiBpdHMgZXhpc3RlbmNlIGFuZCB3aGF0IHRob3NlIGV4dGVybmFsIHVzYWdlcyBhcmUuXG4qICAgKipBUEkgRGVzaWduIChpZiBhbnkpOioqIElzIGBtcHRjcF9wbV9jaGtfc3RhbGVgIG1lYW50IHRvIGJlIGEgcGFydCBvZiBhIGRlZmluZWQgTVBUQ1AgQVBJPyBJZiBzbywgaXMgdGhpcyBhICpnb29kKiBBUEk/IElzIGl0IHN0YWJsZSwgd2VsbC1kb2N1bWVudGVkLCBhbmQgYmFja3dhcmQgY29tcGF0aWJsZT9cbiogICAqKlNlY3VyaXR5IEltcGxpY2F0aW9uczoqKiBJZiBpdCdzIGV4cG9zZWQsIGEgY2FyZWZ1bCByZXZpZXcgaXMgbmVjZXNzYXJ5IHRvIHNlZSBpZiBpdCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBtYWxpY2lvdXMgaW50ZW50LiBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyBhc3NvY2lhdGVkIHdpdGggaXRzIGlucHV0cyBvciByZXR1cm4gdmFsdWU/XG4qICAgKipNYWludGFpbmFiaWxpdHkgYW5kIFJlZmFjdG9yaW5nOioqIElmIGl0J3Mgd2lkZWx5IHVzZWQsIG1ha2luZyBjaGFuZ2VzIHRvIGl0cyBzaWduYXR1cmUgb3IgYmVoYXZpb3IgYmVjb21lcyBhIGJpZ2dlciBkZWFsLiBUaGlzIG5vbi1zdGF0aWMgZGVjbGFyYXRpb24gcG90ZW50aWFsbHkgaW1wb3NlcyByZXN0cmljdGlvbnMgb24gZnV0dXJlIHJlZmFjdG9yaW5nIGVmZm9ydHMgd2l0aGluIHRoZSBNUFRDUCBjb2RlLiBJZiBpdCdzIG9ubHkgdXNlZCBpbnRlcm5hbGx5LCBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBtYWtlIGl0IHN0YXRpYyB3aXRob3V0IGFmZmVjdGluZyBhbnlvbmUuIEkgd2lsbCBhbHNvIGhhdmUgdG8gY2hlY2sgaWYgaXQncyB1c2VkIGVsc2V3aGVyZSwgYW5kIGlmIGl0IGlzLCB0aGUgY29kZSB1c2luZyBpdC5cblxuTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmaWd1cmUgb3V0ICp3aHkqIGl0J3Mgbm9uLXN0YXRpYy4gVGhlIGFuc3dlciB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIE1QVENQIGFyY2hpdGVjdHVyZSBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyBpZiB0aGlzIGlzIGludGVudGlvbmFsIEFQSSBkZXNpZ24gb3IgYW4gYWNjaWRlbnQgd2lsbCBiZSBteSBnb2FsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjM5LjkwMDM4Mjc0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjEwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wbS5jPTEwNjk9bXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTExMDUtXFxubmV0L21wdGNwL3BtLmM6MTEwNjp2b2lkIG1wdGNwX3BtX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wbS5jLTExMDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMTozOS45NDYxMDczMDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMTU1MzkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnRlcm5hbCBOb3RlcyBvbiBgbXB0Y3BfcmVsZWFzZV9jYmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF9yZWxlYXNlX2NiYCBmdW5jdGlvbiBhbmQgaW1tZWRpYXRlbHksIHRoZSBmYWN0IHRoYXQgaXQncyBkZWNsYXJlZCBgc3RhdGljYCBqdW1wcyBvdXQgYXQgbWUuIFRoYXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoLCBnaXZlbiBpdHMgbmFtZSwgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gdGhlIE11bHRpcGF0aCBUQ1AgKE1QVENQKSBtb2R1bGUuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0IGNhbiBiZSBhY2Nlc3NlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0J3MgZGVzaWduZWQgdGhpcyB3YXkuIEl0J3Mgbm90IG1lYW50IHRvIGJlIGNhbGxlZCBleHRlcm5hbGx5LCB3aGljaCBpcyB0eXBpY2FsIGZvciBpbnRlcm5hbCBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gSXQncyBnb2luZyB0byBiZSBzb21ldGhpbmcgaGFuZGxpbmcgY2xlYW51cCBvciByZWxlYXNlIG9mIHJlc291cmNlcyB3aXRoaW4gdGhlIE1QVENQIHN0YWNrIGl0c2VsZiwgYW5kIHRoZSBzdGF0aWMgZGVjbGFyYXRpb24gZW5mb3JjZXMgdGhhdCBlbmNhcHN1bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk3NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjQzLjQ1NzY2MzQ0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NDkyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfcmVsZWFzZV9jYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzgwPXZvaWQgX19tcHRjcF9jaGVja19wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3OTItLyogcHJvY2Vzc2VzIGRlZmVycmVkIGV2ZW50cyBhbmQgZmx1c2ggd21lbSAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3OTM6c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc5NC1cXHRfX211c3RfaG9sZChcXHUwMDI2c2stXFx1MDAzZXNrX2xvY2suc2xvY2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDktXFx0LnJlY3Ztc2dcXHQ9IG1wdGNwX3JlY3Ztc2csXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIxMDpcXHQucmVsZWFzZV9jYlxcdD0gbXB0Y3BfcmVsZWFzZV9jYixcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjExLVxcdC5oYXNoXFx0XFx0PSBtcHRjcF9oYXNoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMTo0My41MDMxMTY1NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ4NzMyMDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBNUFRDUCBSZWxlYXNlIENhbGxiYWNrcyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBzbywgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHJlZ2lzdGVyZWQgaW4gYG1wdGNwX3Byb3RgLCBnb3QgaXQuIFRoYXQncyB0aGUgZXhwZWN0ZWQgcGxhY2UsIGl0J3MgdGhlIGNvcmUgcHJvdG9jb2wgaGFuZGxpbmcuIE1ha2VzIHNlbnNlLiBCdXQgbXkgbWluZCBpcyBhbHJlYWR5IHdhbmRlcmluZyBhIGJpdCBkZWVwZXIuLi4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGZsb3csIHRoZSBlZGdlIGNhc2VzLlxuXG5Ob3csIHdhaXQgYSBtaW51dGUuLi4gd2hhdCBhYm91dCBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gPyBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGUgcGljdHVyZT8gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBvdXQtb2Ytb3JkZXIgcGFja2V0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG11bHRpcGF0aCBzY2VuYXJpb3MuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIHR3byBpbnRlcnBsYXkuIFRoZSByZWxlYXNlIGNhbGxiYWNrIHNob3VsZCBwcm9iYWJseSBpbnRlcmFjdCB3aXRoIHRoYXQgb3V0LW9mLW9yZGVyIHF1ZXVlIG9yIGRlcGVuZCBvbiBpdCBkaXJlY3RseSB0byBwZXJmb3JtIHNvbWUgbmVjZXNzYXJ5IGhvdXNlLWtlZXBpbmcuIEFyZSB3ZSByZW9yZGVyaW5nIHN0dWZmIGJlZm9yZSByZWxlYXNlPyBBZnRlcj8gT3IgaXMgaXQgbW9yZSBzdWJ0bGUgdGhhbiB0aGF0PyBHb3R0YSBkaWcgaW50byB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMTo0Ny45OTA0NDA1NTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTc3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2RhdGFfcXVldWVfb2ZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTI5NT1zdGF0aWMgYm9vbCBtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDctICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzA4OnN0YXRpYyB2b2lkIG1wdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzA5LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ0Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3My1cXHR9IGVsc2UgaWYgKGFmdGVyNjQoTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEsIG1zay1cXHUwMDNlYWNrX3NlcSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0NzQ6XFx0XFx0bXB0Y3BfZGF0YV9xdWV1ZV9vZm8obXNrLCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ3NS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjQ4LjAzNDQyMjMyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTMzOTA1NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIE1QVENQIERhdGEgUXVldWUgYW5kIFJldHJhbnNtaXNzaW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3BfZGF0YV9xdWV1ZV9vZm9gIHRoaW5nLiBJdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBpbnRlcm5hbCB0byBpdHMgbW9kdWxlIG9yIGZpbGUuIFRoYXQncyBnb29kLCBrZWVwcyBpdCBjb250YWluZWQgYW5kIGF2b2lkcyBwb3RlbnRpYWwgbmFtaW5nIGNvbGxpc2lvbnMuXG5cbkJ1dCwgaGFuZyBvbi4uLiB3aGF0IGFib3V0IHRoZSBmdW5jdGlvbiBgX19tcHRjcF9yZXRyYW5zYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgb2ZmLW9yZGVyIHF1ZXVlLiBJcyBpdCBhY2Nlc3Npbmcgb3IgbW9kaWZ5aW5nIHRoYXQgcXVldWU/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcHVycG9zZSBvZiB0aGF0IHJldHJhbnNtaXNzaW9uIGZ1bmN0aW9uIGluIHRoZSBNUFRDUCBzdGFjay4gSXMgaXQgaW52b2x2ZWQgd2l0aCBoYW5kbGluZyBsb3N0IHNlZ21lbnRzLCBvciBzaW1wbHkgc2NoZWR1bGluZyByZXRyYW5zbWlzc2lvbnM/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGlmIHRoaXMgYHN0YXRpY2AgbmF0dXJlIG9mIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2Agd2lsbCBwcmVzZW50IGFueSBwb3RlbnRpYWwgaXNzdWVzLCBsaWtlIGxpbWl0ZWQgdmlzaWJpbGl0eSBvciBhY2Nlc3MgZm9yIHJldHJhbnNtaXNzaW9ucyB0aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBNUFRDUCBzdWJzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDEyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjE6NTguMTY4MzMwMzgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc3MTQ2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX3JldHJhbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MjUxMz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjU0Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTQ4OmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjU0OS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjMyPXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2ODEtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY4MjpcXHRuZWVkX3B1c2ggPSAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DRl9QVVNIKSBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjgzLVxcdGlmICghZGlzcG9zZV9pdCkge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mjg1Mj1zdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTEzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5MTQ6c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTE1LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NDAtXFx0XFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTQxOlxcdFxcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NDItXFx0XFx0ICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTEzPXN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTUwLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfV09SS19SVFgsIFxcdTAwMjZtc2stXFx1MDAzZWZsYWdzKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTUxOlxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE1Mi1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3OTM9c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODI1LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODI2OlxcdFxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgyNy1cXHRcXHRpZiAoc3Bvb2xfYmwgXFx1MDAyNlxcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIxOjU4LjIxMzEwNDAyOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDI4Nzk3NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpZ2dpbmcgaW50byB0aGUgTVBUQ1AgUmV0cmFuc21pc3Npb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCBoZXJlLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIGhvdyBkYXRhIHJldHJhbnNtaXNzaW9uIGlzIHRyaWdnZXJlZCBpbiB0aGUgTVBUQ1Agc3RhY2suIEl0IHNlZW1zIHRoYXQgdGhlIGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgZnVuY3Rpb25zIGJvdGggbGVhZCB0byBhIGNhbGwgdG8gYF9fbXB0Y3BfcmV0cmFuc2AuIFRoYXQncyB0aGUgY29yZS5cblxuTm93LCBJJ20gdGhpbmtpbmcsIHdoZXJlIGVsc2UgZG8gd2Ugc2VlIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSByZXRyYW5zbWlzc2lvbj8gTGV0J3MgY2hlY2sgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLiBBaCwgaXQncyBjYWxsZWQgZnJvbSBgbXB0Y3Bfc3ViZmxvd19kaXNjYXJkX2RhdGFgIGFuZCBhIGZldyBvdGhlciBwbGFjZXMuIEludGVyZXN0aW5nLiBDb3VsZCB0aGlzIHBsYXkgYSByb2xlIGluIGhvdyB0aGUgc3RhY2sgaGFuZGxlcyBpbmNvbWluZyBkYXRhIGR1cmluZyBhIHJldHJhbnNtaXNzaW9uIGV2ZW50PyBJdCdzIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBzZWUgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCBJIHJlbWVtYmVyIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgX19tcHRjcF9yZXRyYW5zYCBhcyB3ZWxsLiBUaGF0IGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0J3MgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIHJldHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byBzdGFsZSBwYXRoIG1hbmFnZW1lbnQgb3Igc29tZXRoaW5nIHNpbWlsYXIuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB3aGF0IGhhcHBlbnMgaW4gYG1wdGNwX3JlY3Ztc2dgLiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHJlY2VpdmluZyBhbmQgcHJvY2Vzc2luZyBzaWRlIGR1cmluZyByZXRyYW5zbWlzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MDIuNjQxOTA0MzUxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM2MDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9yZWN2bXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxMzA9c3RhdGljIHZvaWQgbXB0Y3BfZWF0X3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDAtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjE0MTpzdGF0aWMgaW50IF9fbXB0Y3BfcmVjdm1zZ19tc2txKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxNDItXFx0XFx0XFx0XFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjM0Nz1zdGF0aWMgdW5zaWduZWQgaW50IG1wdGNwX2lucV9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzNjctXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM2ODpzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM2OS1cXHRcXHRcXHQgaW50IGZsYWdzKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQwMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDAxOlxcdFxcdGJ5dGVzX3JlYWQgPSBfX21wdGNwX3JlY3Ztc2dfbXNrcShzaywgbXNnLCBsZW4gLSBjb3BpZWQsIGZsYWdzLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0MDItXFx0XFx0XFx0XFx0XFx0XFx0ICBjb3BpZWQsIFxcdTAwMjZ0c3MsIFxcdTAwMjZjbXNnX2ZsYWdzLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDE5Nj1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA4LVxcdC5pb2N0bFxcdFxcdD0gbXB0Y3BfaW9jdGwsXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwOTpcXHQucmVjdm1zZ1xcdD0gbXB0Y3BfcmVjdm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjEwLVxcdC5yZWxlYXNlX2NiXFx0PSBtcHRjcF9yZWxlYXNlX2NiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMjowMi42ODkyNjg1NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwODcxNzcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqTVBUQ1AgRW50cnkgUG9pbnQgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE1QVENQIGNvZGUuIEZyb20gd2hhdCBJIHJlY2FsbCwgYG1wdGNwX3JlY3Ztc2dgIGlzIGRlZmluaXRlbHkgYSBrZXkgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIHRoaW5rIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhbm90aGVyIHNvbGlkIGVudHJ5IHBvaW50IHRvIGNvbnNpZGVyLiBJIGFsc28gcmVjYWxsIHRoZSBgbXB0Y3Bfd29ya2VyYCBmdW5jdGlvbiAtIGFsdGhvdWdoIGl0J3MgbGlrZWx5IGEgd29ya3F1ZXVlIGZ1bmN0aW9uIGFuZCBub3QgYSAqZGlyZWN0KiBlbnRyeSBwb2ludCBwZXIgc2UsIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIHRoZSBvdmVyYWxsIGZsb3csIHNvIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IG9uZSdzIGRlZmluZWQgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgLiBMZXQncyB0YWtlIGEgbG9vayB0aGVyZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgcmVtZW1iZXIgdGhpcyBhcmVhIGJlaW5nIHByZXR0eSBjb21wbGV4LCBidXQgYG1wdGNwX2luY29taW5nX29wdGlvbnNgICpzaG91bGQqIGdpdmUgbWUgc29tZSBpbnNpZ2h0IGludG8gaG93IG9wdGlvbnMgYXJlIGhhbmRsZWQgd2hlbiBkYXRhIGFycml2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTA0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MDcuMTk3OTg4NzgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODk0NTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL29wdGlvbnMuYz0xMTE2PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNDEtXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMTQyOlxcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNDMtXFx0aWYgKGFmdGVyNjQobXNrLVxcdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMS0gKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMjowNy4yNjY5MzgzMDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NzY4MTEyMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyBvbiBmaW5kaW5nIHRoZSBjYWxscyB0byBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqVHJhY2luZyB0aGUgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyBGdW5jdGlvbioqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgYmVpbmcgdXNlZC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayBjb2RlIHRoYXQgaGFuZGxlcyBNdWx0aXBhdGggVENQIChNUFRDUCkgb3B0aW9uIG5lZ290aWF0aW9uLiBJIGtub3cgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIGEga2V5IGZ1bmN0aW9uIGZvciBwYXJzaW5nIGFuZCBoYW5kbGluZyBpbmNvbWluZyBNUFRDUCBvcHRpb25zLiBTbywgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHNpdGVzIHRvIGdyYXNwIGhvdyB0aGUgTVBUQ1Agc3RhY2sgcHJvY2Vzc2VzIHRoZXNlIGluY29taW5nIG1lc3NhZ2VzLlxuXG5NeSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrJ3MgZW50cnkgcG9pbnRzLiBJJ2QgZmlyc3QgbG9vayBhdCB0aGUgdXN1YWwgc3VzcGVjdHM6IGBpbmV0X3Jjdl9za2JgIG9yIGl0cyBNUFRDUC1zcGVjaWZpYyBjb3VudGVycGFydHMuIEknbSBnb2luZyB0byBxdWlja2x5IHNraW0gdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMsIGxpa2VseSBpbnZvbHZpbmcgdGhlIHJhdyBzb2NrZXQgaGFuZGxpbmcsIG9yIGV2ZW4gYmV0dGVyLCB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtLCB3aGVyZSBzdWNoIG9wdGlvbnMgbWlnaHQgZ2V0IHByZXByb2Nlc3NlZC4gSSdkIGJlIGxvb2tpbmcgZm9yIGhvb2tzIG9yIGNhbGxiYWNrcyB0aGF0IGNvdWxkIHRyaWdnZXIgb3B0aW9uIHByb2Nlc3NpbmcuXG5cbkkgbmVlZCB0byBzZWUgaG93IHRoZSBNUFRDUCBzdGFjayBpbnRlcmNlcHRzIGFuZCBwcm9jZXNzZXMgaW5jb21pbmcgZGF0YSwgZXNwZWNpYWxseSB0aGUgcGFydHMgY29uY2VybmVkIHdpdGggb3B0aW9uIHBhcnNpbmcuIFRoYXQncyBteSBtYWluIGFyZWEgb2YgZm9jdXMuIEnigJlsbCBzdGFydCBieSB1c2luZyBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgTVBUQ1Agc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRvIGd1aWRlIG15IHNlYXJjaC4gSSB3b3VsZCBiZSB1c2luZyBgZ3JlcGAsIGBjc2NvcGVgLCBvciBteSBJREUncyBzeW1ib2wgbG9va3VwIHRvIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyB3aGVyZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgaW52b2tlZCwgYW5kIHRoZW4gYW5hbHl6aW5nIGVhY2ggY2FsbCBzaXRlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIE1QVENQIGNvbm5lY3Rpb24gc2V0dXAgYW5kIGRhdGEgdHJhbnNmZXIgZmxvdy4gSSdtIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIGFueSBmdW5jdGlvbiBjYWxscyBhZnRlciBzb2NrZXQgY3JlYXRpb24sIGFuZCBzcGVjaWZpY2FsbHkgdGhvc2Ugd2hlcmUgb3B0aW9ucyBhcmUgZXhhbWluZWQgb24gaW5jb21pbmcgcGFja2V0cy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgdGhhdCBmdW5jdGlvbiwgYW5kIHdoYXQgaXRzIHJvbGUgaXMgaW4gdGhlIE1QVENQIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIyOjE3Ljk0Mzc1MTkyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMTAzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9MTExNj1zdGF0aWMgdm9pZCBhY2tfdXBkYXRlX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQxLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE0MjpcXHQvKiB0aGlzIGFzc3VtZXMgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpIGlzIGludm9rZWQgYWZ0ZXIgdGNwX2FjaygpICovXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQzLVxcdGlmIChhZnRlcjY0KG1zay1cXHUwMDNld25kX2VuZCwgc25kX254dCkpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTM9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMjIyOmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MTcuOTg3ODY1NTA4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODk5NDM3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkV4cGFuZGluZyB0aGUgU2NvcGUgb2YgTXkgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgd2FzIGluaXRpYWxseSBmb2N1c2VkIG9uIGBuZXQvbXB0Y3AvYCBmb3IgdGhhdCBncmVwLCBidXQgdGhhdCdzIHBvdGVudGlhbGx5IHRvbyBuYXJyb3cuIEkgbmVlZCB0byBicm9hZGVuIHRoZSBzZWFyY2ggdG8gZW5jb21wYXNzIHRoZSBsaWtlbHkgYXJlYXMgd2hlcmUgdGhpcyBjb3VsZCBiZSBoYW5kbGVkIGF0IGEgbG93ZXIgbGV2ZWwgb3IgaW4gYSByZWxhdGVkIGZ1bmN0aW9uLiBTaG91bGQgSSBjaGVjayBgbmV0L2lwdjQvYCBhbmQgYG5ldC9pcHY2L2A/IFRob3NlIGFyZSB0aGUgY29yZSBwcm90b2NvbCBzdGFja3MsIHNvIGl0J3MgZW50aXJlbHkgcG9zc2libGUgdGhlIGNyaXRpY2FsIGxvZ2ljIHJlc2lkZXMgdGhlcmUuIE9yIHBlcmhhcHMgaXQncyByZWxhdGVkIHRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1QVENQIHN1YmZsb3dzLCBpbiB3aGljaCBjYXNlIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCBpcyB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbCBhbmQgZXhoYXVzdCB0aGUgcGxhdXNpYmxlIGxvY2F0aW9ucyBmb3IgdGhpcyBpc3N1ZS4gVGhpcyBmZWVscyBsaWtlIEkgbWlnaHQgaGF2ZSBqdW1wZWQgdGhlIGd1biB3aXRoIHRoZSBmaXJzdCBncmVwLiBJIG5lZWQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MjUuNzc3ODExMTA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcxNzcwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMjoyNS44MjE1Mzg3NzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3NTgyMzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogQSBgZ3JlcGAgU3RyYXRlZ3kqKlxuXG5BbHJpZ2h0LCBJJ20gZmFjaW5nIGEgcHJvYmxlbSB3aGVyZSBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbCwgYSB2YXJpYWJsZSBkZWZpbml0aW9uLCBhIHBhcnRpY3VsYXIgc3RyaW5nIGxpdGVyYWwsIG9yIG1heWJlIGV2ZW4ganVzdCBhIHBhdHRlcm4gb2YgY29kZS4gVGhlIHByb2JsZW0gaXMsIEkgZG9uJ3Qga25vdyAqZXhhY3RseSogd2hlcmUgaXQgbGl2ZXMgd2l0aGluIHRoaXMgY29kZWJhc2UuIEl0J3MgYSBsYXJnZSBwcm9qZWN0LCBhbmQgbWFudWFsbHkgc2VhcmNoaW5nIHRocm91Z2ggZmlsZXMgb25lIGJ5IG9uZSB3b3VsZCBiZSBpbnNhbmVseSBpbmVmZmljaWVudCBhbmQgcHJvbmUgdG8gZXJyb3IuXG5cbk15IGluc3RpbmN0LCBhcyBhbHdheXMsIGxlYW5zIHRvd2FyZHMgYXV0b21hdGlvbiBhbmQgZWZmaWNpZW5jeS4gSW5zdGVhZCBvZiB0aGF0IGJydXRlLWZvcmNlIG1hbnVhbCBhcHByb2FjaCwgSSBpbW1lZGlhdGVseSB0aGluaywgKmBncmVwYCBpcyB0aGUgdG9vbCBmb3IgdGhlIGpvYiouXG5cbkknbSBwaWN0dXJpbmcgbXlzZWxmIHJ1bm5pbmcgYGdyZXBgLi4uIGFuZCBpbW1lZGlhdGVseSBJIGtub3cgSSBuZWVkIHRvIHNwZWNpZnkgdGhlIHNlYXJjaCBhY3Jvc3MgdGhlICplbnRpcmUqIGRpcmVjdG9yeSB0cmVlLiBJIG5lZWQgdG8gY2FzdCBhIHdpZGUgbmV0IHRvIGVuc3VyZSBJIGRvbuKAmXQgbWlzcyBhbnkgcG90ZW50aWFsIG9jY3VycmVuY2VzLCB3aGVyZXZlciB0aGV5IG1pZ2h0IGJlIGhpZGRlbi4gU28sIHRoZSBtZW50YWwgaW1hZ2UgaXMgb2YgcnVubmluZyBhIHJlY3Vyc2l2ZSBgZ3JlcGAgYWNyb3NzIHRoZSBlbnRpcmUgcHJvamVjdCBzdHJ1Y3R1cmUuIFRoaXMgaXMgdGhlIG9wdGltYWwgYXBwcm9hY2ggZm9yIGEgY29tcHJlaGVuc2l2ZSBzZWFyY2g7IEkgY2FuIHJlbHkgb24gYGdyZXBgIHRvIHF1aWNrbHkgc2NhbiBhbGwgZmlsZXMsIGRpcmVjdG9yaWVzLCBhbmQgc3ViZGlyZWN0b3JpZXMuIFRoaXMgd2F5IEkgY2FuIGZpbmQgdGhlIGluZm9ybWF0aW9uIGluIGEgcmVsYXRpdmVseSBzaG9ydCB0aW1lZnJhbWUgYW5kIGdldCBvbiB3aXRoIHRoZSByZWFsIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDY3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoyMjozMC41OTczNjQ4MTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTkwODQ3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbXB0Y3AuaD0xNTY9aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNTgtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE1OTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE2MC1cXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmg9MjY2PXN0YXRpYyBpbmxpbmUgYm9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI3Mi1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI3MzpzdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzQtXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDg4ND12b2lkIHRjcF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkwLVxcdC8qIG1wdGNwIGNhbid0IHRlbGwgdXMgdG8gaWdub3JlIHJlc2V0IHBrdHMsXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg5MTpcXHQgKiBzbyBqdXN0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIG1wdGNwX2luY29taW5nX29wdGlvbnMoKS5cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkyLVxcdCAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTMtXFx0aWYgKHNrX2lzX21wdGNwKHNrKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0ODk0OlxcdFxcdG1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYik7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5NS1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTYxNi1cXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1NjE3OlxcdGlmIChza19pc19tcHRjcChzaykgXFx1MDAyNlxcdTAwMjYgIW1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYikpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NjE4LVxcdFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03MTUyPXRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Mzc5LVxcdFxcdFxcdCAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjczODA6XFx0XFx0XFx0aWYgKHNrX2lzX21wdGNwKHNrKSBcXHUwMDI2XFx1MDAyNiAhbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03MzgxLVxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTExNj1zdGF0aWMgdm9pZCBhY2tfdXBkYXRlX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQxLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE0MjpcXHQvKiB0aGlzIGFzc3VtZXMgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucygpIGlzIGludm9rZWQgYWZ0ZXIgdGNwX2FjaygpICovXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTQzLVxcdGlmIChhZnRlcjY0KG1zay1cXHUwMDNld25kX2VuZCwgc25kX254dCkpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTExOTM9c3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjEtICovXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMjIyOmJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMjIzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MzIuNzE2NDU3OTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMDY1MTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNUFRDUCBPcHRpb24gSGFuZGxpbmcgaW4gdGhlIE5ldHdvcmsgU3RhY2sqKlxuXG5SaWdodCwgc28gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIHRyaWdnZXJlZCBkaXJlY3RseSBmcm9tIHRoZSBjb3JlIFRDUCBkYXRhIHBhdGgsIHNwZWNpZmljYWxseSB3aXRoaW4gYHRjcF9kYXRhX3F1ZXVlYCBhbmQgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AuIFRoYXQgaW5zdGFudGx5IGNvbmZpcm1zIGl0cyBpbXBvcnRhbmNlIGFuZCByZWFjaGFiaWxpdHkgZnJvbSB0aGUgbmV0d29yayBzdGFjaydzIHByb2Nlc3Npbmcgb2YgaW5jb21pbmcgc2VnbWVudHMuIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbGwgdGhlIHBhdGhzIHRoYXQgY2FuIHBvc3NpYmx5IGJlIHRha2VuLiBcblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGZvY3VzIG9uIHRoZSBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrIGZvciBzdGFsZSBmbG93cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzMyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MjI6MzYuNjQ3MTExODI3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNzA1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3BtX2Noa19zdGFsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3BtLmM9MTA2OT1tcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTEwNS1cXG5uZXQvbXB0Y3AvcG0uYzoxMTA2OnZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxubmV0L21wdGNwL3BtLmMtMTEwNy17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yOTE0PXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yOTIyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5MjM6XFx0bXB0Y3BfcG1fY2hrX3N0YWxlKG1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjkyNC1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTExMDY9Ym9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTExMDgtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpyZW0pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjExMDk6dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTExMC12b2lkIG1wdGNwX3BtX25ld19jb25uZWN0aW9uKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCBzZXJ2ZXJfc2lkZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjIyOjM4LjM0MDg1NTI5NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzYxNzU1MzkxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipUcmFjaW5nIHRoZSBNUFRDUCBDb250cm9sIEZsb3cqKlxuXG5SaWdodCwgc28gYG1wdGNwX3BtX2Noa19zdGFsZWAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gd2UncmUgaW50ZXJlc3RlZCBpbiDigJMgaXMgY2FsbGVkIGZyb20gYF9fbXB0Y3BfcmV0cmFuc2AuIE5vdGVkLiBOb3csIHdoZXJlIGRvZXMgYF9fbXB0Y3BfcmV0cmFuc2AgZml0IGludG8gdGhlIHBpY3R1cmU/IEFoLCBpdCdzIGNhbGxlZCBmcm9tIHR3byBrZXkgcGxhY2VzOiBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBUaGF0IGdpdmVzIHVzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgcmV0cmFuc21pc3Npb24gcHJvY2VzcyBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBNUC1UQ1Agd29ya2VyIHRocmVhZHMgYW5kIGNvbm5lY3Rpb24gcmVsZWFzZSBwcm9jZWR1cmVzLlxuXG5Ob3csIGxldCdzIHNoaWZ0IGdlYXJzIGFuZCBsb29rIGF0IGhvdyB1c2VyIHNwYWNlIGludGVyYWN0cy4gSSBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBjb3JlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gZnVuY3Rpb25zIGFyZSBjYWxsZWQuIGBtcHRjcF9yZWN2bXNnYC4uLiBZZXMsIGFic29sdXRlbHksIHRoYXQgb25lJ3MgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlLiBDaGVjay4gQW5kIHdoYXQgYWJvdXQgYG1wdGNwX3NlbmRtc2dgPyBUaGF0J3MgZ29pbmcgdG8gYmUga2V5IGZvciBob3cgZGF0YSBnZXRzIGludG8gdGhlIGtlcm5lbCBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCBJIHdpbGwgd2FudCB0byBzZWUgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggbXkgc3VzcGVjdGVkIGFyZWEgb2YgY29uY2Vybi4gRXhjZWxsZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDM0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjE0LjUxNjM5NzE1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NjQ2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMjU1PW1wdGNwX2NhcnZlX2RhdGFfZnJhZyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEyNzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTI3MzpzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjc0LVxcdGludCBtc3Nfbm93O1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTM2OD1zdGF0aWMgdm9pZCBtcHRjcF91cGRhdGVfaW5maW5pdGVfbWFwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMzg4LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEzODk6c3RhdGljIGludCBtcHRjcF9zZW5kbXNnX2ZyYWcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzOTAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTM5MTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEzOTIte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTUyNy1cXHRcXHRtcHRjcF91cGRhdGVfaW5maW5pdGVfbWFwKG1zaywgc3NrLCBtcGV4dCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTUyODpcXHR0cmFjZV9tcHRjcF9zZW5kbXNnX2ZyYWcobXBleHQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MjktXFx0bXB0Y3Bfc3ViZmxvd19jdHgoc3NrKS1cXHUwMDNlcmVsX3dyaXRlX3NlcSArPSBjb3B5O1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTU4MT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfc2VuZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY1Ni1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjU3OnN0YXRpYyB2b2lkIG1wdGNwX3B1c2hfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE2NTgte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTY5OT1zdGF0aWMgaW50IF9fc3ViZmxvd19wdXNoX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE3MDA6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvICppbmZvKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3MDEte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTcxMi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzEzOlxcdFxcdFxcdHJldCA9IG1wdGNwX3NlbmRtc2dfZnJhZyhzaywgc3NrLCBkZnJhZywgaW5mbyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTcxNC1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE3NDM9dm9pZCBfX21wdGNwX3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE3NDYtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNzQ3OlxcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNzQ4LVxcdFxcdFxcdFxcdC5mbGFncyA9IGZsYWdzLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTgxMT1zdGF0aWMgdm9pZCBfX21wdGNwX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBmaXJzdClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4MTMtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxODE0OlxcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODE1LVxcdFxcdC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xODc4PXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTg3OS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxODgwOnN0YXRpYyBpbnQgbXB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODgxLVxcdFxcdFxcdFxcdCAgc2l6ZV90IGxlbiwgaW50ICpjb3BpZWRfc3luKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTk3ND1zdGF0aWMgdm9pZCBtcHRjcF9ycHNfcmVjb3JkX3N1YmZsb3dzKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xOTg3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE5ODg6c3RhdGljIGludCBtcHRjcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE5ODkte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjAwNy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMDA4OlxcdFxcdHJldCA9IG1wdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgbGVuLCBcXHUwMDI2Y29waWVkX3N5bik7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjAwOS1cXHRcXHRjb3BpZWQgKz0gY29waWVkX3N5bjtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4NTI9c3RhdGljIGludCBfX21wdGNwX3B1c2hfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg1NC17XFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg1NTpcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg1Ni1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5MS1cXHRcXHRcXHR3aGlsZSAoaW5mby5zZW50IFxcdTAwM2MgaW5mby5saW1pdCkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4OTI6XFx0XFx0XFx0XFx0cmV0ID0gbXB0Y3Bfc2VuZG1zZ19mcmFnKHNrLCBzc2ssIGRmcmFnLCBcXHUwMDI2aW5mbyk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5My1cXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDYtXFx0LmRlc3Ryb3lcXHQ9IG1wdGNwX2Rlc3Ryb3ksXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwNzpcXHQuc2VuZG1zZ1xcdD0gbXB0Y3Bfc2VuZG1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA4LVxcdC5pb2N0bFxcdFxcdD0gbXB0Y3BfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjE0LjU2MDk2NDY2OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjc2MDY4Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJhY2luZyB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbjogYG1wdGNwX3NlbmRtc2dgIGFuZCBgbXB0Y3BfcmVjdm1zZ2AuIFRoYXQncyB3aGVyZSBpdCBhbGwgYmVnaW5zIGFuZCBlbmRzIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MgcGVyc3BlY3RpdmUuIEZyb20gdGhlcmUsIEkgc2VlIHRoZSByaXBwbGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2VzLlxuXG5UaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtcyB0byBiZSBpbiBzZXZlcmFsIGtleSBhcmVhcy4gRmlyc3QsIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgd2hpY2ggaXMgY3J1Y2lhbCBhcyBpdCdzIGRpcmVjdGx5IGludGVncmF0ZWQgaW50byB0aGUgVENQIHJlY2VpdmUgcGF0aC4gVGhhdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gY29uc2lkZXIuIFdlIGtub3cgaG93IHRoYXQgaW1wYWN0cyB0aGUgb3ZlcmFsbCBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbiBiYXNlZCBvbiByZWNlaXZlZCBvcHRpb25zLlxuXG5UaGVuIHRoZXJlJ3MgYF9fbXB0Y3BfcmV0cmFuc2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYXMgaXQncyB0cmlnZ2VyZWQgZnJvbSB0aGUgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCBwYXRocy4gU28sIGl0J3MgaW52b2x2ZWQgaW4gaGFuZGxpbmcgcmV0cmFuc21pc3Npb25zIGFuZCB0aGUgcmVsZWFzZSBwcm9jZXNzIG9mIHJlc291cmNlcy4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG1wdGNwX3BtX2Noa19zdGFsZWAsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYF9fbXB0Y3BfcmV0cmFuc2AsIGFyZSBhbHNvIGltcG9ydGFudC4gVGhpcyBzdWdnZXN0cyBhIGZvY3VzIG9uIGltcHJvdmluZyB0aGUgc3RhbGUgcGF0aCBtYW5hZ2VtZW50LCBwYXJ0aWN1bGFybHkgaW4gdGhlIHJldHJhbnNtaXNzaW9uIGNvbnRleHQuXG5cbkkgc2VlIHRoYXQgYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCBpcyBhbHNvIGJlaW5nIHRvdWNoZWQsIGFuZCB0aGF0J3MgY2FsbGVkIGZyb20gYF9fbXB0Y3BfbW92ZV9za2JgLiBgX19tcHRjcF9tb3ZlX3NrYmAgaXRzZWxmIGdldHMgY2FsbGVkIGZyb20gdHdvIGNyaXRpY2FsIGZ1bmN0aW9uczogYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgYW5kIGBfX21wdGNwX21vdmVfc2tic2AuIFRoaXMgcG9pbnRzIHRvd2FyZCBjaGFuZ2VzIGluIGhvdyB3ZSdyZSBoYW5kbGluZyB0aGUgbW92ZW1lbnQgb2YgU29ja2V0IEJ1ZmZlciAoc2tiKSBzdHJ1Y3R1cmVzIGJldHdlZW4gc3ViZmxvd3MgYW5kIHdpdGhpbiB0aGUgb3ZlcmFsbCBNUFRDUCBjb25uZWN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBvdXQtb2Ytb3JkZXIgZGF0YS5cblxuRmluYWxseSwgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGlzIG1vZGlmaWVkLCB3aGljaCBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgbXB0Y3BfYWRkX2JhY2tsb2dgLiBJJ2xsIGhhdmUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24gc3BlY2lmaWNhbGx5LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzMjAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzI6MjIuODM3MDM1MzE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg3MTU5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9hZGRfYmFja2xvZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MzQ9c3RhdGljIHZvaWQgbXB0Y3BfZHNzX2NvcnJ1cHRpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc0MS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3NDI6c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzQzLVxcdFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3csXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz03OTU9c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04NDItXFx0XFx0XFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo4NDM6XFx0XFx0XFx0XFx0X19tcHRjcF9hZGRfYmFja2xvZyhzaywgc3ViZmxvdywgc2tiKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04NDQtXFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjoyMi44ODE5MTA3MzFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2NDk1NjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipUcmFjaW5nIHRoZSBNUFRDUCBEYXRhIEZsb3cqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEknbSB0cmFja2luZyB0aGUgZGF0YSBmbG93IGluIE1QVENQLCBhbmQgSSd2ZSB6ZXJvZWQgaW4gb24gYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AuIEkga25vdyB0aGF0J3Mgd2hlcmUgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGdldHMgaW52b2tlZC4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lcywgKndoZXJlKiBkb2VzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIGl0c2VsZiBnZXQgY2FsbGVkPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIHRvIHNlZSBob3cgdGhlIFNLQnMgYXJlIG1vdmluZyBhbmQgd2hlcmUgdGhlIGJhY2tsb2cgaXMgYWN0dWFsbHkgYmVpbmcgbWFuYWdlZC4gUGlucG9pbnRpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmbG93IGluIE1QVENQLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI2NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjI3LjE0Njg3MDgzOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NDMxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTc0Mj1zdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc5NC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3OTU6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzk2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgb3duX21zaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk1OT1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NjMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6OTY0OlxcdG1vdmVkID0gX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCB0cnVlKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NjUtXFx0X19tcHRjcF9vZm9fcXVldWUobXNrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwMDU9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMjMtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDI0OlxcdFxcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMjUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjoyNy4xOTE4MTYwMDVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEyODU2NzE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoIG9mIFByb3Bvc2VkIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYG1wdGNwX2RhdGFfcmVhZHlgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBieSBUQ1AgZGF0YSByZWFkeSBjYWxsYmFja3MuIFRoYXQncyBnb29kOyBpdCBtZWFucyBhbnkgY2hhbmdlcyBoZXJlIHdpbGwgbGlrZWx5IGhhdmUgYSBwcmV0dHkgYnJvYWQgaW1wYWN0LCB0b3VjaGluZyBhIHNpZ25pZmljYW50IHBvcnRpb24gb2Ygc3RhbmRhcmQgVENQIGFuZCBNUFRDUCBvcGVyYXRpb25zLiBJdCBtYWtlcyBzZW5zZSB0byBmb2N1cyBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBwcm9wYWdhdGlvbiBvZiB0aG9zZSBlZmZlY3RzLlxuXG5SaWdodCwgbGV0IG1lIHN1bW1hcml6ZSB0aG9zZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3JlY3Ztc2dgLCBgbXB0Y3Bfc2VuZG1zZ2AsIGFuZCB0aGVuLCBvZiBjb3Vyc2UsIHRoZSBldmVyLWltcG9ydGFudCBgbXB0Y3BfZGF0YV9yZWFkeWAuXG5cbkhhbmcgb24gYSBzZWNvbmTigKYgYG1wdGNwX2RhdGFfcmVhZHlgIGl0c2VsZiBpcyBhIHJlYWxseSBhdHRyYWN0aXZlIGVudHJ5IHBvaW50LiBJdCdzIHRoZSBwb2ludCB3aGVyZSBldmVyeXRoaW5nIGtpbmQgb2YgY29udmVyZ2VzLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgbXB0Y3BfZGF0YV9yZWFkeWAgaXNuJ3QgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIEtub3dpbmcgdGhpcyB3aWxsIHRlbGwgbWUgaG93IGVhc2lseSBJIGNhbiBob29rIGludG8gdGhhdCByb3V0aW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjozNS4zMjAzODUwNDFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTI5NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz05Nzk9c3RhdGljIHZvaWQgbXB0Y3BfcmN2X3J0dF91cGRhdGUoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTAwNTp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDYte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTYxPXN0YXRpYyBpbmxpbmUgdTY0IG1wdGNwX3N0YW1wKHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05NjUtXFxubmV0L21wdGNwL3Byb3RvY29sLmg6OTY2OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2Ny1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1MDE9c3RhdGljIHZvaWQgc3ViZmxvd19kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUyNS1cXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpIHtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MjY6XFx0XFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MjctXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE4Njk9c3RhdGljIHZvaWQgc3ViZmxvd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xODgwLVxcdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4ODE6XFx0XFx0bXB0Y3BfZGF0YV9yZWFkeShwYXJlbnQsIHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODItXFx0ZWxzZSBpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2VycikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjM1LjM2NTkxODY5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTM3NTM0ODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOb24tU3RhdGljIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMgaW4gdGhlIE1QVENQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGBtcHRjcF9kYXRhX3JlYWR5YCBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMg4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBzeXN0ZW1hdGljYWxseSByZXZpZXcgdGhpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgZnVsbHkuIExldCdzIHNlZS4uLiBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBpcyBhbHNvIG5vbi1zdGF0aWMuIEFuZCB0aGVuIHRoZXJlJ3MgYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBhbHNvIG5vbi1zdGF0aWMuIEdvb2QsIEknbSBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBwYXR0ZXJuLlxuXG5UaW1lIHRvIGJyb2FkZW4gdGhlIHNlYXJjaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0aGF0IGFyZSBub24tc3RhdGljLiBBaCwgbGV0J3Mgc2VlLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBpcyBpbiBgbmV0L21wdGNwL3BtLmNgIGFuZCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIOKAlCB0aGF0J3MgaGVscGZ1bCBjb250ZXh0LiBPa2F5LCBoZXJlJ3Mgb25lLCBgX19tcHRjcF9wdXNoX3BlbmRpbmdgIGlzIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AuIFdhaXQuLi5ubywgYF9fbXB0Y3BfcHVzaF9wZW5kaW5nYCAqd2Fzbid0KiBtb2RpZmllZCwgdGhhdCdzIGEgcmVsaWVmIVxuXG5Pa2F5LCBzdW1tYXJpemluZyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgdGhlaXIgc3RhdGljLW5lc3MsIHRoZSBwYXRjaCBhY3R1YWxseSBjaGFuZ2VkOlxuXG4qICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIChub24tc3RhdGljKVxuKiAgIGBtcHRjcF9wbV9jaGtfc3RhbGVgIChub24tc3RhdGljKVxuKiAgIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCAobm9uLXN0YXRpYylcbiogICBgbXB0Y3BfcmVsZWFzZV9jYmAgKHN0YXRpYylcbiogICBgX19tcHRjcF9yZXRyYW5zYCAoc3RhdGljKVxuKiAgIGBfX21wdGNwX21vdmVfc2tiYCAoc3RhdGljKVxuKiAgIGBtcHRjcF9kYXRhX3F1ZXVlX29mb2AgKHN0YXRpYylcbiogICBgX19tcHRjcF9hZGRfYmFja2xvZ2AgKHN0YXRpYylcbiogICBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKVxuXG5Ob3csIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc3MSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjo0My41MDM0NTU4MDJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTY1NTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0OTg9c3RhdGljIHZvaWQgbXB0Y3BfdG91dF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MTItICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjUxMzpzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI1MTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMjo0NC4zMTkxMTYwMTJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg0NjQ3MDI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBUQ1AgRnVuY3Rpb24gU2NvcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBNUFRDUCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gbmFpbCBkb3duIGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBoYXBwZW5pbmcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gY2hlY2sgZm9yIGEgZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zZW5kbXNnYC5cblxuVGhlbiBpdCBjbGlja2VkOiBgbXB0Y3BfZGF0YV9yZWFkeWAsIGBtcHRjcF9yZWN2bXNnYCwgYW5kIGBtcHRjcF9zZW5kbXNnYCBhcmVuJ3QgKmRpcmVjdGx5KiBtb2RpZmllZCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGV5J3JlIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBjYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMuIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIHNpbmNlIHRoZXkgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCBpcyBpbmRlZWQgbm9uLXN0YXRpYyBhbmQgdmlzaWJsZSwgc28gSSBrbm93IEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGF0IGZ1cnRoZXIuIFNhbWUgd2l0aCBgbXB0Y3BfcG1fY2hrX3N0YWxlYC4gTm93IEkgc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNhbGxzIHRvIGBtcHRjcF93b3JrZXJgIHdoaWNoIGlzIHRoZSBiYWNrZ3JvdW5kIHByb2Nlc3NpbmcgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMyOjUwLjE2NTU4OTE0NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4Nzc1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfd29ya2VyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwOTE9Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwOTUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA5NjpcXHQvKiBHZXQgYSByZWZlcmVuY2Ugb24gdGhpcyBzb2NrZXQsIG1wdGNwX3dvcmtlcigpIHdpbGwgcmVsZWFzZSBpdC5cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDk3OlxcdCAqIEFzIG1wdGNwX3dvcmtlcigpIG1pZ2h0IGNvbXBsZXRlIGJlZm9yZSB1cywgd2UgY2FuIG5vdCBhdm9pZFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwOTgtXFx0ICogYSBzb2NrX2hvbGQoKS9zb2NrX3B1dCgpIGlmIHNjaGVkdWxlX3dvcmsoKSByZXR1cm5zIGZhbHNlLlxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYzMj1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY3LVxcdCAgICAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8IHNvY2tfZmxhZyhzc2ssIFNPQ0tfREVBRCkpKSB7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2ODpcXHRcXHQvKiBlbnN1cmUgbGF0ZXIgY2hlY2sgaW4gbXB0Y3Bfd29ya2VyKCkgd2lsbCBkaXNwb3NlIHRoZSBtc2sgKi9cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY5LVxcdFxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNzk5PXN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjgzOS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyODQwOlxcdC8qIHRoZSBjYWxsaW5nIG1wdGNwX3dvcmtlciB3aWxsIHByb3Blcmx5IGRlc3Ryb3kgdGhlIHNvY2tldCAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI4NDEtXFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMwNzc9c3RhdGljIHZvaWQgbXB0Y3BfZG9fZmFzdGNsb3NlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMTItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzExMzpzdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMTQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE2Mj1zdGF0aWMgdm9pZCBfX21wdGNwX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTY5LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE3MDpcXHRJTklUX1dPUksoXFx1MDAyNm1zay1cXHUwMDNld29yaywgbXB0Y3Bfd29ya2VyKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTcxLVxcdG1zay1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzI6NTAuMjA5NDY5NTkyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTQ0MjA5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIEZ1bmN0aW9uIENhbGxzIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3Bfd29ya2VyYCBmdW5jdGlvbiDigJMgaXQncyBzdGF0aWMuIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG1wdGNwX3JlbGVhc2VfY2JgLiBJdCdzIGFsc28gc3RhdGljLCB3aGljaCBtZWFucyBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBlaXRoZXIgZGlyZWN0bHkgbW9kaWZ5IG9yIGNhbGwgaXQuIFJpZ2h0LCBzbywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhvc2UgZnVuY3Rpb25zIGFyZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIEFoLCBhbmQgaXQgbG9va3MgbGlrZSBgbXB0Y3BfcmVjdm1zZ2AgYW5kIGBtcHRjcF9zZW5kbXNnYCBjYWxsIGBtcHRjcF9yZWxlYXNlX2NiYCBpbmRpcmVjdGx5IHRocm91Z2ggYHJlbGVhc2Vfc29jaygpYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSdyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIE1QVENQIHNvY2tldHMuXG5cbkdpdmVuIGFsbCBvZiB0aGF0LCBJIHNob3VsZCBjb25jZW50cmF0ZSBvbiB0aG9zZSBmaXZlIGZ1bmN0aW9uczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCwgYG1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gbG9vayBjbG9zZXIuXG5cblJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9ucy4gYE1QVENQYCBpcyB0aGUgbWFpbiBvbmUsIG9idmlvdXNseS4gQW5kIGBNUFRDUF9JUFY2YCB3b3VsZCBiZSBhIGdvb2Qgb25lIHRvIGhhdmUgYXMgd2VsbCwgZGVmaW5pdGVseS4gQW55IG90aGVyIGNydWNpYWwgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXI/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlIGFnYWluIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzI6NTcuMzYzODkyNzc4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0XFxuICAgMjpcXHRjb25maWcgTVBUQ1BcXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXFxuICAxMDpcXHRcXHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XFxuICAxMTpcXHRcXHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcXG4gIDEyOlxcdFxcdCAgTVBUQ1AuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIE1QVENQXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICAxODpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNUFRDUF9JUFY2XFxuICAyMTpcXHRcXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2PXlcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbiAgMjY6XFx0XFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiAgMjg6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDI5OlxcdFxcdGhlbHBcXG4gIDMwOlxcdFxcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxcbiAgMzE6XFx0XFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcXG4gIDMyOlxcdFxcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxcbiAgMzU6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzI6NTcuMzYzOTU0MTY4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTU3MDQyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1QVENQIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEJleW9uZCB0aGVzZSBjb25maWdzLCB3aGF0IGVsc2UgaGFzIGJlZW4gdG91Y2hlZD8gTGV0IG1lIGRvIGEgcXVpY2sgYXVkaXQgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucy5cblxuQWxyaWdodCwgYG1wdGNwX3BtX2Noa19zdGFsZWAgaXMgaW4gYG5ldC9tcHRjcC9wbS5jYC4gSSdsbCB3YW50IHRvIHJldmlzaXQgdGhhdCBvbmUuIFRoZW4gdGhlcmUncyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIGFuZCBgbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc2AgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYC5cblxuSSdsbCBkZWZpbml0ZWx5IG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYG1wdGNwX3BtX2Noa19zdGFsZWA7IHRoYXQgb25lIHNlZW1zIHBhcnRpY3VsYXJseSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMzowMS44NTk2NjEyMzlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njk2Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3BtX2Noa19zdGFsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcG0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDY5PW1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy0xMTA1LVxcbm5ldC9tcHRjcC9wbS5jOjExMDY6dm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcG0uYy0xMTA3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MDEuOTA0MzYxOTc2WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDEwMzUwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNdWx0aVBhdGggVENQIHN0YWNrIGhhbmRsZXMgcmV0cmFuc21pc3Npb25zIG9uIHN1YmZsb3dzLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gYWNxdWlyZSB0aGUgY291bnQuIFRoaXMgaXMgYSBjcnVjaWFsIG1ldHJpYyB3aGVuIGNvbnNpZGVyaW5nIGNvbmdlc3Rpb24gY29udHJvbCBhbmQgb3ZlcmFsbCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHJldHVybmVkIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkgcmVwcmVzZW50cyB0aGUgc3RhdGUgYW5kIGlmIGl0IGlzIHVzZWQgY29ycmVjdGx5IGluIHRoZSBiaWdnZXIgcGljdHVyZS4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHJlbGF0ZWQgdG8gdGhlIGNvdW50IHVwZGF0ZSBhbmQgcmV0cmlldmFsPyBJdCdzIGVzc2VudGlhbCB0byBwaW5wb2ludCB3aGVyZSwgd2hlbiwgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBMZXQncyBzdGFydCB3aXRoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYyMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMzOjA1LjgwNTM5OTc0MVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NzU1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDk4PXN0YXRpYyB2b2lkIG1wdGNwX3RvdXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTEyLSAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI1MTM6c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTE0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MDUuODQ5Mjc5NDE3WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDk4NTAyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2Agc2l0dWF0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgd2hhdCdzIGFjdHVhbGx5ICppbiogdGhpcyB0aGluZy4gV2hhdCdzIHRoZSBjb250ZXh0PyBJcyBpdCByZWxhdGVkIHRvIHRoZSBjb3JlIE1QLVRDUCBuZWdvdGlhdGlvbiBvciBtb3JlIGRvd25zdHJlYW0/IFdoYXQga2luZCBvZiBvcHRpb25zIGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSdyZSBsb29raW5nIGF0IHN0YW5kYXJkIE1QLVRDUCBvcHRpb25zIGxpa2UgYE1QX0NBUEFCTEVgLCBgTVBfSk9JTmAsIGV0Yy4sIG9yIHNvbWV0aGluZyBtb3JlIGFwcGxpY2F0aW9uLXNwZWNpZmljIHRoYXQgbWlnaHQgYmUgZmxvd2luZyB0aHJvdWdoIHRoZSBNUFRDUCBsYXllci4gSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBwYXJzaW5nIGFuZCB2YWxpZGF0aW9uLiBJcyB0aGVyZSBhIGRlZmluZWQgc3RydWN0dXJlPyBBcmUgdGhlcmUgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yPyBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGNvdWxkIGJlIGNydWNpYWwgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugc28gSSBhbSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIGRldGFpbHMuIFdlIHNob3VsZCBjaGVjayB0aGlzIHRob3JvdWdobHkuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MTEuMTk5MTMyMTU2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2MDIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL29wdGlvbnMuYz0xMTE2PXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNDEtXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMTQyOlxcdC8qIHRoaXMgYXNzdW1lcyBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkgaXMgaW52b2tlZCBhZnRlciB0Y3BfYWNrKCkgKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNDMtXFx0aWYgKGFmdGVyNjQobXNrLVxcdTAwM2V3bmRfZW5kLCBzbmRfbnh0KSlcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTE5Mz1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTIyMS0gKi9cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEyMjI6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyMjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjozMzoxMS4yNDY4OTU1NDJaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxNDUzNjIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYG1wdGNwX2RhdGFfcmVhZHlgKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgd2l0aCBgbXB0Y3BfZGF0YV9yZWFkeWAuIEl0J3MgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpcyBmdW5jdGlvbiBzaXRzIGluIHRoZSBNUFRDUCBkYXRhIGZsb3cuIFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IFdoYXQgdHJpZ2dlcnMgaXQ/IFdoYXQgYXJlIHRoZSBjb21tb24gcGl0ZmFsbHMgSSBzaG91bGQgaW1tZWRpYXRlbHkgY29uc2lkZXIsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgd2UgYXJlIHRyb3VibGVzaG9vdGluZz9cblxuSXMgaXQgcmVsYXRlZCB0byBhbnkgc3BlY2lmaWMgY29uZ2VzdGlvbiBjb250cm9sIG1lY2hhbmlzbXM/IFdoYXQgaGFwcGVucyBpZiB0aGUgbmV0d29yayBjb25kaXRpb25zIGNoYW5nZSByYXBpZGx5PyBJcyBpdCBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiBkYXRhIGluIHRoZSBzdWJmbG93cywgb3IgY291bGQgdGhlcmUgYmUgYSBzdWJ0bGUgc3luY2hyb25pemF0aW9uIGlzc3VlIGx1cmtpbmc/IEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IHF1ZXN0aW9uOiBoYXZlIEkgY2hlY2tlZCB0aGUgb2J2aW91cz8gQW55IHJlY2VudCBjb2RlIGNoYW5nZXMgaW4gdGhlIGFyZWE/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgb3B0aW1pc2F0aW9ucyBwb3RlbnRpYWxseSBhZmZlY3RpbmcgaXQ/IExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDkwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MTUuMjYxNDMzODQ5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxMDY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9kYXRhX3JlYWR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTk3OT1zdGF0aWMgdm9pZCBtcHRjcF9yY3ZfcnR0X3VwZGF0ZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA1OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMzOjE1LjMwNjA1MDIzNloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTQ1MzExMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgTVBUQ1AgcGF0Y2g6XG5cbioqTVBUQ1AgUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ20gaW50ZWdyYXRpbmcgdGhlc2Ugc3BlY2lmaWMgTVBUQ1AgZnVuY3Rpb25zIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgZm9yIGZ1enppbmc6IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGBtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zYCwgYG1wdGNwX2RhdGFfcmVhZHlgLCBgbXB0Y3BfcmVjdm1zZ2AsIGFuZCBgbXB0Y3Bfc2VuZG1zZ2AuIFRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgZGVhbGluZyB3aXRoIG1lbW9yeSBsaW1pdHMgYW5kIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6emluZyB0YXJnZXQuXCIgV2UgKm5lZWQqIHRvIHB1dCB0aGlzIHRocm91Z2ggaXRzIHBhY2VzLlxuXG5Ob3csIGJlZm9yZSB3ZSBsYXVuY2gsIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9mIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UndmUgZ290IGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuIE5vIHN1cnByaXNlcyB0aGVyZS4gTGV0J3MgbWFrZSBzdXJlLCB0aG91Z2guIEFoLCByaWdodC4gYElORVRgIGlzIGEgZ2l2ZW4sIGEgZm91bmRhdGlvbmFsIGRlcGVuZGVuY3kuIEFuZCwgb2YgY291cnNlLCBgSVBWNmAgaXMgcmVxdWlyZWQgaWYgYE1QVENQX0lQVjZgIGlzIGVuYWJsZWQuIEdvb2QuXG5cbkZpbmFsbHksIEknbGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcHJlc2VudCB0aGUgZnV6emluZyByZXN1bHRzIGluIGEgY2xlYXIgYW5kIHN0cnVjdHVyZWQgd2F5LiBXZSB3YW50IHRoaXMgdG8gYmUgZWFzaWx5IGRpZ2VzdGlibGUgZm9yIHRoZSB0ZWFtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg2NiwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MjEuNDUxMzY0ODY2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2ODM3MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCIsXG4gICAgXCJNUFRDUF9JUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3BfaW5jb21pbmdfb3B0aW9uc1wiLFxuICAgIFwibXB0Y3BfcG1fY2hrX3N0YWxlXCIsXG4gICAgXCJtcHRjcF9zdWJmbG93X2dldF9yZXRyYW5zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCIsXG4gICAgXCJtcHRjcF9yZWN2bXNnXCIsXG4gICAgXCJtcHRjcF9zZW5kbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1QVENQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGhhbmRsZSBtZW1vcnkgbGltaXRzLCBiYWNrbG9nIGRyb3BzLCBhbmQgcmV0cmFuc21pc3Npb24gbG9naWMuIEl0IGFkZHMgbmV3IE1JQiBjb3VudGVycyBhbmQgbW9kaWZpZXMgY29yZSBNUFRDUCBmdW5jdGlvbnMgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9wbV9jaGtfc3RhbGVgLCBhbmQgYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSBzdGFuZGFyZCBNUFRDUCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgbmV0d29yayByZWNlaXZlIHBhdGhzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9wbV9jaGtfc3RhbGVcIixcbiAgICBcIm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIixcbiAgICBcIm1wdGNwX3JlY3Ztc2dcIixcbiAgICBcIm1wdGNwX3NlbmRtc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTVBUQ1AgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gaGFuZGxlIG1lbW9yeSBsaW1pdHMsIGJhY2tsb2cgZHJvcHMsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgYWRkcyBuZXcgTUlCIGNvdW50ZXJzIGFuZCBtb2RpZmllcyBjb3JlIE1QVENQIGZ1bmN0aW9ucyBsaWtlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCwgYG1wdGNwX3BtX2Noa19zdGFsZWAsIGFuZCBgX19tcHRjcF9yZXRyYW5zYC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHN0YW5kYXJkIE1QVENQIHNvY2tldCBvcGVyYXRpb25zIGFuZCBuZXR3b3JrIHJlY2VpdmUgcGF0aHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MjEuNTQwMDU1Mzg5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU5MzcxMTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMzOjIxLjU0MDUyNDYwOVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjU5MzIzNzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGZvY3VzZXMgb24gTVBUQ1AgbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB1bmRlciBtZW1vcnkgcHJlc3N1cmUsIGFuZCByZXRyYW5zbWlzc2lvbiBsb2dpYy4gSXQgaW50cm9kdWNlcyBuZXcgTUlCIGNvdW50ZXJzLCBhZGRzIG1lbW9yeSBsaW1pdCBjaGVja3MgKGBtcHRjcF9vdmVyX2xpbWl0YCwgYG1wdGNwX3RyeV9ybWVtX3NjaGVkdWxlYCksIGltcGxlbWVudHMgb3V0LW9mLW9yZGVyIHF1ZXVlIHBydW5pbmcgKGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgKSwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9vcCAoYF9fbXB0Y3BfcmV0cmFuc2ApLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW52b2x2ZSBhbGxvY2F0aW5nIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGV4cG9zaW5nIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgcmVseWluZyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBmb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgZHVyaW5nIHBhY2tldCBkcm9wcGluZyBvciBxdWV1ZSBtYW5pcHVsYXRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjYwNmE3YmM0NjUxMGI4YTk4NDg4YWI1MjY0YjczZmI4NjNmYTg5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTY6MjE6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmMgYi9uZXQvbXB0Y3AvbWliLmNcbmluZGV4IGYyM2ZkYTBjNTVhNzIuLjI1NjkzODViYWI3Y2EgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmNcbisrKyBiL25ldC9tcHRjcC9taWIuY1xuQEAgLTg1LDYgKzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiRmFsbGJhY2tGYWlsZWRcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJXaW5Qcm9iZVwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuK1x0U05NUF9NSUJfSVRFTShcIkJhY2tsb2dEcm9wXCIsIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXG4rXHRTTk1QX01JQl9JVEVNKFwiUmN2UHJ1bmVkXCIsIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxuK1x0U05NUF9NSUJfSVRFTShcIk9GT1BydW5lZFwiLCBNUFRDUF9NSUJfT0ZPUFJVTkVEKSxcbiB9O1xuIFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbWliLmggYi9uZXQvbXB0Y3AvbWliLmhcbmluZGV4IDgxMjIxOGI1ZWQyYmYuLjNhMzQyNWUyNThhNzYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcbisrKyBiL25ldC9tcHRjcC9taWIuaFxuQEAgLTg4LDYgKzg4LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQge1xuIFx0TVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyxcdC8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovXG4gXHRNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsXHQvKiBDYW4ndCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqL1xuIFx0TVBUQ1BfTUlCX1dJTlBST0JFLFx0XHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xuK1x0TVBUQ1BfTUlCX0JBQ0tMT0dEUk9QLFx0XHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXG4rXHRNUFRDUF9NSUJfUkNWUFJVTkVELFx0XHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWludHMgKi9cbitcdE1QVENQX01JQl9PRk9QUlVORUQsXHRcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cbiBcdF9fTVBUQ1BfTUlCX01BWFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbmluZGV4IDEwNTdkNTAwNTc3YjAuLmI4MzE4ZTAzMDEzODkgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avb3B0aW9ucy5jXG4rKysgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXG5AQCAtMTE5MCw4ICsxMTkwLDM0IEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdHJldHVybiBobWFjID09IG1wX29wdC1cdTAwM2VhaG1hYztcbiB9XG4gXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxuLSAqIGVsc2UgcmV0dXJuIHRydWUuXG4rc3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4rXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHR1MzIgcmN2YnVmID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4rXG4rXHRpZiAobGlrZWx5KCh1MzIpc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYz0gcmN2YnVmIFx1MDAyNlx1MDAyNlxuK1x0XHQgICBSRUFEX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuKSBcdTAwM2M9IHJjdmJ1ZikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIEF2b2lkIHNpbGVudGx5IGRyb3BwaW5nIHB1cmUgYWNrcywgZmluLCByc3Qgb3IgYWxyZWFkeS1hY2tlZCBzZWdtLiAqL1xuK1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbitcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiAoVENQSERSX0ZJTiB8IFRDUEhEUl9SU1QpIHx8XG4rXHQgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxLCB0Y3Bfc2soc3NrKS1cdTAwM2VyY3Zfbnh0KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXG4rXHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4rXHRpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTtcbitcbitcdC8qIFBsYWluIFRDUCAoZmFsbGJhY2spIGFuZCBza2IgaXMgZHJvcHBlZCBiZWZvcmUgdGhlIFRDUCByZWN2IHF1ZXVlLiAqL1xuK1x0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BSQ1ZRRFJPUCk7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuKyAqIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQsIG9yIG92ZXIgbWVtb3J5IGxpbWl0cy5cbiAgKi9cbiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbkBAIC0xMjE3LDcgKzEyNDMsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0XHRfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy1cdTAwM2Vjb25uKTtcbiBcdFx0bXB0Y3BfZGF0YV91bmxvY2soc3ViZmxvdy1cdTAwM2Vjb25uKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4rXHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wbS5jIGIvbmV0L21wdGNwL3BtLmNcbmluZGV4IDY0YTEyMzZhYWJlZTkuLmQxZjczYzNlMzlmYTMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcG0uY1xuKysrIGIvbmV0L21wdGNwL3BtLmNcbkBAIC0xMDY1LDcgKzEwNjUsOCBAQCBib29sIG1wdGNwX3BtX2lzX2JhY2t1cChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYylcbiBcdHJldHVybiBtcHRjcF9wbV9ubF9pc19iYWNrdXAobXNrLCBcdTAwMjZza2NfbG9jYWwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtcHRjcF9wbV9zdWJmbG93c19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbitzdGF0aWMgdm9pZFxuK21wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqaXRlciwgKnN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuQEAgLTExMDIsMjIgKzExMDMsMzQgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NcbiBcdH1cbiB9XG4gXG4tdm9pZCBtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuK3ZvaWQgbXB0Y3BfcG1fY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XG4tXHR1MzIgcmN2X3RzdGFtcCA9IFJFQURfT05DRSh0Y3Bfc2soc3NrKS1cdTAwM2VyY3ZfdHN0YW1wKTtcbi1cbi1cdC8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqL1xuLVx0aWYgKCFzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50KSB7XG4tXHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfcmN2X3RzdGFtcCA9IHJjdl90c3RhbXA7XG4tXHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQrKztcbi1cdH0gZWxzZSBpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHtcbi1cdFx0aWYgKHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQgXHUwMDNjIFU4X01BWClcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4rXG4rXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xuK1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbitcdFx0dTMyIHJjdl90c3RhbXA7XG4rXG4rXHRcdGlmICghX19tcHRjcF9zdWJmbG93X2FjdGl2ZShzdWJmbG93KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogTm8gZGF0YSBvdXRzdGFuZGluZyBhdCBUQ1AgbGV2ZWw/IG5vdCBzdGFsZSAqL1xuK1x0XHRpZiAodGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIGtlZXAgdHJhY2sgb2YgcnR4IHBlcmlvZHMgd2l0aCBubyBwcm9ncmVzcyAqL1xuK1x0XHRyY3ZfdHN0YW1wID0gUkVBRF9PTkNFKHRjcF9zayhzc2spLVx1MDAzZXJjdl90c3RhbXApO1xuK1x0XHRpZiAoIXN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpIHtcbitcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX3Jjdl90c3RhbXAgPSByY3ZfdHN0YW1wO1xuIFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQrKztcbi1cdFx0bXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKG1zaywgc3NrKTtcbi1cdH0gZWxzZSB7XG4tXHRcdHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQgPSAwO1xuLVx0XHRtcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7XG4rXHRcdH0gZWxzZSBpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9yY3ZfdHN0YW1wID09IHJjdl90c3RhbXApIHtcbitcdFx0XHRpZiAoc3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCBcdTAwM2MgVThfTUFYKVxuK1x0XHRcdFx0c3ViZmxvdy1cdTAwM2VzdGFsZV9jb3VudCsrO1xuK1x0XHRcdG1wdGNwX3BtX3N1YmZsb3dfY2hrX3N0YWxlKG1zaywgc3NrKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdWJmbG93LVx1MDAzZXN0YWxlX2NvdW50ID0gMDtcbitcdFx0XHRtcHRjcF9zdWJmbG93X3NldF9hY3RpdmUoc3ViZmxvdyk7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggN2M4MTgwZDhkNWVmZi4uZWM4NzRkMmVhZDZhNCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTI0Miw2ICsyNDIsNjUgQEAgc3RhdGljIGJvb2wgbXB0Y3BfcmN2YnVmX2dyb3coc3RydWN0IHNvY2sgKnNrLCB1MzIgbmV3dmFsKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbisvKiBcIkluc3BpcmVkXCIgZnJvbSB0aGUgVENQIHZlcnNpb247IG1haW4gZGlmZmVyZW5jZTogc3RvcCBhcyBzb29uIGFzIHRoZSBNUFRDUFxuKyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuXG4rICovXG4rc3RhdGljIHZvaWQgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmluX3NrYilcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IHJiX25vZGUgKm5vZGUsICpwcmV2O1xuK1x0Ym9vbCBwcnVuZWQgPSBmYWxzZTtcbitcdHU2NCBtZW07XG4rXG4rXHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZtc2stXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bm9kZSA9IFx1MDAyNm1zay1cdTAwM2Vvb29fbGFzdF9za2ItXHUwMDNlcmJub2RlO1xuK1xuK1x0ZG8ge1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xuK1xuK1x0XHQvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqL1xuK1x0XHRpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0IoaW5fc2tiKS1cdTAwM2VtYXBfc2VxLFxuK1x0XHRcdCAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxKSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0cHJ1bmVkID0gdHJ1ZTtcbitcdFx0cHJldiA9IHJiX3ByZXYobm9kZSk7XG4rXHRcdHJiX2VyYXNlKG5vZGUsIFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xuK1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuK1x0XHRtc2stXHUwMDNlb29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpO1xuK1xuK1x0XHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbitcdFx0aWYgKG1lbSBcdTAwM2M9IHNrLVx1MDAzZXNrX3JjdmJ1ZilcbitcdFx0XHRicmVhaztcbitcbitcdFx0bm9kZSA9IHByZXY7XG4rXHR9IHdoaWxlIChub2RlKTtcbitcbitcdGlmIChwcnVuZWQpXG4rXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9QUlVORUQpO1xuK31cbitcbisvKiBUaGUgc3RhY2sgY2FuJ3QgZHJvcCBwYWNrZXRzIGZvciBmYWxsYmFjayBzb2NrZXQgYXQgdGhlIG1zayBsZXZlbCwgb3IgdGhlXG4rICogc3RyZWFtIHdpbGwgYnJlYWsuXG4rICovXG4rc3RhdGljIGJvb2wgbXB0Y3BfY2FuX2luZ2VzdChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0cmV0dXJuIHVubGlrZWx5KHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2M9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSB8fFxuK1x0XHRcdF9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXB0Y3Bfc2soc2spKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGlmICghbXB0Y3BfY2FuX2luZ2VzdChzaykpIHtcbitcdFx0bXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHNrLCBza2IpO1xuK1x0XHRyZXR1cm4gbXB0Y3BfY2FuX2luZ2VzdChzayk7XG4rXHR9XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gLyogXCJpbnNwaXJlZFwiIGJ5IHRjcF9kYXRhX3F1ZXVlX29mbygpLCBtYWluIGRpZmZlcmVuY2VzOlxuICAqIC0gdXNlIG1wdGNwIHNlcXNcbiAgKiAtIGRvbid0IGNvcGUgd2l0aCBzYWNrc1xuQEAgLTI1Myw2ICszMTIsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHU2NCBzZXEsIGVuZF9zZXEsIG1heF9zZXE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiMTtcbiBcbitcdGlmICghbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGUoc2ssIHNrYikpIHtcbitcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX1JDVlBSVU5FRCk7XG4rXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdHNlcSA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4gXHRlbmRfc2VxID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcTtcbiBcdG1heF9zZXEgPSBhdG9taWM2NF9yZWFkKFx1MDAyNm1zay1cdTAwM2VyY3Zfd25kX3NlbnQpO1xuQEAgLTM4OSw2ICs0NTQsMTMgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRpZiAoTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSA9PSBtc2stXHUwMDNlYWNrX3NlcSkge1xuIFx0XHQvKiBpbiBzZXF1ZW5jZSAqL1xuK2luc2VydDpcbitcdFx0aWYgKCFtcHRjcF90cnlfcm1lbV9zY2hlZHVsZShzaywgc2tiKSkge1xuK1x0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuK1x0XHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR9XG4rXG4gXHRcdG1zay1cdTAwM2VieXRlc19yZWNlaXZlZCArPSBjb3B5X2xlbjtcbiBcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlYWNrX3NlcSwgbXNrLVx1MDAzZWFja19zZXEgKyBjb3B5X2xlbik7XG4gXHRcdHRhaWwgPSBza2JfcGVla190YWlsKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuQEAgLTQwMywyNiArNDc1LDIwIEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHQvKiBDb21wbGV0ZWx5IG9sZCBkYXRhPyAqL1xuLVx0aWYgKCFhZnRlcjY0KE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEsIG1zay1cdTAwM2VhY2tfc2VxKSkge1xuLVx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfRFVQREFUQSk7XG4tXHRcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4tXHRcdHJldHVybiBmYWxzZTtcbitcdC8qIFBhcnRpYWwgcGFja2V0ICovXG4rXHRpZiAoYWZ0ZXI2NChNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxLCBtc2stXHUwMDNlYWNrX3NlcSkpIHtcbitcdFx0Y29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxIC0gbXNrLVx1MDAzZWFja19zZXE7XG4rXHRcdE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldCArPSBtc2stXHUwMDNlYWNrX3NlcSAtXG4rXHRcdFx0XHRcdCAgICAgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcTtcbitcdFx0TVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSArPSBtc2stXHUwMDNlYWNrX3NlcSAtXG4rXHRcdFx0XHRcdCAgICAgIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG4rXHRcdGdvdG8gaW5zZXJ0O1xuIFx0fVxuIFxuLVx0LyogUGFydGlhbCBwYWNrZXQ6IG1hcF9zZXEgXHUwMDNjIGFja19zZXEgXHUwMDNjIGVuZF9zZXEuXG4tXHQgKiBTa2lwIHRoZSBhbHJlYWR5LWFja2VkIGJ5dGVzIGFuZCBlbnF1ZXVlIHRoZSBuZXcgZGF0YS5cbi1cdCAqL1xuLVx0Y29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxIC0gbXNrLVx1MDAzZWFja19zZXE7XG4tXHRNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQgKz0gbXNrLVx1MDAzZWFja19zZXEgLSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuLVx0TVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSArPSBtc2stXHUwMDNlYWNrX3NlcSAtXG4tXHRcdFx0XHQgICAgICBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuLVx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xuLVx0V1JJVEVfT05DRShtc2stXHUwMDNlYWNrX3NlcSwgbXNrLVx1MDAzZWFja19zZXEgKyBjb3B5X2xlbik7XG4tXG4tXHRza2Jfc2V0X293bmVyX3Ioc2tiLCBzayk7XG4tXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYik7XG4tXHRyZXR1cm4gdHJ1ZTtcbitcdC8qIENvbXBsZXRlbHkgb2xkIGRhdGEgKi9cbitcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9EVVBEQVRBKTtcbitcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1wdGNwX3N0b3BfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcbkBAIC02ODEsNiArNzQ3LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrID0gc2tiLVx1MDAzZXNrO1xuIFx0Ym9vbCBmcmFnc3RvbGVuO1xuK1x0dTY0IGxpbWl0O1xuIFx0aW50IGRlbHRhO1xuIFxuIFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkpIHtcbkBAIC02ODgsNiArNzU1LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHQvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi9cbitcdGxpbWl0ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4rXHRsaW1pdCArPSAobGltaXQgXHUwMDNlXHUwMDNlIDEpICsgNjQgKiAxMDI0O1xuK1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4rXHRpZiAobXNrLVx1MDAzZWJhY2tsb2dfbGVuIFx1MDAzZSBsaW1pdCBcdTAwMjZcdTAwMjYgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSkge1xuK1x0XHRfX01QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9CQUNLTE9HRFJPUCk7XG4rXHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzU5LDcgKzgzNiw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFxuIFx0XHRcdG1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7XG4gXG4tXHRcdFx0aWYgKG93bl9tc2sgXHUwMDI2XHUwMDI2IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Mgc2stXHUwMDNlc2tfcmN2YnVmKSB7XG4rXHRcdFx0aWYgKG93bl9tc2spIHtcbiBcdFx0XHRcdG1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTtcbiBcdFx0XHRcdHJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpO1xuIFx0XHRcdH0gZWxzZSB7XG5AQCAtMTE0MiwxMyArMTIxOSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIxNSwxMiArMjI4NSw3IEBAIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticywgdTMyICpkZWx0XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0Ym9vbCBtb3ZlZCA9IGZhbHNlO1xuIFxuLVx0KmRlbHRhID0gMDtcbiBcdHdoaWxlICgxKSB7XG4tXHRcdC8qIElmIHRoZSBtc2sgcmVjdmJ1ZiBpcyBmdWxsIHN0b3AsIGRvbid0IGRyb3AgKi9cbi1cdFx0aWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuLVx0XHRcdGJyZWFrO1xuLVxuIFx0XHRwcmVmZXRjaChza2ItXHUwMDNlbmV4dCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnNrYi1cdTAwM2VsaXN0KTtcbiBcdFx0KmRlbHRhICs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQ4LDkgKzIzMTMsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX3VuYWNjb3VudGVkIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zb2NrZXQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgICAgIG1lbV9jZ3JvdXBfZnJvbV9zayhzaykpO1xuIFxuLVx0LyogRG9uJ3Qgc3Bvb2wgdGhlIGJhY2tsb2cgaWYgdGhlIHJjdmJ1ZiBpcyBmdWxsLiAqL1xuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkgfHxcbi1cdCAgICBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNlIHNrLVx1MDAzZXNrX3JjdmJ1ZilcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjU4LDIwICsyMzIxLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsXG4tXHRcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4te1xuLVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbi1cbi1cdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4tXHRsaXN0X3NwbGljZShza2JzLCBcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KTtcbi19XG4tXG4gc3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbiB7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBza2JzO1xuIFx0Ym9vbCBlbnF1ZXVlZCA9IGZhbHNlO1xuLVx0dTMyIG1vdmVkO1xuK1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3OSw4ICsyMzM0LDggQEAgc3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKTtcbiBcbiBcdFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbi1cdFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXHUwMDI2c2ticyk7XG4gXHR9XG4rXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuIFxuIFx0aWYgKGVucXVldWVkIFx1MDAyNlx1MDAyNiBtcHRjcF9lcG9sbGluX3JlYWR5KHNrKSlcbkBAIC0yNDY5LDcgKzI1MjQsNiBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFxuIFx0XHQvKiBzdGlsbCBkYXRhIG91dHN0YW5kaW5nIGF0IFRDUCBsZXZlbD8gc2tpcCB0aGlzICovXG4gXHRcdGlmICghdGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNzaykpIHtcbi1cdFx0XHRtcHRjcF9wbV9zdWJmbG93X2Noa19zdGFsZShtc2ssIHNzayk7XG4gXHRcdFx0bWluX3N0YWxlX2NvdW50ID0gbWluX3QoaW50LCBtaW5fc3RhbGVfY291bnQsIHN1YmZsb3ctXHUwMDNlc3RhbGVfY291bnQpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG5AQCAtMjc5MSw0NCArMjg0NSwyMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbiBcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4rLypcbisgKiBSZXRyYW5zbWl0IHRoZSBzcGVjaWZpZWQgZGF0YSBmcmFnbWVudCBvbiBhbGwgdGhlIHNlbGVjdGVkIHN1YmZsb3dzLFxuKyAqIHN0YXJ0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZVxuKyAqL1xuK3N0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbitcdFx0XHRcdHU2NCBzZW50X3NlcSlcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbi1cdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuIFx0c3RydWN0IHNvY2sgKnNzaztcbi1cdGludCByZXQsIGVycjtcbi1cdHUxNiBsZW4gPSAwO1xuLVxuLVx0bXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4tXG4tXHQvKiBmaXJzdCBjaGVjayBzc2s6IG5lZWQgdG8ga2ljayBcInN0YWxlXCIgbG9naWMgKi9cbi1cdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XG4tXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbi1cdGlmICghZGZyYWcpIHtcbi1cdFx0aWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkge1xuLVx0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbi1cbi1cdFx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcbi1cdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xuLVx0XHRcdG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spO1xuLVx0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4tXG4tXHRcdFx0Z290byByZXNldF90aW1lcjtcbi1cdFx0fVxuLVxuLVx0XHRpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpXG4tXHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4tXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4tXHR9XG4tXG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuK1x0aW50IHJldCwgbGVuID0gMDtcbiBcbiBcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4gXHRcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2VzY2hlZHVsZWQpKSB7XG4rXHRcdFx0dTE2IG9mZnNldCA9IHNlbnRfc2VxIC0gZGZyYWctXHUwMDNlZGF0YV9zZXE7XG4gXHRcdFx0dTE2IGNvcGllZCA9IDA7XG4gXG4gXHRcdFx0bXB0Y3Bfc3ViZmxvd19zZXRfc2NoZWR1bGVkKHN1YmZsb3csIGZhbHNlKTtcbkBAIC0yODM4LDcgKzI4NzAsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdGxvY2tfc29jayhzc2spO1xuIFxuIFx0XHRcdC8qIGxpbWl0IHJldHJhbnNtaXNzaW9uIHRvIHRoZSBieXRlcyBhbHJlYWR5IHNlbnQgb24gc29tZSBzdWJmbG93cyAqL1xuLVx0XHRcdGluZm8uc2VudCA9IDA7XG4rXHRcdFx0aW5mby5zZW50ID0gb2Zmc2V0O1xuIFx0XHRcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVx1MDAzZWNzdW1fZW5hYmxlZCkgPyBkZnJhZy1cdTAwM2VkYXRhX2xlbiA6XG4gXHRcdFx0XHRcdFx0XHRcdCAgICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQ7XG4gXG5AQCAtMjg1Myw3ICsyODg1LDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHQgICAgIW1zay1cdTAwM2VhbGxvd19zdWJmbG93cykge1xuIFx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXNrLVx1MDAzZWZhbGxiYWNrX2xvY2spO1xuIFx0XHRcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4tXHRcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbitcdFx0XHRcdHJldHVybiAtMTtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0d2hpbGUgKGluZm8uc2VudCBcdTAwM2MgaW5mby5saW1pdCkge1xuQEAgLTI4NzYsMTMgKzI5MDgsOTkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRyZWxlYXNlX3NvY2soc3NrKTtcbiBcdFx0fVxuIFx0fVxuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbitcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuK1x0dTY0IHJldHJhbnNfc2VxLCBzZW50X3NlcTtcbitcdGJvb2wgbmVlZF9yZXRyYW5zO1xuK1x0aW50IGVyciwgbGVuO1xuK1xuK1x0bXB0Y3BfcG1fY2hrX3N0YWxlKG1zayk7XG4rXG4rXHQvKiBHZXQgYW4gdXBkYXRlZCBhbmQgY29uc2lzdGVudCBydHggcXVldWUgc3RhdHVzLiAqL1xuK1x0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbitcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4rXHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4rXHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuK1x0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuK1xuK1x0Zm9yICg7Oykge1xuK1x0XHRib29sIGFscmVhZHlfYWNrZWQ7XG4rXG4rXHRcdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXG4rXHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXG4rXHRcdGxlbiA9IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHNrLCBkZnJhZywgcmV0cmFuc19zZXEpO1xuK1x0XHRpZiAobGVuIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuK1xuK1x0XHRyZXRyYW5zX3NlcSArPSBsZW47XG4rXHRcdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcbitcdFx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsXG4rXHRcdFx0XHRcdCAgICByZXRyYW5zX3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxKTtcbitcbitcdFx0LyogV2l0aCBjc3VtIGVuYWJsZWQsIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuK1x0XHRzZW50X3NlcSA9IGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVx1MDAzZWRhdGFfc2VxO1xuK1x0XHRpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLVx1MDAzZXNuZF9ueHQpKVxuK1x0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcbitcbitcdFx0LyogQXR0ZW1wdCB0aGUgbmV4dCBmcmFnbWVudCBvbmx5IGlmIHRoZSBjdXJyZW50IG9uZSBpc1xuK1x0XHQgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAoYmVmb3JlNjQocmV0cmFuc19zZXEsIGRmcmFnLVx1MDAzZWRhdGFfc2VxICsgZGZyYWctXHUwMDNlZGF0YV9sZW4pKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcdTAwMjZkZnJhZy1cdTAwM2VsaXN0LCBcdTAwMjZtc2stXHUwMDNlcnR4X3F1ZXVlKSA/XG4rXHRcdFx0XHROVUxMIDogbGlzdF9uZXh0X2VudHJ5KGRmcmFnLCBsaXN0KTtcbitcdFx0aWYgKCFkZnJhZylcbitcdFx0XHRicmVhaztcbitcbitcdFx0LyogSW5jb21pbmcgYWNrcyBjYW4gbW92ZSBzbmRfdW5hIGFmdGVyIHRoZSBjdXJyZW50IGRmcmFnXG4rXHRcdCAqIGFjcm9zcyBsb29wIGl0ZXJhdGlvbnMsIGlmIHNvIHN0YXJ0IGFnYWluIGZyb20gUlRYIGhlYWQuXG4rXHRcdCAqL1xuK1x0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuK1x0XHRhbHJlYWR5X2Fja2VkID0gIWJlZm9yZTY0KG1zay1cdTAwM2VzbmRfdW5hLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSArXG4rXHRcdFx0XHRcdCAgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KTtcbitcdFx0aWYgKGFscmVhZHlfYWNrZWQpIHtcbitcdFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuK1x0XHRcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4rXHRcdFx0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcbitcdFx0fSBlbHNlIGlmIChhZnRlcjY0KG1zay1cdTAwM2VzbmRfdW5hLCByZXRyYW5zX3NlcSkpIHtcbitcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0XHR9XG4rXHRcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbitcdH1cbiBcbi1cdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcbi1cdGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCA9IG1heChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsIGxlbik7XG4rXHQvKiBBdHRlbXB0IGRhdGEtZmluIHJldHJhbnNtaXNzaW9uIG9ubHkgd2hlbiB0aGUgUlRYIHF1ZXVlIGlzIGVtcHR5LiAqL1xuK1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbitcdFx0aWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkge1xuK1x0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiBcbi1cdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuLVx0aWYgKGFmdGVyNjQoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXEsIG1zay1cdTAwM2VzbmRfbnh0KSlcbi1cdFx0V1JJVEVfT05DRShtc2stXHUwMDNlc25kX254dCwgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXHUwMDNlZGF0YV9zZXEpO1xuK1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuK1x0XHRcdFx0ICAgaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XG4rXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4rXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbitcdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbitcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbitcdH1cbiBcbiByZXNldF90aW1lcjpcbiBcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XG5AQCAtMzY3NiwxMiArMzc5NCwxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbiBcdF9fbXVzdF9ob2xkKFx1MDAyNnNrLVx1MDAzZXNrX2xvY2suc2xvY2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbitcdHUzMiBtb3ZlZCA9IDA7XG4gXG4gXHRmb3IgKDs7KSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLVx1MDAzZWNiX2ZsYWdzIFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XG4gXHRcdGJvb2wgc3Bvb2xfYmw7XG4tXHRcdHUzMiBtb3ZlZDtcbiBcbiBcdFx0c3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticyk7XG4gXHRcdGlmICghZmxhZ3MgXHUwMDI2XHUwMDI2ICFzcG9vbF9ibClcbkBAIC0zNzE0LDkgKzM4MzIsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKTtcbi1cdFx0aWYgKHNwb29sX2JsKVxuLVx0XHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuK1x0aWYgKG1vdmVkKVxuK1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFxuIFx0aWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgXHUwMDI2bXNrLVx1MDAzZWNiX2ZsYWdzKSlcbiBcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCAxYjgwZjJkNmVjNWEyLi5iM2FmMzQ2MmJkZDE2IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtNTgwLDEyICs1ODAsMTEgQEAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCB7XG4gXHRcdHJlbW90ZV9rZXlfdmFsaWQgOiAxLCAgICAgICAgLyogcmVjZWl2ZWQgdGhlIHBlZXIga2V5IGZyb20gKi9cbiBcdFx0ZGlzcG9zYWJsZSA6IDEsXHQgICAgLyogY3R4IGNhbiBiZSBmcmVlIGF0IHVscCByZWxlYXNlIHRpbWUgKi9cbiBcdFx0Y2xvc2luZyA6IDEsXHQgICAgLyogbXVzdCBub3QgcGFzcyByeCBkYXRhIHRvIG1zayBhbnltb3JlICovXG4tXHRcdHN0YWxlIDogMSxcdCAgICAvKiB1bmFibGUgdG8gc25kL3JjdiBkYXRhLCBkbyBub3QgdXNlIGZvciB4bWl0ICovXG4gXHRcdHZhbGlkX2NzdW1fc2VlbiA6IDEsICAgICAgICAvKiBhdCBsZWFzdCBvbmUgY3N1bSB2YWxpZGF0ZWQgKi9cbiBcdFx0aXNfbXB0Zm8gOiAxLFx0ICAgIC8qIHN1YmZsb3cgaXMgZG9pbmcgVEZPICovXG4gXHRcdGNsb3NlX2V2ZW50X2RvbmUgOiAxLCAgICAgICAvKiBoYXMgZG9uZSB0aGUgcG9zdC1jbG9zZWQgcGFydCAqL1xuIFx0XHRtcGNfZHJvcCA6IDEsXHQgICAgLyogdGhlIE1QQyBvcHRpb24gaGFzIGJlZW4gZHJvcHBlZCBpbiBhIHJ0eCAqL1xuLVx0XHRfX3VudXNlZCA6IDg7XG4rXHRcdF9fdW51c2VkIDogOTtcbiBcdGJvb2xcdGRhdGFfYXZhaWw7XG4gXHRib29sXHRzY2hlZHVsZWQ7XG4gXHRib29sXHRwbV9saXN0ZW5lcjtcdCAgICAvKiBhIGxpc3RlbmVyIG1hbmFnZWQgYnkgdGhlIGtlcm5lbCBQTT8gKi9cbkBAIC02MDQsNyArNjAzLDExIEBAIHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQge1xuIFx0dThcdHJlc2V0X3NlZW46MTtcbiBcdHU4XHRyZXNldF90cmFuc2llbnQ6MTtcbiBcdHU4XHRyZXNldF9yZWFzb246NDtcbi1cdHU4XHRzdGFsZV9jb3VudDtcbitcdHU4XHRzdGFsZV9jb3VudDtcdCAgICAvKiBQcm90ZWN0ZWQgYnkgdGhlIG1zayBzb2NrZXQgbG9jayAqL1xuK1x0dThcdHN0YWxlO1x0XHQgICAgLyogUHJvdGVjdGVkIGJ5IHRoZSBtc2sgc29ja2V0IGxvY2ssXG4rXHRcdFx0XHQgICAgICogaWYgc2V0IHRoZSBzdWJmbG93IGlzIHVuYWJsZSB0byBzbmQvcmN2XG4rXHRcdFx0XHQgICAgICogZGF0YSwgdGhlIHNjaGVkdWxlIHNob3VsZCBza2lwIGl0XG4rXHRcdFx0XHQgICAgICovXG4gXG4gXHR1MzJcdHN1YmZsb3dfaWQ7XG4gXG5AQCAtMTEwMyw3ICsxMTA2LDcgQEAgaW50IG1wdGNwX3BtX3BhcnNlX2VudHJ5KHN0cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4gYm9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqbG9jLFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICpyZW0pO1xuLXZvaWQgbXB0Y3BfcG1fc3ViZmxvd19jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzayk7XG4rdm9pZCBtcHRjcF9wbV9jaGtfc3RhbGUoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gdm9pZCBtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgc2VydmVyX3NpZGUpO1xuIHZvaWQgbXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgY29uc3Qgc3RydWN0IHNvY2sgKnNzayk7XG4gYm9vbCBtcHRjcF9wbV9hbGxvd19uZXdfc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjMzOjIxLjU0MDUyODY2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTkzMjE1NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1lbW9yeSBNYW5hZ2VtZW50IGFuZCBNUFRDUCBTdGFiaWxpdHkgUmV2aWV3KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBNUFRDUCBwYXRjaCBpbiBmcm9udCBvZiBtZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQgcHJpbWFyaWx5IGZvY3VzZXMgb24gaW1wcm92aW5nIE1QVENQJ3MgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhhbmRsaW5nIG9mIG92ZXJmbG93IGNvbmRpdGlvbnMuIEkgc2VlIGl0J3MgYWRkaW5nIG5ldyBNSUIgY291bnRlcnMgdG8gdHJhY2sgdGhpbmdzIGxpa2UgYmFja2xvZyBkcm9wcywgcmVjZWl2ZXIgcHJ1bmVkIHBhY2tldHMsIGFuZCBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZy4gVGhhdCdzIGEgZ29vZCBzdGFydCBmb3Igb2JzZXJ2YWJpbGl0eS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2Agbm93IGNoZWNrcyBgbXB0Y3Bfb3Zlcl9saW1pdGAsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBpbmdyZXNzIGZsb3cgY29udHJvbC4gU2ltaWxhcmx5LCBgbXB0Y3BfcG1fY2hrX3N0YWxlYCBpcyBiZWluZyBtb2RpZmllZCB0byBodW50IGRvd24gc3RhbGUgc3ViZmxvd3MuIFRoZSBrZXkgYXJlYXMgZm9yIHJldmlldyBhcmUgYG1wdGNwX2RhdGFfcXVldWVfb2ZvYCwgYF9fbXB0Y3BfbW92ZV9za2JgLCBhbmQgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLCBhbGwgb2Ygd2hpY2ggYXJlIG5vdyBjaGVja2luZyBtZW1vcnkgbGltaXRzIGFuZCBkcm9wcGluZyBwYWNrZXRzIGlmIG5lZWRlZCB1c2luZyBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgLiBgX19tcHRjcF9yZXRyYW5zYCBhbHNvIGxvb2tzIGxpa2UgaXQncyBnZXR0aW5nIHNvbWUgdHdlYWtzIHRvIGltcHJvdmUgaXRzIHJldHJhbnNtaXNzaW9uIGNhcGFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHdpdGggbXVsdGlwbGUgZnJhZ21lbnRzLiBBbmQgZmluYWxseSwgYG1wdGNwX3JlbGVhc2VfY2JgIGFuZCBgbXB0Y3BfbW92ZV9za2JzYCBhcmUgdG91Y2hlZCB0byBtYWtlIHN1cmUgYmFja2xvZyBzcG9vbGluZyBpcyBoYW5kbGVkIGNvcnJlY3RseS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgaGVyZT8gVGhhdCdzIGFsd2F5cyBteSBmaXJzdCB3b3JyeSB3aXRoIGtlcm5lbCBjaGFuZ2VzLiBCdXQgYmFzZWQgb24gYSBxdWljayBzY2FuLCBhbmQgSSd2ZSBnb3QgdG8gZG8gYSBkZWVwZXIgZGl2ZSwgSSBkb24ndCBzZWUgYW55IGdsYXJpbmcgaXNzdWVzLiBUaGUgY2hhbmdlcyBhcmUgYWxtb3N0IGVudGlyZWx5IGZvY3VzZWQgb24gbWVtb3J5IGFjY291bnRpbmcsIHBhY2tldCBkcm9wcGluZyB3aGVuIG1lbW9yeSBsaW1pdHMgYXJlIHJlYWNoZWQsIGFuZCBtYWtpbmcgcmV0cmFuc21pc3Npb24gbG9naWMgbW9yZSByb2J1c3QuIFRoZXJlIGFyZW4ndCBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBhbmQgcGFydGlhbGx5IGluaXRpYWxpemVkLiBUaGUgcGF0dGVybiBoZXJlIHN1Z2dlc3RzIGNhcmVmdWwgYXR0ZW50aW9uIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBpcyBlbmNvdXJhZ2luZy4gU28sIGF0IGZpcnN0IGdsYW5jZSwgSSAqZG9uJ3QqIHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuXG5cbkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNoYW5nZXMgaW4gYF9fbXB0Y3BfcmV0cmFuc2AuIFRoZSBgX19tcHRjcF9wdXNoX3JldHJhbnNgIGZ1bmN0aW9uIGlzIGV4dHJhY3RlZCBmb3IgY2xhcml0eS4gSXQgaXRlcmF0ZXMgb3ZlciBmcmFnbWVudHMsIHRoZW4gaXQgY2FsbHMgdGhhdCBuZXcgZnVuY3Rpb24gdG8gYWN0dWFsbHkgcHVzaCBhIHJldHJhbnNtaXNzaW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIHBvcHBpbmcgb3V0IGhlcmUgZWl0aGVyLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgbXB0Y3Bfb3Zlcl9saW1pdGAuIFRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgcmVhZGluZyBleGlzdGluZyBgc2tfcmN2YnVmYCBhbmQgYG1zay1cdTAwM2ViYWNrbG9nX2xlbmAgZmllbGRzIGFuZCBwZXJmb3JtaW5nIGNvbXBhcmlzb25zLiBJdCdzIGp1c3QgY2hlY2tpbmcgbGltaXRzLCBhbmQgSSBkb24ndCBzZWUgYW55dGhpbmcgd3Jvbmcgd2l0aCB0aGF0LlxuXG5MYXN0bHksIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIGlzIGl0ZXJhdGluZyBvdmVyIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgYW5kIGRyb3BwaW5nIHBhY2tldHMgdG8gZnJlZSB1cCBtZW1vcnkuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gaGFuZGxpbmcgY29uZ2VzdGlvbi5cblxuQWxsIG9mIHRoZXNlIGNoYW5nZXMgcmVhbGx5IHNlZW0gdGFyZ2V0ZWQgYXQgcHJldmVudGluZyBhbmQgbWl0aWdhdGluZyBtZW1vcnkgZXhoYXVzdGlvbiB3aXRoaW4gTVBUQ1AuIEJhc2VkIG9uIHRoaXMgZGVlcGVyIHJldmlldywgaXTigJlzIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFuZCBpbXBvcnRhbnRseSwgaXQgc2VlbXMgbGlrZSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIGZhaXJseSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4uIFdlIHdvdWxkIGV4cGVjdCBLQVNBTiB0byBxdWlja2x5IGZsYWcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyB0aGF0IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW50cm9kdWNlLiBIb25lc3RseSwgSSBkb24ndCB0aGluayBLTVNBTiBpcyBuZWVkZWQgaGVyZSwgdW5sZXNzIHRoZXJlIGFyZSBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gT3ZlcmFsbCwgSSdtIGZlZWxpbmcgZmFpcmx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggaXMgc2FmZSBmcm9tIGEgbWVtb3J5IHBlcnNwZWN0aXZlLCBwZW5kaW5nIGEgbW9yZSB0aG9yb3VnaCB0ZXN0IHJ1bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2OTUsIk91dHB1dFRva2VucyI6MjEzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MzM6MzQuMTMzNzQ3MDU4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBNUFRDUCBtZW1vcnkgYWNjb3VudGluZywgcGFja2V0IGRyb3BwaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5ldyBNSUIgY291bnRlcnMsIGFkZHMgbWVtb3J5IGxpbWl0IGNoZWNrcyAoYG1wdGNwX292ZXJfbGltaXRgLCBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgKSwgaW1wbGVtZW50cyBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZyAoYG1wdGNwX3BydW5lX29mb19xdWV1ZWApLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb29wIChgX19tcHRjcF9yZXRyYW5zYCkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgZXhwb3Npbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgcGFja2V0IGRyb3BwaW5nIG9yIHF1ZXVlIG1hbmlwdWxhdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZm9jdXNlcyBvbiBNUFRDUCBtZW1vcnkgYWNjb3VudGluZywgcGFja2V0IGRyb3BwaW5nIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgYW5kIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5ldyBNSUIgY291bnRlcnMsIGFkZHMgbWVtb3J5IGxpbWl0IGNoZWNrcyAoYG1wdGNwX292ZXJfbGltaXRgLCBgbXB0Y3BfdHJ5X3JtZW1fc2NoZWR1bGVgKSwgaW1wbGVtZW50cyBvdXQtb2Ytb3JkZXIgcXVldWUgcHJ1bmluZyAoYG1wdGNwX3BydW5lX29mb19xdWV1ZWApLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb29wIChgX19tcHRjcF9yZXRyYW5zYCkuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnZvbHZlIGFsbG9jYXRpbmcgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgZXhwb3Npbmcga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciByZWx5aW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBkdXJpbmcgcGFja2V0IGRyb3BwaW5nIG9yIHF1ZXVlIG1hbmlwdWxhdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow42m8z[1] Phase: Succeeded StartedAt: 2026-08-07 16:33:44 +0000 UTC FinishedAt: 2026-08-07 16:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 16:33:44 +0000 UTC FinishedAt: 2026-08-07 16:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2] Phase: Succeeded StartedAt: 2026-08-07 16:33:44 +0000 UTC FinishedAt: 2026-08-07 20:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 16:33:45 +0000 UTC FinishedAt: 2026-08-07 20:14:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 16:33:45 +0000 UTC FinishedAt: 2026-08-07 16:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 16:33:45 +0000 UTC FinishedAt: 2026-08-07 16:33:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow42m8z/series-workflow42m8z-convert-artifact-4041802852/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 16:33:55 +0000 UTC FinishedAt: 2026-08-07 16:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 16:33:55 +0000 UTC FinishedAt: 2026-08-07 16:50:06 +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:*e077e88c-5f18-48bf-9b60-dbc4ebec4da0,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-workflow42m8z/series-workflow42m8z-convert-artifact-4041802852/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": "1d46a1f9-d096-40d1-a8fd-1ecafda63223", "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-workflow42m8z/series-workflow42m8z-build-action-471114914/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 16:33:55 +0000 UTC FinishedAt: 2026-08-07 16:49:56 +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:*e077e88c-5f18-48bf-9b60-dbc4ebec4da0,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-workflow42m8z/series-workflow42m8z-convert-artifact-4041802852/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": "1d46a1f9-d096-40d1-a8fd-1ecafda63223", "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-workflow42m8z/series-workflow42m8z-build-action-471114914/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 16:50:06 +0000 UTC FinishedAt: 2026-08-07 16:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 16:50:06 +0000 UTC FinishedAt: 2026-08-07 16:50:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 16:50:06 +0000 UTC FinishedAt: 2026-08-07 16:50:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 16:50:06 +0000 UTC FinishedAt: 2026-08-07 16:50:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflow42m8z/series-workflow42m8z-convert-artifact-2831930723/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 16:50:16 +0000 UTC FinishedAt: 2026-08-07 16:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 16:50:16 +0000 UTC FinishedAt: 2026-08-07 16:52:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1d46a1f9-d096-40d1-a8fd-1ecafda63223,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-workflow42m8z/series-workflow42m8z-build-action-471114914/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-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 16:52:36 +0000 UTC FinishedAt: 2026-08-07 16:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 16:52:36 +0000 UTC FinishedAt: 2026-08-07 16:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 16:52:36 +0000 UTC FinishedAt: 2026-08-07 17:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 16:52:36 +0000 UTC FinishedAt: 2026-08-07 17:08:56 +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:*e077e88c-5f18-48bf-9b60-dbc4ebec4da0,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-workflow42m8z/series-workflow42m8z-convert-artifact-2831930723/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": "654aecdd-d2c0-49ba-8c0c-4edba32a9461", "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-workflow42m8z/series-workflow42m8z-build-action-920723991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 16:52:36 +0000 UTC FinishedAt: 2026-08-07 17:08:46 +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:*e077e88c-5f18-48bf-9b60-dbc4ebec4da0,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-workflow42m8z/series-workflow42m8z-convert-artifact-2831930723/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": "654aecdd-d2c0-49ba-8c0c-4edba32a9461", "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-workflow42m8z/series-workflow42m8z-build-action-920723991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 17:08:56 +0000 UTC FinishedAt: 2026-08-07 17:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 17:08:56 +0000 UTC FinishedAt: 2026-08-07 17:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 17:08:56 +0000 UTC FinishedAt: 2026-08-07 17:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 17:08:56 +0000 UTC FinishedAt: 2026-08-07 17:10:49 +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:*654aecdd-d2c0-49ba-8c0c-4edba32a9461,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-workflow42m8z/series-workflow42m8z-build-action-920723991/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-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 17:10:59 +0000 UTC FinishedAt: 2026-08-07 20:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 17:10:59 +0000 UTC FinishedAt: 2026-08-07 20:14:17 +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":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"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:*1d46a1f9-d096-40d1-a8fd-1ecafda63223,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*654aecdd-d2c0-49ba-8c0c-4edba32a9461,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-workflow42m8z/series-workflow42m8z-build-action-471114914/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-workflow42m8z/series-workflow42m8z-build-action-920723991/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 17:10:59 +0000 UTC FinishedAt: 2026-08-07 17:11:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 17:10:59 +0000 UTC FinishedAt: 2026-08-07 17:11:04 +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":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"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-workflow42m8z/series-workflow42m8z-convert-artifact-1451323516/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 17:10:59 +0000 UTC FinishedAt: 2026-08-07 17:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 17:10:59 +0000 UTC FinishedAt: 2026-08-07 17:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 17:10:59 +0000 UTC FinishedAt: 2026-08-07 17:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 17:11:09 +0000 UTC FinishedAt: 2026-08-07 20:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42m8z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_incoming_options","mptcp_pm_chk_stale","mptcp_subflow_get_retrans","mptcp_data_ready","mptcp_recvmsg","mptcp_sendmsg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"35b3cc7d-ddcb-4b28-828f-3e8e09559ced","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 17:11:09 +0000 UTC FinishedAt: 2026-08-07 20:14:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1d46a1f9-d096-40d1-a8fd-1ecafda63223,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*654aecdd-d2c0-49ba-8c0c-4edba32a9461,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-workflow42m8z/series-workflow42m8z-build-action-471114914/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-workflow42m8z/series-workflow42m8z-build-action-920723991/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-workflow42m8z/series-workflow42m8z-convert-artifact-1451323516/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,}