Name: series-workflowngxgq Phase: Succeeded StartedAt: 2026-07-25 19:14:13 +0000 UTC FinishedAt: 2026-07-26 00:15:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[0] Phase: Succeeded StartedAt: 2026-07-25 19:14:13 +0000 UTC FinishedAt: 2026-07-25 19:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 19:14:13 +0000 UTC FinishedAt: 2026-07-25 19:47:20 +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": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "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": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "15634033-3ff5-4ba1-adbc-eec969f6e68b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_incoming_options", "mptcp_data_ready" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE1QVENQIHByb3RvY29sIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgY29uc3RyYWludHMgYW5kIHJldHJhbnNtaXNzaW9ucy4gSXQgaW50cm9kdWNlcyBuZXcgbWVtb3J5IGxpbWl0IGNoZWNrcyB0aGF0IGRyb3AgcGFja2V0cyBvciBwcnVuZSB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIHdoZW4gbGltaXRzIGFyZSBleGNlZWRlZCwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9naWMgdG8gaGFuZGxlIG11bHRpcGxlIGZyYWdtZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlODdhMzE0Y2NjMzdjMmUzNGNlZGExZDJhYWE0NjcwMTVhNDdiZjgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTk6NDQ6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCBmMjNmZGEwYzU1YTcyMC4uZDliZDRmNGFmY2MwZTcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuY1xuQEAgLTg1LDYgJiM0Mzs4NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7XG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O1NpbXVsdENvbm5lY3RGYWxsYmFja1wmIzM0OywgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O0ZhbGxiYWNrRmFpbGVkXCYjMzQ7LCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtXaW5Qcm9iZVwmIzM0OywgTVBUQ1BfTUlCX1dJTlBST0JFKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O0JhY2tsb2dEcm9wXCYjMzQ7LCBNUFRDUF9NSUJfQkFDS0xPR0RST1ApLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7UmN2UHJ1bmVkXCYjMzQ7LCBNUFRDUF9NSUJfUkNWUFJVTkVEKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O09mb1BydW5lZFwmIzM0OywgTVBUQ1BfTUlCX09GT19QUlVORUQpLFxuIH07XG4gXG4gLyogbXB0Y3BfbWliX2FsbG9jIC0gYWxsb2NhdGUgcGVyY3B1IG1pYiBjb3VudGVyc1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggODEyMjE4YjVlZDJiZmMuLjE4ZjM1ZjdlMGEyZDRlIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmhcbkBAIC04OCw2ICYjNDM7ODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLLFx0LyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi9cbiBcdE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCxcdC8qIENhbiYjMzk7dCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqL1xuIFx0TVBUQ1BfTUlCX1dJTlBST0JFLFx0XHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xuJiM0MztcdE1QVENQX01JQl9CQUNLTE9HRFJPUCxcdFx0LyogQmFja2xvZyBvdmVyIG1lbW9yeSBsaW1pdCAqL1xuJiM0MztcdE1QVENQX01JQl9SQ1ZQUlVORUQsXHRcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW5zICovXG4mIzQzO1x0TVBUQ1BfTUlCX09GT19QUlVORUQsXHRcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cbiBcdF9fTVBUQ1BfTUlCX01BWFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbmluZGV4IGM2NjQwMjNkMzdiYThlLi43Yjk1NGVmNzg2NzIzMCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTI3LDggJiM0MzsxMTI3LDMwIEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdHJldHVybiBobWFjID09IG1wX29wdC1cdTAwM2VhaG1hYztcbiB9XG4gXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxuLSAqIGVsc2UgcmV0dXJuIHRydWUuXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7XG4mIzQzO1xuJiM0MztcdG1lbSAmIzQzOz0gUkVBRF9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbik7XG4mIzQzO1x0aWYgKGxpa2VseShtZW0gXHUwMDNjPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEF2b2lkIHNpbGVudGx5IGRyb3BwaW5nIHB1cmUgYWNrcywgZmluIG9yIHplcm8gd2luIHByb2Jlcy4gKi9cbiYjNDM7XHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSB8fFxuJiM0MztcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfRklOIHx8XG4mIzQzO1x0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgdGNwX3NrKHNzayktXHUwMDNlcmN2X254dCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cywgc2NoZWR1bGUgYW4gYWNrLiAqL1xuJiM0MztcdGluZXRfY3NrKHNzayktXHUwMDNlaWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19OT01FTSB8IElDU0tfQUNLX05PVztcbiYjNDM7XHRpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuJiM0MzsgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXG4gICovXG4gYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5AQCAtMTE1NCw3ICYjNDM7MTE3Niw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGNhNjQ0ZWM1M2VlZGIxLi41Y2Y0NGVhYjc2ZjFjNCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM3Myw2ICYjNDM7MzczLDQ5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2luaXRfc2tiKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG4gXHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiB9XG4gXG4mIzQzOy8qIFwmIzM0O0luc3BpcmVkXCYjMzQ7IGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1BcbiYjNDM7ICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqcHJldjtcbiYjNDM7XHRib29sIHBydW5lZCA9IGZhbHNlO1xuJiM0MztcdHU2NCBtZW07XG4mIzQzO1xuJiM0MztcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBcdTAwMjZtc2stXHUwMDNlb29vX2xhc3Rfc2tiLVx1MDAzZXJibm9kZTtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJiX3RvX3NrYihub2RlKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqL1xuJiM0MztcdFx0aWYgKGFmdGVyNjQoc2VxLCBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0cHJ1bmVkID0gdHJ1ZTtcbiYjNDM7XHRcdHByZXYgPSByYl9wcmV2KG5vZGUpO1xuJiM0MztcdFx0cmJfZXJhc2Uobm9kZSwgXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XG4mIzQzO1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuJiM0MztcdFx0bXNrLVx1MDAzZW9vb19sYXN0X3NrYiA9IHJiX3RvX3NrYihwcmV2KTtcbiYjNDM7XG4mIzQzO1x0XHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbiYjNDM7XHRcdGlmIChtZW0gXHUwMDNjPSBzay1cdTAwM2Vza19yY3ZidWYpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdG5vZGUgPSBwcmV2O1xuJiM0MztcdH0gd2hpbGUgKG5vZGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJ1bmVkKVxuJiM0MztcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT19QUlVORUQpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xuJiM0MztcdHJldHVybiBtZW0gXHUwMDNjPSBzay1cdTAwM2Vza19yY3ZidWY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0dTY0IGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG5AQCAtMzgxLDYgJiM0Mzs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRtcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpO1xuIFxuJiM0MztcdC8qIENhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCB0aGlzIGxhdGUsIG9yIHRoZSBzdHJlYW1cbiYjNDM7XHQgKiB3aWxsIGJyZWFrLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNlIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpIHtcbiYjNDM7XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuJiM0MztcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEgPT0gbXNrLVx1MDAzZWFja19zZXEpIHtcbiBcdFx0LyogaW4gc2VxdWVuY2UgKi9cbiBcdFx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjtcbkBAIC02NzUsNiAmIzQzOzcyOSw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIFx0c3RydWN0IHNvY2sgKnNzayA9IHNrYi1cdTAwM2VzaztcbiBcdGJvb2wgZnJhZ3N0b2xlbjtcbiYjNDM7XHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4Miw2ICYjNDM7NzM3LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXG4mIzQzO1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbiYjNDM7XHRsaW1pdCAmIzQzOz0gKGxpbWl0IFx1MDAzZVx1MDAzZSAxKSAmIzQzOyA2NCAqIDEwMjQ7XG4mIzQzO1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4mIzQzO1x0aWYgKG1zay1cdTAwM2ViYWNrbG9nX2xlbiBcdTAwM2UgbGltaXQgXHUwMDI2XHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcbiYjNDM7XHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbiYjNDM7XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzUzLDcgJiM0Mzs4MTgsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcbiBcdFx0XHRtcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pO1xuIFxuLVx0XHRcdGlmIChvd25fbXNrIFx1MDAyNlx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNjIHNrLVx1MDAzZXNrX3JjdmJ1Zikge1xuJiM0MztcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTM2LDEzICYjNDM7MTIwMSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIwOSwxMiAmIzQzOzIyNjcsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMsIHUzMiAqZGVsdFxuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdGJvb2wgbW92ZWQgPSBmYWxzZTtcbiBcbi1cdCpkZWx0YSA9IDA7XG4gXHR3aGlsZSAoMSkge1xuLVx0XHQvKiBJZiB0aGUgbXNrIHJlY3ZidWYgaXMgZnVsbCBzdG9wLCBkb24mIzM5O3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgJiM0Mzs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQyLDkgJiM0MzsyMjk1LDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXHUwMDNlYmFja2xvZ191bmFjY291bnRlZCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc29ja2V0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTtcbiBcbi1cdC8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjUyLDIwICYjNDM7MjMwMywxMiBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfYmFja2xvZ19zcG9vbGVkKHN0cnVjdCBzb2NrICpzaywgdTMyIG1vdmVkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuLXtcbi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4tXG4tXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuLVx0bGlzdF9zcGxpY2Uoc2ticywgXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCk7XG4tfVxuLVxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4ge1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4mIzQzO1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3Myw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCk7XG4gXG4gXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuJiM0MztcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI3ODUsNDQgJiM0MzsyODI4LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7LypcbiYjNDM7ICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cyxcbiYjNDM7ICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXG4mIzQzO1x0XHRcdFx0dTY0IHNlbnRfc2VxKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuLVx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrO1xuLVx0aW50IHJldCwgZXJyO1xuLVx0dTE2IGxlbiA9IDA7XG4tXG4tXHRtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbi1cbi1cdC8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrIFwmIzM0O3N0YWxlXCYjMzQ7IGxvZ2ljICovXG4tXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuLVx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4tXHRpZiAoIWRmcmFnKSB7XG4tXHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbi1cdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4tXG4tXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgJiM0MzsgMSk7XG4tXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4tXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbi1cbi1cdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbi1cdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbi1cbi1cdFx0Z290byByZXNldF90aW1lcjtcbi1cdH1cbi1cbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4mIzQzO1x0aW50IHJldCwgbGVuID0gMDtcbiBcbiBcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4gXHRcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2VzY2hlZHVsZWQpKSB7XG4mIzQzO1x0XHRcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRcdHUxNiBjb3BpZWQgPSAwO1xuIFxuIFx0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7XG5AQCAtMjgzMiw3ICYjNDM7Mjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0bG9ja19zb2NrKHNzayk7XG4gXG4gXHRcdFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXG4tXHRcdFx0aW5mby5zZW50ID0gMDtcbiYjNDM7XHRcdFx0aW5mby5zZW50ID0gb2Zmc2V0O1xuIFx0XHRcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVx1MDAzZWNzdW1fZW5hYmxlZCkgPyBkZnJhZy1cdTAwM2VkYXRhX2xlbiA6XG4gXHRcdFx0XHRcdFx0XHRcdCAgICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQ7XG4gXG5AQCAtMjg0Nyw3ICYjNDM7Mjg2OCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICAgICFtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcbiBcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VmYWxsYmFja19sb2NrKTtcbiBcdFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuLVx0XHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3aGlsZSAoaW5mby5zZW50IFx1MDAzYyBpbmZvLmxpbWl0KSB7XG5AQCAtMjg3MCwxMyAmIzQzOzI4OTEsMTA5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuJiM0MztcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuJiM0MztcdGJvb2wgbmVlZF9yZXRyYW5zO1xuJiM0MztcdHU2NCByZXRyYW5zX3NlcTtcbiYjNDM7XHRpbnQgZXJyLCBsZW47XG4gXG4tXHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuO1xuLVx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4KGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCwgbGVuKTtcbiYjNDM7XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuJiM0MztcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4mIzQzO1x0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbiYjNDM7XHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuJiM0MztcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbiYjNDM7XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0Z290byBjaGVja19kYXRhX2ZpbjtcbiBcbi1cdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuLVx0aWYgKGFmdGVyNjQoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLVx1MDAzZWRhdGFfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4tXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0Ym9vbCBhbHJlYWR5X3JldHJhbnM7XG4mIzQzO1x0XHR1NjQgc2VudF9zZXE7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGRlZmF1bHQgc2NoZWR1bGVyIHdpbGwga2ljayBcJiMzNDtzdGFsZVwmIzM0OyBsb2dpYywgdGhhdCBpblxuJiM0MztcdFx0ICogdHVybiBjYW4gcHJvY2VzcyBpbmNvbWluZyBhY2tzIGFuZCBjbGVhbiB0aGUgUlRYIHF1ZXVlO1xuJiM0MztcdFx0ICogZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGZyYWcgd2lsbCBzdGlsbCBiZSBhcm91bmRcbiYjNDM7XHRcdCAqIGFmdGVyd2FyZHMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGdldF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0cHV0X3BhZ2UoZGZyYWctXHUwMDNlcGFnZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlclxuJiM0MztcdFx0ICogdGhlIGN1cnJlbnQgZGZyYWcsIGlmIHNvIHRyeSB0byBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuJiM0MztcdFx0YWxyZWFkeV9yZXRyYW5zID0gIWJlZm9yZTY0KG1zay1cdTAwM2VzbmRfdW5hLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCk7XG4mIzQzO1x0XHRwdXRfcGFnZShkZnJhZy1cdTAwM2VwYWdlKTtcbiYjNDM7XHRcdGlmIChhbHJlYWR5X3JldHJhbnMpIHtcbiYjNDM7XHRcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjNDM7XHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4mIzQzO1x0XHRcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGFmdGVyNjQobXNrLVx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xuJiM0MztcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuJiM0MztcbiYjNDM7XHRcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXG4mIzQzO1x0XHQgKiAgcXVldWUgZHVlIHRvIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXG4mIzQzO1x0XHRsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuJiM0MztcbiYjNDM7XHRcdHJldHJhbnNfc2VxICYjNDM7PSBsZW47XG4mIzQzO1x0XHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuO1xuJiM0MztcdFx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgcmV0cmFuc19zZXEgLSBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4mIzQzO1xuJiM0MztcdFx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4mIzQzO1x0XHRzZW50X3NlcSA9IGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiYjNDM7XHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4mIzQzO1x0XHQgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgJiM0MzsgZGZyYWctXHUwMDNlZGF0YV9sZW4pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcdTAwMjZkZnJhZy1cdTAwM2VsaXN0LCBcdTAwMjZtc2stXHUwMDNlcnR4X3F1ZXVlKSA/XG4mIzQzO1x0XHRcdFx0TlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7XG4mIzQzO1x0XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXG4mIzQzO1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbiYjNDM7Y2hlY2tfZGF0YV9maW46XG4mIzQzO1x0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuJiM0MztcdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTtcbiYjNDM7XHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4mIzQzO1x0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4mIzQzO1x0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbiYjNDM7XHR9XG4gXG4gcmVzZXRfdGltZXI6XG4gXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xuQEAgLTM2NzAsMTIgJiM0MzszNzg3LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHUzMiBtb3ZlZCA9IDA7XG4gXG4gXHRmb3IgKDs7KSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLVx1MDAzZWNiX2ZsYWdzIFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XG4gXHRcdGJvb2wgc3Bvb2xfYmw7XG4tXHRcdHUzMiBtb3ZlZDtcbiBcbiBcdFx0c3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticyk7XG4gXHRcdGlmICghZmxhZ3MgXHUwMDI2XHUwMDI2ICFzcG9vbF9ibClcbkBAIC0zNzA4LDkgJiM0MzszODI1LDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jayk7XG4tXHRcdGlmIChzcG9vbF9ibClcbi1cdFx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbiYjNDM7XHRpZiAobW92ZWQpXG4mIzQzO1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFxuIFx0aWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgXHUwMDI2bXNrLVx1MDAzZWNiX2ZsYWdzKSlcbiBcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9pbmNvbWluZ19vcHRpb25zJiMzNDssCiAgICAmIzM0O21wdGNwX2RhdGFfcmVhZHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTVBUQ1AgcHJvdG9jb2wgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBjb25zdHJhaW50cyBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHRoYXQgZHJvcCBwYWNrZXRzIG9yIHBydW5lIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBoYW5kbGUgbXVsdGlwbGUgZnJhZ21lbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU4N2EzMTRjY2MzN2MyZTM0Y2VkYTFkMmFhYTQ2NzAxNWE0N2JmODMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxOTo0NDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuYwppbmRleCBmMjNmZGEwYzU1YTcyMC4uZDliZDRmNGFmY2MwZTcgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9taWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmMKQEAgLTg1LDYgJiM0Mzs4NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7CiAJU05NUF9NSUJfSVRFTSgmIzM0O1NpbXVsdENvbm5lY3RGYWxsYmFjayYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7RmFsbGJhY2tGYWlsZWQmIzM0OywgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7V2luUHJvYmUmIzM0OywgTVBUQ1BfTUlCX1dJTlBST0JFKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O0JhY2tsb2dEcm9wJiMzNDssIE1QVENQX01JQl9CQUNLTE9HRFJPUCksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtSY3ZQcnVuZWQmIzM0OywgTVBUQ1BfTUlCX1JDVlBSVU5FRCksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtPZm9QcnVuZWQmIzM0OywgTVBUQ1BfTUlCX09GT19QUlVORUQpLAogfTsKIAogLyogbXB0Y3BfbWliX2FsbG9jIC0gYWxsb2NhdGUgcGVyY3B1IG1pYiBjb3VudGVycwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oCmluZGV4IDgxMjIxOGI1ZWQyYmZjLi4xOGYzNWY3ZTBhMmQ0ZSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaApAQCAtODgsNiAmIzQzOzg4LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQgewogCU1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssCS8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovCiAJTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELAkvKiBDYW4mIzM5O3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi8KIAlNUFRDUF9NSUJfV0lOUFJPQkUsCQkvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqLwomIzQzOwlNUFRDUF9NSUJfQkFDS0xPR0RST1AsCQkvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovCiYjNDM7CU1QVENQX01JQl9SQ1ZQUlVORUQsCQkvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWlucyAqLwomIzQzOwlNUFRDUF9NSUJfT0ZPX1BSVU5FRCwJCS8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi8KIAlfX01QVENQX01JQl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9vcHRpb25zLmMgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCmluZGV4IGM2NjQwMjNkMzdiYThlLi43Yjk1NGVmNzg2NzIzMCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC0xMTI3LDggJiM0MzsxMTI3LDMwIEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAlyZXR1cm4gaG1hYyA9PSBtcF9vcHQtJmd0O2FobWFjOwogfQogCi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksCi0gKiBlbHNlIHJldHVybiB0cnVlLgomIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CiYjNDM7CW1lbSAmIzQzOz0gUkVBRF9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4pOwomIzQzOwlpZiAobGlrZWx5KG1lbSAmbHQ7PSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiBvciB6ZXJvIHdpbiBwcm9iZXMuICovCiYjNDM7CWlmIChUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSA9PSBUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEgfHwKJiM0MzsJICAgIFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7dGNwX2ZsYWdzICZhbXA7IFRDUEhEUl9GSU4gfHwKJiM0MzsJICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEsIHRjcF9zayhzc2spLSZndDtyY3Zfbnh0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovCiYjNDM7CWluZXRfY3NrKHNzayktJmd0O2ljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7CiYjNDM7CWluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLAomIzQzOyAqIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQsIG9yIG92ZXIgbWVtb3J5IGxpbWl0cy4KICAqLwogYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTExNTQsNyAmIzQzOzExNzYsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJCV9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LSZndDtjb25uKTsKIAkJbXB0Y3BfZGF0YV91bmxvY2soc3ViZmxvdy0mZ3Q7Y29ubik7Ci0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctJmd0O2Nvbm4sIHNrLCBza2IpOwogCX0KIAogCW1wdGNwX2dldF9vcHRpb25zKHNrYiwgJmFtcDttcF9vcHQpOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBjYTY0NGVjNTNlZWRiMS4uNWNmNDRlYWI3NmYxYzQgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNzMsNiAmIzQzOzM3Myw0OSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9pbml0X3NrYihzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAogCXNrYl9kc3RfZHJvcChza2IpOwogfQogCiYjNDM7LyogJiMzNDtJbnNwaXJlZCYjMzQ7IGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1AKJiM0MzsgKiBzb2NrZXQgaXMgdW5kZXIgbWVtb3J5IGxpbWl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7CiYjNDM7CWJvb2wgcHJ1bmVkID0gZmFsc2U7CiYjNDM7CXU2NCBtZW07CiYjNDM7CiYjNDM7CWlmIChSQl9FTVBUWV9ST09UKCZhbXA7bXNrLSZndDtvdXRfb2Zfb3JkZXJfcXVldWUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5vZGUgPSAmYW1wO21zay0mZ3Q7b29vX2xhc3Rfc2tiLSZndDtyYm5vZGU7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7CiYjNDM7CiYjNDM7CQkvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqLwomIzQzOwkJaWYgKGFmdGVyNjQoc2VxLCBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlwcnVuZWQgPSB0cnVlOwomIzQzOwkJcHJldiA9IHJiX3ByZXYobm9kZSk7CiYjNDM7CQlyYl9lcmFzZShub2RlLCAmYW1wO21zay0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlKTsKJiM0MzsJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQltc2stJmd0O29vb19sYXN0X3NrYiA9IHJiX3RvX3NrYihwcmV2KTsKJiM0MzsKJiM0MzsJCW1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spOwomIzQzOwkJaWYgKG1lbSAmbHQ7PSBzay0mZ3Q7c2tfcmN2YnVmKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJbm9kZSA9IHByZXY7CiYjNDM7CX0gd2hpbGUgKG5vZGUpOwomIzQzOwomIzQzOwlpZiAocHJ1bmVkKQomIzQzOwkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT19QUlVORUQpOwomIzQzOwomIzQzO291dDoKJiM0MzsJbWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CXJldHVybiBtZW0gJmx0Oz0gc2stJmd0O3NrX3JjdmJ1ZjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1NjQgY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwpAQCAtMzgxLDYgJiM0Mzs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAKIAltcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpOwogCiYjNDM7CS8qIENhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCB0aGlzIGxhdGUsIG9yIHRoZSBzdHJlYW0KJiM0MzsJICogd2lsbCBicmVhay4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgJmd0OyBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpICZhbXA7JmFtcDsKJiM0MzsJICAgICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEpKSB7CiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTsKJiM0MzsJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAlpZiAoTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEgPT0gbXNrLSZndDthY2tfc2VxKSB7CiAJCS8qIGluIHNlcXVlbmNlICovCiAJCW1zay0mZ3Q7Ynl0ZXNfcmVjZWl2ZWQgJiM0Mzs9IGNvcHlfbGVuOwpAQCAtNjc1LDYgJiM0Mzs3MjksNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNvY2sgKnNzayA9IHNrYi0mZ3Q7c2s7CiAJYm9vbCBmcmFnc3RvbGVuOwomIzQzOwl1NjQgbGltaXQ7CiAJaW50IGRlbHRhOwogCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7CkBAIC02ODIsNiAmIzQzOzczNywxNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAkJcmV0dXJuOwogCX0KIAomIzQzOwkvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi8KJiM0MzsJbGltaXQgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWxpbWl0ICYjNDM7PSAobGltaXQgJmd0OyZndDsgMSkgJiM0MzsgNjQgKiAxMDI0OwomIzQzOwlsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTsKJiM0MzsJaWYgKG1zay0mZ3Q7YmFja2xvZ19sZW4gJmd0OyBsaW1pdCAmYW1wOyZhbXA7ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHsKJiM0MzsJCV9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJLyogVHJ5IHRvIGNvYWxlc2NlIHdpdGggdGhlIGxhc3Qgc2tiIGluIG91ciBiYWNrbG9nICovCiAJaWYgKCFsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpKQogCQl0YWlsID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTsKQEAgLTc1Myw3ICYjNDM7ODE4LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAkJCW1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7CiAKLQkJCWlmIChvd25fbXNrICZhbXA7JmFtcDsgc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDsgc2stJmd0O3NrX3JjdmJ1ZikgewomIzQzOwkJCWlmIChvd25fbXNrKSB7CiAJCQkJbXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpOwogCQkJCXJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpOwogCQkJfSBlbHNlIHsKQEAgLTExMzYsMTMgJiM0MzsxMjAxLDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKIAltcHRjcF93cml0ZV9zcGFjZShzayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKQotewotCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKLQltcHRjcF9kYXRhX3VubG9jayhzayk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKQEAgLTIyMDksMTIgJiM0MzsyMjY3LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHQKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCWJvb2wgbW92ZWQgPSBmYWxzZTsKIAotCSpkZWx0YSA9IDA7CiAJd2hpbGUgKDEpIHsKLQkJLyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJiMzOTt0IGRyb3AgKi8KLQkJaWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmZ3Q7IHNrLSZndDtza19yY3ZidWYpCi0JCQlicmVhazsKLQogCQlwcmVmZXRjaChza2ItJmd0O25leHQpOwogCQlsaXN0X2RlbCgmYW1wO3NrYi0mZ3Q7bGlzdCk7CiAJCSpkZWx0YSAmIzQzOz0gc2tiLSZndDt0cnVlc2l6ZTsKQEAgLTIyNDIsOSAmIzQzOzIyOTUsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpCiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stJmd0O2JhY2tsb2dfdW5hY2NvdW50ZWQgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc29ja2V0ICZhbXA7JmFtcDsKIAkJCSAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTsKIAotCS8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkgfHwKLQkgICAgc2tfcm1lbV9hbGxvY19nZXQoc2spICZndDsgc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkpCiAJCXJldHVybiBmYWxzZTsKIAogCUlOSVRfTElTVF9IRUFEKHNrYnMpOwpAQCAtMjI1MiwyMCAmIzQzOzIzMDMsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQotewotCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7Ci0KLQlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7Ci0JbGlzdF9zcGxpY2Uoc2ticywgJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCk7Ci19Ci0KIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJc3RydWN0IGxpc3RfaGVhZCBza2JzOwogCWJvb2wgZW5xdWV1ZWQgPSBmYWxzZTsKLQl1MzIgbW92ZWQ7CiYjNDM7CXUzMiBtb3ZlZCA9IDA7CiAKIAltcHRjcF9kYXRhX2xvY2soc2spOwogCXdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKSkgewpAQCAtMjI3Myw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiAJCWVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCAmYW1wO3NrYnMsICZhbXA7bW92ZWQpOwogCiAJCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JCW1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsICZhbXA7c2ticyk7CiAJfQomIzQzOwlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7CiAJbXB0Y3BfZGF0YV91bmxvY2soc2spOwogCiAJaWYgKGVucXVldWVkICZhbXA7JmFtcDsgbXB0Y3BfZXBvbGxpbl9yZWFkeShzaykpCkBAIC0yNzg1LDQ0ICYjNDM7MjgyOCwyMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAlza19lcnJvcl9yZXBvcnQoc2spOwogfQogCi1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzOy8qCiYjNDM7ICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cywKJiM0MzsgKiBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsCiYjNDM7CQkJCXU2NCBzZW50X3NlcSkKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07CiAJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93OwotCXN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnOwogCXN0cnVjdCBzb2NrICpzc2s7Ci0JaW50IHJldCwgZXJyOwotCXUxNiBsZW4gPSAwOwotCi0JbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7Ci0KLQkvKiBmaXJzdCBjaGVjayBzc2s6IG5lZWQgdG8ga2ljayAmIzM0O3N0YWxlJiMzNDsgbG9naWMgKi8KLQllcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spOwotCWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwotCWlmICghZGZyYWcpIHsKLQkJaWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkgewotCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCi0JCQlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMsCi0JCQkJICAgaWNzay0mZ3Q7aWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTsKLQkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwotCQkJbXB0Y3Bfc2VuZF9hY2sobXNrKTsKLQotCQkJZ290byByZXNldF90aW1lcjsKLQkJfQotCi0JCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKLQkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwotCi0JCWdvdG8gcmVzZXRfdGltZXI7Ci0JfQotCi0JaWYgKGVycikKLQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJaW50IHJldCwgbGVuID0gMDsKIAogCW1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7CiAJCWlmIChSRUFEX09OQ0Uoc3ViZmxvdy0mZ3Q7c2NoZWR1bGVkKSkgewomIzQzOwkJCXUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcTsKIAkJCXUxNiBjb3BpZWQgPSAwOwogCiAJCQltcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpOwpAQCAtMjgzMiw3ICYjNDM7Mjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiAJCQlsb2NrX3NvY2soc3NrKTsKIAogCQkJLyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovCi0JCQlpbmZvLnNlbnQgPSAwOwomIzQzOwkJCWluZm8uc2VudCA9IG9mZnNldDsKIAkJCWluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLSZndDtjc3VtX2VuYWJsZWQpID8gZGZyYWctJmd0O2RhdGFfbGVuIDoKIAkJCQkJCQkJICAgIGRmcmFnLSZndDthbHJlYWR5X3NlbnQ7CiAKQEAgLTI4NDcsNyAmIzQzOzI4NjgsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQogCQkJICAgICFtc2stJmd0O2FsbG93X3N1YmZsb3dzKSB7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O2ZhbGxiYWNrX2xvY2spOwogCQkJCXJlbGVhc2Vfc29jayhzc2spOwotCQkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKIAkJCXdoaWxlIChpbmZvLnNlbnQgJmx0OyBpbmZvLmxpbWl0KSB7CkBAIC0yODcwLDEzICYjNDM7Mjg5MSwxMDkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCXJlbGVhc2Vfc29jayhzc2spOwogCQl9CiAJfQomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKJiM0MzsJc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7CiYjNDM7CWJvb2wgbmVlZF9yZXRyYW5zOwomIzQzOwl1NjQgcmV0cmFuc19zZXE7CiYjNDM7CWludCBlcnIsIGxlbjsKIAotCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwotCWRmcmFnLSZndDthbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctJmd0O2FscmVhZHlfc2VudCwgbGVuKTsKJiM0MzsJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKJiM0MzsJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwomIzQzOwluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CWlmICghZGZyYWcpCiYjNDM7CQlnb3RvIGNoZWNrX2RhdGFfZmluOwogCi0JLyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovCi0JaWYgKGFmdGVyNjQoZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXEsIG1zay0mZ3Q7c25kX254dCkpCi0JCVdSSVRFX09OQ0UobXNrLSZndDtzbmRfbnh0LCBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWJvb2wgYWxyZWFkeV9yZXRyYW5zOwomIzQzOwkJdTY0IHNlbnRfc2VxOwomIzQzOwomIzQzOwkJLyogVGhlIGRlZmF1bHQgc2NoZWR1bGVyIHdpbGwga2ljayAmIzM0O3N0YWxlJiMzNDsgbG9naWMsIHRoYXQgaW4KJiM0MzsJCSAqIHR1cm4gY2FuIHByb2Nlc3MgaW5jb21pbmcgYWNrcyBhbmQgY2xlYW4gdGhlIFJUWCBxdWV1ZTsKJiM0MzsJCSAqIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRmcmFnIHdpbGwgc3RpbGwgYmUgYXJvdW5kCiYjNDM7CQkgKiBhZnRlcndhcmRzLgomIzQzOwkJICovCiYjNDM7CQlnZXRfcGFnZShkZnJhZy0mZ3Q7cGFnZSk7CiYjNDM7CQllcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXB1dF9wYWdlKGRmcmFnLSZndDtwYWdlKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlcgomIzQzOwkJICogdGhlIGN1cnJlbnQgZGZyYWcsIGlmIHNvIHRyeSB0byBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLgomIzQzOwkJICovCiYjNDM7CQltcHRjcF9kYXRhX2xvY2soc2spOwomIzQzOwkJYWxyZWFkeV9yZXRyYW5zID0gIWJlZm9yZTY0KG1zay0mZ3Q7c25kX3VuYSwgZGZyYWctJmd0O2RhdGFfc2VxICYjNDM7CiYjNDM7CQkJCQkgICAgZGZyYWctJmd0O2FscmVhZHlfc2VudCk7CiYjNDM7CQlwdXRfcGFnZShkZnJhZy0mZ3Q7cGFnZSk7CiYjNDM7CQlpZiAoYWxyZWFkeV9yZXRyYW5zKSB7CiYjNDM7CQkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJCQlyZXRyYW5zX3NlcSA9IG1zay0mZ3Q7c25kX3VuYTsKJiM0MzsJCQlkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTsKJiM0MzsJCQluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwkJfSBlbHNlIGlmIChhZnRlcjY0KG1zay0mZ3Q7c25kX3VuYSwgcmV0cmFuc19zZXEpKSB7CiYjNDM7CQkJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CQl9CiYjNDM7CQltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CiYjNDM7CQkvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWAomIzQzOwkJICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghZGZyYWcgfHwgIWRmcmFnLSZndDthbHJlYWR5X3NlbnQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovCiYjNDM7CQlsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTsKJiM0MzsJCWlmIChsZW4gJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwomIzQzOwkJcmV0cmFuc19zZXEgJiM0Mzs9IGxlbjsKJiM0MzsJCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwomIzQzOwkJZGZyYWctJmd0O2FscmVhZHlfc2VudCA9IG1heF90KHUxNiwgZGZyYWctJmd0O2FscmVhZHlfc2VudCwKJiM0MzsJCQkJCSAgICByZXRyYW5zX3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CiYjNDM7CQkvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi8KJiM0MzsJCXNlbnRfc2VxID0gZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXE7CiYjNDM7CQlpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLSZndDtzbmRfbnh0KSkKJiM0MzsJCQlXUklURV9PTkNFKG1zay0mZ3Q7c25kX254dCwgc2VudF9zZXEpOwomIzQzOwomIzQzOwkJLyogQXR0ZW1wdCB0aGUgbmV4dCBmcmFnbWVudCBvbmx5IGlmIHRoZSBjdXJyZW50IG9uZSBpcwomIzQzOwkJICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoYmVmb3JlNjQocmV0cmFuc19zZXEsIGRmcmFnLSZndDtkYXRhX3NlcSAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9sZW4pKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZGZyYWcgPSBsaXN0X2lzX2xhc3QoJmFtcDtkZnJhZy0mZ3Q7bGlzdCwgJmFtcDttc2stJmd0O3J0eF9xdWV1ZSkgPwomIzQzOwkJCQlOVUxMIDogbGlzdF9uZXh0X2VudHJ5KGRmcmFnLCBsaXN0KTsKJiM0MzsJCWlmICghZGZyYWcpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi8KJiM0MzsJaWYgKCFuZWVkX3JldHJhbnMpIHsKJiM0MztjaGVja19kYXRhX2ZpbjoKJiM0MzsJCWlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHsKJiM0MzsJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiYjNDM7CiYjNDM7CQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAomIzQzOwkJCQkgICBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpOwomIzQzOwkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwomIzQzOwkJCW1wdGNwX3NlbmRfYWNrKG1zayk7CiYjNDM7CQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKJiM0MzsJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsJfQogCiByZXNldF90aW1lcjoKIAltcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spOwpAQCAtMzY3MCwxMiAmIzQzOzM3ODcsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spCiAJX19tdXN0X2hvbGQoJmFtcDtzay0mZ3Q7c2tfbG9jay5zbG9jaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwl1MzIgbW92ZWQgPSAwOwogCiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay0mZ3Q7Y2JfZmxhZ3MgJmFtcDsgTVBUQ1BfRkxBR1NfUFJPQ0VTU19DVFhfTkVFRCk7CiAJCXN0cnVjdCBsaXN0X2hlYWQgam9pbl9saXN0LCBza2JzOwogCQlib29sIHNwb29sX2JsOwotCQl1MzIgbW92ZWQ7CiAKIAkJc3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKTsKIAkJaWYgKCFmbGFncyAmYW1wOyZhbXA7ICFzcG9vbF9ibCkKQEAgLTM3MDgsOSAmIzQzOzM4MjUsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaykKIAogCQljb25kX3Jlc2NoZWQoKTsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2xvY2suc2xvY2spOwotCQlpZiAoc3Bvb2xfYmwpCi0JCQltcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCAmYW1wO3NrYnMpOwogCX0KJiM0MzsJaWYgKG1vdmVkKQomIzQzOwkJV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwogCiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgJmFtcDttc2stJmd0O2NiX2ZsYWdzKSkKIAkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAyMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUFRDUCBNZW1vcnkgTWFuYWdlbWVudCBhbmQgUmV0cmFuc21pc3Npb24gRW5oYW5jZW1lbnRzIC0gVGltZSB0byBGdXp6ISoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIE1QVENQIGNvcmUsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJldHJhbnNtaXNzaW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIG5ldyBTTk1QIE1JQiBpdGVtcyDigJMgYEJhY2tsb2dEcm9wYCwgYFJjdlBydW5lZGAsIGBPZm9QcnVuZWRgIOKAkyB0byBnaXZlIHVzIGJldHRlciB2aXNpYmlsaXR5IGludG8gaG93IE1QVENQIGlzIGhhbmRsaW5nIG1lbW9yeSBwcmVzc3VyZS4gTW9yZSBpbXBvcnRhbnRseSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFjdHVhbCBtZW1vcnkgbGltaXQgY2hlY2tzIGF0IHNldmVyYWwgcG9pbnRzLiBJJiMzOTttIHNlZWluZyBgbXB0Y3Bfb3Zlcl9saW1pdGAgdGhhdCBkcm9wcyBwYWNrZXRzIHdoZW4gd2UgZXhjZWVkIHRoZSBsaW1pdCwgYW5kIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgLCB3aGljaCBnZXRzIHJpZCBvZiB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIGlmIHdlIGV4Y2VlZCB0aGUgbGltaXQgdG9vLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhZGp1c3RtZW50cyBpbiB0aGUgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGFuZCBgX19tcHRjcF9yZXRyYW5zYCBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZXNlIG5ldyBjb25zdHJhaW50cy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBwcm90b2NvbCBmdW5jdGlvbnMsIGFuZCBiZWNhdXNlIGl0IGRpcmVjdGx5IGltcGFjdHMgY29yZSBsb2dpYyB3aXRoIG1lbW9yeSBoYW5kbGluZywgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuIAoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBMb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSB3aG9sZSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgbW9zdCBvZiB0aGVtIHN0YXRpYy4gTGV0JiMzOTtzIHNlZS4uLgoKTW9kaWZpZWQgZnVuY3Rpb25zOgoqICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgCiogICBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfbW92ZV9za2JgIChzdGF0aWMpCiogICBgX19tcHRjcF9hZGRfYmFja2xvZ2AgKHN0YXRpYykKKiAgIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIChzdGF0aWMpCiogICBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfcHVzaF9yZXRyYW5zYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYykKKiAgIGBtcHRjcF9yZWxlYXNlX2NiYCAoc3RhdGljKQoKSGFuZyBvbiwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzICpub24tc3RhdGljKiwgdGhhdCYjMzk7cyBnb29kIG5ld3MuIFRoYXQmIzM5O3MgYSBncmVhdCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGVzZSwgYnV0IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhIGtleSBjYW5kaWRhdGUuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIHN0YXRpYyBuYXR1cmUgb2Ygc29tZXRoaW5nIGxpa2UgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGEgYmFycmllcjsgbm90IHRoYXQgSSBleHBlY3QgaXQgdG8gYmUsIGJ1dCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZy4KCk9rYXksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBsb29rIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYW55IG9mIHRoZXNlIG1vZGlmaWVkIHN0YXRpYyBvbmVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBmdXp6aW5nIGVudHJ5IHBvaW50cyBsaWtlbHkgbGllLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaD0xNTY9aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMTU4LVx0XHRcdCAgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XG5pbmNsdWRlL25ldC9tcHRjcC5oOjE1OTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTYwLVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmg9MjY2PXN0YXRpYyBpbmxpbmUgYm9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzItXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI3MzpzdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI3NC1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQ4ODQ9dm9pZCB0Y3BfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTAtXHQvKiBtcHRjcCBjYW4mIzM5O3QgdGVsbCB1cyB0byBpZ25vcmUgcmVzZXQgcGt0cyxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ4OTE6XHQgKiBzbyBqdXN0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIG1wdGNwX2luY29taW5nX29wdGlvbnMoKS5cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTItXHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTMtXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg5NDpcdFx0bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTUtXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTYwNz1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTYxNi1cdCAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NTYxNzpcdGlmIChza19pc19tcHRjcChzaykgXHUwMDI2XHUwMDI2ICFtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NjE4LVx0XHRfX2tmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTI9dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Mzc5LVx0XHRcdCAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzM4MDpcdFx0XHRpZiAoc2tfaXNfbXB0Y3Aoc2spIFx1MDAyNlx1MDAyNiAhbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTczODEtXHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0xMDUzPXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMDc4LVxubmV0L21wdGNwL29wdGlvbnMuYzoxMDc5Olx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xubmV0L21wdGNwL29wdGlvbnMuYy0xMDgwLVx0aWYgKGFmdGVyNjQobXNrLVx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTEzMD1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNTQtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExNTU6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE1Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRwYXRoIFRDUCBJbmNvbWluZyBPcHRpb25zIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gaG93IE1QVENQIGluY29taW5nIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBrZXkgcGxhY2VzIHdpdGhpbiB0aGUgVENQIHN0YWNrOiBgdGNwX2RhdGFfcXVldWVgIGFuZCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCB0byBtYWtlIHN1cmUgaXQgaXMgd29ya2luZyB0aGUgd2F5IEkgaW50ZW5kLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcgb2YgYSBjb3VwbGUgb2YgY29yZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgcmV2aWV3IGBfX21wdGNwX3JldHJhbnNgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIFRoZXkmIzM5O3JlIHByb2JhYmx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJldHJhbnNtaXNzaW9uIGFuZCBjb25uZWN0aW9uIHJlbGVhc2UgcGxheSBpbnRvIHRoaXMgb3B0aW9uIHByb2Nlc3NpbmcsIGdpdmVuIHdoZXJlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBzaXR0aW5nIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhvc2UgaXMga2V5IHRvIGRlYnVnZ2luZyBhbmQgaW1wbGVtZW50aW5nIGFueSBuZXcgZmVhdHVyZSBpbiB0aGlzIGFyZWEuIFRpbWUgdG8gZGlnIGluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9yZXRyYW5zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTEwNjM9c3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtLmMtMTA4NC1cdFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGUgPSAxO1xubmV0L21wdGNwL3BtLmM6MTA4NTpcdFx0XHRcdF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xubmV0L21wdGNwL3BtLmMtMTA4Ni1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0OTU9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTMwLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjUzMTpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYxNT1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY2NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2NjU6XHRuZWVkX3B1c2ggPSAoZmxhZ3MgXHUwMDI2IE1QVENQX0NGX1BVU0gpIFx1MDAyNlx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjYtXHRpZiAoIWRpc3Bvc2VfaXQpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODM1PXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg5NzpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5OC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDk6XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk1MC1cdFx0ICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzEwNj1zdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNDMtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX1dPUktfUlRYLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE0NDpcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNDUtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzc4Nj1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODE4LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4MTk6XHRcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjAtXHRcdGlmIChzcG9vbF9ibCBcdTAwMjZcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKSkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgwOD12b2lkIF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMC1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjgxMTpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMi12b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTXVsdGlwYXRoIFRDUCBSZXRyYW5zbWlzc2lvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBNUFRDUCBoYW5kbGVzIHJldHJhbnNtaXNzaW9ucywgYW5kIGl0IGxvb2tzIGxpa2UgYF9fbXB0Y3BfcmV0cmFuc2AgaXMgdGhlIGtleSBmdW5jdGlvbi4gSXQmIzM5O3MgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gTm93LCB0aGF0IGBtcHRjcF9yZWxlYXNlX2NiYCBpcyByaW5naW5nIGEgYmVsbC4gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGZvciBNUFRDUCBzb2NrZXRzIQoKSW50ZXJlc3RpbmcuLi4gaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyBgc2stJmd0O3NrX3Byb3QtJmd0O3JlbGVhc2VfY2JgLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhhdCBhc3NvY2lhdGlvbiBpbiBtaW5kLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHJlbGVhc2luZyB0aGUgc29ja2V0IGFuZCByZXRyYW5zbWlzc2lvbnMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb2RlIGZvciBgbXB0Y3BfcmVsZWFzZV9jYmAgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBzZWUgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaWcgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9yZWxlYXNlX2NiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTM3NzM9dm9pZCBfX21wdGNwX2NoZWNrX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3ODUtLyogcHJvY2Vzc2VzIGRlZmVycmVkIGV2ZW50cyBhbmQgZmx1c2ggd21lbSAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mzc4NjpzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3ODctXHRfX211c3RfaG9sZChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQxODk9c3RhdGljIHN0cnVjdCBwcm90byBtcHRjcF9wcm90ID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDItXHQucmVjdm1zZ1x0PSBtcHRjcF9yZWN2bXNnLFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwMzpcdC5yZWxlYXNlX2NiXHQ9IG1wdGNwX3JlbGVhc2VfY2IsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA0LVx0Lmhhc2hcdFx0PSBtcHRjcF9oYXNoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTE3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzICZhbXA7IEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyB0aGUgY29yZSBjYWxsYmFjayBmb3IgcmVsZWFzaW5nIHNvY2tldHMsIGFuZCB0aGlzIHBhdGNoIGhhcyBjbGVhcmx5IG1hZGUgc29tZSBrZXkgY2hhbmdlcy4gVGhleSYjMzk7cmUgdHJhY2tpbmcgJiMzOTttb3ZlZCYjMzk7IGFuZCBhZGp1c3RpbmcgYG1zay0mZ3Q7YmFja2xvZ19sZW5gIHdpdGhpbiBpdC4gSW50ZXJlc3RpbmcuIE9uIHRvcCBvZiB0aGF0LCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgbm93IGNoZWNraW5nIGZvciBgbXB0Y3Bfb3Zlcl9saW1pdGAsIGFuZCBgX19tcHRjcF9tb3ZlX3NrYmAgaXMgY2FsbGluZyBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYC4gRmluYWxseSwgdGhlIG1vZGlmaWNhdGlvbiBvZiBgX19tcHRjcF9hZGRfYmFja2xvZ2AgaXMgY2hlY2tpbmcgdGhlIGBtc2stJmd0O2JhY2tsb2dfbGVuICZndDsgbGltaXRgLCB3aGlsZSB0aGUgYF9fbXB0Y3BfcmV0cmFuc2AgZnVuY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgdG8gcmV0cmFuc21pdCBtdWx0aXBsZSBmcmFnbWVudHMuCgpHaXZlbiB0aGUgc2NvcGUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cy4gRnJvbSBhIGN1cnNvcnkgZ2xhbmNlLCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF93b3JrZXJgIHdoaWNoIHRoZW4gY2FsbHMgYF9fbXB0Y3BfcmV0cmFuc2Agc2VlbSBsaWtlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIEFuZCwgb2YgY291cnNlLCB0aGF0IG1vZGlmaWVkIGBtcHRjcF9yZWxlYXNlX2NiYCwgdGhvdWdoIGl0JiMzOTtzIG1hcmtlZCBhcyBzdGF0aWMuIEhtbS4uLiBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFyZ2V0IGZyb20gYHJlbGVhc2Vfc29ja2AsIHNvIHRoYXQgY2hhbmdlcyB0aGluZ3MuIElzIHRoYXQgYSBnb29kIGZvY3VzIHN5bWJvbD8gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgZ2l2ZXMgbWUgcGF1c2UsIGJ1dCBpdCYjMzk7cyAqZGVmaW5pdGVseSogYSBmdW5jdGlvbiBwb2ludGVyIHNvIGl0JiMzOTtzIGEgc29saWQgdGFyZ2V0LgoKTGV0JiMzOTtzIHNlZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgICppcyogbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBpcyB0aGVyZSAqYW55KiBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzPyBgbXB0Y3BfcmVjdm1zZ2AgaXNuJiMzOTt0IG1vZGlmaWVkIHNvIHRoYXQmIzM5O3Mgb3V0LiBJcyBgbXB0Y3Bfd29ya2VyYCBzdGF0aWM/IFllcywgaXQgaXMuIEFscmlnaHQsIGJhY2sgdG8gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgYXMgdGhlIHByaW1hcnkgZm9jdXMsIHRoZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3dvcmtlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMDczPWJvb2wgbXB0Y3Bfc2NoZWR1bGVfd29yayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzg6XHQvKiBHZXQgYSByZWZlcmVuY2Ugb24gdGhpcyBzb2NrZXQsIG1wdGNwX3dvcmtlcigpIHdpbGwgcmVsZWFzZSBpdC5cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzk6XHQgKiBBcyBtcHRjcF93b3JrZXIoKSBtaWdodCBjb21wbGV0ZSBiZWZvcmUgdXMsIHdlIGNhbiBub3QgYXZvaWRcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwODAtXHQgKiBhIHNvY2tfaG9sZCgpL3NvY2tfcHV0KCkgaWYgc2NoZWR1bGVfd29yaygpIHJldHVybnMgZmFsc2UuXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYxNT1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY1MC1cdCAgICAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8IHNvY2tfZmxhZyhzc2ssIFNPQ0tfREVBRCkpKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjUxOlx0XHQvKiBlbnN1cmUgbGF0ZXIgY2hlY2sgaW4gbXB0Y3Bfd29ya2VyKCkgd2lsbCBkaXNwb3NlIHRoZSBtc2sgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTItXHRcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mjc4Mj1zdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODIyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjgyMzpcdC8qIHRoZSBjYWxsaW5nIG1wdGNwX3dvcmtlciB3aWxsIHByb3Blcmx5IGRlc3Ryb3kgdGhlIHNvY2tldCAqL1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjgyNC1cdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzA3MD1zdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMDUtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTA2OnN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTA3LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTU1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTYyLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTYzOlx0SU5JVF9XT1JLKFx1MDAyNm1zay1cdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzE2NC1cdG1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNUFRDUCBEYXRhIFN0cnVjdHVyZXMqKgoKT2theSwgc28gYG1wdGNwX3dvcmtlcmAgaXMgZGVmaW5pdGVseSBzdGF0aWMsIHRoYXQmIzM5O3MgY2xlYXIuIEJ1dCBJJiMzOTttIG5vdyBkaWdnaW5nIGRlZXBlciwgYW5kIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2A/IEFoLCB0aGF0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGxpa2VseSBtb3JlIHdpZGVseSBhY2Nlc3NpYmxlIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllZCBpbiB2YXJpb3VzIGNvbnRleHRzLiBHb29kIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGNoZWNrIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYCwgaXQgbG9va3MgbGlrZSB0aGlzIG9uZSBpc24mIzM5O3QgbW9kaWZpZWQgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIGBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0YCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIG1vZGlmaWVkIGVpdGhlciwgaW50ZXJlc3RpbmcuIFNpbmNlIEkgYW0gZXhhbWluaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcywgSSB0aGluayBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGFueSBjYWxsIHNpdGVzIHRvIGBfX21wdGNwX2FkZF9iYWNrbG9nYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9hZGRfYmFja2xvZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MTY9c3RhdGljIHZvaWQgbXB0Y3BfZHNzX2NvcnJ1cHRpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3MjQ6c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjUtXHRcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTc3Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MjQtXHRcdFx0fSBlbHNlIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjgyNTpcdFx0XHRcdF9fbXB0Y3BfYWRkX2JhY2tsb2coc2ssIHN1YmZsb3csIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MjYtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IFBlcnNwZWN0aXZlIG9uIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgZmxvdyB3aXRoaW4gTXVsdGlwYXRoIFRDUCwgYW5kIGhvdyB3ZSBoYW5kbGUgaW5jb21pbmcgZGF0YS4gYG1wdGNwX2RhdGFfcmVhZHlgLCB0aGF0JiMzOTtzIHRoZSB0cmlnZ2VyLCByaWdodD8gU29tZXRoaW5nIGFycml2ZXMsIHNvbWV0aGluZyBzaWduYWxzIHRoYXQgZGF0YSBpcyBhdmFpbGFibGUgb24gYSBzdWJmbG93LiBOb3csIHRoYXQmIzM5O3Mgd2hlcmUgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgY29tZXMgaW4uIEl0JiMzOTtzIGxpa2UgdGhlIHdvcmtob3JzZSBvZiB0aGUgb3BlcmF0aW9uLgoKRXNzZW50aWFsbHksIEkgc2VlIGBtcHRjcF9kYXRhX3JlYWR5YCBhcyB0aGUgbm90aWZpY2F0aW9uLCB0aGUgJiMzNDtIZXksIHRoZXJlJiMzOTtzIHdvcmsgdG8gYmUgZG9uZSEmIzM0OyBzaWduYWwuIFRoZW4sIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIHN0ZXBzIHVwIGFuZCBhY3R1YWxseSBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nOiB0YWtpbmcgdGhlIHBhY2tldHMgKHRoZSBgc2tic2ApIHRoYXQgYXJlIHJlYWR5IG9uIGEgc3BlY2lmaWMgc3ViZmxvdyBhbmQgZ2V0dGluZyB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnbyB3aXRoaW4gdGhlIE11bHRpcGF0aCBUQ1AgY29ubmVjdGlvbi4gSXQmIzM5O3MgdGhlIG1lY2hhbmlzbSwgdGhlIGNvbmNyZXRlIGFjdGlvbiB0YWtlbiB0byBpbnRlZ3JhdGUgdGhlIGluY29taW5nIGRhdGEgZnJvbSBhIHNwZWNpZmljIHN1YmZsb3cgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIE1QVENQIGNvbm5lY3Rpb24uIFNvIGl0JiMzOTtzIG5vdCBhIHN0YW5kYWxvbmUgZnVuY3Rpb24sIGl0JiMzOTtzIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGV2ZW50LCB0aGUgcmVhZGluZXNzIGZvciB0aGUgcGFja2V0cyBhbmQgdGhlIGFjdGlvbnMgdGhhdCBmb2xsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MjQ9c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNzc2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6Nzc3OnN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzc4LVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc29jayAqc3NrLCBib29sIG93bl9tc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9OTQxPXN0YXRpYyBib29sIG1vdmVfc2tic190b19tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDUtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5NDY6XHRtb3ZlZCA9IF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgdHJ1ZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDctXHRfX21wdGNwX29mb19xdWV1ZShtc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk4Nz12b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDUtXHR9IGVsc2Uge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTAwNjpcdFx0X19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCBmYWxzZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA3LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU5NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBNUFRDUCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG1wdGNwX2RhdGFfcmVhZHlgIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIHN0YXRpYyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBzY29wZSwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIEJvdGggYG1wdGNwX2RhdGFfcmVhZHlgIGFuZCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaGF2ZSBwaXF1ZWQgbXkgaW50ZXJlc3QuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMsIGluIGZhY3QsIG5vbi1zdGF0aWMuIElmIGl0JiMzOTtzIG5vdCBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSwgSSB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhY3Jvc3MgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGVsc2V3aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCBpbiBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIHByb2plY3QuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX2RhdGFfcmVhZHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9OTYxPXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9ydHRfdXBkYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTg2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6OTg3OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05ODgte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTk1Nj1zdGF0aWMgaW5saW5lIHU2NCBtcHRjcF9zdGFtcCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2MC1cbm5ldC9tcHRjcC9wcm90b2NvbC5oOjk2MTp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2Mi1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzayk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTA2PXN0YXRpYyB2b2lkIHN1YmZsb3dfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTMwLVx0aWYgKG1wdGNwX3N1YmZsb3dfZGF0YV9hdmFpbGFibGUoc2spKSB7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MzE6XHRcdG1wdGNwX2RhdGFfcmVhZHkocGFyZW50LCBzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MzItXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xODc0PXN0YXRpYyB2b2lkIHN1YmZsb3dfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODUtXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4ODY6XHRcdG1wdGNwX2RhdGFfcmVhZHkocGFyZW50LCBzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODctXHRlbHNlIGlmICh1bmxpa2VseShzay1cdTAwM2Vza19lcnIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM1MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRGF0YSBSZWFkaW5lc3MgaW4gTXVsdGlwYXRoIFRDUCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgZGF0YSByZWFkaW5lc3MgaXMgaGFuZGxlZCBpbiBNdWx0aXBhdGggVENQLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBtcHRjcF9kYXRhX3JlYWR5YCBpcyBjYWxsZWQgZnJvbSB0d28ga2V5IGZ1bmN0aW9uczogYHN1YmZsb3dfZGF0YV9yZWFkeWAgYW5kIGBzdWJmbG93X3N0YXRlX2NoYW5nZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnRzPyBJIG5lZWQgdG8gYmUgY29tcHJlaGVuc2l2ZSBoZXJlLgoKTGV0IG1lIHRoaW5r4oCmIHdoYXQgYWJvdXQgYG1wdGNwX3JlY3Ztc2dgPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIGRhdGEsIGFuZCBJIHJlY2FsbCBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zIHRvIGBtcHRjcF9tb3ZlX3NrYnNgLiBBaCwgcmlnaHQsIGBtcHRjcF9yZWN2bXNnYCAqZG9lcyogY2FsbCBgbXB0Y3BfbW92ZV9za2JzYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEdpdmVuIHRoZSBtb2RpZmljYXRpb24sIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyBhbiBpbXBhY3QgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3MgYmFjayB1cC4gV2hlcmUgZWxzZSBpcyBgbXB0Y3BfbW92ZV9za2JzYCBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHRyYWNlICphbGwqIHRoZSBjYWxsZXJzIG9mIGBtcHRjcF9tb3ZlX3NrYnNgIG5vdyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIGRhdGEgcmVhZGluZXNzIGFuZCwgcG90ZW50aWFsbHksIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIHdpbGwgcHJvdmlkZSBhIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfbW92ZV9za2JzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTcyND1zdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3Nzc6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzgtXHRcdFx0XHRcdCAgIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgb3duX21zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NDE9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NjpcdG1vdmVkID0gX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCB0cnVlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0Ny1cdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9OTg3PXZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNS1cdH0gZWxzZSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA2Olx0XHRfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIGZhbHNlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDctXHR9XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjIxMD1zdGF0aWMgdm9pZCBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBjb3BpZWQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjI2My1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIyNjQ6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRhKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjI2NS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjI4OD1zdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjMwNS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMDY6c3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMDcte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTUtXHRcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMTY6XHRcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzE3LVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNTA9c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMzk0Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkgXHUwMDI2XHUwMDI2IG1wdGNwX21vdmVfc2ticyhzaykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzk1LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3ODY9c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgxOS1cdFx0XHRfX21wdGNwX3JldHJhbnMoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzgyMDpcdFx0aWYgKHNwb29sX2JsIFx1MDAyNlx1MDAyNiBfX21wdGNwX21vdmVfc2ticyhzaywgXHUwMDI2c2ticywgXHUwMDI2bW92ZWQpKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODIxLVx0XHRcdC8qIG5vdGlmeSBhY2sgc2VxIHVwZGF0ZSAqL1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQwNzg9c3RhdGljIGludCBtcHRjcF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDg4LVx0XHRsb2NrX3NvY2soc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDA4OTpcdFx0aWYgKG1wdGNwX21vdmVfc2ticyhzaykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDkwLVx0XHRcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIDApO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ0OTU9c3RhdGljIHN0cnVjdCBza19idWZmICptcHRjcF9yZWN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqb2ZmKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ1MDEtXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0NTAyOlx0XHRtcHRjcF9tb3ZlX3NrYnMoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtNDUwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBNUFRDUCBEYXRhIEZsb3cqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgbXVsdGktcGF0aCBUQ1AgaW1wbGVtZW50YXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIG1vdmVzIGFyb3VuZC4gSXQgc2VlbXMgbGlrZSBgbXB0Y3BfcmVjdm1zZ2AgYW5kIGBtcHRjcF9pb2N0bGAgYXJlIGtleSBlbnRyeSBwb2ludHMsIGJvdGggb2Ygd2hpY2ggZXZlbnR1YWxseSBjYWxsIGBtcHRjcF9tb3ZlX3NrYnNgLiBUaGF0IGBtcHRjcF9yZWN2bXNnYCBmdW5jdGlvbiBsb29rcyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2QgcGxhY2UgdG8gZm9jdXMgb24gYXMgYSBzdGFydGluZyBwb2ludC4KCk5vdywgSSBhbHNvIHNlZSB0aGF0IGBfX21wdGNwX3JldHJhbnNgIGlzIHRyaWdnZXJlZCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gSSYjMzk7bGwgd2FudCB0byByZW1lbWJlciB0aGlzIHNpbmNlIHJldHJhbnNtaXNzaW9ucyBhcmUgY3JpdGljYWwuIGBtcHRjcF93b3JrZXJgIGl0c2VsZiBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgaW4gdHJhY2luZyB0aGUgcGF0aC4gTm93IHRoZSBxdWVzdGlvbiBpcywgd2hhdCB0cmlnZ2VycyBgbXB0Y3Bfd29ya2VyYD8gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIHdvcmtxdWV1ZSBpcyBzY2hlZHVsZWQgYW5kIGV4ZWN1dGVkLgoKQWgsIGhlcmUmIzM5O3MgYG1wdGNwX3NjaGVkdWxlX3dvcmtgIHdoaWNoIHNlZW1zIHRvIGJlIG5vbi1zdGF0aWMuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCBvZiBlbnRyeSBhbmQgb3JjaGVzdHJhdGlvbiBmb3IgTVBUQ1Agb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGdvb2QgbGVhZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfc2NoZWR1bGVfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jPTExNTU9Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExOTMtXHRcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlcmN2X2Zhc3RjbG9zZSwgdHJ1ZSk7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExOTQ6XHRcdFx0bXB0Y3Bfc2NoZWR1bGVfd29yaygoc3RydWN0IHNvY2sgKiltc2spO1xubmV0L21wdGNwL29wdGlvbnMuYy0xMTk1LVx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9NUEZBU1RDTE9TRVJYKTtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyNTAtXHRcdCAgICBtcHRjcF91cGRhdGVfcmN2X2RhdGFfZmluKG1zaywgbXBfb3B0LmRhdGFfc2VxLCBtcF9vcHQuZHNuNjQpKVxubmV0L21wdGNwL29wdGlvbnMuYzoxMjUxOlx0XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoKHN0cnVjdCBzb2NrICopbXNrKTtcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTI1Mi1cbi0tXG5uZXQvbXB0Y3AvcG0uYz01OTI9c3RhdGljIGJvb2wgbXB0Y3BfcG1fc2NoZWR1bGVfd29yayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTYwMC1cdG1zay1cdTAwM2VwbS5zdGF0dXMgfD0gQklUKG5ld19zdGF0dXMpO1xubmV0L21wdGNwL3BtLmM6NjAxOlx0bXB0Y3Bfc2NoZWR1bGVfd29yaygoc3RydWN0IHNvY2sgKiltc2spO1xubmV0L21wdGNwL3BtLmMtNjAyLVx0cmV0dXJuIHRydWU7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9OTQxPXN0YXRpYyBib29sIG1vdmVfc2tic190b19tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NTYtXHRpZiAobXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzaywgTlVMTCkpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5NTc6XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtOTU4LVx0cmV0dXJuIG1vdmVkO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwNjE9c3RhdGljIHZvaWQgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDcyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA3Mzpib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3NC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTEzNz1zdGF0aWMgdm9pZCBfX21wdGNwX2NsZWFuX3VuYShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTE5Mi1cdGlmIChtcHRjcF9wZW5kaW5nX2RhdGFfZmluX2FjayhzaykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMTkzOlx0XHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExOTQtfVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE3OTM9c3RhdGljIHZvaWQgX19tcHRjcF9zdWJmbG93X3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgZmlyc3QpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTg1NS1cdFx0ICAgIG1zay1cdTAwM2VzbmRfbnh0ICYjNDM7IDEgPT0gbXNrLVx1MDAzZXdyaXRlX3NlcSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE4NTY6XHRcdFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODU3LVx0fVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0NjI9c3RhdGljIHZvaWQgbXB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDcwLVx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoTVBUQ1BfV09SS19SVFgsIFx1MDAyNm1zay1cdTAwM2VmbGFncykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDcxOlx0XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjQ3Mi1cdH0gZWxzZSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ4MD1zdGF0aWMgdm9pZCBtcHRjcF90b3V0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0ODUtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDg2Olx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDg3LVx0c29ja19wdXQoc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMyNTY9dm9pZCBtcHRjcF9zdWJmbG93X3NodXRkb3duKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgaW50IGhvdylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjc3LVx0XHRcdFdSSVRFX09OQ0UobXB0Y3Bfc2soc2spLVx1MDAzZXNuZF91bmEsIG1wdGNwX3NrKHNrKS1cdTAwM2VzbmRfbnh0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNzg6XHRcdFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjc5LVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTk2Mj1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5NjM6Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05NjQtaW50IG1wdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NDMwPXZvaWQgbXB0Y3Bfc3ViZmxvd19yZXNldChzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQ2LVx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1QVENQX1dPUktfQ0xPU0VfU1VCRkxPVywgXHUwMDI2bXB0Y3Bfc2soc2spLVx1MDAzZWZsYWdzKSlcbm5ldC9tcHRjcC9zdWJmbG93LmM6NDQ3Olx0XHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQ4LVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTEwOT1zdGF0aWMgZW51bSBtYXBwaW5nX3N0YXR1cyBnZXRfbWFwcGluZ19zdGF0dXMoc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzUtXHRcdFx0aWYgKHVwZGF0ZWQpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjExNzY6XHRcdFx0XHRtcHRjcF9zY2hlZHVsZV93b3JrKChzdHJ1Y3Qgc29jayAqKW1zayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzctXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjg5PXN0YXRpYyB2b2lkIHN1YmZsb3dfc2NoZWRfd29ya19pZl9jbG9zZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEzMDItXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoTVBUQ1BfV09SS19DTE9TRV9TVUJGTE9XLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxubmV0L21wdGNwL3N1YmZsb3cuYzoxMzAzOlx0XHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTMwNC1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEzMTEtXHRcdFx0XHQgICAgICBzdWJmbG93LVx1MDAzZW1hcF9kYXRhX2xlbiwgdHJ1ZSkpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEzMTI6XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMzEzLX1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIwMDQ9c3RhdGljIHZvaWQgc3ViZmxvd191bHBfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAyNS1cdFx0XHRcdFx0XHQgIFx1MDAyNm1wdGNwX3NrKHNrKS1cdTAwM2VmbGFncykpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwMjY6XHRcdFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwMjctXHRcdHNvY2tfcHV0KHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxODgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG5hdmlnYXRpbmcgdGhpcyBrZXJuZWwgbW9kdWxlOgoKKipJbnZlc3RpZ2F0aW5nIE1QVENQIEVudHJ5IFBvaW50cyBhbmQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAsIGFuZCBgbXB0Y3BfcmVjdm1zZ2AuLi4gdGhlc2UgZmVlbCBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZW50cnkgcG9pbnRzIG9mIHRoaXMgTVBUQ1AgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byB0aGUgbmV0d29ya2luZyBzdGFjay4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwbHkgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWUgY3JpdGljYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBgQ09ORklHYCBvcHRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIE1QVENQIGZlYXR1cmUgdG8gYmUgYWN0aXZlLgoKU2luY2UgdGhlIGNvZGUgaXMgY2xlYXJseSBpbiBgbmV0L21wdGNwL2AsIHRoYXQgc2ltcGxpZmllcyB0aGUgc2VhcmNoLiBJJiMzOTtsbCBjaGVjayB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGVzIOKAkyBlaXRoZXIgdGhlIG9uZSBkaXJlY3RseSBpbiBgbmV0L21wdGNwL0tjb25maWdgLCBvciBmYWlsaW5nIHRoYXQsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNlYXJjaCB0byB0aGUgbWFpbiBgbmV0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbW9yZSBoaWdoLWxldmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgZGVwZW5kZW5jaWVzIG9yIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgY29tcGlsYXRpb24gYW5kIGFjdGl2YXRpb24gb2YgdGhpcyBNUFRDUCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NjgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTVBUQ1AgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSBzZWUgYE1QVENQYCBpcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgaXRzIGZvdW5kYXRpb24/IEEgcXVpY2sgbWVudGFsIHNjYW4gdGVsbHMgbWUgdGhhdCBgTVBUQ1BgIHJlbGllcyBvbiB0aGUgYElORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY29ycmVjdCBhbmQgdGFrZSBhIGRlZXBlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMuIEkga25vdyB0aGUgS2NvbmZpZyBmaWxlIGZvciBgTVBUQ1BgIHNob3VsZCBoYXZlIHRoZSBhbnN3ZXJzLCBzbyBJJiMzOTtsbCBqdW1wIGludG8gYG5ldC9tcHRjcC9LY29uZmlnYCB0byBjaGVjayBvdXQgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjE4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIENvbmZpZ3VyYXRpb24gYW5kIENvcmUgTG9naWMgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGtleSBsb2dpYyBwb2ludHMgZm9yIE11bHRpUGF0aCBUQ1AgKE1QVENQKS4gVGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBlbGVtZW50IGlzIGNsZWFybHkgYE1QVENQYCwgd2hpY2ggSSYjMzk7bGwgYWRkIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkgZG9uJiMzOTt0IHRoaW5rIEkgbmVlZCB0byBicmluZyBpbiBgTVBUQ1BfSVBWNmAganVzdCB5ZXQsIGFzIGBNUFRDUGAgaXRzZWxmIHNob3VsZCBiZSB0aGUgY29yZSBlbmFibGVyLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYE1QVENQYCBpcyBhIGJvb2xlYW4gYW5kIG5vdCBhIHRyaXN0YXRlLCBhbmQgeWVzLCBpdCYjMzk7cyBhIGJvb2wsIHNvIGp1c3QgZW5hYmxpbmcgaXQgaXMgZW5vdWdoLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYSBzaG9ydGxpc3Q6CgoqICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgOiBUaGlzIGNhbGxzIGBtcHRjcF9vdmVyX2xpbWl0YC4KKiAgIGBtcHRjcF9kYXRhX3JlYWR5YDogV2hpY2ggY2FsbHMgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AuIFRoYXQgaW4gdHVybiBjYWxscyBgX19tcHRjcF9hZGRfYmFja2xvZ2AgYW5kIGBfX21wdGNwX21vdmVfc2tiYCwgYW5kIGZpbmFsbHkgYG1wdGNwX3BydW5lX29mb19xdWV1ZWAuCiogICBgbXB0Y3BfcmVjdm1zZ2A6IFRoaXMgZnVuY3Rpb24gaXMgbGlua2VkIHRvIGBtcHRjcF9tb3ZlX3NrYnNgIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fbXB0Y3BfbW92ZV9za2JzYC4KCkkgc2hvdWxkIGNoZWNrIHRoZSBgX19tcHRjcF9yZXRyYW5zYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgYnkgYG1wdGNwX3JlbGVhc2VfY2JgIGFuZCBgbXB0Y3Bfd29ya2VyYC4gYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGZvciB0aGUgc29ja2V0LCB0cmlnZ2VyZWQgd2hlbiB0aGUgc29ja2V0IGxvY2sgaXMgcmVsZWFzZWQuIEFuZCBgbXB0Y3Bfd29ya2VyYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbi4gSXMgdGhlcmUgYW55dGhpbmcgb3V0c2lkZSBvZiBNUFRDUCBjYWxsaW5nIHRoYXQgYG1wdGNwX3JlbGVhc2VfY2JgPyBJIHNlZSBgcmVsZWFzZV9zb2NrYCBjYWxscyBpdC4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiwgbm90IHNwZWNpZmljIHRvIE1QVENQLCBzbyB0aGVzZSB0aHJlZSBmdW5jdGlvbnMgYXJlIHN0aWxsIHRoZSBrZXkgb25lcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUgZm9jdXMgZnVuY3Rpb25zLiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIGFuZCBpcyBpbmRlZWQgZXhwb3J0ZWQgaW4gYGluY2x1ZGUvbmV0L21wdGNwLmhgLiBHcmVhdC4gQW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBpcyBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmhgLiBOb3csIGBtcHRjcF9yZWN2bXNnYC4uLiBXYWl0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MjExMj1zdGF0aWMgdm9pZCBtcHRjcF9lYXRfcmVjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxMjItXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTIzOnN0YXRpYyBpbnQgX19tcHRjcF9yZWN2bXNnX21za3Eoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTI0LVx0XHRcdFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzMjk9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM0OS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNTA6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM1MS1cdFx0XHQgaW50IGZsYWdzKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzODItXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMzgzOlx0XHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzODQtXHRcdFx0XHRcdFx0ICBjb3BpZWQsIFx1MDAyNnRzcywgXHUwMDI2Y21zZ19mbGFncyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTg5PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjAxLVx0LmlvY3RsXHRcdD0gbXB0Y3BfaW9jdGwsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjAyOlx0LnJlY3Ztc2dcdD0gbXB0Y3BfcmVjdm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDMtXHQucmVsZWFzZV9jYlx0PSBtcHRjcF9yZWxlYXNlX2NiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc3NwoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpZ2dpbmcgaW50byB0aGUgTVBUQ1AgQ29kZSoqCgpSaWdodCwgc28gYG1wdGNwX3JlY3Ztc2dgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGxpbWl0cyBpdHMgZGlyZWN0IHVzYWJpbGl0eSwgdW5mb3J0dW5hdGVseS4gTXkgZ29hbCBpcyB0byBmaW5kIGEgZnVuY3Rpb24sIGlkZWFsbHkgbm9uLXN0YXRpYywgdGhhdCBlaXRoZXIgY2FsbHMgYG1wdGNwX3JlY3Ztc2dgIG9yIGlzIHNvbWVob3cgZGlyZWN0bHkgcmVsYXRlZCB0byBpdCB3aXRoaW4gdGhlIE11bHRpUGF0aCBUQ1AgaW1wbGVtZW50YXRpb24uIFNpbmNlIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gYG1wdGNwX3Byb3RgLCBteSB0aGlua2luZyBpcyB0byBpbnZlc3RpZ2F0ZSBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGZpcnN0LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBhcyB0aG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBJJiMzOTttIGxpa2VseSBhZnRlci4gVGhpcyBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgTVBUQ1AgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIG1wdGNwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTk2MT1zdGF0aWMgdm9pZCBtcHRjcF9yY3ZfcnR0X3VwZGF0ZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk4Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk4Nzp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTg4LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMDYxPXN0YXRpYyB2b2lkIG1wdGNwX3Jlc2V0X3J0eF90aW1lcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzM6Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwNzQte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEyMzc9bXB0Y3BfY2FydmVfZGF0YV9mcmFnKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEyNTQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMjU1OnN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8ge1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTI1Ni1cdGludCBtc3Nfbm93O1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1Mjg9c3RydWN0IHN1YmZsb3dfc2VuZF9pbmZvIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTMyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTUzMzp2b2lkIG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTUzNC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTU0MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE1NDI6Ym9vbCBtcHRjcF9zdWJmbG93X2FjdGl2ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTU0My17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTY0NT1zdGF0aWMgdm9pZCBtcHRjcF91cGRhdGVfcG9zdF9wdXNoKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY3MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE2NzI6dm9pZCBtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY3My17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYxNT1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjcyMC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI3MjE6dm9pZCBtcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjcyMi1cdFx0ICAgICBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4OTc9c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDE2LSAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzAxNzp2b2lkIG1wdGNwX3Jlc2V0X3RvdXRfdGltZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgbG9uZyBmYWlsX3RvdXQpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDE4LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjM4PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYXJfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI0Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNDg6dm9pZCBtcHRjcF9jYW5jZWxfd29yayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjQ5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjU1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzI1Njp2b2lkIG1wdGNwX3N1YmZsb3dfc2h1dGRvd24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgaG93KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI1Ny17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI5MC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyOTE6dm9pZCBtcHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjkyLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zODUyPXN0YXRpYyB2b2lkIHNjaGVkdWxlXzNyZGFja19yZXRyYW5zbWlzc2lvbihzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4NzMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODc0OnZvaWQgbXB0Y3Bfc3ViZmxvd19wcm9jZXNzX2RlbGVnYXRlZChzdHJ1Y3Qgc29jayAqc3NrLCBsb25nIHN0YXR1cylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4NzUte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM5MTM9c3RhdGljIGludCBtcHRjcF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzkyMy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM5MjQ6dm9pZCBtcHRjcF9maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzkyNS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzk0Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM5NDg6dm9pZCBtcHRjcF9zb2NrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqcGFyZW50KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzk0OS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzk1OT1zdGF0aWMgdm9pZCBtcHRjcF9zb2NrX2NoZWNrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zOTcyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6Mzk3Mzpib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zOTc0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFNlbGVjdGlvbiBmb3IgTVBUQ1AgUmVjZWl2ZSBhbmQgUmV0cmFuc21pc3Npb24gUGF0aHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCBlZmZlY3RpdmUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIE1QVENQIGNvZGUuIFNpbmNlIGBtcHRjcF9kYXRhX3JlYWR5YCBhbmQgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFyZSBub24tc3RhdGljLCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHRoZSByZWNlaXZlIHBhdGggbW9kaWZpY2F0aW9ucy4gSSBhbHNvIGxvb2tlZCBhdCBgbXB0Y3Bfc3ViZmxvd19wcm9jZXNzX2RlbGVnYXRlZGAgYnV0IGZvdW5kIGl0IHdhc24mIzM5O3QgbW9kaWZpZWQuIFRoYXQgbGVhdmVzIG1lIGxlYW5pbmcgdG93YXJkcyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCB0byBjb3ZlciB0aGUgcmVjZWl2ZSBwYXRoLgoKQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCEgYF9fbXB0Y3BfcmV0cmFuc2AgaXMgdHJpZ2dlcmVkIGJ5IGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEkgbmVlZGVkIHRvIHRoaW5rIGFib3V0IGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIHJldHJhbnNtaXNzaW9uLiBgbXB0Y3Bfc2NoZWR1bGVfd29ya2AgbGVhZHMgdG8gYG1wdGNwX3dvcmtlcmAuIEhvd2V2ZXIsIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSB3aGVuIHRoZSBzb2NrZXQgbG9jayBpcyByZWxlYXNlZCwgd2hpY2ggaXMgZG9uZSBieSBgcmVsZWFzZV9zb2NrKHNrKWAuIFRoYXQmIzM5O3MgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIGFuZCBwcm9iYWJseSBub3QgaWRlYWwgYXMgYSBmb2N1cyBzeW1ib2wuCgpDb21pbmcgYmFjayB0byB0aGUgcmVjZWl2ZSBwYXRoLCBmdXp6aW5nIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIHNvdW5kcyBzb2xpZCwgYnV0IHdoYXQgYWJvdXQgYG1wdGNwX3JlY3Ztc2dgPyBJdCAqaXMqIHRoZSBgcmVjdm1zZ2AgaGFuZGxlciBmb3IgTVBUQ1AsIGJ1dCBpdCYjMzk7cyBzdGF0aWMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gSG93ZXZlciwgaXQgKmlzKiBhbiBBUEkgZW50cnlwb2ludCwgZGVzcGl0ZSB0aGUgc3RhdGljIGtleXdvcmQuIEkmIzM5O20gdG9ybiwgYnV0IHVsdGltYXRlbHksIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjb2RlIGNoYW5nZXMsIGFuZCBub24tc3RhdGljLCBzbyBJJiMzOTtsbCBwcmlvcml0aXplIHRoZW0uCgpMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYC4gWWVzLCBpdCYjMzk7cyBub24tc3RhdGljLCBhbmQgKmlzKiBkaXJlY3RseSBtb2RpZmllZCEgQ2hlY2tpbmcgdGhlIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgY29udGFpbnMgdGhlIGtleSBjaGVjazogYHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LSZndDtjb25uLCBzaywgc2tiKTtgLiBJdCYjMzk7cyBhIHBlcmZlY3QgZm9jdXMgc3ltYm9sLgoKTm93IGZvciBgbXB0Y3BfZGF0YV9yZWFkeWAuIEl0IGNhbGxzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGFuZCBgX19tcHRjcF9tb3ZlX3NrYmAuIEJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBTbywgYG1wdGNwX2RhdGFfcmVhZHlgIGlzIGFsc28gYSBwZXJmZWN0IGZvY3VzIHN5bWJvbCwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgaW4gdGhlIHBhdGNoLgoKSSB3aWxsIHNldCBhc2lkZSBvdGhlciBmb2N1cyBzeW1ib2xzIHN1Y2ggYXMgYG1wdGNwX3dvcmtlcmAsIHNpbmNlIGl0IGlzIHN0YXRpYy4gSSB3aWxsIGxvb2sgZm9yIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciB0aGUgcmV0cmFuc21pc3Npb24gcGFydC4gV2hhdCBhYm91dCBgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nYD8gVGhhdCYjMzk7cyBhbm90aGVyIGF2ZW51ZSB0byBpbnZlc3RpZ2F0ZSwgYnV0IGZvciBub3csIEkmIzM5O20gY29uZmlkZW50IGluIHByaW9yaXRpemluZyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBhcyB0aGUga2V5IGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNjQ1PXN0YXRpYyB2b2lkIG1wdGNwX3VwZGF0ZV9wb3N0X3B1c2goc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjcxLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTY3Mjp2b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjczLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODk3PXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk5OC1yZXNldF90aW1lcjpcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5OTk6XHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzAwMC1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MTE9Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4MTI6dm9pZCBtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMy12b2lkIF9fbXB0Y3BfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGZsYWdzKTtcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTY2MD1zdGF0aWMgaW50IF9fbXB0Y3Bfc2V0c29ja29wdF9zb2xfdGNwX2Nvcmsoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IHZhbClcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTY3NC1cdGlmICghdmFsKVxubmV0L21wdGNwL3NvY2tvcHQuYzo2NzU6XHRcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTY3Ni1cbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTY4MD1zdGF0aWMgaW50IF9fbXB0Y3Bfc2V0c29ja29wdF9zb2xfdGNwX25vZGVsYXkoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IHZhbClcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTY5NC1cdGlmICh2YWwpXG5uZXQvbXB0Y3Avc29ja29wdC5jOjY5NTpcdFx0bXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHNrKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNjk2LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTUzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgTVBUQ1AgUmV0cmFuc21pc3Npb24gTG9naWMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZmxvdyBoZXJlLiBJdCBsb29rcyBsaWtlIGBtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmdgIGlzICpjYWxsZWQqIGZyb20gYF9fbXB0Y3BfcmV0cmFuc2AsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdGltaW5nLiBCdXQgd2hhdCBhYm91dCB0aGF0IHBlc2t5IGBtcHRjcF9yZXRyYW5zbWl0X3RpbWVyYD8gSXQmIzM5O3Mgc3RhdGljLCBzbyB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IHBhdGgsIG5lZWRzIGEgc2VwYXJhdGUgbG9vaywgYnV0IHRoZSBpbW1lZGlhdGUgY2FsbGluZyBwYXRoIGZyb20gdGhlIHJldHJhbnNtaXQgbG9naWMgaXMgY2xlYXIuIFRoZW4gSSBzZWUgYG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZWAsIHRoYXQgY2FsbHMgYF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGFgIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uLiBXYWl0LCBgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YWAgaXMgKm5vbi1zdGF0aWMqISBPa2F5LCB0aGF0JiMzOTtzIGNydWNpYWwuIEtub3dpbmcgaXQmIzM5O3Mgbm9uLXN0YXRpYyBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgbW9kdWxlcywgc29tZXRoaW5nIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHdoZW4gSSBtYXAgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG5vdGUgd2hlcmUgdGhhdCYjMzk7cyBjYWxsZWQgZnJvbSwgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTEwNjM9c3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtLmMtMTA4NC1cdFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGUgPSAxO1xubmV0L21wdGNwL3BtLmM6MTA4NTpcdFx0XHRcdF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xubmV0L21wdGNwL3BtLmMtMTA4Ni1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0OTU9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTMwLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjUzMTpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYxNT1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY2NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2NjU6XHRuZWVkX3B1c2ggPSAoZmxhZ3MgXHUwMDI2IE1QVENQX0NGX1BVU0gpIFx1MDAyNlx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjYtXHRpZiAoIWRpc3Bvc2VfaXQpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODk3PXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDk6XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk1MC1cdFx0ICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9ODA4PXZvaWQgX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtODEwLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6ODExOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmgtODEyLXZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTgzCgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDg1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhYCB3b3VsZCBiZSBpbnRlcmVzdGluZywgYnV0IGl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG5vdCByaWdodCwgYnV0IGl0IGRvZXNuJiMzOTt0IGV2ZW4gY2FsbCBgX19tcHRjcF9yZXRyYW5zYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2FzIGFjdHVhbGx5IG1vZGlmaWVkLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgY3VydmViYWxsLiBBZnRlciByZXZpZXdpbmcgYWxsIHRoZSBmdW5jdGlvbnMsIHRoZSBjb2RlIG1vZGlmaWVzIGEgYnVuY2ggb2YgZnVuY3Rpb25zOiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgLCBgX19tcHRjcF9tb3ZlX3NrYmAsIGBfX21wdGNwX2FkZF9iYWNrbG9nYCwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AsIGBtcHRjcF9tb3ZlX3NrYnNgLCBgX19tcHRjcF9wdXNoX3JldHJhbnNgLCBgX19tcHRjcF9yZXRyYW5zYCwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4KCmBfX21wdGNwX3JldHJhbnNgIGlzIGNhbGxlZCBieSBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBgbXB0Y3BfcmVsZWFzZV9jYmAgaXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgZm9yIHRoZSBzb2NrZXQsIHNvIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIHRoZSBzb2NrZXQgbG9jayBpcyByZWxlYXNlZC4gRXNzZW50aWFsbHksIGFueSBmdW5jdGlvbiB0aGF0IGxvY2tzIGFuZCB1bmxvY2tzIHRoZSBzb2NrZXQgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBpdC4gVGhhdCBtYWtlcyBmdXp6aW5nIGBtcHRjcF9yZWN2bXNnYCB2aWEgdGhlIGByZWN2bXNnYCBzeXNjYWxsIG9yIGBtcHRjcF9zZW5kbXNnYCB2aWEgdGhlIGBzZW5kbXNnYCBzeXNjYWxsIGEgdmlhYmxlIHN0cmF0ZWd5LiBCdXQgbG9va2luZyBkZWVwZXIgYW5kIHRyYWNpbmcgY2FsbHMsIEkgdGhpbmsgdGhlcmUgYXJlIGJldHRlciBhcHByb2FjaGVzLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHRoZSBvbmVzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdGhlIHN5c2NhbGxzIG9yIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBTbyBJIHdhbnQgdG8gaW5jbHVkZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YC4gYG1wdGNwX2lvY3RsYCBsb29rZWQgaW50ZXJlc3Rpbmcgc2luY2UgaXQgY2FsbHMgYG1wdGNwX21vdmVfc2tic2AsIGJ1dCB0aGVuIEkgcmVhbGl6ZWQgaXQmIzM5O3Mgc3RhdGljLiBMZXQmIzM5O3Mgc2VlLi4uIGBtcHRjcF9yZWN2bXNnYCBpcyBzdGF0aWMsIHRvby4gT2theSwgc28gZmluZGluZyBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBzdGF0aWMgYG1wdGNwX21vdmVfc2tic2AgaXNuJiMzOTt0IGdvaW5nIHRvIGdldCBtZSBhbnl3aGVyZS4gYG1wdGNwX21vdmVfc2tic2AgaXMgb25seSBjYWxsZWQgYnkgYSBidW5jaCBvZiBzdGF0aWMgZnVuY3Rpb25zIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAsIHdoaWNoLCBhcyBtZW50aW9uZWQsIGlzIHRyaWdnZXJlZCBpbmRpcmVjdGx5LiBTbywgaXQgbG9va3MgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBhcmUgdGhlIGJlc3QgYmV0cyBhcyBmb2N1cyBzeW1ib2xzLgoKTGV0IG1lIGRvdWJsZS1jaGVjay4gWXVwLCBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMgbm9uLXN0YXRpYyAoYHZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgKSwgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBub24tc3RhdGljIHRvbyAoYGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2ApLgoKU28sIHRoZSBwYXRjaCBtYWlubHkgbW9kaWZpZXMgdGhlc2UgZnVuY3Rpb25zOiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgKG5vbi1zdGF0aWMpLCBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCAoc3RhdGljKSwgYF9fbXB0Y3BfbW92ZV9za2JgIChzdGF0aWMpLCBgX19tcHRjcF9hZGRfYmFja2xvZ2AgKHN0YXRpYyksIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIChzdGF0aWMpLCBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKSwgYF9fbXB0Y3BfcHVzaF9yZXRyYW5zYCAoc3RhdGljKSwgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYyksIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgKHN0YXRpYykuCgpTbyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBhcmUgc3RpbGwgdGhlIGJlc3Qgc3ltYm9scyB0byBjb25jZW50cmF0ZSBvbi4gV2FpdCwgYG1wdGNwX2RhdGFfcmVhZHlgIGFjdHVhbGx5IGNhbGxzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLiBIbW0sIGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSB0aGVzZSBtaWdodCBiZSB0aGUgYmVzdCB0YXJnZXRzLCBhbmQgdGhlIG9ubHkgb25lcyBJIGNhbiByZWFsbHkgbGV2ZXJhZ2UgaW4gYSB0YXJnZXRlZCB3YXkuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0cnVlLi4uCgpTbyB3aGF0IGNvbmZpZyBvcHRpb24gZG8gSSBuZWVkIHRvIGVuYWJsZT8gSnVzdCBgTVBUQ1BgLCBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgoqKkZpbmFsIGFzc2Vzc21lbnQ6KiogVGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJIHNob3VsZCBmb2N1cyBvbiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YC4gSSB3aWxsIGVuYWJsZSB0aGUgYE1QVENQYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGNyaXRpY2FsIE1QVENQIGxvZ2ljIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmV0cmFuc21pc3Npb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIGZ1enppbmcgdG8gZXhwb3NlIGlzc3VlcyBhcm91bmQgdGhlIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHdoaWNoIGRyb3AgcGFja2V0cyBvciBwcnVuZSBxdWV1ZXMsIGFuZCB0aGUgcmVmYWN0b3Jpbmcgb2YgcmV0cmFuc21pc3Npb24gbG9naWMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUsIGFuZCBhbnkgaXNzdWVzIGhlcmUgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE1QVENQIHByb3RvY29sIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgY29uc3RyYWludHMgYW5kIHJldHJhbnNtaXNzaW9ucy4gSXQgaW50cm9kdWNlcyBuZXcgbWVtb3J5IGxpbWl0IGNoZWNrcyB0aGF0IGRyb3AgcGFja2V0cyBvciBwcnVuZSB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIHdoZW4gbGltaXRzIGFyZSBleGNlZWRlZCwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9naWMgdG8gaGFuZGxlIG11bHRpcGxlIGZyYWdtZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE1QVENQIHByb3RvY29sIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgY29uc3RyYWludHMgYW5kIHJldHJhbnNtaXNzaW9ucy4gSXQgaW50cm9kdWNlcyBuZXcgbWVtb3J5IGxpbWl0IGNoZWNrcyB0aGF0IGRyb3AgcGFja2V0cyBvciBwcnVuZSB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIHdoZW4gbGltaXRzIGFyZSBleGNlZWRlZCwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9naWMgdG8gaGFuZGxlIG11bHRpcGxlIGZyYWdtZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDoxOC43OTg0OTI3MjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4Nzg1MDE0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTVBUQ1AgcHJvdG9jb2wgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBjb25zdHJhaW50cyBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHRoYXQgZHJvcCBwYWNrZXRzIG9yIHBydW5lIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBoYW5kbGUgbXVsdGlwbGUgZnJhZ21lbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDQ6MTguNzk4NTAwNDExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDA0NDAwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlODdhMzE0Y2NjMzdjMmUzNGNlZGExZDJhYWE0NjcwMTVhNDdiZjgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDE5OjQ0OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xcbmluZGV4IGYyM2ZkYTBjNTVhNzIwLi5kOWJkNGY0YWZjYzBlNyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvbWliLmNcXG4rKysgYi9uZXQvbXB0Y3AvbWliLmNcXG5AQCAtODUsNiArODUsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcXFwiLCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiRmFsbGJhY2tGYWlsZWRcXFwiLCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLFxcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJXaW5Qcm9iZVxcXCIsIE1QVENQX01JQl9XSU5QUk9CRSksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIkJhY2tsb2dEcm9wXFxcIiwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKSxcXG4rXFx0U05NUF9NSUJfSVRFTShcXFwiUmN2UHJ1bmVkXFxcIiwgTVBUQ1BfTUlCX1JDVlBSVU5FRCksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIk9mb1BydW5lZFxcXCIsIE1QVENQX01JQl9PRk9fUFJVTkVEKSxcXG4gfTtcXG4gXFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXFxuaW5kZXggODEyMjE4YjVlZDJiZmMuLjE4ZjM1ZjdlMGEyZDRlIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxcbisrKyBiL25ldC9tcHRjcC9taWIuaFxcbkBAIC04OCw2ICs4OCw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcXG4gXFx0TVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyxcXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xcbiBcXHRNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsXFx0LyogQ2FuJ3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi9cXG4gXFx0TVBUQ1BfTUlCX1dJTlBST0JFLFxcdFxcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXFxuK1xcdE1QVENQX01JQl9CQUNLTE9HRFJPUCxcXHRcXHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXFxuK1xcdE1QVENQX01JQl9SQ1ZQUlVORUQsXFx0XFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnMgKi9cXG4rXFx0TVBUQ1BfTUlCX09GT19QUlVORUQsXFx0XFx0LyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqL1xcbiBcXHRfX01QVENQX01JQl9NQVhcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9vcHRpb25zLmMgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXFxuaW5kZXggYzY2NDAyM2QzN2JhOGUuLjdiOTU0ZWY3ODY3MjMwIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcXG4rKysgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXFxuQEAgLTExMjcsOCArMTEyNywzMCBAQCBzdGF0aWMgYm9vbCBhZGRfYWRkcl9obWFjX3ZhbGlkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuIFxcdHJldHVybiBobWFjID09IG1wX29wdC1cXHUwMDNlYWhtYWM7XFxuIH1cXG4gXFxuLS8qIFJldHVybiBmYWxzZSBpbiBjYXNlIG9mIGVycm9yIChvciBzdWJmbG93IGhhcyBiZWVuIHJlc2V0KSxcXG4tICogZWxzZSByZXR1cm4gdHJ1ZS5cXG4rc3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHR1NjQgbWVtID0gc2tfcm1lbV9hbGxvY19nZXQoc2spO1xcbitcXG4rXFx0bWVtICs9IFJFQURfT05DRShtc2stXFx1MDAzZWJhY2tsb2dfbGVuKTtcXG4rXFx0aWYgKGxpa2VseShtZW0gXFx1MDAzYz0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4gb3IgemVybyB3aW4gcHJvYmVzLiAqL1xcbitcXHRpZiAoVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxIHx8XFxuK1xcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9GSU4gfHxcXG4rXFx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVxcdTAwM2VyY3Zfbnh0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXFxuK1xcdGluZXRfY3NrKHNzayktXFx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XFxuK1xcdGluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxcbisgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXFxuICAqL1xcbiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuQEAgLTExNTQsNyArMTE3Niw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRcXHRfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy1cXHUwMDNlY29ubik7XFxuIFxcdFxcdG1wdGNwX2RhdGFfdW5sb2NrKHN1YmZsb3ctXFx1MDAzZWNvbm4pO1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXFx1MDAzZWNvbm4sIHNrLCBza2IpO1xcbiBcXHR9XFxuIFxcbiBcXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFxcdTAwMjZtcF9vcHQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuaW5kZXggY2E2NDRlYzUzZWVkYjEuLjVjZjQ0ZWFiNzZmMWM0IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzczLDYgKzM3Myw0OSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9pbml0X3NrYihzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxcbiBcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4gfVxcbiBcXG4rLyogXFxcIkluc3BpcmVkXFxcIiBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXFxuKyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuK1xcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqcHJldjtcXG4rXFx0Ym9vbCBwcnVuZWQgPSBmYWxzZTtcXG4rXFx0dTY0IG1lbTtcXG4rXFxuK1xcdGlmIChSQl9FTVBUWV9ST09UKFxcdTAwMjZtc2stXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bm9kZSA9IFxcdTAwMjZtc2stXFx1MDAzZW9vb19sYXN0X3NrYi1cXHUwMDNlcmJub2RlO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xcbitcXG4rXFx0XFx0LyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi9cXG4rXFx0XFx0aWYgKGFmdGVyNjQoc2VxLCBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbWFwX3NlcSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0cHJ1bmVkID0gdHJ1ZTtcXG4rXFx0XFx0cHJldiA9IHJiX3ByZXYobm9kZSk7XFxuK1xcdFxcdHJiX2VyYXNlKG5vZGUsIFxcdTAwMjZtc2stXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XFxuK1xcdFxcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XFxuK1xcdFxcdG1zay1cXHUwMDNlb29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpO1xcbitcXG4rXFx0XFx0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XFxuK1xcdFxcdGlmIChtZW0gXFx1MDAzYz0gc2stXFx1MDAzZXNrX3JjdmJ1ZilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRub2RlID0gcHJldjtcXG4rXFx0fSB3aGlsZSAobm9kZSk7XFxuK1xcbitcXHRpZiAocHJ1bmVkKVxcbitcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfT0ZPX1BSVU5FRCk7XFxuK1xcbitvdXQ6XFxuK1xcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xcbitcXHRyZXR1cm4gbWVtIFxcdTAwM2M9IHNrLVxcdTAwM2Vza19yY3ZidWY7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHU2NCBjb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxIC0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXE7XFxuQEAgLTM4MSw2ICs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRtcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpO1xcbiBcXG4rXFx0LyogQ2FuJ3QgZHJvcCBwYWNrZXRzIGZvciBmYWxsYmFjayBzb2NrZXQgdGhpcyBsYXRlLCBvciB0aGUgc3RyZWFtXFxuK1xcdCAqIHdpbGwgYnJlYWsuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2UgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEpKSB7XFxuK1xcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xcbitcXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbWFwX3NlcSA9PSBtc2stXFx1MDAzZWFja19zZXEpIHtcXG4gXFx0XFx0LyogaW4gc2VxdWVuY2UgKi9cXG4gXFx0XFx0bXNrLVxcdTAwM2VieXRlc19yZWNlaXZlZCArPSBjb3B5X2xlbjtcXG5AQCAtNjc1LDYgKzcyOSw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBzb2NrICpzc2sgPSBza2ItXFx1MDAzZXNrO1xcbiBcXHRib29sIGZyYWdzdG9sZW47XFxuK1xcdHU2NCBsaW1pdDtcXG4gXFx0aW50IGRlbHRhO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7XFxuQEAgLTY4Miw2ICs3MzcsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXFxuK1xcdGxpbWl0ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbitcXHRsaW1pdCArPSAobGltaXQgXFx1MDAzZVxcdTAwM2UgMSkgKyA2NCAqIDEwMjQ7XFxuK1xcdGxpbWl0ID0gbWluX3QodTY0LCBsaW1pdCwgVUlOVF9NQVgpO1xcbitcXHRpZiAobXNrLVxcdTAwM2ViYWNrbG9nX2xlbiBcXHUwMDNlIGxpbWl0IFxcdTAwMjZcXHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcXG4rXFx0XFx0X19NUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfQkFDS0xPR0RST1ApO1xcbitcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9CQUNLTE9HKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkpXFxuIFxcdFxcdHRhaWwgPSBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XFxuQEAgLTc1Myw3ICs4MTgsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFxuIFxcdFxcdFxcdG1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7XFxuIFxcbi1cXHRcXHRcXHRpZiAob3duX21zayBcXHUwMDI2XFx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXFx1MDAzYyBzay1cXHUwMDNlc2tfcmN2YnVmKSB7XFxuK1xcdFxcdFxcdGlmIChvd25fbXNrKSB7XFxuIFxcdFxcdFxcdFxcdG1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTtcXG4gXFx0XFx0XFx0XFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTExMzYsMTMgKzEyMDEsNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbi17XFxuLVxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuLVxcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuLVxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgbXB0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbkBAIC0yMjA5LDEyICsyMjY3LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRcXG4gXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4gXFx0Ym9vbCBtb3ZlZCA9IGZhbHNlO1xcbiBcXG4tXFx0KmRlbHRhID0gMDtcXG4gXFx0d2hpbGUgKDEpIHtcXG4tXFx0XFx0LyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJ3QgZHJvcCAqL1xcbi1cXHRcXHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2Ugc2stXFx1MDAzZXNrX3JjdmJ1ZilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbiBcXHRcXHRwcmVmZXRjaChza2ItXFx1MDAzZW5leHQpO1xcbiBcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2tiLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0KmRlbHRhICs9IHNrYi1cXHUwMDNldHJ1ZXNpemU7XFxuQEAgLTIyNDIsOSArMjI5NSw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXFx1MDAzZWJhY2tsb2dfdW5hY2NvdW50ZWQgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3NvY2tldCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7XFxuIFxcbi1cXHQvKiBEb24ndCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkgfHxcXG4tXFx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNlIHNrLVxcdTAwM2Vza19yY3ZidWYpXFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKHNrYnMpO1xcbkBAIC0yMjUyLDIwICsyMzAzLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtb3ZlZCxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxcbi17XFxuLVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuLVxcbi1cXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XFxuLVxcdGxpc3Rfc3BsaWNlKHNrYnMsIFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBza2JzO1xcbiBcXHRib29sIGVucXVldWVkID0gZmFsc2U7XFxuLVxcdHUzMiBtb3ZlZDtcXG4rXFx0dTMyIG1vdmVkID0gMDtcXG4gXFxuIFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuIFxcdHdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXFx1MDAyNnNrYnMpKSB7XFxuQEAgLTIyNzMsOCArMjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcXHUwMDI2c2ticywgXFx1MDAyNm1vdmVkKTtcXG4gXFxuIFxcdFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuLVxcdFxcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFxcdTAwMjZza2JzKTtcXG4gXFx0fVxcbitcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XFxuIFxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4gXFxuIFxcdGlmIChlbnF1ZXVlZCBcXHUwMDI2XFx1MDAyNiBtcHRjcF9lcG9sbGluX3JlYWR5KHNrKSlcXG5AQCAtMjc4NSw0NCArMjgyOCwyMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4gXFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4rLypcXG4rICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cyxcXG4rICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXFxuKyAqL1xcbitzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxuK1xcdFxcdFxcdFxcdHU2NCBzZW50X3NlcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07XFxuIFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuIFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XFxuLVxcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc3NrO1xcbi1cXHRpbnQgcmV0LCBlcnI7XFxuLVxcdHUxNiBsZW4gPSAwO1xcbi1cXG4tXFx0bXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuLVxcbi1cXHQvKiBmaXJzdCBjaGVjayBzc2s6IG5lZWQgdG8ga2ljayBcXFwic3RhbGVcXFwiIGxvZ2ljICovXFxuLVxcdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XFxuLVxcdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xcbi1cXHRpZiAoIWRmcmFnKSB7XFxuLVxcdFxcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcXG4tXFx0XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbi1cXG4tXFx0XFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxcbi1cXHRcXHRcXHRcXHQgICBpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XFxuLVxcdFxcdFxcdG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spO1xcbi1cXHRcXHRcXHRtcHRjcF9zZW5kX2Fjayhtc2spO1xcbi1cXG4tXFx0XFx0XFx0Z290byByZXNldF90aW1lcjtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxcbi1cXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4tXFxuLVxcdFxcdGdvdG8gcmVzZXRfdGltZXI7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gcmVzZXRfdGltZXI7XFxuK1xcdGludCByZXQsIGxlbiA9IDA7XFxuIFxcbiBcXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xcbiBcXHRcXHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZXNjaGVkdWxlZCkpIHtcXG4rXFx0XFx0XFx0dTE2IG9mZnNldCA9IHNlbnRfc2VxIC0gZGZyYWctXFx1MDAzZWRhdGFfc2VxO1xcbiBcXHRcXHRcXHR1MTYgY29waWVkID0gMDtcXG4gXFxuIFxcdFxcdFxcdG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7XFxuQEAgLTI4MzIsNyArMjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdGxvY2tfc29jayhzc2spO1xcbiBcXG4gXFx0XFx0XFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXFxuLVxcdFxcdFxcdGluZm8uc2VudCA9IDA7XFxuK1xcdFxcdFxcdGluZm8uc2VudCA9IG9mZnNldDtcXG4gXFx0XFx0XFx0aW5mby5saW1pdCA9IFJFQURfT05DRShtc2stXFx1MDAzZWNzdW1fZW5hYmxlZCkgPyBkZnJhZy1cXHUwMDNlZGF0YV9sZW4gOlxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudDtcXG4gXFxuQEAgLTI4NDcsNyArMjg2OCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdCAgICAhbXNrLVxcdTAwM2VhbGxvd19zdWJmbG93cykge1xcbiBcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VmYWxsYmFja19sb2NrKTtcXG4gXFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNzayk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdHdoaWxlIChpbmZvLnNlbnQgXFx1MDAzYyBpbmZvLmxpbWl0KSB7XFxuQEAgLTI4NzAsMTMgKzI4OTEsMTA5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzc2spO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbitcXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcXG4rXFx0Ym9vbCBuZWVkX3JldHJhbnM7XFxuK1xcdHU2NCByZXRyYW5zX3NlcTtcXG4rXFx0aW50IGVyciwgbGVuO1xcbiBcXG4tXFx0bXNrLVxcdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcXG4tXFx0ZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCA9IG1heChkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50LCBsZW4pO1xcbitcXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbitcXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbitcXHRyZXRyYW5zX3NlcSA9IG1zay1cXHUwMDNlc25kX3VuYTtcXG4rXFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XFxuK1xcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XFxuK1xcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4rXFx0aWYgKCFkZnJhZylcXG4rXFx0XFx0Z290byBjaGVja19kYXRhX2ZpbjtcXG4gXFxuLVxcdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xcbi1cXHRpZiAoYWZ0ZXI2NChkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXFx1MDAzZWRhdGFfc2VxLCBtc2stXFx1MDAzZXNuZF9ueHQpKVxcbi1cXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlc25kX254dCwgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSk7XFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0Ym9vbCBhbHJlYWR5X3JldHJhbnM7XFxuK1xcdFxcdHU2NCBzZW50X3NlcTtcXG4rXFxuK1xcdFxcdC8qIFRoZSBkZWZhdWx0IHNjaGVkdWxlciB3aWxsIGtpY2sgXFxcInN0YWxlXFxcIiBsb2dpYywgdGhhdCBpblxcbitcXHRcXHQgKiB0dXJuIGNhbiBwcm9jZXNzIGluY29taW5nIGFja3MgYW5kIGNsZWFuIHRoZSBSVFggcXVldWU7XFxuK1xcdFxcdCAqIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRmcmFnIHdpbGwgc3RpbGwgYmUgYXJvdW5kXFxuK1xcdFxcdCAqIGFmdGVyd2FyZHMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRnZXRfcGFnZShkZnJhZy1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0cHV0X3BhZ2UoZGZyYWctXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogSW5jb21pbmcgYWNrcyBjYW4gaGF2ZSBtb3ZlZCByZXRyYW5zIHNlcXVlbmNlIGFmdGVyXFxuK1xcdFxcdCAqIHRoZSBjdXJyZW50IGRmcmFnLCBpZiBzbyB0cnkgdG8gc3RhcnQgYWdhaW4gZnJvbSBSVFggaGVhZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuK1xcdFxcdGFscmVhZHlfcmV0cmFucyA9ICFiZWZvcmU2NChtc2stXFx1MDAzZXNuZF91bmEsIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSArXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50KTtcXG4rXFx0XFx0cHV0X3BhZ2UoZGZyYWctXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRpZiAoYWxyZWFkeV9yZXRyYW5zKSB7XFxuK1xcdFxcdFxcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuK1xcdFxcdFxcdHJldHJhbnNfc2VxID0gbXNrLVxcdTAwM2VzbmRfdW5hO1xcbitcXHRcXHRcXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcXG4rXFx0XFx0XFx0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcXG4rXFx0XFx0fSBlbHNlIGlmIChhZnRlcjY0KG1zay1cXHUwMDNlc25kX3VuYSwgcmV0cmFuc19zZXEpKSB7XFxuK1xcdFxcdFxcdHJldHJhbnNfc2VxID0gbXNrLVxcdTAwM2VzbmRfdW5hO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4rXFxuK1xcdFxcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXFxuK1xcdFxcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXFxuK1xcdFxcdGxlbiA9IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHNrLCBkZnJhZywgcmV0cmFuc19zZXEpO1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XFxuK1xcbitcXHRcXHRyZXRyYW5zX3NlcSArPSBsZW47XFxuK1xcdFxcdG1zay1cXHUwMDNlYnl0ZXNfcmV0cmFucyArPSBsZW47XFxuK1xcdFxcdGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICByZXRyYW5zX3NlcSAtIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSk7XFxuK1xcbitcXHRcXHQvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi9cXG4rXFx0XFx0c2VudF9zZXEgPSBkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXFx1MDAzZWRhdGFfc2VxO1xcbitcXHRcXHRpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLVxcdTAwM2VzbmRfbnh0KSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcXG4rXFxuK1xcdFxcdC8qIEF0dGVtcHQgdGhlIG5leHQgZnJhZ21lbnQgb25seSBpZiB0aGUgY3VycmVudCBvbmUgaXNcXG4rXFx0XFx0ICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGJlZm9yZTY0KHJldHJhbnNfc2VxLCBkZnJhZy1cXHUwMDNlZGF0YV9zZXEgKyBkZnJhZy1cXHUwMDNlZGF0YV9sZW4pKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGRmcmFnID0gbGlzdF9pc19sYXN0KFxcdTAwMjZkZnJhZy1cXHUwMDNlbGlzdCwgXFx1MDAyNm1zay1cXHUwMDNlcnR4X3F1ZXVlKSA/XFxuK1xcdFxcdFxcdFxcdE5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpO1xcbitcXHRcXHRpZiAoIWRmcmFnKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0LyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi9cXG4rXFx0aWYgKCFuZWVkX3JldHJhbnMpIHtcXG4rY2hlY2tfZGF0YV9maW46XFxuK1xcdFxcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbitcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxcbitcXHRcXHRcXHRcXHQgICBpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XFxuK1xcdFxcdFxcdG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spO1xcbitcXHRcXHRcXHRtcHRjcF9zZW5kX2Fjayhtc2spO1xcbitcXHRcXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpXFxuK1xcdFxcdFxcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xcbitcXHR9XFxuIFxcbiByZXNldF90aW1lcjpcXG4gXFx0bXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHNrKTtcXG5AQCAtMzY3MCwxMiArMzc4NywxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0X19tdXN0X2hvbGQoXFx1MDAyNnNrLVxcdTAwM2Vza19sb2NrLnNsb2NrKVxcbiB7XFxuIFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuK1xcdHUzMiBtb3ZlZCA9IDA7XFxuIFxcbiBcXHRmb3IgKDs7KSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLVxcdTAwM2VjYl9mbGFncyBcXHUwMDI2IE1QVENQX0ZMQUdTX1BST0NFU1NfQ1RYX05FRUQpO1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGpvaW5fbGlzdCwgc2ticztcXG4gXFx0XFx0Ym9vbCBzcG9vbF9ibDtcXG4tXFx0XFx0dTMyIG1vdmVkO1xcbiBcXG4gXFx0XFx0c3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXFx1MDAyNnNrYnMpO1xcbiBcXHRcXHRpZiAoIWZsYWdzIFxcdTAwMjZcXHUwMDI2ICFzcG9vbF9ibClcXG5AQCAtMzcwOCw5ICszODI1LDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuIFxcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jayk7XFxuLVxcdFxcdGlmIChzcG9vbF9ibClcXG4tXFx0XFx0XFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXFx1MDAyNnNrYnMpO1xcbiBcXHR9XFxuK1xcdGlmIChtb3ZlZClcXG4rXFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXFx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xcbiBcXG4gXFx0aWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgXFx1MDAyNm1zay1cXHUwMDNlY2JfZmxhZ3MpKVxcbiBcXHRcXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDoxOS42NDI5OTc3OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjYwMzM5ODI4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTVBUQ1AgcHJvdG9jb2wgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBjb25zdHJhaW50cyBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHRoYXQgZHJvcCBwYWNrZXRzIG9yIHBydW5lIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBoYW5kbGUgbXVsdGlwbGUgZnJhZ21lbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTg3YTMxNGNjYzM3YzJlMzRjZWRhMWQyYWFhNDY3MDE1YTQ3YmY4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE5OjQ0OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCBmMjNmZGEwYzU1YTcyMC4uZDliZDRmNGFmY2MwZTcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmNcbisrKyBiL25ldC9tcHRjcC9taWIuY1xuQEAgLTg1LDYgKzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiRmFsbGJhY2tGYWlsZWRcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJXaW5Qcm9iZVwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuK1x0U05NUF9NSUJfSVRFTShcIkJhY2tsb2dEcm9wXCIsIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXG4rXHRTTk1QX01JQl9JVEVNKFwiUmN2UHJ1bmVkXCIsIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxuK1x0U05NUF9NSUJfSVRFTShcIk9mb1BydW5lZFwiLCBNUFRDUF9NSUJfT0ZPX1BSVU5FRCksXG4gfTtcbiBcbiAvKiBtcHRjcF9taWJfYWxsb2MgLSBhbGxvY2F0ZSBwZXJjcHUgbWliIGNvdW50ZXJzXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXG5pbmRleCA4MTIyMThiNWVkMmJmYy4uMThmMzVmN2UwYTJkNGUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcbisrKyBiL25ldC9tcHRjcC9taWIuaFxuQEAgLTg4LDYgKzg4LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQge1xuIFx0TVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyxcdC8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovXG4gXHRNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsXHQvKiBDYW4ndCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqL1xuIFx0TVBUQ1BfTUlCX1dJTlBST0JFLFx0XHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xuK1x0TVBUQ1BfTUlCX0JBQ0tMT0dEUk9QLFx0XHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXG4rXHRNUFRDUF9NSUJfUkNWUFJVTkVELFx0XHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWlucyAqL1xuK1x0TVBUQ1BfTUlCX09GT19QUlVORUQsXHRcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cbiBcdF9fTVBUQ1BfTUlCX01BWFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbmluZGV4IGM2NjQwMjNkMzdiYThlLi43Yjk1NGVmNzg2NzIzMCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTI3LDggKzExMjcsMzAgQEAgc3RhdGljIGJvb2wgYWRkX2FkZHJfaG1hY192YWxpZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0cmV0dXJuIGhtYWMgPT0gbXBfb3B0LVx1MDAzZWFobWFjO1xuIH1cbiBcbi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksXG4tICogZWxzZSByZXR1cm4gdHJ1ZS5cbitzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbitcdHU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7XG4rXG4rXHRtZW0gKz0gUkVBRF9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbik7XG4rXHRpZiAobGlrZWx5KG1lbSBcdTAwM2M9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4gb3IgemVybyB3aW4gcHJvYmVzLiAqL1xuK1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbitcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfRklOIHx8XG4rXHQgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxLCB0Y3Bfc2soc3NrKS1cdTAwM2VyY3Zfbnh0KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXG4rXHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4rXHRpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgZHJvcCB0aGUgcGFja2V0LCBpLmUuIGluIGNhc2Ugb2YgZXJyb3IsXG4rICogc3ViZmxvdyBoYXMgYmVlbiByZXNldCwgb3Igb3ZlciBtZW1vcnkgbGltaXRzLlxuICAqL1xuIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuQEAgLTExNTQsNyArMTE3Niw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXHUwMDNlY29ubiwgc2ssIHNrYik7XG4gXHR9XG4gXG4gXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFx1MDAyNm1wX29wdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggY2E2NDRlYzUzZWVkYjEuLjVjZjQ0ZWFiNzZmMWM0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMzczLDYgKzM3Myw0OSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9pbml0X3NrYihzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxuIFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gfVxuIFxuKy8qIFwiSW5zcGlyZWRcIiBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXG4rICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cbisgKi9cbitzdGF0aWMgYm9vbCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7XG4rXHRib29sIHBydW5lZCA9IGZhbHNlO1xuK1x0dTY0IG1lbTtcbitcbitcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5vZGUgPSBcdTAwMjZtc2stXHUwMDNlb29vX2xhc3Rfc2tiLVx1MDAzZXJibm9kZTtcbitcbitcdGRvIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJiX3RvX3NrYihub2RlKTtcbitcbitcdFx0LyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi9cbitcdFx0aWYgKGFmdGVyNjQoc2VxLCBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxKSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0cHJ1bmVkID0gdHJ1ZTtcbitcdFx0cHJldiA9IHJiX3ByZXYobm9kZSk7XG4rXHRcdHJiX2VyYXNlKG5vZGUsIFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xuK1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuK1x0XHRtc2stXHUwMDNlb29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpO1xuK1xuK1x0XHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbitcdFx0aWYgKG1lbSBcdTAwM2M9IHNrLVx1MDAzZXNrX3JjdmJ1ZilcbitcdFx0XHRicmVhaztcbitcbitcdFx0bm9kZSA9IHByZXY7XG4rXHR9IHdoaWxlIChub2RlKTtcbitcbitcdGlmIChwcnVuZWQpXG4rXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9fUFJVTkVEKTtcbitcbitvdXQ6XG4rXHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbitcdHJldHVybiBtZW0gXHUwMDNjPSBzay1cdTAwM2Vza19yY3ZidWY7XG4rfVxuK1xuIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHU2NCBjb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgLSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuQEAgLTM4MSw2ICs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRtcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpO1xuIFxuK1x0LyogQ2FuJ3QgZHJvcCBwYWNrZXRzIGZvciBmYWxsYmFjayBzb2NrZXQgdGhpcyBsYXRlLCBvciB0aGUgc3RyZWFtXG4rXHQgKiB3aWxsIGJyZWFrLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHNrLCBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxKSkge1xuK1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcbitcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuIFx0aWYgKE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEgPT0gbXNrLVx1MDAzZWFja19zZXEpIHtcbiBcdFx0LyogaW4gc2VxdWVuY2UgKi9cbiBcdFx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xuQEAgLTY3NSw2ICs3MjksNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbiBcdHN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDtcbiBcdHN0cnVjdCBzb2NrICpzc2sgPSBza2ItXHUwMDNlc2s7XG4gXHRib29sIGZyYWdzdG9sZW47XG4rXHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4Miw2ICs3MzcsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdC8qIFNpbWlsYXIgYWRkaXRpb25hbCBhbGxvd2FuY2UgYXMgcGxhaW4gVENQLiAqL1xuK1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbitcdGxpbWl0ICs9IChsaW1pdCBcdTAwM2VcdTAwM2UgMSkgKyA2NCAqIDEwMjQ7XG4rXHRsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTtcbitcdGlmIChtc2stXHUwMDNlYmFja2xvZ19sZW4gXHUwMDNlIGxpbWl0IFx1MDAyNlx1MDAyNiAhX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7XG4rXHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbitcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfQkFDS0xPRyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdC8qIFRyeSB0byBjb2FsZXNjZSB3aXRoIHRoZSBsYXN0IHNrYiBpbiBvdXIgYmFja2xvZyAqL1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHR0YWlsID0gbGlzdF9sYXN0X2VudHJ5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTtcbkBAIC03NTMsNyArODE4LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXG4gXHRcdFx0bXB0Y3BfaW5pdF9za2Ioc3NrLCBza2IsIG9mZnNldCwgbGVuKTtcbiBcbi1cdFx0XHRpZiAob3duX21zayBcdTAwMjZcdTAwMjYgc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYyBzay1cdTAwM2Vza19yY3ZidWYpIHtcbitcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTM2LDEzICsxMjAxLDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcbiBcdG1wdGNwX3dyaXRlX3NwYWNlKHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4te1xuLVx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbi1cdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4tXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbkBAIC0yMjA5LDEyICsyMjY3LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRib29sIG1vdmVkID0gZmFsc2U7XG4gXG4tXHQqZGVsdGEgPSAwO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJ3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgKz0gc2tiLVx1MDAzZXRydWVzaXplO1xuQEAgLTIyNDIsOSArMjI5NSw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfdW5hY2NvdW50ZWQgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3NvY2tldCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7XG4gXG4tXHQvKiBEb24ndCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdElOSVRfTElTVF9IRUFEKHNrYnMpO1xuQEAgLTIyNTIsMjAgKzIzMDMsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtb3ZlZCxcbi1cdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbi17XG4tXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuLVxuLVx0V1JJVEVfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcbi1cdGxpc3Rfc3BsaWNlKHNrYnMsIFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpO1xuLX1cbi1cbiBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxuIHtcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4rXHR1MzIgbW92ZWQgPSAwO1xuIFxuIFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbiBcdHdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticykpIHtcbkBAIC0yMjczLDggKzIzMTYsOCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRlbnF1ZXVlZCB8PSBfX21wdGNwX21vdmVfc2ticyhzaywgXHUwMDI2c2ticywgXHUwMDI2bW92ZWQpO1xuIFxuIFx0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuLVx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbitcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI3ODUsNDQgKzI4MjgsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4gXHRza19lcnJvcl9yZXBvcnQoc2spO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuKy8qXG4rICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cyxcbisgKiBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2VcbisgKi9cbitzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXG4rXHRcdFx0XHR1NjQgc2VudF9zZXEpXG4ge1xuIFx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9O1xuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4tXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcbiBcdHN0cnVjdCBzb2NrICpzc2s7XG4tXHRpbnQgcmV0LCBlcnI7XG4tXHR1MTYgbGVuID0gMDtcbi1cbi1cdG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVxuLVx0LyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgXCJzdGFsZVwiIGxvZ2ljICovXG4tXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuLVx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4tXHRpZiAoIWRmcmFnKSB7XG4tXHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbi1cdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4tXG4tXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgKyAxKTtcbi1cdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbi1cdFx0XHRtcHRjcF9zZW5kX2Fjayhtc2spO1xuLVxuLVx0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuLVx0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuLVxuLVx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0fVxuLVxuLVx0aWYgKGVycilcbi1cdFx0Z290byByZXNldF90aW1lcjtcbitcdGludCByZXQsIGxlbiA9IDA7XG4gXG4gXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xuIFx0XHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXHUwMDNlc2NoZWR1bGVkKSkge1xuK1x0XHRcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRcdHUxNiBjb3BpZWQgPSAwO1xuIFxuIFx0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7XG5AQCAtMjgzMiw3ICsyODUzLDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRsb2NrX3NvY2soc3NrKTtcbiBcbiBcdFx0XHQvKiBsaW1pdCByZXRyYW5zbWlzc2lvbiB0byB0aGUgYnl0ZXMgYWxyZWFkeSBzZW50IG9uIHNvbWUgc3ViZmxvd3MgKi9cbi1cdFx0XHRpbmZvLnNlbnQgPSAwO1xuK1x0XHRcdGluZm8uc2VudCA9IG9mZnNldDtcbiBcdFx0XHRpbmZvLmxpbWl0ID0gUkVBRF9PTkNFKG1zay1cdTAwM2Vjc3VtX2VuYWJsZWQpID8gZGZyYWctXHUwMDNlZGF0YV9sZW4gOlxuIFx0XHRcdFx0XHRcdFx0XHQgICAgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50O1xuIFxuQEAgLTI4NDcsNyArMjg2OCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICAgICFtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcbiBcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VmYWxsYmFja19sb2NrKTtcbiBcdFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuLVx0XHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdHdoaWxlIChpbmZvLnNlbnQgXHUwMDNjIGluZm8ubGltaXQpIHtcbkBAIC0yODcwLDEzICsyODkxLDEwOSBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuIFx0XHR9XG4gXHR9XG4rXHRyZXR1cm4gbGVuO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuK1x0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4rXHRib29sIG5lZWRfcmV0cmFucztcbitcdHU2NCByZXRyYW5zX3NlcTtcbitcdGludCBlcnIsIGxlbjtcbiBcbi1cdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcbi1cdGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCA9IG1heChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsIGxlbik7XG4rXHRtcHRjcF9kYXRhX2xvY2soc2spO1xuK1x0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbitcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbitcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4rXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4rXHRpZiAoIWRmcmFnKVxuK1x0XHRnb3RvIGNoZWNrX2RhdGFfZmluO1xuIFxuLVx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4tXHRpZiAoYWZ0ZXI2NChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcSwgbXNrLVx1MDAzZXNuZF9ueHQpKVxuLVx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VzbmRfbnh0LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4rXHRmb3IgKDs7KSB7XG4rXHRcdGJvb2wgYWxyZWFkeV9yZXRyYW5zO1xuK1x0XHR1NjQgc2VudF9zZXE7XG4rXG4rXHRcdC8qIFRoZSBkZWZhdWx0IHNjaGVkdWxlciB3aWxsIGtpY2sgXCJzdGFsZVwiIGxvZ2ljLCB0aGF0IGluXG4rXHRcdCAqIHR1cm4gY2FuIHByb2Nlc3MgaW5jb21pbmcgYWNrcyBhbmQgY2xlYW4gdGhlIFJUWCBxdWV1ZTtcbitcdFx0ICogZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGZyYWcgd2lsbCBzdGlsbCBiZSBhcm91bmRcbitcdFx0ICogYWZ0ZXJ3YXJkcy5cbitcdFx0ICovXG4rXHRcdGdldF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuK1x0XHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0cHV0X3BhZ2UoZGZyYWctXHUwMDNlcGFnZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0LyogSW5jb21pbmcgYWNrcyBjYW4gaGF2ZSBtb3ZlZCByZXRyYW5zIHNlcXVlbmNlIGFmdGVyXG4rXHRcdCAqIHRoZSBjdXJyZW50IGRmcmFnLCBpZiBzbyB0cnkgdG8gc3RhcnQgYWdhaW4gZnJvbSBSVFggaGVhZC5cbitcdFx0ICovXG4rXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4rXHRcdGFscmVhZHlfcmV0cmFucyA9ICFiZWZvcmU2NChtc2stXHUwMDNlc25kX3VuYSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgK1xuK1x0XHRcdFx0XHQgICAgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KTtcbitcdFx0cHV0X3BhZ2UoZGZyYWctXHUwMDNlcGFnZSk7XG4rXHRcdGlmIChhbHJlYWR5X3JldHJhbnMpIHtcbitcdFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuK1x0XHRcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4rXHRcdFx0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcbitcdFx0fSBlbHNlIGlmIChhZnRlcjY0KG1zay1cdTAwM2VzbmRfdW5hLCByZXRyYW5zX3NlcSkpIHtcbitcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0XHR9XG4rXHRcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbitcbitcdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbitcdFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWRmcmFnIHx8ICFkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIENhbiBmYWlsIG9ubHkgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbitcdFx0bGVuID0gX19tcHRjcF9wdXNoX3JldHJhbnMoc2ssIGRmcmFnLCByZXRyYW5zX3NlcSk7XG4rXHRcdGlmIChsZW4gXHUwMDNjIDApXG4rXHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4rXG4rXHRcdHJldHJhbnNfc2VxICs9IGxlbjtcbitcdFx0bXNrLVx1MDAzZWJ5dGVzX3JldHJhbnMgKz0gbGVuO1xuK1x0XHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCxcbitcdFx0XHRcdFx0ICAgIHJldHJhbnNfc2VxIC0gZGZyYWctXHUwMDNlZGF0YV9zZXEpO1xuK1xuK1x0XHQvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi9cbitcdFx0c2VudF9zZXEgPSBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbitcdFx0aWYgKGFmdGVyNjQoc2VudF9zZXEsIG1zay1cdTAwM2VzbmRfbnh0KSlcbitcdFx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VzbmRfbnh0LCBzZW50X3NlcSk7XG4rXG4rXHRcdC8qIEF0dGVtcHQgdGhlIG5leHQgZnJhZ21lbnQgb25seSBpZiB0aGUgY3VycmVudCBvbmUgaXNcbitcdFx0ICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKGJlZm9yZTY0KHJldHJhbnNfc2VxLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSArIGRmcmFnLVx1MDAzZWRhdGFfbGVuKSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0ZGZyYWcgPSBsaXN0X2lzX2xhc3QoXHUwMDI2ZGZyYWctXHUwMDNlbGlzdCwgXHUwMDI2bXNrLVx1MDAzZXJ0eF9xdWV1ZSkgP1xuK1x0XHRcdFx0TlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7XG4rXHRcdGlmICghZGZyYWcpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHQvKiBBdHRlbXB0IGRhdGEtZmluIHJldHJhbnNtaXNzaW9uIG9ubHkgd2hlbiB0aGUgUlRYIHF1ZXVlIGlzIGVtcHR5LiAqL1xuK1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbitjaGVja19kYXRhX2ZpbjpcbitcdFx0aWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkge1xuK1x0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbitcbitcdFx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcbitcdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xuK1x0XHRcdG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spO1xuK1x0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4rXHRcdFx0Z290byByZXNldF90aW1lcjtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpXG4rXHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4rXHR9XG4gXG4gcmVzZXRfdGltZXI6XG4gXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xuQEAgLTM2NzAsMTIgKzM3ODcsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXHRfX211c3RfaG9sZChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHR1MzIgbW92ZWQgPSAwO1xuIFxuIFx0Zm9yICg7Oykge1xuIFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay1cdTAwM2VjYl9mbGFncyBcdTAwMjYgTVBUQ1BfRkxBR1NfUFJPQ0VTU19DVFhfTkVFRCk7XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgam9pbl9saXN0LCBza2JzO1xuIFx0XHRib29sIHNwb29sX2JsO1xuLVx0XHR1MzIgbW92ZWQ7XG4gXG4gXHRcdHNwb29sX2JsID0gbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpO1xuIFx0XHRpZiAoIWZsYWdzIFx1MDAyNlx1MDAyNiAhc3Bvb2xfYmwpXG5AQCAtMzcwOCw5ICszODI1LDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jayk7XG4tXHRcdGlmIChzcG9vbF9ibClcbi1cdFx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbitcdGlmIChtb3ZlZClcbitcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcbiBcbiBcdGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChNUFRDUF9DTEVBTl9VTkEsIFx1MDAyNm1zay1cdTAwM2VjYl9mbGFncykpXG4gXHRcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDoxOS42NDMwMDA0ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTg5MjYzMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBSZXRyYW5zbWlzc2lvbiBFbmhhbmNlbWVudHMgLSBUaW1lIHRvIEZ1enohKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgTVBUQ1AgY29yZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZGluZyBuZXcgU05NUCBNSUIgaXRlbXMg4oCTIGBCYWNrbG9nRHJvcGAsIGBSY3ZQcnVuZWRgLCBgT2ZvUHJ1bmVkYCDigJMgdG8gZ2l2ZSB1cyBiZXR0ZXIgdmlzaWJpbGl0eSBpbnRvIGhvdyBNUFRDUCBpcyBoYW5kbGluZyBtZW1vcnkgcHJlc3N1cmUuIE1vcmUgaW1wb3J0YW50bHksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhY3R1YWwgbWVtb3J5IGxpbWl0IGNoZWNrcyBhdCBzZXZlcmFsIHBvaW50cy4gSSdtIHNlZWluZyBgbXB0Y3Bfb3Zlcl9saW1pdGAgdGhhdCBkcm9wcyBwYWNrZXRzIHdoZW4gd2UgZXhjZWVkIHRoZSBsaW1pdCwgYW5kIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgLCB3aGljaCBnZXRzIHJpZCBvZiB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIGlmIHdlIGV4Y2VlZCB0aGUgbGltaXQgdG9vLiBJdCdzIGFsc28gbWFraW5nIGFkanVzdG1lbnRzIGluIHRoZSBgX19tcHRjcF9hZGRfYmFja2xvZ2AgYW5kIGBfX21wdGNwX3JldHJhbnNgIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlc2UgbmV3IGNvbnN0cmFpbnRzLlxuXG5UaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgcHJvdG9jb2wgZnVuY3Rpb25zLCBhbmQgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgbG9naWMgd2l0aCBtZW1vcnkgaGFuZGxpbmcsIEknbSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuIFxuXG5Ob3csIGxldCdzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSB3aG9sZSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgbW9zdCBvZiB0aGVtIHN0YXRpYy4gTGV0J3Mgc2VlLi4uXG5cbk1vZGlmaWVkIGZ1bmN0aW9uczpcbiogICBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2BcbiogICBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCAoc3RhdGljKVxuKiAgIGBfX21wdGNwX21vdmVfc2tiYCAoc3RhdGljKVxuKiAgIGBfX21wdGNwX2FkZF9iYWNrbG9nYCAoc3RhdGljKVxuKiAgIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIChzdGF0aWMpXG4qICAgYG1wdGNwX21vdmVfc2tic2AgKHN0YXRpYylcbiogICBgX19tcHRjcF9wdXNoX3JldHJhbnNgIChzdGF0aWMpXG4qICAgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYylcbiogICBgbXB0Y3BfcmVsZWFzZV9jYmAgKHN0YXRpYylcblxuSGFuZyBvbiwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzICpub24tc3RhdGljKiwgdGhhdCdzIGdvb2QgbmV3cy4gVGhhdCdzIGEgZ3JlYXQgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGVzZSwgYnV0IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhIGtleSBjYW5kaWRhdGUuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIHN0YXRpYyBuYXR1cmUgb2Ygc29tZXRoaW5nIGxpa2UgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGEgYmFycmllcjsgbm90IHRoYXQgSSBleHBlY3QgaXQgdG8gYmUsIGJ1dCBpdCdzIHdvcnRoIGNoZWNraW5nLlxuXG5Pa2F5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBsb29rIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYW55IG9mIHRoZXNlIG1vZGlmaWVkIHN0YXRpYyBvbmVzLiBUaGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGZ1enppbmcgZW50cnkgcG9pbnRzIGxpa2VseSBsaWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDoyNy4yMzIyNjY5MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MTIxNTAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L21wdGNwLmg9MTU2PWludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTU4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNTk6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNjAtXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI2Nj1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzItXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNzM6c3RhdGljIGlubGluZSBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjc0LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQ4ODQ9dm9pZCB0Y3BfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5MC1cXHQvKiBtcHRjcCBjYW4ndCB0ZWxsIHVzIHRvIGlnbm9yZSByZXNldCBwa3RzLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ4OTE6XFx0ICogc28ganVzdCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkuXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5Mi1cXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkzLVxcdGlmIChza19pc19tcHRjcChzaykpXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg5NDpcXHRcXHRtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTUtXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01NjA3PXN0YXRpYyB2b2lkIHRjcF9kYXRhX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2MTYtXFx0ICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTYxNzpcXHRpZiAoc2tfaXNfbXB0Y3Aoc2spIFxcdTAwMjZcXHUwMDI2ICFtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpKSB7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTYxOC1cXHRcXHRfX2tmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzM3OS1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MzgwOlxcdFxcdFxcdGlmIChza19pc19tcHRjcChzaykgXFx1MDAyNlxcdTAwMjYgIW1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYikpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzM4MS1cXHRcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEwNTM9c3RhdGljIHZvaWQgYWNrX3VwZGF0ZV9tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTA3OC1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEwNzk6XFx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTA4MC1cXHRpZiAoYWZ0ZXI2NChtc2stXFx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xMTMwPXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTU0LSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE1NTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE1Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ0OjM0Ljk4MzQ4OTUxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTA2MDI5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0cGF0aCBUQ1AgSW5jb21pbmcgT3B0aW9ucyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgTVBUQ1AgaW5jb21pbmcgb3B0aW9ucyBhcmUgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlLCBhbmQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB0d28ga2V5IHBsYWNlcyB3aXRoaW4gdGhlIFRDUCBzdGFjazogYHRjcF9kYXRhX3F1ZXVlYCBhbmQgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdG8gbWFrZSBzdXJlIGl0IGlzIHdvcmtpbmcgdGhlIHdheSBJIGludGVuZC5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24sIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBhIGNvdXBsZSBvZiBjb3JlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ2xsIHJldmlldyBgX19tcHRjcF9yZXRyYW5zYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBUaGV5J3JlIHByb2JhYmx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJldHJhbnNtaXNzaW9uIGFuZCBjb25uZWN0aW9uIHJlbGVhc2UgcGxheSBpbnRvIHRoaXMgb3B0aW9uIHByb2Nlc3NpbmcsIGdpdmVuIHdoZXJlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBzaXR0aW5nIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhvc2UgaXMga2V5IHRvIGRlYnVnZ2luZyBhbmQgaW1wbGVtZW50aW5nIGFueSBuZXcgZmVhdHVyZSBpbiB0aGlzIGFyZWEuIFRpbWUgdG8gZGlnIGluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDQ6MzguMjc0MDk1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI2MTcyNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbXB0Y3BfcmV0cmFuc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDYzPXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTA4NC1cXHRcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZSA9IDE7XFxubmV0L21wdGNwL3BtLmM6MTA4NTpcXHRcXHRcXHRcXHRfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcG0uYy0xMDg2LVxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5NT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTMxOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2NTpcXHRuZWVkX3B1c2ggPSAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DRl9QVVNIKSBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY2LVxcdGlmICghZGlzcG9zZV9pdCkge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjgzNT1zdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4OTc6c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NDgtXFx0XFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTQ5OlxcdFxcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NTAtXFx0XFx0ICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTA2PXN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTQzLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfV09SS19SVFgsIFxcdTAwMjZtc2stXFx1MDAzZWZsYWdzKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTQ0OlxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE0NS1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3ODY9c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODE4LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODE5OlxcdFxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgyMC1cXHRcXHRpZiAoc3Bvb2xfYmwgXFx1MDAyNlxcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MDg9dm9pZCBfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMC1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6ODExOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMi12b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDo0NC4yMDAyNzkzNjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgzNDYzMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTXVsdGlwYXRoIFRDUCBSZXRyYW5zbWlzc2lvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgTVBUQ1AgaGFuZGxlcyByZXRyYW5zbWlzc2lvbnMsIGFuZCBpdCBsb29rcyBsaWtlIGBfX21wdGNwX3JldHJhbnNgIGlzIHRoZSBrZXkgZnVuY3Rpb24uIEl0J3MgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gTm93LCB0aGF0IGBtcHRjcF9yZWxlYXNlX2NiYCBpcyByaW5naW5nIGEgYmVsbC4gQWgsIHJpZ2h0LCB0aGF0J3MgdGhlIHJlbGVhc2UgY2FsbGJhY2sgZm9yIE1QVENQIHNvY2tldHMhXG5cbkludGVyZXN0aW5nLi4uIGl0J3MgcmVnaXN0ZXJlZCBhcyBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VyZWxlYXNlX2NiYC4gSSdsbCBoYXZlIHRvIGtlZXAgdGhhdCBhc3NvY2lhdGlvbiBpbiBtaW5kLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHJlbGVhc2luZyB0aGUgc29ja2V0IGFuZCByZXRyYW5zbWlzc2lvbnMuIExldCdzIGRlbHZlIGludG8gdGhlIGNvZGUgZm9yIGBtcHRjcF9yZWxlYXNlX2NiYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyB0aHJvdWdoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDo0Ny42ODM3NDQ5ODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NDI3MzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9yZWxlYXNlX2NiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3NzM9dm9pZCBfX21wdGNwX2NoZWNrX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc4NS0vKiBwcm9jZXNzZXMgZGVmZXJyZWQgZXZlbnRzIGFuZCBmbHVzaCB3bWVtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mzc4NjpzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzg3LVxcdF9fbXVzdF9ob2xkKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQxODk9c3RhdGljIHN0cnVjdCBwcm90byBtcHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIwMi1cXHQucmVjdm1zZ1xcdD0gbXB0Y3BfcmVjdm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjAzOlxcdC5yZWxlYXNlX2NiXFx0PSBtcHRjcF9yZWxlYXNlX2NiLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDQtXFx0Lmhhc2hcXHRcXHQ9IG1wdGNwX2hhc2gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ0OjUyLjU1ODAyOTA1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MDEyNjgyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgXHUwMDI2IEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoaXMgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHRoZSBjb3JlIGNhbGxiYWNrIGZvciByZWxlYXNpbmcgc29ja2V0cywgYW5kIHRoaXMgcGF0Y2ggaGFzIGNsZWFybHkgbWFkZSBzb21lIGtleSBjaGFuZ2VzLiBUaGV5J3JlIHRyYWNraW5nICdtb3ZlZCcgYW5kIGFkanVzdGluZyBgbXNrLVx1MDAzZWJhY2tsb2dfbGVuYCB3aXRoaW4gaXQuIEludGVyZXN0aW5nLiBPbiB0b3Agb2YgdGhhdCwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIG5vdyBjaGVja2luZyBmb3IgYG1wdGNwX292ZXJfbGltaXRgLCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JgIGlzIGNhbGxpbmcgYG1wdGNwX3BydW5lX29mb19xdWV1ZWAuIEZpbmFsbHksIHRoZSBtb2RpZmljYXRpb24gb2YgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGlzIGNoZWNraW5nIHRoZSBgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIFx1MDAzZSBsaW1pdGAsIHdoaWxlIHRoZSBgX19tcHRjcF9yZXRyYW5zYCBmdW5jdGlvbiBoYXMgYmVlbiBtb2RpZmllZCB0byByZXRyYW5zbWl0IG11bHRpcGxlIGZyYWdtZW50cy5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMuIEZyb20gYSBjdXJzb3J5IGdsYW5jZSwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3Bfd29ya2VyYCB3aGljaCB0aGVuIGNhbGxzIGBfX21wdGNwX3JldHJhbnNgIHNlZW0gbGlrZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLiBBbmQsIG9mIGNvdXJzZSwgdGhhdCBtb2RpZmllZCBgbXB0Y3BfcmVsZWFzZV9jYmAsIHRob3VnaCBpdCdzIG1hcmtlZCBhcyBzdGF0aWMuIEhtbS4uLiBpdCdzIGEgZnVuY3Rpb24gcG9pbnRlciB0YXJnZXQgZnJvbSBgcmVsZWFzZV9zb2NrYCwgc28gdGhhdCBjaGFuZ2VzIHRoaW5ncy4gSXMgdGhhdCBhIGdvb2QgZm9jdXMgc3ltYm9sPyBUaGUgZmFjdCB0aGF0IGl0J3Mgc3RhdGljIGdpdmVzIG1lIHBhdXNlLCBidXQgaXQncyAqZGVmaW5pdGVseSogYSBmdW5jdGlvbiBwb2ludGVyIHNvIGl0J3MgYSBzb2xpZCB0YXJnZXQuXG5cbkxldCdzIHNlZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgICppcyogbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIHRoZXJlICphbnkqIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXM/IGBtcHRjcF9yZWN2bXNnYCBpc24ndCBtb2RpZmllZCBzbyB0aGF0J3Mgb3V0LiBJcyBgbXB0Y3Bfd29ya2VyYCBzdGF0aWM/IFllcywgaXQgaXMuIEFscmlnaHQsIGJhY2sgdG8gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgYXMgdGhlIHByaW1hcnkgZm9jdXMsIHRoZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTE3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjAyLjA1OTMwMDgzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3OTAyMjY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF93b3JrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MTA3Mz1ib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDc4OlxcdC8qIEdldCBhIHJlZmVyZW5jZSBvbiB0aGlzIHNvY2tldCwgbXB0Y3Bfd29ya2VyKCkgd2lsbCByZWxlYXNlIGl0Llxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzk6XFx0ICogQXMgbXB0Y3Bfd29ya2VyKCkgbWlnaHQgY29tcGxldGUgYmVmb3JlIHVzLCB3ZSBjYW4gbm90IGF2b2lkXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4MC1cXHQgKiBhIHNvY2tfaG9sZCgpL3NvY2tfcHV0KCkgaWYgc2NoZWR1bGVfd29yaygpIHJldHVybnMgZmFsc2UuXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTAtXFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgc29ja19mbGFnKHNzaywgU09DS19ERUFEKSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjUxOlxcdFxcdC8qIGVuc3VyZSBsYXRlciBjaGVjayBpbiBtcHRjcF93b3JrZXIoKSB3aWxsIGRpc3Bvc2UgdGhlIG1zayAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTItXFx0XFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI3ODI9c3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODIyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4MjM6XFx0LyogdGhlIGNhbGxpbmcgbXB0Y3Bfd29ya2VyIHdpbGwgcHJvcGVybHkgZGVzdHJveSB0aGUgc29ja2V0ICovXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjgyNC1cXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzA3MD1zdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTA2OnN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNy17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTU1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjItXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTYzOlxcdElOSVRfV09SSyhcXHUwMDI2bXNrLVxcdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjQtXFx0bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NTowNy4wMzgzMzM2MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MTU5MDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBUQ1AgRGF0YSBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gYG1wdGNwX3dvcmtlcmAgaXMgZGVmaW5pdGVseSBzdGF0aWMsIHRoYXQncyBjbGVhci4gQnV0IEknbSBub3cgZGlnZ2luZyBkZWVwZXIsIGFuZCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgYG1wdGNwX2luY29taW5nX29wdGlvbnNgPyBBaCwgdGhhdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgbGlrZWx5IG1vcmUgd2lkZWx5IGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVkIGluIHZhcmlvdXMgY29udGV4dHMuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLiBMZXQncyBjaGVjayBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AsIGl0IGxvb2tzIGxpa2UgdGhpcyBvbmUgaXNuJ3QgbW9kaWZpZWQgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIGBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0YCBkb2Vzbid0IHNlZW0gdG8gYmUgbW9kaWZpZWQgZWl0aGVyLCBpbnRlcmVzdGluZy4gU2luY2UgSSBhbSBleGFtaW5pbmcgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLCBJIHRoaW5rIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYW55IGNhbGwgc2l0ZXMgdG8gYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM2NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjEwLjg3OTkyNzcyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMDc4MDI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX2FkZF9iYWNrbG9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTcxNj1zdGF0aWMgdm9pZCBtcHRjcF9kc3NfY29ycnVwdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzIzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcyNDpzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjUtXFx0XFx0XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTc3Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgyNC1cXHRcXHRcXHR9IGVsc2Uge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjgyNTpcXHRcXHRcXHRcXHRfX21wdGNwX2FkZF9iYWNrbG9nKHNrLCBzdWJmbG93LCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgyNi1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjE2Ljg4MDcxMzIzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM2NjA4NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBmbG93IHdpdGhpbiBNdWx0aXBhdGggVENQLCBhbmQgaG93IHdlIGhhbmRsZSBpbmNvbWluZyBkYXRhLiBgbXB0Y3BfZGF0YV9yZWFkeWAsIHRoYXQncyB0aGUgdHJpZ2dlciwgcmlnaHQ/IFNvbWV0aGluZyBhcnJpdmVzLCBzb21ldGhpbmcgc2lnbmFscyB0aGF0IGRhdGEgaXMgYXZhaWxhYmxlIG9uIGEgc3ViZmxvdy4gTm93LCB0aGF0J3Mgd2hlcmUgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgY29tZXMgaW4uIEl0J3MgbGlrZSB0aGUgd29ya2hvcnNlIG9mIHRoZSBvcGVyYXRpb24uXG5cbkVzc2VudGlhbGx5LCBJIHNlZSBgbXB0Y3BfZGF0YV9yZWFkeWAgYXMgdGhlIG5vdGlmaWNhdGlvbiwgdGhlIFwiSGV5LCB0aGVyZSdzIHdvcmsgdG8gYmUgZG9uZSFcIiBzaWduYWwuIFRoZW4sIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIHN0ZXBzIHVwIGFuZCBhY3R1YWxseSBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nOiB0YWtpbmcgdGhlIHBhY2tldHMgKHRoZSBgc2tic2ApIHRoYXQgYXJlIHJlYWR5IG9uIGEgc3BlY2lmaWMgc3ViZmxvdyBhbmQgZ2V0dGluZyB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnbyB3aXRoaW4gdGhlIE11bHRpcGF0aCBUQ1AgY29ubmVjdGlvbi4gSXQncyB0aGUgbWVjaGFuaXNtLCB0aGUgY29uY3JldGUgYWN0aW9uIHRha2VuIHRvIGludGVncmF0ZSB0aGUgaW5jb21pbmcgZGF0YSBmcm9tIGEgc3BlY2lmaWMgc3ViZmxvdyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgTVBUQ1AgY29ubmVjdGlvbi4gU28gaXQncyBub3QgYSBzdGFuZGFsb25lIGZ1bmN0aW9uLCBpdCdzIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGV2ZW50LCB0aGUgcmVhZGluZXNzIGZvciB0aGUgcGFja2V0cyBhbmQgdGhlIGFjdGlvbnMgdGhhdCBmb2xsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODgzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDU6MjAuNDE3MzI1MjgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODAyNzExMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MjQ9c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Nzc3OnN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc29jayAqc3NrLCBib29sIG93bl9tc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NDE9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NjpcXHRtb3ZlZCA9IF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgdHJ1ZSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVxcdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDUtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA2OlxcdFxcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDctXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NToyOC4yMjAwNDM2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM5NTU0NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBNUFRDUCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF9kYXRhX3JlYWR5YCBmdW5jdGlvbi4gVGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIHN0YXRpYyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLCB3aGljaCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gQm90aCBgbXB0Y3BfZGF0YV9yZWFkeWAgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBoYXZlIHBpcXVlZCBteSBpbnRlcmVzdC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1wdGNwX2RhdGFfcmVhZHlgIGlzLCBpbiBmYWN0LCBub24tc3RhdGljLiBJZiBpdCdzIG5vdCBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSwgSSB3YW50IHRvIHNlZSBob3cgaXQncyBiZWluZyB1c2VkIGFjcm9zcyB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBleHBvcnRlZCBhbmQgdXNlZCBlbHNld2hlcmUuIExldCdzIHNlZSBpZiBpdCdzIGJlaW5nIGFjY2Vzc2VkIGluIG90aGVyIGZpbGVzIHdpdGhpbiB0aGUgcHJvamVjdC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjMyLjU1OTYwMTQwOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczNDI5ODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9kYXRhX3JlYWR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTk2MT1zdGF0aWMgdm9pZCBtcHRjcF9yY3ZfcnR0X3VwZGF0ZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTg2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk4Nzp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk4OC17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD05NTY9c3RhdGljIGlubGluZSB1NjQgbXB0Y3Bfc3RhbXAodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2MC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5NjE6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtOTYyLWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTUwNj1zdGF0aWMgdm9pZCBzdWJmbG93X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTMwLVxcdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSkge1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTUzMTpcXHRcXHRtcHRjcF9kYXRhX3JlYWR5KHBhcmVudCwgc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUzMi1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTg3ND1zdGF0aWMgdm9pZCBzdWJmbG93X3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODUtXFx0aWYgKG1wdGNwX3N1YmZsb3dfZGF0YV9hdmFpbGFibGUoc2spKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg4NjpcXHRcXHRtcHRjcF9kYXRhX3JlYWR5KHBhcmVudCwgc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4Ny1cXHRlbHNlIGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfZXJyKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDU6MzkuMjkzOTEwNjc3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzU0NzQ3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERhdGEgUmVhZGluZXNzIGluIE11bHRpcGF0aCBUQ1AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBkYXRhIHJlYWRpbmVzcyBpcyBoYW5kbGVkIGluIE11bHRpcGF0aCBUQ1AuIFNwZWNpZmljYWxseSwgSSBzZWUgYG1wdGNwX2RhdGFfcmVhZHlgIGlzIGNhbGxlZCBmcm9tIHR3byBrZXkgZnVuY3Rpb25zOiBgc3ViZmxvd19kYXRhX3JlYWR5YCBhbmQgYHN1YmZsb3dfc3RhdGVfY2hhbmdlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHM/IEkgbmVlZCB0byBiZSBjb21wcmVoZW5zaXZlIGhlcmUuXG5cbkxldCBtZSB0aGlua+KApiB3aGF0IGFib3V0IGBtcHRjcF9yZWN2bXNnYD8gVGhhdCdzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIGRhdGEsIGFuZCBJIHJlY2FsbCBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zIHRvIGBtcHRjcF9tb3ZlX3NrYnNgLiBBaCwgcmlnaHQsIGBtcHRjcF9yZWN2bXNnYCAqZG9lcyogY2FsbCBgbXB0Y3BfbW92ZV9za2JzYC4gVGhhdCdzIGltcG9ydGFudC4gR2l2ZW4gdGhlIG1vZGlmaWNhdGlvbiwgSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGltcGFjdCBwb2ludC5cblxuT2theSwgbGV0J3MgYmFjayB1cC4gV2hlcmUgZWxzZSBpcyBgbXB0Y3BfbW92ZV9za2JzYCBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHRyYWNlICphbGwqIHRoZSBjYWxsZXJzIG9mIGBtcHRjcF9tb3ZlX3NrYnNgIG5vdyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIGRhdGEgcmVhZGluZXNzIGFuZCwgcG90ZW50aWFsbHksIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIHdpbGwgcHJvdmlkZSBhIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNTAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDU6NDMuNTI5Mzg5MzM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTExNjM4MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX21vdmVfc2tic1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MjQ9c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Nzc3OnN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc29jayAqc3NrLCBib29sIG93bl9tc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NDE9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NjpcXHRtb3ZlZCA9IF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgdHJ1ZSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVxcdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDUtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA2OlxcdFxcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDctXFx0fVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjIxMD1zdGF0aWMgdm9pZCBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBjb3BpZWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMjYzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIyNjQ6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRhKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyNjUte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjI4OD1zdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMDY6c3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA3LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTUtXFx0XFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMTY6XFx0XFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTctXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMzUwPXN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM5NDpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0KSBcXHUwMDI2XFx1MDAyNiBtcHRjcF9tb3ZlX3NrYnMoc2spKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzg2PXN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgxOS1cXHRcXHRcXHRfX21wdGNwX3JldHJhbnMoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4MjA6XFx0XFx0aWYgKHNwb29sX2JsIFxcdTAwMjZcXHUwMDI2IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcXHUwMDI2c2ticywgXFx1MDAyNm1vdmVkKSkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjEtXFx0XFx0XFx0Lyogbm90aWZ5IGFjayBzZXEgdXBkYXRlICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDc4PXN0YXRpYyBpbnQgbXB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDg4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDA4OTpcXHRcXHRpZiAobXB0Y3BfbW92ZV9za2JzKHNrKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDkwLVxcdFxcdFxcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIDApO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDQ5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1wdGNwX3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyICpvZmYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAxLVxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ1MDI6XFx0XFx0bXB0Y3BfbW92ZV9za2JzKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NTo1MC4wNDEwMzYxMDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NTIxMTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNUFRDUCBEYXRhIEZsb3cqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIG11bHRpLXBhdGggVENQIGltcGxlbWVudGF0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBtb3ZlcyBhcm91bmQuIEl0IHNlZW1zIGxpa2UgYG1wdGNwX3JlY3Ztc2dgIGFuZCBgbXB0Y3BfaW9jdGxgIGFyZSBrZXkgZW50cnkgcG9pbnRzLCBib3RoIG9mIHdoaWNoIGV2ZW50dWFsbHkgY2FsbCBgbXB0Y3BfbW92ZV9za2JzYC4gVGhhdCBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24gbG9va3MgbGlrZSBhIHBhcnRpY3VsYXJseSBnb29kIHBsYWNlIHRvIGZvY3VzIG9uIGFzIGEgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgSSBhbHNvIHNlZSB0aGF0IGBfX21wdGNwX3JldHJhbnNgIGlzIHRyaWdnZXJlZCwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBJJ2xsIHdhbnQgdG8gcmVtZW1iZXIgdGhpcyBzaW5jZSByZXRyYW5zbWlzc2lvbnMgYXJlIGNyaXRpY2FsLiBgbXB0Y3Bfd29ya2VyYCBpdHNlbGYgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIHRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgaW4gdHJhY2luZyB0aGUgcGF0aC4gTm93IHRoZSBxdWVzdGlvbiBpcywgd2hhdCB0cmlnZ2VycyBgbXB0Y3Bfd29ya2VyYD8gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIHdvcmtxdWV1ZSBpcyBzY2hlZHVsZWQgYW5kIGV4ZWN1dGVkLlxuXG5BaCwgaGVyZSdzIGBtcHRjcF9zY2hlZHVsZV93b3JrYCB3aGljaCBzZWVtcyB0byBiZSBub24tc3RhdGljLiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgZW50cnkgYW5kIG9yY2hlc3RyYXRpb24gZm9yIE1QVENQIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBnb29kIGxlYWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTE5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjU0LjEzNjI1MDcyM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MzQ3OTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zY2hlZHVsZV93b3JrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9MTE1NT1ib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTkzLVxcdFxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VyY3ZfZmFzdGNsb3NlLCB0cnVlKTtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExOTQ6XFx0XFx0XFx0bXB0Y3Bfc2NoZWR1bGVfd29yaygoc3RydWN0IHNvY2sgKiltc2spO1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE5NS1cXHRcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfTVBGQVNUQ0xPU0VSWCk7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyNTAtXFx0XFx0ICAgIG1wdGNwX3VwZGF0ZV9yY3ZfZGF0YV9maW4obXNrLCBtcF9vcHQuZGF0YV9zZXEsIG1wX29wdC5kc242NCkpXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMjUxOlxcdFxcdFxcdG1wdGNwX3NjaGVkdWxlX3dvcmsoKHN0cnVjdCBzb2NrICopbXNrKTtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyNTItXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz01OTI9c3RhdGljIGJvb2wgbXB0Y3BfcG1fc2NoZWR1bGVfd29yayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtNjAwLVxcdG1zay1cXHUwMDNlcG0uc3RhdHVzIHw9IEJJVChuZXdfc3RhdHVzKTtcXG5uZXQvbXB0Y3AvcG0uYzo2MDE6XFx0bXB0Y3Bfc2NoZWR1bGVfd29yaygoc3RydWN0IHNvY2sgKiltc2spO1xcbm5ldC9tcHRjcC9wbS5jLTYwMi1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk0MT1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NTYtXFx0aWYgKG1wdGNwX3BlbmRpbmdfZGF0YV9maW4oc2ssIE5VTEwpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk1NzpcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NTgtXFx0cmV0dXJuIG1vdmVkO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTA2MT1zdGF0aWMgdm9pZCBtcHRjcF9yZXNldF9ydHhfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Mi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDczOmJvb2wgbXB0Y3Bfc2NoZWR1bGVfd29yayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3NC17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMTM3PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExOTItXFx0aWYgKG1wdGNwX3BlbmRpbmdfZGF0YV9maW5fYWNrKHNrKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMTkzOlxcdFxcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExOTQtfVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTc5Mz1zdGF0aWMgdm9pZCBfX21wdGNwX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBmaXJzdClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4NTUtXFx0XFx0ICAgIG1zay1cXHUwMDNlc25kX254dCArIDEgPT0gbXNrLVxcdTAwM2V3cml0ZV9zZXEpXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTg1NjpcXHRcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODU3LVxcdH1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0NjI9c3RhdGljIHZvaWQgbXB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0NzAtXFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1QVENQX1dPUktfUlRYLCBcXHUwMDI2bXNrLVxcdTAwM2VmbGFncykpXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQ3MTpcXHRcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDcyLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDgwPXN0YXRpYyB2b2lkIG1wdGNwX3RvdXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDg1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0ODY6XFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQ4Ny1cXHRzb2NrX3B1dChzayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjU2PXZvaWQgbXB0Y3Bfc3ViZmxvd19zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGludCBob3cpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjc3LVxcdFxcdFxcdFdSSVRFX09OQ0UobXB0Y3Bfc2soc2spLVxcdTAwM2VzbmRfdW5hLCBtcHRjcF9zayhzayktXFx1MDAzZXNuZF9ueHQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNzg6XFx0XFx0XFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI3OS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTYyPWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5NjM6Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtOTY0LWludCBtcHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NDMwPXZvaWQgbXB0Y3Bfc3ViZmxvd19yZXNldChzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy00NDYtXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1QVENQX1dPUktfQ0xPU0VfU1VCRkxPVywgXFx1MDAyNm1wdGNwX3NrKHNrKS1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NDQ3OlxcdFxcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQ4LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMTA5PXN0YXRpYyBlbnVtIG1hcHBpbmdfc3RhdHVzIGdldF9tYXBwaW5nX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTc1LVxcdFxcdFxcdGlmICh1cGRhdGVkKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTE3NjpcXHRcXHRcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKChzdHJ1Y3Qgc29jayAqKW1zayk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTc3LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjg5PXN0YXRpYyB2b2lkIHN1YmZsb3dfc2NoZWRfd29ya19pZl9jbG9zZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTMwMi1cXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoTVBUQ1BfV09SS19DTE9TRV9TVUJGTE9XLCBcXHUwMDI2bXNrLVxcdTAwM2VmbGFncykpXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMzAzOlxcdFxcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTMwNC1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTMxMS1cXHRcXHRcXHRcXHQgICAgICBzdWJmbG93LVxcdTAwM2VtYXBfZGF0YV9sZW4sIHRydWUpKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTMxMjpcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEzMTMtfVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDA0PXN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAyNS1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZtcHRjcF9zayhzayktXFx1MDAzZWZsYWdzKSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwMjY6XFx0XFx0XFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDI3LVxcdFxcdHNvY2tfcHV0KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDU6NTguNTc5NzM5MDEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTY1MDk3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBuYXZpZ2F0aW5nIHRoaXMga2VybmVsIG1vZHVsZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1QVENQIEVudHJ5IFBvaW50cyBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9kYXRhX3JlYWR5YCwgYW5kIGBtcHRjcF9yZWN2bXNnYC4uLiB0aGVzZSBmZWVsIGxpa2UgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhpcyBNUFRDUCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGhvb2tlZCBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21lIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBgQ09ORklHYCBvcHRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIE1QVENQIGZlYXR1cmUgdG8gYmUgYWN0aXZlLlxuXG5TaW5jZSB0aGUgY29kZSBpcyBjbGVhcmx5IGluIGBuZXQvbXB0Y3AvYCwgdGhhdCBzaW1wbGlmaWVzIHRoZSBzZWFyY2guIEknbGwgY2hlY2sgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBmaWxlcyDigJMgZWl0aGVyIHRoZSBvbmUgZGlyZWN0bHkgaW4gYG5ldC9tcHRjcC9LY29uZmlnYCwgb3IgZmFpbGluZyB0aGF0LCBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCB0byB0aGUgbWFpbiBgbmV0L0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGRlcGVuZGVuY2llcyBvciBmbGFncyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIGFuZCBhY3RpdmF0aW9uIG9mIHRoaXMgTVBUQ1AgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxODgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NjowMi45NzYyNTE2MzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjQ3NjQ1MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjA5LjAwMTAyMjA4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg4MTA5MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTVBUQ1AgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgTVBUQ1BgIGlzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGguIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgaXRzIGZvdW5kYXRpb24/IEEgcXVpY2sgbWVudGFsIHNjYW4gdGVsbHMgbWUgdGhhdCBgTVBUQ1BgIHJlbGllcyBvbiB0aGUgYElORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBtYWtlIHN1cmUgSSdtIGNvcnJlY3QgYW5kIHRha2UgYSBkZWVwZXIgbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhlIEtjb25maWcgZmlsZSBmb3IgYE1QVENQYCBzaG91bGQgaGF2ZSB0aGUgYW5zd2Vycywgc28gSSdsbCBqdW1wIGludG8gYG5ldC9tcHRjcC9LY29uZmlnYCB0byBjaGVjayBvdXQgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NjoxMS45ODkxMzQ2ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDY6MTEuOTg5MjI5MzkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTc1ODY1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgQ29uZmlndXJhdGlvbiBhbmQgQ29yZSBMb2dpYyBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGtleSBsb2dpYyBwb2ludHMgZm9yIE11bHRpUGF0aCBUQ1AgKE1QVENQKS4gVGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBlbGVtZW50IGlzIGNsZWFybHkgYE1QVENQYCwgd2hpY2ggSSdsbCBhZGQgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gSSBkb24ndCB0aGluayBJIG5lZWQgdG8gYnJpbmcgaW4gYE1QVENQX0lQVjZgIGp1c3QgeWV0LCBhcyBgTVBUQ1BgIGl0c2VsZiBzaG91bGQgYmUgdGhlIGNvcmUgZW5hYmxlci5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYE1QVENQYCBpcyBhIGJvb2xlYW4gYW5kIG5vdCBhIHRyaXN0YXRlLCBhbmQgeWVzLCBpdCdzIGEgYm9vbCwgc28ganVzdCBlbmFibGluZyBpdCBpcyBlbm91Z2guXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zLiBJJ3ZlIGdvdCBhIHNob3J0bGlzdDpcblxuKiAgIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYDogVGhpcyBjYWxscyBgbXB0Y3Bfb3Zlcl9saW1pdGAuXG4qICAgYG1wdGNwX2RhdGFfcmVhZHlgOiBXaGljaCBjYWxscyBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YC4gVGhhdCBpbiB0dXJuIGNhbGxzIGBfX21wdGNwX2FkZF9iYWNrbG9nYCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JgLCBhbmQgZmluYWxseSBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYC5cbiogICBgbXB0Y3BfcmVjdm1zZ2A6IFRoaXMgZnVuY3Rpb24gaXMgbGlua2VkIHRvIGBtcHRjcF9tb3ZlX3NrYnNgIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fbXB0Y3BfbW92ZV9za2JzYC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIGBfX21wdGNwX3JldHJhbnNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IGBtcHRjcF9yZWxlYXNlX2NiYCBhbmQgYG1wdGNwX3dvcmtlcmAuIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBmb3IgdGhlIHNvY2tldCwgdHJpZ2dlcmVkIHdoZW4gdGhlIHNvY2tldCBsb2NrIGlzIHJlbGVhc2VkLiBBbmQgYG1wdGNwX3dvcmtlcmAgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24uIElzIHRoZXJlIGFueXRoaW5nIG91dHNpZGUgb2YgTVBUQ1AgY2FsbGluZyB0aGF0IGBtcHRjcF9yZWxlYXNlX2NiYD8gSSBzZWUgYHJlbGVhc2Vfc29ja2AgY2FsbHMgaXQuIFRoaXMgaXMgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIG5vdCBzcGVjaWZpYyB0byBNUFRDUCwgc28gdGhlc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBzdGlsbCB0aGUga2V5IG9uZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBleHBvcnQgc3RhdHVzIG9mIHRoZSBmb2N1cyBmdW5jdGlvbnMuIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AgYW5kIGlzIGluZGVlZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAuIEdyZWF0LiBBbmQgYG1wdGNwX2RhdGFfcmVhZHlgIGlzIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AgYW5kIGlzIGV4cG9ydGVkIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAuIE5vdywgYG1wdGNwX3JlY3Ztc2dgLi4uIFdhaXQsIEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3Mgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjE5LjY4NjgxOTQ5M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMDYxNzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9yZWN2bXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxMTI9c3RhdGljIHZvaWQgbXB0Y3BfZWF0X3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxMjItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjEyMzpzdGF0aWMgaW50IF9fbXB0Y3BfcmVjdm1zZ19tc2txKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxMjQtXFx0XFx0XFx0XFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjMyOT1zdGF0aWMgdW5zaWduZWQgaW50IG1wdGNwX2lucV9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzNDktXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM1MDpzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM1MS1cXHRcXHRcXHQgaW50IGZsYWdzKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM4Mi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMzgzOlxcdFxcdGJ5dGVzX3JlYWQgPSBfX21wdGNwX3JlY3Ztc2dfbXNrcShzaywgbXNnLCBsZW4gLSBjb3BpZWQsIGZsYWdzLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzODQtXFx0XFx0XFx0XFx0XFx0XFx0ICBjb3BpZWQsIFxcdTAwMjZ0c3MsIFxcdTAwMjZjbXNnX2ZsYWdzLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDE4OT1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjAxLVxcdC5pb2N0bFxcdFxcdD0gbXB0Y3BfaW9jdGwsXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwMjpcXHQucmVjdm1zZ1xcdD0gbXB0Y3BfcmVjdm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjAzLVxcdC5yZWxlYXNlX2NiXFx0PSBtcHRjcF9yZWxlYXNlX2NiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NjoyNC42MTc0NDUxNTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MjIzMDc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaWdnaW5nIGludG8gdGhlIE1QVENQIENvZGUqKlxuXG5SaWdodCwgc28gYG1wdGNwX3JlY3Ztc2dgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGxpbWl0cyBpdHMgZGlyZWN0IHVzYWJpbGl0eSwgdW5mb3J0dW5hdGVseS4gTXkgZ29hbCBpcyB0byBmaW5kIGEgZnVuY3Rpb24sIGlkZWFsbHkgbm9uLXN0YXRpYywgdGhhdCBlaXRoZXIgY2FsbHMgYG1wdGNwX3JlY3Ztc2dgIG9yIGlzIHNvbWVob3cgZGlyZWN0bHkgcmVsYXRlZCB0byBpdCB3aXRoaW4gdGhlIE11bHRpUGF0aCBUQ1AgaW1wbGVtZW50YXRpb24uIFNpbmNlIGl0J3MgcmVnaXN0ZXJlZCBpbiBgbXB0Y3BfcHJvdGAsIG15IHRoaW5raW5nIGlzIHRvIGludmVzdGlnYXRlIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AgZmlyc3QuIEknbGwgbmVlZCB0byBsb29rIHRocm91Z2ggdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSwgYXMgdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgSSdtIGxpa2VseSBhZnRlci4gVGhpcyBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgTVBUQ1AgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NzcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NjoyOC4xNzk2NzkyNjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjUwNzIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBtcHRjcF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9OTYxPXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9ydHRfdXBkYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05ODYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6OTg3OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTg4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwNjE9c3RhdGljIHZvaWQgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwNzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA3Mzpib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwNzQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTIzNz1tcHRjcF9jYXJ2ZV9kYXRhX2ZyYWcoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjU0LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEyNTU6c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyB7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTI1Ni1cXHRpbnQgbXNzX25vdztcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1Mjg9c3RydWN0IHN1YmZsb3dfc2VuZF9pbmZvIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTUzMzp2b2lkIG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MzQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTU0MS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNTQyOmJvb2wgbXB0Y3Bfc3ViZmxvd19hY3RpdmUoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTQzLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE2NDU9c3RhdGljIHZvaWQgbXB0Y3BfdXBkYXRlX3Bvc3RfcHVzaChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY3MS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjcyOnZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjczLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2MTU9c3RhdGljIHZvaWQgX19tcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjcyMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNzIxOnZvaWQgbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNzIyLVxcdFxcdCAgICAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4OTc9c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMwMTYtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzAxNzp2b2lkIG1wdGNwX3Jlc2V0X3RvdXRfdGltZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgbG9uZyBmYWlsX3RvdXQpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzAxOC17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjM4PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYXJfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjQ3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNDg6dm9pZCBtcHRjcF9jYW5jZWxfd29yayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI0OS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjU1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNTY6dm9pZCBtcHRjcF9zdWJmbG93X3NodXRkb3duKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgaW50IGhvdylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjU3LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyOTAtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzI5MTp2b2lkIG1wdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjkyLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM4NTI9c3RhdGljIHZvaWQgc2NoZWR1bGVfM3JkYWNrX3JldHJhbnNtaXNzaW9uKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODczLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4NzQ6dm9pZCBtcHRjcF9zdWJmbG93X3Byb2Nlc3NfZGVsZWdhdGVkKHN0cnVjdCBzb2NrICpzc2ssIGxvbmcgc3RhdHVzKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4NzUte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzkxMz1zdGF0aWMgaW50IG1wdGNwX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSlcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM5MjMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzkyNDp2b2lkIG1wdGNwX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzkyNS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zOTQ3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM5NDg6dm9pZCBtcHRjcF9zb2NrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqcGFyZW50KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM5NDkte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzk1OT1zdGF0aWMgdm9pZCBtcHRjcF9zb2NrX2NoZWNrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM5NzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mzk3Mzpib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzk3NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjI4LjkyMjE5NzI1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDQ2NzA2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIFNlbGVjdGlvbiBmb3IgTVBUQ1AgUmVjZWl2ZSBhbmQgUmV0cmFuc21pc3Npb24gUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vc3QgZWZmZWN0aXZlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgdGhpcyBNUFRDUCBjb2RlLiBTaW5jZSBgbXB0Y3BfZGF0YV9yZWFkeWAgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhcmUgbm9uLXN0YXRpYywgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXkgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB0aGUgcmVjZWl2ZSBwYXRoIG1vZGlmaWNhdGlvbnMuIEkgYWxzbyBsb29rZWQgYXQgYG1wdGNwX3N1YmZsb3dfcHJvY2Vzc19kZWxlZ2F0ZWRgIGJ1dCBmb3VuZCBpdCB3YXNuJ3QgbW9kaWZpZWQuIFRoYXQgbGVhdmVzIG1lIGxlYW5pbmcgdG93YXJkcyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCB0byBjb3ZlciB0aGUgcmVjZWl2ZSBwYXRoLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoISBgX19tcHRjcF9yZXRyYW5zYCBpcyB0cmlnZ2VyZWQgYnkgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gSSBuZWVkZWQgdG8gdGhpbmsgYWJvdXQgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgcmV0cmFuc21pc3Npb24uIGBtcHRjcF9zY2hlZHVsZV93b3JrYCBsZWFkcyB0byBgbXB0Y3Bfd29ya2VyYC4gSG93ZXZlciwgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdoZW4gdGhlIHNvY2tldCBsb2NrIGlzIHJlbGVhc2VkLCB3aGljaCBpcyBkb25lIGJ5IGByZWxlYXNlX3NvY2soc2spYC4gVGhhdCdzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBhbmQgcHJvYmFibHkgbm90IGlkZWFsIGFzIGEgZm9jdXMgc3ltYm9sLlxuXG5Db21pbmcgYmFjayB0byB0aGUgcmVjZWl2ZSBwYXRoLCBmdXp6aW5nIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIHNvdW5kcyBzb2xpZCwgYnV0IHdoYXQgYWJvdXQgYG1wdGNwX3JlY3Ztc2dgPyBJdCAqaXMqIHRoZSBgcmVjdm1zZ2AgaGFuZGxlciBmb3IgTVBUQ1AsIGJ1dCBpdCdzIHN0YXRpYy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzLiBIb3dldmVyLCBpdCAqaXMqIGFuIEFQSSBlbnRyeXBvaW50LCBkZXNwaXRlIHRoZSBzdGF0aWMga2V5d29yZC4gSSdtIHRvcm4sIGJ1dCB1bHRpbWF0ZWx5LCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY29kZSBjaGFuZ2VzLCBhbmQgbm9uLXN0YXRpYywgc28gSSdsbCBwcmlvcml0aXplIHRoZW0uXG5cbkxldCdzIGRpZyBkZWVwZXIgaW50byBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AuIFllcywgaXQncyBub24tc3RhdGljLCBhbmQgKmlzKiBkaXJlY3RseSBtb2RpZmllZCEgQ2hlY2tpbmcgdGhlIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBjb250YWlucyB0aGUga2V5IGNoZWNrOiBgcmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXHUwMDNlY29ubiwgc2ssIHNrYik7YC4gSXQncyBhIHBlcmZlY3QgZm9jdXMgc3ltYm9sLlxuXG5Ob3cgZm9yIGBtcHRjcF9kYXRhX3JlYWR5YC4gSXQgY2FsbHMgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgX19tcHRjcF9hZGRfYmFja2xvZ2AgYW5kIGBfX21wdGNwX21vdmVfc2tiYC4gQm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guIFNvLCBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMgYWxzbyBhIHBlcmZlY3QgZm9jdXMgc3ltYm9sLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSBpbiB0aGUgcGF0Y2guXG5cbkkgd2lsbCBzZXQgYXNpZGUgb3RoZXIgZm9jdXMgc3ltYm9scyBzdWNoIGFzIGBtcHRjcF93b3JrZXJgLCBzaW5jZSBpdCBpcyBzdGF0aWMuIEkgd2lsbCBsb29rIGZvciBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgdGhlIHJldHJhbnNtaXNzaW9uIHBhcnQuIFdoYXQgYWJvdXQgYG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZ2A/IFRoYXQncyBhbm90aGVyIGF2ZW51ZSB0byBpbnZlc3RpZ2F0ZSwgYnV0IGZvciBub3csIEknbSBjb25maWRlbnQgaW4gcHJpb3JpdGl6aW5nIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIGFzIHRoZSBrZXkgZm9jdXMgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NDUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDY6MzguNzI2ODcyMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTQyMzk5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTE2NDU9c3RhdGljIHZvaWQgbXB0Y3BfdXBkYXRlX3Bvc3RfcHVzaChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY3MS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjcyOnZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjczLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4OTc9c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5OTgtcmVzZXRfdGltZXI6XFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjk5OTpcXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMwMDAtXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MTE9Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6ODEyOnZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtODEzLXZvaWQgX19tcHRjcF9wdXNoX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz02NjA9c3RhdGljIGludCBfX21wdGNwX3NldHNvY2tvcHRfc29sX3RjcF9jb3JrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCB2YWwpXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTY3NC1cXHRpZiAoIXZhbClcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjY3NTpcXHRcXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNjc2LVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz02ODA9c3RhdGljIGludCBfX21wdGNwX3NldHNvY2tvcHRfc29sX3RjcF9ub2RlbGF5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCB2YWwpXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTY5NC1cXHRpZiAodmFsKVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Njk1OlxcdFxcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy02OTYtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjQ1LjIyMTExODY5M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODAyNTQzMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBNUFRDUCBSZXRyYW5zbWlzc2lvbiBMb2dpYyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJhY2luZyB0aGUgZmxvdyBoZXJlLiBJdCBsb29rcyBsaWtlIGBtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmdgIGlzICpjYWxsZWQqIGZyb20gYF9fbXB0Y3BfcmV0cmFuc2AsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gVGhhdCdzIGdvb2QgdG8ga25vdywgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB0aW1pbmcuIEJ1dCB3aGF0IGFib3V0IHRoYXQgcGVza3kgYG1wdGNwX3JldHJhbnNtaXRfdGltZXJgPyBJdCdzIHN0YXRpYywgc28gdGhhdCdzIGEgZGlmZmVyZW50IHBhdGgsIG5lZWRzIGEgc2VwYXJhdGUgbG9vaywgYnV0IHRoZSBpbW1lZGlhdGUgY2FsbGluZyBwYXRoIGZyb20gdGhlIHJldHJhbnNtaXQgbG9naWMgaXMgY2xlYXIuIFRoZW4gSSBzZWUgYG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZWAsIHRoYXQgY2FsbHMgYF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGFgIGFuZCB0aGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24uIFdhaXQsIGBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhYCBpcyAqbm9uLXN0YXRpYyohIE9rYXksIHRoYXQncyBjcnVjaWFsLiBLbm93aW5nIGl0J3Mgbm9uLXN0YXRpYyBtZWFucyBpdCdzIGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLCBzb21ldGhpbmcgSSdsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGVuIEkgbWFwIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBub3RlIHdoZXJlIHRoYXQncyBjYWxsZWQgZnJvbSwgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU1MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0Njo0OS4wMjM2NjUxNDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDA1NDIyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDYzPXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTA4NC1cXHRcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZSA9IDE7XFxubmV0L21wdGNwL3BtLmM6MTA4NTpcXHRcXHRcXHRcXHRfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcG0uYy0xMDg2LVxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5NT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTMxOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2NTpcXHRuZWVkX3B1c2ggPSAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DRl9QVVNIKSBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY2LVxcdGlmICghZGlzcG9zZV9pdCkge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mjg5Nz1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cXHRcXHQvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDk6XFx0XFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk1MC1cXHRcXHQgKi9cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgwOD12b2lkIF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtODEwLVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4MTE6Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtODEyLXZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjUzLjU2NDIxNDM3N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTg2MzU4Nzk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YWAgd291bGQgYmUgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIG5vbi1zdGF0aWMsIHNvIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG5vdCByaWdodCwgYnV0IGl0IGRvZXNuJ3QgZXZlbiBjYWxsIGBfX21wdGNwX3JldHJhbnNgLCB3aGljaCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQuIFRoYXQncyBhIGJpdCBvZiBhIGN1cnZlYmFsbC4gQWZ0ZXIgcmV2aWV3aW5nIGFsbCB0aGUgZnVuY3Rpb25zLCB0aGUgY29kZSBtb2RpZmllcyBhIGJ1bmNoIG9mIGZ1bmN0aW9uczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCwgYF9fbXB0Y3BfbW92ZV9za2JgLCBgX19tcHRjcF9hZGRfYmFja2xvZ2AsIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCBgbXB0Y3BfbW92ZV9za2JzYCwgYF9fbXB0Y3BfcHVzaF9yZXRyYW5zYCwgYF9fbXB0Y3BfcmV0cmFuc2AsIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuXG5cbmBfX21wdGNwX3JldHJhbnNgIGlzIGNhbGxlZCBieSBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBgbXB0Y3BfcmVsZWFzZV9jYmAgaXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgZm9yIHRoZSBzb2NrZXQsIHNvIGl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIHNvY2tldCBsb2NrIGlzIHJlbGVhc2VkLiBFc3NlbnRpYWxseSwgYW55IGZ1bmN0aW9uIHRoYXQgbG9ja3MgYW5kIHVubG9ja3MgdGhlIHNvY2tldCBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIGl0LiBUaGF0IG1ha2VzIGZ1enppbmcgYG1wdGNwX3JlY3Ztc2dgIHZpYSB0aGUgYHJlY3Ztc2dgIHN5c2NhbGwgb3IgYG1wdGNwX3NlbmRtc2dgIHZpYSB0aGUgYHNlbmRtc2dgIHN5c2NhbGwgYSB2aWFibGUgc3RyYXRlZ3kuIEJ1dCBsb29raW5nIGRlZXBlciBhbmQgdHJhY2luZyBjYWxscywgSSB0aGluayB0aGVyZSBhcmUgYmV0dGVyIGFwcHJvYWNoZXMuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGFyZSB0aGUgb25lcyBkaXJlY3RseSBleHBvc2VkIHRvIHRoZSBzeXNjYWxscyBvciBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gU28gSSB3YW50IHRvIGluY2x1ZGUgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAuIGBtcHRjcF9pb2N0bGAgbG9va2VkIGludGVyZXN0aW5nIHNpbmNlIGl0IGNhbGxzIGBtcHRjcF9tb3ZlX3NrYnNgLCBidXQgdGhlbiBJIHJlYWxpemVkIGl0J3Mgc3RhdGljLiBMZXQncyBzZWUuLi4gYG1wdGNwX3JlY3Ztc2dgIGlzIHN0YXRpYywgdG9vLiBPa2F5LCBzbyBmaW5kaW5nIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHN0YXRpYyBgbXB0Y3BfbW92ZV9za2JzYCBpc24ndCBnb2luZyB0byBnZXQgbWUgYW55d2hlcmUuIGBtcHRjcF9tb3ZlX3NrYnNgIGlzIG9ubHkgY2FsbGVkIGJ5IGEgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9ucyBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLCB3aGljaCwgYXMgbWVudGlvbmVkLCBpcyB0cmlnZ2VyZWQgaW5kaXJlY3RseS4gU28sIGl0IGxvb2tzIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAgYXJlIHRoZSBiZXN0IGJldHMgYXMgZm9jdXMgc3ltYm9scy5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gWXVwLCBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMgbm9uLXN0YXRpYyAoYHZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgKSwgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBub24tc3RhdGljIHRvbyAoYGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2ApLlxuXG5TbywgdGhlIHBhdGNoIG1haW5seSBtb2RpZmllcyB0aGVzZSBmdW5jdGlvbnM6IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCAobm9uLXN0YXRpYyksIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIChzdGF0aWMpLCBgX19tcHRjcF9tb3ZlX3NrYmAgKHN0YXRpYyksIGBfX21wdGNwX2FkZF9iYWNrbG9nYCAoc3RhdGljKSwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgKHN0YXRpYyksIGBtcHRjcF9tb3ZlX3NrYnNgIChzdGF0aWMpLCBgX19tcHRjcF9wdXNoX3JldHJhbnNgIChzdGF0aWMpLCBgX19tcHRjcF9yZXRyYW5zYCAoc3RhdGljKSwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCAoc3RhdGljKS5cblxuU28gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAgYXJlIHN0aWxsIHRoZSBiZXN0IHN5bWJvbHMgdG8gY29uY2VudHJhdGUgb24uIFdhaXQsIGBtcHRjcF9kYXRhX3JlYWR5YCBhY3R1YWxseSBjYWxscyBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YC4gSG1tLCBpdCdzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSB0aGVzZSBtaWdodCBiZSB0aGUgYmVzdCB0YXJnZXRzLCBhbmQgdGhlIG9ubHkgb25lcyBJIGNhbiByZWFsbHkgbGV2ZXJhZ2UgaW4gYSB0YXJnZXRlZCB3YXkuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgdHJ1ZS4uLlxuXG5TbyB3aGF0IGNvbmZpZyBvcHRpb24gZG8gSSBuZWVkIHRvIGVuYWJsZT8gSnVzdCBgTVBUQ1BgLCBzZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cbioqRmluYWwgYXNzZXNzbWVudDoqKiBUaGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgc2hvdWxkIGZvY3VzIG9uIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgLiBJIHdpbGwgZW5hYmxlIHRoZSBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY3JpdGljYWwgTVBUQ1AgbG9naWMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZXRyYW5zbWlzc2lvbnMuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyBmdXp6aW5nIHRvIGV4cG9zZSBpc3N1ZXMgYXJvdW5kIHRoZSBuZXcgbWVtb3J5IGxpbWl0IGNoZWNrcyB3aGljaCBkcm9wIHBhY2tldHMgb3IgcHJ1bmUgcXVldWVzLCBhbmQgdGhlIHJlZmFjdG9yaW5nIG9mIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgYW55IGlzc3VlcyBoZXJlIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTgzLCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NzowNS40Mjc4MDYxOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTE2ODg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTVBUQ1AgcHJvdG9jb2wgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBjb25zdHJhaW50cyBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHRoYXQgZHJvcCBwYWNrZXRzIG9yIHBydW5lIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBoYW5kbGUgbXVsdGlwbGUgZnJhZ21lbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNUFRDUCBwcm90b2NvbCBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGNvbnN0cmFpbnRzIGFuZCByZXRyYW5zbWlzc2lvbnMuIEl0IGludHJvZHVjZXMgbmV3IG1lbW9yeSBsaW1pdCBjaGVja3MgdGhhdCBkcm9wIHBhY2tldHMgb3IgcHJ1bmUgdGhlIG91dC1vZi1vcmRlciBxdWV1ZSB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQsIGFuZCByZWZhY3RvcnMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGhhbmRsZSBtdWx0aXBsZSBmcmFnbWVudHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowngxgq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 19:14:13 +0000 UTC FinishedAt: 2026-07-25 19:47:07 +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": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "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": "89d8006259b81dd25c962f6cc8d7ab268d6ea426", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "15634033-3ff5-4ba1-adbc-eec969f6e68b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_incoming_options", "mptcp_data_ready" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE1QVENQIHByb3RvY29sIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgY29uc3RyYWludHMgYW5kIHJldHJhbnNtaXNzaW9ucy4gSXQgaW50cm9kdWNlcyBuZXcgbWVtb3J5IGxpbWl0IGNoZWNrcyB0aGF0IGRyb3AgcGFja2V0cyBvciBwcnVuZSB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIHdoZW4gbGltaXRzIGFyZSBleGNlZWRlZCwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9naWMgdG8gaGFuZGxlIG11bHRpcGxlIGZyYWdtZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlODdhMzE0Y2NjMzdjMmUzNGNlZGExZDJhYWE0NjcwMTVhNDdiZjgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTk6NDQ6MTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCBmMjNmZGEwYzU1YTcyMC4uZDliZDRmNGFmY2MwZTcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuY1xuQEAgLTg1LDYgJiM0Mzs4NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7XG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O1NpbXVsdENvbm5lY3RGYWxsYmFja1wmIzM0OywgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwmIzM0O0ZhbGxiYWNrRmFpbGVkXCYjMzQ7LCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLFxuIFx0U05NUF9NSUJfSVRFTShcJiMzNDtXaW5Qcm9iZVwmIzM0OywgTVBUQ1BfTUlCX1dJTlBST0JFKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O0JhY2tsb2dEcm9wXCYjMzQ7LCBNUFRDUF9NSUJfQkFDS0xPR0RST1ApLFxuJiM0MztcdFNOTVBfTUlCX0lURU0oXCYjMzQ7UmN2UHJ1bmVkXCYjMzQ7LCBNUFRDUF9NSUJfUkNWUFJVTkVEKSxcbiYjNDM7XHRTTk1QX01JQl9JVEVNKFwmIzM0O09mb1BydW5lZFwmIzM0OywgTVBUQ1BfTUlCX09GT19QUlVORUQpLFxuIH07XG4gXG4gLyogbXB0Y3BfbWliX2FsbG9jIC0gYWxsb2NhdGUgcGVyY3B1IG1pYiBjb3VudGVyc1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuaCBiL25ldC9tcHRjcC9taWIuaFxuaW5kZXggODEyMjE4YjVlZDJiZmMuLjE4ZjM1ZjdlMGEyZDRlIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21pYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmhcbkBAIC04OCw2ICYjNDM7ODgsOSBAQCBlbnVtIGxpbnV4X21wdGNwX21pYl9maWVsZCB7XG4gXHRNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLLFx0LyogU2ltdWx0YW5lb3VzIGNvbm5lY3QgKi9cbiBcdE1QVENQX01JQl9GQUxMQkFDS0ZBSUxFRCxcdC8qIENhbiYjMzk7dCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqL1xuIFx0TVBUQ1BfTUlCX1dJTlBST0JFLFx0XHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xuJiM0MztcdE1QVENQX01JQl9CQUNLTE9HRFJPUCxcdFx0LyogQmFja2xvZyBvdmVyIG1lbW9yeSBsaW1pdCAqL1xuJiM0MztcdE1QVENQX01JQl9SQ1ZQUlVORUQsXHRcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW5zICovXG4mIzQzO1x0TVBUQ1BfTUlCX09GT19QUlVORUQsXHRcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cbiBcdF9fTVBUQ1BfTUlCX01BWFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbmluZGV4IGM2NjQwMjNkMzdiYThlLi43Yjk1NGVmNzg2NzIzMCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTI3LDggJiM0MzsxMTI3LDMwIEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcdHJldHVybiBobWFjID09IG1wX29wdC1cdTAwM2VhaG1hYztcbiB9XG4gXG4tLyogUmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKG9yIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQpLFxuLSAqIGVsc2UgcmV0dXJuIHRydWUuXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7XG4mIzQzO1xuJiM0MztcdG1lbSAmIzQzOz0gUkVBRF9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbik7XG4mIzQzO1x0aWYgKGxpa2VseShtZW0gXHUwMDNjPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIEF2b2lkIHNpbGVudGx5IGRyb3BwaW5nIHB1cmUgYWNrcywgZmluIG9yIHplcm8gd2luIHByb2Jlcy4gKi9cbiYjNDM7XHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSB8fFxuJiM0MztcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfRklOIHx8XG4mIzQzO1x0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSwgdGNwX3NrKHNzayktXHUwMDNlcmN2X254dCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIERyb3BwZWQgZHVlIHRvIG1lbW9yeSBjb25zdHJhaW50cywgc2NoZWR1bGUgYW4gYWNrLiAqL1xuJiM0MztcdGluZXRfY3NrKHNzayktXHUwMDNlaWNza19hY2sucGVuZGluZyB8PSBJQ1NLX0FDS19OT01FTSB8IElDU0tfQUNLX05PVztcbiYjNDM7XHRpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxuJiM0MzsgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXG4gICovXG4gYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5AQCAtMTE1NCw3ICYjNDM7MTE3Niw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LVx1MDAzZWNvbm4sIHNrLCBza2IpO1xuIFx0fVxuIFxuIFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGNhNjQ0ZWM1M2VlZGIxLi41Y2Y0NGVhYjc2ZjFjNCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM3Myw2ICYjNDM7MzczLDQ5IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2luaXRfc2tiKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsXG4gXHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiB9XG4gXG4mIzQzOy8qIFwmIzM0O0luc3BpcmVkXCYjMzQ7IGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1BcbiYjNDM7ICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqcHJldjtcbiYjNDM7XHRib29sIHBydW5lZCA9IGZhbHNlO1xuJiM0MztcdHU2NCBtZW07XG4mIzQzO1xuJiM0MztcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5vZGUgPSBcdTAwMjZtc2stXHUwMDNlb29vX2xhc3Rfc2tiLVx1MDAzZXJibm9kZTtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJiX3RvX3NrYihub2RlKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqL1xuJiM0MztcdFx0aWYgKGFmdGVyNjQoc2VxLCBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0cHJ1bmVkID0gdHJ1ZTtcbiYjNDM7XHRcdHByZXYgPSByYl9wcmV2KG5vZGUpO1xuJiM0MztcdFx0cmJfZXJhc2Uobm9kZSwgXHUwMDI2bXNrLVx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XG4mIzQzO1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuJiM0MztcdFx0bXNrLVx1MDAzZW9vb19sYXN0X3NrYiA9IHJiX3RvX3NrYihwcmV2KTtcbiYjNDM7XG4mIzQzO1x0XHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbiYjNDM7XHRcdGlmIChtZW0gXHUwMDNjPSBzay1cdTAwM2Vza19yY3ZidWYpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdG5vZGUgPSBwcmV2O1xuJiM0MztcdH0gd2hpbGUgKG5vZGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJ1bmVkKVxuJiM0MztcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT19QUlVORUQpO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xuJiM0MztcdHJldHVybiBtZW0gXHUwMDNjPSBzay1cdTAwM2Vza19yY3ZidWY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0dTY0IGNvcHlfbGVuID0gTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXE7XG5AQCAtMzgxLDYgJiM0Mzs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRtcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpO1xuIFxuJiM0MztcdC8qIENhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCB0aGlzIGxhdGUsIG9yIHRoZSBzdHJlYW1cbiYjNDM7XHQgKiB3aWxsIGJyZWFrLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNlIFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlbWFwX3NlcSkpIHtcbiYjNDM7XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xuJiM0MztcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEgPT0gbXNrLVx1MDAzZWFja19zZXEpIHtcbiBcdFx0LyogaW4gc2VxdWVuY2UgKi9cbiBcdFx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICYjNDM7PSBjb3B5X2xlbjtcbkBAIC02NzUsNiAmIzQzOzcyOSw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIFx0c3RydWN0IHNvY2sgKnNzayA9IHNrYi1cdTAwM2VzaztcbiBcdGJvb2wgZnJhZ3N0b2xlbjtcbiYjNDM7XHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4Miw2ICYjNDM7NzM3LDE2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4mIzQzO1x0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXG4mIzQzO1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbiYjNDM7XHRsaW1pdCAmIzQzOz0gKGxpbWl0IFx1MDAzZVx1MDAzZSAxKSAmIzQzOyA2NCAqIDEwMjQ7XG4mIzQzO1x0bGltaXQgPSBtaW5fdCh1NjQsIGxpbWl0LCBVSU5UX01BWCk7XG4mIzQzO1x0aWYgKG1zay1cdTAwM2ViYWNrbG9nX2xlbiBcdTAwM2UgbGltaXQgXHUwMDI2XHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcbiYjNDM7XHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbiYjNDM7XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cbiBcdGlmICghbGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSlcbiBcdFx0dGFpbCA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XG5AQCAtNzUzLDcgJiM0Mzs4MTgsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbiBcbiBcdFx0XHRtcHRjcF9pbml0X3NrYihzc2ssIHNrYiwgb2Zmc2V0LCBsZW4pO1xuIFxuLVx0XHRcdGlmIChvd25fbXNrIFx1MDAyNlx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXHUwMDNjIHNrLVx1MDAzZXNrX3JjdmJ1Zikge1xuJiM0MztcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTM2LDEzICYjNDM7MTIwMSw2IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4gXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBtcHRjcF9lbnRlcl9tZW1vcnlfcHJlc3N1cmUoc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG5AQCAtMjIwOSwxMiAmIzQzOzIyNjcsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMsIHUzMiAqZGVsdFxuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdGJvb2wgbW92ZWQgPSBmYWxzZTtcbiBcbi1cdCpkZWx0YSA9IDA7XG4gXHR3aGlsZSAoMSkge1xuLVx0XHQvKiBJZiB0aGUgbXNrIHJlY3ZidWYgaXMgZnVsbCBzdG9wLCBkb24mIzM5O3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgJiM0Mzs9IHNrYi1cdTAwM2V0cnVlc2l6ZTtcbkBAIC0yMjQyLDkgJiM0MzsyMjk1LDcgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXHUwMDNlYmFja2xvZ191bmFjY291bnRlZCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc29ja2V0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTtcbiBcbi1cdC8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChza2JzKTtcbkBAIC0yMjUyLDIwICYjNDM7MjMwMywxMiBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfYmFja2xvZ19zcG9vbGVkKHN0cnVjdCBzb2NrICpzaywgdTMyIG1vdmVkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuLXtcbi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4tXG4tXHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuLVx0bGlzdF9zcGxpY2Uoc2ticywgXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCk7XG4tfVxuLVxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4ge1xuJiM0MztcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4mIzQzO1x0dTMyIG1vdmVkID0gMDtcbiBcbiBcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4gXHR3aGlsZSAobXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpKSB7XG5AQCAtMjI3Myw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCk7XG4gXG4gXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4tXHRcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFx1MDAyNnNrYnMpO1xuIFx0fVxuJiM0MztcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI3ODUsNDQgJiM0MzsyODI4LDIyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NoZWNrX2Zhc3RjbG9zZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7LypcbiYjNDM7ICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cyxcbiYjNDM7ICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXG4mIzQzO1x0XHRcdFx0dTY0IHNlbnRfc2VxKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8gaW5mbyA9IHsgLmRhdGFfbG9ja19oZWxkID0gdHJ1ZSwgfTtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuLVx0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4gXHRzdHJ1Y3Qgc29jayAqc3NrO1xuLVx0aW50IHJldCwgZXJyO1xuLVx0dTE2IGxlbiA9IDA7XG4tXG4tXHRtcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbi1cbi1cdC8qIGZpcnN0IGNoZWNrIHNzazogbmVlZCB0byBraWNrIFwmIzM0O3N0YWxlXCYjMzQ7IGxvZ2ljICovXG4tXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuLVx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4tXHRpZiAoIWRmcmFnKSB7XG4tXHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbi1cdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4tXG4tXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgJiM0MzsgMSk7XG4tXHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4tXHRcdFx0bXB0Y3Bfc2VuZF9hY2sobXNrKTtcbi1cbi1cdFx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0XHR9XG4tXG4tXHRcdGlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSlcbi1cdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbi1cbi1cdFx0Z290byByZXNldF90aW1lcjtcbi1cdH1cbi1cbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gcmVzZXRfdGltZXI7XG4mIzQzO1x0aW50IHJldCwgbGVuID0gMDtcbiBcbiBcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4gXHRcdGlmIChSRUFEX09OQ0Uoc3ViZmxvdy1cdTAwM2VzY2hlZHVsZWQpKSB7XG4mIzQzO1x0XHRcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRcdHUxNiBjb3BpZWQgPSAwO1xuIFxuIFx0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7XG5AQCAtMjgzMiw3ICYjNDM7Mjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0bG9ja19zb2NrKHNzayk7XG4gXG4gXHRcdFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXG4tXHRcdFx0aW5mby5zZW50ID0gMDtcbiYjNDM7XHRcdFx0aW5mby5zZW50ID0gb2Zmc2V0O1xuIFx0XHRcdGluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLVx1MDAzZWNzdW1fZW5hYmxlZCkgPyBkZnJhZy1cdTAwM2VkYXRhX2xlbiA6XG4gXHRcdFx0XHRcdFx0XHRcdCAgICBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQ7XG4gXG5AQCAtMjg0Nyw3ICYjNDM7Mjg2OCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICAgICFtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcbiBcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VmYWxsYmFja19sb2NrKTtcbiBcdFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuLVx0XHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHR3aGlsZSAoaW5mby5zZW50IFx1MDAzYyBpbmZvLmxpbWl0KSB7XG5AQCAtMjg3MCwxMyAmIzQzOzI4OTEsMTA5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0cmVsZWFzZV9zb2NrKHNzayk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuJiM0MztcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xuJiM0MztcdGJvb2wgbmVlZF9yZXRyYW5zO1xuJiM0MztcdHU2NCByZXRyYW5zX3NlcTtcbiYjNDM7XHRpbnQgZXJyLCBsZW47XG4gXG4tXHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuO1xuLVx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4KGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCwgbGVuKTtcbiYjNDM7XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuJiM0MztcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4mIzQzO1x0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbiYjNDM7XHRuZWVkX3JldHJhbnMgPSAhIWRmcmFnO1xuJiM0MztcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbiYjNDM7XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0Z290byBjaGVja19kYXRhX2ZpbjtcbiBcbi1cdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xuLVx0aWYgKGFmdGVyNjQoZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLVx1MDAzZWRhdGFfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4tXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0Ym9vbCBhbHJlYWR5X3JldHJhbnM7XG4mIzQzO1x0XHR1NjQgc2VudF9zZXE7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGRlZmF1bHQgc2NoZWR1bGVyIHdpbGwga2ljayBcJiMzNDtzdGFsZVwmIzM0OyBsb2dpYywgdGhhdCBpblxuJiM0MztcdFx0ICogdHVybiBjYW4gcHJvY2VzcyBpbmNvbWluZyBhY2tzIGFuZCBjbGVhbiB0aGUgUlRYIHF1ZXVlO1xuJiM0MztcdFx0ICogZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGZyYWcgd2lsbCBzdGlsbCBiZSBhcm91bmRcbiYjNDM7XHRcdCAqIGFmdGVyd2FyZHMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGdldF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0ZXJyID0gbXB0Y3Bfc2NoZWRfZ2V0X3JldHJhbnMobXNrKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0cHV0X3BhZ2UoZGZyYWctXHUwMDNlcGFnZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlclxuJiM0MztcdFx0ICogdGhlIGN1cnJlbnQgZGZyYWcsIGlmIHNvIHRyeSB0byBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuJiM0MztcdFx0YWxyZWFkeV9yZXRyYW5zID0gIWJlZm9yZTY0KG1zay1cdTAwM2VzbmRfdW5hLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCk7XG4mIzQzO1x0XHRwdXRfcGFnZShkZnJhZy1cdTAwM2VwYWdlKTtcbiYjNDM7XHRcdGlmIChhbHJlYWR5X3JldHJhbnMpIHtcbiYjNDM7XHRcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjNDM7XHRcdFx0cmV0cmFuc19zZXEgPSBtc2stXHUwMDNlc25kX3VuYTtcbiYjNDM7XHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4mIzQzO1x0XHRcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGFmdGVyNjQobXNrLVx1MDAzZXNuZF91bmEsIHJldHJhbnNfc2VxKSkge1xuJiM0MztcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xuJiM0MztcbiYjNDM7XHRcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXG4mIzQzO1x0XHQgKiAgcXVldWUgZHVlIHRvIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXG4mIzQzO1x0XHRsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuJiM0MztcbiYjNDM7XHRcdHJldHJhbnNfc2VxICYjNDM7PSBsZW47XG4mIzQzO1x0XHRtc2stXHUwMDNlYnl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuO1xuJiM0MztcdFx0ZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50ID0gbWF4X3QodTE2LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgcmV0cmFuc19zZXEgLSBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4mIzQzO1xuJiM0MztcdFx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4mIzQzO1x0XHRzZW50X3NlcSA9IGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCAmIzQzOyBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbiYjNDM7XHRcdGlmIChhZnRlcjY0KHNlbnRfc2VxLCBtc2stXHUwMDNlc25kX254dCkpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBdHRlbXB0IHRoZSBuZXh0IGZyYWdtZW50IG9ubHkgaWYgdGhlIGN1cnJlbnQgb25lIGlzXG4mIzQzO1x0XHQgKiBjb21wbGV0ZWx5IHJldHJhbnNtaXR0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChiZWZvcmU2NChyZXRyYW5zX3NlcSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgJiM0MzsgZGZyYWctXHUwMDNlZGF0YV9sZW4pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRkZnJhZyA9IGxpc3RfaXNfbGFzdChcdTAwMjZkZnJhZy1cdTAwM2VsaXN0LCBcdTAwMjZtc2stXHUwMDNlcnR4X3F1ZXVlKSA/XG4mIzQzO1x0XHRcdFx0TlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7XG4mIzQzO1x0XHRpZiAoIWRmcmFnKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEF0dGVtcHQgZGF0YS1maW4gcmV0cmFuc21pc3Npb24gb25seSB3aGVuIHRoZSBSVFggcXVldWUgaXMgZW1wdHkuICovXG4mIzQzO1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbiYjNDM7Y2hlY2tfZGF0YV9maW46XG4mIzQzO1x0XHRpZiAobXB0Y3BfZGF0YV9maW5fZW5hYmxlZChtc2spKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxuJiM0MztcdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTtcbiYjNDM7XHRcdFx0bXB0Y3Bfc2V0X2RhdGFmaW5fdGltZW91dChzayk7XG4mIzQzO1x0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4mIzQzO1x0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcbiYjNDM7XHR9XG4gXG4gcmVzZXRfdGltZXI6XG4gXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xuQEAgLTM2NzAsMTIgJiM0MzszNzg3LDEyIEBAIHN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuIFx0X19tdXN0X2hvbGQoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jaylcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuJiM0MztcdHUzMiBtb3ZlZCA9IDA7XG4gXG4gXHRmb3IgKDs7KSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLVx1MDAzZWNiX2ZsYWdzIFx1MDAyNiBNUFRDUF9GTEFHU19QUk9DRVNTX0NUWF9ORUVEKTtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBqb2luX2xpc3QsIHNrYnM7XG4gXHRcdGJvb2wgc3Bvb2xfYmw7XG4tXHRcdHUzMiBtb3ZlZDtcbiBcbiBcdFx0c3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticyk7XG4gXHRcdGlmICghZmxhZ3MgXHUwMDI2XHUwMDI2ICFzcG9vbF9ibClcbkBAIC0zNzA4LDkgJiM0MzszODI1LDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jayk7XG4tXHRcdGlmIChzcG9vbF9ibClcbi1cdFx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbiYjNDM7XHRpZiAobW92ZWQpXG4mIzQzO1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbiwgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xuIFxuIFx0aWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgXHUwMDI2bXNrLVx1MDAzZWNiX2ZsYWdzKSlcbiBcdFx0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9pbmNvbWluZ19vcHRpb25zJiMzNDssCiAgICAmIzM0O21wdGNwX2RhdGFfcmVhZHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTVBUQ1AgcHJvdG9jb2wgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBjb25zdHJhaW50cyBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHRoYXQgZHJvcCBwYWNrZXRzIG9yIHBydW5lIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBoYW5kbGUgbXVsdGlwbGUgZnJhZ21lbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU4N2EzMTRjY2MzN2MyZTM0Y2VkYTFkMmFhYTQ2NzAxNWE0N2JmODMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxOTo0NDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuYwppbmRleCBmMjNmZGEwYzU1YTcyMC4uZDliZDRmNGFmY2MwZTcgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9taWIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbWliLmMKQEAgLTg1LDYgJiM0Mzs4NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgbXB0Y3Bfc25tcF9saXN0W10gPSB7CiAJU05NUF9NSUJfSVRFTSgmIzM0O1NpbXVsdENvbm5lY3RGYWxsYmFjayYjMzQ7LCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7RmFsbGJhY2tGYWlsZWQmIzM0OywgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSwKIAlTTk1QX01JQl9JVEVNKCYjMzQ7V2luUHJvYmUmIzM0OywgTVBUQ1BfTUlCX1dJTlBST0JFKSwKJiM0MzsJU05NUF9NSUJfSVRFTSgmIzM0O0JhY2tsb2dEcm9wJiMzNDssIE1QVENQX01JQl9CQUNLTE9HRFJPUCksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtSY3ZQcnVuZWQmIzM0OywgTVBUQ1BfTUlCX1JDVlBSVU5FRCksCiYjNDM7CVNOTVBfTUlCX0lURU0oJiMzNDtPZm9QcnVuZWQmIzM0OywgTVBUQ1BfTUlCX09GT19QUlVORUQpLAogfTsKIAogLyogbXB0Y3BfbWliX2FsbG9jIC0gYWxsb2NhdGUgcGVyY3B1IG1pYiBjb3VudGVycwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oCmluZGV4IDgxMjIxOGI1ZWQyYmZjLi4xOGYzNWY3ZTBhMmQ0ZSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21pYi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9taWIuaApAQCAtODgsNiAmIzQzOzg4LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQgewogCU1QVENQX01JQl9TSU1VTFRDT05ORkFMTEJBQ0ssCS8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovCiAJTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVELAkvKiBDYW4mIzM5O3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi8KIAlNUFRDUF9NSUJfV0lOUFJPQkUsCQkvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqLwomIzQzOwlNUFRDUF9NSUJfQkFDS0xPR0RST1AsCQkvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovCiYjNDM7CU1QVENQX01JQl9SQ1ZQUlVORUQsCQkvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWlucyAqLwomIzQzOwlNUFRDUF9NSUJfT0ZPX1BSVU5FRCwJCS8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi8KIAlfX01QVENQX01JQl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9vcHRpb25zLmMgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCmluZGV4IGM2NjQwMjNkMzdiYThlLi43Yjk1NGVmNzg2NzIzMCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL29wdGlvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jCkBAIC0xMTI3LDggJiM0MzsxMTI3LDMwIEBAIHN0YXRpYyBib29sIGFkZF9hZGRyX2htYWNfdmFsaWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywKIAlyZXR1cm4gaG1hYyA9PSBtcF9vcHQtJmd0O2FobWFjOwogfQogCi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksCi0gKiBlbHNlIHJldHVybiB0cnVlLgomIzQzO3N0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiYjNDM7CXU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CiYjNDM7CW1lbSAmIzQzOz0gUkVBRF9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4pOwomIzQzOwlpZiAobGlrZWx5KG1lbSAmbHQ7PSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBBdm9pZCBzaWxlbnRseSBkcm9wcGluZyBwdXJlIGFja3MsIGZpbiBvciB6ZXJvIHdpbiBwcm9iZXMuICovCiYjNDM7CWlmIChUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSA9PSBUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEgfHwKJiM0MzsJICAgIFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7dGNwX2ZsYWdzICZhbXA7IFRDUEhEUl9GSU4gfHwKJiM0MzsJICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktJmd0O2VuZF9zZXEsIHRjcF9zayhzc2spLSZndDtyY3Zfbnh0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovCiYjNDM7CWluZXRfY3NrKHNzayktJmd0O2ljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7CiYjNDM7CWluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLAomIzQzOyAqIHN1YmZsb3cgaGFzIGJlZW4gcmVzZXQsIG9yIG92ZXIgbWVtb3J5IGxpbWl0cy4KICAqLwogYm9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTExNTQsNyAmIzQzOzExNzYsNyBAQCBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJCV9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LSZndDtjb25uKTsKIAkJbXB0Y3BfZGF0YV91bmxvY2soc3ViZmxvdy0mZ3Q7Y29ubik7Ci0JCXJldHVybiB0cnVlOwomIzQzOwkJcmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctJmd0O2Nvbm4sIHNrLCBza2IpOwogCX0KIAogCW1wdGNwX2dldF9vcHRpb25zKHNrYiwgJmFtcDttcF9vcHQpOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBjYTY0NGVjNTNlZWRiMS4uNWNmNDRlYWI3NmYxYzQgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNzMsNiAmIzQzOzM3Myw0OSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9pbml0X3NrYihzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAogCXNrYl9kc3RfZHJvcChza2IpOwogfQogCiYjNDM7LyogJiMzNDtJbnNwaXJlZCYjMzQ7IGZyb20gdGhlIFRDUCB2ZXJzaW9uOyBtYWluIGRpZmZlcmVuY2U6IHN0b3AgYXMgc29vbiBhcyB0aGUgTVBUQ1AKJiM0MzsgKiBzb2NrZXQgaXMgdW5kZXIgbWVtb3J5IGxpbWl0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG1wdGNwX3BydW5lX29mb19xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHU2NCBzZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7CiYjNDM7CWJvb2wgcHJ1bmVkID0gZmFsc2U7CiYjNDM7CXU2NCBtZW07CiYjNDM7CiYjNDM7CWlmIChSQl9FTVBUWV9ST09UKCZhbXA7bXNrLSZndDtvdXRfb2Zfb3JkZXJfcXVldWUpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW5vZGUgPSAmYW1wO21zay0mZ3Q7b29vX2xhc3Rfc2tiLSZndDtyYm5vZGU7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXN0cnVjdCBza19idWZmICpza2IgPSByYl90b19za2Iobm9kZSk7CiYjNDM7CiYjNDM7CQkvKiBTdG9wIHBydW5pbmcgaWYgdGhlIGluY29taW5nIHNrYiB3b3VsZCBsYW5kIGluIE9vTyB0YWlsLiAqLwomIzQzOwkJaWYgKGFmdGVyNjQoc2VxLCBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7bWFwX3NlcSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlwcnVuZWQgPSB0cnVlOwomIzQzOwkJcHJldiA9IHJiX3ByZXYobm9kZSk7CiYjNDM7CQlyYl9lcmFzZShub2RlLCAmYW1wO21zay0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlKTsKJiM0MzsJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQltc2stJmd0O29vb19sYXN0X3NrYiA9IHJiX3RvX3NrYihwcmV2KTsKJiM0MzsKJiM0MzsJCW1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spOwomIzQzOwkJaWYgKG1lbSAmbHQ7PSBzay0mZ3Q7c2tfcmN2YnVmKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJbm9kZSA9IHByZXY7CiYjNDM7CX0gd2hpbGUgKG5vZGUpOwomIzQzOwomIzQzOwlpZiAocHJ1bmVkKQomIzQzOwkJTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX09GT19QUlVORUQpOwomIzQzOwomIzQzO291dDoKJiM0MzsJbWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7CiYjNDM7CXJldHVybiBtZW0gJmx0Oz0gc2stJmd0O3NrX3JjdmJ1ZjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1NjQgY29weV9sZW4gPSBNUFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7ZW5kX3NlcSAtIE1QVENQX1NLQl9DQihza2IpLSZndDttYXBfc2VxOwpAQCAtMzgxLDYgJiM0Mzs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAKIAltcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpOwogCiYjNDM7CS8qIENhbiYjMzk7dCBkcm9wIHBhY2tldHMgZm9yIGZhbGxiYWNrIHNvY2tldCB0aGlzIGxhdGUsIG9yIHRoZSBzdHJlYW0KJiM0MzsJICogd2lsbCBicmVhay4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseShza19ybWVtX2FsbG9jX2dldChzaykgJmd0OyBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1ZikpICZhbXA7JmFtcDsKJiM0MzsJICAgICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykgJmFtcDsmYW1wOwomIzQzOwkgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEpKSB7CiYjNDM7CQlNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTsKJiM0MzsJCW1wdGNwX2Ryb3Aoc2ssIHNrYik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAlpZiAoTVBUQ1BfU0tCX0NCKHNrYiktJmd0O21hcF9zZXEgPT0gbXNrLSZndDthY2tfc2VxKSB7CiAJCS8qIGluIHNlcXVlbmNlICovCiAJCW1zay0mZ3Q7Ynl0ZXNfcmVjZWl2ZWQgJiM0Mzs9IGNvcHlfbGVuOwpAQCAtNjc1LDYgJiM0Mzs3MjksNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNvY2sgKnNzayA9IHNrYi0mZ3Q7c2s7CiAJYm9vbCBmcmFnc3RvbGVuOwomIzQzOwl1NjQgbGltaXQ7CiAJaW50IGRlbHRhOwogCiAJaWYgKHVubGlrZWx5KHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7CkBAIC02ODIsNiAmIzQzOzczNywxNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywKIAkJcmV0dXJuOwogCX0KIAomIzQzOwkvKiBTaW1pbGFyIGFkZGl0aW9uYWwgYWxsb3dhbmNlIGFzIHBsYWluIFRDUC4gKi8KJiM0MzsJbGltaXQgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3JjdmJ1Zik7CiYjNDM7CWxpbWl0ICYjNDM7PSAobGltaXQgJmd0OyZndDsgMSkgJiM0MzsgNjQgKiAxMDI0OwomIzQzOwlsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTsKJiM0MzsJaWYgKG1zay0mZ3Q7YmFja2xvZ19sZW4gJmd0OyBsaW1pdCAmYW1wOyZhbXA7ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHsKJiM0MzsJCV9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTsKJiM0MzsJCWtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fU09DS0VUX0JBQ0tMT0cpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJLyogVHJ5IHRvIGNvYWxlc2NlIHdpdGggdGhlIGxhc3Qgc2tiIGluIG91ciBiYWNrbG9nICovCiAJaWYgKCFsaXN0X2VtcHR5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QpKQogCQl0YWlsID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7bXNrLSZndDtiYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTsKQEAgLTc1Myw3ICYjNDM7ODE4LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssCiAKIAkJCW1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7CiAKLQkJCWlmIChvd25fbXNrICZhbXA7JmFtcDsgc2tfcm1lbV9hbGxvY19nZXQoc2spICZsdDsgc2stJmd0O3NrX3JjdmJ1ZikgewomIzQzOwkJCWlmIChvd25fbXNrKSB7CiAJCQkJbXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpOwogCQkJCXJldCB8PSBfX21wdGNwX21vdmVfc2tiKHNrLCBza2IpOwogCQkJfSBlbHNlIHsKQEAgLTExMzYsMTMgJiM0MzsxMjAxLDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKIAltcHRjcF93cml0ZV9zcGFjZShzayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKQotewotCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKLQltcHRjcF9kYXRhX3VubG9jayhzayk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKQEAgLTIyMDksMTIgJiM0MzsyMjY3LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHQKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwogCWJvb2wgbW92ZWQgPSBmYWxzZTsKIAotCSpkZWx0YSA9IDA7CiAJd2hpbGUgKDEpIHsKLQkJLyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJiMzOTt0IGRyb3AgKi8KLQkJaWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSAmZ3Q7IHNrLSZndDtza19yY3ZidWYpCi0JCQlicmVhazsKLQogCQlwcmVmZXRjaChza2ItJmd0O25leHQpOwogCQlsaXN0X2RlbCgmYW1wO3NrYi0mZ3Q7bGlzdCk7CiAJCSpkZWx0YSAmIzQzOz0gc2tiLSZndDt0cnVlc2l6ZTsKQEAgLTIyNDIsOSAmIzQzOzIyOTUsNyBAQCBzdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpCiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stJmd0O2JhY2tsb2dfdW5hY2NvdW50ZWQgJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc29ja2V0ICZhbXA7JmFtcDsKIAkJCSAgICAgICBtZW1fY2dyb3VwX2Zyb21fc2soc2spKTsKIAotCS8qIERvbiYjMzk7dCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkgfHwKLQkgICAgc2tfcm1lbV9hbGxvY19nZXQoc2spICZndDsgc2stJmd0O3NrX3JjdmJ1ZikKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCkpCiAJCXJldHVybiBmYWxzZTsKIAogCUlOSVRfTElTVF9IRUFEKHNrYnMpOwpAQCAtMjI1MiwyMCAmIzQzOzIzMDMsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgbW92ZWQsCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKQotewotCXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7Ci0KLQlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7Ci0JbGlzdF9zcGxpY2Uoc2ticywgJmFtcDttc2stJmd0O2JhY2tsb2dfbGlzdCk7Ci19Ci0KIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiB7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7CiAJc3RydWN0IGxpc3RfaGVhZCBza2JzOwogCWJvb2wgZW5xdWV1ZWQgPSBmYWxzZTsKLQl1MzIgbW92ZWQ7CiYjNDM7CXUzMiBtb3ZlZCA9IDA7CiAKIAltcHRjcF9kYXRhX2xvY2soc2spOwogCXdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKSkgewpAQCAtMjI3Myw4ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spCiAJCWVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCAmYW1wO3NrYnMsICZhbXA7bW92ZWQpOwogCiAJCW1wdGNwX2RhdGFfbG9jayhzayk7Ci0JCW1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsICZhbXA7c2ticyk7CiAJfQomIzQzOwlXUklURV9PTkNFKG1zay0mZ3Q7YmFja2xvZ19sZW4sIG1zay0mZ3Q7YmFja2xvZ19sZW4gLSBtb3ZlZCk7CiAJbXB0Y3BfZGF0YV91bmxvY2soc2spOwogCiAJaWYgKGVucXVldWVkICZhbXA7JmFtcDsgbXB0Y3BfZXBvbGxpbl9yZWFkeShzaykpCkBAIC0yNzg1LDQ0ICYjNDM7MjgyOCwyMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaykKIAlza19lcnJvcl9yZXBvcnQoc2spOwogfQogCi1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzOy8qCiYjNDM7ICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cywKJiM0MzsgKiBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsCiYjNDM7CQkJCXU2NCBzZW50X3NlcSkKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07CiAJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93OwotCXN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnOwogCXN0cnVjdCBzb2NrICpzc2s7Ci0JaW50IHJldCwgZXJyOwotCXUxNiBsZW4gPSAwOwotCi0JbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7Ci0KLQkvKiBmaXJzdCBjaGVjayBzc2s6IG5lZWQgdG8ga2ljayAmIzM0O3N0YWxlJiMzNDsgbG9naWMgKi8KLQllcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spOwotCWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwotCWlmICghZGZyYWcpIHsKLQkJaWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkgewotCQkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwotCi0JCQlXUklURV9PTkNFKGljc2stJmd0O2ljc2tfcmV0cmFuc21pdHMsCi0JCQkJICAgaWNzay0mZ3Q7aWNza19yZXRyYW5zbWl0cyAmIzQzOyAxKTsKLQkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwotCQkJbXB0Y3Bfc2VuZF9hY2sobXNrKTsKLQotCQkJZ290byByZXNldF90aW1lcjsKLQkJfQotCi0JCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKLQkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwotCi0JCWdvdG8gcmVzZXRfdGltZXI7Ci0JfQotCi0JaWYgKGVycikKLQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJaW50IHJldCwgbGVuID0gMDsKIAogCW1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7CiAJCWlmIChSRUFEX09OQ0Uoc3ViZmxvdy0mZ3Q7c2NoZWR1bGVkKSkgewomIzQzOwkJCXUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcTsKIAkJCXUxNiBjb3BpZWQgPSAwOwogCiAJCQltcHRjcF9zdWJmbG93X3NldF9zY2hlZHVsZWQoc3ViZmxvdywgZmFsc2UpOwpAQCAtMjgzMiw3ICYjNDM7Mjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spCiAJCQlsb2NrX3NvY2soc3NrKTsKIAogCQkJLyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovCi0JCQlpbmZvLnNlbnQgPSAwOwomIzQzOwkJCWluZm8uc2VudCA9IG9mZnNldDsKIAkJCWluZm8ubGltaXQgPSBSRUFEX09OQ0UobXNrLSZndDtjc3VtX2VuYWJsZWQpID8gZGZyYWctJmd0O2RhdGFfbGVuIDoKIAkJCQkJCQkJICAgIGRmcmFnLSZndDthbHJlYWR5X3NlbnQ7CiAKQEAgLTI4NDcsNyAmIzQzOzI4NjgsNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQogCQkJICAgICFtc2stJmd0O2FsbG93X3N1YmZsb3dzKSB7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDttc2stJmd0O2ZhbGxiYWNrX2xvY2spOwogCQkJCXJlbGVhc2Vfc29jayhzc2spOwotCQkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKIAkJCXdoaWxlIChpbmZvLnNlbnQgJmx0OyBpbmZvLmxpbWl0KSB7CkBAIC0yODcwLDEzICYjNDM7Mjg5MSwxMDkgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaykKIAkJCXJlbGVhc2Vfc29jayhzc2spOwogCQl9CiAJfQomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdzsKJiM0MzsJc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7CiYjNDM7CWJvb2wgbmVlZF9yZXRyYW5zOwomIzQzOwl1NjQgcmV0cmFuc19zZXE7CiYjNDM7CWludCBlcnIsIGxlbjsKIAotCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwotCWRmcmFnLSZndDthbHJlYWR5X3NlbnQgPSBtYXgoZGZyYWctJmd0O2FscmVhZHlfc2VudCwgbGVuKTsKJiM0MzsJbXB0Y3BfZGF0YV9sb2NrKHNrKTsKJiM0MzsJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CWRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spOwomIzQzOwluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CWlmICghZGZyYWcpCiYjNDM7CQlnb3RvIGNoZWNrX2RhdGFfZmluOwogCi0JLyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovCi0JaWYgKGFmdGVyNjQoZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXEsIG1zay0mZ3Q7c25kX254dCkpCi0JCVdSSVRFX09OQ0UobXNrLSZndDtzbmRfbnh0LCBkZnJhZy0mZ3Q7YWxyZWFkeV9zZW50ICYjNDM7IGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCWJvb2wgYWxyZWFkeV9yZXRyYW5zOwomIzQzOwkJdTY0IHNlbnRfc2VxOwomIzQzOwomIzQzOwkJLyogVGhlIGRlZmF1bHQgc2NoZWR1bGVyIHdpbGwga2ljayAmIzM0O3N0YWxlJiMzNDsgbG9naWMsIHRoYXQgaW4KJiM0MzsJCSAqIHR1cm4gY2FuIHByb2Nlc3MgaW5jb21pbmcgYWNrcyBhbmQgY2xlYW4gdGhlIFJUWCBxdWV1ZTsKJiM0MzsJCSAqIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRmcmFnIHdpbGwgc3RpbGwgYmUgYXJvdW5kCiYjNDM7CQkgKiBhZnRlcndhcmRzLgomIzQzOwkJICovCiYjNDM7CQlnZXRfcGFnZShkZnJhZy0mZ3Q7cGFnZSk7CiYjNDM7CQllcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXB1dF9wYWdlKGRmcmFnLSZndDtwYWdlKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEluY29taW5nIGFja3MgY2FuIGhhdmUgbW92ZWQgcmV0cmFucyBzZXF1ZW5jZSBhZnRlcgomIzQzOwkJICogdGhlIGN1cnJlbnQgZGZyYWcsIGlmIHNvIHRyeSB0byBzdGFydCBhZ2FpbiBmcm9tIFJUWCBoZWFkLgomIzQzOwkJICovCiYjNDM7CQltcHRjcF9kYXRhX2xvY2soc2spOwomIzQzOwkJYWxyZWFkeV9yZXRyYW5zID0gIWJlZm9yZTY0KG1zay0mZ3Q7c25kX3VuYSwgZGZyYWctJmd0O2RhdGFfc2VxICYjNDM7CiYjNDM7CQkJCQkgICAgZGZyYWctJmd0O2FscmVhZHlfc2VudCk7CiYjNDM7CQlwdXRfcGFnZShkZnJhZy0mZ3Q7cGFnZSk7CiYjNDM7CQlpZiAoYWxyZWFkeV9yZXRyYW5zKSB7CiYjNDM7CQkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKJiM0MzsJCQlyZXRyYW5zX3NlcSA9IG1zay0mZ3Q7c25kX3VuYTsKJiM0MzsJCQlkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTsKJiM0MzsJCQluZWVkX3JldHJhbnMgPSAhIWRmcmFnOwomIzQzOwkJfSBlbHNlIGlmIChhZnRlcjY0KG1zay0mZ3Q7c25kX3VuYSwgcmV0cmFuc19zZXEpKSB7CiYjNDM7CQkJcmV0cmFuc19zZXEgPSBtc2stJmd0O3NuZF91bmE7CiYjNDM7CQl9CiYjNDM7CQltcHRjcF9kYXRhX3VubG9jayhzayk7CiYjNDM7CiYjNDM7CQkvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWAomIzQzOwkJICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghZGZyYWcgfHwgIWRmcmFnLSZndDthbHJlYWR5X3NlbnQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovCiYjNDM7CQlsZW4gPSBfX21wdGNwX3B1c2hfcmV0cmFucyhzaywgZGZyYWcsIHJldHJhbnNfc2VxKTsKJiM0MzsJCWlmIChsZW4gJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xlYXJfc2NoZWR1bGVkOwomIzQzOwomIzQzOwkJcmV0cmFuc19zZXEgJiM0Mzs9IGxlbjsKJiM0MzsJCW1zay0mZ3Q7Ynl0ZXNfcmV0cmFucyAmIzQzOz0gbGVuOwomIzQzOwkJZGZyYWctJmd0O2FscmVhZHlfc2VudCA9IG1heF90KHUxNiwgZGZyYWctJmd0O2FscmVhZHlfc2VudCwKJiM0MzsJCQkJCSAgICByZXRyYW5zX3NlcSAtIGRmcmFnLSZndDtkYXRhX3NlcSk7CiYjNDM7CiYjNDM7CQkvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi8KJiM0MzsJCXNlbnRfc2VxID0gZGZyYWctJmd0O2FscmVhZHlfc2VudCAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9zZXE7CiYjNDM7CQlpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLSZndDtzbmRfbnh0KSkKJiM0MzsJCQlXUklURV9PTkNFKG1zay0mZ3Q7c25kX254dCwgc2VudF9zZXEpOwomIzQzOwomIzQzOwkJLyogQXR0ZW1wdCB0aGUgbmV4dCBmcmFnbWVudCBvbmx5IGlmIHRoZSBjdXJyZW50IG9uZSBpcwomIzQzOwkJICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoYmVmb3JlNjQocmV0cmFuc19zZXEsIGRmcmFnLSZndDtkYXRhX3NlcSAmIzQzOyBkZnJhZy0mZ3Q7ZGF0YV9sZW4pKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJZGZyYWcgPSBsaXN0X2lzX2xhc3QoJmFtcDtkZnJhZy0mZ3Q7bGlzdCwgJmFtcDttc2stJmd0O3J0eF9xdWV1ZSkgPwomIzQzOwkJCQlOVUxMIDogbGlzdF9uZXh0X2VudHJ5KGRmcmFnLCBsaXN0KTsKJiM0MzsJCWlmICghZGZyYWcpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi8KJiM0MzsJaWYgKCFuZWVkX3JldHJhbnMpIHsKJiM0MztjaGVja19kYXRhX2ZpbjoKJiM0MzsJCWlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHsKJiM0MzsJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiYjNDM7CiYjNDM7CQkJV1JJVEVfT05DRShpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzLAomIzQzOwkJCQkgICBpY3NrLSZndDtpY3NrX3JldHJhbnNtaXRzICYjNDM7IDEpOwomIzQzOwkJCW1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spOwomIzQzOwkJCW1wdGNwX3NlbmRfYWNrKG1zayk7CiYjNDM7CQkJZ290byByZXNldF90aW1lcjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbXB0Y3Bfc2VuZF9oZWFkKHNrKSkKJiM0MzsJCQlnb3RvIGNsZWFyX3NjaGVkdWxlZDsKJiM0MzsJfQogCiByZXNldF90aW1lcjoKIAltcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spOwpAQCAtMzY3MCwxMiAmIzQzOzM3ODcsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spCiAJX19tdXN0X2hvbGQoJmFtcDtzay0mZ3Q7c2tfbG9jay5zbG9jaykKIHsKIAlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spOwomIzQzOwl1MzIgbW92ZWQgPSAwOwogCiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay0mZ3Q7Y2JfZmxhZ3MgJmFtcDsgTVBUQ1BfRkxBR1NfUFJPQ0VTU19DVFhfTkVFRCk7CiAJCXN0cnVjdCBsaXN0X2hlYWQgam9pbl9saXN0LCBza2JzOwogCQlib29sIHNwb29sX2JsOwotCQl1MzIgbW92ZWQ7CiAKIAkJc3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgJmFtcDtza2JzKTsKIAkJaWYgKCFmbGFncyAmYW1wOyZhbXA7ICFzcG9vbF9ibCkKQEAgLTM3MDgsOSAmIzQzOzM4MjUsOSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaykKIAogCQljb25kX3Jlc2NoZWQoKTsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7c2stJmd0O3NrX2xvY2suc2xvY2spOwotCQlpZiAoc3Bvb2xfYmwpCi0JCQltcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCAmYW1wO3NrYnMpOwogCX0KJiM0MzsJaWYgKG1vdmVkKQomIzQzOwkJV1JJVEVfT05DRShtc2stJmd0O2JhY2tsb2dfbGVuLCBtc2stJmd0O2JhY2tsb2dfbGVuIC0gbW92ZWQpOwogCiAJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgJmFtcDttc2stJmd0O2NiX2ZsYWdzKSkKIAkJX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAyMgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNUFRDUCBNZW1vcnkgTWFuYWdlbWVudCBhbmQgUmV0cmFuc21pc3Npb24gRW5oYW5jZW1lbnRzIC0gVGltZSB0byBGdXp6ISoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIE1QVENQIGNvcmUsIHNwZWNpZmljYWxseSBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJldHJhbnNtaXNzaW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIG5ldyBTTk1QIE1JQiBpdGVtcyDigJMgYEJhY2tsb2dEcm9wYCwgYFJjdlBydW5lZGAsIGBPZm9QcnVuZWRgIOKAkyB0byBnaXZlIHVzIGJldHRlciB2aXNpYmlsaXR5IGludG8gaG93IE1QVENQIGlzIGhhbmRsaW5nIG1lbW9yeSBwcmVzc3VyZS4gTW9yZSBpbXBvcnRhbnRseSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFjdHVhbCBtZW1vcnkgbGltaXQgY2hlY2tzIGF0IHNldmVyYWwgcG9pbnRzLiBJJiMzOTttIHNlZWluZyBgbXB0Y3Bfb3Zlcl9saW1pdGAgdGhhdCBkcm9wcyBwYWNrZXRzIHdoZW4gd2UgZXhjZWVkIHRoZSBsaW1pdCwgYW5kIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgLCB3aGljaCBnZXRzIHJpZCBvZiB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIGlmIHdlIGV4Y2VlZCB0aGUgbGltaXQgdG9vLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhZGp1c3RtZW50cyBpbiB0aGUgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGFuZCBgX19tcHRjcF9yZXRyYW5zYCBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZXNlIG5ldyBjb25zdHJhaW50cy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBwcm90b2NvbCBmdW5jdGlvbnMsIGFuZCBiZWNhdXNlIGl0IGRpcmVjdGx5IGltcGFjdHMgY29yZSBsb2dpYyB3aXRoIG1lbW9yeSBoYW5kbGluZywgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuIAoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBMb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSB3aG9sZSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgbW9zdCBvZiB0aGVtIHN0YXRpYy4gTGV0JiMzOTtzIHNlZS4uLgoKTW9kaWZpZWQgZnVuY3Rpb25zOgoqICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgCiogICBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfbW92ZV9za2JgIChzdGF0aWMpCiogICBgX19tcHRjcF9hZGRfYmFja2xvZ2AgKHN0YXRpYykKKiAgIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIChzdGF0aWMpCiogICBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfcHVzaF9yZXRyYW5zYCAoc3RhdGljKQoqICAgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYykKKiAgIGBtcHRjcF9yZWxlYXNlX2NiYCAoc3RhdGljKQoKSGFuZyBvbiwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzICpub24tc3RhdGljKiwgdGhhdCYjMzk7cyBnb29kIG5ld3MuIFRoYXQmIzM5O3MgYSBncmVhdCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGVzZSwgYnV0IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhIGtleSBjYW5kaWRhdGUuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIHN0YXRpYyBuYXR1cmUgb2Ygc29tZXRoaW5nIGxpa2UgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGEgYmFycmllcjsgbm90IHRoYXQgSSBleHBlY3QgaXQgdG8gYmUsIGJ1dCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZy4KCk9rYXksIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBsb29rIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYW55IG9mIHRoZXNlIG1vZGlmaWVkIHN0YXRpYyBvbmVzLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBmdXp6aW5nIGVudHJ5IHBvaW50cyBsaWtlbHkgbGllLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX2luY29taW5nX29wdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaD0xNTY9aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMTU4LVx0XHRcdCAgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XG5pbmNsdWRlL25ldC9tcHRjcC5oOjE1OTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTYwLVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmg9MjY2PXN0YXRpYyBpbmxpbmUgYm9vbCBtcHRjcF9zeW5hY2tfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzItXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI3MzpzdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI3NC1cdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQ4ODQ9dm9pZCB0Y3BfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTAtXHQvKiBtcHRjcCBjYW4mIzM5O3QgdGVsbCB1cyB0byBpZ25vcmUgcmVzZXQgcGt0cyxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ4OTE6XHQgKiBzbyBqdXN0IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIG9mIG1wdGNwX2luY29taW5nX29wdGlvbnMoKS5cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTItXHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTMtXHRpZiAoc2tfaXNfbXB0Y3Aoc2spKVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg5NDpcdFx0bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTUtXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTYwNz1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTYxNi1cdCAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NTYxNzpcdGlmIChza19pc19tcHRjcChzaykgXHUwMDI2XHUwMDI2ICFtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NjE4LVx0XHRfX2tmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTI9dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Mzc5LVx0XHRcdCAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzM4MDpcdFx0XHRpZiAoc2tfaXNfbXB0Y3Aoc2spIFx1MDAyNlx1MDAyNiAhbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzaywgc2tiKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTczODEtXHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0xMDUzPXN0YXRpYyB2b2lkIGFja191cGRhdGVfbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xMDc4LVxubmV0L21wdGNwL29wdGlvbnMuYzoxMDc5Olx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xubmV0L21wdGNwL29wdGlvbnMuYy0xMDgwLVx0aWYgKGFmdGVyNjQobXNrLVx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTEzMD1zdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExNTQtICovXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExNTU6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE1Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRwYXRoIFRDUCBJbmNvbWluZyBPcHRpb25zIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gaG93IE1QVENQIGluY29taW5nIG9wdGlvbnMgYXJlIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHR3byBrZXkgcGxhY2VzIHdpdGhpbiB0aGUgVENQIHN0YWNrOiBgdGNwX2RhdGFfcXVldWVgIGFuZCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCB0byBtYWtlIHN1cmUgaXQgaXMgd29ya2luZyB0aGUgd2F5IEkgaW50ZW5kLgoKTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24sIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcgb2YgYSBjb3VwbGUgb2YgY29yZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgcmV2aWV3IGBfX21wdGNwX3JldHJhbnNgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIFRoZXkmIzM5O3JlIHByb2JhYmx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJldHJhbnNtaXNzaW9uIGFuZCBjb25uZWN0aW9uIHJlbGVhc2UgcGxheSBpbnRvIHRoaXMgb3B0aW9uIHByb2Nlc3NpbmcsIGdpdmVuIHdoZXJlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBzaXR0aW5nIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhvc2UgaXMga2V5IHRvIGRlYnVnZ2luZyBhbmQgaW1wbGVtZW50aW5nIGFueSBuZXcgZmVhdHVyZSBpbiB0aGlzIGFyZWEuIFRpbWUgdG8gZGlnIGluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9yZXRyYW5zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTEwNjM9c3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtLmMtMTA4NC1cdFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGUgPSAxO1xubmV0L21wdGNwL3BtLmM6MTA4NTpcdFx0XHRcdF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xubmV0L21wdGNwL3BtLmMtMTA4Ni1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0OTU9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTMwLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjUzMTpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYxNT1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY2NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2NjU6XHRuZWVkX3B1c2ggPSAoZmxhZ3MgXHUwMDI2IE1QVENQX0NGX1BVU0gpIFx1MDAyNlx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjYtXHRpZiAoIWRpc3Bvc2VfaXQpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODM1PXN0YXRpYyBpbnQgX19tcHRjcF9wdXNoX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjg5NzpzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjg5OC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDk6XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk1MC1cdFx0ICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzEwNj1zdGF0aWMgdm9pZCBtcHRjcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNDMtXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX1dPUktfUlRYLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzE0NDpcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNDUtXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzc4Nj1zdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODE4LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4MTk6XHRcdFx0X19tcHRjcF9yZXRyYW5zKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjAtXHRcdGlmIChzcG9vbF9ibCBcdTAwMjZcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFx1MDAyNnNrYnMsIFx1MDAyNm1vdmVkKSkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgwOD12b2lkIF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMC1cdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjgxMTpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMi12b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTXVsdGlwYXRoIFRDUCBSZXRyYW5zbWlzc2lvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBNUFRDUCBoYW5kbGVzIHJldHJhbnNtaXNzaW9ucywgYW5kIGl0IGxvb2tzIGxpa2UgYF9fbXB0Y3BfcmV0cmFuc2AgaXMgdGhlIGtleSBmdW5jdGlvbi4gSXQmIzM5O3MgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gTm93LCB0aGF0IGBtcHRjcF9yZWxlYXNlX2NiYCBpcyByaW5naW5nIGEgYmVsbC4gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGZvciBNUFRDUCBzb2NrZXRzIQoKSW50ZXJlc3RpbmcuLi4gaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyBgc2stJmd0O3NrX3Byb3QtJmd0O3JlbGVhc2VfY2JgLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhhdCBhc3NvY2lhdGlvbiBpbiBtaW5kLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHJlbGVhc2luZyB0aGUgc29ja2V0IGFuZCByZXRyYW5zbWlzc2lvbnMuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb2RlIGZvciBgbXB0Y3BfcmVsZWFzZV9jYmAgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBzZWUgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkaWcgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9yZWxlYXNlX2NiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTM3NzM9dm9pZCBfX21wdGNwX2NoZWNrX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3ODUtLyogcHJvY2Vzc2VzIGRlZmVycmVkIGV2ZW50cyBhbmQgZmx1c2ggd21lbSAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6Mzc4NjpzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3ODctXHRfX211c3RfaG9sZChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQxODk9c3RhdGljIHN0cnVjdCBwcm90byBtcHRjcF9wcm90ID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDItXHQucmVjdm1zZ1x0PSBtcHRjcF9yZWN2bXNnLFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwMzpcdC5yZWxlYXNlX2NiXHQ9IG1wdGNwX3JlbGVhc2VfY2IsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjA0LVx0Lmhhc2hcdFx0PSBtcHRjcF9oYXNoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTE3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzICZhbXA7IEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBUaGlzIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyB0aGUgY29yZSBjYWxsYmFjayBmb3IgcmVsZWFzaW5nIHNvY2tldHMsIGFuZCB0aGlzIHBhdGNoIGhhcyBjbGVhcmx5IG1hZGUgc29tZSBrZXkgY2hhbmdlcy4gVGhleSYjMzk7cmUgdHJhY2tpbmcgJiMzOTttb3ZlZCYjMzk7IGFuZCBhZGp1c3RpbmcgYG1zay0mZ3Q7YmFja2xvZ19sZW5gIHdpdGhpbiBpdC4gSW50ZXJlc3RpbmcuIE9uIHRvcCBvZiB0aGF0LCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgbm93IGNoZWNraW5nIGZvciBgbXB0Y3Bfb3Zlcl9saW1pdGAsIGFuZCBgX19tcHRjcF9tb3ZlX3NrYmAgaXMgY2FsbGluZyBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYC4gRmluYWxseSwgdGhlIG1vZGlmaWNhdGlvbiBvZiBgX19tcHRjcF9hZGRfYmFja2xvZ2AgaXMgY2hlY2tpbmcgdGhlIGBtc2stJmd0O2JhY2tsb2dfbGVuICZndDsgbGltaXRgLCB3aGlsZSB0aGUgYF9fbXB0Y3BfcmV0cmFuc2AgZnVuY3Rpb24gaGFzIGJlZW4gbW9kaWZpZWQgdG8gcmV0cmFuc21pdCBtdWx0aXBsZSBmcmFnbWVudHMuCgpHaXZlbiB0aGUgc2NvcGUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGVudHJ5IHBvaW50cy4gRnJvbSBhIGN1cnNvcnkgZ2xhbmNlLCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF93b3JrZXJgIHdoaWNoIHRoZW4gY2FsbHMgYF9fbXB0Y3BfcmV0cmFuc2Agc2VlbSBsaWtlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIEFuZCwgb2YgY291cnNlLCB0aGF0IG1vZGlmaWVkIGBtcHRjcF9yZWxlYXNlX2NiYCwgdGhvdWdoIGl0JiMzOTtzIG1hcmtlZCBhcyBzdGF0aWMuIEhtbS4uLiBpdCYjMzk7cyBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFyZ2V0IGZyb20gYHJlbGVhc2Vfc29ja2AsIHNvIHRoYXQgY2hhbmdlcyB0aGluZ3MuIElzIHRoYXQgYSBnb29kIGZvY3VzIHN5bWJvbD8gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgZ2l2ZXMgbWUgcGF1c2UsIGJ1dCBpdCYjMzk7cyAqZGVmaW5pdGVseSogYSBmdW5jdGlvbiBwb2ludGVyIHNvIGl0JiMzOTtzIGEgc29saWQgdGFyZ2V0LgoKTGV0JiMzOTtzIHNlZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgICppcyogbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBpcyB0aGVyZSAqYW55KiBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzPyBgbXB0Y3BfcmVjdm1zZ2AgaXNuJiMzOTt0IG1vZGlmaWVkIHNvIHRoYXQmIzM5O3Mgb3V0LiBJcyBgbXB0Y3Bfd29ya2VyYCBzdGF0aWM/IFllcywgaXQgaXMuIEFscmlnaHQsIGJhY2sgdG8gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgYXMgdGhlIHByaW1hcnkgZm9jdXMsIHRoZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3dvcmtlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMDczPWJvb2wgbXB0Y3Bfc2NoZWR1bGVfd29yayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzg6XHQvKiBHZXQgYSByZWZlcmVuY2Ugb24gdGhpcyBzb2NrZXQsIG1wdGNwX3dvcmtlcigpIHdpbGwgcmVsZWFzZSBpdC5cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzk6XHQgKiBBcyBtcHRjcF93b3JrZXIoKSBtaWdodCBjb21wbGV0ZSBiZWZvcmUgdXMsIHdlIGNhbiBub3QgYXZvaWRcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwODAtXHQgKiBhIHNvY2tfaG9sZCgpL3NvY2tfcHV0KCkgaWYgc2NoZWR1bGVfd29yaygpIHJldHVybnMgZmFsc2UuXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYxNT1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY1MC1cdCAgICAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpIHx8IHNvY2tfZmxhZyhzc2ssIFNPQ0tfREVBRCkpKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjUxOlx0XHQvKiBlbnN1cmUgbGF0ZXIgY2hlY2sgaW4gbXB0Y3Bfd29ya2VyKCkgd2lsbCBkaXNwb3NlIHRoZSBtc2sgKi9cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTItXHRcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mjc4Mj1zdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODIyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjgyMzpcdC8qIHRoZSBjYWxsaW5nIG1wdGNwX3dvcmtlciB3aWxsIHByb3Blcmx5IGRlc3Ryb3kgdGhlIHNvY2tldCAqL1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjgyNC1cdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzA3MD1zdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxMDUtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTA2OnN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTA3LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTU1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTYyLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTYzOlx0SU5JVF9XT1JLKFx1MDAyNm1zay1cdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzE2NC1cdG1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM2NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNUFRDUCBEYXRhIFN0cnVjdHVyZXMqKgoKT2theSwgc28gYG1wdGNwX3dvcmtlcmAgaXMgZGVmaW5pdGVseSBzdGF0aWMsIHRoYXQmIzM5O3MgY2xlYXIuIEJ1dCBJJiMzOTttIG5vdyBkaWdnaW5nIGRlZXBlciwgYW5kIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBhYm91dCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2A/IEFoLCB0aGF0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGxpa2VseSBtb3JlIHdpZGVseSBhY2Nlc3NpYmxlIGFuZCBwb3RlbnRpYWxseSBtb2RpZmllZCBpbiB2YXJpb3VzIGNvbnRleHRzLiBHb29kIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGNoZWNrIGBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zYCwgaXQgbG9va3MgbGlrZSB0aGlzIG9uZSBpc24mIzM5O3QgbW9kaWZpZWQgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIGBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0YCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIG1vZGlmaWVkIGVpdGhlciwgaW50ZXJlc3RpbmcuIFNpbmNlIEkgYW0gZXhhbWluaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5IGlzc3VlcywgSSB0aGluayBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGFueSBjYWxsIHNpdGVzIHRvIGBfX21wdGNwX2FkZF9iYWNrbG9nYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19tcHRjcF9hZGRfYmFja2xvZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MTY9c3RhdGljIHZvaWQgbXB0Y3BfZHNzX2NvcnJ1cHRpb24oc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3MjQ6c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjUtXHRcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93LFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTc3Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MjQtXHRcdFx0fSBlbHNlIHtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjgyNTpcdFx0XHRcdF9fbXB0Y3BfYWRkX2JhY2tsb2coc2ssIHN1YmZsb3csIHNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy04MjYtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IFBlcnNwZWN0aXZlIG9uIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRhdGEgZmxvdyB3aXRoaW4gTXVsdGlwYXRoIFRDUCwgYW5kIGhvdyB3ZSBoYW5kbGUgaW5jb21pbmcgZGF0YS4gYG1wdGNwX2RhdGFfcmVhZHlgLCB0aGF0JiMzOTtzIHRoZSB0cmlnZ2VyLCByaWdodD8gU29tZXRoaW5nIGFycml2ZXMsIHNvbWV0aGluZyBzaWduYWxzIHRoYXQgZGF0YSBpcyBhdmFpbGFibGUgb24gYSBzdWJmbG93LiBOb3csIHRoYXQmIzM5O3Mgd2hlcmUgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgY29tZXMgaW4uIEl0JiMzOTtzIGxpa2UgdGhlIHdvcmtob3JzZSBvZiB0aGUgb3BlcmF0aW9uLgoKRXNzZW50aWFsbHksIEkgc2VlIGBtcHRjcF9kYXRhX3JlYWR5YCBhcyB0aGUgbm90aWZpY2F0aW9uLCB0aGUgJiMzNDtIZXksIHRoZXJlJiMzOTtzIHdvcmsgdG8gYmUgZG9uZSEmIzM0OyBzaWduYWwuIFRoZW4sIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIHN0ZXBzIHVwIGFuZCBhY3R1YWxseSBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nOiB0YWtpbmcgdGhlIHBhY2tldHMgKHRoZSBgc2tic2ApIHRoYXQgYXJlIHJlYWR5IG9uIGEgc3BlY2lmaWMgc3ViZmxvdyBhbmQgZ2V0dGluZyB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnbyB3aXRoaW4gdGhlIE11bHRpcGF0aCBUQ1AgY29ubmVjdGlvbi4gSXQmIzM5O3MgdGhlIG1lY2hhbmlzbSwgdGhlIGNvbmNyZXRlIGFjdGlvbiB0YWtlbiB0byBpbnRlZ3JhdGUgdGhlIGluY29taW5nIGRhdGEgZnJvbSBhIHNwZWNpZmljIHN1YmZsb3cgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2YgdGhlIE1QVENQIGNvbm5lY3Rpb24uIFNvIGl0JiMzOTtzIG5vdCBhIHN0YW5kYWxvbmUgZnVuY3Rpb24sIGl0JiMzOTtzIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGV2ZW50LCB0aGUgcmVhZGluZXNzIGZvciB0aGUgcGFja2V0cyBhbmQgdGhlIGFjdGlvbnMgdGhhdCBmb2xsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MjQ9c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNzc2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6Nzc3OnN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzc4LVx0XHRcdFx0XHQgICBzdHJ1Y3Qgc29jayAqc3NrLCBib29sIG93bl9tc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9OTQxPXN0YXRpYyBib29sIG1vdmVfc2tic190b19tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDUtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5NDY6XHRtb3ZlZCA9IF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgdHJ1ZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NDctXHRfX21wdGNwX29mb19xdWV1ZShtc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk4Nz12b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDUtXHR9IGVsc2Uge1xubmV0L21wdGNwL3Byb3RvY29sLmM6MTAwNjpcdFx0X19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCBmYWxzZSk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDA3LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU5NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBNUFRDUCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG1wdGNwX2RhdGFfcmVhZHlgIGZ1bmN0aW9uLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzICpub3QqIHN0YXRpYyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBzY29wZSwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uIEJvdGggYG1wdGNwX2RhdGFfcmVhZHlgIGFuZCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaGF2ZSBwaXF1ZWQgbXkgaW50ZXJlc3QuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMsIGluIGZhY3QsIG5vbi1zdGF0aWMuIElmIGl0JiMzOTtzIG5vdCBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSwgSSB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZCBhY3Jvc3MgdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB1c2VkIGVsc2V3aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCBpbiBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIHByb2plY3QuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX2RhdGFfcmVhZHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9OTYxPXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9ydHRfdXBkYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTg2LVxubmV0L21wdGNwL3Byb3RvY29sLmM6OTg3OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05ODgte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTk1Nj1zdGF0aWMgaW5saW5lIHU2NCBtcHRjcF9zdGFtcCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2MC1cbm5ldC9tcHRjcC9wcm90b2NvbC5oOjk2MTp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2Mi1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzayk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTA2PXN0YXRpYyB2b2lkIHN1YmZsb3dfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTMwLVx0aWYgKG1wdGNwX3N1YmZsb3dfZGF0YV9hdmFpbGFibGUoc2spKSB7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1MzE6XHRcdG1wdGNwX2RhdGFfcmVhZHkocGFyZW50LCBzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1MzItXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xODc0PXN0YXRpYyB2b2lkIHN1YmZsb3dfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODUtXHRpZiAobXB0Y3Bfc3ViZmxvd19kYXRhX2F2YWlsYWJsZShzaykpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4ODY6XHRcdG1wdGNwX2RhdGFfcmVhZHkocGFyZW50LCBzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODctXHRlbHNlIGlmICh1bmxpa2VseShzay1cdTAwM2Vza19lcnIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM1MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRGF0YSBSZWFkaW5lc3MgaW4gTXVsdGlwYXRoIFRDUCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgZGF0YSByZWFkaW5lc3MgaXMgaGFuZGxlZCBpbiBNdWx0aXBhdGggVENQLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBtcHRjcF9kYXRhX3JlYWR5YCBpcyBjYWxsZWQgZnJvbSB0d28ga2V5IGZ1bmN0aW9uczogYHN1YmZsb3dfZGF0YV9yZWFkeWAgYW5kIGBzdWJmbG93X3N0YXRlX2NoYW5nZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgKmFueSogb3RoZXIgZW50cnkgcG9pbnRzPyBJIG5lZWQgdG8gYmUgY29tcHJlaGVuc2l2ZSBoZXJlLgoKTGV0IG1lIHRoaW5r4oCmIHdoYXQgYWJvdXQgYG1wdGNwX3JlY3Ztc2dgPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIGRhdGEsIGFuZCBJIHJlY2FsbCBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zIHRvIGBtcHRjcF9tb3ZlX3NrYnNgLiBBaCwgcmlnaHQsIGBtcHRjcF9yZWN2bXNnYCAqZG9lcyogY2FsbCBgbXB0Y3BfbW92ZV9za2JzYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEdpdmVuIHRoZSBtb2RpZmljYXRpb24sIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBpcyBhbiBpbXBhY3QgcG9pbnQuCgpPa2F5LCBsZXQmIzM5O3MgYmFjayB1cC4gV2hlcmUgZWxzZSBpcyBgbXB0Y3BfbW92ZV9za2JzYCBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHRyYWNlICphbGwqIHRoZSBjYWxsZXJzIG9mIGBtcHRjcF9tb3ZlX3NrYnNgIG5vdyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIGRhdGEgcmVhZGluZXNzIGFuZCwgcG90ZW50aWFsbHksIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIHdpbGwgcHJvdmlkZSBhIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3BfbW92ZV9za2JzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTcyND1zdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzYtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo3Nzc6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzgtXHRcdFx0XHRcdCAgIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgb3duX21zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NDE9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NjpcdG1vdmVkID0gX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KG1zaywgc3NrLCB0cnVlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk0Ny1cdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9OTg3PXZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTAwNS1cdH0gZWxzZSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA2Olx0XHRfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3cobXNrLCBzc2ssIGZhbHNlKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDctXHR9XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjIxMD1zdGF0aWMgdm9pZCBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBjb3BpZWQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjI2My1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIyNjQ6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRhKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjI2NS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjI4OD1zdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjMwNS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMDY6c3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMDcte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTUtXHRcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMTY6XHRcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcdTAwMjZza2JzLCBcdTAwMjZtb3ZlZCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzE3LVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzNTA9c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMzk0Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkgXHUwMDI2XHUwMDI2IG1wdGNwX21vdmVfc2ticyhzaykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzk1LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3ODY9c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgxOS1cdFx0XHRfX21wdGNwX3JldHJhbnMoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzgyMDpcdFx0aWYgKHNwb29sX2JsIFx1MDAyNlx1MDAyNiBfX21wdGNwX21vdmVfc2ticyhzaywgXHUwMDI2c2ticywgXHUwMDI2bW92ZWQpKSB7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODIxLVx0XHRcdC8qIG5vdGlmeSBhY2sgc2VxIHVwZGF0ZSAqL1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQwNzg9c3RhdGljIGludCBtcHRjcF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDg4LVx0XHRsb2NrX3NvY2soc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDA4OTpcdFx0aWYgKG1wdGNwX21vdmVfc2ticyhzaykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDkwLVx0XHRcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIDApO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ0OTU9c3RhdGljIHN0cnVjdCBza19idWZmICptcHRjcF9yZWN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqb2ZmKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ1MDEtXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0NTAyOlx0XHRtcHRjcF9tb3ZlX3NrYnMoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtNDUwMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5MTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBNUFRDUCBEYXRhIEZsb3cqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgbXVsdGktcGF0aCBUQ1AgaW1wbGVtZW50YXRpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIG1vdmVzIGFyb3VuZC4gSXQgc2VlbXMgbGlrZSBgbXB0Y3BfcmVjdm1zZ2AgYW5kIGBtcHRjcF9pb2N0bGAgYXJlIGtleSBlbnRyeSBwb2ludHMsIGJvdGggb2Ygd2hpY2ggZXZlbnR1YWxseSBjYWxsIGBtcHRjcF9tb3ZlX3NrYnNgLiBUaGF0IGBtcHRjcF9yZWN2bXNnYCBmdW5jdGlvbiBsb29rcyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2QgcGxhY2UgdG8gZm9jdXMgb24gYXMgYSBzdGFydGluZyBwb2ludC4KCk5vdywgSSBhbHNvIHNlZSB0aGF0IGBfX21wdGNwX3JldHJhbnNgIGlzIHRyaWdnZXJlZCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gSSYjMzk7bGwgd2FudCB0byByZW1lbWJlciB0aGlzIHNpbmNlIHJldHJhbnNtaXNzaW9ucyBhcmUgY3JpdGljYWwuIGBtcHRjcF93b3JrZXJgIGl0c2VsZiBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgaW4gdHJhY2luZyB0aGUgcGF0aC4gTm93IHRoZSBxdWVzdGlvbiBpcywgd2hhdCB0cmlnZ2VycyBgbXB0Y3Bfd29ya2VyYD8gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIHdvcmtxdWV1ZSBpcyBzY2hlZHVsZWQgYW5kIGV4ZWN1dGVkLgoKQWgsIGhlcmUmIzM5O3MgYG1wdGNwX3NjaGVkdWxlX3dvcmtgIHdoaWNoIHNlZW1zIHRvIGJlIG5vbi1zdGF0aWMuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCBvZiBlbnRyeSBhbmQgb3JjaGVzdHJhdGlvbiBmb3IgTVBUQ1Agb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGdvb2QgbGVhZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXB0Y3Bfc2NoZWR1bGVfd29yayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jPTExNTU9Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTExOTMtXHRcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlcmN2X2Zhc3RjbG9zZSwgdHJ1ZSk7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExOTQ6XHRcdFx0bXB0Y3Bfc2NoZWR1bGVfd29yaygoc3RydWN0IHNvY2sgKiltc2spO1xubmV0L21wdGNwL29wdGlvbnMuYy0xMTk1LVx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9NUEZBU1RDTE9TRVJYKTtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyNTAtXHRcdCAgICBtcHRjcF91cGRhdGVfcmN2X2RhdGFfZmluKG1zaywgbXBfb3B0LmRhdGFfc2VxLCBtcF9vcHQuZHNuNjQpKVxubmV0L21wdGNwL29wdGlvbnMuYzoxMjUxOlx0XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoKHN0cnVjdCBzb2NrICopbXNrKTtcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTI1Mi1cbi0tXG5uZXQvbXB0Y3AvcG0uYz01OTI9c3RhdGljIGJvb2wgbXB0Y3BfcG1fc2NoZWR1bGVfd29yayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTYwMC1cdG1zay1cdTAwM2VwbS5zdGF0dXMgfD0gQklUKG5ld19zdGF0dXMpO1xubmV0L21wdGNwL3BtLmM6NjAxOlx0bXB0Y3Bfc2NoZWR1bGVfd29yaygoc3RydWN0IHNvY2sgKiltc2spO1xubmV0L21wdGNwL3BtLmMtNjAyLVx0cmV0dXJuIHRydWU7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9OTQxPXN0YXRpYyBib29sIG1vdmVfc2tic190b19tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NTYtXHRpZiAobXB0Y3BfcGVuZGluZ19kYXRhX2ZpbihzaywgTlVMTCkpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo5NTc6XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtOTU4LVx0cmV0dXJuIG1vdmVkO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwNjE9c3RhdGljIHZvaWQgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMDcyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA3Mzpib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3NC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTEzNz1zdGF0aWMgdm9pZCBfX21wdGNwX2NsZWFuX3VuYShzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTE5Mi1cdGlmIChtcHRjcF9wZW5kaW5nX2RhdGFfZmluX2FjayhzaykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMTkzOlx0XHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExOTQtfVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE3OTM9c3RhdGljIHZvaWQgX19tcHRjcF9zdWJmbG93X3B1c2hfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGJvb2wgZmlyc3QpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTg1NS1cdFx0ICAgIG1zay1cdTAwM2VzbmRfbnh0ICYjNDM7IDEgPT0gbXNrLVx1MDAzZXdyaXRlX3NlcSlcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE4NTY6XHRcdFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODU3LVx0fVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0NjI9c3RhdGljIHZvaWQgbXB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDcwLVx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoTVBUQ1BfV09SS19SVFgsIFx1MDAyNm1zay1cdTAwM2VmbGFncykpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDcxOlx0XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMjQ3Mi1cdH0gZWxzZSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ4MD1zdGF0aWMgdm9pZCBtcHRjcF90b3V0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0ODUtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNDg2Olx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDg3LVx0c29ja19wdXQoc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMyNTY9dm9pZCBtcHRjcF9zdWJmbG93X3NodXRkb3duKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgaW50IGhvdylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjc3LVx0XHRcdFdSSVRFX09OQ0UobXB0Y3Bfc2soc2spLVx1MDAzZXNuZF91bmEsIG1wdGNwX3NrKHNrKS1cdTAwM2VzbmRfbnh0KTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNzg6XHRcdFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjc5LVx0XHR9IGVsc2Uge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTk2Mj1ib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5NjM6Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05NjQtaW50IG1wdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NDMwPXZvaWQgbXB0Y3Bfc3ViZmxvd19yZXNldChzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQ2LVx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1QVENQX1dPUktfQ0xPU0VfU1VCRkxPVywgXHUwMDI2bXB0Y3Bfc2soc2spLVx1MDAzZWZsYWdzKSlcbm5ldC9tcHRjcC9zdWJmbG93LmM6NDQ3Olx0XHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQ4LVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTEwOT1zdGF0aWMgZW51bSBtYXBwaW5nX3N0YXR1cyBnZXRfbWFwcGluZ19zdGF0dXMoc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzUtXHRcdFx0aWYgKHVwZGF0ZWQpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjExNzY6XHRcdFx0XHRtcHRjcF9zY2hlZHVsZV93b3JrKChzdHJ1Y3Qgc29jayAqKW1zayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTExNzctXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjg5PXN0YXRpYyB2b2lkIHN1YmZsb3dfc2NoZWRfd29ya19pZl9jbG9zZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEzMDItXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoTVBUQ1BfV09SS19DTE9TRV9TVUJGTE9XLCBcdTAwMjZtc2stXHUwMDNlZmxhZ3MpKVxubmV0L21wdGNwL3N1YmZsb3cuYzoxMzAzOlx0XHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTMwNC1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEzMTEtXHRcdFx0XHQgICAgICBzdWJmbG93LVx1MDAzZW1hcF9kYXRhX2xlbiwgdHJ1ZSkpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEzMTI6XHRcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMzEzLX1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIwMDQ9c3RhdGljIHZvaWQgc3ViZmxvd191bHBfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAyNS1cdFx0XHRcdFx0XHQgIFx1MDAyNm1wdGNwX3NrKHNrKS1cdTAwM2VmbGFncykpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwMjY6XHRcdFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwMjctXHRcdHNvY2tfcHV0KHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxODgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG5hdmlnYXRpbmcgdGhpcyBrZXJuZWwgbW9kdWxlOgoKKipJbnZlc3RpZ2F0aW5nIE1QVENQIEVudHJ5IFBvaW50cyBhbmQgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfZGF0YV9yZWFkeWAsIGFuZCBgbXB0Y3BfcmVjdm1zZ2AuLi4gdGhlc2UgZmVlbCBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZW50cnkgcG9pbnRzIG9mIHRoaXMgTVBUQ1AgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBob29rZWQgaW50byB0aGUgbmV0d29ya2luZyBzdGFjay4gQmVmb3JlIEkgZGlnIHRvbyBkZWVwbHkgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWUgY3JpdGljYWwgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBgQ09ORklHYCBvcHRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIE1QVENQIGZlYXR1cmUgdG8gYmUgYWN0aXZlLgoKU2luY2UgdGhlIGNvZGUgaXMgY2xlYXJseSBpbiBgbmV0L21wdGNwL2AsIHRoYXQgc2ltcGxpZmllcyB0aGUgc2VhcmNoLiBJJiMzOTtsbCBjaGVjayB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGZpbGVzIOKAkyBlaXRoZXIgdGhlIG9uZSBkaXJlY3RseSBpbiBgbmV0L21wdGNwL0tjb25maWdgLCBvciBmYWlsaW5nIHRoYXQsIEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNlYXJjaCB0byB0aGUgbWFpbiBgbmV0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbW9yZSBoaWdoLWxldmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgZGVwZW5kZW5jaWVzIG9yIGZsYWdzIHRoYXQgY29udHJvbCB0aGUgY29tcGlsYXRpb24gYW5kIGFjdGl2YXRpb24gb2YgdGhpcyBNUFRDUCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NjgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTVBUQ1AgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSBzZWUgYE1QVENQYCBpcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgaXRzIGZvdW5kYXRpb24/IEEgcXVpY2sgbWVudGFsIHNjYW4gdGVsbHMgbWUgdGhhdCBgTVBUQ1BgIHJlbGllcyBvbiB0aGUgYElORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY29ycmVjdCBhbmQgdGFrZSBhIGRlZXBlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMuIEkga25vdyB0aGUgS2NvbmZpZyBmaWxlIGZvciBgTVBUQ1BgIHNob3VsZCBoYXZlIHRoZSBhbnN3ZXJzLCBzbyBJJiMzOTtsbCBqdW1wIGludG8gYG5ldC9tcHRjcC9LY29uZmlnYCB0byBjaGVjayBvdXQgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjE4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIENvbmZpZ3VyYXRpb24gYW5kIENvcmUgTG9naWMgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGtleSBsb2dpYyBwb2ludHMgZm9yIE11bHRpUGF0aCBUQ1AgKE1QVENQKS4gVGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBlbGVtZW50IGlzIGNsZWFybHkgYE1QVENQYCwgd2hpY2ggSSYjMzk7bGwgYWRkIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEkgZG9uJiMzOTt0IHRoaW5rIEkgbmVlZCB0byBicmluZyBpbiBgTVBUQ1BfSVBWNmAganVzdCB5ZXQsIGFzIGBNUFRDUGAgaXRzZWxmIHNob3VsZCBiZSB0aGUgY29yZSBlbmFibGVyLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYE1QVENQYCBpcyBhIGJvb2xlYW4gYW5kIG5vdCBhIHRyaXN0YXRlLCBhbmQgeWVzLCBpdCYjMzk7cyBhIGJvb2wsIHNvIGp1c3QgZW5hYmxpbmcgaXQgaXMgZW5vdWdoLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYSBzaG9ydGxpc3Q6CgoqICAgYG1wdGNwX2luY29taW5nX29wdGlvbnNgOiBUaGlzIGNhbGxzIGBtcHRjcF9vdmVyX2xpbWl0YC4KKiAgIGBtcHRjcF9kYXRhX3JlYWR5YDogV2hpY2ggY2FsbHMgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AuIFRoYXQgaW4gdHVybiBjYWxscyBgX19tcHRjcF9hZGRfYmFja2xvZ2AgYW5kIGBfX21wdGNwX21vdmVfc2tiYCwgYW5kIGZpbmFsbHkgYG1wdGNwX3BydW5lX29mb19xdWV1ZWAuCiogICBgbXB0Y3BfcmVjdm1zZ2A6IFRoaXMgZnVuY3Rpb24gaXMgbGlua2VkIHRvIGBtcHRjcF9tb3ZlX3NrYnNgIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fbXB0Y3BfbW92ZV9za2JzYC4KCkkgc2hvdWxkIGNoZWNrIHRoZSBgX19tcHRjcF9yZXRyYW5zYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgYnkgYG1wdGNwX3JlbGVhc2VfY2JgIGFuZCBgbXB0Y3Bfd29ya2VyYC4gYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHRoZSByZWxlYXNlIGNhbGxiYWNrIGZvciB0aGUgc29ja2V0LCB0cmlnZ2VyZWQgd2hlbiB0aGUgc29ja2V0IGxvY2sgaXMgcmVsZWFzZWQuIEFuZCBgbXB0Y3Bfd29ya2VyYCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbi4gSXMgdGhlcmUgYW55dGhpbmcgb3V0c2lkZSBvZiBNUFRDUCBjYWxsaW5nIHRoYXQgYG1wdGNwX3JlbGVhc2VfY2JgPyBJIHNlZSBgcmVsZWFzZV9zb2NrYCBjYWxscyBpdC4gVGhpcyBpcyBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiwgbm90IHNwZWNpZmljIHRvIE1QVENQLCBzbyB0aGVzZSB0aHJlZSBmdW5jdGlvbnMgYXJlIHN0aWxsIHRoZSBrZXkgb25lcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUgZm9jdXMgZnVuY3Rpb25zLiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgaW4gYG5ldC9tcHRjcC9vcHRpb25zLmNgIGFuZCBpcyBpbmRlZWQgZXhwb3J0ZWQgaW4gYGluY2x1ZGUvbmV0L21wdGNwLmhgLiBHcmVhdC4gQW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBpcyBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGFuZCBpcyBleHBvcnRlZCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmhgLiBOb3csIGBtcHRjcF9yZWN2bXNnYC4uLiBXYWl0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3JlY3Ztc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmM9MjExMj1zdGF0aWMgdm9pZCBtcHRjcF9lYXRfcmVjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxMjItXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTIzOnN0YXRpYyBpbnQgX19tcHRjcF9yZWN2bXNnX21za3Eoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMTI0LVx0XHRcdFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTIzMjk9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM0OS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzNTA6c3RhdGljIGludCBtcHRjcF9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM1MS1cdFx0XHQgaW50IGZsYWdzKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzODItXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMzgzOlx0XHRieXRlc19yZWFkID0gX19tcHRjcF9yZWN2bXNnX21za3Eoc2ssIG1zZywgbGVuIC0gY29waWVkLCBmbGFncyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzODQtXHRcdFx0XHRcdFx0ICBjb3BpZWQsIFx1MDAyNnRzcywgXHUwMDI2Y21zZ19mbGFncyxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTg5PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjAxLVx0LmlvY3RsXHRcdD0gbXB0Y3BfaW9jdGwsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjAyOlx0LnJlY3Ztc2dcdD0gbXB0Y3BfcmVjdm1zZyxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDMtXHQucmVsZWFzZV9jYlx0PSBtcHRjcF9yZWxlYXNlX2NiLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc3NwoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpZ2dpbmcgaW50byB0aGUgTVBUQ1AgQ29kZSoqCgpSaWdodCwgc28gYG1wdGNwX3JlY3Ztc2dgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGxpbWl0cyBpdHMgZGlyZWN0IHVzYWJpbGl0eSwgdW5mb3J0dW5hdGVseS4gTXkgZ29hbCBpcyB0byBmaW5kIGEgZnVuY3Rpb24sIGlkZWFsbHkgbm9uLXN0YXRpYywgdGhhdCBlaXRoZXIgY2FsbHMgYG1wdGNwX3JlY3Ztc2dgIG9yIGlzIHNvbWVob3cgZGlyZWN0bHkgcmVsYXRlZCB0byBpdCB3aXRoaW4gdGhlIE11bHRpUGF0aCBUQ1AgaW1wbGVtZW50YXRpb24uIFNpbmNlIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gYG1wdGNwX3Byb3RgLCBteSB0aGlua2luZyBpcyB0byBpbnZlc3RpZ2F0ZSBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGZpcnN0LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBhcyB0aG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBJJiMzOTttIGxpa2VseSBhZnRlci4gVGhpcyBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgTVBUQ1AgYXJjaGl0ZWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX11bYS16QS1aMC05X10qIG1wdGNwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wcm90b2NvbC5jPTk2MT1zdGF0aWMgdm9pZCBtcHRjcF9yY3ZfcnR0X3VwZGF0ZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk4Ni1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk4Nzp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtOTg4LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMDYxPXN0YXRpYyB2b2lkIG1wdGNwX3Jlc2V0X3J0eF90aW1lcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzM6Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwNzQte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEyMzc9bXB0Y3BfY2FydmVfZGF0YV9mcmFnKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLFxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEyNTQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMjU1OnN0cnVjdCBtcHRjcF9zZW5kbXNnX2luZm8ge1xubmV0L21wdGNwL3Byb3RvY29sLmMtMTI1Ni1cdGludCBtc3Nfbm93O1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1Mjg9c3RydWN0IHN1YmZsb3dfc2VuZF9pbmZvIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTMyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTUzMzp2b2lkIG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTUzNC17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTU0MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE1NDI6Ym9vbCBtcHRjcF9zdWJmbG93X2FjdGl2ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTU0My17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MTY0NT1zdGF0aWMgdm9pZCBtcHRjcF91cGRhdGVfcG9zdF9wdXNoKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY3MS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjE2NzI6dm9pZCBtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY3My17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYxNT1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjcyMC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI3MjE6dm9pZCBtcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjcyMi1cdFx0ICAgICBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4OTc9c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDE2LSAqL1xubmV0L21wdGNwL3Byb3RvY29sLmM6MzAxNzp2b2lkIG1wdGNwX3Jlc2V0X3RvdXRfdGltZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgbG9uZyBmYWlsX3RvdXQpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMDE4LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjM4PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYXJfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI0Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNDg6dm9pZCBtcHRjcF9jYW5jZWxfd29yayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjQ5LXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjU1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzI1Njp2b2lkIG1wdGNwX3N1YmZsb3dfc2h1dGRvd24oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgaG93KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI1Ny17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI5MC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyOTE6dm9pZCBtcHRjcF9zZXRfc3RhdGUoc3RydWN0IHNvY2sgKnNrLCBpbnQgc3RhdGUpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjkyLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zODUyPXN0YXRpYyB2b2lkIHNjaGVkdWxlXzNyZGFja19yZXRyYW5zbWlzc2lvbihzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4NzMtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODc0OnZvaWQgbXB0Y3Bfc3ViZmxvd19wcm9jZXNzX2RlbGVnYXRlZChzdHJ1Y3Qgc29jayAqc3NrLCBsb25nIHN0YXR1cylcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4NzUte1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM5MTM9c3RhdGljIGludCBtcHRjcF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzkyMy1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM5MjQ6dm9pZCBtcHRjcF9maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzkyNS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzk0Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM5NDg6dm9pZCBtcHRjcF9zb2NrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqcGFyZW50KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzk0OS17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzk1OT1zdGF0aWMgdm9pZCBtcHRjcF9zb2NrX2NoZWNrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zOTcyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6Mzk3Mzpib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zOTc0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1NDUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIFNlbGVjdGlvbiBmb3IgTVBUQ1AgUmVjZWl2ZSBhbmQgUmV0cmFuc21pc3Npb24gUGF0aHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCBlZmZlY3RpdmUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIE1QVENQIGNvZGUuIFNpbmNlIGBtcHRjcF9kYXRhX3JlYWR5YCBhbmQgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFyZSBub24tc3RhdGljLCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSBhcmUgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIHRoZSByZWNlaXZlIHBhdGggbW9kaWZpY2F0aW9ucy4gSSBhbHNvIGxvb2tlZCBhdCBgbXB0Y3Bfc3ViZmxvd19wcm9jZXNzX2RlbGVnYXRlZGAgYnV0IGZvdW5kIGl0IHdhc24mIzM5O3QgbW9kaWZpZWQuIFRoYXQgbGVhdmVzIG1lIGxlYW5pbmcgdG93YXJkcyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCB0byBjb3ZlciB0aGUgcmVjZWl2ZSBwYXRoLgoKQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcmV0cmFuc21pc3Npb24gcGF0aCEgYF9fbXB0Y3BfcmV0cmFuc2AgaXMgdHJpZ2dlcmVkIGJ5IGBtcHRjcF93b3JrZXJgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuIEkgbmVlZGVkIHRvIHRoaW5rIGFib3V0IGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIHJldHJhbnNtaXNzaW9uLiBgbXB0Y3Bfc2NoZWR1bGVfd29ya2AgbGVhZHMgdG8gYG1wdGNwX3dvcmtlcmAuIEhvd2V2ZXIsIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSB3aGVuIHRoZSBzb2NrZXQgbG9jayBpcyByZWxlYXNlZCwgd2hpY2ggaXMgZG9uZSBieSBgcmVsZWFzZV9zb2NrKHNrKWAuIFRoYXQmIzM5O3MgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIGFuZCBwcm9iYWJseSBub3QgaWRlYWwgYXMgYSBmb2N1cyBzeW1ib2wuCgpDb21pbmcgYmFjayB0byB0aGUgcmVjZWl2ZSBwYXRoLCBmdXp6aW5nIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIHNvdW5kcyBzb2xpZCwgYnV0IHdoYXQgYWJvdXQgYG1wdGNwX3JlY3Ztc2dgPyBJdCAqaXMqIHRoZSBgcmVjdm1zZ2AgaGFuZGxlciBmb3IgTVBUQ1AsIGJ1dCBpdCYjMzk7cyBzdGF0aWMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gSG93ZXZlciwgaXQgKmlzKiBhbiBBUEkgZW50cnlwb2ludCwgZGVzcGl0ZSB0aGUgc3RhdGljIGtleXdvcmQuIEkmIzM5O20gdG9ybiwgYnV0IHVsdGltYXRlbHksIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjb2RlIGNoYW5nZXMsIGFuZCBub24tc3RhdGljLCBzbyBJJiMzOTtsbCBwcmlvcml0aXplIHRoZW0uCgpMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYC4gWWVzLCBpdCYjMzk7cyBub24tc3RhdGljLCBhbmQgKmlzKiBkaXJlY3RseSBtb2RpZmllZCEgQ2hlY2tpbmcgdGhlIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgY29udGFpbnMgdGhlIGtleSBjaGVjazogYHJldHVybiAhbXB0Y3Bfb3Zlcl9saW1pdChzdWJmbG93LSZndDtjb25uLCBzaywgc2tiKTtgLiBJdCYjMzk7cyBhIHBlcmZlY3QgZm9jdXMgc3ltYm9sLgoKTm93IGZvciBgbXB0Y3BfZGF0YV9yZWFkeWAuIEl0IGNhbGxzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGFuZCBgX19tcHRjcF9tb3ZlX3NrYmAuIEJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBTbywgYG1wdGNwX2RhdGFfcmVhZHlgIGlzIGFsc28gYSBwZXJmZWN0IGZvY3VzIHN5bWJvbCwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgaW4gdGhlIHBhdGNoLgoKSSB3aWxsIHNldCBhc2lkZSBvdGhlciBmb2N1cyBzeW1ib2xzIHN1Y2ggYXMgYG1wdGNwX3dvcmtlcmAsIHNpbmNlIGl0IGlzIHN0YXRpYy4gSSB3aWxsIGxvb2sgZm9yIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciB0aGUgcmV0cmFuc21pc3Npb24gcGFydC4gV2hhdCBhYm91dCBgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nYD8gVGhhdCYjMzk7cyBhbm90aGVyIGF2ZW51ZSB0byBpbnZlc3RpZ2F0ZSwgYnV0IGZvciBub3csIEkmIzM5O20gY29uZmlkZW50IGluIHByaW9yaXRpemluZyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBhcyB0aGUga2V5IGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYz0xNjQ1PXN0YXRpYyB2b2lkIG1wdGNwX3VwZGF0ZV9wb3N0X3B1c2goc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjcxLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MTY3Mjp2b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjczLXtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODk3PXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk5OC1yZXNldF90aW1lcjpcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5OTk6XHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmMtMzAwMC1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MTE9Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4MTI6dm9pZCBtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMy12b2lkIF9fbXB0Y3BfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGZsYWdzKTtcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTY2MD1zdGF0aWMgaW50IF9fbXB0Y3Bfc2V0c29ja29wdF9zb2xfdGNwX2Nvcmsoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IHZhbClcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTY3NC1cdGlmICghdmFsKVxubmV0L21wdGNwL3NvY2tvcHQuYzo2NzU6XHRcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTY3Ni1cbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTY4MD1zdGF0aWMgaW50IF9fbXB0Y3Bfc2V0c29ja29wdF9zb2xfdGNwX25vZGVsYXkoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IHZhbClcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTY5NC1cdGlmICh2YWwpXG5uZXQvbXB0Y3Avc29ja29wdC5jOjY5NTpcdFx0bXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHNrKTtcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNjk2LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTUzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgTVBUQ1AgUmV0cmFuc21pc3Npb24gTG9naWMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZmxvdyBoZXJlLiBJdCBsb29rcyBsaWtlIGBtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmdgIGlzICpjYWxsZWQqIGZyb20gYF9fbXB0Y3BfcmV0cmFuc2AsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdGltaW5nLiBCdXQgd2hhdCBhYm91dCB0aGF0IHBlc2t5IGBtcHRjcF9yZXRyYW5zbWl0X3RpbWVyYD8gSXQmIzM5O3Mgc3RhdGljLCBzbyB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IHBhdGgsIG5lZWRzIGEgc2VwYXJhdGUgbG9vaywgYnV0IHRoZSBpbW1lZGlhdGUgY2FsbGluZyBwYXRoIGZyb20gdGhlIHJldHJhbnNtaXQgbG9naWMgaXMgY2xlYXIuIFRoZW4gSSBzZWUgYG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZWAsIHRoYXQgY2FsbHMgYF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGFgIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uLiBXYWl0LCBgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YWAgaXMgKm5vbi1zdGF0aWMqISBPa2F5LCB0aGF0JiMzOTtzIGNydWNpYWwuIEtub3dpbmcgaXQmIzM5O3Mgbm9uLXN0YXRpYyBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgbW9kdWxlcywgc29tZXRoaW5nIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHdoZW4gSSBtYXAgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG5vdGUgd2hlcmUgdGhhdCYjMzk7cyBjYWxsZWQgZnJvbSwgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9wbS5jPTEwNjM9c3RhdGljIHZvaWQgbXB0Y3BfcG1fc3ViZmxvd3NfY2hrX3N0YWxlKGNvbnN0IHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXG4tLVxubmV0L21wdGNwL3BtLmMtMTA4NC1cdFx0XHRcdHN1YmZsb3ctXHUwMDNlc3RhbGUgPSAxO1xubmV0L21wdGNwL3BtLmM6MTA4NTpcdFx0XHRcdF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc2spO1xubmV0L21wdGNwL3BtLmMtMTA4Ni1cdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0OTU9c3RydWN0IHNvY2sgKm1wdGNwX3N1YmZsb3dfZ2V0X3JldHJhbnMoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNTMwLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MjUzMTpib29sIF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGEoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MjYxNT1zdGF0aWMgdm9pZCBfX21wdGNwX2Nsb3NlX3NzayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjY2NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI2NjU6XHRuZWVkX3B1c2ggPSAoZmxhZ3MgXHUwMDI2IE1QVENQX0NGX1BVU0gpIFx1MDAyNlx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjYtXHRpZiAoIWRpc3Bvc2VfaXQpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yODk3PXN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDk6XHRcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk1MC1cdFx0ICovXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9ODA4PXZvaWQgX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmgtODEwLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6ODExOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spO1xubmV0L21wdGNwL3Byb3RvY29sLmgtODEyLXZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTgzCgkJCQkJCQlvdXRwdXQ6IDExOAoJCQkJCQkJdGhvdWdodHM6IDg1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhYCB3b3VsZCBiZSBpbnRlcmVzdGluZywgYnV0IGl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG5vdCByaWdodCwgYnV0IGl0IGRvZXNuJiMzOTt0IGV2ZW4gY2FsbCBgX19tcHRjcF9yZXRyYW5zYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2FzIGFjdHVhbGx5IG1vZGlmaWVkLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgY3VydmViYWxsLiBBZnRlciByZXZpZXdpbmcgYWxsIHRoZSBmdW5jdGlvbnMsIHRoZSBjb2RlIG1vZGlmaWVzIGEgYnVuY2ggb2YgZnVuY3Rpb25zOiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgLCBgX19tcHRjcF9tb3ZlX3NrYmAsIGBfX21wdGNwX2FkZF9iYWNrbG9nYCwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AsIGBtcHRjcF9tb3ZlX3NrYnNgLCBgX19tcHRjcF9wdXNoX3JldHJhbnNgLCBgX19tcHRjcF9yZXRyYW5zYCwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4KCmBfX21wdGNwX3JldHJhbnNgIGlzIGNhbGxlZCBieSBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBgbXB0Y3BfcmVsZWFzZV9jYmAgaXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgZm9yIHRoZSBzb2NrZXQsIHNvIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIHRoZSBzb2NrZXQgbG9jayBpcyByZWxlYXNlZC4gRXNzZW50aWFsbHksIGFueSBmdW5jdGlvbiB0aGF0IGxvY2tzIGFuZCB1bmxvY2tzIHRoZSBzb2NrZXQgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBpdC4gVGhhdCBtYWtlcyBmdXp6aW5nIGBtcHRjcF9yZWN2bXNnYCB2aWEgdGhlIGByZWN2bXNnYCBzeXNjYWxsIG9yIGBtcHRjcF9zZW5kbXNnYCB2aWEgdGhlIGBzZW5kbXNnYCBzeXNjYWxsIGEgdmlhYmxlIHN0cmF0ZWd5LiBCdXQgbG9va2luZyBkZWVwZXIgYW5kIHRyYWNpbmcgY2FsbHMsIEkgdGhpbmsgdGhlcmUgYXJlIGJldHRlciBhcHByb2FjaGVzLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggYXJlIHRoZSBvbmVzIGRpcmVjdGx5IGV4cG9zZWQgdG8gdGhlIHN5c2NhbGxzIG9yIG90aGVyIGtlcm5lbCBjb21wb25lbnRzLiBTbyBJIHdhbnQgdG8gaW5jbHVkZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YC4gYG1wdGNwX2lvY3RsYCBsb29rZWQgaW50ZXJlc3Rpbmcgc2luY2UgaXQgY2FsbHMgYG1wdGNwX21vdmVfc2tic2AsIGJ1dCB0aGVuIEkgcmVhbGl6ZWQgaXQmIzM5O3Mgc3RhdGljLiBMZXQmIzM5O3Mgc2VlLi4uIGBtcHRjcF9yZWN2bXNnYCBpcyBzdGF0aWMsIHRvby4gT2theSwgc28gZmluZGluZyBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBzdGF0aWMgYG1wdGNwX21vdmVfc2tic2AgaXNuJiMzOTt0IGdvaW5nIHRvIGdldCBtZSBhbnl3aGVyZS4gYG1wdGNwX21vdmVfc2tic2AgaXMgb25seSBjYWxsZWQgYnkgYSBidW5jaCBvZiBzdGF0aWMgZnVuY3Rpb25zIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAsIHdoaWNoLCBhcyBtZW50aW9uZWQsIGlzIHRyaWdnZXJlZCBpbmRpcmVjdGx5LiBTbywgaXQgbG9va3MgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBhcmUgdGhlIGJlc3QgYmV0cyBhcyBmb2N1cyBzeW1ib2xzLgoKTGV0IG1lIGRvdWJsZS1jaGVjay4gWXVwLCBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMgbm9uLXN0YXRpYyAoYHZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgKSwgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBub24tc3RhdGljIHRvbyAoYGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2ApLgoKU28sIHRoZSBwYXRjaCBtYWlubHkgbW9kaWZpZXMgdGhlc2UgZnVuY3Rpb25zOiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgKG5vbi1zdGF0aWMpLCBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCAoc3RhdGljKSwgYF9fbXB0Y3BfbW92ZV9za2JgIChzdGF0aWMpLCBgX19tcHRjcF9hZGRfYmFja2xvZ2AgKHN0YXRpYyksIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIChzdGF0aWMpLCBgbXB0Y3BfbW92ZV9za2JzYCAoc3RhdGljKSwgYF9fbXB0Y3BfcHVzaF9yZXRyYW5zYCAoc3RhdGljKSwgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYyksIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgKHN0YXRpYykuCgpTbyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBhcmUgc3RpbGwgdGhlIGJlc3Qgc3ltYm9scyB0byBjb25jZW50cmF0ZSBvbi4gV2FpdCwgYG1wdGNwX2RhdGFfcmVhZHlgIGFjdHVhbGx5IGNhbGxzIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLiBIbW0sIGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSB0aGVzZSBtaWdodCBiZSB0aGUgYmVzdCB0YXJnZXRzLCBhbmQgdGhlIG9ubHkgb25lcyBJIGNhbiByZWFsbHkgbGV2ZXJhZ2UgaW4gYSB0YXJnZXRlZCB3YXkuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCYjMzk7cyB0cnVlLi4uCgpTbyB3aGF0IGNvbmZpZyBvcHRpb24gZG8gSSBuZWVkIHRvIGVuYWJsZT8gSnVzdCBgTVBUQ1BgLCBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgoqKkZpbmFsIGFzc2Vzc21lbnQ6KiogVGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBJIHNob3VsZCBmb2N1cyBvbiBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YC4gSSB3aWxsIGVuYWJsZSB0aGUgYE1QVENQYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGNyaXRpY2FsIE1QVENQIGxvZ2ljIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmV0cmFuc21pc3Npb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZXhwZWN0aW5nIGZ1enppbmcgdG8gZXhwb3NlIGlzc3VlcyBhcm91bmQgdGhlIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHdoaWNoIGRyb3AgcGFja2V0cyBvciBwcnVuZSBxdWV1ZXMsIGFuZCB0aGUgcmVmYWN0b3Jpbmcgb2YgcmV0cmFuc21pc3Npb24gbG9naWMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUsIGFuZCBhbnkgaXNzdWVzIGhlcmUgaGF2ZSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE1QVENQIHByb3RvY29sIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgY29uc3RyYWludHMgYW5kIHJldHJhbnNtaXNzaW9ucy4gSXQgaW50cm9kdWNlcyBuZXcgbWVtb3J5IGxpbWl0IGNoZWNrcyB0aGF0IGRyb3AgcGFja2V0cyBvciBwcnVuZSB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIHdoZW4gbGltaXRzIGFyZSBleGNlZWRlZCwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9naWMgdG8gaGFuZGxlIG11bHRpcGxlIGZyYWdtZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3BfaW5jb21pbmdfb3B0aW9ucyYjMzQ7LAogICAgJiMzNDttcHRjcF9kYXRhX3JlYWR5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIE1QVENQIHByb3RvY29sIGxvZ2ljIHRvIGhhbmRsZSBtZW1vcnkgY29uc3RyYWludHMgYW5kIHJldHJhbnNtaXNzaW9ucy4gSXQgaW50cm9kdWNlcyBuZXcgbWVtb3J5IGxpbWl0IGNoZWNrcyB0aGF0IGRyb3AgcGFja2V0cyBvciBwcnVuZSB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIHdoZW4gbGltaXRzIGFyZSBleGNlZWRlZCwgYW5kIHJlZmFjdG9ycyB0aGUgcmV0cmFuc21pc3Npb24gbG9naWMgdG8gaGFuZGxlIG11bHRpcGxlIGZyYWdtZW50cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDoxOC43OTg0OTI3MjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4Nzg1MDE0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTVBUQ1AgcHJvdG9jb2wgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBjb25zdHJhaW50cyBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHRoYXQgZHJvcCBwYWNrZXRzIG9yIHBydW5lIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBoYW5kbGUgbXVsdGlwbGUgZnJhZ21lbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDQ6MTguNzk4NTAwNDExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDA0NDAwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlODdhMzE0Y2NjMzdjMmUzNGNlZGExZDJhYWE0NjcwMTVhNDdiZjgzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDE5OjQ0OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9taWIuYyBiL25ldC9tcHRjcC9taWIuY1xcbmluZGV4IGYyM2ZkYTBjNTVhNzIwLi5kOWJkNGY0YWZjYzBlNyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvbWliLmNcXG4rKysgYi9uZXQvbXB0Y3AvbWliLmNcXG5AQCAtODUsNiArODUsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIG1wdGNwX3NubXBfbGlzdFtdID0ge1xcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcXFwiLCBNUFRDUF9NSUJfU0lNVUxUQ09OTkZBTExCQUNLKSxcXG4gXFx0U05NUF9NSUJfSVRFTShcXFwiRmFsbGJhY2tGYWlsZWRcXFwiLCBNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQpLFxcbiBcXHRTTk1QX01JQl9JVEVNKFxcXCJXaW5Qcm9iZVxcXCIsIE1QVENQX01JQl9XSU5QUk9CRSksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIkJhY2tsb2dEcm9wXFxcIiwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKSxcXG4rXFx0U05NUF9NSUJfSVRFTShcXFwiUmN2UHJ1bmVkXFxcIiwgTVBUQ1BfTUlCX1JDVlBSVU5FRCksXFxuK1xcdFNOTVBfTUlCX0lURU0oXFxcIk9mb1BydW5lZFxcXCIsIE1QVENQX01JQl9PRk9fUFJVTkVEKSxcXG4gfTtcXG4gXFxuIC8qIG1wdGNwX21pYl9hbGxvYyAtIGFsbG9jYXRlIHBlcmNwdSBtaWIgY291bnRlcnNcXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXFxuaW5kZXggODEyMjE4YjVlZDJiZmMuLjE4ZjM1ZjdlMGEyZDRlIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9taWIuaFxcbisrKyBiL25ldC9tcHRjcC9taWIuaFxcbkBAIC04OCw2ICs4OCw5IEBAIGVudW0gbGludXhfbXB0Y3BfbWliX2ZpZWxkIHtcXG4gXFx0TVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyxcXHQvKiBTaW11bHRhbmVvdXMgY29ubmVjdCAqL1xcbiBcXHRNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsXFx0LyogQ2FuJ3QgZmFsbGJhY2sgZHVlIHRvIG1zayBzdGF0dXMgKi9cXG4gXFx0TVBUQ1BfTUlCX1dJTlBST0JFLFxcdFxcdC8qIE1QVENQLWxldmVsIHplcm8gd2luZG93IHByb2JlICovXFxuK1xcdE1QVENQX01JQl9CQUNLTE9HRFJPUCxcXHRcXHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXFxuK1xcdE1QVENQX01JQl9SQ1ZQUlVORUQsXFx0XFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnMgKi9cXG4rXFx0TVBUQ1BfTUlCX09GT19QUlVORUQsXFx0XFx0LyogTVBUQ1AtbGV2ZWwgT29PIHF1ZXVlIHBydW5lZCAqL1xcbiBcXHRfX01QVENQX01JQl9NQVhcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9vcHRpb25zLmMgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXFxuaW5kZXggYzY2NDAyM2QzN2JhOGUuLjdiOTU0ZWY3ODY3MjMwIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcXG4rKysgYi9uZXQvbXB0Y3Avb3B0aW9ucy5jXFxuQEAgLTExMjcsOCArMTEyNywzMCBAQCBzdGF0aWMgYm9vbCBhZGRfYWRkcl9obWFjX3ZhbGlkKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuIFxcdHJldHVybiBobWFjID09IG1wX29wdC1cXHUwMDNlYWhtYWM7XFxuIH1cXG4gXFxuLS8qIFJldHVybiBmYWxzZSBpbiBjYXNlIG9mIGVycm9yIChvciBzdWJmbG93IGhhcyBiZWVuIHJlc2V0KSxcXG4tICogZWxzZSByZXR1cm4gdHJ1ZS5cXG4rc3RhdGljIGJvb2wgbXB0Y3Bfb3Zlcl9saW1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHR1NjQgbWVtID0gc2tfcm1lbV9hbGxvY19nZXQoc2spO1xcbitcXG4rXFx0bWVtICs9IFJFQURfT05DRShtc2stXFx1MDAzZWJhY2tsb2dfbGVuKTtcXG4rXFx0aWYgKGxpa2VseShtZW0gXFx1MDAzYz0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4gb3IgemVybyB3aW4gcHJvYmVzLiAqL1xcbitcXHRpZiAoVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxIHx8XFxuK1xcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXRjcF9mbGFncyBcXHUwMDI2IFRDUEhEUl9GSU4gfHxcXG4rXFx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWVuZF9zZXEsIHRjcF9zayhzc2spLVxcdTAwM2VyY3Zfbnh0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXFxuK1xcdGluZXRfY3NrKHNzayktXFx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XFxuK1xcdGluZXRfY3NrX3NjaGVkdWxlX2Fjayhzc2spO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyogUmV0dXJuIGZhbHNlIHdoZW4gdGhlIGNhbGxlciBtdXN0IGRyb3AgdGhlIHBhY2tldCwgaS5lLiBpbiBjYXNlIG9mIGVycm9yLFxcbisgKiBzdWJmbG93IGhhcyBiZWVuIHJlc2V0LCBvciBvdmVyIG1lbW9yeSBsaW1pdHMuXFxuICAqL1xcbiBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuQEAgLTExNTQsNyArMTE3Niw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRcXHRfX21wdGNwX2RhdGFfYWNrZWQoc3ViZmxvdy1cXHUwMDNlY29ubik7XFxuIFxcdFxcdG1wdGNwX2RhdGFfdW5sb2NrKHN1YmZsb3ctXFx1MDAzZWNvbm4pO1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXFx1MDAzZWNvbm4sIHNrLCBza2IpO1xcbiBcXHR9XFxuIFxcbiBcXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFxcdTAwMjZtcF9vcHQpO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuaW5kZXggY2E2NDRlYzUzZWVkYjEuLjVjZjQ0ZWFiNzZmMWM0IDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzczLDYgKzM3Myw0OSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9pbml0X3NrYihzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxcbiBcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4gfVxcbiBcXG4rLyogXFxcIkluc3BpcmVkXFxcIiBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXFxuKyAqIHNvY2tldCBpcyB1bmRlciBtZW1vcnkgbGltaXQuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuK1xcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqcHJldjtcXG4rXFx0Ym9vbCBwcnVuZWQgPSBmYWxzZTtcXG4rXFx0dTY0IG1lbTtcXG4rXFxuK1xcdGlmIChSQl9FTVBUWV9ST09UKFxcdTAwMjZtc2stXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bm9kZSA9IFxcdTAwMjZtc2stXFx1MDAzZW9vb19sYXN0X3NrYi1cXHUwMDNlcmJub2RlO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmJfdG9fc2tiKG5vZGUpO1xcbitcXG4rXFx0XFx0LyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi9cXG4rXFx0XFx0aWYgKGFmdGVyNjQoc2VxLCBNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbWFwX3NlcSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0cHJ1bmVkID0gdHJ1ZTtcXG4rXFx0XFx0cHJldiA9IHJiX3ByZXYobm9kZSk7XFxuK1xcdFxcdHJiX2VyYXNlKG5vZGUsIFxcdTAwMjZtc2stXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSk7XFxuK1xcdFxcdG1wdGNwX2Ryb3Aoc2ssIHNrYik7XFxuK1xcdFxcdG1zay1cXHUwMDNlb29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpO1xcbitcXG4rXFx0XFx0bWVtID0gKHVuc2lnbmVkIGludClza19ybWVtX2FsbG9jX2dldChzayk7XFxuK1xcdFxcdGlmIChtZW0gXFx1MDAzYz0gc2stXFx1MDAzZXNrX3JjdmJ1ZilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRub2RlID0gcHJldjtcXG4rXFx0fSB3aGlsZSAobm9kZSk7XFxuK1xcbitcXHRpZiAocHJ1bmVkKVxcbitcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfT0ZPX1BSVU5FRCk7XFxuK1xcbitvdXQ6XFxuK1xcdG1lbSA9ICh1bnNpZ25lZCBpbnQpc2tfcm1lbV9hbGxvY19nZXQoc2spO1xcbitcXHRyZXR1cm4gbWVtIFxcdTAwM2M9IHNrLVxcdTAwM2Vza19yY3ZidWY7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHU2NCBjb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxIC0gTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXE7XFxuQEAgLTM4MSw2ICs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBcXHRtcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpO1xcbiBcXG4rXFx0LyogQ2FuJ3QgZHJvcCBwYWNrZXRzIGZvciBmYWxsYmFjayBzb2NrZXQgdGhpcyBsYXRlLCBvciB0aGUgc3RyZWFtXFxuK1xcdCAqIHdpbGwgYnJlYWsuXFxuK1xcdCAqL1xcbitcXHRpZiAodW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2UgUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW1wdGNwX3BydW5lX29mb19xdWV1ZShzaywgTVBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZW1hcF9zZXEpKSB7XFxuK1xcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9SQ1ZQUlVORUQpO1xcbitcXHRcXHRtcHRjcF9kcm9wKHNrLCBza2IpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChNUFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlbWFwX3NlcSA9PSBtc2stXFx1MDAzZWFja19zZXEpIHtcXG4gXFx0XFx0LyogaW4gc2VxdWVuY2UgKi9cXG4gXFx0XFx0bXNrLVxcdTAwM2VieXRlc19yZWNlaXZlZCArPSBjb3B5X2xlbjtcXG5AQCAtNjc1LDYgKzcyOSw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBzb2NrICpzc2sgPSBza2ItXFx1MDAzZXNrO1xcbiBcXHRib29sIGZyYWdzdG9sZW47XFxuK1xcdHU2NCBsaW1pdDtcXG4gXFx0aW50IGRlbHRhO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpKSB7XFxuQEAgLTY4Miw2ICs3MzcsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4rXFx0LyogU2ltaWxhciBhZGRpdGlvbmFsIGFsbG93YW5jZSBhcyBwbGFpbiBUQ1AuICovXFxuK1xcdGxpbWl0ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbitcXHRsaW1pdCArPSAobGltaXQgXFx1MDAzZVxcdTAwM2UgMSkgKyA2NCAqIDEwMjQ7XFxuK1xcdGxpbWl0ID0gbWluX3QodTY0LCBsaW1pdCwgVUlOVF9NQVgpO1xcbitcXHRpZiAobXNrLVxcdTAwM2ViYWNrbG9nX2xlbiBcXHUwMDNlIGxpbWl0IFxcdTAwMjZcXHUwMDI2ICFfX21wdGNwX2NoZWNrX2ZhbGxiYWNrKG1zaykpIHtcXG4rXFx0XFx0X19NUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfQkFDS0xPR0RST1ApO1xcbitcXHRcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX1NPQ0tFVF9CQUNLTE9HKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBUcnkgdG8gY29hbGVzY2Ugd2l0aCB0aGUgbGFzdCBza2IgaW4gb3VyIGJhY2tsb2cgKi9cXG4gXFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkpXFxuIFxcdFxcdHRhaWwgPSBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0LCBzdHJ1Y3Qgc2tfYnVmZiwgbGlzdCk7XFxuQEAgLTc1Myw3ICs4MTgsNyBAQCBzdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4gXFxuIFxcdFxcdFxcdG1wdGNwX2luaXRfc2tiKHNzaywgc2tiLCBvZmZzZXQsIGxlbik7XFxuIFxcbi1cXHRcXHRcXHRpZiAob3duX21zayBcXHUwMDI2XFx1MDAyNiBza19ybWVtX2FsbG9jX2dldChzaykgXFx1MDAzYyBzay1cXHUwMDNlc2tfcmN2YnVmKSB7XFxuK1xcdFxcdFxcdGlmIChvd25fbXNrKSB7XFxuIFxcdFxcdFxcdFxcdG1wdGNwX3N1YmZsb3dfbGVuZF9md2RtZW0oc3ViZmxvdywgc2tiKTtcXG4gXFx0XFx0XFx0XFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuQEAgLTExMzYsMTMgKzEyMDEsNiBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRtcHRjcF93cml0ZV9zcGFjZShzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbi17XFxuLVxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuLVxcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuLVxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgbXB0Y3BfZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbkBAIC0yMjA5LDEyICsyMjY3LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRcXG4gXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4gXFx0Ym9vbCBtb3ZlZCA9IGZhbHNlO1xcbiBcXG4tXFx0KmRlbHRhID0gMDtcXG4gXFx0d2hpbGUgKDEpIHtcXG4tXFx0XFx0LyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJ3QgZHJvcCAqL1xcbi1cXHRcXHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFxcdTAwM2Ugc2stXFx1MDAzZXNrX3JjdmJ1ZilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbiBcXHRcXHRwcmVmZXRjaChza2ItXFx1MDAzZW5leHQpO1xcbiBcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2tiLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0KmRlbHRhICs9IHNrYi1cXHUwMDNldHJ1ZXNpemU7XFxuQEAgLTIyNDIsOSArMjI5NSw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShtc2stXFx1MDAzZWJhY2tsb2dfdW5hY2NvdW50ZWQgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3NvY2tldCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7XFxuIFxcbi1cXHQvKiBEb24ndCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkgfHxcXG4tXFx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcXHUwMDNlIHNrLVxcdTAwM2Vza19yY3ZidWYpXFxuK1xcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKHNrYnMpO1xcbkBAIC0yMjUyLDIwICsyMzAzLDEyIEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtb3ZlZCxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxcbi17XFxuLVxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuLVxcbi1cXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XFxuLVxcdGxpc3Rfc3BsaWNlKHNrYnMsIFxcdTAwMjZtc2stXFx1MDAzZWJhY2tsb2dfbGlzdCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4rXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBza2JzO1xcbiBcXHRib29sIGVucXVldWVkID0gZmFsc2U7XFxuLVxcdHUzMiBtb3ZlZDtcXG4rXFx0dTMyIG1vdmVkID0gMDtcXG4gXFxuIFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuIFxcdHdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXFx1MDAyNnNrYnMpKSB7XFxuQEAgLTIyNzMsOCArMjMxNiw4IEBAIHN0YXRpYyBib29sIG1wdGNwX21vdmVfc2ticyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdGVucXVldWVkIHw9IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcXHUwMDI2c2ticywgXFx1MDAyNm1vdmVkKTtcXG4gXFxuIFxcdFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuLVxcdFxcdG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzaywgbW92ZWQsIFxcdTAwMjZza2JzKTtcXG4gXFx0fVxcbitcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XFxuIFxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4gXFxuIFxcdGlmIChlbnF1ZXVlZCBcXHUwMDI2XFx1MDAyNiBtcHRjcF9lcG9sbGluX3JlYWR5KHNrKSlcXG5AQCAtMjc4NSw0NCArMjgyOCwyMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jaGVja19mYXN0Y2xvc2Uoc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcXG4gXFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4rLypcXG4rICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cyxcXG4rICogc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcXVlbmNlXFxuKyAqL1xcbitzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxuK1xcdFxcdFxcdFxcdHU2NCBzZW50X3NlcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbXB0Y3Bfc2VuZG1zZ19pbmZvIGluZm8gPSB7IC5kYXRhX2xvY2tfaGVsZCA9IHRydWUsIH07XFxuIFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuIFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XFxuLVxcdHN0cnVjdCBtcHRjcF9kYXRhX2ZyYWcgKmRmcmFnO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc3NrO1xcbi1cXHRpbnQgcmV0LCBlcnI7XFxuLVxcdHUxNiBsZW4gPSAwO1xcbi1cXG4tXFx0bXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuLVxcbi1cXHQvKiBmaXJzdCBjaGVjayBzc2s6IG5lZWQgdG8ga2ljayBcXFwic3RhbGVcXFwiIGxvZ2ljICovXFxuLVxcdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XFxuLVxcdGRmcmFnID0gbXB0Y3BfcnR4X2hlYWQoc2spO1xcbi1cXHRpZiAoIWRmcmFnKSB7XFxuLVxcdFxcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcXG4tXFx0XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbi1cXG4tXFx0XFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxcbi1cXHRcXHRcXHRcXHQgICBpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XFxuLVxcdFxcdFxcdG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spO1xcbi1cXHRcXHRcXHRtcHRjcF9zZW5kX2Fjayhtc2spO1xcbi1cXG4tXFx0XFx0XFx0Z290byByZXNldF90aW1lcjtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxcbi1cXHRcXHRcXHRnb3RvIGNsZWFyX3NjaGVkdWxlZDtcXG4tXFxuLVxcdFxcdGdvdG8gcmVzZXRfdGltZXI7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gcmVzZXRfdGltZXI7XFxuK1xcdGludCByZXQsIGxlbiA9IDA7XFxuIFxcbiBcXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xcbiBcXHRcXHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXFx1MDAzZXNjaGVkdWxlZCkpIHtcXG4rXFx0XFx0XFx0dTE2IG9mZnNldCA9IHNlbnRfc2VxIC0gZGZyYWctXFx1MDAzZWRhdGFfc2VxO1xcbiBcXHRcXHRcXHR1MTYgY29waWVkID0gMDtcXG4gXFxuIFxcdFxcdFxcdG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7XFxuQEAgLTI4MzIsNyArMjg1Myw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdGxvY2tfc29jayhzc2spO1xcbiBcXG4gXFx0XFx0XFx0LyogbGltaXQgcmV0cmFuc21pc3Npb24gdG8gdGhlIGJ5dGVzIGFscmVhZHkgc2VudCBvbiBzb21lIHN1YmZsb3dzICovXFxuLVxcdFxcdFxcdGluZm8uc2VudCA9IDA7XFxuK1xcdFxcdFxcdGluZm8uc2VudCA9IG9mZnNldDtcXG4gXFx0XFx0XFx0aW5mby5saW1pdCA9IFJFQURfT05DRShtc2stXFx1MDAzZWNzdW1fZW5hYmxlZCkgPyBkZnJhZy1cXHUwMDNlZGF0YV9sZW4gOlxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudDtcXG4gXFxuQEAgLTI4NDcsNyArMjg2OCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdCAgICAhbXNrLVxcdTAwM2VhbGxvd19zdWJmbG93cykge1xcbiBcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXNrLVxcdTAwM2VmYWxsYmFja19sb2NrKTtcXG4gXFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNzayk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdHdoaWxlIChpbmZvLnNlbnQgXFx1MDAzYyBpbmZvLmxpbWl0KSB7XFxuQEAgLTI4NzAsMTMgKzI4OTEsMTA5IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzc2spO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xcbitcXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcXG4rXFx0Ym9vbCBuZWVkX3JldHJhbnM7XFxuK1xcdHU2NCByZXRyYW5zX3NlcTtcXG4rXFx0aW50IGVyciwgbGVuO1xcbiBcXG4tXFx0bXNrLVxcdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcXG4tXFx0ZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCA9IG1heChkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50LCBsZW4pO1xcbitcXHRtcHRjcF9kYXRhX2xvY2soc2spO1xcbitcXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcbitcXHRyZXRyYW5zX3NlcSA9IG1zay1cXHUwMDNlc25kX3VuYTtcXG4rXFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XFxuK1xcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XFxuK1xcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4rXFx0aWYgKCFkZnJhZylcXG4rXFx0XFx0Z290byBjaGVja19kYXRhX2ZpbjtcXG4gXFxuLVxcdC8qIFdpdGggY3N1bSBlbmFibGVkIHJldHJhbnNtaXNzaW9uIGNhbiBzZW5kIG5ldyBkYXRhLiAqL1xcbi1cXHRpZiAoYWZ0ZXI2NChkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXFx1MDAzZWRhdGFfc2VxLCBtc2stXFx1MDAzZXNuZF9ueHQpKVxcbi1cXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlc25kX254dCwgZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudCArIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSk7XFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0Ym9vbCBhbHJlYWR5X3JldHJhbnM7XFxuK1xcdFxcdHU2NCBzZW50X3NlcTtcXG4rXFxuK1xcdFxcdC8qIFRoZSBkZWZhdWx0IHNjaGVkdWxlciB3aWxsIGtpY2sgXFxcInN0YWxlXFxcIiBsb2dpYywgdGhhdCBpblxcbitcXHRcXHQgKiB0dXJuIGNhbiBwcm9jZXNzIGluY29taW5nIGFja3MgYW5kIGNsZWFuIHRoZSBSVFggcXVldWU7XFxuK1xcdFxcdCAqIGVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGRmcmFnIHdpbGwgc3RpbGwgYmUgYXJvdW5kXFxuK1xcdFxcdCAqIGFmdGVyd2FyZHMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRnZXRfcGFnZShkZnJhZy1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdGVyciA9IG1wdGNwX3NjaGVkX2dldF9yZXRyYW5zKG1zayk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0cHV0X3BhZ2UoZGZyYWctXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogSW5jb21pbmcgYWNrcyBjYW4gaGF2ZSBtb3ZlZCByZXRyYW5zIHNlcXVlbmNlIGFmdGVyXFxuK1xcdFxcdCAqIHRoZSBjdXJyZW50IGRmcmFnLCBpZiBzbyB0cnkgdG8gc3RhcnQgYWdhaW4gZnJvbSBSVFggaGVhZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1wdGNwX2RhdGFfbG9jayhzayk7XFxuK1xcdFxcdGFscmVhZHlfcmV0cmFucyA9ICFiZWZvcmU2NChtc2stXFx1MDAzZXNuZF91bmEsIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSArXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50KTtcXG4rXFx0XFx0cHV0X3BhZ2UoZGZyYWctXFx1MDAzZXBhZ2UpO1xcbitcXHRcXHRpZiAoYWxyZWFkeV9yZXRyYW5zKSB7XFxuK1xcdFxcdFxcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XFxuK1xcdFxcdFxcdHJldHJhbnNfc2VxID0gbXNrLVxcdTAwM2VzbmRfdW5hO1xcbitcXHRcXHRcXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcXG4rXFx0XFx0XFx0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcXG4rXFx0XFx0fSBlbHNlIGlmIChhZnRlcjY0KG1zay1cXHUwMDNlc25kX3VuYSwgcmV0cmFuc19zZXEpKSB7XFxuK1xcdFxcdFxcdHJldHJhbnNfc2VxID0gbXNrLVxcdTAwM2VzbmRfdW5hO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcXG4rXFxuK1xcdFxcdC8qIGBhbHJlYWR5X3NlbnRgIGNhbiBiZSAwIGZvciBgZGZyYWdgIGJlbG9uZ2luZyB0byB0aGUgUlRYXFxuK1xcdFxcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFkZnJhZyB8fCAhZGZyYWctXFx1MDAzZWFscmVhZHlfc2VudClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHQvKiBDYW4gZmFpbCBvbmx5IGluIGNhc2Ugb2YgZmFsbGJhY2suICovXFxuK1xcdFxcdGxlbiA9IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHNrLCBkZnJhZywgcmV0cmFuc19zZXEpO1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XFxuK1xcbitcXHRcXHRyZXRyYW5zX3NlcSArPSBsZW47XFxuK1xcdFxcdG1zay1cXHUwMDNlYnl0ZXNfcmV0cmFucyArPSBsZW47XFxuK1xcdFxcdGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLVxcdTAwM2VhbHJlYWR5X3NlbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICByZXRyYW5zX3NlcSAtIGRmcmFnLVxcdTAwM2VkYXRhX3NlcSk7XFxuK1xcbitcXHRcXHQvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi9cXG4rXFx0XFx0c2VudF9zZXEgPSBkZnJhZy1cXHUwMDNlYWxyZWFkeV9zZW50ICsgZGZyYWctXFx1MDAzZWRhdGFfc2VxO1xcbitcXHRcXHRpZiAoYWZ0ZXI2NChzZW50X3NlcSwgbXNrLVxcdTAwM2VzbmRfbnh0KSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXNuZF9ueHQsIHNlbnRfc2VxKTtcXG4rXFxuK1xcdFxcdC8qIEF0dGVtcHQgdGhlIG5leHQgZnJhZ21lbnQgb25seSBpZiB0aGUgY3VycmVudCBvbmUgaXNcXG4rXFx0XFx0ICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGJlZm9yZTY0KHJldHJhbnNfc2VxLCBkZnJhZy1cXHUwMDNlZGF0YV9zZXEgKyBkZnJhZy1cXHUwMDNlZGF0YV9sZW4pKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdGRmcmFnID0gbGlzdF9pc19sYXN0KFxcdTAwMjZkZnJhZy1cXHUwMDNlbGlzdCwgXFx1MDAyNm1zay1cXHUwMDNlcnR4X3F1ZXVlKSA/XFxuK1xcdFxcdFxcdFxcdE5VTEwgOiBsaXN0X25leHRfZW50cnkoZGZyYWcsIGxpc3QpO1xcbitcXHRcXHRpZiAoIWRmcmFnKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0LyogQXR0ZW1wdCBkYXRhLWZpbiByZXRyYW5zbWlzc2lvbiBvbmx5IHdoZW4gdGhlIFJUWCBxdWV1ZSBpcyBlbXB0eS4gKi9cXG4rXFx0aWYgKCFuZWVkX3JldHJhbnMpIHtcXG4rY2hlY2tfZGF0YV9maW46XFxuK1xcdFxcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbitcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzLFxcbitcXHRcXHRcXHRcXHQgICBpY3NrLVxcdTAwM2VpY3NrX3JldHJhbnNtaXRzICsgMSk7XFxuK1xcdFxcdFxcdG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spO1xcbitcXHRcXHRcXHRtcHRjcF9zZW5kX2Fjayhtc2spO1xcbitcXHRcXHRcXHRnb3RvIHJlc2V0X3RpbWVyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpXFxuK1xcdFxcdFxcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xcbitcXHR9XFxuIFxcbiByZXNldF90aW1lcjpcXG4gXFx0bXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHNrKTtcXG5AQCAtMzY3MCwxMiArMzc4NywxMiBAQCBzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0X19tdXN0X2hvbGQoXFx1MDAyNnNrLVxcdTAwM2Vza19sb2NrLnNsb2NrKVxcbiB7XFxuIFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XFxuK1xcdHUzMiBtb3ZlZCA9IDA7XFxuIFxcbiBcXHRmb3IgKDs7KSB7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAobXNrLVxcdTAwM2VjYl9mbGFncyBcXHUwMDI2IE1QVENQX0ZMQUdTX1BST0NFU1NfQ1RYX05FRUQpO1xcbiBcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGpvaW5fbGlzdCwgc2ticztcXG4gXFx0XFx0Ym9vbCBzcG9vbF9ibDtcXG4tXFx0XFx0dTMyIG1vdmVkO1xcbiBcXG4gXFx0XFx0c3Bvb2xfYmwgPSBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXFx1MDAyNnNrYnMpO1xcbiBcXHRcXHRpZiAoIWZsYWdzIFxcdTAwMjZcXHUwMDI2ICFzcG9vbF9ibClcXG5AQCAtMzcwOCw5ICszODI1LDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuIFxcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jayk7XFxuLVxcdFxcdGlmIChzcG9vbF9ibClcXG4tXFx0XFx0XFx0bXB0Y3BfYmFja2xvZ19zcG9vbGVkKHNrLCBtb3ZlZCwgXFx1MDAyNnNrYnMpO1xcbiBcXHR9XFxuK1xcdGlmIChtb3ZlZClcXG4rXFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXFx1MDAzZWJhY2tsb2dfbGVuIC0gbW92ZWQpO1xcbiBcXG4gXFx0aWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE1QVENQX0NMRUFOX1VOQSwgXFx1MDAyNm1zay1cXHUwMDNlY2JfZmxhZ3MpKVxcbiBcXHRcXHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDoxOS42NDI5OTc3OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjYwMzM5ODI4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTVBUQ1AgcHJvdG9jb2wgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBjb25zdHJhaW50cyBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHRoYXQgZHJvcCBwYWNrZXRzIG9yIHBydW5lIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBoYW5kbGUgbXVsdGlwbGUgZnJhZ21lbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTg3YTMxNGNjYzM3YzJlMzRjZWRhMWQyYWFhNDY3MDE1YTQ3YmY4M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE5OjQ0OjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5jIGIvbmV0L21wdGNwL21pYi5jXG5pbmRleCBmMjNmZGEwYzU1YTcyMC4uZDliZDRmNGFmY2MwZTcgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmNcbisrKyBiL25ldC9tcHRjcC9taWIuY1xuQEAgLTg1LDYgKzg1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBtcHRjcF9zbm1wX2xpc3RbXSA9IHtcbiBcdFNOTVBfTUlCX0lURU0oXCJTaW11bHRDb25uZWN0RmFsbGJhY2tcIiwgTVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyksXG4gXHRTTk1QX01JQl9JVEVNKFwiRmFsbGJhY2tGYWlsZWRcIiwgTVBUQ1BfTUlCX0ZBTExCQUNLRkFJTEVEKSxcbiBcdFNOTVBfTUlCX0lURU0oXCJXaW5Qcm9iZVwiLCBNUFRDUF9NSUJfV0lOUFJPQkUpLFxuK1x0U05NUF9NSUJfSVRFTShcIkJhY2tsb2dEcm9wXCIsIE1QVENQX01JQl9CQUNLTE9HRFJPUCksXG4rXHRTTk1QX01JQl9JVEVNKFwiUmN2UHJ1bmVkXCIsIE1QVENQX01JQl9SQ1ZQUlVORUQpLFxuK1x0U05NUF9NSUJfSVRFTShcIk9mb1BydW5lZFwiLCBNUFRDUF9NSUJfT0ZPX1BSVU5FRCksXG4gfTtcbiBcbiAvKiBtcHRjcF9taWJfYWxsb2MgLSBhbGxvY2F0ZSBwZXJjcHUgbWliIGNvdW50ZXJzXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21pYi5oIGIvbmV0L21wdGNwL21pYi5oXG5pbmRleCA4MTIyMThiNWVkMmJmYy4uMThmMzVmN2UwYTJkNGUgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbWliLmhcbisrKyBiL25ldC9tcHRjcC9taWIuaFxuQEAgLTg4LDYgKzg4LDkgQEAgZW51bSBsaW51eF9tcHRjcF9taWJfZmllbGQge1xuIFx0TVBUQ1BfTUlCX1NJTVVMVENPTk5GQUxMQkFDSyxcdC8qIFNpbXVsdGFuZW91cyBjb25uZWN0ICovXG4gXHRNUFRDUF9NSUJfRkFMTEJBQ0tGQUlMRUQsXHQvKiBDYW4ndCBmYWxsYmFjayBkdWUgdG8gbXNrIHN0YXR1cyAqL1xuIFx0TVBUQ1BfTUlCX1dJTlBST0JFLFx0XHQvKiBNUFRDUC1sZXZlbCB6ZXJvIHdpbmRvdyBwcm9iZSAqL1xuK1x0TVBUQ1BfTUlCX0JBQ0tMT0dEUk9QLFx0XHQvKiBCYWNrbG9nIG92ZXIgbWVtb3J5IGxpbWl0ICovXG4rXHRNUFRDUF9NSUJfUkNWUFJVTkVELFx0XHQvKiBEcm9wcGVkIGR1ZSB0byBtZW1vcnkgY29uc3RyYWlucyAqL1xuK1x0TVBUQ1BfTUlCX09GT19QUlVORUQsXHRcdC8qIE1QVENQLWxldmVsIE9vTyBxdWV1ZSBwcnVuZWQgKi9cbiBcdF9fTVBUQ1BfTUlCX01BWFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL29wdGlvbnMuYyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbmluZGV4IGM2NjQwMjNkMzdiYThlLi43Yjk1NGVmNzg2NzIzMCAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9vcHRpb25zLmNcbisrKyBiL25ldC9tcHRjcC9vcHRpb25zLmNcbkBAIC0xMTI3LDggKzExMjcsMzAgQEAgc3RhdGljIGJvb2wgYWRkX2FkZHJfaG1hY192YWxpZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuIFx0cmV0dXJuIGhtYWMgPT0gbXBfb3B0LVx1MDAzZWFobWFjO1xuIH1cbiBcbi0vKiBSZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAob3Igc3ViZmxvdyBoYXMgYmVlbiByZXNldCksXG4tICogZWxzZSByZXR1cm4gdHJ1ZS5cbitzdGF0aWMgYm9vbCBtcHRjcF9vdmVyX2xpbWl0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbitcdHU2NCBtZW0gPSBza19ybWVtX2FsbG9jX2dldChzayk7XG4rXG4rXHRtZW0gKz0gUkVBRF9PTkNFKG1zay1cdTAwM2ViYWNrbG9nX2xlbik7XG4rXHRpZiAobGlrZWx5KG1lbSBcdTAwM2M9IFJFQURfT05DRShzay1cdTAwM2Vza19yY3ZidWYpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogQXZvaWQgc2lsZW50bHkgZHJvcHBpbmcgcHVyZSBhY2tzLCBmaW4gb3IgemVybyB3aW4gcHJvYmVzLiAqL1xuK1x0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgfHxcbitcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNldGNwX2ZsYWdzIFx1MDAyNiBUQ1BIRFJfRklOIHx8XG4rXHQgICAgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VlbmRfc2VxLCB0Y3Bfc2soc3NrKS1cdTAwM2VyY3Zfbnh0KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogRHJvcHBlZCBkdWUgdG8gbWVtb3J5IGNvbnN0cmFpbnRzLCBzY2hlZHVsZSBhbiBhY2suICovXG4rXHRpbmV0X2Nzayhzc2spLVx1MDAzZWljc2tfYWNrLnBlbmRpbmcgfD0gSUNTS19BQ0tfTk9NRU0gfCBJQ1NLX0FDS19OT1c7XG4rXHRpbmV0X2Nza19zY2hlZHVsZV9hY2soc3NrKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKiBSZXR1cm4gZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgZHJvcCB0aGUgcGFja2V0LCBpLmUuIGluIGNhc2Ugb2YgZXJyb3IsXG4rICogc3ViZmxvdyBoYXMgYmVlbiByZXNldCwgb3Igb3ZlciBtZW1vcnkgbGltaXRzLlxuICAqL1xuIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuQEAgLTExNTQsNyArMTE3Niw3IEBAIGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdF9fbXB0Y3BfZGF0YV9hY2tlZChzdWJmbG93LVx1MDAzZWNvbm4pO1xuIFx0XHRtcHRjcF9kYXRhX3VubG9jayhzdWJmbG93LVx1MDAzZWNvbm4pO1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0cmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXHUwMDNlY29ubiwgc2ssIHNrYik7XG4gXHR9XG4gXG4gXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFx1MDAyNm1wX29wdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggY2E2NDRlYzUzZWVkYjEuLjVjZjQ0ZWFiNzZmMWM0IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMzczLDYgKzM3Myw0OSBAQCBzdGF0aWMgdm9pZCBtcHRjcF9pbml0X3NrYihzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LFxuIFx0c2tiX2RzdF9kcm9wKHNrYik7XG4gfVxuIFxuKy8qIFwiSW5zcGlyZWRcIiBmcm9tIHRoZSBUQ1AgdmVyc2lvbjsgbWFpbiBkaWZmZXJlbmNlOiBzdG9wIGFzIHNvb24gYXMgdGhlIE1QVENQXG4rICogc29ja2V0IGlzIHVuZGVyIG1lbW9yeSBsaW1pdC5cbisgKi9cbitzdGF0aWMgYm9vbCBtcHRjcF9wcnVuZV9vZm9fcXVldWUoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgKnByZXY7XG4rXHRib29sIHBydW5lZCA9IGZhbHNlO1xuK1x0dTY0IG1lbTtcbitcbitcdGlmIChSQl9FTVBUWV9ST09UKFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG5vZGUgPSBcdTAwMjZtc2stXHUwMDNlb29vX2xhc3Rfc2tiLVx1MDAzZXJibm9kZTtcbitcbitcdGRvIHtcbitcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJiX3RvX3NrYihub2RlKTtcbitcbitcdFx0LyogU3RvcCBwcnVuaW5nIGlmIHRoZSBpbmNvbWluZyBza2Igd291bGQgbGFuZCBpbiBPb08gdGFpbC4gKi9cbitcdFx0aWYgKGFmdGVyNjQoc2VxLCBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxKSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0cHJ1bmVkID0gdHJ1ZTtcbitcdFx0cHJldiA9IHJiX3ByZXYobm9kZSk7XG4rXHRcdHJiX2VyYXNlKG5vZGUsIFx1MDAyNm1zay1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUpO1xuK1x0XHRtcHRjcF9kcm9wKHNrLCBza2IpO1xuK1x0XHRtc2stXHUwMDNlb29vX2xhc3Rfc2tiID0gcmJfdG9fc2tiKHByZXYpO1xuK1xuK1x0XHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbitcdFx0aWYgKG1lbSBcdTAwM2M9IHNrLVx1MDAzZXNrX3JjdmJ1ZilcbitcdFx0XHRicmVhaztcbitcbitcdFx0bm9kZSA9IHByZXY7XG4rXHR9IHdoaWxlIChub2RlKTtcbitcbitcdGlmIChwcnVuZWQpXG4rXHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIE1QVENQX01JQl9PRk9fUFJVTkVEKTtcbitcbitvdXQ6XG4rXHRtZW0gPSAodW5zaWduZWQgaW50KXNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbitcdHJldHVybiBtZW0gXHUwMDNjPSBzay1cdTAwM2Vza19yY3ZidWY7XG4rfVxuK1xuIHN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHU2NCBjb3B5X2xlbiA9IE1QVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgLSBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxO1xuQEAgLTM4MSw2ICs0MjQsMTcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRtcHRjcF9ib3Jyb3dfZndkbWVtKHNrLCBza2IpO1xuIFxuK1x0LyogQ2FuJ3QgZHJvcCBwYWNrZXRzIGZvciBmYWxsYmFjayBzb2NrZXQgdGhpcyBsYXRlLCBvciB0aGUgc3RyZWFtXG4rXHQgKiB3aWxsIGJyZWFrLlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIV9fbXB0Y3BfY2hlY2tfZmFsbGJhY2sobXNrKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlKHNrLCBNUFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VtYXBfc2VxKSkge1xuK1x0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfUkNWUFJVTkVEKTtcbitcdFx0bXB0Y3BfZHJvcChzaywgc2tiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuIFx0aWYgKE1QVENQX1NLQl9DQihza2IpLVx1MDAzZW1hcF9zZXEgPT0gbXNrLVx1MDAzZWFja19zZXEpIHtcbiBcdFx0LyogaW4gc2VxdWVuY2UgKi9cbiBcdFx0bXNrLVx1MDAzZWJ5dGVzX3JlY2VpdmVkICs9IGNvcHlfbGVuO1xuQEAgLTY3NSw2ICs3MjksNyBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcbiBcdHN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDtcbiBcdHN0cnVjdCBzb2NrICpzc2sgPSBza2ItXHUwMDNlc2s7XG4gXHRib29sIGZyYWdzdG9sZW47XG4rXHR1NjQgbGltaXQ7XG4gXHRpbnQgZGVsdGE7XG4gXG4gXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSkge1xuQEAgLTY4Miw2ICs3MzcsMTYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdC8qIFNpbWlsYXIgYWRkaXRpb25hbCBhbGxvd2FuY2UgYXMgcGxhaW4gVENQLiAqL1xuK1x0bGltaXQgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbitcdGxpbWl0ICs9IChsaW1pdCBcdTAwM2VcdTAwM2UgMSkgKyA2NCAqIDEwMjQ7XG4rXHRsaW1pdCA9IG1pbl90KHU2NCwgbGltaXQsIFVJTlRfTUFYKTtcbitcdGlmIChtc2stXHUwMDNlYmFja2xvZ19sZW4gXHUwMDNlIGxpbWl0IFx1MDAyNlx1MDAyNiAhX19tcHRjcF9jaGVja19mYWxsYmFjayhtc2spKSB7XG4rXHRcdF9fTVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTVBUQ1BfTUlCX0JBQ0tMT0dEUk9QKTtcbitcdFx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9TT0NLRVRfQkFDS0xPRyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdC8qIFRyeSB0byBjb2FsZXNjZSB3aXRoIHRoZSBsYXN0IHNrYiBpbiBvdXIgYmFja2xvZyAqL1xuIFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpKVxuIFx0XHR0YWlsID0gbGlzdF9sYXN0X2VudHJ5KFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QsIHN0cnVjdCBza19idWZmLCBsaXN0KTtcbkBAIC03NTMsNyArODE4LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXG4gXG4gXHRcdFx0bXB0Y3BfaW5pdF9za2Ioc3NrLCBza2IsIG9mZnNldCwgbGVuKTtcbiBcbi1cdFx0XHRpZiAob3duX21zayBcdTAwMjZcdTAwMjYgc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzYyBzay1cdTAwM2Vza19yY3ZidWYpIHtcbitcdFx0XHRpZiAob3duX21zaykge1xuIFx0XHRcdFx0bXB0Y3Bfc3ViZmxvd19sZW5kX2Z3ZG1lbShzdWJmbG93LCBza2IpO1xuIFx0XHRcdFx0cmV0IHw9IF9fbXB0Y3BfbW92ZV9za2Ioc2ssIHNrYik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0xMTM2LDEzICsxMjAxLDYgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHN0cnVjdCBzb2NrICpzaylcbiBcdG1wdGNwX3dyaXRlX3NwYWNlKHNrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG4te1xuLVx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbi1cdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4tXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIG1wdGNwX2VudGVyX21lbW9yeV9wcmVzc3VyZShzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbkBAIC0yMjA5LDEyICsyMjY3LDcgQEAgc3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRib29sIG1vdmVkID0gZmFsc2U7XG4gXG4tXHQqZGVsdGEgPSAwO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogSWYgdGhlIG1zayByZWN2YnVmIGlzIGZ1bGwgc3RvcCwgZG9uJ3QgZHJvcCAqL1xuLVx0XHRpZiAoc2tfcm1lbV9hbGxvY19nZXQoc2spIFx1MDAzZSBzay1cdTAwM2Vza19yY3ZidWYpXG4tXHRcdFx0YnJlYWs7XG4tXG4gXHRcdHByZWZldGNoKHNrYi1cdTAwM2VuZXh0KTtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuIFx0XHQqZGVsdGEgKz0gc2tiLVx1MDAzZXRydWVzaXplO1xuQEAgLTIyNDIsOSArMjI5NSw3IEBAIHN0YXRpYyBib29sIG1wdGNwX2Nhbl9zcG9vbF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfdW5hY2NvdW50ZWQgXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3NvY2tldCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgICAgbWVtX2Nncm91cF9mcm9tX3NrKHNrKSk7XG4gXG4tXHQvKiBEb24ndCBzcG9vbCB0aGUgYmFja2xvZyBpZiB0aGUgcmN2YnVmIGlzIGZ1bGwuICovXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtc2stXHUwMDNlYmFja2xvZ19saXN0KSB8fFxuLVx0ICAgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSBcdTAwM2Ugc2stXHUwMDNlc2tfcmN2YnVmKVxuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXNrLVx1MDAzZWJhY2tsb2dfbGlzdCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdElOSVRfTElTVF9IRUFEKHNrYnMpO1xuQEAgLTIyNTIsMjAgKzIzMDMsMTIgQEAgc3RhdGljIGJvb2wgbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1wdGNwX2JhY2tsb2dfc3Bvb2xlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBtb3ZlZCxcbi1cdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqc2ticylcbi17XG4tXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuLVxuLVx0V1JJVEVfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcbi1cdGxpc3Rfc3BsaWNlKHNrYnMsIFx1MDAyNm1zay1cdTAwM2ViYWNrbG9nX2xpc3QpO1xuLX1cbi1cbiBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxuIHtcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHNrYnM7XG4gXHRib29sIGVucXVldWVkID0gZmFsc2U7XG4tXHR1MzIgbW92ZWQ7XG4rXHR1MzIgbW92ZWQgPSAwO1xuIFxuIFx0bXB0Y3BfZGF0YV9sb2NrKHNrKTtcbiBcdHdoaWxlIChtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzaywgXHUwMDI2c2ticykpIHtcbkBAIC0yMjczLDggKzIzMTYsOCBAQCBzdGF0aWMgYm9vbCBtcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRlbnF1ZXVlZCB8PSBfX21wdGNwX21vdmVfc2ticyhzaywgXHUwMDI2c2ticywgXHUwMDI2bW92ZWQpO1xuIFxuIFx0XHRtcHRjcF9kYXRhX2xvY2soc2spO1xuLVx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbitcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWJhY2tsb2dfbGVuLCBtc2stXHUwMDNlYmFja2xvZ19sZW4gLSBtb3ZlZCk7XG4gXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4gXG4gXHRpZiAoZW5xdWV1ZWQgXHUwMDI2XHUwMDI2IG1wdGNwX2Vwb2xsaW5fcmVhZHkoc2spKVxuQEAgLTI3ODUsNDQgKzI4MjgsMjIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4gXHRza19lcnJvcl9yZXBvcnQoc2spO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuKy8qXG4rICogUmV0cmFuc21pdCB0aGUgc3BlY2lmaWVkIGRhdGEgZnJhZ21lbnQgb24gYWxsIHRoZSBzZWxlY3RlZCBzdWJmbG93cyxcbisgKiBzdGFydGluZyBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2VcbisgKi9cbitzdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXG4rXHRcdFx0XHR1NjQgc2VudF9zZXEpXG4ge1xuIFx0c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyBpbmZvID0geyAuZGF0YV9sb2NrX2hlbGQgPSB0cnVlLCB9O1xuIFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKHNrKTtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4tXHRzdHJ1Y3QgbXB0Y3BfZGF0YV9mcmFnICpkZnJhZztcbiBcdHN0cnVjdCBzb2NrICpzc2s7XG4tXHRpbnQgcmV0LCBlcnI7XG4tXHR1MTYgbGVuID0gMDtcbi1cbi1cdG1wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuLVxuLVx0LyogZmlyc3QgY2hlY2sgc3NrOiBuZWVkIHRvIGtpY2sgXCJzdGFsZVwiIGxvZ2ljICovXG4tXHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuLVx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4tXHRpZiAoIWRmcmFnKSB7XG4tXHRcdGlmIChtcHRjcF9kYXRhX2Zpbl9lbmFibGVkKG1zaykpIHtcbi1cdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4tXG4tXHRcdFx0V1JJVEVfT05DRShpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMsXG4tXHRcdFx0XHQgICBpY3NrLVx1MDAzZWljc2tfcmV0cmFuc21pdHMgKyAxKTtcbi1cdFx0XHRtcHRjcF9zZXRfZGF0YWZpbl90aW1lb3V0KHNrKTtcbi1cdFx0XHRtcHRjcF9zZW5kX2Fjayhtc2spO1xuLVxuLVx0XHRcdGdvdG8gcmVzZXRfdGltZXI7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKCFtcHRjcF9zZW5kX2hlYWQoc2spKVxuLVx0XHRcdGdvdG8gY2xlYXJfc2NoZWR1bGVkO1xuLVxuLVx0XHRnb3RvIHJlc2V0X3RpbWVyO1xuLVx0fVxuLVxuLVx0aWYgKGVycilcbi1cdFx0Z290byByZXNldF90aW1lcjtcbitcdGludCByZXQsIGxlbiA9IDA7XG4gXG4gXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xuIFx0XHRpZiAoUkVBRF9PTkNFKHN1YmZsb3ctXHUwMDNlc2NoZWR1bGVkKSkge1xuK1x0XHRcdHUxNiBvZmZzZXQgPSBzZW50X3NlcSAtIGRmcmFnLVx1MDAzZWRhdGFfc2VxO1xuIFx0XHRcdHUxNiBjb3BpZWQgPSAwO1xuIFxuIFx0XHRcdG1wdGNwX3N1YmZsb3dfc2V0X3NjaGVkdWxlZChzdWJmbG93LCBmYWxzZSk7XG5AQCAtMjgzMiw3ICsyODUzLDcgQEAgc3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcbiBcdFx0XHRsb2NrX3NvY2soc3NrKTtcbiBcbiBcdFx0XHQvKiBsaW1pdCByZXRyYW5zbWlzc2lvbiB0byB0aGUgYnl0ZXMgYWxyZWFkeSBzZW50IG9uIHNvbWUgc3ViZmxvd3MgKi9cbi1cdFx0XHRpbmZvLnNlbnQgPSAwO1xuK1x0XHRcdGluZm8uc2VudCA9IG9mZnNldDtcbiBcdFx0XHRpbmZvLmxpbWl0ID0gUkVBRF9PTkNFKG1zay1cdTAwM2Vjc3VtX2VuYWJsZWQpID8gZGZyYWctXHUwMDNlZGF0YV9sZW4gOlxuIFx0XHRcdFx0XHRcdFx0XHQgICAgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50O1xuIFxuQEAgLTI4NDcsNyArMjg2OCw3IEBAIHN0YXRpYyB2b2lkIF9fbXB0Y3BfcmV0cmFucyhzdHJ1Y3Qgc29jayAqc2spXG4gXHRcdFx0ICAgICFtc2stXHUwMDNlYWxsb3dfc3ViZmxvd3MpIHtcbiBcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1zay1cdTAwM2VmYWxsYmFja19sb2NrKTtcbiBcdFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuLVx0XHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4rXHRcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdHdoaWxlIChpbmZvLnNlbnQgXHUwMDNjIGluZm8ubGltaXQpIHtcbkBAIC0yODcwLDEzICsyODkxLDEwOSBAQCBzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuIFx0XHRcdHJlbGVhc2Vfc29jayhzc2spO1xuIFx0XHR9XG4gXHR9XG4rXHRyZXR1cm4gbGVuO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93O1xuK1x0c3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWc7XG4rXHRib29sIG5lZWRfcmV0cmFucztcbitcdHU2NCByZXRyYW5zX3NlcTtcbitcdGludCBlcnIsIGxlbjtcbiBcbi1cdG1zay1cdTAwM2VieXRlc19yZXRyYW5zICs9IGxlbjtcbi1cdGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCA9IG1heChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQsIGxlbik7XG4rXHRtcHRjcF9kYXRhX2xvY2soc2spO1xuK1x0X19tcHRjcF9jbGVhbl91bmFfd2FrZXVwKHNrKTtcbitcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRkZnJhZyA9IG1wdGNwX3J0eF9oZWFkKHNrKTtcbitcdG5lZWRfcmV0cmFucyA9ICEhZGZyYWc7XG4rXHRtcHRjcF9kYXRhX3VubG9jayhzayk7XG4rXHRpZiAoIWRmcmFnKVxuK1x0XHRnb3RvIGNoZWNrX2RhdGFfZmluO1xuIFxuLVx0LyogV2l0aCBjc3VtIGVuYWJsZWQgcmV0cmFuc21pc3Npb24gY2FuIHNlbmQgbmV3IGRhdGEuICovXG4tXHRpZiAoYWZ0ZXI2NChkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcSwgbXNrLVx1MDAzZXNuZF9ueHQpKVxuLVx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VzbmRfbnh0LCBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcSk7XG4rXHRmb3IgKDs7KSB7XG4rXHRcdGJvb2wgYWxyZWFkeV9yZXRyYW5zO1xuK1x0XHR1NjQgc2VudF9zZXE7XG4rXG4rXHRcdC8qIFRoZSBkZWZhdWx0IHNjaGVkdWxlciB3aWxsIGtpY2sgXCJzdGFsZVwiIGxvZ2ljLCB0aGF0IGluXG4rXHRcdCAqIHR1cm4gY2FuIHByb2Nlc3MgaW5jb21pbmcgYWNrcyBhbmQgY2xlYW4gdGhlIFJUWCBxdWV1ZTtcbitcdFx0ICogZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgZGZyYWcgd2lsbCBzdGlsbCBiZSBhcm91bmRcbitcdFx0ICogYWZ0ZXJ3YXJkcy5cbitcdFx0ICovXG4rXHRcdGdldF9wYWdlKGRmcmFnLVx1MDAzZXBhZ2UpO1xuK1x0XHRlcnIgPSBtcHRjcF9zY2hlZF9nZXRfcmV0cmFucyhtc2spO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0cHV0X3BhZ2UoZGZyYWctXHUwMDNlcGFnZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0LyogSW5jb21pbmcgYWNrcyBjYW4gaGF2ZSBtb3ZlZCByZXRyYW5zIHNlcXVlbmNlIGFmdGVyXG4rXHRcdCAqIHRoZSBjdXJyZW50IGRmcmFnLCBpZiBzbyB0cnkgdG8gc3RhcnQgYWdhaW4gZnJvbSBSVFggaGVhZC5cbitcdFx0ICovXG4rXHRcdG1wdGNwX2RhdGFfbG9jayhzayk7XG4rXHRcdGFscmVhZHlfcmV0cmFucyA9ICFiZWZvcmU2NChtc2stXHUwMDNlc25kX3VuYSwgZGZyYWctXHUwMDNlZGF0YV9zZXEgK1xuK1x0XHRcdFx0XHQgICAgZGZyYWctXHUwMDNlYWxyZWFkeV9zZW50KTtcbitcdFx0cHV0X3BhZ2UoZGZyYWctXHUwMDNlcGFnZSk7XG4rXHRcdGlmIChhbHJlYWR5X3JldHJhbnMpIHtcbitcdFx0XHRfX21wdGNwX2NsZWFuX3VuYV93YWtldXAoc2spO1xuK1x0XHRcdHJldHJhbnNfc2VxID0gbXNrLVx1MDAzZXNuZF91bmE7XG4rXHRcdFx0ZGZyYWcgPSBtcHRjcF9ydHhfaGVhZChzayk7XG4rXHRcdFx0bmVlZF9yZXRyYW5zID0gISFkZnJhZztcbitcdFx0fSBlbHNlIGlmIChhZnRlcjY0KG1zay1cdTAwM2VzbmRfdW5hLCByZXRyYW5zX3NlcSkpIHtcbitcdFx0XHRyZXRyYW5zX3NlcSA9IG1zay1cdTAwM2VzbmRfdW5hO1xuK1x0XHR9XG4rXHRcdG1wdGNwX2RhdGFfdW5sb2NrKHNrKTtcbitcbitcdFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcbitcdFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWRmcmFnIHx8ICFkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIENhbiBmYWlsIG9ubHkgaW4gY2FzZSBvZiBmYWxsYmFjay4gKi9cbitcdFx0bGVuID0gX19tcHRjcF9wdXNoX3JldHJhbnMoc2ssIGRmcmFnLCByZXRyYW5zX3NlcSk7XG4rXHRcdGlmIChsZW4gXHUwMDNjIDApXG4rXHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4rXG4rXHRcdHJldHJhbnNfc2VxICs9IGxlbjtcbitcdFx0bXNrLVx1MDAzZWJ5dGVzX3JldHJhbnMgKz0gbGVuO1xuK1x0XHRkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgPSBtYXhfdCh1MTYsIGRmcmFnLVx1MDAzZWFscmVhZHlfc2VudCxcbitcdFx0XHRcdFx0ICAgIHJldHJhbnNfc2VxIC0gZGZyYWctXHUwMDNlZGF0YV9zZXEpO1xuK1xuK1x0XHQvKiBXaXRoIGNzdW0gZW5hYmxlZCByZXRyYW5zbWlzc2lvbiBjYW4gc2VuZCBuZXcgZGF0YS4gKi9cbitcdFx0c2VudF9zZXEgPSBkZnJhZy1cdTAwM2VhbHJlYWR5X3NlbnQgKyBkZnJhZy1cdTAwM2VkYXRhX3NlcTtcbitcdFx0aWYgKGFmdGVyNjQoc2VudF9zZXEsIG1zay1cdTAwM2VzbmRfbnh0KSlcbitcdFx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VzbmRfbnh0LCBzZW50X3NlcSk7XG4rXG4rXHRcdC8qIEF0dGVtcHQgdGhlIG5leHQgZnJhZ21lbnQgb25seSBpZiB0aGUgY3VycmVudCBvbmUgaXNcbitcdFx0ICogY29tcGxldGVseSByZXRyYW5zbWl0dGVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKGJlZm9yZTY0KHJldHJhbnNfc2VxLCBkZnJhZy1cdTAwM2VkYXRhX3NlcSArIGRmcmFnLVx1MDAzZWRhdGFfbGVuKSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0ZGZyYWcgPSBsaXN0X2lzX2xhc3QoXHUwMDI2ZGZyYWctXHUwMDNlbGlzdCwgXHUwMDI2bXNrLVx1MDAzZXJ0eF9xdWV1ZSkgP1xuK1x0XHRcdFx0TlVMTCA6IGxpc3RfbmV4dF9lbnRyeShkZnJhZywgbGlzdCk7XG4rXHRcdGlmICghZGZyYWcpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHQvKiBBdHRlbXB0IGRhdGEtZmluIHJldHJhbnNtaXNzaW9uIG9ubHkgd2hlbiB0aGUgUlRYIHF1ZXVlIGlzIGVtcHR5LiAqL1xuK1x0aWYgKCFuZWVkX3JldHJhbnMpIHtcbitjaGVja19kYXRhX2ZpbjpcbitcdFx0aWYgKG1wdGNwX2RhdGFfZmluX2VuYWJsZWQobXNrKSkge1xuK1x0XHRcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcbitcbitcdFx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyxcbitcdFx0XHRcdCAgIGljc2stXHUwMDNlaWNza19yZXRyYW5zbWl0cyArIDEpO1xuK1x0XHRcdG1wdGNwX3NldF9kYXRhZmluX3RpbWVvdXQoc2spO1xuK1x0XHRcdG1wdGNwX3NlbmRfYWNrKG1zayk7XG4rXHRcdFx0Z290byByZXNldF90aW1lcjtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIW1wdGNwX3NlbmRfaGVhZChzaykpXG4rXHRcdFx0Z290byBjbGVhcl9zY2hlZHVsZWQ7XG4rXHR9XG4gXG4gcmVzZXRfdGltZXI6XG4gXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xuQEAgLTM2NzAsMTIgKzM3ODcsMTIgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXHRfX211c3RfaG9sZChcdTAwMjZzay1cdTAwM2Vza19sb2NrLnNsb2NrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhzayk7XG4rXHR1MzIgbW92ZWQgPSAwO1xuIFxuIFx0Zm9yICg7Oykge1xuIFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gKG1zay1cdTAwM2VjYl9mbGFncyBcdTAwMjYgTVBUQ1BfRkxBR1NfUFJPQ0VTU19DVFhfTkVFRCk7XG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgam9pbl9saXN0LCBza2JzO1xuIFx0XHRib29sIHNwb29sX2JsO1xuLVx0XHR1MzIgbW92ZWQ7XG4gXG4gXHRcdHNwb29sX2JsID0gbXB0Y3BfY2FuX3Nwb29sX2JhY2tsb2coc2ssIFx1MDAyNnNrYnMpO1xuIFx0XHRpZiAoIWZsYWdzIFx1MDAyNlx1MDAyNiAhc3Bvb2xfYmwpXG5AQCAtMzcwOCw5ICszODI1LDkgQEAgc3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c2stXHUwMDNlc2tfbG9jay5zbG9jayk7XG4tXHRcdGlmIChzcG9vbF9ibClcbi1cdFx0XHRtcHRjcF9iYWNrbG9nX3Nwb29sZWQoc2ssIG1vdmVkLCBcdTAwMjZza2JzKTtcbiBcdH1cbitcdGlmIChtb3ZlZClcbitcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlYmFja2xvZ19sZW4sIG1zay1cdTAwM2ViYWNrbG9nX2xlbiAtIG1vdmVkKTtcbiBcbiBcdGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChNUFRDUF9DTEVBTl9VTkEsIFx1MDAyNm1zay1cdTAwM2VjYl9mbGFncykpXG4gXHRcdF9fbXB0Y3BfY2xlYW5fdW5hX3dha2V1cChzayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDoxOS42NDMwMDA0ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTg5MjYzMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIE1lbW9yeSBNYW5hZ2VtZW50IGFuZCBSZXRyYW5zbWlzc2lvbiBFbmhhbmNlbWVudHMgLSBUaW1lIHRvIEZ1enohKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgTVBUQ1AgY29yZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZGluZyBuZXcgU05NUCBNSUIgaXRlbXMg4oCTIGBCYWNrbG9nRHJvcGAsIGBSY3ZQcnVuZWRgLCBgT2ZvUHJ1bmVkYCDigJMgdG8gZ2l2ZSB1cyBiZXR0ZXIgdmlzaWJpbGl0eSBpbnRvIGhvdyBNUFRDUCBpcyBoYW5kbGluZyBtZW1vcnkgcHJlc3N1cmUuIE1vcmUgaW1wb3J0YW50bHksIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhY3R1YWwgbWVtb3J5IGxpbWl0IGNoZWNrcyBhdCBzZXZlcmFsIHBvaW50cy4gSSdtIHNlZWluZyBgbXB0Y3Bfb3Zlcl9saW1pdGAgdGhhdCBkcm9wcyBwYWNrZXRzIHdoZW4gd2UgZXhjZWVkIHRoZSBsaW1pdCwgYW5kIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgLCB3aGljaCBnZXRzIHJpZCBvZiB0aGUgb3V0LW9mLW9yZGVyIHF1ZXVlIGlmIHdlIGV4Y2VlZCB0aGUgbGltaXQgdG9vLiBJdCdzIGFsc28gbWFraW5nIGFkanVzdG1lbnRzIGluIHRoZSBgX19tcHRjcF9hZGRfYmFja2xvZ2AgYW5kIGBfX21wdGNwX3JldHJhbnNgIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlc2UgbmV3IGNvbnN0cmFpbnRzLlxuXG5UaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyB0aGUgcHJvdG9jb2wgZnVuY3Rpb25zLCBhbmQgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgbG9naWMgd2l0aCBtZW1vcnkgaGFuZGxpbmcsIEknbSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuIFxuXG5Ob3csIGxldCdzIG5haWwgZG93biB3aGF0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSB3aG9sZSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgbW9zdCBvZiB0aGVtIHN0YXRpYy4gTGV0J3Mgc2VlLi4uXG5cbk1vZGlmaWVkIGZ1bmN0aW9uczpcbiogICBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2BcbiogICBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCAoc3RhdGljKVxuKiAgIGBfX21wdGNwX21vdmVfc2tiYCAoc3RhdGljKVxuKiAgIGBfX21wdGNwX2FkZF9iYWNrbG9nYCAoc3RhdGljKVxuKiAgIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIChzdGF0aWMpXG4qICAgYG1wdGNwX21vdmVfc2tic2AgKHN0YXRpYylcbiogICBgX19tcHRjcF9wdXNoX3JldHJhbnNgIChzdGF0aWMpXG4qICAgYF9fbXB0Y3BfcmV0cmFuc2AgKHN0YXRpYylcbiogICBgbXB0Y3BfcmVsZWFzZV9jYmAgKHN0YXRpYylcblxuSGFuZyBvbiwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzICpub24tc3RhdGljKiwgdGhhdCdzIGdvb2QgbmV3cy4gVGhhdCdzIGEgZ3JlYXQgcGxhY2UgdG8gc3RhcnQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGVzZSwgYnV0IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBhIGtleSBjYW5kaWRhdGUuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIHN0YXRpYyBuYXR1cmUgb2Ygc29tZXRoaW5nIGxpa2UgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGEgYmFycmllcjsgbm90IHRoYXQgSSBleHBlY3QgaXQgdG8gYmUsIGJ1dCBpdCdzIHdvcnRoIGNoZWNraW5nLlxuXG5Pa2F5LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCB0byBsb29rIGZvciB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYW55IG9mIHRoZXNlIG1vZGlmaWVkIHN0YXRpYyBvbmVzLiBUaGF0J3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGZ1enppbmcgZW50cnkgcG9pbnRzIGxpa2VseSBsaWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDoyNy4yMzIyNjY5MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1MTIxNTAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L21wdGNwLmg9MTU2PWludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTU4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNTk6Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNjAtXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI2Nj1zdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNzItXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNzM6c3RhdGljIGlubGluZSBib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLFxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjc0LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQ4ODQ9dm9pZCB0Y3BfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5MC1cXHQvKiBtcHRjcCBjYW4ndCB0ZWxsIHVzIHRvIGlnbm9yZSByZXNldCBwa3RzLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQ4OTE6XFx0ICogc28ganVzdCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBtcHRjcF9pbmNvbWluZ19vcHRpb25zKCkuXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDg5Mi1cXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00ODkzLVxcdGlmIChza19pc19tcHRjcChzaykpXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDg5NDpcXHRcXHRtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQ4OTUtXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz01NjA3PXN0YXRpYyB2b2lkIHRjcF9kYXRhX3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2MTYtXFx0ICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTYxNzpcXHRpZiAoc2tfaXNfbXB0Y3Aoc2spIFxcdTAwMjZcXHUwMDI2ICFtcHRjcF9pbmNvbWluZ19vcHRpb25zKHNrLCBza2IpKSB7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTYxOC1cXHRcXHRfX2tmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzM3OS1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MzgwOlxcdFxcdFxcdGlmIChza19pc19tcHRjcChzaykgXFx1MDAyNlxcdTAwMjYgIW1wdGNwX2luY29taW5nX29wdGlvbnMoc2ssIHNrYikpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzM4MS1cXHRcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEwNTM9c3RhdGljIHZvaWQgYWNrX3VwZGF0ZV9tc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTA3OC1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjEwNzk6XFx0LyogdGhpcyBhc3N1bWVzIG1wdGNwX2luY29taW5nX29wdGlvbnMoKSBpcyBpbnZva2VkIGFmdGVyIHRjcF9hY2soKSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTA4MC1cXHRpZiAoYWZ0ZXI2NChtc2stXFx1MDAzZXduZF9lbmQsIHNuZF9ueHQpKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0xMTMwPXN0YXRpYyBib29sIG1wdGNwX292ZXJfbGltaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTU0LSAqL1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTE1NTpib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE1Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ0OjM0Ljk4MzQ4OTUxMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTA2MDI5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0cGF0aCBUQ1AgSW5jb21pbmcgT3B0aW9ucyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgTVBUQ1AgaW5jb21pbmcgb3B0aW9ucyBhcmUgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlLCBhbmQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSB0d28ga2V5IHBsYWNlcyB3aXRoaW4gdGhlIFRDUCBzdGFjazogYHRjcF9kYXRhX3F1ZXVlYCBhbmQgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZSwgdG8gbWFrZSBzdXJlIGl0IGlzIHdvcmtpbmcgdGhlIHdheSBJIGludGVuZC5cblxuTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24sIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBhIGNvdXBsZSBvZiBjb3JlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ2xsIHJldmlldyBgX19tcHRjcF9yZXRyYW5zYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBUaGV5J3JlIHByb2JhYmx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHJldHJhbnNtaXNzaW9uIGFuZCBjb25uZWN0aW9uIHJlbGVhc2UgcGxheSBpbnRvIHRoaXMgb3B0aW9uIHByb2Nlc3NpbmcsIGdpdmVuIHdoZXJlIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBzaXR0aW5nIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhvc2UgaXMga2V5IHRvIGRlYnVnZ2luZyBhbmQgaW1wbGVtZW50aW5nIGFueSBuZXcgZmVhdHVyZSBpbiB0aGlzIGFyZWEuIFRpbWUgdG8gZGlnIGluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDQ6MzguMjc0MDk1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI2MTcyNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbXB0Y3BfcmV0cmFuc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDYzPXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTA4NC1cXHRcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZSA9IDE7XFxubmV0L21wdGNwL3BtLmM6MTA4NTpcXHRcXHRcXHRcXHRfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcG0uYy0xMDg2LVxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5NT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTMxOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2NTpcXHRuZWVkX3B1c2ggPSAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DRl9QVVNIKSBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY2LVxcdGlmICghZGlzcG9zZV9pdCkge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjgzNT1zdGF0aWMgaW50IF9fbXB0Y3BfcHVzaF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1wdGNwX2RhdGFfZnJhZyAqZGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4OTc6c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODk4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NDgtXFx0XFx0LyogYGFscmVhZHlfc2VudGAgY2FuIGJlIDAgZm9yIGBkZnJhZ2AgYmVsb25naW5nIHRvIHRoZSBSVFhcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyOTQ5OlxcdFxcdCAqICBxdWV1ZSBkdWUgdG8gX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YSgpLlxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5NTAtXFx0XFx0ICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTA2PXN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMTQzLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTVBUQ1BfV09SS19SVFgsIFxcdTAwMjZtc2stXFx1MDAzZWZsYWdzKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTQ0OlxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzE0NS1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3ODY9c3RhdGljIHZvaWQgbXB0Y3BfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODE4LVxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJJVChNUFRDUF9SRVRSQU5TTUlUKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozODE5OlxcdFxcdFxcdF9fbXB0Y3BfcmV0cmFucyhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgyMC1cXHRcXHRpZiAoc3Bvb2xfYmwgXFx1MDAyNlxcdTAwMjYgX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MDg9dm9pZCBfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMC1cXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6ODExOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTgxMi12b2lkIG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzdHJ1Y3Qgc29jayAqc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDo0NC4yMDAyNzkzNjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgzNDYzMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTXVsdGlwYXRoIFRDUCBSZXRyYW5zbWlzc2lvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgTVBUQ1AgaGFuZGxlcyByZXRyYW5zbWlzc2lvbnMsIGFuZCBpdCBsb29rcyBsaWtlIGBfX21wdGNwX3JldHJhbnNgIGlzIHRoZSBrZXkgZnVuY3Rpb24uIEl0J3MgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gTm93LCB0aGF0IGBtcHRjcF9yZWxlYXNlX2NiYCBpcyByaW5naW5nIGEgYmVsbC4gQWgsIHJpZ2h0LCB0aGF0J3MgdGhlIHJlbGVhc2UgY2FsbGJhY2sgZm9yIE1QVENQIHNvY2tldHMhXG5cbkludGVyZXN0aW5nLi4uIGl0J3MgcmVnaXN0ZXJlZCBhcyBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2VyZWxlYXNlX2NiYC4gSSdsbCBoYXZlIHRvIGtlZXAgdGhhdCBhc3NvY2lhdGlvbiBpbiBtaW5kLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHJlbGVhc2luZyB0aGUgc29ja2V0IGFuZCByZXRyYW5zbWlzc2lvbnMuIExldCdzIGRlbHZlIGludG8gdGhlIGNvZGUgZm9yIGBtcHRjcF9yZWxlYXNlX2NiYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHRvIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRpZyB0aHJvdWdoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NDo0Ny42ODM3NDQ5ODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NDI3MzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9yZWxlYXNlX2NiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTM3NzM9dm9pZCBfX21wdGNwX2NoZWNrX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzc4NS0vKiBwcm9jZXNzZXMgZGVmZXJyZWQgZXZlbnRzIGFuZCBmbHVzaCB3bWVtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mzc4NjpzdGF0aWMgdm9pZCBtcHRjcF9yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzg3LVxcdF9fbXVzdF9ob2xkKFxcdTAwMjZzay1cXHUwMDNlc2tfbG9jay5zbG9jaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQxODk9c3RhdGljIHN0cnVjdCBwcm90byBtcHRjcF9wcm90ID0ge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDIwMi1cXHQucmVjdm1zZ1xcdD0gbXB0Y3BfcmVjdm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjAzOlxcdC5yZWxlYXNlX2NiXFx0PSBtcHRjcF9yZWxlYXNlX2NiLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDQtXFx0Lmhhc2hcXHRcXHQ9IG1wdGNwX2hhc2gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ0OjUyLjU1ODAyOTA1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1MDEyNjgyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgXHUwMDI2IEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoaXMgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIHRoZSBjb3JlIGNhbGxiYWNrIGZvciByZWxlYXNpbmcgc29ja2V0cywgYW5kIHRoaXMgcGF0Y2ggaGFzIGNsZWFybHkgbWFkZSBzb21lIGtleSBjaGFuZ2VzLiBUaGV5J3JlIHRyYWNraW5nICdtb3ZlZCcgYW5kIGFkanVzdGluZyBgbXNrLVx1MDAzZWJhY2tsb2dfbGVuYCB3aXRoaW4gaXQuIEludGVyZXN0aW5nLiBPbiB0b3Agb2YgdGhhdCwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGlzIG5vdyBjaGVja2luZyBmb3IgYG1wdGNwX292ZXJfbGltaXRgLCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JgIGlzIGNhbGxpbmcgYG1wdGNwX3BydW5lX29mb19xdWV1ZWAuIEZpbmFsbHksIHRoZSBtb2RpZmljYXRpb24gb2YgYF9fbXB0Y3BfYWRkX2JhY2tsb2dgIGlzIGNoZWNraW5nIHRoZSBgbXNrLVx1MDAzZWJhY2tsb2dfbGVuIFx1MDAzZSBsaW1pdGAsIHdoaWxlIHRoZSBgX19tcHRjcF9yZXRyYW5zYCBmdW5jdGlvbiBoYXMgYmVlbiBtb2RpZmllZCB0byByZXRyYW5zbWl0IG11bHRpcGxlIGZyYWdtZW50cy5cblxuR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBlbnRyeSBwb2ludHMuIEZyb20gYSBjdXJzb3J5IGdsYW5jZSwgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3Bfd29ya2VyYCB3aGljaCB0aGVuIGNhbGxzIGBfX21wdGNwX3JldHJhbnNgIHNlZW0gbGlrZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLiBBbmQsIG9mIGNvdXJzZSwgdGhhdCBtb2RpZmllZCBgbXB0Y3BfcmVsZWFzZV9jYmAsIHRob3VnaCBpdCdzIG1hcmtlZCBhcyBzdGF0aWMuIEhtbS4uLiBpdCdzIGEgZnVuY3Rpb24gcG9pbnRlciB0YXJnZXQgZnJvbSBgcmVsZWFzZV9zb2NrYCwgc28gdGhhdCBjaGFuZ2VzIHRoaW5ncy4gSXMgdGhhdCBhIGdvb2QgZm9jdXMgc3ltYm9sPyBUaGUgZmFjdCB0aGF0IGl0J3Mgc3RhdGljIGdpdmVzIG1lIHBhdXNlLCBidXQgaXQncyAqZGVmaW5pdGVseSogYSBmdW5jdGlvbiBwb2ludGVyIHNvIGl0J3MgYSBzb2xpZCB0YXJnZXQuXG5cbkxldCdzIHNlZTogYG1wdGNwX2luY29taW5nX29wdGlvbnNgICppcyogbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZC4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIGlzIHRoZXJlICphbnkqIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXM/IGBtcHRjcF9yZWN2bXNnYCBpc24ndCBtb2RpZmllZCBzbyB0aGF0J3Mgb3V0LiBJcyBgbXB0Y3Bfd29ya2VyYCBzdGF0aWM/IFllcywgaXQgaXMuIEFscmlnaHQsIGJhY2sgdG8gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAgYXMgdGhlIHByaW1hcnkgZm9jdXMsIHRoZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTE3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjAyLjA1OTMwMDgzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3OTAyMjY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF93b3JrZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9MTA3Mz1ib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Ny1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDc4OlxcdC8qIEdldCBhIHJlZmVyZW5jZSBvbiB0aGlzIHNvY2tldCwgbXB0Y3Bfd29ya2VyKCkgd2lsbCByZWxlYXNlIGl0Llxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEwNzk6XFx0ICogQXMgbXB0Y3Bfd29ya2VyKCkgbWlnaHQgY29tcGxldGUgYmVmb3JlIHVzLCB3ZSBjYW4gbm90IGF2b2lkXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA4MC1cXHQgKiBhIHNvY2tfaG9sZCgpL3NvY2tfcHV0KCkgaWYgc2NoZWR1bGVfd29yaygpIHJldHVybnMgZmFsc2UuXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTAtXFx0ICAgIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgc29ja19mbGFnKHNzaywgU09DS19ERUFEKSkpIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNjUxOlxcdFxcdC8qIGVuc3VyZSBsYXRlciBjaGVjayBpbiBtcHRjcF93b3JrZXIoKSB3aWxsIGRpc3Bvc2UgdGhlIG1zayAqL1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NTItXFx0XFx0c29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI3ODI9c3RhdGljIHZvaWQgbXB0Y3BfY2hlY2tfZmFzdGNsb3NlKHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yODIyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI4MjM6XFx0LyogdGhlIGNhbGxpbmcgbXB0Y3Bfd29ya2VyIHdpbGwgcHJvcGVybHkgZGVzdHJveSB0aGUgc29ja2V0ICovXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjgyNC1cXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzA3MD1zdGF0aWMgdm9pZCBtcHRjcF9kb19mYXN0Y2xvc2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTA2OnN0YXRpYyB2b2lkIG1wdGNwX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzEwNy17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMTU1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjItXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMTYzOlxcdElOSVRfV09SSyhcXHUwMDI2bXNrLVxcdTAwM2V3b3JrLCBtcHRjcF93b3JrZXIpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMxNjQtXFx0bXNrLVxcdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NTowNy4wMzgzMzM2MTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MTU5MDY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTVBUQ1AgRGF0YSBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gYG1wdGNwX3dvcmtlcmAgaXMgZGVmaW5pdGVseSBzdGF0aWMsIHRoYXQncyBjbGVhci4gQnV0IEknbSBub3cgZGlnZ2luZyBkZWVwZXIsIGFuZCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgYG1wdGNwX2luY29taW5nX29wdGlvbnNgPyBBaCwgdGhhdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgbGlrZWx5IG1vcmUgd2lkZWx5IGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVkIGluIHZhcmlvdXMgY29udGV4dHMuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLiBMZXQncyBjaGVjayBgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9uc2AsIGl0IGxvb2tzIGxpa2UgdGhpcyBvbmUgaXNuJ3QgbW9kaWZpZWQgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIGBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0YCBkb2Vzbid0IHNlZW0gdG8gYmUgbW9kaWZpZWQgZWl0aGVyLCBpbnRlcmVzdGluZy4gU2luY2UgSSBhbSBleGFtaW5pbmcgdGhlIHBvdGVudGlhbCBmb3IgY29uY3VycmVuY3kgaXNzdWVzLCBJIHRoaW5rIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYW55IGNhbGwgc2l0ZXMgdG8gYF9fbXB0Y3BfYWRkX2JhY2tsb2dgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM2NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjEwLjg3OTkyNzcyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwMDc4MDI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21wdGNwX2FkZF9iYWNrbG9nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTcxNj1zdGF0aWMgdm9pZCBtcHRjcF9kc3NfY29ycnVwdGlvbihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNzIzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjcyNDpzdGF0aWMgdm9pZCBfX21wdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03MjUtXFx0XFx0XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdyxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTc3Nz1zdGF0aWMgYm9vbCBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3coc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgyNC1cXHRcXHRcXHR9IGVsc2Uge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjgyNTpcXHRcXHRcXHRcXHRfX21wdGNwX2FkZF9iYWNrbG9nKHNrLCBzdWJmbG93LCBza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTgyNi1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjE2Ljg4MDcxMzIzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM2NjA4NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBmbG93IHdpdGhpbiBNdWx0aXBhdGggVENQLCBhbmQgaG93IHdlIGhhbmRsZSBpbmNvbWluZyBkYXRhLiBgbXB0Y3BfZGF0YV9yZWFkeWAsIHRoYXQncyB0aGUgdHJpZ2dlciwgcmlnaHQ/IFNvbWV0aGluZyBhcnJpdmVzLCBzb21ldGhpbmcgc2lnbmFscyB0aGF0IGRhdGEgaXMgYXZhaWxhYmxlIG9uIGEgc3ViZmxvdy4gTm93LCB0aGF0J3Mgd2hlcmUgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgY29tZXMgaW4uIEl0J3MgbGlrZSB0aGUgd29ya2hvcnNlIG9mIHRoZSBvcGVyYXRpb24uXG5cbkVzc2VudGlhbGx5LCBJIHNlZSBgbXB0Y3BfZGF0YV9yZWFkeWAgYXMgdGhlIG5vdGlmaWNhdGlvbiwgdGhlIFwiSGV5LCB0aGVyZSdzIHdvcmsgdG8gYmUgZG9uZSFcIiBzaWduYWwuIFRoZW4sIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgIHN0ZXBzIHVwIGFuZCBhY3R1YWxseSBkb2VzIHRoZSBoZWF2eSBsaWZ0aW5nOiB0YWtpbmcgdGhlIHBhY2tldHMgKHRoZSBgc2tic2ApIHRoYXQgYXJlIHJlYWR5IG9uIGEgc3BlY2lmaWMgc3ViZmxvdyBhbmQgZ2V0dGluZyB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnbyB3aXRoaW4gdGhlIE11bHRpcGF0aCBUQ1AgY29ubmVjdGlvbi4gSXQncyB0aGUgbWVjaGFuaXNtLCB0aGUgY29uY3JldGUgYWN0aW9uIHRha2VuIHRvIGludGVncmF0ZSB0aGUgaW5jb21pbmcgZGF0YSBmcm9tIGEgc3BlY2lmaWMgc3ViZmxvdyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiB0aGUgTVBUQ1AgY29ubmVjdGlvbi4gU28gaXQncyBub3QgYSBzdGFuZGFsb25lIGZ1bmN0aW9uLCBpdCdzIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGV2ZW50LCB0aGUgcmVhZGluZXNzIGZvciB0aGUgcGFja2V0cyBhbmQgdGhlIGFjdGlvbnMgdGhhdCBmb2xsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODgzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDU6MjAuNDE3MzI1MjgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODAyNzExMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MjQ9c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Nzc3OnN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc29jayAqc3NrLCBib29sIG93bl9tc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NDE9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NjpcXHRtb3ZlZCA9IF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgdHJ1ZSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVxcdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDUtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA2OlxcdFxcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDctXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NToyOC4yMjAwNDM2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM5NTU0NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBNUFRDUCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF9kYXRhX3JlYWR5YCBmdW5jdGlvbi4gVGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIHN0YXRpYyBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gVGhhdCBtZWFucyBpdCdzIHBvdGVudGlhbGx5IGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLCB3aGljaCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gQm90aCBgbXB0Y3BfZGF0YV9yZWFkeWAgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBoYXZlIHBpcXVlZCBteSBpbnRlcmVzdC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1wdGNwX2RhdGFfcmVhZHlgIGlzLCBpbiBmYWN0LCBub24tc3RhdGljLiBJZiBpdCdzIG5vdCBpbnRlcm5hbCB0byBhIHNwZWNpZmljIG1vZHVsZSwgSSB3YW50IHRvIHNlZSBob3cgaXQncyBiZWluZyB1c2VkIGFjcm9zcyB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBleHBvcnRlZCBhbmQgdXNlZCBlbHNld2hlcmUuIExldCdzIHNlZSBpZiBpdCdzIGJlaW5nIGFjY2Vzc2VkIGluIG90aGVyIGZpbGVzIHdpdGhpbiB0aGUgcHJvamVjdC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU5NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjMyLjU1OTYwMTQwOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczNDI5ODkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9kYXRhX3JlYWR5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTk2MT1zdGF0aWMgdm9pZCBtcHRjcF9yY3ZfcnR0X3VwZGF0ZShzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTg2LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk4Nzp2b2lkIG1wdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTk4OC17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD05NTY9c3RhdGljIGlubGluZSB1NjQgbXB0Y3Bfc3RhbXAodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTk2MC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5NjE6dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtOTYyLWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTUwNj1zdGF0aWMgdm9pZCBzdWJmbG93X2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTMwLVxcdGlmIChtcHRjcF9zdWJmbG93X2RhdGFfYXZhaWxhYmxlKHNrKSkge1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTUzMTpcXHRcXHRtcHRjcF9kYXRhX3JlYWR5KHBhcmVudCwgc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUzMi1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTg3ND1zdGF0aWMgdm9pZCBzdWJmbG93X3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4ODUtXFx0aWYgKG1wdGNwX3N1YmZsb3dfZGF0YV9hdmFpbGFibGUoc2spKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg4NjpcXHRcXHRtcHRjcF9kYXRhX3JlYWR5KHBhcmVudCwgc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTg4Ny1cXHRlbHNlIGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfZXJyKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDU6MzkuMjkzOTEwNjc3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzU0NzQ3NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERhdGEgUmVhZGluZXNzIGluIE11bHRpcGF0aCBUQ1AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBkYXRhIHJlYWRpbmVzcyBpcyBoYW5kbGVkIGluIE11bHRpcGF0aCBUQ1AuIFNwZWNpZmljYWxseSwgSSBzZWUgYG1wdGNwX2RhdGFfcmVhZHlgIGlzIGNhbGxlZCBmcm9tIHR3byBrZXkgZnVuY3Rpb25zOiBgc3ViZmxvd19kYXRhX3JlYWR5YCBhbmQgYHN1YmZsb3dfc3RhdGVfY2hhbmdlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHM/IEkgbmVlZCB0byBiZSBjb21wcmVoZW5zaXZlIGhlcmUuXG5cbkxldCBtZSB0aGlua+KApiB3aGF0IGFib3V0IGBtcHRjcF9yZWN2bXNnYD8gVGhhdCdzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgcmVjZWl2aW5nIGRhdGEsIGFuZCBJIHJlY2FsbCBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zIHRvIGBtcHRjcF9tb3ZlX3NrYnNgLiBBaCwgcmlnaHQsIGBtcHRjcF9yZWN2bXNnYCAqZG9lcyogY2FsbCBgbXB0Y3BfbW92ZV9za2JzYC4gVGhhdCdzIGltcG9ydGFudC4gR2l2ZW4gdGhlIG1vZGlmaWNhdGlvbiwgSSBuZWVkIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGltcGFjdCBwb2ludC5cblxuT2theSwgbGV0J3MgYmFjayB1cC4gV2hlcmUgZWxzZSBpcyBgbXB0Y3BfbW92ZV9za2JzYCBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHRyYWNlICphbGwqIHRoZSBjYWxsZXJzIG9mIGBtcHRjcF9tb3ZlX3NrYnNgIG5vdyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIGRhdGEgcmVhZGluZXNzIGFuZCwgcG90ZW50aWFsbHksIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIHdpbGwgcHJvdmlkZSBhIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNTAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDU6NDMuNTI5Mzg5MzM0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTExNjM4MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX21vdmVfc2tic1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuYz03MjQ9c3RhdGljIHZvaWQgX19tcHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy03NzYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Nzc3OnN0YXRpYyBib29sIF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTc3OC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc29jayAqc3NrLCBib29sIG93bl9tc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05NDE9c3RhdGljIGJvb2wgbW92ZV9za2JzX3RvX21zayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk0NjpcXHRtb3ZlZCA9IF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgdHJ1ZSk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTQ3LVxcdF9fbXB0Y3Bfb2ZvX3F1ZXVlKG1zayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz05ODc9dm9pZCBtcHRjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDUtXFx0fSBlbHNlIHtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDA2OlxcdFxcdF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvdyhtc2ssIHNzaywgZmFsc2UpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwMDctXFx0fVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjIxMD1zdGF0aWMgdm9pZCBtcHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBjb3BpZWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMjYzLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIyNjQ6c3RhdGljIGJvb2wgX19tcHRjcF9tb3ZlX3NrYnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbGlzdF9oZWFkICpza2JzLCB1MzIgKmRlbHRhKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyNjUte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjI4OD1zdGF0aWMgYm9vbCBtcHRjcF9jYW5fc3Bvb2xfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKnNrYnMpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMDY6c3RhdGljIGJvb2wgbXB0Y3BfbW92ZV9za2JzKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMzA3LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTUtXFx0XFx0bXB0Y3BfZGF0YV91bmxvY2soc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIzMTY6XFx0XFx0ZW5xdWV1ZWQgfD0gX19tcHRjcF9tb3ZlX3NrYnMoc2ssIFxcdTAwMjZza2JzLCBcXHUwMDI2bW92ZWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzMTctXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yMzUwPXN0YXRpYyBpbnQgbXB0Y3BfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM5NDpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm1zay1cXHUwMDNlYmFja2xvZ19saXN0KSBcXHUwMDI2XFx1MDAyNiBtcHRjcF9tb3ZlX3NrYnMoc2spKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzOTUtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzg2PXN0YXRpYyB2b2lkIG1wdGNwX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzgxOS1cXHRcXHRcXHRfX21wdGNwX3JldHJhbnMoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4MjA6XFx0XFx0aWYgKHNwb29sX2JsIFxcdTAwMjZcXHUwMDI2IF9fbXB0Y3BfbW92ZV9za2JzKHNrLCBcXHUwMDI2c2ticywgXFx1MDAyNm1vdmVkKSkge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4MjEtXFx0XFx0XFx0Lyogbm90aWZ5IGFjayBzZXEgdXBkYXRlICovXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDc4PXN0YXRpYyBpbnQgbXB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDg4LVxcdFxcdGxvY2tfc29jayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDA4OTpcXHRcXHRpZiAobXB0Y3BfbW92ZV9za2JzKHNrKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MDkwLVxcdFxcdFxcdG1wdGNwX2NsZWFudXBfcmJ1Zihtc2ssIDApO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDQ5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm1wdGNwX3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgdTMyICpvZmYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAxLVxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2bXNrLVxcdTAwM2ViYWNrbG9nX2xpc3QpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ1MDI6XFx0XFx0bXB0Y3BfbW92ZV9za2JzKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00NTAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NTo1MC4wNDEwMzYxMDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NTIxMTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNUFRDUCBEYXRhIEZsb3cqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIG11bHRpLXBhdGggVENQIGltcGxlbWVudGF0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBtb3ZlcyBhcm91bmQuIEl0IHNlZW1zIGxpa2UgYG1wdGNwX3JlY3Ztc2dgIGFuZCBgbXB0Y3BfaW9jdGxgIGFyZSBrZXkgZW50cnkgcG9pbnRzLCBib3RoIG9mIHdoaWNoIGV2ZW50dWFsbHkgY2FsbCBgbXB0Y3BfbW92ZV9za2JzYC4gVGhhdCBgbXB0Y3BfcmVjdm1zZ2AgZnVuY3Rpb24gbG9va3MgbGlrZSBhIHBhcnRpY3VsYXJseSBnb29kIHBsYWNlIHRvIGZvY3VzIG9uIGFzIGEgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgSSBhbHNvIHNlZSB0aGF0IGBfX21wdGNwX3JldHJhbnNgIGlzIHRyaWdnZXJlZCwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBJJ2xsIHdhbnQgdG8gcmVtZW1iZXIgdGhpcyBzaW5jZSByZXRyYW5zbWlzc2lvbnMgYXJlIGNyaXRpY2FsLiBgbXB0Y3Bfd29ya2VyYCBpdHNlbGYgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24sIHRoYXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgaW4gdHJhY2luZyB0aGUgcGF0aC4gTm93IHRoZSBxdWVzdGlvbiBpcywgd2hhdCB0cmlnZ2VycyBgbXB0Y3Bfd29ya2VyYD8gSSBuZWVkIHRvIGZpbmQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhlIHdvcmtxdWV1ZSBpcyBzY2hlZHVsZWQgYW5kIGV4ZWN1dGVkLlxuXG5BaCwgaGVyZSdzIGBtcHRjcF9zY2hlZHVsZV93b3JrYCB3aGljaCBzZWVtcyB0byBiZSBub24tc3RhdGljLiBUaGlzIGNvdWxkIGJlIGEgY3JpdGljYWwgcG9pbnQgb2YgZW50cnkgYW5kIG9yY2hlc3RyYXRpb24gZm9yIE1QVENQIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBnb29kIGxlYWQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTE5LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ1OjU0LjEzNjI1MDcyM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MzQ3OTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9zY2hlZHVsZV93b3JrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9vcHRpb25zLmM9MTE1NT1ib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xMTkzLVxcdFxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VyY3ZfZmFzdGNsb3NlLCB0cnVlKTtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjExOTQ6XFx0XFx0XFx0bXB0Y3Bfc2NoZWR1bGVfd29yaygoc3RydWN0IHNvY2sgKiltc2spO1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTE5NS1cXHRcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBNUFRDUF9NSUJfTVBGQVNUQ0xPU0VSWCk7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyNTAtXFx0XFx0ICAgIG1wdGNwX3VwZGF0ZV9yY3ZfZGF0YV9maW4obXNrLCBtcF9vcHQuZGF0YV9zZXEsIG1wX29wdC5kc242NCkpXFxubmV0L21wdGNwL29wdGlvbnMuYzoxMjUxOlxcdFxcdFxcdG1wdGNwX3NjaGVkdWxlX3dvcmsoKHN0cnVjdCBzb2NrICopbXNrKTtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTEyNTItXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz01OTI9c3RhdGljIGJvb2wgbXB0Y3BfcG1fc2NoZWR1bGVfd29yayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtNjAwLVxcdG1zay1cXHUwMDNlcG0uc3RhdHVzIHw9IEJJVChuZXdfc3RhdHVzKTtcXG5uZXQvbXB0Y3AvcG0uYzo2MDE6XFx0bXB0Y3Bfc2NoZWR1bGVfd29yaygoc3RydWN0IHNvY2sgKiltc2spO1xcbm5ldC9tcHRjcC9wbS5jLTYwMi1cXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTk0MT1zdGF0aWMgYm9vbCBtb3ZlX3NrYnNfdG9fbXNrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NTYtXFx0aWYgKG1wdGNwX3BlbmRpbmdfZGF0YV9maW4oc2ssIE5VTEwpKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjk1NzpcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05NTgtXFx0cmV0dXJuIG1vdmVkO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTA2MT1zdGF0aWMgdm9pZCBtcHRjcF9yZXNldF9ydHhfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3Mi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMDczOmJvb2wgbXB0Y3Bfc2NoZWR1bGVfd29yayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTA3NC17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0xMTM3PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYW5fdW5hKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExOTItXFx0aWYgKG1wdGNwX3BlbmRpbmdfZGF0YV9maW5fYWNrKHNrKSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxMTkzOlxcdFxcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTExOTQtfVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTc5Mz1zdGF0aWMgdm9pZCBfX21wdGNwX3N1YmZsb3dfcHVzaF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgYm9vbCBmaXJzdClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE4NTUtXFx0XFx0ICAgIG1zay1cXHUwMDNlc25kX254dCArIDEgPT0gbXNrLVxcdTAwM2V3cml0ZV9zZXEpXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTg1NjpcXHRcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xODU3LVxcdH1cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI0NjI9c3RhdGljIHZvaWQgbXB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI0NzAtXFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1QVENQX1dPUktfUlRYLCBcXHUwMDI2bXNrLVxcdTAwM2VmbGFncykpXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjQ3MTpcXHRcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDcyLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNDgwPXN0YXRpYyB2b2lkIG1wdGNwX3RvdXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNDg1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI0ODY6XFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjQ4Ny1cXHRzb2NrX3B1dChzayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjU2PXZvaWQgbXB0Y3Bfc3ViZmxvd19zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2ssIGludCBob3cpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjc3LVxcdFxcdFxcdFdSSVRFX09OQ0UobXB0Y3Bfc2soc2spLVxcdTAwM2VzbmRfdW5hLCBtcHRjcF9zayhzayktXFx1MDAzZXNuZF9ueHQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNzg6XFx0XFx0XFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI3OS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTYyPWJvb2wgbXB0Y3BfZmluaXNoX2pvaW4oc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5NjM6Ym9vbCBtcHRjcF9zY2hlZHVsZV93b3JrKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtOTY0LWludCBtcHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NDMwPXZvaWQgbXB0Y3Bfc3ViZmxvd19yZXNldChzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy00NDYtXFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1QVENQX1dPUktfQ0xPU0VfU1VCRkxPVywgXFx1MDAyNm1wdGNwX3NrKHNrKS1cXHUwMDNlZmxhZ3MpKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NDQ3OlxcdFxcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNDQ4LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMTA5PXN0YXRpYyBlbnVtIG1hcHBpbmdfc3RhdHVzIGdldF9tYXBwaW5nX3N0YXR1cyhzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTc1LVxcdFxcdFxcdGlmICh1cGRhdGVkKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTE3NjpcXHRcXHRcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKChzdHJ1Y3Qgc29jayAqKW1zayk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMTc3LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjg5PXN0YXRpYyB2b2lkIHN1YmZsb3dfc2NoZWRfd29ya19pZl9jbG9zZWQoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTMwMi1cXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoTVBUQ1BfV09SS19DTE9TRV9TVUJGTE9XLCBcXHUwMDI2bXNrLVxcdTAwM2VmbGFncykpXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMzAzOlxcdFxcdG1wdGNwX3NjaGVkdWxlX3dvcmsoc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTMwNC1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTMxMS1cXHRcXHRcXHRcXHQgICAgICBzdWJmbG93LVxcdTAwM2VtYXBfZGF0YV9sZW4sIHRydWUpKVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTMxMjpcXHRcXHRtcHRjcF9zY2hlZHVsZV93b3JrKHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEzMTMtfVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMDA0PXN0YXRpYyB2b2lkIHN1YmZsb3dfdWxwX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjAyNS1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZtcHRjcF9zayhzayktXFx1MDAzZWZsYWdzKSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIwMjY6XFx0XFx0XFx0bXB0Y3Bfc2NoZWR1bGVfd29yayhzayk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDI3LVxcdFxcdHNvY2tfcHV0KHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDU6NTguNTc5NzM5MDEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTY1MDk3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknbSB0aGlua2luZyBhYm91dCBuYXZpZ2F0aW5nIHRoaXMga2VybmVsIG1vZHVsZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1QVENQIEVudHJ5IFBvaW50cyBhbmQgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AsIGBtcHRjcF9kYXRhX3JlYWR5YCwgYW5kIGBtcHRjcF9yZWN2bXNnYC4uLiB0aGVzZSBmZWVsIGxpa2UgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhpcyBNUFRDUCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGhvb2tlZCBpbnRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21lIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnQuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBgQ09ORklHYCBvcHRpb25zIHRoYXQgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIE1QVENQIGZlYXR1cmUgdG8gYmUgYWN0aXZlLlxuXG5TaW5jZSB0aGUgY29kZSBpcyBjbGVhcmx5IGluIGBuZXQvbXB0Y3AvYCwgdGhhdCBzaW1wbGlmaWVzIHRoZSBzZWFyY2guIEknbGwgY2hlY2sgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBmaWxlcyDigJMgZWl0aGVyIHRoZSBvbmUgZGlyZWN0bHkgaW4gYG5ldC9tcHRjcC9LY29uZmlnYCwgb3IgZmFpbGluZyB0aGF0LCBJJ2xsIGJyb2FkZW4gdGhlIHNlYXJjaCB0byB0aGUgbWFpbiBgbmV0L0tjb25maWdgIGZpbGUuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGRlcGVuZGVuY2llcyBvciBmbGFncyB0aGF0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIGFuZCBhY3RpdmF0aW9uIG9mIHRoaXMgTVBUQ1AgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxODgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NjowMi45NzYyNTE2MzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjQ3NjQ1MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjA5LjAwMTAyMjA4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg4MTA5MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTVBUQ1AgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgTVBUQ1BgIGlzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGguIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgaXRzIGZvdW5kYXRpb24/IEEgcXVpY2sgbWVudGFsIHNjYW4gdGVsbHMgbWUgdGhhdCBgTVBUQ1BgIHJlbGllcyBvbiB0aGUgYElORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBtYWtlIHN1cmUgSSdtIGNvcnJlY3QgYW5kIHRha2UgYSBkZWVwZXIgbG9vayBhdCB0aGUgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhlIEtjb25maWcgZmlsZSBmb3IgYE1QVENQYCBzaG91bGQgaGF2ZSB0aGUgYW5zd2Vycywgc28gSSdsbCBqdW1wIGludG8gYG5ldC9tcHRjcC9LY29uZmlnYCB0byBjaGVjayBvdXQgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NjoxMS45ODkxMzQ2ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDY6MTEuOTg5MjI5MzkyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTc1ODY1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTVBUQ1AgQ29uZmlndXJhdGlvbiBhbmQgQ29yZSBMb2dpYyBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGtleSBsb2dpYyBwb2ludHMgZm9yIE11bHRpUGF0aCBUQ1AgKE1QVENQKS4gVGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBlbGVtZW50IGlzIGNsZWFybHkgYE1QVENQYCwgd2hpY2ggSSdsbCBhZGQgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gSSBkb24ndCB0aGluayBJIG5lZWQgdG8gYnJpbmcgaW4gYE1QVENQX0lQVjZgIGp1c3QgeWV0LCBhcyBgTVBUQ1BgIGl0c2VsZiBzaG91bGQgYmUgdGhlIGNvcmUgZW5hYmxlci5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgYE1QVENQYCBpcyBhIGJvb2xlYW4gYW5kIG5vdCBhIHRyaXN0YXRlLCBhbmQgeWVzLCBpdCdzIGEgYm9vbCwgc28ganVzdCBlbmFibGluZyBpdCBpcyBlbm91Z2guXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zLiBJJ3ZlIGdvdCBhIHNob3J0bGlzdDpcblxuKiAgIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYDogVGhpcyBjYWxscyBgbXB0Y3Bfb3Zlcl9saW1pdGAuXG4qICAgYG1wdGNwX2RhdGFfcmVhZHlgOiBXaGljaCBjYWxscyBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YC4gVGhhdCBpbiB0dXJuIGNhbGxzIGBfX21wdGNwX2FkZF9iYWNrbG9nYCBhbmQgYF9fbXB0Y3BfbW92ZV9za2JgLCBhbmQgZmluYWxseSBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYC5cbiogICBgbXB0Y3BfcmVjdm1zZ2A6IFRoaXMgZnVuY3Rpb24gaXMgbGlua2VkIHRvIGBtcHRjcF9tb3ZlX3NrYnNgIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fbXB0Y3BfbW92ZV9za2JzYC5cblxuSSBzaG91bGQgY2hlY2sgdGhlIGBfX21wdGNwX3JldHJhbnNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGJ5IGBtcHRjcF9yZWxlYXNlX2NiYCBhbmQgYG1wdGNwX3dvcmtlcmAuIGBtcHRjcF9yZWxlYXNlX2NiYCBpcyB0aGUgcmVsZWFzZSBjYWxsYmFjayBmb3IgdGhlIHNvY2tldCwgdHJpZ2dlcmVkIHdoZW4gdGhlIHNvY2tldCBsb2NrIGlzIHJlbGVhc2VkLiBBbmQgYG1wdGNwX3dvcmtlcmAgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24uIElzIHRoZXJlIGFueXRoaW5nIG91dHNpZGUgb2YgTVBUQ1AgY2FsbGluZyB0aGF0IGBtcHRjcF9yZWxlYXNlX2NiYD8gSSBzZWUgYHJlbGVhc2Vfc29ja2AgY2FsbHMgaXQuIFRoaXMgaXMgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIG5vdCBzcGVjaWZpYyB0byBNUFRDUCwgc28gdGhlc2UgdGhyZWUgZnVuY3Rpb25zIGFyZSBzdGlsbCB0aGUga2V5IG9uZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBleHBvcnQgc3RhdHVzIG9mIHRoZSBmb2N1cyBmdW5jdGlvbnMuIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2AgYW5kIGlzIGluZGVlZCBleHBvcnRlZCBpbiBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAuIEdyZWF0LiBBbmQgYG1wdGNwX2RhdGFfcmVhZHlgIGlzIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AgYW5kIGlzIGV4cG9ydGVkIGluIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAuIE5vdywgYG1wdGNwX3JlY3Ztc2dgLi4uIFdhaXQsIEkgbmVlZCB0byBjb25maXJtIGlmIGl0J3Mgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjE5LjY4NjgxOTQ5M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMDYxNzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHRjcF9yZWN2bXNnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTIxMTI9c3RhdGljIHZvaWQgbXB0Y3BfZWF0X3JlY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxMjItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjEyMzpzdGF0aWMgaW50IF9fbXB0Y3BfcmVjdm1zZ19tc2txKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIxMjQtXFx0XFx0XFx0XFx0c2l6ZV90IGxlbiwgaW50IGZsYWdzLCBpbnQgY29waWVkX3RvdGFsLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjMyOT1zdGF0aWMgdW5zaWduZWQgaW50IG1wdGNwX2lucV9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzNDktXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjM1MDpzdGF0aWMgaW50IG1wdGNwX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM1MS1cXHRcXHRcXHQgaW50IGZsYWdzKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjM4Mi1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMzgzOlxcdFxcdGJ5dGVzX3JlYWQgPSBfX21wdGNwX3JlY3Ztc2dfbXNrcShzaywgbXNnLCBsZW4gLSBjb3BpZWQsIGZsYWdzLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIzODQtXFx0XFx0XFx0XFx0XFx0XFx0ICBjb3BpZWQsIFxcdTAwMjZ0c3MsIFxcdTAwMjZjbXNnX2ZsYWdzLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDE4OT1zdGF0aWMgc3RydWN0IHByb3RvIG1wdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjAxLVxcdC5pb2N0bFxcdFxcdD0gbXB0Y3BfaW9jdGwsXFxubmV0L21wdGNwL3Byb3RvY29sLmM6NDIwMjpcXHQucmVjdm1zZ1xcdD0gbXB0Y3BfcmVjdm1zZyxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MjAzLVxcdC5yZWxlYXNlX2NiXFx0PSBtcHRjcF9yZWxlYXNlX2NiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NjoyNC42MTc0NDUxNTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MjIzMDc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaWdnaW5nIGludG8gdGhlIE1QVENQIENvZGUqKlxuXG5SaWdodCwgc28gYG1wdGNwX3JlY3Ztc2dgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IGxpbWl0cyBpdHMgZGlyZWN0IHVzYWJpbGl0eSwgdW5mb3J0dW5hdGVseS4gTXkgZ29hbCBpcyB0byBmaW5kIGEgZnVuY3Rpb24sIGlkZWFsbHkgbm9uLXN0YXRpYywgdGhhdCBlaXRoZXIgY2FsbHMgYG1wdGNwX3JlY3Ztc2dgIG9yIGlzIHNvbWVob3cgZGlyZWN0bHkgcmVsYXRlZCB0byBpdCB3aXRoaW4gdGhlIE11bHRpUGF0aCBUQ1AgaW1wbGVtZW50YXRpb24uIFNpbmNlIGl0J3MgcmVnaXN0ZXJlZCBpbiBgbXB0Y3BfcHJvdGAsIG15IHRoaW5raW5nIGlzIHRvIGludmVzdGlnYXRlIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AgZmlyc3QuIEknbGwgbmVlZCB0byBsb29rIHRocm91Z2ggdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSwgYXMgdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgSSdtIGxpa2VseSBhZnRlci4gVGhpcyBmZWVscyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgTVBUQ1AgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NzcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NjoyOC4xNzk2NzkyNjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjUwNzIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBtcHRjcF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmM9OTYxPXN0YXRpYyB2b2lkIG1wdGNwX3Jjdl9ydHRfdXBkYXRlKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy05ODYtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6OTg3OnZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtOTg4LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTEwNjE9c3RhdGljIHZvaWQgbXB0Y3BfcmVzZXRfcnR4X3RpbWVyKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwNzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTA3Mzpib29sIG1wdGNwX3NjaGVkdWxlX3dvcmsoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTEwNzQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MTIzNz1tcHRjcF9jYXJ2ZV9kYXRhX2ZyYWcoY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xMjU0LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjEyNTU6c3RydWN0IG1wdGNwX3NlbmRtc2dfaW5mbyB7XFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTI1Ni1cXHRpbnQgbXNzX25vdztcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE1Mjg9c3RydWN0IHN1YmZsb3dfc2VuZF9pbmZvIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MTUzMzp2b2lkIG1wdGNwX3N1YmZsb3dfc2V0X2FjdGl2ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpzdWJmbG93KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTE1MzQte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTU0MS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNTQyOmJvb2wgbXB0Y3Bfc3ViZmxvd19hY3RpdmUoc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNTQzLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTE2NDU9c3RhdGljIHZvaWQgbXB0Y3BfdXBkYXRlX3Bvc3RfcHVzaChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY3MS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjcyOnZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjczLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI2MTU9c3RhdGljIHZvaWQgX19tcHRjcF9jbG9zZV9zc2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjcyMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNzIxOnZvaWQgbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNzIyLVxcdFxcdCAgICAgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4OTc9c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMwMTYtICovXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzAxNzp2b2lkIG1wdGNwX3Jlc2V0X3RvdXRfdGltZXIoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgdW5zaWduZWQgbG9uZyBmYWlsX3RvdXQpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzAxOC17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMjM4PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xlYXJfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjQ3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNDg6dm9pZCBtcHRjcF9jYW5jZWxfd29yayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzI0OS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjU1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMyNTY6dm9pZCBtcHRjcF9zdWJmbG93X3NodXRkb3duKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaywgaW50IGhvdylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjU3LXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMyOTAtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzI5MTp2b2lkIG1wdGNwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGludCBzdGF0ZSlcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMjkyLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM4NTI9c3RhdGljIHZvaWQgc2NoZWR1bGVfM3JkYWNrX3JldHJhbnNtaXNzaW9uKHN0cnVjdCBzb2NrICpzc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zODczLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM4NzQ6dm9pZCBtcHRjcF9zdWJmbG93X3Byb2Nlc3NfZGVsZWdhdGVkKHN0cnVjdCBzb2NrICpzc2ssIGxvbmcgc3RhdHVzKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM4NzUte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzkxMz1zdGF0aWMgaW50IG1wdGNwX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSlcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM5MjMtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzkyNDp2b2lkIG1wdGNwX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzkyNS17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zOTQ3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM5NDg6dm9pZCBtcHRjcF9zb2NrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqcGFyZW50KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM5NDkte1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mzk1OT1zdGF0aWMgdm9pZCBtcHRjcF9zb2NrX2NoZWNrX2dyYWZ0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM5NzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mzk3Mzpib29sIG1wdGNwX2ZpbmlzaF9qb2luKHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzk3NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjI4LjkyMjE5NzI1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDQ2NzA2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIFNlbGVjdGlvbiBmb3IgTVBUQ1AgUmVjZWl2ZSBhbmQgUmV0cmFuc21pc3Npb24gUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vc3QgZWZmZWN0aXZlIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgdGhpcyBNUFRDUCBjb2RlLiBTaW5jZSBgbXB0Y3BfZGF0YV9yZWFkeWAgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhcmUgbm9uLXN0YXRpYywgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZXkgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciB0aGUgcmVjZWl2ZSBwYXRoIG1vZGlmaWNhdGlvbnMuIEkgYWxzbyBsb29rZWQgYXQgYG1wdGNwX3N1YmZsb3dfcHJvY2Vzc19kZWxlZ2F0ZWRgIGJ1dCBmb3VuZCBpdCB3YXNuJ3QgbW9kaWZpZWQuIFRoYXQgbGVhdmVzIG1lIGxlYW5pbmcgdG93YXJkcyBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCB0byBjb3ZlciB0aGUgcmVjZWl2ZSBwYXRoLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSByZXRyYW5zbWlzc2lvbiBwYXRoISBgX19tcHRjcF9yZXRyYW5zYCBpcyB0cmlnZ2VyZWQgYnkgYG1wdGNwX3dvcmtlcmAgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYC4gSSBuZWVkZWQgdG8gdGhpbmsgYWJvdXQgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgdHJpZ2dlcnMgcmV0cmFuc21pc3Npb24uIGBtcHRjcF9zY2hlZHVsZV93b3JrYCBsZWFkcyB0byBgbXB0Y3Bfd29ya2VyYC4gSG93ZXZlciwgYG1wdGNwX3JlbGVhc2VfY2JgIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdoZW4gdGhlIHNvY2tldCBsb2NrIGlzIHJlbGVhc2VkLCB3aGljaCBpcyBkb25lIGJ5IGByZWxlYXNlX3NvY2soc2spYC4gVGhhdCdzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBhbmQgcHJvYmFibHkgbm90IGlkZWFsIGFzIGEgZm9jdXMgc3ltYm9sLlxuXG5Db21pbmcgYmFjayB0byB0aGUgcmVjZWl2ZSBwYXRoLCBmdXp6aW5nIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIHNvdW5kcyBzb2xpZCwgYnV0IHdoYXQgYWJvdXQgYG1wdGNwX3JlY3Ztc2dgPyBJdCAqaXMqIHRoZSBgcmVjdm1zZ2AgaGFuZGxlciBmb3IgTVBUQ1AsIGJ1dCBpdCdzIHN0YXRpYy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcHJlZmVyIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnRzLiBIb3dldmVyLCBpdCAqaXMqIGFuIEFQSSBlbnRyeXBvaW50LCBkZXNwaXRlIHRoZSBzdGF0aWMga2V5d29yZC4gSSdtIHRvcm4sIGJ1dCB1bHRpbWF0ZWx5LCBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AgYW5kIGBtcHRjcF9kYXRhX3JlYWR5YCBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY29kZSBjaGFuZ2VzLCBhbmQgbm9uLXN0YXRpYywgc28gSSdsbCBwcmlvcml0aXplIHRoZW0uXG5cbkxldCdzIGRpZyBkZWVwZXIgaW50byBgbXB0Y3BfaW5jb21pbmdfb3B0aW9uc2AuIFllcywgaXQncyBub24tc3RhdGljLCBhbmQgKmlzKiBkaXJlY3RseSBtb2RpZmllZCEgQ2hlY2tpbmcgdGhlIGBuZXQvbXB0Y3Avb3B0aW9ucy5jYCBjb2RlLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBjb250YWlucyB0aGUga2V5IGNoZWNrOiBgcmV0dXJuICFtcHRjcF9vdmVyX2xpbWl0KHN1YmZsb3ctXHUwMDNlY29ubiwgc2ssIHNrYik7YC4gSXQncyBhIHBlcmZlY3QgZm9jdXMgc3ltYm9sLlxuXG5Ob3cgZm9yIGBtcHRjcF9kYXRhX3JlYWR5YC4gSXQgY2FsbHMgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgX19tcHRjcF9hZGRfYmFja2xvZ2AgYW5kIGBfX21wdGNwX21vdmVfc2tiYC4gQm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guIFNvLCBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMgYWxzbyBhIHBlcmZlY3QgZm9jdXMgc3ltYm9sLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSBpbiB0aGUgcGF0Y2guXG5cbkkgd2lsbCBzZXQgYXNpZGUgb3RoZXIgZm9jdXMgc3ltYm9scyBzdWNoIGFzIGBtcHRjcF93b3JrZXJgLCBzaW5jZSBpdCBpcyBzdGF0aWMuIEkgd2lsbCBsb29rIGZvciBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBmb3IgdGhlIHJldHJhbnNtaXNzaW9uIHBhcnQuIFdoYXQgYWJvdXQgYG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZ2A/IFRoYXQncyBhbm90aGVyIGF2ZW51ZSB0byBpbnZlc3RpZ2F0ZSwgYnV0IGZvciBub3csIEknbSBjb25maWRlbnQgaW4gcHJpb3JpdGl6aW5nIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgIGFzIHRoZSBrZXkgZm9jdXMgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NDUsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTk6NDY6MzguNzI2ODcyMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTQyMzk5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5jPTE2NDU9c3RhdGljIHZvaWQgbXB0Y3BfdXBkYXRlX3Bvc3RfcHVzaChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMTY3MS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoxNjcyOnZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0xNjczLXtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTI4OTc9c3RhdGljIHZvaWQgX19tcHRjcF9yZXRyYW5zKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI5OTgtcmVzZXRfdGltZXI6XFxubmV0L21wdGNwL3Byb3RvY29sLmM6Mjk5OTpcXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMwMDAtXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD04MTE9Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6ODEyOnZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtODEzLXZvaWQgX19tcHRjcF9wdXNoX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz02NjA9c3RhdGljIGludCBfX21wdGNwX3NldHNvY2tvcHRfc29sX3RjcF9jb3JrKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCB2YWwpXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTY3NC1cXHRpZiAoIXZhbClcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjY3NTpcXHRcXHRtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmcoc2spO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNjc2LVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYz02ODA9c3RhdGljIGludCBfX21wdGNwX3NldHNvY2tvcHRfc29sX3RjcF9ub2RlbGF5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCB2YWwpXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTY5NC1cXHRpZiAodmFsKVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Njk1OlxcdFxcdG1wdGNwX2NoZWNrX2FuZF9zZXRfcGVuZGluZyhzayk7XFxubmV0L21wdGNwL3NvY2tvcHQuYy02OTYtXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjQ1LjIyMTExODY5M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODAyNTQzMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBNUFRDUCBSZXRyYW5zbWlzc2lvbiBMb2dpYyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJhY2luZyB0aGUgZmxvdyBoZXJlLiBJdCBsb29rcyBsaWtlIGBtcHRjcF9jaGVja19hbmRfc2V0X3BlbmRpbmdgIGlzICpjYWxsZWQqIGZyb20gYF9fbXB0Y3BfcmV0cmFuc2AsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gVGhhdCdzIGdvb2QgdG8ga25vdywgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSB0aW1pbmcuIEJ1dCB3aGF0IGFib3V0IHRoYXQgcGVza3kgYG1wdGNwX3JldHJhbnNtaXRfdGltZXJgPyBJdCdzIHN0YXRpYywgc28gdGhhdCdzIGEgZGlmZmVyZW50IHBhdGgsIG5lZWRzIGEgc2VwYXJhdGUgbG9vaywgYnV0IHRoZSBpbW1lZGlhdGUgY2FsbGluZyBwYXRoIGZyb20gdGhlIHJldHJhbnNtaXQgbG9naWMgaXMgY2xlYXIuIFRoZW4gSSBzZWUgYG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZWAsIHRoYXQgY2FsbHMgYF9fbXB0Y3BfcmV0cmFuc21pdF9wZW5kaW5nX2RhdGFgIGFuZCB0aGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24uIFdhaXQsIGBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhYCBpcyAqbm9uLXN0YXRpYyohIE9rYXksIHRoYXQncyBjcnVjaWFsLiBLbm93aW5nIGl0J3Mgbm9uLXN0YXRpYyBtZWFucyBpdCdzIGFjY2Vzc2libGUgZnJvbSBvdGhlciBtb2R1bGVzLCBzb21ldGhpbmcgSSdsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCB3aGVuIEkgbWFwIHRoZSBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBub3RlIHdoZXJlIHRoYXQncyBjYWxsZWQgZnJvbSwgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU1MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0Njo0OS4wMjM2NjUxNDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDA1NDIyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvcG0uYz0xMDYzPXN0YXRpYyB2b2lkIG1wdGNwX3BtX3N1YmZsb3dzX2Noa19zdGFsZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTA4NC1cXHRcXHRcXHRcXHRzdWJmbG93LVxcdTAwM2VzdGFsZSA9IDE7XFxubmV0L21wdGNwL3BtLmM6MTA4NTpcXHRcXHRcXHRcXHRfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcG0uYy0xMDg2LVxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhuZXQsIE1QVENQX01JQl9TVUJGTE9XU1RBTEUpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MjQ5NT1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc3ViZmxvd19nZXRfcmV0cmFucyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyNTMxOmJvb2wgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjUzMi17XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0yNjE1PXN0YXRpYyB2b2lkIF9fbXB0Y3BfY2xvc2Vfc3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTI2NjQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MjY2NTpcXHRuZWVkX3B1c2ggPSAoZmxhZ3MgXFx1MDAyNiBNUFRDUF9DRl9QVVNIKSBcXHUwMDI2XFx1MDAyNiBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHNrKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yNjY2LVxcdGlmICghZGlzcG9zZV9pdCkge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9Mjg5Nz1zdGF0aWMgdm9pZCBfX21wdGNwX3JldHJhbnMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk0OC1cXHRcXHQvKiBgYWxyZWFkeV9zZW50YCBjYW4gYmUgMCBmb3IgYGRmcmFnYCBiZWxvbmdpbmcgdG8gdGhlIFJUWFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjI5NDk6XFx0XFx0ICogIHF1ZXVlIGR1ZSB0byBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKCkuXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMjk1MC1cXHRcXHQgKi9cXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTgwOD12b2lkIF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtODEwLVxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0KTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo4MTE6Ym9vbCBfX21wdGNwX3JldHJhbnNtaXRfcGVuZGluZ19kYXRhKHN0cnVjdCBzb2NrICpzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmgtODEyLXZvaWQgbXB0Y3BfY2hlY2tfYW5kX3NldF9wZW5kaW5nKHN0cnVjdCBzb2NrICpzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE5OjQ2OjUzLjU2NDIxNDM3N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTg2MzU4Nzk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgX19tcHRjcF9yZXRyYW5zbWl0X3BlbmRpbmdfZGF0YWAgd291bGQgYmUgaW50ZXJlc3RpbmcsIGJ1dCBpdCdzIG5vbi1zdGF0aWMsIHNvIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIG5vdCByaWdodCwgYnV0IGl0IGRvZXNuJ3QgZXZlbiBjYWxsIGBfX21wdGNwX3JldHJhbnNgLCB3aGljaCBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgYWN0dWFsbHkgbW9kaWZpZWQuIFRoYXQncyBhIGJpdCBvZiBhIGN1cnZlYmFsbC4gQWZ0ZXIgcmV2aWV3aW5nIGFsbCB0aGUgZnVuY3Rpb25zLCB0aGUgY29kZSBtb2RpZmllcyBhIGJ1bmNoIG9mIGZ1bmN0aW9uczogYG1wdGNwX2luY29taW5nX29wdGlvbnNgLCBgbXB0Y3BfcHJ1bmVfb2ZvX3F1ZXVlYCwgYF9fbXB0Y3BfbW92ZV9za2JgLCBgX19tcHRjcF9hZGRfYmFja2xvZ2AsIGBfX21wdGNwX21vdmVfc2tic19mcm9tX3N1YmZsb3dgLCBgbXB0Y3BfbW92ZV9za2JzYCwgYF9fbXB0Y3BfcHVzaF9yZXRyYW5zYCwgYF9fbXB0Y3BfcmV0cmFuc2AsIGFuZCBgbXB0Y3BfcmVsZWFzZV9jYmAuXG5cbmBfX21wdGNwX3JldHJhbnNgIGlzIGNhbGxlZCBieSBgbXB0Y3Bfd29ya2VyYCBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLiBgbXB0Y3BfcmVsZWFzZV9jYmAgaXMgdGhlIHJlbGVhc2UgY2FsbGJhY2sgZm9yIHRoZSBzb2NrZXQsIHNvIGl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIHNvY2tldCBsb2NrIGlzIHJlbGVhc2VkLiBFc3NlbnRpYWxseSwgYW55IGZ1bmN0aW9uIHRoYXQgbG9ja3MgYW5kIHVubG9ja3MgdGhlIHNvY2tldCBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIGl0LiBUaGF0IG1ha2VzIGZ1enppbmcgYG1wdGNwX3JlY3Ztc2dgIHZpYSB0aGUgYHJlY3Ztc2dgIHN5c2NhbGwgb3IgYG1wdGNwX3NlbmRtc2dgIHZpYSB0aGUgYHNlbmRtc2dgIHN5c2NhbGwgYSB2aWFibGUgc3RyYXRlZ3kuIEJ1dCBsb29raW5nIGRlZXBlciBhbmQgdHJhY2luZyBjYWxscywgSSB0aGluayB0aGVyZSBhcmUgYmV0dGVyIGFwcHJvYWNoZXMuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGFyZSB0aGUgb25lcyBkaXJlY3RseSBleHBvc2VkIHRvIHRoZSBzeXNjYWxscyBvciBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gU28gSSB3YW50IHRvIGluY2x1ZGUgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAuIGBtcHRjcF9pb2N0bGAgbG9va2VkIGludGVyZXN0aW5nIHNpbmNlIGl0IGNhbGxzIGBtcHRjcF9tb3ZlX3NrYnNgLCBidXQgdGhlbiBJIHJlYWxpemVkIGl0J3Mgc3RhdGljLiBMZXQncyBzZWUuLi4gYG1wdGNwX3JlY3Ztc2dgIGlzIHN0YXRpYywgdG9vLiBPa2F5LCBzbyBmaW5kaW5nIGFueSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHN0YXRpYyBgbXB0Y3BfbW92ZV9za2JzYCBpc24ndCBnb2luZyB0byBnZXQgbWUgYW55d2hlcmUuIGBtcHRjcF9tb3ZlX3NrYnNgIGlzIG9ubHkgY2FsbGVkIGJ5IGEgYnVuY2ggb2Ygc3RhdGljIGZ1bmN0aW9ucyBhbmQgYG1wdGNwX3JlbGVhc2VfY2JgLCB3aGljaCwgYXMgbWVudGlvbmVkLCBpcyB0cmlnZ2VyZWQgaW5kaXJlY3RseS4gU28sIGl0IGxvb2tzIGxpa2UgYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAgYXJlIHRoZSBiZXN0IGJldHMgYXMgZm9jdXMgc3ltYm9scy5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gWXVwLCBgbXB0Y3BfZGF0YV9yZWFkeWAgaXMgbm9uLXN0YXRpYyAoYHZvaWQgbXB0Y3BfZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpzc2spYCBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgKSwgYW5kIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBpcyBub24tc3RhdGljIHRvbyAoYGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpYCBpbiBgbmV0L21wdGNwL29wdGlvbnMuY2ApLlxuXG5TbywgdGhlIHBhdGNoIG1haW5seSBtb2RpZmllcyB0aGVzZSBmdW5jdGlvbnM6IGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCAobm9uLXN0YXRpYyksIGBtcHRjcF9wcnVuZV9vZm9fcXVldWVgIChzdGF0aWMpLCBgX19tcHRjcF9tb3ZlX3NrYmAgKHN0YXRpYyksIGBfX21wdGNwX2FkZF9iYWNrbG9nYCAoc3RhdGljKSwgYF9fbXB0Y3BfbW92ZV9za2JzX2Zyb21fc3ViZmxvd2AgKHN0YXRpYyksIGBtcHRjcF9tb3ZlX3NrYnNgIChzdGF0aWMpLCBgX19tcHRjcF9wdXNoX3JldHJhbnNgIChzdGF0aWMpLCBgX19tcHRjcF9yZXRyYW5zYCAoc3RhdGljKSwgYW5kIGBtcHRjcF9yZWxlYXNlX2NiYCAoc3RhdGljKS5cblxuU28gYG1wdGNwX2luY29taW5nX29wdGlvbnNgIGFuZCBgbXB0Y3BfZGF0YV9yZWFkeWAgYXJlIHN0aWxsIHRoZSBiZXN0IHN5bWJvbHMgdG8gY29uY2VudHJhdGUgb24uIFdhaXQsIGBtcHRjcF9kYXRhX3JlYWR5YCBhY3R1YWxseSBjYWxscyBgX19tcHRjcF9tb3ZlX3NrYnNfZnJvbV9zdWJmbG93YC4gSG1tLCBpdCdzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSB0aGVzZSBtaWdodCBiZSB0aGUgYmVzdCB0YXJnZXRzLCBhbmQgdGhlIG9ubHkgb25lcyBJIGNhbiByZWFsbHkgbGV2ZXJhZ2UgaW4gYSB0YXJnZXRlZCB3YXkuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgdHJ1ZS4uLlxuXG5TbyB3aGF0IGNvbmZpZyBvcHRpb24gZG8gSSBuZWVkIHRvIGVuYWJsZT8gSnVzdCBgTVBUQ1BgLCBzZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cbioqRmluYWwgYXNzZXNzbWVudDoqKiBUaGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgc2hvdWxkIGZvY3VzIG9uIGBtcHRjcF9pbmNvbWluZ19vcHRpb25zYCBhbmQgYG1wdGNwX2RhdGFfcmVhZHlgLiBJIHdpbGwgZW5hYmxlIHRoZSBgTVBUQ1BgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY3JpdGljYWwgTVBUQ1AgbG9naWMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZXRyYW5zbWlzc2lvbnMuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyBmdXp6aW5nIHRvIGV4cG9zZSBpc3N1ZXMgYXJvdW5kIHRoZSBuZXcgbWVtb3J5IGxpbWl0IGNoZWNrcyB3aGljaCBkcm9wIHBhY2tldHMgb3IgcHJ1bmUgcXVldWVzLCBhbmQgdGhlIHJlZmFjdG9yaW5nIG9mIHJldHJhbnNtaXNzaW9uIGxvZ2ljLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgYW55IGlzc3VlcyBoZXJlIGhhdmUgc2VyaW91cyBjb25zZXF1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTgzLCJPdXRwdXRUb2tlbnMiOjExOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxOTo0NzowNS40Mjc4MDYxOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTE2ODg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9pbmNvbWluZ19vcHRpb25zXCIsXG4gICAgXCJtcHRjcF9kYXRhX3JlYWR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgTVBUQ1AgcHJvdG9jb2wgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBjb25zdHJhaW50cyBhbmQgcmV0cmFuc21pc3Npb25zLiBJdCBpbnRyb2R1Y2VzIG5ldyBtZW1vcnkgbGltaXQgY2hlY2tzIHRoYXQgZHJvcCBwYWNrZXRzIG9yIHBydW5lIHRoZSBvdXQtb2Ytb3JkZXIgcXVldWUgd2hlbiBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBhbmQgcmVmYWN0b3JzIHRoZSByZXRyYW5zbWlzc2lvbiBsb2dpYyB0byBoYW5kbGUgbXVsdGlwbGUgZnJhZ21lbnRzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX2luY29taW5nX29wdGlvbnNcIixcbiAgICBcIm1wdGNwX2RhdGFfcmVhZHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBNUFRDUCBwcm90b2NvbCBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGNvbnN0cmFpbnRzIGFuZCByZXRyYW5zbWlzc2lvbnMuIEl0IGludHJvZHVjZXMgbmV3IG1lbW9yeSBsaW1pdCBjaGVja3MgdGhhdCBkcm9wIHBhY2tldHMgb3IgcHJ1bmUgdGhlIG91dC1vZi1vcmRlciBxdWV1ZSB3aGVuIGxpbWl0cyBhcmUgZXhjZWVkZWQsIGFuZCByZWZhY3RvcnMgdGhlIHJldHJhbnNtaXNzaW9uIGxvZ2ljIHRvIGhhbmRsZSBtdWx0aXBsZSBmcmFnbWVudHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowngxgq[1] Phase: Succeeded StartedAt: 2026-07-25 19:47:20 +0000 UTC FinishedAt: 2026-07-25 19:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 19:47:20 +0000 UTC FinishedAt: 2026-07-25 19:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2] Phase: Succeeded StartedAt: 2026-07-25 19:47:20 +0000 UTC FinishedAt: 2026-07-26 00:15:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 19:47:21 +0000 UTC FinishedAt: 2026-07-26 00:15:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 19:47:21 +0000 UTC FinishedAt: 2026-07-25 19:48:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 19:47:22 +0000 UTC FinishedAt: 2026-07-25 19:48:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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-workflowngxgq/series-workflowngxgq-convert-artifact-82595944/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 19:48:20 +0000 UTC FinishedAt: 2026-07-25 20:26:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 19:48:20 +0000 UTC FinishedAt: 2026-07-25 20:26:39 +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:*b0d902e5-8abb-45b8-b913-3efd79495c14,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-workflowngxgq/series-workflowngxgq-convert-artifact-82595944/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": "5c92bf61-3fd4-4c98-abfe-72b5ae44b9d0", "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-workflowngxgq/series-workflowngxgq-build-action-3022050782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 19:48:20 +0000 UTC FinishedAt: 2026-07-25 20:26:29 +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:*b0d902e5-8abb-45b8-b913-3efd79495c14,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-workflowngxgq/series-workflowngxgq-convert-artifact-82595944/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": "5c92bf61-3fd4-4c98-abfe-72b5ae44b9d0", "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-workflowngxgq/series-workflowngxgq-build-action-3022050782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:26:39 +0000 UTC FinishedAt: 2026-07-25 20:26:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:26:39 +0000 UTC FinishedAt: 2026-07-25 20:26:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:26:39 +0000 UTC FinishedAt: 2026-07-25 20:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:26:39 +0000 UTC FinishedAt: 2026-07-25 20:26:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-workflowngxgq/series-workflowngxgq-convert-artifact-892972111/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:26:49 +0000 UTC FinishedAt: 2026-07-25 20:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:26:49 +0000 UTC FinishedAt: 2026-07-25 20:28:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5c92bf61-3fd4-4c98-abfe-72b5ae44b9d0,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-workflowngxgq/series-workflowngxgq-build-action-3022050782/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-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:28:57 +0000 UTC FinishedAt: 2026-07-25 20:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:28:57 +0000 UTC FinishedAt: 2026-07-25 20:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:28:57 +0000 UTC FinishedAt: 2026-07-25 21:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:28:57 +0000 UTC FinishedAt: 2026-07-25 21:12:06 +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:*b0d902e5-8abb-45b8-b913-3efd79495c14,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-workflowngxgq/series-workflowngxgq-convert-artifact-892972111/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": "f1faf9ec-d500-42fe-97d4-d2f8bc51d814", "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-workflowngxgq/series-workflowngxgq-build-action-4294259811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 20:28:57 +0000 UTC FinishedAt: 2026-07-25 21:11: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:*b0d902e5-8abb-45b8-b913-3efd79495c14,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-workflowngxgq/series-workflowngxgq-convert-artifact-892972111/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": "f1faf9ec-d500-42fe-97d4-d2f8bc51d814", "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-workflowngxgq/series-workflowngxgq-build-action-4294259811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:12:06 +0000 UTC FinishedAt: 2026-07-25 21:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:12:06 +0000 UTC FinishedAt: 2026-07-25 21:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:12:06 +0000 UTC FinishedAt: 2026-07-25 21:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:12:06 +0000 UTC FinishedAt: 2026-07-25 21:13:52 +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:*f1faf9ec-d500-42fe-97d4-d2f8bc51d814,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-workflowngxgq/series-workflowngxgq-build-action-4294259811/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-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:13:55 +0000 UTC FinishedAt: 2026-07-26 00:15:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:13:55 +0000 UTC FinishedAt: 2026-07-26 00:15:32 +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_data_ready"],"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:*5c92bf61-3fd4-4c98-abfe-72b5ae44b9d0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1faf9ec-d500-42fe-97d4-d2f8bc51d814,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-workflowngxgq/series-workflowngxgq-build-action-3022050782/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-workflowngxgq/series-workflowngxgq-build-action-4294259811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:13:55 +0000 UTC FinishedAt: 2026-07-25 21:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:13:55 +0000 UTC FinishedAt: 2026-07-25 21:14:00 +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_data_ready"],"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-workflowngxgq/series-workflowngxgq-convert-artifact-2935498504/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:13:55 +0000 UTC FinishedAt: 2026-07-25 21:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:13:55 +0000 UTC FinishedAt: 2026-07-25 21:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:13:55 +0000 UTC FinishedAt: 2026-07-25 21:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:14:06 +0000 UTC FinishedAt: 2026-07-26 00:15:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowngxgq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"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_data_ready"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"89d8006259b81dd25c962f6cc8d7ab268d6ea426","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"15634033-3ff5-4ba1-adbc-eec969f6e68b","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-07-25 21:14:06 +0000 UTC FinishedAt: 2026-07-26 00:15:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5c92bf61-3fd4-4c98-abfe-72b5ae44b9d0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1faf9ec-d500-42fe-97d4-d2f8bc51d814,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-workflowngxgq/series-workflowngxgq-build-action-3022050782/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-workflowngxgq/series-workflowngxgq-build-action-4294259811/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-workflowngxgq/series-workflowngxgq-convert-artifact-2935498504/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,}