Name: series-workflowg2n58 Phase: Succeeded StartedAt: 2026-06-25 14:13:33 +0000 UTC FinishedAt: 2026-06-25 18:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[0] Phase: Succeeded StartedAt: 2026-06-25 14:13:33 +0000 UTC FinishedAt: 2026-06-25 14:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 14:13:33 +0000 UTC FinishedAt: 2026-06-25 14:26:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "7a0e692a0381254b2f77c54dec100cd3325a6fdf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFS_SUPPORT", "FSCACHE", "CACHEFILES", "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "7a0e692a0381254b2f77c54dec100cd3325a6fdf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFS_SUPPORT", "FSCACHE", "CACHEFILES", "AFS_FS" ], "series_id": "a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netfs_wb_begin", "netfs_wb_end", "netfs_unbuffered_write_iter", "netfs_unbuffered_write_iter_locked", "netfs_writepages", "netfs_writeback_single", "netfs_write_begin", "netfs_perform_write", "iov_iter_extract_pages", "extract_iter_to_sg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZTX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7RlNDQUNIRSYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGZzX3diX2JlZ2luJiMzNDssCiAgICAmIzM0O25ldGZzX3diX2VuZCYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVfYmVnaW4mIzM0OywKICAgICYjMzQ7bmV0ZnNfcGVyZm9ybV93cml0ZSYjMzQ7LAogICAgJiMzNDtpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2V4dHJhY3RfaXRlcl90b19zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZzIGxvZ2ljLCBpbmNsdWRpbmcgd3JpdGViYWNrIGxvY2tpbmcsIHVuYnVmZmVyZWQgd3JpdGVzLCBhbmQgaXRlcmF0b3IgZXh0cmFjdGlvbiBmdW5jdGlvbnMuIEl0IGFsc28gYWZmZWN0cyBjYWNoZWZpbGVzIGFuZCBBRlMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTA0Yjk0ZDQwZTA4NWVhMGJjMGZiMmJlNjE2YTU2MTk2NDA0ODI4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDE0OjIyOjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zeW1saW5rLmMgYi9mcy9hZnMvc3ltbGluay5jXG5pbmRleCBlZDU4NjgzNjlmMzcyZC4uMTZiNDgyM2NiN2I3ZTcgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc3ltbGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc3ltbGluay5jXG5AQCAtMjU1LDExICYjNDM7MjU1LDExIEBAIGludCBhZnNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0fVxuIFxuIFx0aWYgKHJldCA9PSAwKSB7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMud2JfbG9jayk7XG4mIzQzO1x0XHRuZXRmc193Yl9iZWdpbihcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgZmFsc2UpO1xuIFx0XHRuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIodm5vZGUtXHUwMDNlZGlyZWN0b3J5KTtcbiBcdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5ID0gTlVMTDtcbiBcdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5X3NpemUgPSAwO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMud2JfbG9jayk7XG4mIzQzO1x0XHRuZXRmc193Yl9lbmQoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMpO1xuIFx0fSBlbHNlIGlmIChyZXQgPT0gMSkge1xuIFx0XHRyZXQgPSAwOyAvKiBTa2lwcGVkIHdyaXRlIGR1ZSB0byBsb2NrIGNvbmZsaWN0LiAqL1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuY1xuaW5kZXggMjkzN2RiNjkwYjQwYjUuLmQ0MzA5ZGZiNTVkZjRlIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmNcbkBAIC0zNzUsNyAmIzQzOzM3NSw3IEBAIGludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiBcdFx0XHRcdFx0ICAgIFwmIzM0O1JlbmFtZSBmYWlsZWQgd2l0aCBlcnJvciAlZFwmIzM0OywgcmV0KTtcbiBcdH1cbiBcbi1cdF9fY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShyZXApKTtcbiYjNDM7XHRjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKHJlcCkpO1xuIFx0ZW5kX3JlbmFtaW5nKFx1MDAyNnJkKTtcbiBcdF9sZWF2ZShcJiMzNDsgPSAwXCYjMzQ7KTtcbiBcdHJldHVybiAwO1xuQEAgLTQ2Nyw3ICYjNDM7NDY3LDYgQEAgc3RydWN0IGZpbGUgKmNhY2hlZmlsZXNfY3JlYXRlX3RtcGZpbGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpXG4gXHRyZXQgPSAtRUlOVkFMO1xuIFx0aWYgKHVubGlrZWx5KCFmaWxlLVx1MDAzZWZfb3AtXHUwMDNlcmVhZF9pdGVyKSB8fFxuIFx0ICAgIHVubGlrZWx5KCFmaWxlLVx1MDAzZWZfb3AtXHUwMDNld3JpdGVfaXRlcikpIHtcbi1cdFx0ZnB1dChmaWxlKTtcbiBcdFx0cHJfbm90aWNlKFwmIzM0O0NhY2hlIGRvZXMgbm90IHN1cHBvcnQgcmVhZF9pdGVyIGFuZCB3cml0ZV9pdGVyXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBlcnJfdW51c2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXG5pbmRleCA3NmQwZjZhMjlhYmFiMi4uMjRhOGE1NDE4ZTMxMTkgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xuQEAgLTY1OSw3ICYjNDM7NjU5LDcgQEAgaW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxuIFx0ICogd2l0aGluIHRoZSBjYWNoZSBncmFudWxlIGNvbnRhaW5pbmcgdGhlIEVPRiwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkXG4gXHQgKiB0byBwcmVsb2FkIHRoZSBncmFudWxlLlxuIFx0ICovXG4tXHRpZiAoIW5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoY3R4KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoIW5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoY3R4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuZXRmc19za2lwX2ZvbGlvX3JlYWQoZm9saW8sIHBvcywgbGVuLCBmYWxzZSkpIHtcbiBcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3JoX3dyaXRlX3pza2lwKTtcbiBcdFx0Z290byBoYXZlX2ZvbGlvX25vX3dhaXQ7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbmluZGV4IDZiZGUzMzIwYmNlYzY2Li4yY2RiNjhlNmIxNmZmZiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbkBAIC0yNzcsNyAmIzQzOzI3Nyw3IEBAIHNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0ICogY2FjaGluZyBzZXJ2aWNlIHRlbXBvcmFyaWx5IGJlY2F1c2UgdGhlIGJhY2tpbmcgc3RvcmUgZ290XG4gXHRcdCAqIGN1bGxlZC5cbiBcdFx0ICovXG4tXHRcdGlmIChuZXRmc19pc19jYWNoZV9lbmFibGVkKGN0eCkpIHtcbiYjNDM7XHRcdGlmIChuZXRmc19pc19jYWNoZV9tYXliZV9lbmFibGVkKGN0eCkpIHtcbiBcdFx0XHRpZiAoZmluZm8pIHtcbiBcdFx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93aF93c3RyZWFtX2NvbmZsaWN0KTtcbiBcdFx0XHRcdGdvdG8gZmx1c2hfY29udGVudDtcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5pbmRleCAyNWY4Y2ViMTVmYWQ2NC4uYzE2ZmJhZDI4NmExNzcgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbkBAIC0xNjYsMTMgJiM0MzsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFx0XHQgKi9cbiBcdFx0c3VicmVxLVx1MDAzZWVycm9yID0gLUVBR0FJTjtcbiBcdFx0dHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpO1xuLVx0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKVxuJiM0MztcdFx0aWYgKHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCBcdTAwM2UgMCkge1xuIFx0XHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIuaXRlciwgc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiYjNDM7XHRcdFx0d3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCAmIzQzOz0gc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoc3RyZWFtLVx1MDAzZXNvdXJjZSA9PSBORVRGU19VUExPQURfVE9fU0VSVkVSIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgd3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdClcbiBcdFx0XHR3cmVxLVx1MDAzZW5ldGZzX29wcy1cdTAwM2VyZXRyeV9yZXF1ZXN0KHdyZXEsIHN0cmVhbSk7XG4gXG4mIzQzO1x0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX01BREVfUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiBcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiBcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG5AQCAtMTg2LDE3ICYjNDM7MTg5LDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcbiBcdFx0bmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7XG4gXG4tXHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSkge1xuJiM0MztcdFx0aWYgKHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKVxuIFx0XHRcdHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XG4tXHRcdFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4tXHRcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0c3RydWN0IGlvdl9pdGVyIHNvdXJjZTtcbi1cbi1cdFx0XHRuZXRmc19yZXNldF9pdGVyKHN1YnJlcSk7XG4tXHRcdFx0c291cmNlID0gc3VicmVxLVx1MDAzZWlvX2l0ZXI7XG4tXHRcdFx0bmV0ZnNfcmVpc3N1ZV93cml0ZShzdHJlYW0sIHN1YnJlcSwgXHUwMDI2c291cmNlKTtcbi1cdFx0fVxuJiM0MztcdFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9pbnRlcm5hbC5oIGIvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuaW5kZXggNjQ1OTk2ZWNmYzgwMzYuLmQ4ODljYWE0MDFkYzI0IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuQEAgLTIzOSw2ICYjNDM7MjM5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRmc19pc19jYWNoZV9lbmFibGVkKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4KVxuICNlbmRpZlxuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTQ0FDSEUpXG4mIzQzO1x0c3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBjdHgtXHUwMDNlY2FjaGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0dGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfSVNfQ0FDSElORywgXHUwMDI2Y29va2llLVx1MDAzZWZsYWdzKTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogR2V0IGEgcmVmIG9uIGEgbmV0ZnMgZ3JvdXAgYXR0YWNoZWQgdG8gYSBkaXJ0eSBwYWdlIChlLmcuIGEgY2VwaCBzbmFwKS5cbiAgKi9cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9sb2NraW5nLmMgYi9mcy9uZXRmcy9sb2NraW5nLmNcbmluZGV4IDIyNDllY2QwOWQwYThkLi40ZTNiZTJiODE1MDQwOCAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2xvY2tpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvbG9ja2luZy5jXG5AQCAtOSw2ICYjNDM7OSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4mIzQzO3N0cnVjdCBuZXRmc193Yl93YWl0ZXIge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdGxpbms7XHRcdC8qIExpbmsgaW4gaWN0eC1cdTAwM2V3Yl9xdWV1ZSAqL1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdFx0KndhaXRlcjtcdC8qIFdhaXRlciB0YXNrOyBjbGVhcmVkIHdoZW4gbG9jayBncmFudGVkICovXG4mIzQzO307XG4mIzQzO1xuIC8qXG4gICogaW5vZGVfZGlvX3dhaXRfaW50ZXJydXB0aWJsZSAtIHdhaXQgZm9yIG91dHN0YW5kaW5nIERJTyByZXF1ZXN0cyB0byBmaW5pc2hcbiAgKiBAaW5vZGU6IGlub2RlIHRvIHdhaXQgZm9yXG5AQCAtMjAzLDMgJiM0MzsyMDgsOTMgQEAgdm9pZCBuZXRmc19lbmRfaW9fZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR1cF9yZWFkKFx1MDAyNmlub2RlLVx1MDAzZWlfcndzZW0pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldGZzX2VuZF9pb19kaXJlY3QpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogV2FpdCB0byBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gd3JpdGViYWNrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgbmV0ZnNfd2JfYmVnaW5fd2FpdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyIHdhaXRlciA9IHt9O1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDtcbiYjNDM7XHRib29sIGdvdCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aWN0eC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhORVRGU19JQ1RYX1dCX0xPQ0ssIFx1MDAyNmljdHgtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRnZXRfdGFza19zdHJ1Y3QodHNrKTtcbiYjNDM7XHRcdHdhaXRlci53YWl0ZXIgPSB0c2s7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNndhaXRlci5saW5rLCBcdTAwMjZpY3R4LVx1MDAzZXdiX3F1ZXVlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Z290ID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFnb3QpIHtcbiYjNDM7XHRcdGZvciAoOzspIHtcbiYjNDM7XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0XHQvKiBSZWFkIHdhaXRlciBiZWZvcmUgYWNjZXNzaW5nIGlub2RlIHN0YXRlLiAqL1xuJiM0MztcdFx0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ3YWl0ZXIud2FpdGVyKSA9PSBOVUxMKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRzY2hlZHVsZSgpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBuZXRmc193Yl9iZWdpbiAtIEJlZ2luIHdyaXRlYmFjaywgd2FpdGluZyBpZiBuZWVkIGJlXG4mIzQzOyAqIEBpY3R4OiBUaGUgaW5vZGUgdG8gZ2V0IHdyaXRlYmFjayBhY2Nlc3Mgb25cbiYjNDM7ICogQG5vd2FpdDogUmV0dXJuIGZhaWx1cmUgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gd2FpdGluZyBpZiB0cnVlXG4mIzQzOyAqXG4mIzQzOyAqIEJlZ2luIHdyaXRlYmFjayB0byBhbiBpbm9kZSwgd2FpdGluZyBmb3IgZXhjbHVzaXZlIGFjY2VzcyBpZiBAbm93YWl0IGlzXG4mIzQzOyAqIGZhbHNlLiAgVGhpcyBwcmV2ZW50cyBjb2xsZWN0aW9uIGZyb20gYmVpbmcgZG9uZSBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4mIzQzOyAqIHRvIHRoZSBpc3N1YW5jZSBvZiB3cml0ZSBzdWJyZXF1ZXN0cy5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZSB0aGF0IHdyaXRlYmFjayBtYXkgYmUgZW5kZWQgaW4gYSBkaWZmZXJlbnQgcHJvY2VzcyAoZS5nLiB0aGUgY29sbGVjdGlvblxuJiM0MzsgKiBmdW5jdGlvbiBvbiBhIHdvcmtxdWV1ZSkgdGhhbiBzdGFydGVkIGl0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRydWUgaWYgY2FuIHByb2NlZWQsIGZhbHNlIGlmIGRlbmllZC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgbmV0ZnNfd2JfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICppY3R4LCBib29sIG5vd2FpdClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKE5FVEZTX0lDVFhfV0JfTE9DSywgXHUwMDI2aWN0eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAobm93YWl0KSB7XG4mIzQzO1x0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja19za2lwKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3diX2xvY2tfd2FpdCk7XG4mIzQzO1x0cmV0dXJuIG5ldGZzX3diX2JlZ2luX3dhaXQoaWN0eCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChuZXRmc193Yl9iZWdpbik7XG4mIzQzO1xuJiM0MzsvKiBuZXRmc193Yl9lbmQgLSBFbmQgd3JpdGViYWNrXG4mIzQzOyAqIEBpY3R4OiBUaGUgaW5vZGUgd2UgaGF2ZSB3cml0ZWJhY2sgYWNjZXNzIHRvXG4mIzQzOyAqXG4mIzQzOyAqIEVuZCB3cml0ZWJhY2sgYWNjZXNzIG9uIGFuIGlub2RlLCB3YWtpbmcgdXAgdGhlIG5leHQgd3JpdGViYWNrIHJlcXVlc3QuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG5ldGZzX3diX2VuZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyICp3YWl0ZXI7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0c2s7XG4mIzQzO1xuJiM0MztcdFdBUk5fT05fT05DRSghdGVzdF9iaXQoTkVURlNfSUNUWF9XQl9MT0NLLCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpY3R4LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHR3YWl0ZXIgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXHUwMDI2aWN0eC1cdTAwM2V3Yl9xdWV1ZSwgc3RydWN0IG5ldGZzX3diX3dhaXRlciwgbGluayk7XG4mIzQzO1x0aWYgKHdhaXRlcikge1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2d2FpdGVyLVx1MDAzZWxpbmspO1xuJiM0MztcdFx0dHNrID0gd2FpdGVyLVx1MDAzZXdhaXRlcjtcbiYjNDM7XHRcdC8qIFdyaXRlIGlub2RlIHN0YXRlIGJlZm9yZSBjbGVhcmluZyB3YWl0ZXIuICovXG4mIzQzO1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ3YWl0ZXItXHUwMDNld2FpdGVyLCBOVUxMKTtcbiYjNDM7XHRcdHdha2VfdXBfcHJvY2Vzcyh0c2spO1xuJiM0MztcdFx0cHV0X3Rhc2tfc3RydWN0KHRzayk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGNsZWFyX2JpdF91bmxvY2soTkVURlNfSUNUWF9XQl9MT0NLLCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChuZXRmc193Yl9lbmQpO1xuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYyBiL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuY1xuaW5kZXggMjRmYzJiYjJmOGE0N2IuLjIxMGViOGYzOTU4ZDc3IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmNcbkBAIC00MDgsNiAmIzQzOzQwOCwxNiBAQCBib29sIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb24oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4gXHRuZXRmc193YWtlX3JyZXFfZmxhZyh3cmVxLCBORVRGU19SUkVRX0lOX1BST0dSRVNTLCBuZXRmc19ycmVxX3RyYWNlX3dha2VfaXApO1xuIFx0LyogQXMgd2UgY2xlYXJlZCBORVRGU19SUkVRX0lOX1BST0dSRVNTLCB3ZSBhY3F1aXJlZCBpdHMgcmVmLiAqL1xuIFxuJiM0MztcdHN3aXRjaCAod3JlcS1cdTAwM2VvcmlnaW4pIHtcbiYjNDM7XHRjYXNlIE5FVEZTX1dSSVRFQkFDSzpcbiYjNDM7XHRjYXNlIE5FVEZTX1dSSVRFQkFDS19TSU5HTEU6XG4mIzQzO1x0Y2FzZSBORVRGU19XUklURVRIUk9VR0g6XG4mIzQzO1x0XHRuZXRmc193Yl9lbmQoaWN0eCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh3cmVxLVx1MDAzZWlvY2IpIHtcbiBcdFx0c2l6ZV90IHdyaXR0ZW4gPSBtaW4od3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCwgd3JlcS1cdTAwM2VsZW4pO1xuIFx0XHR3cmVxLVx1MDAzZWlvY2ItXHUwMDNla2lfcG9zICYjNDM7PSB3cml0dGVuO1xuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5pbmRleCBjMDNjN2NjNDVlNDcxNi4uZjI3NjFjOTk3OTVhNmIgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5AQCAtMTA2LDcgJiM0MzsxMDYsNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdF9lbnRlcihcJiMzNDtSPSV4XCYjMzQ7LCB3cmVxLVx1MDAzZWRlYnVnX2lkKTtcbiBcbiBcdGljdHggPSBuZXRmc19pbm9kZSh3cmVxLVx1MDAzZWlub2RlKTtcbi1cdGlmIChpc19jYWNoZWFibGUgXHUwMDI2XHUwMDI2IG5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoaWN0eCkpXG4mIzQzO1x0aWYgKGlzX2NhY2hlYWJsZSlcbiBcdFx0ZnNjYWNoZV9iZWdpbl93cml0ZV9vcGVyYXRpb24oXHUwMDI2d3JlcS1cdTAwM2VjYWNoZV9yZXNvdXJjZXMsIG5ldGZzX2lfY29va2llKGljdHgpKTtcbiBcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLCB3cmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSkgXHUwMDNjIDApXG4gXHRcdGdvdG8gbm9tZW07XG5AQCAtNTUxLDE0ICYjNDM7NTUxLDggQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spKSB7XG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkge1xuLVx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3NraXApO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4tXHR9XG4mIzQzO1x0aWYgKCFuZXRmc193Yl9iZWdpbihpY3R4LCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIE5lZWQgdGhlIGZpcnN0IGZvbGlvIHRvIGJlIGFibGUgdG8gc2V0IHVwIHRoZSBvcC4gKi9cbiBcdGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd2JjLCBOVUxMLCBcdTAwMjZlcnJvcik7XG5AQCAtNTg4LDEzICYjNDM7NTgyLDEzIEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHR9XG4gXG4gXHRcdGVycm9yID0gbmV0ZnNfd3JpdGVfZm9saW8od3JlcSwgd2JjLCBmb2xpbyk7XG4tXHRcdGlmIChlcnJvciBcdTAwM2MgMClcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmIChlcnJvciA9PSAtRU5PTUVNKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSh3YmMsIGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdH1cbiBcdH0gd2hpbGUgKChmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sIFx1MDAyNmVycm9yKSkpO1xuIFxuIFx0bmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHdyZXEpO1xuLVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4gXHRuZXRmc193YWtlX2NvbGxlY3Rvcih3cmVxKTtcbiBcbiBcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X3JldHVybik7XG5AQCAtNjAyLDkgJiM0Mzs1OTYsMTYgQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRyZXR1cm4gZXJyb3I7XG4gXG4gY291bGRudF9zdGFydDpcbi1cdG5ldGZzX2tpbGxfZGlydHlfcGFnZXMobWFwcGluZywgd2JjLCBmb2xpbyk7XG4mIzQzO1x0aWYgKGVycm9yID09IC1FTk9NRU0pIHtcbiYjNDM7XHRcdGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSh3YmMsIGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1x0XHRmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sIFx1MDAyNmVycm9yKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRShmb2xpbyAhPSBOVUxMKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bmV0ZnNfa2lsbF9kaXJ0eV9wYWdlcyhtYXBwaW5nLCB3YmMsIGZvbGlvKTtcbiYjNDM7XHR9XG4gb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4mIzQzO1x0bmV0ZnNfd2JfZW5kKGljdHgpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCBlcnJvcik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuQEAgLTYxOCwxNiAmIzQzOzYxOSwxNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlblxuIFx0c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEgPSBOVUxMO1xuIFx0c3RydWN0IG5ldGZzX2lub2RlICppY3R4ID0gbmV0ZnNfaW5vZGUoZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbiYjNDM7XHRuZXRmc193Yl9iZWdpbihpY3R4LCBmYWxzZSk7XG4gXG4gXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLCBpb2NiLVx1MDAzZWtpX2ZpbHAsXG4gXHRcdFx0XHQgICAgICBpb2NiLVx1MDAzZWtpX3BvcywgTkVURlNfV1JJVEVUSFJPVUdIKTtcbiBcdGlmIChJU19FUlIod3JlcSkpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4mIzQzO1x0XHRuZXRmc193Yl9lbmQoaWN0eCk7XG4gXHRcdHJldHVybiB3cmVxO1xuIFx0fVxuIFxuIFx0d3JlcS1cdTAwM2Vpb19zdHJlYW1zWzBdLmF2YWlsID0gdHJ1ZTtcbiYjNDM7XHRfX3NldF9iaXQoTkVURlNfUlJFUV9PRkZMT0FEX0NPTExFQ1RJT04sIFx1MDAyNndyZXEtXHUwMDNlZmxhZ3MpO1xuIFx0dHJhY2VfbmV0ZnNfd3JpdGUod3JlcSwgbmV0ZnNfd3JpdGVfdHJhY2Vfd3JpdGV0aHJvdWdoKTtcbiBcdHJldHVybiB3cmVxO1xuIH1cbkBAIC02ODUsNyAmIzQzOzY4Nyw2IEBAIGludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jXG4gc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGZvbGlvICp3cml0ZXRocm91Z2hfY2FjaGUpXG4ge1xuLVx0c3RydWN0IG5ldGZzX2lub2RlICppY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cdTAwM2Vpbm9kZSk7XG4gXHRzc2l6ZV90IHJldDtcbiBcbiBcdF9lbnRlcihcJiMzNDtSPSV4XCYjMzQ7LCB3cmVxLVx1MDAzZWRlYnVnX2lkKTtcbkBAIC02OTksOCAmIzQzOzcwMCw2IEBAIHNzaXplX3QgbmV0ZnNfZW5kX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jXG4gXG4gXHRuZXRmc19lbmRfaXNzdWVfd3JpdGUod3JlcSk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbi1cbiBcdGlmICh3cmVxLVx1MDAzZWlvY2IpXG4gXHRcdHJldCA9IC1FSU9DQlFVRVVFRDtcbiBcdGVsc2VcbkBAIC04NDcsMTUgJiM0Mzs4NDYsMTAgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFpb3ZfaXRlcl9pc19mb2xpb3EoaXRlcikpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbi1cdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spKSB7XG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkge1xuLVx0XHRcdC8qIFRoZSBWRlMgd2lsbCBoYXZlIHVuZGlydGllZCB0aGUgaW5vZGUuICovXG4tXHRcdFx0bmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoXHUwMDI2aWN0eC1cdTAwM2Vpbm9kZSk7XG4tXHRcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3diX2xvY2tfc2tpcCk7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3diX2xvY2tfd2FpdCk7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbiYjNDM7XHRpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSkge1xuJiM0MztcdFx0LyogVGhlIFZGUyB3aWxsIGhhdmUgdW5kaXJ0aWVkIHRoZSBpbm9kZS4gKi9cbiYjNDM7XHRcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFx1MDAyNmljdHgtXHUwMDNlaW5vZGUpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4gXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShtYXBwaW5nLCBOVUxMLCAwLCBORVRGU19XUklURUJBQ0tfU0lOR0xFKTtcbkBAIC04OTMsNyAmIzQzOzg4Nyw2IEBAIGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0c21wX3dtYigpOyAvKiBXcml0ZSBsaXN0cyBiZWZvcmUgQUxMX1FVRVVFRC4gKi9cbiBcdHNldF9iaXQoTkVURlNfUlJFUV9BTExfUVVFVUVELCBcdTAwMjZ3cmVxLVx1MDAzZWZsYWdzKTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spO1xuIFx0bmV0ZnNfd2FrZV9jb2xsZWN0b3Iod3JlcSk7XG4gXG4gXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9yZXR1cm4pO1xuQEAgLTkwMSw3ICYjNDM7ODk0LDcgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRyZXR1cm4gcmV0O1xuIFxuIGNvdWxkbnRfc3RhcnQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbiYjNDM7XHRuZXRmc193Yl9lbmQoaWN0eCk7XG4gXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZzLmhcbmluZGV4IDI0M2MwZjczNzkzODgzLi4xYmMxMjBkNjFjNWJlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmcy5oXG5AQCAtNjEsMTQgJiM0Mzs2MSwxNiBAQCBzdHJ1Y3QgbmV0ZnNfaW5vZGUge1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19GU0NBQ0hFKVxuIFx0c3RydWN0IGZzY2FjaGVfY29va2llXHQqY2FjaGU7XG4gI2VuZGlmXG4tXHRzdHJ1Y3QgbXV0ZXhcdFx0d2JfbG9jaztcdC8qIFdyaXRlYmFjayBzZXJpYWxpc2F0aW9uICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZFx0d2JfcXVldWU7XHQvKiBRdWV1ZSBvZiBwcm9jZXNzZXMgd2FudGluZyB0byBkbyB3cml0ZWJhY2sgKi9cbiBcdGxvZmZfdFx0XHRcdF9yZW1vdGVfaV9zaXplO1x0LyogU2l6ZSBvZiB0aGUgcmVtb3RlIGZpbGUgKi9cbiBcdGxvZmZfdFx0XHRcdF96ZXJvX3BvaW50O1x0LyogU2l6ZSBhZnRlciB3aGljaCB3ZSBhc3N1bWUgdGhlcmUmIzM5O3Mgbm8gZGF0YVxuIFx0XHRcdFx0XHRcdCAqIG9uIHRoZSBzZXJ2ZXIgKi9cbiYjNDM7XHRzcGlubG9ja190XHRcdGxvY2s7XHRcdC8qIExvY2sgY292ZXJpbmcgd2JfcXVldWUgKi9cbiBcdGF0b21pY190XHRcdGlvX2NvdW50O1x0LyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXMgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBORVRGU19JQ1RYX09ESVJFQ1RcdDBcdFx0LyogVGhlIGZpbGUgaGFzIERJTyBpbiBwcm9ncmVzcyAqL1xuICNkZWZpbmUgTkVURlNfSUNUWF9VTkJVRkZFUkVEXHQxXHRcdC8qIEkvTyBzaG91bGQgbm90IHVzZSB0aGUgcGFnZWNhY2hlICovXG4mIzQzOyNkZWZpbmUgTkVURlNfSUNUWF9XQl9MT0NLXHQyXHRcdC8qIFdyaXRlYmFjayBzZXJpYWxpc2F0aW9uIGxvY2sgKi9cbiAjZGVmaW5lIE5FVEZTX0lDVFhfTU9ESUZJRURfQVRUUiAzXHRcdC8qIEluZGljYXRlIGNoYW5nZSBpbiBtdGltZS9jdGltZSAqL1xuICNkZWZpbmUgTkVURlNfSUNUWF9TSU5HTEVfTk9fVVBMT0FEIDRcdFx0LyogTW9ub2xpdGhpYyBwYXlsb2FkLCBjYWNoZSBidXQgbm8gdXBsb2FkICovXG4gfTtcbkBAIC00NjIsNiAmIzQzOzQ2NCwxMCBAQCBpbnQgbmV0ZnNfYWxsb2NfZm9saW9xX2J1ZmZlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHQgICAgICBzaXplX3QgKl9jdXJfc2l6ZSwgc3NpemVfdCBzaXplLCBnZnBfdCBnZnApO1xuIHZvaWQgbmV0ZnNfZnJlZV9mb2xpb3FfYnVmZmVyKHN0cnVjdCBmb2xpb19xdWV1ZSAqZnEpO1xuIFxuJiM0MzsvKiBXcml0ZWJhY2sgZXhjbHVzaW9uIEFQSS4gKi9cbiYjNDM7Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTtcbiYjNDM7dm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcbiYjNDM7XG4gLyoqXG4gICogbmV0ZnNfaW5vZGUgLSBHZXQgdGhlIG5ldGZzIGlub2RlIGNvbnRleHQgZnJvbSB0aGUgaW5vZGVcbiAgKiBAaW5vZGU6IFRoZSBpbm9kZSB0byBxdWVyeVxuQEAgLTc0Myw3ICYjNDM7NzQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2lub2RlX2luaXQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTQ0FDSEUpXG4gXHRjdHgtXHUwMDNlY2FjaGUgPSBOVUxMO1xuICNlbmRpZlxuLVx0bXV0ZXhfaW5pdChcdTAwMjZjdHgtXHUwMDNld2JfbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXdiX3F1ZXVlKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHQvKiAtXHUwMDNlcmVsZWFzZXBhZ2UoKSBkcml2ZXMgemVyb19wb2ludCAqL1xuIFx0aWYgKHVzZV96ZXJvX3BvaW50KSB7XG4gXHRcdGN0eC1cdTAwM2VfemVyb19wb2ludCA9IGN0eC1cdTAwM2VfcmVtb3RlX2lfc2l6ZTtcbkBAIC03NTMsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19pbm9kZV9pbml0KHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxuIFxuIC8qKlxuICAqIG5ldGZzX3Jlc2l6ZV9maWxlIC0gTm90ZSB0aGF0IGEgZmlsZSBnb3QgcmVzaXplZFxuLSAqIEBjdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkXG4mIzQzOyAqIEBpY3R4OiBUaGUgbmV0ZnMgaW5vZGUgYmVpbmcgcmVzaXplZFxuICAqIEBuZXdfaV9zaXplOiBUaGUgbmV3IGZpbGUgc2l6ZVxuICAqIEBjaGFuZ2VkX29uX3NlcnZlcjogVGhlIGNoYW5nZSB3YXMgYXBwbGllZCB0byB0aGUgc2VydmVyXG4gICpcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXG5pbmRleCAyNDM2NjJhZjFhZjczZi4uNWE2NDM0NzA5NzE2ZTEgMTAwNjQ0XG4tLS0gYS9saWIvaW92X2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmNcbkBAIC0xNTY4LDYgJiM0MzsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHVuc2lnbmVkIGludCBuciA9IDAsIG9mZnNldDtcbiBcdGxvZmZfdCBwb3MgPSBpLVx1MDAzZXhhcnJheV9zdGFydCAmIzQzOyBpLVx1MDAzZWlvdl9vZmZzZXQ7XG4mIzQzO1x0Ym9vbCB3aWxsX2FsbG9jID0gISpwYWdlcztcbiBcdFhBX1NUQVRFKHhhcywgaS1cdTAwM2V4YXJyYXksIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXG4gXHRvZmZzZXQgPSBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG5AQCAtMTU5NSw2ICYjNDM7MTU5NiwxNCBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3hhcnJheV9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiYjNDM7XHRpZiAoIW5yKSB7XG4mIzQzO1x0XHRpZiAod2lsbF9hbGxvYykge1xuJiM0MztcdFx0XHRrdmZyZWUoKnBhZ2VzKTtcbiYjNDM7XHRcdFx0KnBhZ2VzID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRtYXhzaXplID0gbWluX3Qoc2l6ZV90LCBuciAqIFBBR0VfU0laRSAtIG9mZnNldCwgbWF4c2l6ZSk7XG4gXHRpb3ZfaXRlcl9hZHZhbmNlKGksIG1heHNpemUpO1xuIFx0cmV0dXJuIG1heHNpemU7XG5AQCAtMTYyOCw2ICYjNDM7MTYzNyw4IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXG4gXHRiaS5iaV9idmVjX2RvbmUgPSBza2lwO1xuIFxuIFx0bWF4cGFnZXMgPSB3YW50X3BhZ2VzX2FycmF5KHBhZ2VzLCBtYXhzaXplLCBza2lwLCBtYXhwYWdlcyk7XG4mIzQzO1x0aWYgKCFtYXhwYWdlcylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0d2hpbGUgKGJpLmJpX3NpemUgXHUwMDI2XHUwMDI2IGJpLmJpX2lkeCBcdTAwM2MgaS1cdTAwM2Vucl9zZWdzKSB7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYnZlY19pdGVyX2J2ZWMoaS1cdTAwM2VidmVjLCBiaSk7XG5AQCAtMTc0NSw2ICYjNDM7MTc1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gMDtcbiBcdHNpemVfdCBvZmZzZXQ7XG4mIzQzO1x0Ym9vbCB3aWxsX2FsbG9jID0gISpwYWdlcztcbiBcdGludCByZXM7XG4gXG4gXHRpZiAoaS1cdTAwM2VkYXRhX3NvdXJjZSA9PSBJVEVSX0RFU1QpXG5AQCAtMTc2MSw4ICYjNDM7MTc3MywxNCBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0aWYgKCFtYXhwYWdlcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRyZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGFkZHIsIG1heHBhZ2VzLCBndXBfZmxhZ3MsICpwYWdlcyk7XG4tXHRpZiAodW5saWtlbHkocmVzIFx1MDAzYz0gMCkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KHJlcyBcdTAwM2M9IDApKSB7XG4mIzQzO1x0XHRpZiAod2lsbF9hbGxvYykge1xuJiM0MztcdFx0XHRrdmZyZWUoKnBhZ2VzKTtcbiYjNDM7XHRcdFx0KnBhZ2VzID0gTlVMTDtcbiYjNDM7XHRcdH1cbiBcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bWF4c2l6ZSA9IG1pbl90KHNpemVfdCwgbWF4c2l6ZSwgcmVzICogUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiBcdGlvdl9pdGVyX2FkdmFuY2UoaSwgbWF4c2l6ZSk7XG4gXHRyZXR1cm4gbWF4c2l6ZTtcbmRpZmYgLS1naXQgYS9saWIvc2NhdHRlcmxpc3QuYyBiL2xpYi9zY2F0dGVybGlzdC5jXG5pbmRleCBiN2ZlOTFlZjM1YjhjNi4uNmVhNDBkMmU2MjQ3NTUgMTAwNjQ0XG4tLS0gYS9saWIvc2NhdHRlcmxpc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3NjYXR0ZXJsaXN0LmNcbkBAIC0xMzY2LDYgJiM0MzsxMzY2LDcgQEAgc3RhdGljIHNzaXplX3QgZXh0cmFjdF94YXJyYXlfdG9fc2coc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRzZ19tYXgtLTtcbiBcbiBcdFx0bWF4c2l6ZSAtPSBsZW47XG4mIzQzO1x0XHRzdGFydCAmIzQzOz0gbGVuO1xuIFx0XHRyZXQgJiM0Mzs9IGxlbjtcbiBcdFx0aWYgKG1heHNpemUgXHUwMDNjPSAwIHx8IHNnX21heCA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jIGIvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmNcbmluZGV4IGYwMmY3YjdhYTc5NjA1Li5lN2UxNTRmOTRmNjY1ZiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuY1xuQEAgLTI3NSw3ICYjNDM7Mjc1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0c3RydWN0IHBhZ2UgKipzcGFnZXMsICoqYnBhZ2VzO1xuIFx0dTggKnNjcmF0Y2gsICpidWZmZXI7XG4gXHRzaXplX3QgYnVmc2l6ZSwgbnBhZ2VzLCBzaXplLCBjb3BpZWQ7XG4tXHRpbnQgaSwgYiwgcGF0dDtcbiYjNDM7XHRpbnQgaSwgcGF0dDtcbiBcbiBcdGJ1ZnNpemUgPSAweDEwMDAwMDtcbiBcdG5wYWdlcyA9IGJ1ZnNpemUgLyBQQUdFX1NJWkU7XG5AQCAtMjk4LDEwICYjNDM7Mjk4LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGl0ZXIubnJfc2VncywgMCk7XG4gXG4gXHQvKiBCdWlsZCB0aGUgZXhwZWN0ZWQgaW1hZ2UgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1xuLVx0YiA9IDA7XG4gXHRwYXR0ID0gMDtcbiBcdG1lbXNldChzY3JhdGNoLCAwLCBidWZzaXplKTtcbi1cdGZvciAocHIgPSBidmVjX3Rlc3RfcmFuZ2VzOyBwci1cdTAwM2Vmcm9tIFx1MDAzZT0gMDsgcHImIzQzOyYjNDM7LCBiJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAocHIgPSBidmVjX3Rlc3RfcmFuZ2VzOyBwci1cdTAwM2Vmcm9tIFx1MDAzZT0gMDsgcHImIzQzOyYjNDM7KSB7XG4gXHRcdHU4ICpwID0gc2NyYXRjaCAmIzQzOyBwci1cdTAwM2VwYWdlICogUEFHRV9TSVpFO1xuIFxuIFx0XHRmb3IgKGkgPSBwci1cdTAwM2Vmcm9tOyBpIFx1MDAzYyBwci1cdTAwM2V0bzsgaSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDtGU0NBQ0hFJiMzNDssCiAgICAmIzM0O0NBQ0hFRklMRVMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfd2JfYmVnaW4mIzM0OywKICAgICYjMzQ7bmV0ZnNfd2JfZW5kJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGViYWNrX3NpbmdsZSYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZV9iZWdpbiYjMzQ7LAogICAgJiMzNDtuZXRmc19wZXJmb3JtX3dyaXRlJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfcGFnZXMmIzM0OywKICAgICYjMzQ7ZXh0cmFjdF9pdGVyX3RvX3NnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZnMgbG9naWMsIGluY2x1ZGluZyB3cml0ZWJhY2sgbG9ja2luZywgdW5idWZmZXJlZCB3cml0ZXMsIGFuZCBpdGVyYXRvciBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gSXQgYWxzbyBhZmZlY3RzIGNhY2hlZmlsZXMgYW5kIEFGUy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwNGI5NGQ0MGUwODVlYTBiYzBmYjJiZTYxNmE1NjE5NjQwNDgyODcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAxNDoyMjo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zeW1saW5rLmMgYi9mcy9hZnMvc3ltbGluay5jCmluZGV4IGVkNTg2ODM2OWYzNzJkLi4xNmI0ODIzY2I3YjdlNyAxMDA2NDQKLS0tIGEvZnMvYWZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc3ltbGluay5jCkBAIC0yNTUsMTEgJiM0MzsyNTUsMTEgQEAgaW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJfQogCiAJaWYgKHJldCA9PSAwKSB7Ci0JCW11dGV4X2xvY2soJmFtcDt2bm9kZS0mZ3Q7bmV0ZnMud2JfbG9jayk7CiYjNDM7CQluZXRmc193Yl9iZWdpbigmYW1wO3Zub2RlLSZndDtuZXRmcywgZmFsc2UpOwogCQluZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIodm5vZGUtJmd0O2RpcmVjdG9yeSk7CiAJCXZub2RlLSZndDtkaXJlY3RvcnkgPSBOVUxMOwogCQl2bm9kZS0mZ3Q7ZGlyZWN0b3J5X3NpemUgPSAwOwotCQltdXRleF91bmxvY2soJmFtcDt2bm9kZS0mZ3Q7bmV0ZnMud2JfbG9jayk7CiYjNDM7CQluZXRmc193Yl9lbmQoJmFtcDt2bm9kZS0mZ3Q7bmV0ZnMpOwogCX0gZWxzZSBpZiAocmV0ID09IDEpIHsKIAkJcmV0ID0gMDsgLyogU2tpcHBlZCB3cml0ZSBkdWUgdG8gbG9jayBjb25mbGljdC4gKi8KIAl9CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL25hbWVpLmMgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmMKaW5kZXggMjkzN2RiNjkwYjQwYjUuLmQ0MzA5ZGZiNTVkZjRlIDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCkBAIC0zNzUsNyAmIzQzOzM3NSw3IEBAIGludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKIAkJCQkJICAgICYjMzQ7UmVuYW1lIGZhaWxlZCB3aXRoIGVycm9yICVkJiMzNDssIHJldCk7CiAJfQogCi0JX19jYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKHJlcCkpOwomIzQzOwljYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKHJlcCkpOwogCWVuZF9yZW5hbWluZygmYW1wO3JkKTsKIAlfbGVhdmUoJiMzNDsgPSAwJiMzNDspOwogCXJldHVybiAwOwpAQCAtNDY3LDcgJiM0Mzs0NjcsNiBAQCBzdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCkKIAlyZXQgPSAtRUlOVkFMOwogCWlmICh1bmxpa2VseSghZmlsZS0mZ3Q7Zl9vcC0mZ3Q7cmVhZF9pdGVyKSB8fAogCSAgICB1bmxpa2VseSghZmlsZS0mZ3Q7Zl9vcC0mZ3Q7d3JpdGVfaXRlcikpIHsKLQkJZnB1dChmaWxlKTsKIAkJcHJfbm90aWNlKCYjMzQ7Q2FjaGUgZG9lcyBub3Qgc3VwcG9ydCByZWFkX2l0ZXIgYW5kIHdyaXRlX2l0ZXJcbiYjMzQ7KTsKIAkJZ290byBlcnJfdW51c2U7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jCmluZGV4IDc2ZDBmNmEyOWFiYWIyLi4yNGE4YTU0MThlMzExOSAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYwpAQCAtNjU5LDcgJiM0Mzs2NTksNyBAQCBpbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICpjdHgsCiAJICogd2l0aGluIHRoZSBjYWNoZSBncmFudWxlIGNvbnRhaW5pbmcgdGhlIEVPRiwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkCiAJICogdG8gcHJlbG9hZCB0aGUgZ3JhbnVsZS4KIAkgKi8KLQlpZiAoIW5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoY3R4KSAmYW1wOyZhbXA7CiYjNDM7CWlmICghbmV0ZnNfaXNfY2FjaGVfbWF5YmVfZW5hYmxlZChjdHgpICZhbXA7JmFtcDsKIAkgICAgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKGZvbGlvLCBwb3MsIGxlbiwgZmFsc2UpKSB7CiAJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3JoX3dyaXRlX3pza2lwKTsKIAkJZ290byBoYXZlX2ZvbGlvX25vX3dhaXQ7CmRpZmYgLS1naXQgYS9mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jIGIvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYwppbmRleCA2YmRlMzMyMGJjZWM2Ni4uMmNkYjY4ZTZiMTZmZmYgMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYwpAQCAtMjc3LDcgJiM0MzsyNzcsNyBAQCBzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCSAqIGNhY2hpbmcgc2VydmljZSB0ZW1wb3JhcmlseSBiZWNhdXNlIHRoZSBiYWNraW5nIHN0b3JlIGdvdAogCQkgKiBjdWxsZWQuCiAJCSAqLwotCQlpZiAobmV0ZnNfaXNfY2FjaGVfZW5hYmxlZChjdHgpKSB7CiYjNDM7CQlpZiAobmV0ZnNfaXNfY2FjaGVfbWF5YmVfZW5hYmxlZChjdHgpKSB7CiAJCQlpZiAoZmluZm8pIHsKIAkJCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93aF93c3RyZWFtX2NvbmZsaWN0KTsKIAkJCQlnb3RvIGZsdXNoX2NvbnRlbnQ7CmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jCmluZGV4IDI1ZjhjZWIxNWZhZDY0Li5jMTZmYmFkMjg2YTE3NyAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKQEAgLTE2NiwxMyAmIzQzOzE2NiwxNiBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAJCSAqLwogCQlzdWJyZXEtJmd0O2Vycm9yID0gLUVBR0FJTjsKIAkJdHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpOwotCQlpZiAoc3VicmVxLSZndDt0cmFuc2ZlcnJlZCAmZ3Q7IDApCiYjNDM7CQlpZiAoc3VicmVxLSZndDt0cmFuc2ZlcnJlZCAmZ3Q7IDApIHsKIAkJCWlvdl9pdGVyX2FkdmFuY2UoJmFtcDt3cmVxLSZndDtidWZmZXIuaXRlciwgc3VicmVxLSZndDt0cmFuc2ZlcnJlZCk7CiYjNDM7CQkJd3JlcS0mZ3Q7dHJhbnNmZXJyZWQgJiM0Mzs9IHN1YnJlcS0mZ3Q7dHJhbnNmZXJyZWQ7CiYjNDM7CQl9CiAKIAkJaWYgKHN0cmVhbS0mZ3Q7c291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgJmFtcDsmYW1wOwogCQkgICAgd3JlcS0mZ3Q7bmV0ZnNfb3BzLSZndDtyZXRyeV9yZXF1ZXN0KQogCQkJd3JlcS0mZ3Q7bmV0ZnNfb3BzLSZndDtyZXRyeV9yZXF1ZXN0KHdyZXEsIHN0cmVhbSk7CiAKJiM0MzsJCV9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKIAkJX19jbGVhcl9iaXQoTkVURlNfU1JFUV9ORUVEX1JFVFJZLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX0JPVU5EQVJZLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX0ZBSUxFRCwgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKQEAgLTE4NiwxNyAmIzQzOzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAKIAkJbmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7CiAKLQkJaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSkgewomIzQzOwkJaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSkKIAkJCXN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZShzdWJyZXEpOwotCQkJX19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsICZhbXA7c3VicmVxLSZndDtmbGFncyk7Ci0JCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGlvdl9pdGVyIHNvdXJjZTsKLQotCQkJbmV0ZnNfcmVzZXRfaXRlcihzdWJyZXEpOwotCQkJc291cmNlID0gc3VicmVxLSZndDtpb19pdGVyOwotCQkJbmV0ZnNfcmVpc3N1ZV93cml0ZShzdHJlYW0sIHN1YnJlcSwgJmFtcDtzb3VyY2UpOwotCQl9CiYjNDM7CQlfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKJiM0MzsJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7CiAJfQogCiAJbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpOwpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvaW50ZXJuYWwuaCBiL2ZzL25ldGZzL2ludGVybmFsLmgKaW5kZXggNjQ1OTk2ZWNmYzgwMzYuLmQ4ODljYWE0MDFkYzI0IDEwMDY0NAotLS0gYS9mcy9uZXRmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2ludGVybmFsLmgKQEAgLTIzOSw2ICYjNDM7MjM5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRmc19pc19jYWNoZV9lbmFibGVkKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4KQogI2VuZGlmCiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZnNfaXNfY2FjaGVfbWF5YmVfZW5hYmxlZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTQ0FDSEUpCiYjNDM7CXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gY3R4LSZndDtjYWNoZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkgJmFtcDsmYW1wOwomIzQzOwkJdGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfSVNfQ0FDSElORywgJmFtcDtjb29raWUtJmd0O2ZsYWdzKTsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogLyoKICAqIEdldCBhIHJlZiBvbiBhIG5ldGZzIGdyb3VwIGF0dGFjaGVkIHRvIGEgZGlydHkgcGFnZSAoZS5nLiBhIGNlcGggc25hcCkuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2xvY2tpbmcuYyBiL2ZzL25ldGZzL2xvY2tpbmcuYwppbmRleCAyMjQ5ZWNkMDlkMGE4ZC4uNGUzYmUyYjgxNTA0MDggMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL2xvY2tpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9sb2NraW5nLmMKQEAgLTksNiAmIzQzOzksMTEgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmcy5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAomIzQzO3N0cnVjdCBuZXRmc193Yl93YWl0ZXIgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CQkvKiBMaW5rIGluIGljdHgtJmd0O3diX3F1ZXVlICovCiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdAkqd2FpdGVyOwkvKiBXYWl0ZXIgdGFzazsgY2xlYXJlZCB3aGVuIGxvY2sgZ3JhbnRlZCAqLwomIzQzO307CiYjNDM7CiAvKgogICogaW5vZGVfZGlvX3dhaXRfaW50ZXJydXB0aWJsZSAtIHdhaXQgZm9yIG91dHN0YW5kaW5nIERJTyByZXF1ZXN0cyB0byBmaW5pc2gKICAqIEBpbm9kZTogaW5vZGUgdG8gd2FpdCBmb3IKQEAgLTIwMywzICYjNDM7MjA4LDkzIEBAIHZvaWQgbmV0ZnNfZW5kX2lvX2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXVwX3JlYWQoJmFtcDtpbm9kZS0mZ3Q7aV9yd3NlbSk7CiB9CiBFWFBPUlRfU1lNQk9MKG5ldGZzX2VuZF9pb19kaXJlY3QpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogV2FpdCB0byBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gd3JpdGViYWNrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5ldGZzX3diX2JlZ2luX3dhaXQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGZzX3diX3dhaXRlciB3YWl0ZXIgPSB7fTsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwomIzQzOwlib29sIGdvdCA9IGZhbHNlOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtpY3R4LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhORVRGU19JQ1RYX1dCX0xPQ0ssICZhbXA7aWN0eC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKJiM0MzsJCXdhaXRlci53YWl0ZXIgPSB0c2s7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7d2FpdGVyLmxpbmssICZhbXA7aWN0eC0mZ3Q7d2JfcXVldWUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZ290ID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2ljdHgtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoIWdvdCkgewomIzQzOwkJZm9yICg7OykgewomIzQzOwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKJiM0MzsJCQkvKiBSZWFkIHdhaXRlciBiZWZvcmUgYWNjZXNzaW5nIGlub2RlIHN0YXRlLiAqLwomIzQzOwkJCWlmIChzbXBfbG9hZF9hY3F1aXJlKCZhbXA7d2FpdGVyLndhaXRlcikgPT0gTlVMTCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJc2NoZWR1bGUoKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBuZXRmc193Yl9iZWdpbiAtIEJlZ2luIHdyaXRlYmFjaywgd2FpdGluZyBpZiBuZWVkIGJlCiYjNDM7ICogQGljdHg6IFRoZSBpbm9kZSB0byBnZXQgd3JpdGViYWNrIGFjY2VzcyBvbgomIzQzOyAqIEBub3dhaXQ6IFJldHVybiBmYWlsdXJlIGltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIHdhaXRpbmcgaWYgdHJ1ZQomIzQzOyAqCiYjNDM7ICogQmVnaW4gd3JpdGViYWNrIHRvIGFuIGlub2RlLCB3YWl0aW5nIGZvciBleGNsdXNpdmUgYWNjZXNzIGlmIEBub3dhaXQgaXMKJiM0MzsgKiBmYWxzZS4gIFRoaXMgcHJldmVudHMgY29sbGVjdGlvbiBmcm9tIGJlaW5nIGRvbmUgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdAomIzQzOyAqIHRvIHRoZSBpc3N1YW5jZSBvZiB3cml0ZSBzdWJyZXF1ZXN0cy4KJiM0MzsgKgomIzQzOyAqIE5vdGUgdGhhdCB3cml0ZWJhY2sgbWF5IGJlIGVuZGVkIGluIGEgZGlmZmVyZW50IHByb2Nlc3MgKGUuZy4gdGhlIGNvbGxlY3Rpb24KJiM0MzsgKiBmdW5jdGlvbiBvbiBhIHdvcmtxdWV1ZSkgdGhhbiBzdGFydGVkIGl0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBUcnVlIGlmIGNhbiBwcm9jZWVkLCBmYWxzZSBpZiBkZW5pZWQuCiYjNDM7ICovCiYjNDM7Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soTkVURlNfSUNUWF9XQl9MT0NLLCAmYW1wO2ljdHgtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAobm93YWl0KSB7CiYjNDM7CQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93Yl9sb2NrX3NraXApOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3diX2xvY2tfd2FpdCk7CiYjNDM7CXJldHVybiBuZXRmc193Yl9iZWdpbl93YWl0KGljdHgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTsKJiM0MzsKJiM0MzsvKiBuZXRmc193Yl9lbmQgLSBFbmQgd3JpdGViYWNrCiYjNDM7ICogQGljdHg6IFRoZSBpbm9kZSB3ZSBoYXZlIHdyaXRlYmFjayBhY2Nlc3MgdG8KJiM0MzsgKgomIzQzOyAqIEVuZCB3cml0ZWJhY2sgYWNjZXNzIG9uIGFuIGlub2RlLCB3YWtpbmcgdXAgdGhlIG5leHQgd3JpdGViYWNrIHJlcXVlc3QuCiYjNDM7ICovCiYjNDM7dm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGZzX3diX3dhaXRlciAqd2FpdGVyOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKJiM0MzsKJiM0MzsJV0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChORVRGU19JQ1RYX1dCX0xPQ0ssICZhbXA7aWN0eC0mZ3Q7ZmxhZ3MpKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aWN0eC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXdhaXRlciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO2ljdHgtJmd0O3diX3F1ZXVlLCBzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyLCBsaW5rKTsKJiM0MzsJaWYgKHdhaXRlcikgewomIzQzOwkJbGlzdF9kZWwoJmFtcDt3YWl0ZXItJmd0O2xpbmspOwomIzQzOwkJdHNrID0gd2FpdGVyLSZndDt3YWl0ZXI7CiYjNDM7CQkvKiBXcml0ZSBpbm9kZSBzdGF0ZSBiZWZvcmUgY2xlYXJpbmcgd2FpdGVyLiAqLwomIzQzOwkJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt3YWl0ZXItJmd0O3dhaXRlciwgTlVMTCk7CiYjNDM7CQl3YWtlX3VwX3Byb2Nlc3ModHNrKTsKJiM0MzsJCXB1dF90YXNrX3N0cnVjdCh0c2spOwomIzQzOwl9IGVsc2UgewomIzQzOwkJY2xlYXJfYml0X3VubG9jayhORVRGU19JQ1RYX1dCX0xPQ0ssICZhbXA7aWN0eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aWN0eC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wobmV0ZnNfd2JfZW5kKTsKZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYyBiL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYwppbmRleCAyNGZjMmJiMmY4YTQ3Yi4uMjEwZWI4ZjM5NThkNzcgMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMKQEAgLTQwOCw2ICYjNDM7NDA4LDE2IEBAIGJvb2wgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSkKIAluZXRmc193YWtlX3JyZXFfZmxhZyh3cmVxLCBORVRGU19SUkVRX0lOX1BST0dSRVNTLCBuZXRmc19ycmVxX3RyYWNlX3dha2VfaXApOwogCS8qIEFzIHdlIGNsZWFyZWQgTkVURlNfUlJFUV9JTl9QUk9HUkVTUywgd2UgYWNxdWlyZWQgaXRzIHJlZi4gKi8KIAomIzQzOwlzd2l0Y2ggKHdyZXEtJmd0O29yaWdpbikgewomIzQzOwljYXNlIE5FVEZTX1dSSVRFQkFDSzoKJiM0MzsJY2FzZSBORVRGU19XUklURUJBQ0tfU0lOR0xFOgomIzQzOwljYXNlIE5FVEZTX1dSSVRFVEhST1VHSDoKJiM0MzsJCW5ldGZzX3diX2VuZChpY3R4KTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKIAlpZiAod3JlcS0mZ3Q7aW9jYikgewogCQlzaXplX3Qgd3JpdHRlbiA9IG1pbih3cmVxLSZndDt0cmFuc2ZlcnJlZCwgd3JlcS0mZ3Q7bGVuKTsKIAkJd3JlcS0mZ3Q7aW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSB3cml0dGVuOwpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKaW5kZXggYzAzYzdjYzQ1ZTQ3MTYuLmYyNzYxYzk5Nzk1YTZiIDEwMDY0NAotLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKQEAgLTEwNiw3ICYjNDM7MTA2LDcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJX2VudGVyKCYjMzQ7Uj0leCYjMzQ7LCB3cmVxLSZndDtkZWJ1Z19pZCk7CiAKIAlpY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS0mZ3Q7aW5vZGUpOwotCWlmIChpc19jYWNoZWFibGUgJmFtcDsmYW1wOyBuZXRmc19pc19jYWNoZV9lbmFibGVkKGljdHgpKQomIzQzOwlpZiAoaXNfY2FjaGVhYmxlKQogCQlmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbigmYW1wO3dyZXEtJmd0O2NhY2hlX3Jlc291cmNlcywgbmV0ZnNfaV9jb29raWUoaWN0eCkpOwogCWlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KCZhbXA7d3JlcS0mZ3Q7YnVmZmVyLCB3cmVxLSZndDtkZWJ1Z19pZCwgSVRFUl9TT1VSQ0UpICZsdDsgMCkKIAkJZ290byBub21lbTsKQEAgLTU1MSwxNCAmIzQzOzU1MSw4IEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJaW50IGVycm9yID0gMDsKIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spKSB7Ci0JCWlmICh3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpIHsKLQkJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3diX2xvY2tfc2tpcCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93Yl9sb2NrX3dhaXQpOwotCQltdXRleF9sb2NrKCZhbXA7aWN0eC0mZ3Q7d2JfbG9jayk7Ci0JfQomIzQzOwlpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpCiYjNDM7CQlyZXR1cm4gMDsKIAogCS8qIE5lZWQgdGhlIGZpcnN0IGZvbGlvIHRvIGJlIGFibGUgdG8gc2V0IHVwIHRoZSBvcC4gKi8KIAlmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgTlVMTCwgJmFtcDtlcnJvcik7CkBAIC01ODgsMTMgJiM0Mzs1ODIsMTMgQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCX0KIAogCQllcnJvciA9IG5ldGZzX3dyaXRlX2ZvbGlvKHdyZXEsIHdiYywgZm9saW8pOwotCQlpZiAoZXJyb3IgJmx0OyAwKQotCQkJYnJlYWs7CiYjNDM7CQlpZiAoZXJyb3IgPT0gLUVOT01FTSkgewomIzQzOwkJCWZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSh3YmMsIGZvbGlvKTsKJiM0MzsJCQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwkJfQogCX0gd2hpbGUgKChmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sICZhbXA7ZXJyb3IpKSk7CiAKIAluZXRmc19lbmRfaXNzdWVfd3JpdGUod3JlcSk7Ci0KLQltdXRleF91bmxvY2soJmFtcDtpY3R4LSZndDt3Yl9sb2NrKTsKIAluZXRmc193YWtlX2NvbGxlY3Rvcih3cmVxKTsKIAogCW5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X3JldHVybik7CkBAIC02MDIsOSAmIzQzOzU5NiwxNiBAQCBpbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlyZXR1cm4gZXJyb3I7CiAKIGNvdWxkbnRfc3RhcnQ6Ci0JbmV0ZnNfa2lsbF9kaXJ0eV9wYWdlcyhtYXBwaW5nLCB3YmMsIGZvbGlvKTsKJiM0MzsJaWYgKGVycm9yID09IC1FTk9NRU0pIHsKJiM0MzsJCWZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSh3YmMsIGZvbGlvKTsKJiM0MzsJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQlmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sICZhbXA7ZXJyb3IpOwomIzQzOwkJV0FSTl9PTl9PTkNFKGZvbGlvICE9IE5VTEwpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZnNfa2lsbF9kaXJ0eV9wYWdlcyhtYXBwaW5nLCB3YmMsIGZvbGlvKTsKJiM0MzsJfQogb3V0OgotCW11dGV4X3VubG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwomIzQzOwluZXRmc193Yl9lbmQoaWN0eCk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgZXJyb3IpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTYxOCwxNiAmIzQzOzYxOSwxNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbgogCXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gTlVMTDsKIAlzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHggPSBuZXRmc19pbm9kZShmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApKTsKIAotCW11dGV4X2xvY2soJmFtcDtpY3R4LSZndDt3Yl9sb2NrKTsKJiM0MzsJbmV0ZnNfd2JfYmVnaW4oaWN0eCwgZmFsc2UpOwogCiAJd3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoaW9jYi0mZ3Q7a2lfZmlscC0mZ3Q7Zl9tYXBwaW5nLCBpb2NiLSZndDtraV9maWxwLAogCQkJCSAgICAgIGlvY2ItJmd0O2tpX3BvcywgTkVURlNfV1JJVEVUSFJPVUdIKTsKIAlpZiAoSVNfRVJSKHdyZXEpKSB7Ci0JCW11dGV4X3VubG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwomIzQzOwkJbmV0ZnNfd2JfZW5kKGljdHgpOwogCQlyZXR1cm4gd3JlcTsKIAl9CiAKIAl3cmVxLSZndDtpb19zdHJlYW1zWzBdLmF2YWlsID0gdHJ1ZTsKJiM0MzsJX19zZXRfYml0KE5FVEZTX1JSRVFfT0ZGTE9BRF9DT0xMRUNUSU9OLCAmYW1wO3dyZXEtJmd0O2ZsYWdzKTsKIAl0cmFjZV9uZXRmc193cml0ZSh3cmVxLCBuZXRmc193cml0ZV90cmFjZV93cml0ZXRocm91Z2gpOwogCXJldHVybiB3cmVxOwogfQpAQCAtNjg1LDcgJiM0Mzs2ODcsNiBAQCBpbnQgbmV0ZnNfYWR2YW5jZV93cml0ZXRocm91Z2goc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsIHN0cnVjdCB3cml0ZWJhY2tfYwogc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJCSAgICAgICBzdHJ1Y3QgZm9saW8gKndyaXRldGhyb3VnaF9jYWNoZSkKIHsKLQlzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHggPSBuZXRmc19pbm9kZSh3cmVxLSZndDtpbm9kZSk7CiAJc3NpemVfdCByZXQ7CiAKIAlfZW50ZXIoJiMzNDtSPSV4JiMzNDssIHdyZXEtJmd0O2RlYnVnX2lkKTsKQEAgLTY5OSw4ICYjNDM7NzAwLDYgQEAgc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2MKIAogCW5ldGZzX2VuZF9pc3N1ZV93cml0ZSh3cmVxKTsKIAotCW11dGV4X3VubG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwotCiAJaWYgKHdyZXEtJmd0O2lvY2IpCiAJCXJldCA9IC1FSU9DQlFVRVVFRDsKIAllbHNlCkBAIC04NDcsMTUgJiM0Mzs4NDYsMTAgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJaWYgKFdBUk5fT05fT05DRSghaW92X2l0ZXJfaXNfZm9saW9xKGl0ZXIpKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDtpY3R4LSZndDt3Yl9sb2NrKSkgewotCQlpZiAod2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7Ci0JCQkvKiBUaGUgVkZTIHdpbGwgaGF2ZSB1bmRpcnRpZWQgdGhlIGlub2RlLiAqLwotCQkJbmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoJmFtcDtpY3R4LSZndDtpbm9kZSk7Ci0JCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93Yl9sb2NrX3NraXApOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJbmV0ZnNfc3RhdCgmYW1wO25ldGZzX25fd2JfbG9ja193YWl0KTsKLQkJbXV0ZXhfbG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwomIzQzOwlpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpIHsKJiM0MzsJCS8qIFRoZSBWRlMgd2lsbCBoYXZlIHVuZGlydGllZCB0aGUgaW5vZGUuICovCiYjNDM7CQluZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eSgmYW1wO2ljdHgtJmd0O2lub2RlKTsKJiM0MzsJCXJldHVybiAxOwogCX0KIAogCXdyZXEgPSBuZXRmc19jcmVhdGVfd3JpdGVfcmVxKG1hcHBpbmcsIE5VTEwsIDAsIE5FVEZTX1dSSVRFQkFDS19TSU5HTEUpOwpAQCAtODkzLDcgJiM0Mzs4ODcsNiBAQCBpbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlzbXBfd21iKCk7IC8qIFdyaXRlIGxpc3RzIGJlZm9yZSBBTExfUVVFVUVELiAqLwogCXNldF9iaXQoTkVURlNfUlJFUV9BTExfUVVFVUVELCAmYW1wO3dyZXEtJmd0O2ZsYWdzKTsKIAotCW11dGV4X3VubG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwogCW5ldGZzX3dha2VfY29sbGVjdG9yKHdyZXEpOwogCiAJbmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfcmV0dXJuKTsKQEAgLTkwMSw3ICYjNDM7ODk0LDcgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJcmV0dXJuIHJldDsKIAogY291bGRudF9zdGFydDoKLQltdXRleF91bmxvY2soJmFtcDtpY3R4LSZndDt3Yl9sb2NrKTsKJiM0MzsJbmV0ZnNfd2JfZW5kKGljdHgpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZnMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZnMuaAppbmRleCAyNDNjMGY3Mzc5Mzg4My4uMWJjMTIwZDYxYzViZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZzLmgKQEAgLTYxLDE0ICYjNDM7NjEsMTYgQEAgc3RydWN0IG5ldGZzX2lub2RlIHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19GU0NBQ0hFKQogCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY2FjaGU7CiAjZW5kaWYKLQlzdHJ1Y3QgbXV0ZXgJCXdiX2xvY2s7CS8qIFdyaXRlYmFjayBzZXJpYWxpc2F0aW9uICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQJd2JfcXVldWU7CS8qIFF1ZXVlIG9mIHByb2Nlc3NlcyB3YW50aW5nIHRvIGRvIHdyaXRlYmFjayAqLwogCWxvZmZfdAkJCV9yZW1vdGVfaV9zaXplOwkvKiBTaXplIG9mIHRoZSByZW1vdGUgZmlsZSAqLwogCWxvZmZfdAkJCV96ZXJvX3BvaW50OwkvKiBTaXplIGFmdGVyIHdoaWNoIHdlIGFzc3VtZSB0aGVyZSYjMzk7cyBubyBkYXRhCiAJCQkJCQkgKiBvbiB0aGUgc2VydmVyICovCiYjNDM7CXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBMb2NrIGNvdmVyaW5nIHdiX3F1ZXVlICovCiAJYXRvbWljX3QJCWlvX2NvdW50OwkvKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgcmVxcyAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogI2RlZmluZSBORVRGU19JQ1RYX09ESVJFQ1QJMAkJLyogVGhlIGZpbGUgaGFzIERJTyBpbiBwcm9ncmVzcyAqLwogI2RlZmluZSBORVRGU19JQ1RYX1VOQlVGRkVSRUQJMQkJLyogSS9PIHNob3VsZCBub3QgdXNlIHRoZSBwYWdlY2FjaGUgKi8KJiM0MzsjZGVmaW5lIE5FVEZTX0lDVFhfV0JfTE9DSwkyCQkvKiBXcml0ZWJhY2sgc2VyaWFsaXNhdGlvbiBsb2NrICovCiAjZGVmaW5lIE5FVEZTX0lDVFhfTU9ESUZJRURfQVRUUiAzCQkvKiBJbmRpY2F0ZSBjaGFuZ2UgaW4gbXRpbWUvY3RpbWUgKi8KICNkZWZpbmUgTkVURlNfSUNUWF9TSU5HTEVfTk9fVVBMT0FEIDQJCS8qIE1vbm9saXRoaWMgcGF5bG9hZCwgY2FjaGUgYnV0IG5vIHVwbG9hZCAqLwogfTsKQEAgLTQ2Miw2ICYjNDM7NDY0LDEwIEBAIGludCBuZXRmc19hbGxvY19mb2xpb3FfYnVmZmVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJICAgICAgc2l6ZV90ICpfY3VyX3NpemUsIHNzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgbmV0ZnNfZnJlZV9mb2xpb3FfYnVmZmVyKHN0cnVjdCBmb2xpb19xdWV1ZSAqZnEpOwogCiYjNDM7LyogV3JpdGViYWNrIGV4Y2x1c2lvbiBBUEkuICovCiYjNDM7Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTsKJiM0Mzt2b2lkIG5ldGZzX3diX2VuZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpOwomIzQzOwogLyoqCiAgKiBuZXRmc19pbm9kZSAtIEdldCB0aGUgbmV0ZnMgaW5vZGUgY29udGV4dCBmcm9tIHRoZSBpbm9kZQogICogQGlub2RlOiBUaGUgaW5vZGUgdG8gcXVlcnkKQEAgLTc0Myw3ICYjNDM7NzQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2lub2RlX2luaXQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRlNDQUNIRSkKIAljdHgtJmd0O2NhY2hlID0gTlVMTDsKICNlbmRpZgotCW11dGV4X2luaXQoJmFtcDtjdHgtJmd0O3diX2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2N0eC0mZ3Q7d2JfcXVldWUpOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAJLyogLSZndDtyZWxlYXNlcGFnZSgpIGRyaXZlcyB6ZXJvX3BvaW50ICovCiAJaWYgKHVzZV96ZXJvX3BvaW50KSB7CiAJCWN0eC0mZ3Q7X3plcm9fcG9pbnQgPSBjdHgtJmd0O19yZW1vdGVfaV9zaXplOwpAQCAtNzUzLDcgJiM0Mzs3NjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfaW5vZGVfaW5pdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCwKIAogLyoqCiAgKiBuZXRmc19yZXNpemVfZmlsZSAtIE5vdGUgdGhhdCBhIGZpbGUgZ290IHJlc2l6ZWQKLSAqIEBjdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkCiYjNDM7ICogQGljdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkCiAgKiBAbmV3X2lfc2l6ZTogVGhlIG5ldyBmaWxlIHNpemUKICAqIEBjaGFuZ2VkX29uX3NlcnZlcjogVGhlIGNoYW5nZSB3YXMgYXBwbGllZCB0byB0aGUgc2VydmVyCiAgKgpkaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuYwppbmRleCAyNDM2NjJhZjFhZjczZi4uNWE2NDM0NzA5NzE2ZTEgMTAwNjQ0Ci0tLSBhL2xpYi9pb3ZfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pb3ZfaXRlci5jCkBAIC0xNTY4LDYgJiM0MzsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJdW5zaWduZWQgaW50IG5yID0gMCwgb2Zmc2V0OwogCWxvZmZfdCBwb3MgPSBpLSZndDt4YXJyYXlfc3RhcnQgJiM0MzsgaS0mZ3Q7aW92X29mZnNldDsKJiM0MzsJYm9vbCB3aWxsX2FsbG9jID0gISpwYWdlczsKIAlYQV9TVEFURSh4YXMsIGktJmd0O3hhcnJheSwgcG9zICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwogCiAJb2Zmc2V0ID0gcG9zICZhbXA7IH5QQUdFX01BU0s7CkBAIC0xNTk1LDYgJiM0MzsxNTk2LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSwKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKJiM0MzsJaWYgKCFucikgewomIzQzOwkJaWYgKHdpbGxfYWxsb2MpIHsKJiM0MzsJCQlrdmZyZWUoKnBhZ2VzKTsKJiM0MzsJCQkqcGFnZXMgPSBOVUxMOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKIAltYXhzaXplID0gbWluX3Qoc2l6ZV90LCBuciAqIFBBR0VfU0laRSAtIG9mZnNldCwgbWF4c2l6ZSk7CiAJaW92X2l0ZXJfYWR2YW5jZShpLCBtYXhzaXplKTsKIAlyZXR1cm4gbWF4c2l6ZTsKQEAgLTE2MjgsNiAmIzQzOzE2MzcsOCBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLAogCWJpLmJpX2J2ZWNfZG9uZSA9IHNraXA7CiAKIAltYXhwYWdlcyA9IHdhbnRfcGFnZXNfYXJyYXkocGFnZXMsIG1heHNpemUsIHNraXAsIG1heHBhZ2VzKTsKJiM0MzsJaWYgKCFtYXhwYWdlcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCiAJd2hpbGUgKGJpLmJpX3NpemUgJmFtcDsmYW1wOyBiaS5iaV9pZHggJmx0OyBpLSZndDtucl9zZWdzKSB7CiAJCXN0cnVjdCBiaW9fdmVjIGJ2ID0gYnZlY19pdGVyX2J2ZWMoaS0mZ3Q7YnZlYywgYmkpOwpAQCAtMTc0NSw2ICYjNDM7MTc1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksCiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSAwOwogCXNpemVfdCBvZmZzZXQ7CiYjNDM7CWJvb2wgd2lsbF9hbGxvYyA9ICEqcGFnZXM7CiAJaW50IHJlczsKIAogCWlmIChpLSZndDtkYXRhX3NvdXJjZSA9PSBJVEVSX0RFU1QpCkBAIC0xNzYxLDggJiM0MzsxNzczLDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksCiAJaWYgKCFtYXhwYWdlcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzID0gcGluX3VzZXJfcGFnZXNfZmFzdChhZGRyLCBtYXhwYWdlcywgZ3VwX2ZsYWdzLCAqcGFnZXMpOwotCWlmICh1bmxpa2VseShyZXMgJmx0Oz0gMCkpCiYjNDM7CWlmICh1bmxpa2VseShyZXMgJmx0Oz0gMCkpIHsKJiM0MzsJCWlmICh3aWxsX2FsbG9jKSB7CiYjNDM7CQkJa3ZmcmVlKCpwYWdlcyk7CiYjNDM7CQkJKnBhZ2VzID0gTlVMTDsKJiM0MzsJCX0KIAkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwogCW1heHNpemUgPSBtaW5fdChzaXplX3QsIG1heHNpemUsIHJlcyAqIFBBR0VfU0laRSAtIG9mZnNldCk7CiAJaW92X2l0ZXJfYWR2YW5jZShpLCBtYXhzaXplKTsKIAlyZXR1cm4gbWF4c2l6ZTsKZGlmZiAtLWdpdCBhL2xpYi9zY2F0dGVybGlzdC5jIGIvbGliL3NjYXR0ZXJsaXN0LmMKaW5kZXggYjdmZTkxZWYzNWI4YzYuLjZlYTQwZDJlNjI0NzU1IDEwMDY0NAotLS0gYS9saWIvc2NhdHRlcmxpc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvc2NhdHRlcmxpc3QuYwpAQCAtMTM2Niw2ICYjNDM7MTM2Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGV4dHJhY3RfeGFycmF5X3RvX3NnKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJc2dfbWF4LS07CiAKIAkJbWF4c2l6ZSAtPSBsZW47CiYjNDM7CQlzdGFydCAmIzQzOz0gbGVuOwogCQlyZXQgJiM0Mzs9IGxlbjsKIAkJaWYgKG1heHNpemUgJmx0Oz0gMCB8fCBzZ19tYXggPT0gMCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMgYi9saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYwppbmRleCBmMDJmN2I3YWE3OTYwNS4uZTdlMTU0Zjk0ZjY2NWYgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jCkBAIC0yNzUsNyAmIzQzOzI3NSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBpb3Zfa3VuaXRfY29weV90b19idmVjKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlzdHJ1Y3QgcGFnZSAqKnNwYWdlcywgKipicGFnZXM7CiAJdTggKnNjcmF0Y2gsICpidWZmZXI7CiAJc2l6ZV90IGJ1ZnNpemUsIG5wYWdlcywgc2l6ZSwgY29waWVkOwotCWludCBpLCBiLCBwYXR0OwomIzQzOwlpbnQgaSwgcGF0dDsKIAogCWJ1ZnNpemUgPSAweDEwMDAwMDsKIAlucGFnZXMgPSBidWZzaXplIC8gUEFHRV9TSVpFOwpAQCAtMjk4LDEwICYjNDM7Mjk4LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpdGVyLm5yX3NlZ3MsIDApOwogCiAJLyogQnVpbGQgdGhlIGV4cGVjdGVkIGltYWdlIGluIHRoZSBzY3JhdGNoIGJ1ZmZlci4gKi8KLQliID0gMDsKIAlwYXR0ID0gMDsKIAltZW1zZXQoc2NyYXRjaCwgMCwgYnVmc2l6ZSk7Ci0JZm9yIChwciA9IGJ2ZWNfdGVzdF9yYW5nZXM7IHByLSZndDtmcm9tICZndDs9IDA7IHByJiM0MzsmIzQzOywgYiYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChwciA9IGJ2ZWNfdGVzdF9yYW5nZXM7IHByLSZndDtmcm9tICZndDs9IDA7IHByJiM0MzsmIzQzOykgewogCQl1OCAqcCA9IHNjcmF0Y2ggJiM0MzsgcHItJmd0O3BhZ2UgKiBQQUdFX1NJWkU7CiAKIAkJZm9yIChpID0gcHItJmd0O2Zyb207IGkgJmx0OyBwci0mZ3Q7dG87IGkmIzQzOyYjNDM7KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIGl0IHRvdWNoZXMgYSBzaWduaWZpY2FudCBzd2F0aCBvZiB0aGUga2VybmVsOiBgZnMvYWZzL3N5bWxpbmsuY2AsIGBmcy9jYWNoZWZpbGVzL25hbWVpLmNgLCBhIGJ1bmNoIG9mIGBmcy9uZXRmcy8qYCBmaWxlcyAoYnVmZmVyZWQgcmVhZC93cml0ZSwgZGlyZWN0IHdyaXRlLCBpbnRlcm5hbCBoZWFkZXJzLCBsb2NraW5nLCB3cml0ZSBjb2xsZWN0aW9uLCBpc3N1ZSksIGBpbmNsdWRlL2xpbnV4L25ldGZzLmhgLCBhbmQgc29tZSBzdHVmZiBpbiBgbGliL2AgcmVsYXRlZCB0byBgaW92X2l0ZXJgIGFuZCBgc2NhdHRlcmxpc3RgLCBwbHVzIGEgS1VuaXQgdGVzdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBmb2N1c2VkIGF0dGVudGlvbi4KCkZpcnN0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIHNvbWUgbXV0ZXgtYmFzZWQgbG9ja2luZyBpbiBgYWZzL3N5bWxpbmsuY2Agd2l0aCBhIGN1c3RvbSB3cml0ZWJhY2sgbG9ja2luZyBtZWNoYW5pc20gdXNpbmcgYG5ldGZzX3diX2JlZ2luYCBhbmQgYG5ldGZzX3diX2VuZGAuIFRoYXTigJlzIGludGVyZXN0aW5nOyBzZWVtcyBsaWtlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIHBlcmhhcHMgYSBjaGFuZ2UgdG8gaGFuZGxlIGNvbnRlbnRpb24gYmV0dGVyLiBgY2FjaGVmaWxlcy9uYW1laS5jYCBsb29rcyBsaWtlIGl0IGlzIHNpbXBsaWZ5aW5nIHNvbWUgaW5vZGUgdXNhZ2UgdHJhY2tpbmcuIFRoZW4gaW4gYGZzL25ldGZzYCB0aGVyZSBpcyBjaGFuZ2VzIHRvIGNhY2hlIGZ1bmN0aW9uYWxpdHkuIGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2Agc2VlbXMgdG8gYmUgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaXRlcmF0b3IgYWR2YW5jZW1lbnQgZHVyaW5nIGRpcmVjdCB3cml0ZXMsIGFuZCB3ZSYjMzk7cmUgc2VlaW5nIHNvbWUgY2xlYW51cCBvZiBmYWxsYmFja3MuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gbG9jayBpcyBjaGFuZ2VkIGZyb20gYSBtdXRleCB0byBhIHdhaXQgcXVldWUgd2l0aCBhIHNwaW5sb2NrIHdpdGhpbi4gVGhlIGB3cml0ZV9jb2xsZWN0YCBhbmQgYHdyaXRlX2lzc3VlYCBtb2R1bGVzIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyB3cml0ZWJhY2sgbG9ja2luZy4gVGhlcmUgYXJlIGFsc28gYWRqdXN0bWVudHMgZm9yIGhhbmRsaW5nIGAtRU5PTUVNYCBmcm9tIGBuZXRmc193cml0ZV9mb2xpb2AuCgpNb3Zpbmcgb24gdG8gYGxpYi9gLCB0aGUgYGlvdl9pdGVyYCBjb2RlIGlzIGdldHRpbmcgYSBjcml0aWNhbCBsb29rLiBJIHNlZSBmaXhlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdoZW4gZXh0cmFjdGluZyBwYWdlcywgZW5zdXJpbmcgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwLCBlc3BlY2lhbGx5IHdoZW4gYEVOT01FTWAgaXMgZW5jb3VudGVyZWQuIFRoZSBgc2NhdHRlcmxpc3RgIGNvZGUgaGFzIGEgc21hbGwgZml4IHJlbGF0ZWQgdG8gdGhlIGBleHRyYWN0X3hhcnJheV90b19zZ2AgZnVuY3Rpb24uIEFuZCBmaW5hbGx5IHRoZSB0ZXN0IHN1aXRlIGhhcyBoYWQgc29tZSBpcnJlbGV2YW50IHZhcmlhYmxlcyBkZWxldGVkLiBUaGVzZSBhcmUgYWxsIHN1YnRsZSwgYnV0IGltcG9ydGFudCwgY2hhbmdlcyB0aGF0IGNvdWxkIGltcGFjdCBhIGxvdCBvZiB1c2Vyc3BhY2UgYmVoYXZpb3IuCgpGdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgaW1wYWN0ZnVsLiBUaGUgbmV0ZnMgY29kZSBpcyBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHRoZSBgaW92X2l0ZXJgIGFuZCBgc2NhdHRlcmxpc3RgIGNoYW5nZXMgaGF2ZSBicm9hZCBpbXBsaWNhdGlvbnMsIG5vdCB0byBtZW50aW9uIHRoZSBBRlMgY2hhbmdlcy4gVGhpcyBsb29rcyBsaWtlIGEgZmFpcmx5IGNvbXByZWhlbnNpdmUgc2V0IG9mIG1vZGlmaWNhdGlvbnMuCgpCYXNlZCBvbiB0aGlzLCB0aGlzIHNlcmllcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6eiBtZSEmIzM0OyBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gc3ViamVjdCB0aGlzIHRvIHNvbWUgaGVhdnkgZnV6emluZyBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYnVncy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfTkVURlNfU1VQUE9SVGAgaXMgdGhlIGJpZyBvbmUsIG9idmlvdXNseS4gV2UmIzM5O2xsIG5lZWQgdGhhdCBlbmFibGVkLiBgQ09ORklHX0ZTQ0FDSEVgIGlzIGFsc28gcmVsZXZhbnQsIHNpbmNlIHdlJiMzOTtyZSB0b3VjaGluZyBgY2FjaGVmaWxlc2AuIEFuZCBzaW5jZSBgYWZzL3N5bWxpbmsuY2AgaXMgYmVpbmcgbW9kaWZpZWQsIGBDT05GSUdfQUZTX0ZTYCBpcyBpbXBvcnRhbnQsIHRvby4gQW5kIG9mIGNvdXJzZSwgYENPTkZJR19DQUNIRUZJTEVTYCBhcyBpdCBpbXBhY3RzIHRob3NlIGZ1bmN0aW9uYWxpdGllcyBkaXJlY3RseS4KCkZpbmFsbHksIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBzZWVtIHRvIGJlOiBgbmV0ZnNfd2JfYmVnaW5gLCBgbmV0ZnNfd2JfZW5kYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXNgLCBhbmQgYGV4dHJhY3RfeGFycmF5X3RvX3NnYC4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNvdmVyZWQgd2VsbC4KCkp1c3QgZG91YmxlLWNoZWNraW5nLi4ueXVwLCBgQ09ORklHX05FVEZTX1NVUFBPUlRgIGlzIHRoZSBsaW5jaHBpbi4gV2UmIzM5O3JlIGdvaW5nIHRvIHRyZWF0IHRoaXMgd2l0aCBjYXJlIGFuZCBwcm9jZWVkIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGU19TVVBQT1JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL0tjb25maWctMi1cbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxuZnMvbmV0ZnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwNgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb246IGBDT05GSUdfRlNDQUNIRWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBrZXksIG9mIGNvdXJzZSwgaXMgYENPTkZJR19GU0NBQ0hFYC4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbmZpcm0gdGhlIHN0YXR1cyBvZiB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uLiBJcyBpdCBlbmFibGVkPyBJcyBpdCBidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQ/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGRlcGVuZGluZyBvbiB0aGUgc2V0dGluZy4gSWYgaXQmIzM5O3MgZW5hYmxlZCwgSSBjYW4gdGhlbiBwcm9jZWVkIHdpdGggbXkgcGxhbm5lZCB0cm91Ymxlc2hvb3Rpbmcgb3IgaW52ZXN0aWdhdGlvbi4gSWYgbm90IGVuYWJsZWQsIGl0JiMzOTtzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgYXBwcm9hY2guIEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gY29uc2lkZXIgaXRzIGRlcGVuZGVuY3kgdG8gb3RoZXIgZmVhdHVyZXMgYXMgd2VsbC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgc3RhbmRzIHRvIGtub3cgd2hlcmUgdG8gbW92ZSBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU0NBQ0hFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL0tjb25maWc9MjU9Y29uZmlnIE5FVEZTX0RFQlVHXG4tLVxuZnMvbmV0ZnMvS2NvbmZpZy0zMi1cbmZzL25ldGZzL0tjb25maWc6MzM6Y29uZmlnIEZTQ0FDSEVcbmZzL25ldGZzL0tjb25maWctMzQtXHRib29sIFwmIzM0O0dlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXJcJiMzNDtcbi0tXG5mcy9uZXRmcy9LY29uZmlnLTQzLVxuZnMvbmV0ZnMvS2NvbmZpZzo0NDpjb25maWcgRlNDQUNIRV9TVEFUU1xuZnMvbmV0ZnMvS2NvbmZpZy00NS1cdGJvb2wgXCYjMzQ7R2F0aGVyIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIG9uIGxvY2FsIGNhY2hpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIGBDT05GSUdfQ0FDSEVGSUxFU2AsIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOgoKKipEaWdnaW5nIGludG8gQ2FjaGVmaWxlcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBDT05GSUdfQ0FDSEVGSUxFU2AuIFRoYXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZSwgdGhlIHZlcnkgZm91bmRhdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBpbiBteSBoZWFkOiBlbmFibGluZyBpdCBtZWFucyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHVzZSBhIGNhY2hpbmcgbWVjaGFuaXNtLiBCdXQgd2hhdCAqa2luZCogb2YgY2FjaGluZz8gSXMgaXQgYmxvY2stbGV2ZWwsIGZpbGUtbGV2ZWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGZpbGVzeXN0ZW0gaXMgdGhpcyBydW5uaW5nIG9uPyBLbm93aW5nIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gKGUuZy4sIGV4dDQsIFhGUywgQnRyZnMsIGV0Yy4pIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjYWNoZSBpbnRlcmFjdHMgYW5kIHBlcmZvcm1zLiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBkb3duc2lkZXM6IGNhY2hlIGludmFsaWRhdGlvbiwgd3JpdGUgcGVuYWx0aWVzLCBhbmQgb3ZlcmFsbCBzdG9yYWdlIG92ZXJoZWFkLiBUaGlzIGNvdWxkIGJlIGEgcGVyZm9ybWFuY2UgZ2FpbiwgYSBwZXJmb3JtYW5jZSAqbG9zcyosIG9yIGEgd2FzaCBkZXBlbmRpbmcgb24gbnVtZXJvdXMgZmFjdG9ycy4gSSYjMzk7bSBnb2luZyB0byBuZWVkIG1vcmUgY29udGV4dC4gSSB3YW50IHRvIGtub3cgYWJvdXQgdGhlIHdvcmtsb2FkLCB0aGUgaGFyZHdhcmUsIGFuZCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBzZXR0aW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGltcGFjdHMgbXkgdXNlciYjMzk7cyBzeXN0ZW1zIGFuZCB3aGF0IGJlbmVmaXRzIHRoZXkgbWlnaHQgYmUgZ2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FDSEVGSUxFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jYWNoZWZpbGVzL0tjb25maWctMi1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozOmNvbmZpZyBDQUNIRUZJTEVTXG5mcy9jYWNoZWZpbGVzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0ZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1wmIzM0O1xuLS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xMy1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzoxNDpjb25maWcgQ0FDSEVGSUxFU19ERUJVR1xuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtEZWJ1ZyBDYWNoZUZpbGVzXCYjMzQ7XG4tLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTIyLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjIzOmNvbmZpZyBDQUNIRUZJTEVTX0VSUk9SX0lOSkVDVElPTlxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtQcm92aWRlIGVycm9yIGluamVjdGlvbiBmb3IgY2FjaGVmaWxlc1wmIzM0O1xuLS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yOS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozMDpjb25maWcgQ0FDSEVGSUxFU19PTkRFTUFORFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBvbi1kZW1hbmQgcmVhZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTI5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlF1aWNrIENoZWNrOiBBRlMgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IGluYWR2ZXJ0ZW50bHkgZW5hYmxlZCBgQ09ORklHX0FGU19GU2AuIEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBidXQgYSBuZWNlc3Nhcnkgb25lIGdpdmVuIHRoZSBjb250ZXh0LiBXZSYjMzk7dmUgc2VlbiBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBsYXRlbHkgd2l0aCBzaW1pbGFyIGxlZ2FjeSBmaWxlc3lzdGVtcywgYW5kIEkgZG9uJiMzOTt0IHdhbnQgdG8gY2hhc2UgYSByZWQgaGVycmluZyBsYXRlci4gQmVzdCB0byBydWxlIGl0IG91dCBpbW1lZGlhdGVseSwgc28gd2UgY2FuIGZvY3VzIG9uIHRoZSBjb3JlIGlzc3VlLiBBRlMgaGFzIGl0cyBvd24gaWRpb3N5bmNyYXNpZXMsIGFuZCBldmVuIGlmIGl0JiMzOTtzIG5vdCB0aGUgcm9vdCBjYXVzZSwgaXRzIHByZXNlbmNlIGNvdWxkIGNvbXBsaWNhdGUgZGVidWdnaW5nIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gaW50ZXJuYWxzLiBMZXQmIzM5O3MgY29uZmlybSBpdHMgc3RhdHVzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NjQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZWJhY2sgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGNydWNpYWwgZm9yIG5ldHdvcmsgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhbmQgY2FjaGluZzogYE5FVEZTX1NVUFBPUlRgLCBgRlNDQUNIRWAsIGBDQUNIRUZJTEVTYCwgYW5kIGBBRlNfRlNgLiBUaGF0IG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbXMuCgpNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSB3cml0ZSBwcm9jZXNzLiBJJiMzOTttIHNlZWluZyBgbmV0ZnNfd2JfYmVnaW5gIGFuZCBgbmV0ZnNfd2JfZW5kYCDigJMgdGhvc2UgYXJlIG9idmlvdXNseSBpbXBvcnRhbnQgZm9yIHdyaXRlYmFjayBpbml0aWF0aW9uIGFuZCBjb21wbGV0aW9uLiBUaGVuIHRoZXJlJiMzOTtzIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCBhbmQgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgIHdoaWNoIGxpa2VseSBkZWFsIHdpdGggZGlmZmVyZW50IHdyaXRlIHN0cmF0ZWdpZXMuIFRoZSBgaW92X2l0ZXJfZXh0cmFjdF8uLi5gIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZzsgSSBrbm93IHRob3NlIHJlbGF0ZSB0byBzY2F0dGVyLWdhdGhlciBJL08gYW5kIHBhZ2UgZXh0cmFjdGlvbiwgc28gdGhleSYjMzk7bGwgYmUga2V5IHRvIGhvdyBkYXRhIGlzIG1vdmVkLiBTcGVjaWZpY2FsbHkgSSYjMzk7bSBzZWVpbmcgYGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXNgIGFuZCBgZXh0cmFjdF94YXJyYXlfdG9fc2dgIGFzIGltcG9ydGFudC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9ucyBpbnZvbHZlZD8gQWhhISBIZXJlIGFyZSBhIGZldyBtb3JlOiBgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbmAsIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgLCBgbmV0ZnNfZW5kX3dyaXRldGhyb3VnaGAsIGBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0YCwgYW5kIGBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlYC4gVGhvc2Ugc2VlbSB0byBiZSByZWxhdGVkIHRvIGJ1bGsgd3JpdGVzLCB3cml0ZS10aHJvdWdoIGNvbnNpc3RlbmN5LCBhbmQgY2FjaGluZyBvYmplY3RzLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCBkYXRhIGludGVncml0eSBjb25zaWRlcmF0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucywgSSBuZWVkIHRvIGtub3cgaWYgdGhleSYjMzk7cmUgZXhwb3J0ZWQgb3Igc3RhdGljLi4uIEkgcmVjYWxsIHRoYXQgYG5ldGZzX3diX2JlZ2luYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kLiBOb3csIGxvb2tpbmcgY2xvc2VyLCBgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF91c2VyX3BhZ2VzYCwgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXNgIGFyZSBzdGF0aWMgd2l0aGluIGBsaWIvaW92X2l0ZXIuY2AuIEFuZCBgZXh0cmFjdF94YXJyYXlfdG9fc2dgIGlzIHN0YXRpYyBpbiBgbGliL3NjYXR0ZXJsaXN0LmNgLiBTbyB0aGV5JiMzOTtyZSBpbnRlcm5hbC4KCkFoIGhhISBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AgLSB0aGF0IGxvb2tzIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBiZWluZyB0aGUgJiMzNDttYXN0ZXImIzM0OyBmdW5jdGlvbi4gSXQgcHJvYmFibHkgY2FsbHMgdGhvc2Ugc3RhdGljIG9uZXMgSSBqdXN0IGNoZWNrZWQuIEkgc2hvdWxkIGNoZWNrIHRoYXQgb25lIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW92X2l0ZXJfZXh0cmFjdF9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8taW50ZWdyaXR5LmM9MzY4PWludCBiaW9faW50ZWdyaXR5X21hcF91c2VyKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zOTktXG5ibG9jay9iaW8taW50ZWdyaXR5LmM6NDAwOlx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpdGVyLCBcdTAwMjZwYWdlcywgYnl0ZXMsIG5yX3ZlY3MsXG5ibG9jay9iaW8taW50ZWdyaXR5LmMtNDAxLVx0XHRcdFx0XHRleHRyYWN0aW9uX2ZsYWdzLCBcdTAwMjZvZmZzZXQpO1xuLS1cbmRyaXZlcnMvdGVlL3RlZV9zaG0uYz00MDE9cmVnaXN0ZXJfc2htX2hlbHBlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IGlvdl9pdGVyICppdGVyLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy90ZWUvdGVlX3NobS5jLTQ0Ni1cbmRyaXZlcnMvdGVlL3RlZV9zaG0uYzo0NDc6XHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFx1MDAyNnNobS1cdTAwM2VwYWdlcywgTE9OR19NQVgsIG51bV9wYWdlcywgMCxcbmRyaXZlcnMvdGVlL3RlZV9zaG0uYy00NDgtXHRcdFx0XHQgICAgIFx1MDAyNm9mZik7XG4tLVxuZnMvZGlyZWN0LWlvLmMtNDMtLypcbmZzL2RpcmVjdC1pby5jOjQ0OiAqIEhvdyBtYW55IHVzZXIgcGFnZXMgdG8gbWFwIGluIG9uZSBjYWxsIHRvIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKS4gIFRoaXNcbmZzL2RpcmVjdC1pby5jLTQ1LSAqIGRldGVybWluZXMgdGhlIHNpemUgb2YgYSBzdHJ1Y3R1cmUgaW4gdGhlIHNsYWIgY2FjaGVcbi0tXG5mcy9kaXJlY3QtaW8uYz0xMTY9c3RydWN0IGRpbyB7XG4tLVxuZnMvZGlyZWN0LWlvLmMtMTI4LVx0c3BpbmxvY2tfdCBiaW9fbG9jaztcdFx0LyogcHJvdGVjdHMgQklPIGZpZWxkcyBiZWxvdyAqL1xuZnMvZGlyZWN0LWlvLmM6MTI5Olx0aW50IHBhZ2VfZXJyb3JzO1x0XHQvKiBlcnIgZnJvbSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCkgKi9cbmZzL2RpcmVjdC1pby5jLTEzMC1cdGludCBpc19hc3luYztcdFx0XHQvKiBpcyBJTyBhc3luYyA/ICovXG4tLVxuZnMvZGlyZWN0LWlvLmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGRpb19yZWZpbGxfcGFnZXMoc3RydWN0IGRpbyAqZGlvLCBzdHJ1Y3QgZGlvX3N1Ym1pdCAqc2Rpbylcbi0tXG5mcy9kaXJlY3QtaW8uYy0xNzEtXG5mcy9kaXJlY3QtaW8uYzoxNzI6XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKHNkaW8tXHUwMDNlaXRlciwgXHUwMDI2cGFnZXMsIExPTkdfTUFYLFxuZnMvZGlyZWN0LWlvLmMtMTczLVx0XHRcdFx0ICAgICBESU9fUEFHRVMsIDAsIFx1MDAyNnNkaW8tXHUwMDNlZnJvbSk7XG4tLVxuZnMvZGlyZWN0LWlvLmMtMjAyLSAqIEdldCBhbm90aGVyIHVzZXJzcGFjZSBwYWdlLiAgUmV0dXJucyBhbiBFUlJfUFRSIG9uIGVycm9yLiAgUGFnZXMgYXJlXG5mcy9kaXJlY3QtaW8uYzoyMDM6ICogYnVmZmVyZWQgaW5zaWRlIHRoZSBkaW8gc28gdGhhdCB3ZSBjYW4gY2FsbCBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKClcbmZzL2RpcmVjdC1pby5jLTIwNC0gKiBhZ2FpbnN0IGEgZGVjZW50IG51bWJlciBvZiBwYWdlcywgbGVzcyBmcmVxdWVudGx5LiAgVG8gcHJvdmlkZSBuaWNlciB1c2Ugb2Zcbi0tXG5mcy9mdXNlL2ZpbGUuYz0xNTQ4PXN0YXRpYyBpbnQgZnVzZV9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc3RydWN0IGlvdl9pdGVyICppaSxcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xNTU5LVx0ICogSG93ZXZlciBpZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgZnVzZV9jb25uIHJlcXVpcmVzIHBhZ2VzIGluc3RlYWQgb2ZcbmZzL2Z1c2UvZmlsZS5jOjE1NjA6XHQgKiBwb2ludGVyIChlLmcuLCB2aXJ0aW8tZnMpLCB1c2UgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpIGluc3RlYWQuXG5mcy9mdXNlL2ZpbGUuYy0xNTYxLVx0ICovXG4tLVxuZnMvZnVzZS9maWxlLmMtMTU4NS1cdCAqIFVudGlsIHRoZXJlIGlzIHN1cHBvcnQgZm9yIGlvdl9pdGVyX2V4dHJhY3RfZm9saW9zKCksIHdlIGhhdmUgdG9cbmZzL2Z1c2UvZmlsZS5jOjE1ODY6XHQgKiBtYW51YWxseSBleHRyYWN0IHBhZ2VzIHVzaW5nIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSBhbmQgdGhlblxuZnMvZnVzZS9maWxlLmMtMTU4Ny1cdCAqIGNvcHkgdGhhdCB0byBhIGZvbGlvcyBhcnJheS5cbi0tXG5mcy9mdXNlL2ZpbGUuYy0xNTk5LVxuZnMvZnVzZS9maWxlLmM6MTYwMDpcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpaSwgXHUwMDI2cGFnZXMsXG5mcy9mdXNlL2ZpbGUuYy0xNjAxLVx0XHRcdFx0XHQgICAgICpuYnl0ZXNwIC0gbmJ5dGVzLFxuLS1cbmZzL25ldGZzL2l0ZXJhdG9yLmM9MzY9c3NpemVfdCBuZXRmc19leHRyYWN0X3VzZXJfaXRlcihzdHJ1Y3QgaW92X2l0ZXIgKm9yaWcsIHNpemVfdCBvcmlnX2xlbixcbi0tXG5mcy9uZXRmcy9pdGVyYXRvci5jLTY2LVx0d2hpbGUgKGNvdW50IFx1MDAyNlx1MDAyNiBucGFnZXMgXHUwMDNjIG1heF9wYWdlcykge1xuZnMvbmV0ZnMvaXRlcmF0b3IuYzo2NzpcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhvcmlnLCBcdTAwMjZwYWdlcywgY291bnQsXG5mcy9uZXRmcy9pdGVyYXRvci5jLTY4LVx0XHRcdFx0XHQgICAgIG1heF9wYWdlcyAtIG5wYWdlcywgZXh0cmFjdGlvbl9mbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTM3Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW92X2l0ZXJfdWJ1ZihzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXG4tLVxuaW5jbHVkZS9saW51eC91aW8uaC0zODctXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjM4ODpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcbmluY2x1ZGUvbGludXgvdWlvLmgtMzg5LVx0XHRcdCAgICAgICBzaXplX3QgbWF4c2l6ZSwgdW5zaWduZWQgaW50IG1heHBhZ2VzLFxuLS1cbmxpYi9pb3ZfaXRlci5jPTE2MTY9c3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjX3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcbi0tXG5saWIvaW92X2l0ZXIuYy0xNjQ2LVx0XHQvKlxubGliL2lvdl9pdGVyLmM6MTY0NzpcdFx0ICogVGhlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMgaW50ZXJmYWNlIG9ubHkgYWxsb3dzIGFuIG9mZnNldFxubGliL2lvdl9pdGVyLmMtMTY0OC1cdFx0ICogaW50byB0aGUgZmlyc3QgcGFnZS4gIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBzZWUgYW5cbmxpYi9pb3ZfaXRlci5jLTE2NDktXHRcdCAqIG9mZnNldCBpbnRvIHN1YnNlcXVlbnQgcGFnZXMsIHRoZSBjYWxsZXIgd2lsbCBoYXZlIHRvIGNhbGxcbmxpYi9pb3ZfaXRlci5jOjE2NTA6XHRcdCAqIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMgYWdhaW4gZm9yIHRoZSByZW1pbmRlci5cbmxpYi9pb3ZfaXRlci5jLTE2NTEtXHRcdCAqL1xuLS1cbmxpYi9pb3ZfaXRlci5jLTE2NjgtXHRcdCAqIFRoZSBjYWxsZXIgd2lsbCBoYW5kbGUgdGhpcyB3aXRoIGFub3RoZXIgY2FsbCB0b1xubGliL2lvdl9pdGVyLmM6MTY2OTpcdFx0ICogaW92X2l0ZXJfZXh0cmFjdF9wYWdlcy5cbmxpYi9pb3ZfaXRlci5jLTE2NzAtXHRcdCAqL1xuLS1cbmxpYi9pb3ZfaXRlci5jPTE3NDk9c3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF91c2VyX3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcbi0tXG5saWIvaW92X2l0ZXIuYy0xNzg5LS8qKlxubGliL2lvdl9pdGVyLmM6MTc5MDogKiBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzIC0gRXh0cmFjdCBhIGxpc3Qgb2YgY29udGlndW91cyBwYWdlcyBmcm9tIGFuIGl0ZXJhdG9yXG5saWIvaW92X2l0ZXIuYy0xNzkxLSAqIEBpOiBUaGUgaXRlcmF0b3IgdG8gZXh0cmFjdCBmcm9tXG4tLVxubGliL2lvdl9pdGVyLmMtMTgzMS0gKi9cbmxpYi9pb3ZfaXRlci5jOjE4MzI6c3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcbmxpYi9pb3ZfaXRlci5jLTE4MzMtXHRcdFx0ICAgICAgIHN0cnVjdCBwYWdlICoqKnBhZ2VzLFxuLS1cbmxpYi9pb3ZfaXRlci5jLTE4NjQtfVxubGliL2lvdl9pdGVyLmM6MTg2NTpFWFBPUlRfU1lNQk9MX0dQTChpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKTtcbmxpYi9pb3ZfaXRlci5jLTE4NjYtXG5saWIvaW92X2l0ZXIuYz0xODY3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcbi0tXG5saWIvaW92X2l0ZXIuYy0xOTA4LSAqXG5saWIvaW92X2l0ZXIuYzoxOTA5OiAqIExpa2UgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpLCBidXQgcmV0dXJucyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcmFuZ2VzXG5saWIvaW92X2l0ZXIuYy0xOTEwLSAqIGNvbnRhaW5lZCBpbiBhIHNpbmdsZSBmb2xpbyBhcyBhIHNpbmdsZSBidmVjIGluc3RlYWQgb2YgbXVsdGlwbGUgZW50cmllcy5cbi0tXG5saWIvaW92X2l0ZXIuYz0xOTE2PXNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBiaW9fdmVjICpidixcbi0tXG5saWIvaW92X2l0ZXIuYy0xOTM0LVxubGliL2lvdl9pdGVyLmM6MTkzNTpcdHNpemUgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFx1MDAyNnBhZ2VzLCBtYXhfc2l6ZSwgZW50cmllc19sZWZ0LFxubGliL2lvdl9pdGVyLmMtMTkzNi1cdFx0XHRleHRyYWN0aW9uX2ZsYWdzLCBcdTAwMjZvZmZzZXQpO1xuLS1cbmxpYi9zY2F0dGVybGlzdC5jPTExMTM9c3RhdGljIHNzaXplX3QgZXh0cmFjdF91c2VyX3RvX3NnKHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5saWIvc2NhdHRlcmxpc3QuYy0xMTI5LVx0ZG8ge1xubGliL3NjYXR0ZXJsaXN0LmM6MTEzMDpcdFx0cmVzID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpdGVyLCBcdTAwMjZwYWdlcywgbWF4c2l6ZSwgc2dfbWF4LFxubGliL3NjYXR0ZXJsaXN0LmMtMTEzMS1cdFx0XHRcdFx0ICAgICBleHRyYWN0aW9uX2ZsYWdzLCBcdTAwMjZvZmYpO1xuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTcwNz1zdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2V4dHJhY3RfcGFnZXNfa3ZlYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNzM0LVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6NzM1Olx0XHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKFx1MDAyNml0ZXIsIFx1MDAyNnBhZ2VzLCAxMDAgKiAxMDI0LFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNzM2LVx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUocGFnZWxpc3QpLCAwLCBcdTAwMjZvZmZzZXQwKTtcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz03ODc9c3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9leHRyYWN0X3BhZ2VzX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTgxMi1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjgxMzpcdFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhcdTAwMjZpdGVyLCBcdTAwMjZwYWdlcywgMTAwICogMTAyNCxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTgxNC1cdFx0XHRcdFx0ICAgICBBUlJBWV9TSVpFKHBhZ2VsaXN0KSwgMCwgXHUwMDI2b2Zmc2V0MCk7XG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM9ODY1PXN0YXRpYyB2b2lkIF9faW5pdCBpb3Zfa3VuaXRfZXh0cmFjdF9wYWdlc19mb2xpb3Eoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTg5Ni1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjg5NzpcdFx0XHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKFx1MDAyNml0ZXIsIFx1MDAyNnBhZ2VzLCAxMDAgKiAxMDI0LFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtODk4LVx0XHRcdFx0XHRcdCAgICAgQVJSQVlfU0laRShwYWdlbGlzdCksIDAsIFx1MDAyNm9mZnNldDApO1xuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTk0ND1zdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2V4dHJhY3RfcGFnZXNfeGFycmF5KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy05NzQtXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo5NzU6XHRcdFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhcdTAwMjZpdGVyLCBcdTAwMjZwYWdlcywgMTAwICogMTAyNCxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTk3Ni1cdFx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUocGFnZWxpc3QpLCAwLCBcdTAwMjZvZmZzZXQwKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MzcwPXNzaXplX3Qgc2tiX3NwbGljZV9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczODktXG5uZXQvY29yZS9za2J1ZmYuYzo3MzkwOlx0XHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFx1MDAyNnBwYWdlcywgbWF4c2l6ZSwgbnIsIDAsIFx1MDAyNm9mZik7XG5uZXQvY29yZS9za2J1ZmYuYy03MzkxLVx0XHRpZiAobGVuIFx1MDAzYz0gMCkge1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTQyMT1zdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTUwMC1cbm5ldC90bHMvdGxzX2RldmljZS5jOjUwMTpcdFx0XHRyYyA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoaXRlciwgXHUwMDI2cGFnZXMsXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01MDItXHRcdFx0XHRcdFx0ICAgIGNvcHksIDEsIDAsIFx1MDAyNm9mZik7XG4tLVxubmV0L3Rscy90bHNfc3cuYz0xMDE1PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfc3BsaWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTAyNC1cbm5ldC90bHMvdGxzX3N3LmM6MTAyNTpcdFx0cGFydCA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBcdTAwMjZwYWdlcyxcbm5ldC90bHMvdGxzX3N3LmMtMTAyNi1cdFx0XHRcdFx0ICAgICAgdHJ5X3RvX2NvcHksIDEsIDAsIFx1MDAyNm9mZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzA5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlJlZmxlY3Rpbmcgb24gS2VybmVsIFN5bWJvbCBFeHBvcnQgYW5kIFN0YXRpYyBGdW5jdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlc2UgSS9PIHZlY3RvciBpdGVyYXRpb24gZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIGBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzYCBpcyB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbjsgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGdldHMgZXhwb3J0ZWQgYW5kIHVzZWQgZXh0ZXJuYWxseS4gTWFrZXMgc2Vuc2UuIEl0IGFjdHMgYXMgdGhlIHdyYXBwZXIgZm9yIHRoZSBsb3dlci1sZXZlbCwgc3RhdGljIGZ1bmN0aW9ucyB1bmRlcm5lYXRoLiBUaGVyZWZvcmUsIGFkZGluZyB0aGF0IHRvIHRoZSBmb2N1cyBzeW1ib2xzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGVudHJ5IHBvaW50LgoKTm93LCBJJiMzOTttIG5vdGluZyB0aGF0IGBleHRyYWN0X3hhcnJheV90b19zZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCBpdCAqaXMqIGNhbGxlZCBieSBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gU28gaXQmIzM5O3Mgc3RpbGwgcGxheWluZyBhIGNydWNpYWwgcm9sZSwganVzdCBub3QgYSBnbG9iYWxseSB2aXNpYmxlIG9uZS4gS2VlcCB0aGF0IGRlcGVuZGVuY3kgaW4gbWluZCBhcyBJIGJ1aWxkIG91dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0cmFjdF9pdGVyX3RvX3NnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2NyeXB0by9hZl9hbGcuYz05MDk9aW50IGFmX2FsZ19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXG4tLVxuY3J5cHRvL2FmX2FsZy5jLTEwMjYtXG5jcnlwdG8vYWZfYWxnLmM6MTAyNzpcdFx0XHRwbGVuID0gZXh0cmFjdF9pdGVyX3RvX3NnKFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgbGVuLCBcdTAwMjZzZ3RhYmxlLFxuY3J5cHRvL2FmX2FsZy5jLTEwMjgtXHRcdFx0XHRcdFx0ICBNQVhfU0dMX0VOVFMgLSBzZ2wtXHUwMDNlY3VyLCAwKTtcbi0tXG5jcnlwdG8vYWZfYWxnLmM9MTIxMT1pbnQgYWZfYWxnX2dldF9yc2dsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MsXG4tLVxuY3J5cHRvL2FmX2FsZy5jLTEyNDgtXHRcdHNnX2luaXRfdGFibGUocnNnbC1cdTAwM2VzZ2wuc2d0LnNnbCwgQUxHX01BWF9QQUdFUyk7XG5jcnlwdG8vYWZfYWxnLmM6MTI0OTpcdFx0ZXJyID0gZXh0cmFjdF9pdGVyX3RvX3NnKFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgc2VnbGVuLCBcdTAwMjZyc2dsLVx1MDAzZXNnbC5zZ3QsXG5jcnlwdG8vYWZfYWxnLmMtMTI1MC1cdFx0XHRcdFx0IEFMR19NQVhfUEFHRVMsIDApO1xuLS1cbmNyeXB0by9hbGdpZl9oYXNoLmM9NjM9c3RhdGljIGludCBoYXNoX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbmNyeXB0by9hbGdpZl9oYXNoLmMtMTE4LVxuY3J5cHRvL2FsZ2lmX2hhc2guYzoxMTk6XHRcdGVyciA9IGV4dHJhY3RfaXRlcl90b19zZyhcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIExPTkdfTUFYLFxuY3J5cHRvL2FsZ2lmX2hhc2guYy0xMjAtXHRcdFx0XHRcdCBcdTAwMjZjdHgtXHUwMDNlc2dsLnNndCwgbnBhZ2VzLCAwKTtcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz00Mzg3PXN0YXRpYyB2b2lkICpzbWIyX2dldF9hZWFkX3JlcShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgc3RydWN0IHNtYl9ycXN0ICpycXN0LFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTQ0MjEtXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzo0NDIyOlx0XHRyYyA9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBjb3VudCwgXHUwMDI2c2d0YWJsZSxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTQ0MjMtXHRcdFx0XHRcdG51bV9zZ3MgLSBzZ3RhYmxlLm5lbnRzLCAwKTtcbi0tXG5mcy9zbWIvc21iZGlyZWN0L21yLmM9MjQxPXN0YXRpYyBpbnQgc21iZGlyZWN0X2l0ZXJfdG9fc2d0KHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9zbWIvc21iZGlyZWN0L21yLmMtMjQ4LVxuZnMvc21iL3NtYmRpcmVjdC9tci5jOjI0OTpcdHJldCA9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBpb3ZfaXRlcl9jb3VudChpdGVyKSwgc2d0LCBtYXhfc2csIDApO1xuZnMvc21iL3NtYmRpcmVjdC9tci5jLTI1MC1cdFdBUk5fT04ocmV0IFx1MDAzYyAwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTQxNz1zdHJ1Y3Qgc2dfdGFibGU7XG5pbmNsdWRlL2xpbnV4L3Vpby5oOjQxODpzc2l6ZV90IGV4dHJhY3RfaXRlcl90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBsZW4sXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTQxOS1cdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndGFibGUsIHVuc2lnbmVkIGludCBzZ19tYXgsXG4tLVxubGliL3NjYXR0ZXJsaXN0LmM9MTMzNT1zdGF0aWMgc3NpemVfdCBleHRyYWN0X3hhcnJheV90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxubGliL3NjYXR0ZXJsaXN0LmMtMTM4MS0vKipcbmxpYi9zY2F0dGVybGlzdC5jOjEzODI6ICogZXh0cmFjdF9pdGVyX3RvX3NnIC0gRXh0cmFjdCBwYWdlcyBmcm9tIGFuIGl0ZXJhdG9yIGFuZCBhZGQgdG8gYW4gc2dsaXN0XG5saWIvc2NhdHRlcmxpc3QuYy0xMzgzLSAqIEBpdGVyOiBUaGUgaXRlcmF0b3IgdG8gZXh0cmFjdCBmcm9tXG4tLVxubGliL3NjYXR0ZXJsaXN0LmMtMTQwOC0gKi9cbmxpYi9zY2F0dGVybGlzdC5jOjE0MDk6c3NpemVfdCBleHRyYWN0X2l0ZXJfdG9fc2coc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4c2l6ZSxcbmxpYi9zY2F0dGVybGlzdC5jLTE0MTAtXHRcdFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ3RhYmxlLCB1bnNpZ25lZCBpbnQgc2dfbWF4LFxuLS1cbmxpYi9zY2F0dGVybGlzdC5jLTE0MzgtfVxubGliL3NjYXR0ZXJsaXN0LmM6MTQzOTpFWFBPUlRfU1lNQk9MX0dQTChleHRyYWN0X2l0ZXJfdG9fc2cpO1xuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTEwNzY9aW92X2t1bml0X2l0ZXJfdG9fc2dfY2hlY2soc3RydWN0IGt1bml0ICp0ZXN0LCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTA4OC1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjEwODk6XHRpID0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIGJ1ZnNpemUsIGRhdGEtXHUwMDNlc2d0LCAwLCAwKTtcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTEwOTAtXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgaSwgMCk7XG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTA5Mi1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjEwOTM6XHRpID0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIGJ1ZnNpemUgLSB0YWlsLCBkYXRhLVx1MDAzZXNndCwgMSwgMCk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMDk0LVx0S1VOSVRfQVNTRVJUX0xFKHRlc3QsIGksIGJ1ZnNpemUgLSB0YWlsKTtcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMDk2LVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6MTA5NzpcdGkgJiM0Mzs9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBidWZzaXplIC0gdGFpbCAtIGksIGRhdGEtXHUwMDNlc2d0LFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTA5OC1cdFx0XHRcdGRhdGEtXHUwMDNlbnBhZ2VzIC0gZGF0YS1cdTAwM2VzZ3QtXHUwMDNlbmVudHMsIDApO1xuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTExMDEtXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzoxMTAyOlx0aSAmIzQzOz0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIHRhaWwsIGRhdGEtXHUwMDNlc2d0LFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTEwMy1cdFx0XHRcdGRhdGEtXHUwMDNlbnBhZ2VzIC0gZGF0YS1cdTAwM2VzZ3QtXHUwMDNlbmVudHMsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA2NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBleHRyYWN0X2l0ZXJfdG9fc2dgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBleHRyYWN0X2l0ZXJfdG9fc2dgIGlzIHRoZSBrZXkgZnVuY3Rpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgdGhlIG9uZSB0aGF0JiMzOTtzIGV4cG9ydGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aC4gTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBtYWtpbmcgYXNzb2NpYXRpb25zLi4uIGxldCYjMzk7cyBzZWUsIHdoYXQgZnVuY3Rpb25zIGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoPwoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgbmV0ZnNfd2JfYmVnaW5gLCBgbmV0ZnNfd2JfZW5kYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGxpa2UgbmF0dXJhbCBjb21wYW5pb25zLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IGRhdGEgZ2V0cyBwcmVwcGVkLCB3cml0dGVuLCBhbmQgZmluYWxpemVkIHdpdGhpbiB0aGUgbmV0ZnMgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlc2UgZnVuY3Rpb25zIHV0aWxpemUgb3IgaW50ZXJhY3Qgd2l0aCBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AsIGFzIHRoYXTigJlzIGEgbGlrZWx5IHBhcmFsbGVsIGZ1bmN0aW9uIGFuZCBJIG5lZWQgdG8gZW5zdXJlIEkgYW0gdXAgdG8gZGF0ZSB3aXRoIGJlc3QgcHJhY3RpY2UuCgpGaXJzdCBvZmYsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBUaGF0JiMzOTtsbCBpbmZvcm0gaG93IHdpZGVseSBhdmFpbGFibGUgaXQgaXMgYW5kIHdoZXRoZXIgaXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHVuYnVmZmVyZWQgd3JpdGVzLiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9MzcxPWZpbGVzeXN0ZW0gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIFZGUyByZWFkL3dyaXRlX2l0ZXIgbWV0aG9kczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzYtXHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6Mzc3Olx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzgtXG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zOTc9VGhlcmUgYXJlIHRocmVlIGZ1bmN0aW9ucyBmb3Igd3JpdGVzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwMi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6NDAzOlx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00MDQtXHRcdFx0XHRcdFx0ICAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cCk7XG4tLVxuZnMvOXAvdmZzX2ZpbGUuYz00MDE9djlmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvOXAvdmZzX2ZpbGUuYy00MDgtXHRpZiAoZmlkLVx1MDAzZW1vZGUgXHUwMDI2IChQOUxfRElSRUNUIHwgUDlMX05PV1JJVEVDQUNIRSkpXG5mcy85cC92ZnNfZmlsZS5jOjQwOTpcdFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbmZzLzlwL3Zmc19maWxlLmMtNDEwLVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NTAxPXNzaXplX3QgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTE0LVx0ICAgIHRlc3RfYml0KE5FVEZTX0lDVFhfVU5CVUZGRVJFRCwgXHUwMDI2aWN0eC1cdTAwM2VmbGFncykpXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjUxNTpcdFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTE2LVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE0LSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTU6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTYte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTY0LSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6NjU6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9jb2xsZWN0KHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjYtXHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy05My0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjk0OnN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTk1LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTAtXHRcdGlmICghcmV0cnkpIHtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1MTpcdFx0XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTUyLVx0XHRcdHN1YnJlcSA9IE5VTEw7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk3LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTk4Olx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk5LVx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwMi1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwMzpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwNC17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA2LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjA3Olx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZSh3cmVxKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwOC1cdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMTU6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE2LVx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODQtXHRpZiAoYXN5bmMpIHtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI4NTpcdFx0SU5JVF9XT1JLKFx1MDAyNndyZXEtXHUwMDNld29yaywgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODYtXHRcdHdyZXEtXHUwMDNlaW9jYiA9IGlvY2I7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg5LVx0fSBlbHNlIHtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI5MDpcdFx0cmV0ID0gbmV0ZnNfdW5idWZmZXJlZF93cml0ZSh3cmVxKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI5MS1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwNy19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwOS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMC0vKipcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEyLSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjItICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjM6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjQte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4MS1cdFx0XHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODI6XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzgzLW91dDpcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODYtfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg3OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0yOTk3PXNzaXplX3QgY2lmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwNC1cdGlmIChpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpIHtcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjMwMDU6XHRcdHdyaXR0ZW4gPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDA2LVx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgQ0lGU19DQUNIRV9SRUFEKGNpbm9kZSkpIHtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0zMzYxPXN0YXRpYyBpbnQgY2lmc19zd2FwX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzNjctXHRlbHNlXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzY4Olx0XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGl0ZXIsIE5VTEwpO1xuZnMvc21iL2NsaWVudC9maWxlLmMtMzM2OS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQwMT1zc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQwMi1cdFx0XHRcdFx0IHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQwMzpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDA0OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MDUtXHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGb2N1c2luZyB0aGUgTGVuczogYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCoqCgpSaWdodCwgc28gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAgYW5kIGl0cyBsb2NrZWQgY291bnRlcnBhcnQsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYXJlIGFscmVhZHkgZXhwb3J0ZWQuIEdpdmVuIHRoYXQsIGl0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgdG8gYWRkIHRoZW0gc3BlY2lmaWNhbGx5IHRvIHRoZSBmb2N1cyBzeW1ib2xzLiBXZSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGJpdHMsIGFuZCBpbmNsdWRpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmaW5pdGVseSBzaGFycGVuIG91ciB2aWV3IG9mIHRoZSB1bmJ1ZmZlcmVkIHdyaXRlIHBhdGguIFRoaXMgc2VlbXMgbGlrZSBhIGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgY2hlY2sgYG5ldGZzX3dyaXRlcGFnZXNgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIHdyaXRlIG9wZXJhdGlvbnMsIGFuZCB3ZSBjYW4gY29tcGFyZSBhbmQgY29udHJhc3QgdGhlIGRpZmZlcmVudCBhcHByb2FjaGVzLiBXZSBjYW4gdXNlIGl0IGFzIGEgcmVmZXJlbmNlLCBvciBhcyBhIGNvbnRyYXN0aW5nIHZpZXcgb2YgdGhlIHdyaXRlIHByb2Nlc3MsIGluIG9yZGVyIHRvIGVuaGFuY2Ugb3VyIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD00NjA9Zm9yIGl0IHRvIGludGVydmVuZSBhdCB2YXJpb3VzIHRpbWVzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ2My1cdGludCBuZXRmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmb2xpbyAqKTtcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6NDY0Olx0aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ2NS1cdFx0XHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbi0tXG5mcy85cC92ZnNfYWRkci5jPTE2MD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHY5ZnNfYWRkcl9vcGVyYXRpb25zID0ge1xuLS1cbmZzLzlwL3Zmc19hZGRyLmMtMTY2LVx0LmRpcmVjdF9JT1x0XHQ9IG5vb3BfZGlyZWN0X0lPLFxuZnMvOXAvdmZzX2FkZHIuYzoxNjc6XHQud3JpdGVwYWdlc1x0XHQ9IG5ldGZzX3dyaXRlcGFnZXMsXG5mcy85cC92ZnNfYWRkci5jLTE2OC1cdC5taWdyYXRlX2ZvbGlvXHRcdD0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxuLS1cbmZzL2Fmcy93cml0ZS5jPTIyOD1pbnQgYWZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2Fmcy93cml0ZS5jLTI0MS1cbmZzL2Fmcy93cml0ZS5jOjI0MjpcdHJldCA9IG5ldGZzX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTtcbmZzL2Fmcy93cml0ZS5jLTI0My1cdHVwX3JlYWQoXHUwMDI2dm5vZGUtXHUwMDNldmFsaWRhdGVfbG9jayk7XG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01MjI9c3RhdGljIHZvaWQgbmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNTQ1LSAqL1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo1NDY6aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU0Ny1cdFx0ICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYxMS19XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYxMjpFWFBPUlRfU1lNQk9MKG5ldGZzX3dyaXRlcGFnZXMpO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTMtXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9MzM3ND1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNpZnNfYWRkcl9vcHMgPSB7XG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMzM3Ni1cdC5yZWFkYWhlYWRcdD0gbmV0ZnNfcmVhZGFoZWFkLFxuZnMvc21iL2NsaWVudC9maWxlLmM6MzM3NzpcdC53cml0ZXBhZ2VzXHQ9IG5ldGZzX3dyaXRlcGFnZXMsXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMzc4LVx0LmRpcnR5X2ZvbGlvXHQ9IG5ldGZzX2RpcnR5X2ZvbGlvLFxuLS1cbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMzOTc9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzX3NtYWxsYnVmID0ge1xuZnMvc21iL2NsaWVudC9maWxlLmMtMzM5OC1cdC5yZWFkX2ZvbGlvXHQ9IG5ldGZzX3JlYWRfZm9saW8sXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzk5Olx0LndyaXRlcGFnZXNcdD0gbmV0ZnNfd3JpdGVwYWdlcyxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTM0MDAtXHQuZGlydHlfZm9saW9cdD0gbmV0ZnNfZGlydHlfZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQxOT1pbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICosIHN0cnVjdCBmaWxlICosXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQyMS1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqLCB2b2lkICoqZnNkYXRhKTtcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0MjI6aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDIzLVx0XHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBrZXJuZWwgY29kZSBzbmlwcGV0OgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBGaWxlc3lzdGVtIFdyaXRlYmFjayoqCgpPa2F5LCBgbmV0ZnNfd3JpdGVwYWdlc2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgd3JpdGUgb3BlcmF0aW9ucyB3aXRoaW4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0uIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGViYWNrIHByb2Nlc3MuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIFRoYXQgc2hvdWxkIGJlIHRoZSBhdG9taWMgdW5pdCwgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIHdpdGhpbiB0aGUgb3ZlcmFsbCB3cml0ZWJhY2sgc2NoZW1lLiBVbmRlcnN0YW5kaW5nIGhvdyBhICpzaW5nbGUqIHBhZ2UgZ2V0cyBmbHVzaGVkIGlzIGtleSB0byBncmFzcGluZyB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBsaWtlbHkgb2ZmZXJzIGluc2lnaHRzIGludG8gaG93IGluZGl2aWR1YWwgZGF0YSBibG9ja3MgYXJlIHRyYW5zbWl0dGVkIG92ZXIgdGhlIG5ldHdvcmsgYW5kIGFueSBhc3NvY2lhdGVkIGJ1ZmZlcmluZyBvciBjYWNoaW5nIHN0cmF0ZWdpZXMgdXNlZCBhdCB0aGUgY2xpZW50IG9yIHNlcnZlci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBmdW5jdGlvbiBnaXZlcyB1cyBhIGJldHRlciBwaWN0dXJlIG9mIGhvdyBgbmV0ZnNfd3JpdGVwYWdlc2Agb3BlcmF0ZXMgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD00MzY9YSBzaW5nbGUgUlBDIChhbmQgbm90IHdyaXR0ZW4gYmFjaykgYW5kIGlzIG1haW50YWluZWQgYXMgYSBtb25vbGl0aGljIGJsb2Jcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ0MC1cdHZvaWQgbmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSk7XG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjQ0MTpcdGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00NDItXHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbi0tXG5mcy9hZnMvZGlyLmM9MjIwMT1zdGF0aWMgaW50IGFmc19kaXJfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9hZnMvZGlyLmMtMjIyMi1cdFx0XHRcdCAgICAgaV9zaXplX3JlYWQoXHUwMDI2ZHZub2RlLVx1MDAzZW5ldGZzLmlub2RlKSk7XG5mcy9hZnMvZGlyLmM6MjIyMzpcdFx0cmV0ID0gbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShtYXBwaW5nLCB3YmMsIFx1MDAyNml0ZXIpO1xuZnMvYWZzL2Rpci5jLTIyMjQtXHRcdGlmIChyZXQgPT0gMSlcbi0tXG5mcy9hZnMvc3ltbGluay5jPTIzND1pbnQgYWZzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9hZnMvc3ltbGluay5jLTI1My1cdFx0XHRcdCAgICAgaV9zaXplX3JlYWQoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUpKTtcbmZzL2Fmcy9zeW1saW5rLmM6MjU0Olx0XHRyZXQgPSBuZXRmc193cml0ZWJhY2tfc2luZ2xlKG1hcHBpbmcsIHdiYywgXHUwMDI2aXRlcik7XG5mcy9hZnMvc3ltbGluay5jLTI1NS1cdH1cbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTcxND1zdGF0aWMgaW50IG5ldGZzX3dyaXRlX2ZvbGlvX3NpbmdsZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgyNC0vKipcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6ODI1OiAqIG5ldGZzX3dyaXRlYmFja19zaW5nbGUgLSBXcml0ZSBiYWNrIGEgbW9ub2xpdGhpYyBwYXlsb2FkXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgyNi0gKiBAbWFwcGluZzogVGhlIG1hcHBpbmcgdG8gd3JpdGUgZnJvbVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODM1LSAqL1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MzY6aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgzNy1cdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTkwMC19XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjkwMTpFWFBPUlRfU1lNQk9MKG5ldGZzX3dyaXRlYmFja19zaW5nbGUpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaD00MTA9c3NpemVfdCBuZXRmc19yZWFkX3NpbmdsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0MTE6aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDEyLVx0XHRcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0RlMgV3JpdGViYWNrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgaW52b2x2ZWQgaW4gc29tZSBjb3JlIG5ldHdvcmsgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgY2FjaGVmaWxlc19idXJ5X29iamVjdGAuIElmIHRoYXQmIzM5O3MgcmVsZXZhbnQsIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24gdG8gaW52ZXN0aWdhdGUgaG93IGl0IHdvcmtzIHdpdGggd3JpdGViYWNrLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGluc3RydW1lbnRhbC4gVGhpcyBpcyBiZWNhdXNlIEkgdW5kZXJzdGFuZCBob3cgbmV0d29yayBjYWNoaW5nIHdvcmtzLiBBbmQgdGh1cywgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGlzIGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhY2hlZmlsZXNfYnVyeV9vYmplY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYz0zOTI9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19pbnZhbGlkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSlcbi0tXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTQzNS1cdFx0XHRpZiAoIUlTX0VSUihvYmopKVxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYzo0MzY6XHRcdFx0XHRjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHZvbHVtZS1cdTAwM2VjYWNoZSwgb2JqZWN0LFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy00MzctXHRcdFx0XHRcdFx0ICAgICAgIGZhbiwgb2JqLFxuLS1cbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaD0yNzY9ZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oLTI3Ny1cdFx0XHRcdFx0ICAgc3RydWN0IGZpbGUgKmZpbGUpO1xuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oOjI3ODpleHRlcm4gaW50IGNhY2hlZmlsZXNfYnVyeV9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oLTI3OS1cdFx0XHRcdCAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTIzMT1zdGF0aWMgaW50IGNhY2hlZmlsZXNfdW5saW5rKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMjY4LSAqL1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjI2OTppbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMjcwLVx0XHRcdCAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz01ODg9Ym9vbCBjYWNoZWZpbGVzX2xvb2tfdXBfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy02MTctXHRcdGVsc2VcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo2MTg6XHRcdFx0cmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdCh2b2x1bWUtXHUwMDNlY2FjaGUsIG9iamVjdCxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy02MTktXHRcdFx0XHRcdFx0ICAgICBmYW4sIGRlLFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz03NTg9aW50IGNhY2hlZmlsZXNfY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIHN0cnVjdCBkZW50cnkgKmRpcixcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNzg1LVx0LypcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo3ODY6XHQgKiBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KCkgZXhwZWN0cyAyIHJlZmVyZW5jZXMgdG8gJiMzOTt2aWN0aW0mIzM5OyxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy03ODctXHQgKiBhbmQgZHJvcHMgb25lLlxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy03ODktXHRkZ2V0KHZpY3RpbSk7XG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NzkwOlx0cmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdChjYWNoZSwgTlVMTCwgZGlyLCB2aWN0aW0sXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNzkxLVx0XHRcdFx0ICAgICBGU0NBQ0hFX09CSkVDVF9XQVNfQ1VMTEVEKTtcbi0tXG5mcy9jYWNoZWZpbGVzL3ZvbHVtZS5jPTE4PXZvaWQgY2FjaGVmaWxlc19hY3F1aXJlX3ZvbHVtZShzdHJ1Y3QgZnNjYWNoZV92b2x1bWUgKnZjb29raWUpXG4tLVxuZnMvY2FjaGVmaWxlcy92b2x1bWUuYy02My1cdFx0XHRpZiAoIUlTX0VSUih2ZGVudHJ5KSlcbmZzL2NhY2hlZmlsZXMvdm9sdW1lLmM6NjQ6XHRcdFx0XHRjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBOVUxMLCBjYWNoZS1cdTAwM2VzdG9yZSxcbmZzL2NhY2hlZmlsZXMvdm9sdW1lLmMtNjUtXHRcdFx0XHRcdFx0ICAgICAgIHZkZW50cnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzc4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDYWNoZWZpbGVzIEludGVybmFsIE1lY2hhbmljcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgaW50ZXJuYWwgdG8gY2FjaGVmaWxlcywgZ290IGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgdGhlIHRlbXBvcmFyeSBmaWxlcyBhcmUgY3JlYXRlZC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYSBmaWxlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgd2hlcmUgdGhlIGdyb3VuZHdvcmsgaXMgbGFpZCBmb3IgdGhlIGNhY2hlIGZpbGUuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gdGhlcmUsIGxpa2VseSByZWxhdGVkIHRvIHNlY3VyZSBmaWxlIG5hbWluZywgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhY2hlZmlsZXNfY3JlYXRlX3RtcGZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYz0zOTI9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19pbnZhbGlkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSlcbi0tXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTQwNy1cbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6NDA4Olx0bmV3X2ZpbGUgPSBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKG9iamVjdCk7XG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTQwOS1cdGlmIChJU19FUlIobmV3X2ZpbGUpKVxuLS1cbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaD0yOTU9ZXh0ZXJuIGludCBjYWNoZWZpbGVzX2NoZWNrX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjk2LVx0XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGlyLCBjaGFyICpmaWxlbmFtZSk7XG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmg6Mjk3OmV4dGVybiBzdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCk7XG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjk4LWV4dGVybiBib29sIGNhY2hlZmlsZXNfY29tbWl0X3RtcGZpbGUoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz0zODc9aW50IGNhY2hlZmlsZXNfZGVsZXRlX29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDA5LSAqL1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjQxMDpzdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdClcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy00MTEte1xuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz00ODg9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19jcmVhdGVfZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdClcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDk3LVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjQ5ODpcdGZpbGUgPSBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKG9iamVjdCk7XG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDk5LVx0aWYgKElTX0VSUihmaWxlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENhY2hlZmlsZXMgV3JpdGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYGNhY2hlZmlsZXNgIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdyaXRlIHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB3cml0aW5nIGRhdGEuIEZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmbG93OiBgbmV0ZnNfd2JfYmVnaW5gLCBgbmV0ZnNfd2JfZW5kYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGFuZCBpdHMgbG9ja2VkIGNvdW50ZXJwYXJ0IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYWxvbmcgd2l0aCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgYGlvdl9pdGVyX2V4dHJhY3RfcGFnZXNgIGFuZCBgZXh0cmFjdF9pdGVyX3RvX3NnYCBzaW5jZSB0aGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQgZHVyaW5nIHRoZSBJL08gb3BlcmF0aW9ucywgZXNwZWNpYWxseSB3aXRoIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzLiBCZWZvcmUgbW92aW5nIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBuZXRmc193cml0ZV9iZWdpbmAgZnVuY3Rpb24gaXMgcHJvcGVybHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgd2l0aGluIHRoZSBjb250ZXh0IEkmIzM5O20gd29ya2luZyBpbiwgYmVjYXVzZSBpdCBjb3VsZCBwcm92aWRlIGFkZGl0aW9uYWwgY29udGV4dCwgb3IgYmUgYSBtaXNzaW5nIGxpbmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3dyaXRlX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9NDc2PVRoZXJlIGlzIGFsc28gYSBkZXByZWNhdGVkIGZ1bmN0aW9uIGZvciBmaWxlc3lzdGVtcyB0aGF0IHN0aWxsIHVzZSB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ3OC1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6NDc5Olx0aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00ODAtXHRcdFx0ICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBsZW4sXG4tLVxuZnMvY2VwaC9hZGRyLmM9MTg3OD1zdGF0aWMgaW50IGNlcGhfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmZzL2NlcGgvYWRkci5jLTE4ODctXG5mcy9jZXBoL2FkZHIuYzoxODg4Olx0ciA9IG5ldGZzX3dyaXRlX2JlZ2luKFx1MDAyNmNpLVx1MDAzZW5ldGZzLCBmaWxlLCBpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcywgbGVuLCBmb2xpb3AsIE5VTEwpO1xuZnMvY2VwaC9hZGRyLmMtMTg4OS1cdGlmIChyIFx1MDAzYyAwKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz01NjE9c3RhdGljIGJvb2wgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU5NS0vKipcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1OTY6ICogbmV0ZnNfd3JpdGVfYmVnaW4gLSBIZWxwZXIgdG8gcHJlcGFyZSBmb3Igd3JpdGluZyBbREVQUkVDQVRFRF1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01OTctICogQGN0eDogVGhlIG5ldGZzIGNvbnRleHRcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI3LSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjYyODppbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI5LVx0XHQgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNC19XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzE1OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVfYmVnaW4pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNi1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9NDE4PWludCBuZXRmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmb2xpbyAqKTtcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0MTk6aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQyMC1cdFx0ICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBZGRpbmcgYG5ldGZzX3dyaXRlX2JlZ2luYCB0byBGb2N1cyBTeW1ib2xzIGFuZCBWZXJpZnlpbmcgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIEV4cG9ydCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBgbmV0ZnNfd3JpdGVfYmVnaW5gICppcyogZXhwb3J0ZWQuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuIEkgbmVlZCB0byBnZXQgdGhhdCBhZGRlZCB0byB0aGUgZm9jdXMgc3ltYm9scyByaWdodCBhd2F5LiBJdCYjMzk7cyBjbGVhcmx5IGEga2V5IHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHksIHNvIEkgbmVlZCB0byB0cmFjayBpdCBjbG9zZWx5LgoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgbmV4dCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGFuYWx5c2lzLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBJIGNhbiB3b3JrIHdpdGggaXQsIG9yIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgSSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IGl0JiMzOTtzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19wZXJmb3JtX3dyaXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9Mzk3PVRoZXJlIGFyZSB0aHJlZSBmdW5jdGlvbnMgZm9yIHdyaXRlczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00MDAtXHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDo0MDE6XHRzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwMi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NTYxPXN0YXRpYyBib29sIG5ldGZzX3NraXBfZm9saW9fcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02MjQtICpcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo2MjU6ICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBhbmQgbmV0ZnNfcGVyZm9ybV93cml0ZSgpXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI2LSAqIHVzZWQgaW5zdGVhZC5cbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTM3PXZvaWQgbmV0ZnNfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTczLS8qKlxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo3NDogKiBuZXRmc19wZXJmb3JtX3dyaXRlIC0gQ29weSBkYXRhIGludG8gdGhlIHBhZ2VjYWNoZS5cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNzUtICogQGlvY2I6IFRoZSBvcGVyYXRpb24gcGFyYW1ldGVyc1xuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtODYtICovXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjg3OnNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtODgtXHRcdFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00NDItfVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0NDM6RVhQT1JUX1NZTUJPTChuZXRmc19wZXJmb3JtX3dyaXRlKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQ0LVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY4PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODMtXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ4NDpcdHJldHVybiBuZXRmc19wZXJmb3JtX3dyaXRlKGlvY2IsIGZyb20sIG5ldGZzX2dyb3VwKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDg1LX1cbi0tXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYz0xOT1zdGF0aWMgdm9pZCBuZXRmc19wZ3ByaXYyX2NvcHlfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKmNyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMjctXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYzoyODpcdC8qIG5ldGZzX3BlcmZvcm1fd3JpdGUoKSBtYXkgc2hpZnQgaV9zaXplIGFyb3VuZCB0aGUgcGFnZSBvciBmcm9tIG91dFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMjktXHQgKiBvZiB0aGUgcGFnZSB0byBiZXlvbmQgaXQsIGJ1dCBjYW5ub3QgbW92ZSBpX3NpemUgaW50byBvciB0aHJvdWdoIHRoZVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MzIwPXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0zMzktXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjM0MDpcdC8qIG5ldGZzX3BlcmZvcm1fd3JpdGUoKSBtYXkgc2hpZnQgaV9zaXplIGFyb3VuZCB0aGUgcGFnZSBvciBmcm9tIG91dFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0zNDEtXHQgKiBvZiB0aGUgcGFnZSB0byBiZXlvbmQgaXQsIGJ1dCBjYW5ub3QgbW92ZSBpX3NpemUgaW50byBvciB0aHJvdWdoIHRoZVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaD0yMDI9ZW51bSBuZXRmc19pb19vcmlnaW4ge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaC0yMTEtXHRORVRGU19XUklURUJBQ0tfU0lOR0xFLFx0XHQvKiBUaGlzIG1vbm9saXRoaWMgd3JpdGUgd2FzIHRyaWdnZXJlZCBieSB3cml0ZXBhZ2VzICovXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6MjEyOlx0TkVURlNfV1JJVEVUSFJPVUdILFx0XHQvKiBUaGlzIHdyaXRlIHdhcyBtYWRlIGJ5IG5ldGZzX3BlcmZvcm1fd3JpdGUoKSAqL1xuaW5jbHVkZS9saW51eC9uZXRmcy5oLTIxMy1cdE5FVEZTX1VOQlVGRkVSRURfV1JJVEUsXHRcdC8qIFRoaXMgaXMgYW4gdW5idWZmZXJlZCB3cml0ZSAqL1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaD0zOTY9c3NpemVfdCBuZXRmc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTM5OC0vKiBIaWdoLWxldmVsIHdyaXRlIEFQSSAqL1xuaW5jbHVkZS9saW51eC9uZXRmcy5oOjM5OTpzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDAwLVx0XHRcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3OTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBZGRpbmcgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIHRvIHRoZSBGb2N1cyBMaXN0KioKCkFscmlnaHQsIHNvIGBuZXRmc19wZXJmb3JtX3dyaXRlYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGNvbmZpcm1zIGl0JiMzOTtzIGEgbGVnaXRpbWF0ZSBlbnRyeSBwb2ludCBmb3Igd3JpdGUgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGBuZXRmc2AgY29udGV4dC4gVGhlcmVmb3JlLCBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIGFkZCB0aGlzIHRvIHRoZSBmb2N1cyBzeW1ib2xzLiBUaGlzIHdpbGwgYWxsb3cgZm9yIG1vcmUgdGFyZ2V0ZWQgYW5kIGVmZmljaWVudCBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMsIGFuZCB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSBjYWxsIHBhdGggcHJvcGVybHkuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIGxpc3QgaW1tZWRpYXRlbHkuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGBuZXRmc193cml0ZV9jb2xsZWN0aW9uYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB3cml0ZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIG9uIGEgbW9yZSBncmFudWxhciBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfd3JpdGVfY29sbGVjdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9pbnRlcm5hbC5oPTE5Mz1pbnQgbmV0ZnNfZm9saW9fd3JpdHRlbl9iYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuZnMvbmV0ZnMvaW50ZXJuYWwuaDoxOTQ6Ym9vbCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKTtcbmZzL25ldGZzL2ludGVybmFsLmg6MTk1OnZvaWQgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmZzL25ldGZzL2ludGVybmFsLmgtMTk2LVxuLS1cbmZzL25ldGZzL21pc2MuYz01MTM9c3NpemVfdCBuZXRmc193YWl0X2Zvcl93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcbmZzL25ldGZzL21pc2MuYy01MTQte1xuZnMvbmV0ZnMvbWlzYy5jOjUxNTpcdHJldHVybiBuZXRmc193YWl0X2Zvcl9pbl9wcm9ncmVzcyhycmVxLCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKTtcbmZzL25ldGZzL21pc2MuYy01MTYtfVxuLS1cbmZzL25ldGZzL21pc2MuYz01NjI9dm9pZCBuZXRmc193YWl0X2Zvcl9wYXVzZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXG5mcy9uZXRmcy9taXNjLmMtNTYzLXtcbmZzL25ldGZzL21pc2MuYzo1NjQ6XHRyZXR1cm4gbmV0ZnNfd2FpdF9mb3JfcGF1c2UocnJlcSwgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbik7XG5mcy9uZXRmcy9taXNjLmMtNTY1LX1cbi0tXG5mcy9uZXRmcy9vYmplY3RzLmM9MTg9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2FsbG9jX3JlcXVlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvb2JqZWN0cy5jLTY2LVx0fSBlbHNlIHtcbmZzL25ldGZzL29iamVjdHMuYzo2NzpcdFx0SU5JVF9XT1JLKFx1MDAyNnJyZXEtXHUwMDNld29yaywgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbl93b3JrZXIpO1xuZnMvbmV0ZnMvb2JqZWN0cy5jLTY4LVx0fVxuLS1cbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYz0yMDA9c3RhdGljIHZvaWQgbmV0ZnNfY29sbGVjdF93cml0ZV9yZXN1bHRzKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuLS1cbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy0zNjAtICovXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6MzYxOmJvb2wgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy0zNjIte1xuLS1cbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy00MzUtXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6NDM2OnZvaWQgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQzNy17XG4tLVxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQ0MS1cdGlmIChuZXRmc19jaGVja19ycmVxX2luX3Byb2dyZXNzKHJyZXEpKSB7XG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6NDQyOlx0XHRpZiAobmV0ZnNfd3JpdGVfY29sbGVjdGlvbihycmVxKSlcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy00NDMtXHRcdFx0LyogRHJvcCB0aGUgcmVmIGZyb20gdGhlIElOX1BST0dSRVNTIGZsYWcuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzA5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6CgoqKkRpZ2dpbmcgaW50byB0aGUgTmV0ZnMgV3JpdGUtVGhyb3VnaCBNZWNoYW5pc20qKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldGZzIGlzc3VlLiBJdCYjMzk7cyBvYnZpb3VzbHkgaW50ZXJuYWwgdG8gdGhlIGBuZXRmc2AgY29kZSBiYXNlIOKAkyBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcHJvYmxlbSBsaWtlbHkgY2VudGVycyBhcm91bmQgdGhlIHdyaXRlLXRocm91Z2ggZnVuY3Rpb25hbGl0eS4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaGAgYW5kIGBuZXRmc19lbmRfd3JpdGV0aHJvdWdoYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IGFuZCBleGl0IHBvaW50cyBvZiB0aGUgd3JpdGV0aHJvdWdoIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLCB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nIHdoZW4gdGhleSYjMzk7cmUgY2FsbGVkLCBhbmQgd2hhdCBzdGF0ZSB0aGV5IGFyZSBjaGFuZ2luZy4gSSBuZWVkIHRvIHNlZSBpZiB0aGUgd3JpdGUtdGhyb3VnaCBmbG93IGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgYXQgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyBjYWxsZWQgZnJvbSB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX2JlZ2luX3dyaXRldGhyb3VnaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTExOC1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6MTE5Olx0XHR3cmVxID0gbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKGlvY2IsIGl0ZXItXHUwMDNlY291bnQpO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0xMjAtXHRcdGlmIChJU19FUlIod3JlcSkpIHtcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIxMj1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNC1cdFx0XHQgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBsZW4sIGJvb2wgdG9fZW9mKTtcbmZzL25ldGZzL2ludGVybmFsLmg6MjE1OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKTtcbmZzL25ldGZzL2ludGVybmFsLmgtMjE2LWludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MTI9RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYxNi0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjE3OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM3MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldEZTIFdyaXRlYmFjayBNZWNoYW5pc20qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O20gZGVlcCBpbnNpZGUgdGhlIE5ldEZTIHdyaXRlYmFjayBwcm9jZXNzIHJpZ2h0IG5vdy4gTXkgZm9jdXMgaXMgZW50aXJlbHkgb24gdGhlc2UgaW50ZXJuYWwgc3ltYm9sczogYG5ldGZzX3diX2JlZ2luYCwgYG5ldGZzX3diX2VuZGAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGBuZXRmc193cml0ZXBhZ2VzYCwgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLCBgbmV0ZnNfd3JpdGVfYmVnaW5gLCBgbmV0ZnNfcGVyZm9ybV93cml0ZWAsIGBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzYCwgYW5kIGBleHRyYWN0X2l0ZXJfdG9fc2dgLiBUaGVzZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGluIGhvdyBOZXRGUyBoYW5kbGVzIHdyaXRpbmcgZGF0YS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pY3Mgb2YgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBuZXRmc193Yl9iZWdpbmAgYW5kIGBuZXRmc193Yl9lbmRgIGFyZSBleHBvcnRlZC4gVGhpcyBjb25maXJtcyB0aGUgd3JpdGViYWNrIHByb2Nlc3MgaXMgYmVpbmcgY2FsbGVkIGNvcnJlY3RseS4gVGhhdCB3aWxsIHByb3ZpZGUgYSBnb29kIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgaXMgaGFuZGxlZCBhbmQgZmx1c2hlZCB0byBzdG9yYWdlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHdyaXRlYmFjayBwYXRoIGFuZCBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfd2JfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL3N5bWxpbmsuYz0yMzQ9aW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvYWZzL3N5bWxpbmsuYy0yNTctXHRpZiAocmV0ID09IDApIHtcbmZzL2Fmcy9zeW1saW5rLmM6MjU4Olx0XHRuZXRmc193Yl9iZWdpbihcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgZmFsc2UpO1xuZnMvYWZzL3N5bWxpbmsuYy0yNTktXHRcdG5ldGZzX2ZyZWVfZm9saW9xX2J1ZmZlcih2bm9kZS1cdTAwM2VkaXJlY3RvcnkpO1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYz0yMTA9RVhQT1JUX1NZTUJPTChuZXRmc19lbmRfaW9fZGlyZWN0KTtcbi0tXG5mcy9uZXRmcy9sb2NraW5nLmMtMjE0LSAqL1xuZnMvbmV0ZnMvbG9ja2luZy5jOjIxNTpzdGF0aWMgYm9vbCBuZXRmc193Yl9iZWdpbl93YWl0KHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eClcbmZzL25ldGZzL2xvY2tpbmcuYy0yMTYte1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yNDUtLyoqXG5mcy9uZXRmcy9sb2NraW5nLmM6MjQ2OiAqIG5ldGZzX3diX2JlZ2luIC0gQmVnaW4gd3JpdGViYWNrLCB3YWl0aW5nIGlmIG5lZWQgYmVcbmZzL25ldGZzL2xvY2tpbmcuYy0yNDctICogQGljdHg6IFRoZSBpbm9kZSB0byBnZXQgd3JpdGViYWNrIGFjY2VzcyBvblxuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yNTgtICovXG5mcy9uZXRmcy9sb2NraW5nLmM6MjU5OmJvb2wgbmV0ZnNfd2JfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICppY3R4LCBib29sIG5vd2FpdClcbmZzL25ldGZzL2xvY2tpbmcuYy0yNjAte1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yNjctXHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja193YWl0KTtcbmZzL25ldGZzL2xvY2tpbmcuYzoyNjg6XHRyZXR1cm4gbmV0ZnNfd2JfYmVnaW5fd2FpdChpY3R4KTtcbmZzL25ldGZzL2xvY2tpbmcuYy0yNjktfVxuZnMvbmV0ZnMvbG9ja2luZy5jOjI3MDpFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTtcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzEtXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDY9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NTMtXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjU1NDpcdGlmICghbmV0ZnNfd2JfYmVnaW4oaWN0eCwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpKVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NTUtXHRcdHJldHVybiAwO1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjE3PXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjIxLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MjI6XHRuZXRmc193Yl9iZWdpbihpY3R4LCBmYWxzZSk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyMy1cbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTgzNj1pbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg0OC1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6ODQ5Olx0aWYgKCFuZXRmc193Yl9iZWdpbihpY3R4LCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpIHtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODUwLVx0XHQvKiBUaGUgVkZTIHdpbGwgaGF2ZSB1bmRpcnRpZWQgdGhlIGlub2RlLiAqL1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaD00NjU9dm9pZCBuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIoc3RydWN0IGZvbGlvX3F1ZXVlICpmcSk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQ2Ny0vKiBXcml0ZWJhY2sgZXhjbHVzaW9uIEFQSS4gKi9cbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0Njg6Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTtcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00Njktdm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4cG9ydGVkIFN5bWJvbHMqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb25maXJtZWQ6IHRoZXNlIGZ1bmN0aW9ucyAqYXJlKiBleHBvcnRlZC4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQgYmFzZWQgb24gdGhlIGJyb2FkZXIgc3lzdGVtIGRlc2lnbi4KCk5vdywgbGV0IG1lIHNvbGlkaWZ5IHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0JiMzOTtzOgoKKiAgIGBuZXRmc193Yl9iZWdpbmAKKiAgIGBuZXRmc193Yl9lbmRgCiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYAoqICAgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgCiogICBgbmV0ZnNfd3JpdGVwYWdlc2AKKiAgIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYAoqICAgYG5ldGZzX3dyaXRlX2JlZ2luYAoqICAgYG5ldGZzX3BlcmZvcm1fd3JpdGVgCiogICBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AKKiAgIGBleHRyYWN0X2l0ZXJfdG9fc2dgCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMgb2YgYG5ldGZzX3diX2VuZGAuIFJlZHVuZGFuY3kgaXMga2V5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNyaXRpY2FsIHN5c3RlbSBjYWxscy4gVGhhdCYjMzk7cyBhIGtleSBwb2ludCB0aGF0IHdpbGwgYWx3YXlzIGJlIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgd2hlbiBJIGV2YWx1YXRlIHN5c3RlbSBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3diX2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvc3ltbGluay5jPTIzND1pbnQgYWZzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9hZnMvc3ltbGluay5jLTI2MS1cdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5X3NpemUgPSAwO1xuZnMvYWZzL3N5bWxpbmsuYzoyNjI6XHRcdG5ldGZzX3diX2VuZChcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcyk7XG5mcy9hZnMvc3ltbGluay5jLTI2My1cdH0gZWxzZSBpZiAocmV0ID09IDEpIHtcbi0tXG5mcy9uZXRmcy9sb2NraW5nLmM9MjcwPUVYUE9SVF9TWU1CT0wobmV0ZnNfd2JfYmVnaW4pO1xuZnMvbmV0ZnMvbG9ja2luZy5jLTI3MS1cbmZzL25ldGZzL2xvY2tpbmcuYzoyNzI6LyogbmV0ZnNfd2JfZW5kIC0gRW5kIHdyaXRlYmFja1xuZnMvbmV0ZnMvbG9ja2luZy5jLTI3My0gKiBAaWN0eDogVGhlIGlub2RlIHdlIGhhdmUgd3JpdGViYWNrIGFjY2VzcyB0b1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yNzYtICovXG5mcy9uZXRmcy9sb2NraW5nLmM6Mjc3OnZvaWQgbmV0ZnNfd2JfZW5kKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eClcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzgte1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yOTktfVxuZnMvbmV0ZnMvbG9ja2luZy5jOjMwMDpFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2VuZCk7XG4tLVxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jPTM2MT1ib29sIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb24oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4tLVxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQxNC1cdGNhc2UgTkVURlNfV1JJVEVUSFJPVUdIOlxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jOjQxNTpcdFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQxNi1cdFx0YnJlYWs7XG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDY9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MDctb3V0OlxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MDg6XHRuZXRmc193Yl9lbmQoaWN0eCk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYwOS1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgZXJyb3IpO1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjE3PXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjI2LVx0aWYgKElTX0VSUih3cmVxKSkge1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2Mjc6XHRcdG5ldGZzX3diX2VuZChpY3R4KTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjI4LVx0XHRyZXR1cm4gd3JlcTtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTgzNj1pbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg5Ni1jb3VsZG50X3N0YXJ0OlxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4OTc6XHRuZXRmc193Yl9lbmQoaWN0eCk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg5OC1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9NDY4PWJvb2wgbmV0ZnNfd2JfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICppY3R4LCBib29sIG5vd2FpdCk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDY5OnZvaWQgbmV0ZnNfd2JfZW5kKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDcwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk2OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBmb3IgRXhwb3J0ZWQgU3ltYm9scyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBjaGVjayBjb25maXJtcyB0aGF0JiMzOTtzIGV4cG9ydGVkLiBOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBuZXh0IGl0ZW0gb24gbXkgbGlzdC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2VgIGlzIGFsc28gZXhwb3J0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsga25vd2luZyB0aGUgZXhwb3J0IHN0YXR1cyBpcyBmdW5kYW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCBhbmQgd2hldGhlciBJIGNhbiByZWx5IG9uIGEgcGFydGljdWxhciBmdW5jdGlvbiBpbiB0aGUgY29udGV4dCBJJiMzOTttIGludmVzdGlnYXRpbmcuIEdvdHRhIGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NhY2hlZmlsZXMvbmFtZWkuYz00Nz1zdGF0aWMgdm9pZCBfX2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTMtXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NTQ6c3RhdGljIHZvaWQgY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTU1LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz02Nj12b2lkIGNhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNzEtXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NzI6XHRjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBpbm9kZSk7XG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNzMtXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTIyMD12b2lkIGNhY2hlZmlsZXNfcHV0X2RpcmVjdG9yeShzdHJ1Y3QgZGVudHJ5ICpkaXIpXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTIyMi1cdGlmIChkaXIpIHtcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzoyMjM6XHRcdGNhY2hlZmlsZXNfZG9fdW5tYXJrX2lub2RlX2luX3VzZShOVUxMLCBkX2lub2RlKGRpcikpO1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTIyNC1cdFx0ZHB1dChkaXIpO1xuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz0yNjk9aW50IGNhY2hlZmlsZXNfYnVyeV9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy0zNzctXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6Mzc4Olx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShyZXApKTtcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy0zNzktXHRlbmRfcmVuYW1pbmcoXHUwMDI2cmQpO1xuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz00MTA9c3RydWN0IGZpbGUgKmNhY2hlZmlsZXNfY3JlYXRlX3RtcGZpbGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ3Ny1lcnJfdW51c2U6XG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NDc4Olx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZmlsZV9pbm9kZShmaWxlKSk7XG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDc5LVx0ZnB1dChmaWxlKTtcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM9NTEzPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfb3Blbl9maWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01NzktZXJyb3I6XG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NTgwOlx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShkZW50cnkpKTtcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01ODEtXHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBTdGFnbmFudCBTaXR1YXRpb24qKgoKQWxyaWdodCwgdGhpcyBmZWVscy4uLiBzdHVjay4gVGhpbmdzIGFyZW4mIzM5O3QgbW92aW5nLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGlzIHN0YXRpYywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhIHBvdGVudGlhbCBjdWxwcml0IGluIHRoZSBjYWNoaW5nIGxheWVyLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBjb250cmlidXRpbmcgdG8gdGhpcyBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMgb2YgYGNhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZWAuIElzIGl0IGV2ZW4gdmlzaWJsZSB0byB0aGUga2VybmVsIG1vZHVsZT8gVGhhdCBjb3VsZCBlYXNpbHkgYmUgdGhlIHNvdXJjZSBvZiBteSBwcm9ibGVtLCBpZiBJIGNhbiYjMzk7dCBhY2Nlc3MgaXQuIFRoaXMgY291bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jPTMyOD1zdGF0aWMgdm9pZCBjYWNoZWZpbGVzX2NsZWFuX3VwX29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTM0Ni1cbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6MzQ3Olx0Y2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgb2JqZWN0LVx1MDAzZWZpbGUpO1xuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0zNDgtXG4tLVxuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oPTI3MT1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlZmlsZXNfb2JqZWN0X2phcjtcbi0tXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjc1LSAqL1xuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oOjI3NjpleHRlcm4gdm9pZCBjYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjc3LVx0XHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTMzPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfbWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ2LSAqL1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjQ3OnN0YXRpYyB2b2lkIF9fY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ4LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTU0PXN0YXRpYyB2b2lkIGNhY2hlZmlsZXNfZG9fdW5tYXJrX2lub2RlX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTctXHRpbm9kZV9sb2NrKGlub2RlKTtcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo1ODpcdF9fY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgaW5vZGUpO1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTU5LVx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNjUtICovXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NjY6dm9pZCBjYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNjctXHRcdFx0XHQgICAgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTUxMz1zdGF0aWMgYm9vbCBjYWNoZWZpbGVzX29wZW5fZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTcwLVx0ZnNjYWNoZV9jb29raWVfbG9va3VwX25lZ2F0aXZlKG9iamVjdC1cdTAwM2Vjb29raWUpO1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjU3MTpcdGNhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShvYmplY3QsIGZpbGUpO1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTU3Mi1cdGZwdXQoZmlsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjYwCgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ2FjaGVmaWxlcyBJbnRlZ3JhdGlvbiBpbiBOZXRGUyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgY2FjaGVmaWxlcyBpbnRlcmFjdHMgd2l0aCBuZXRmcyBpbnRlcm5hbGx5LiBUaGUgY29yZSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgdGhlc2Ugd3JpdGUtcmVsYXRlZCBmdW5jdGlvbnM6IGBuZXRmc193Yl9iZWdpbmAsIGBuZXRmc193Yl9lbmRgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLCBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AsIGFuZCBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIGNhY2hlZmlsZXMgaW50ZWdyYXRpb24uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGlmIGBuZXRmc193cml0ZV9iZWdpbmAgaXMgYWN0dWFsbHkgc3RpbGwgaW4gdXNlLCBldmVuIHRob3VnaCBpdCYjMzk7cyBtYXJrZWQgYXMgZGVwcmVjYXRlZC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSDigJMgaXQmIzM5O3MgZ29pbmcgb24gdGhlIGxpc3QuCgpOb3csIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gc2VlaW5nIGBORVRGU19TVVBQT1JUYCwgYEZTQ0FDSEVgLCBgQ0FDSEVGSUxFU2AsIGFuZCBgQUZTX0ZTYCBhcyB0aGUga2V5IHBsYXllcnMgaGVyZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4gYENPTkZJR19GU0NBQ0hFX1NUQVRTYCBpc24mIzM5O3QgbmVlZGVkLiBXaGF0IGFib3V0IGBDT05GSUdfQ0FDSEVGSUxFU19PTkRFTUFORGA/IE5haCwgZG9lc24mIzM5O3Qgc2VlbSBkaXJlY3RseSByZWxldmFudCB0byB0aGlzIHNwZWNpZmljIGludGVncmF0aW9uIHBvaW50LgoKQWxyaWdodCwgYSBxdWljayBzYW5pdHkgY2hlY2s6IGNhbiBJIGdldCBhd2F5IHdpdGgganVzdCBlbmFibGluZyBgTkVURlNfU1VQUE9SVGA/IFllcywgbG9va3MgbGlrZSB0aGF0JiMzOTtzIHN1ZmZpY2llbnQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBFeGNlbGxlbnQuCgpOb3csIGxldCYjMzk7cyBkb2N1bWVudCB0aGVzZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZTX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7RlNDQUNIRSYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGZzX3diX2JlZ2luJiMzNDssCiAgICAmIzM0O25ldGZzX3diX2VuZCYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVfYmVnaW4mIzM0OywKICAgICYjMzQ7bmV0ZnNfcGVyZm9ybV93cml0ZSYjMzQ7LAogICAgJiMzNDtpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2V4dHJhY3RfaXRlcl90b19zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZzIGxvZ2ljLCBpbmNsdWRpbmcgd3JpdGViYWNrIGxvY2tpbmcsIHVuYnVmZmVyZWQgd3JpdGVzLCBhbmQgaXRlcmF0b3IgZXh0cmFjdGlvbiBmdW5jdGlvbnMuIEl0IGFsc28gYWZmZWN0cyBjYWNoZWZpbGVzIGFuZCBBRlMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGU19TVVBQT1JUJiMzNDssCiAgICAmIzM0O0ZTQ0FDSEUmIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc193Yl9iZWdpbiYjMzQ7LAogICAgJiMzNDtuZXRmc193Yl9lbmQmIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZWJhY2tfc2luZ2xlJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlX2JlZ2luJiMzNDssCiAgICAmIzM0O25ldGZzX3BlcmZvcm1fd3JpdGUmIzM0OywKICAgICYjMzQ7aW92X2l0ZXJfZXh0cmFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtleHRyYWN0X2l0ZXJfdG9fc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXRmcyBsb2dpYywgaW5jbHVkaW5nIHdyaXRlYmFjayBsb2NraW5nLCB1bmJ1ZmZlcmVkIHdyaXRlcywgYW5kIGl0ZXJhdG9yIGV4dHJhY3Rpb24gZnVuY3Rpb25zLiBJdCBhbHNvIGFmZmVjdHMgY2FjaGVmaWxlcyBhbmQgQUZTLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjIyOjU5LjcwMjIzNzI5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTE4NjQyNjEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGU19TVVBQT1JUXCIsXG4gICAgXCJGU0NBQ0hFXCIsXG4gICAgXCJDQUNIRUZJTEVTXCIsXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc193Yl9iZWdpblwiLFxuICAgIFwibmV0ZnNfd2JfZW5kXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRcIixcbiAgICBcIm5ldGZzX3dyaXRlcGFnZXNcIixcbiAgICBcIm5ldGZzX3dyaXRlYmFja19zaW5nbGVcIixcbiAgICBcIm5ldGZzX3dyaXRlX2JlZ2luXCIsXG4gICAgXCJuZXRmc19wZXJmb3JtX3dyaXRlXCIsXG4gICAgXCJpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzXCIsXG4gICAgXCJleHRyYWN0X2l0ZXJfdG9fc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZzIGxvZ2ljLCBpbmNsdWRpbmcgd3JpdGViYWNrIGxvY2tpbmcsIHVuYnVmZmVyZWQgd3JpdGVzLCBhbmQgaXRlcmF0b3IgZXh0cmFjdGlvbiBmdW5jdGlvbnMuIEl0IGFsc28gYWZmZWN0cyBjYWNoZWZpbGVzIGFuZCBBRlMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMjo1OS43MDIyNDQ3NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDcxNDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkwNGI5NGQ0MGUwODVlYTBiYzBmYjJiZTYxNmE1NjE5NjQwNDgyODdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMTQ6MjI6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N5bWxpbmsuYyBiL2ZzL2Fmcy9zeW1saW5rLmNcXG5pbmRleCBlZDU4NjgzNjlmMzcyZC4uMTZiNDgyM2NiN2I3ZTcgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3N5bWxpbmsuY1xcbisrKyBiL2ZzL2Fmcy9zeW1saW5rLmNcXG5AQCAtMjU1LDExICsyNTUsMTEgQEAgaW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChyZXQgPT0gMCkge1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMud2JfbG9jayk7XFxuK1xcdFxcdG5ldGZzX3diX2JlZ2luKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMsIGZhbHNlKTtcXG4gXFx0XFx0bmV0ZnNfZnJlZV9mb2xpb3FfYnVmZmVyKHZub2RlLVxcdTAwM2VkaXJlY3RvcnkpO1xcbiBcXHRcXHR2bm9kZS1cXHUwMDNlZGlyZWN0b3J5ID0gTlVMTDtcXG4gXFx0XFx0dm5vZGUtXFx1MDAzZWRpcmVjdG9yeV9zaXplID0gMDtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMud2JfbG9jayk7XFxuK1xcdFxcdG5ldGZzX3diX2VuZChcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzKTtcXG4gXFx0fSBlbHNlIGlmIChyZXQgPT0gMSkge1xcbiBcXHRcXHRyZXQgPSAwOyAvKiBTa2lwcGVkIHdyaXRlIGR1ZSB0byBsb2NrIGNvbmZsaWN0LiAqL1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuY1xcbmluZGV4IDI5MzdkYjY5MGI0MGI1Li5kNDMwOWRmYjU1ZGY0ZSAxMDA2NDRcXG4tLS0gYS9mcy9jYWNoZWZpbGVzL25hbWVpLmNcXG4rKysgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmNcXG5AQCAtMzc1LDcgKzM3NSw3IEBAIGludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJSZW5hbWUgZmFpbGVkIHdpdGggZXJyb3IgJWRcXFwiLCByZXQpO1xcbiBcXHR9XFxuIFxcbi1cXHRfX2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShvYmplY3QsIGRfaW5vZGUocmVwKSk7XFxuK1xcdGNhY2hlZmlsZXNfZG9fdW5tYXJrX2lub2RlX2luX3VzZShvYmplY3QsIGRfaW5vZGUocmVwKSk7XFxuIFxcdGVuZF9yZW5hbWluZyhcXHUwMDI2cmQpO1xcbiBcXHRfbGVhdmUoXFxcIiA9IDBcXFwiKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ2Nyw3ICs0NjcsNiBAQCBzdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdClcXG4gXFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0aWYgKHVubGlrZWx5KCFmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VyZWFkX2l0ZXIpIHx8XFxuIFxcdCAgICB1bmxpa2VseSghZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNld3JpdGVfaXRlcikpIHtcXG4tXFx0XFx0ZnB1dChmaWxlKTtcXG4gXFx0XFx0cHJfbm90aWNlKFxcXCJDYWNoZSBkb2VzIG5vdCBzdXBwb3J0IHJlYWRfaXRlciBhbmQgd3JpdGVfaXRlclxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gZXJyX3VudXNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xcbmluZGV4IDc2ZDBmNmEyOWFiYWIyLi4yNGE4YTU0MThlMzExOSAxMDA2NDRcXG4tLS0gYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcXG4rKysgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcXG5AQCAtNjU5LDcgKzY1OSw3IEBAIGludCBuZXRmc193cml0ZV9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCxcXG4gXFx0ICogd2l0aGluIHRoZSBjYWNoZSBncmFudWxlIGNvbnRhaW5pbmcgdGhlIEVPRiwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkXFxuIFxcdCAqIHRvIHByZWxvYWQgdGhlIGdyYW51bGUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIW5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoY3R4KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAoIW5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoY3R4KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKGZvbGlvLCBwb3MsIGxlbiwgZmFsc2UpKSB7XFxuIFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fcmhfd3JpdGVfenNraXApO1xcbiBcXHRcXHRnb3RvIGhhdmVfZm9saW9fbm9fd2FpdDtcXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcXG5pbmRleCA2YmRlMzMyMGJjZWM2Ni4uMmNkYjY4ZTZiMTZmZmYgMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuY1xcbisrKyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcXG5AQCAtMjc3LDcgKzI3Nyw3IEBAIHNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0ICogY2FjaGluZyBzZXJ2aWNlIHRlbXBvcmFyaWx5IGJlY2F1c2UgdGhlIGJhY2tpbmcgc3RvcmUgZ290XFxuIFxcdFxcdCAqIGN1bGxlZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChuZXRmc19pc19jYWNoZV9lbmFibGVkKGN0eCkpIHtcXG4rXFx0XFx0aWYgKG5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoY3R4KSkge1xcbiBcXHRcXHRcXHRpZiAoZmluZm8pIHtcXG4gXFx0XFx0XFx0XFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93aF93c3RyZWFtX2NvbmZsaWN0KTtcXG4gXFx0XFx0XFx0XFx0Z290byBmbHVzaF9jb250ZW50O1xcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXFxuaW5kZXggMjVmOGNlYjE1ZmFkNjQuLmMxNmZiYWQyODZhMTc3IDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXFxuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5AQCAtMTY2LDEzICsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3VicmVxLVxcdTAwM2VlcnJvciA9IC1FQUdBSU47XFxuIFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcXG4tXFx0XFx0aWYgKHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQgXFx1MDAzZSAwKVxcbitcXHRcXHRpZiAoc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbitcXHRcXHRcXHR3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCArPSBzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoc3RyZWFtLVxcdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgd3JlcS1cXHUwMDNlbmV0ZnNfb3BzLVxcdTAwM2VyZXRyeV9yZXF1ZXN0KVxcbiBcXHRcXHRcXHR3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcXG4gXFxuK1xcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTUywgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbkBAIC0xODYsMTcgKzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuIFxcbiBcXHRcXHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcXG4gXFxuLVxcdFxcdGlmIChzdHJlYW0tXFx1MDAzZXByZXBhcmVfd3JpdGUpIHtcXG4rXFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZSlcXG4gXFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XFxuLVxcdFxcdFxcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyIHNvdXJjZTtcXG4tXFxuLVxcdFxcdFxcdG5ldGZzX3Jlc2V0X2l0ZXIoc3VicmVxKTtcXG4tXFx0XFx0XFx0c291cmNlID0gc3VicmVxLVxcdTAwM2Vpb19pdGVyO1xcbi1cXHRcXHRcXHRuZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCBcXHUwMDI2c291cmNlKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRuZXRmc19zdGF0KFxcdTAwMjZuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7XFxuIFxcdH1cXG4gXFxuIFxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvaW50ZXJuYWwuaCBiL2ZzL25ldGZzL2ludGVybmFsLmhcXG5pbmRleCA2NDU5OTZlY2ZjODAzNi4uZDg4OWNhYTQwMWRjMjQgMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL25ldGZzL2ludGVybmFsLmhcXG5AQCAtMjM5LDYgKzIzOSwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZnNfaXNfY2FjaGVfZW5hYmxlZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eClcXG4gI2VuZGlmXFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBuZXRmc19pc19jYWNoZV9tYXliZV9lbmFibGVkKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4KVxcbit7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19GU0NBQ0hFKVxcbitcXHRzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IGN0eC1cXHUwMDNlY2FjaGU7XFxuK1xcbitcXHRyZXR1cm4gZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHR0ZXN0X2JpdChGU0NBQ0hFX0NPT0tJRV9JU19DQUNISU5HLCBcXHUwMDI2Y29va2llLVxcdTAwM2VmbGFncyk7XFxuKyNlbHNlXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIC8qXFxuICAqIEdldCBhIHJlZiBvbiBhIG5ldGZzIGdyb3VwIGF0dGFjaGVkIHRvIGEgZGlydHkgcGFnZSAoZS5nLiBhIGNlcGggc25hcCkuXFxuICAqL1xcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9sb2NraW5nLmMgYi9mcy9uZXRmcy9sb2NraW5nLmNcXG5pbmRleCAyMjQ5ZWNkMDlkMGE4ZC4uNGUzYmUyYjgxNTA0MDggMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvbG9ja2luZy5jXFxuKysrIGIvZnMvbmV0ZnMvbG9ja2luZy5jXFxuQEAgLTksNiArOSwxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbitzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpbms7XFx0XFx0LyogTGluayBpbiBpY3R4LVxcdTAwM2V3Yl9xdWV1ZSAqL1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcXHQqd2FpdGVyO1xcdC8qIFdhaXRlciB0YXNrOyBjbGVhcmVkIHdoZW4gbG9jayBncmFudGVkICovXFxuK307XFxuK1xcbiAvKlxcbiAgKiBpbm9kZV9kaW9fd2FpdF9pbnRlcnJ1cHRpYmxlIC0gd2FpdCBmb3Igb3V0c3RhbmRpbmcgRElPIHJlcXVlc3RzIHRvIGZpbmlzaFxcbiAgKiBAaW5vZGU6IGlub2RlIHRvIHdhaXQgZm9yXFxuQEAgLTIwMywzICsyMDgsOTMgQEAgdm9pZCBuZXRmc19lbmRfaW9fZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHVwX3JlYWQoXFx1MDAyNmlub2RlLVxcdTAwM2VpX3J3c2VtKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG5ldGZzX2VuZF9pb19kaXJlY3QpO1xcbitcXG4rLypcXG4rICogV2FpdCB0byBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gd3JpdGViYWNrLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgbmV0ZnNfd2JfYmVnaW5fd2FpdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGZzX3diX3dhaXRlciB3YWl0ZXIgPSB7fTtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50O1xcbitcXHRib29sIGdvdCA9IGZhbHNlO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soTkVURlNfSUNUWF9XQl9MT0NLLCBcXHUwMDI2aWN0eC1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdGdldF90YXNrX3N0cnVjdCh0c2spO1xcbitcXHRcXHR3YWl0ZXIud2FpdGVyID0gdHNrO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZ3YWl0ZXIubGluaywgXFx1MDAyNmljdHgtXFx1MDAzZXdiX3F1ZXVlKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Z290ID0gdHJ1ZTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aWN0eC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAoIWdvdCkge1xcbitcXHRcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcXG4rXFx0XFx0XFx0LyogUmVhZCB3YWl0ZXIgYmVmb3JlIGFjY2Vzc2luZyBpbm9kZSBzdGF0ZS4gKi9cXG4rXFx0XFx0XFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNndhaXRlci53YWl0ZXIpID09IE5VTEwpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRzY2hlZHVsZSgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIG5ldGZzX3diX2JlZ2luIC0gQmVnaW4gd3JpdGViYWNrLCB3YWl0aW5nIGlmIG5lZWQgYmVcXG4rICogQGljdHg6IFRoZSBpbm9kZSB0byBnZXQgd3JpdGViYWNrIGFjY2VzcyBvblxcbisgKiBAbm93YWl0OiBSZXR1cm4gZmFpbHVyZSBpbW1lZGlhdGVseSByYXRoZXIgdGhhbiB3YWl0aW5nIGlmIHRydWVcXG4rICpcXG4rICogQmVnaW4gd3JpdGViYWNrIHRvIGFuIGlub2RlLCB3YWl0aW5nIGZvciBleGNsdXNpdmUgYWNjZXNzIGlmIEBub3dhaXQgaXNcXG4rICogZmFsc2UuICBUaGlzIHByZXZlbnRzIGNvbGxlY3Rpb24gZnJvbSBiZWluZyBkb25lIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcXG4rICogdG8gdGhlIGlzc3VhbmNlIG9mIHdyaXRlIHN1YnJlcXVlc3RzLlxcbisgKlxcbisgKiBOb3RlIHRoYXQgd3JpdGViYWNrIG1heSBiZSBlbmRlZCBpbiBhIGRpZmZlcmVudCBwcm9jZXNzIChlLmcuIHRoZSBjb2xsZWN0aW9uXFxuKyAqIGZ1bmN0aW9uIG9uIGEgd29ya3F1ZXVlKSB0aGFuIHN0YXJ0ZWQgaXQuXFxuKyAqXFxuKyAqIFJldHVybjogVHJ1ZSBpZiBjYW4gcHJvY2VlZCwgZmFsc2UgaWYgZGVuaWVkLlxcbisgKi9cXG4rYm9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKE5FVEZTX0lDVFhfV0JfTE9DSywgXFx1MDAyNmljdHgtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChub3dhaXQpIHtcXG4rXFx0XFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3NraXApO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xcbitcXHRyZXR1cm4gbmV0ZnNfd2JfYmVnaW5fd2FpdChpY3R4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTtcXG4rXFxuKy8qIG5ldGZzX3diX2VuZCAtIEVuZCB3cml0ZWJhY2tcXG4rICogQGljdHg6IFRoZSBpbm9kZSB3ZSBoYXZlIHdyaXRlYmFjayBhY2Nlc3MgdG9cXG4rICpcXG4rICogRW5kIHdyaXRlYmFjayBhY2Nlc3Mgb24gYW4gaW5vZGUsIHdha2luZyB1cCB0aGUgbmV4dCB3cml0ZWJhY2sgcmVxdWVzdC5cXG4rICovXFxuK3ZvaWQgbmV0ZnNfd2JfZW5kKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyICp3YWl0ZXI7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xcbitcXG4rXFx0V0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChORVRGU19JQ1RYX1dCX0xPQ0ssIFxcdTAwMjZpY3R4LVxcdTAwM2VmbGFncykpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHdhaXRlciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2aWN0eC1cXHUwMDNld2JfcXVldWUsIHN0cnVjdCBuZXRmc193Yl93YWl0ZXIsIGxpbmspO1xcbitcXHRpZiAod2FpdGVyKSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZ3YWl0ZXItXFx1MDAzZWxpbmspO1xcbitcXHRcXHR0c2sgPSB3YWl0ZXItXFx1MDAzZXdhaXRlcjtcXG4rXFx0XFx0LyogV3JpdGUgaW5vZGUgc3RhdGUgYmVmb3JlIGNsZWFyaW5nIHdhaXRlci4gKi9cXG4rXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNndhaXRlci1cXHUwMDNld2FpdGVyLCBOVUxMKTtcXG4rXFx0XFx0d2FrZV91cF9wcm9jZXNzKHRzayk7XFxuK1xcdFxcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKE5FVEZTX0lDVFhfV0JfTE9DSywgXFx1MDAyNmljdHgtXFx1MDAzZWZsYWdzKTtcXG4rXFx0fVxcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmljdHgtXFx1MDAzZWxvY2spO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wobmV0ZnNfd2JfZW5kKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jIGIvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jXFxuaW5kZXggMjRmYzJiYjJmOGE0N2IuLjIxMGViOGYzOTU4ZDc3IDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuY1xcbisrKyBiL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuY1xcbkBAIC00MDgsNiArNDA4LDE2IEBAIGJvb2wgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG4gXFx0bmV0ZnNfd2FrZV9ycmVxX2ZsYWcod3JlcSwgTkVURlNfUlJFUV9JTl9QUk9HUkVTUywgbmV0ZnNfcnJlcV90cmFjZV93YWtlX2lwKTtcXG4gXFx0LyogQXMgd2UgY2xlYXJlZCBORVRGU19SUkVRX0lOX1BST0dSRVNTLCB3ZSBhY3F1aXJlZCBpdHMgcmVmLiAqL1xcbiBcXG4rXFx0c3dpdGNoICh3cmVxLVxcdTAwM2VvcmlnaW4pIHtcXG4rXFx0Y2FzZSBORVRGU19XUklURUJBQ0s6XFxuK1xcdGNhc2UgTkVURlNfV1JJVEVCQUNLX1NJTkdMRTpcXG4rXFx0Y2FzZSBORVRGU19XUklURVRIUk9VR0g6XFxuK1xcdFxcdG5ldGZzX3diX2VuZChpY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAod3JlcS1cXHUwMDNlaW9jYikge1xcbiBcXHRcXHRzaXplX3Qgd3JpdHRlbiA9IG1pbih3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCwgd3JlcS1cXHUwMDNlbGVuKTtcXG4gXFx0XFx0d3JlcS1cXHUwMDNlaW9jYi1cXHUwMDNla2lfcG9zICs9IHdyaXR0ZW47XFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXFxuaW5kZXggYzAzYzdjYzQ1ZTQ3MTYuLmYyNzYxYzk5Nzk1YTZiIDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcXG4rKysgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXFxuQEAgLTEwNiw3ICsxMDYsNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0X2VudGVyKFxcXCJSPSV4XFxcIiwgd3JlcS1cXHUwMDNlZGVidWdfaWQpO1xcbiBcXG4gXFx0aWN0eCA9IG5ldGZzX2lub2RlKHdyZXEtXFx1MDAzZWlub2RlKTtcXG4tXFx0aWYgKGlzX2NhY2hlYWJsZSBcXHUwMDI2XFx1MDAyNiBuZXRmc19pc19jYWNoZV9lbmFibGVkKGljdHgpKVxcbitcXHRpZiAoaXNfY2FjaGVhYmxlKVxcbiBcXHRcXHRmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbihcXHUwMDI2d3JlcS1cXHUwMDNlY2FjaGVfcmVzb3VyY2VzLCBuZXRmc19pX2Nvb2tpZShpY3R4KSk7XFxuIFxcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFxcdTAwMjZ3cmVxLVxcdTAwM2VidWZmZXIsIHdyZXEtXFx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG5vbWVtO1xcbkBAIC01NTEsMTQgKzU1MSw4IEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRpbnQgZXJyb3IgPSAwO1xcbiBcXG4tXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKSkge1xcbi1cXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7XFxuLVxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2JfbG9ja19za2lwKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4tXFx0fVxcbitcXHRpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LyogTmVlZCB0aGUgZmlyc3QgZm9saW8gdG8gYmUgYWJsZSB0byBzZXQgdXAgdGhlIG9wLiAqL1xcbiBcXHRmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgTlVMTCwgXFx1MDAyNmVycm9yKTtcXG5AQCAtNTg4LDEzICs1ODIsMTMgQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGVycm9yID0gbmV0ZnNfd3JpdGVfZm9saW8od3JlcSwgd2JjLCBmb2xpbyk7XFxuLVxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoZXJyb3IgPT0gLUVOT01FTSkge1xcbitcXHRcXHRcXHRmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uod2JjLCBmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fSB3aGlsZSAoKGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd2JjLCBmb2xpbywgXFx1MDAyNmVycm9yKSkpO1xcbiBcXG4gXFx0bmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHdyZXEpO1xcbi1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4gXFx0bmV0ZnNfd2FrZV9jb2xsZWN0b3Iod3JlcSk7XFxuIFxcbiBcXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9yZXR1cm4pO1xcbkBAIC02MDIsOSArNTk2LDE2IEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbiBjb3VsZG50X3N0YXJ0Olxcbi1cXHRuZXRmc19raWxsX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIHdiYywgZm9saW8pO1xcbitcXHRpZiAoZXJyb3IgPT0gLUVOT01FTSkge1xcbitcXHRcXHRmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uod2JjLCBmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdFxcdGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd2JjLCBmb2xpbywgXFx1MDAyNmVycm9yKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvICE9IE5VTEwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRuZXRmc19raWxsX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIHdiYywgZm9saW8pO1xcbitcXHR9XFxuIG91dDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4rXFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgZXJyb3IpO1xcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG5AQCAtNjE4LDE2ICs2MTksMTcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW5cXG4gXFx0c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHggPSBuZXRmc19pbm9kZShmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApKTtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmljdHgtXFx1MDAzZXdiX2xvY2spO1xcbitcXHRuZXRmc193Yl9iZWdpbihpY3R4LCBmYWxzZSk7XFxuIFxcbiBcXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcsIGlvY2ItXFx1MDAzZWtpX2ZpbHAsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGlvY2ItXFx1MDAzZWtpX3BvcywgTkVURlNfV1JJVEVUSFJPVUdIKTtcXG4gXFx0aWYgKElTX0VSUih3cmVxKSkge1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmljdHgtXFx1MDAzZXdiX2xvY2spO1xcbitcXHRcXHRuZXRmc193Yl9lbmQoaWN0eCk7XFxuIFxcdFxcdHJldHVybiB3cmVxO1xcbiBcXHR9XFxuIFxcbiBcXHR3cmVxLVxcdTAwM2Vpb19zdHJlYW1zWzBdLmF2YWlsID0gdHJ1ZTtcXG4rXFx0X19zZXRfYml0KE5FVEZTX1JSRVFfT0ZGTE9BRF9DT0xMRUNUSU9OLCBcXHUwMDI2d3JlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0cmFjZV9uZXRmc193cml0ZSh3cmVxLCBuZXRmc193cml0ZV90cmFjZV93cml0ZXRocm91Z2gpO1xcbiBcXHRyZXR1cm4gd3JlcTtcXG4gfVxcbkBAIC02ODUsNyArNjg3LDYgQEAgaW50IG5ldGZzX2FkdmFuY2Vfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NcXG4gc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmb2xpbyAqd3JpdGV0aHJvdWdoX2NhY2hlKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCA9IG5ldGZzX2lub2RlKHdyZXEtXFx1MDAzZWlub2RlKTtcXG4gXFx0c3NpemVfdCByZXQ7XFxuIFxcbiBcXHRfZW50ZXIoXFxcIlI9JXhcXFwiLCB3cmVxLVxcdTAwM2VkZWJ1Z19pZCk7XFxuQEAgLTY5OSw4ICs3MDAsNiBAQCBzc2l6ZV90IG5ldGZzX2VuZF93cml0ZXRocm91Z2goc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsIHN0cnVjdCB3cml0ZWJhY2tfY1xcbiBcXG4gXFx0bmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHdyZXEpO1xcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4tXFxuIFxcdGlmICh3cmVxLVxcdTAwM2Vpb2NiKVxcbiBcXHRcXHRyZXQgPSAtRUlPQ0JRVUVVRUQ7XFxuIFxcdGVsc2VcXG5AQCAtODQ3LDE1ICs4NDYsMTAgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWlvdl9pdGVyX2lzX2ZvbGlvcShpdGVyKSkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKSkge1xcbi1cXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7XFxuLVxcdFxcdFxcdC8qIFRoZSBWRlMgd2lsbCBoYXZlIHVuZGlydGllZCB0aGUgaW5vZGUuICovXFxuLVxcdFxcdFxcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFxcdTAwMjZpY3R4LVxcdTAwM2Vpbm9kZSk7XFxuLVxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2JfbG9ja19za2lwKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDE7XFxuLVxcdFxcdH1cXG4tXFx0XFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4rXFx0aWYgKCFuZXRmc193Yl9iZWdpbihpY3R4LCB3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpKSB7XFxuK1xcdFxcdC8qIFRoZSBWRlMgd2lsbCBoYXZlIHVuZGlydGllZCB0aGUgaW5vZGUuICovXFxuK1xcdFxcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFxcdTAwMjZpY3R4LVxcdTAwM2Vpbm9kZSk7XFxuK1xcdFxcdHJldHVybiAxO1xcbiBcXHR9XFxuIFxcbiBcXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShtYXBwaW5nLCBOVUxMLCAwLCBORVRGU19XUklURUJBQ0tfU0lOR0xFKTtcXG5AQCAtODkzLDcgKzg4Nyw2IEBAIGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRzbXBfd21iKCk7IC8qIFdyaXRlIGxpc3RzIGJlZm9yZSBBTExfUVVFVUVELiAqL1xcbiBcXHRzZXRfYml0KE5FVEZTX1JSRVFfQUxMX1FVRVVFRCwgXFx1MDAyNndyZXEtXFx1MDAzZWZsYWdzKTtcXG4gXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aWN0eC1cXHUwMDNld2JfbG9jayk7XFxuIFxcdG5ldGZzX3dha2VfY29sbGVjdG9yKHdyZXEpO1xcbiBcXG4gXFx0bmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfcmV0dXJuKTtcXG5AQCAtOTAxLDcgKzg5NCw3IEBAIGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiBcXG4gY291bGRudF9zdGFydDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4rXFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZzLmhcXG5pbmRleCAyNDNjMGY3Mzc5Mzg4My4uMWJjMTIwZDYxYzViZWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmcy5oXFxuQEAgLTYxLDE0ICs2MSwxNiBAQCBzdHJ1Y3QgbmV0ZnNfaW5vZGUge1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRlNDQUNIRSlcXG4gXFx0c3RydWN0IGZzY2FjaGVfY29va2llXFx0KmNhY2hlO1xcbiAjZW5kaWZcXG4tXFx0c3RydWN0IG11dGV4XFx0XFx0d2JfbG9jaztcXHQvKiBXcml0ZWJhY2sgc2VyaWFsaXNhdGlvbiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0d2JfcXVldWU7XFx0LyogUXVldWUgb2YgcHJvY2Vzc2VzIHdhbnRpbmcgdG8gZG8gd3JpdGViYWNrICovXFxuIFxcdGxvZmZfdFxcdFxcdFxcdF9yZW1vdGVfaV9zaXplO1xcdC8qIFNpemUgb2YgdGhlIHJlbW90ZSBmaWxlICovXFxuIFxcdGxvZmZfdFxcdFxcdFxcdF96ZXJvX3BvaW50O1xcdC8qIFNpemUgYWZ0ZXIgd2hpY2ggd2UgYXNzdW1lIHRoZXJlJ3Mgbm8gZGF0YVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgKiBvbiB0aGUgc2VydmVyICovXFxuK1xcdHNwaW5sb2NrX3RcXHRcXHRsb2NrO1xcdFxcdC8qIExvY2sgY292ZXJpbmcgd2JfcXVldWUgKi9cXG4gXFx0YXRvbWljX3RcXHRcXHRpb19jb3VudDtcXHQvKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgcmVxcyAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuICNkZWZpbmUgTkVURlNfSUNUWF9PRElSRUNUXFx0MFxcdFxcdC8qIFRoZSBmaWxlIGhhcyBESU8gaW4gcHJvZ3Jlc3MgKi9cXG4gI2RlZmluZSBORVRGU19JQ1RYX1VOQlVGRkVSRURcXHQxXFx0XFx0LyogSS9PIHNob3VsZCBub3QgdXNlIHRoZSBwYWdlY2FjaGUgKi9cXG4rI2RlZmluZSBORVRGU19JQ1RYX1dCX0xPQ0tcXHQyXFx0XFx0LyogV3JpdGViYWNrIHNlcmlhbGlzYXRpb24gbG9jayAqL1xcbiAjZGVmaW5lIE5FVEZTX0lDVFhfTU9ESUZJRURfQVRUUiAzXFx0XFx0LyogSW5kaWNhdGUgY2hhbmdlIGluIG10aW1lL2N0aW1lICovXFxuICNkZWZpbmUgTkVURlNfSUNUWF9TSU5HTEVfTk9fVVBMT0FEIDRcXHRcXHQvKiBNb25vbGl0aGljIHBheWxvYWQsIGNhY2hlIGJ1dCBubyB1cGxvYWQgKi9cXG4gfTtcXG5AQCAtNDYyLDYgKzQ2NCwxMCBAQCBpbnQgbmV0ZnNfYWxsb2NfZm9saW9xX2J1ZmZlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0XFx0ICAgICAgc2l6ZV90ICpfY3VyX3NpemUsIHNzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcXG4gdm9pZCBuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIoc3RydWN0IGZvbGlvX3F1ZXVlICpmcSk7XFxuIFxcbisvKiBXcml0ZWJhY2sgZXhjbHVzaW9uIEFQSS4gKi9cXG4rYm9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTtcXG4rdm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcXG4rXFxuIC8qKlxcbiAgKiBuZXRmc19pbm9kZSAtIEdldCB0aGUgbmV0ZnMgaW5vZGUgY29udGV4dCBmcm9tIHRoZSBpbm9kZVxcbiAgKiBAaW5vZGU6IFRoZSBpbm9kZSB0byBxdWVyeVxcbkBAIC03NDMsNyArNzQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2lub2RlX2luaXQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19GU0NBQ0hFKVxcbiBcXHRjdHgtXFx1MDAzZWNhY2hlID0gTlVMTDtcXG4gI2VuZGlmXFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNmN0eC1cXHUwMDNld2JfbG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZXdiX3F1ZXVlKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcdC8qIC1cXHUwMDNlcmVsZWFzZXBhZ2UoKSBkcml2ZXMgemVyb19wb2ludCAqL1xcbiBcXHRpZiAodXNlX3plcm9fcG9pbnQpIHtcXG4gXFx0XFx0Y3R4LVxcdTAwM2VfemVyb19wb2ludCA9IGN0eC1cXHUwMDNlX3JlbW90ZV9pX3NpemU7XFxuQEAgLTc1Myw3ICs3NjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfaW5vZGVfaW5pdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCxcXG4gXFxuIC8qKlxcbiAgKiBuZXRmc19yZXNpemVfZmlsZSAtIE5vdGUgdGhhdCBhIGZpbGUgZ290IHJlc2l6ZWRcXG4tICogQGN0eDogVGhlIG5ldGZzIGlub2RlIGJlaW5nIHJlc2l6ZWRcXG4rICogQGljdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkXFxuICAqIEBuZXdfaV9zaXplOiBUaGUgbmV3IGZpbGUgc2l6ZVxcbiAgKiBAY2hhbmdlZF9vbl9zZXJ2ZXI6IFRoZSBjaGFuZ2Ugd2FzIGFwcGxpZWQgdG8gdGhlIHNlcnZlclxcbiAgKlxcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXFxuaW5kZXggMjQzNjYyYWYxYWY3M2YuLjVhNjQzNDcwOTcxNmUxIDEwMDY0NFxcbi0tLSBhL2xpYi9pb3ZfaXRlci5jXFxuKysrIGIvbGliL2lvdl9pdGVyLmNcXG5AQCAtMTU2OCw2ICsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnIgPSAwLCBvZmZzZXQ7XFxuIFxcdGxvZmZfdCBwb3MgPSBpLVxcdTAwM2V4YXJyYXlfc3RhcnQgKyBpLVxcdTAwM2Vpb3Zfb2Zmc2V0O1xcbitcXHRib29sIHdpbGxfYWxsb2MgPSAhKnBhZ2VzO1xcbiBcXHRYQV9TVEFURSh4YXMsIGktXFx1MDAzZXhhcnJheSwgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXG4gXFx0b2Zmc2V0ID0gcG9zIFxcdTAwMjYgflBBR0VfTUFTSztcXG5AQCAtMTU5NSw2ICsxNTk2LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcXG4gXFx0fVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuK1xcdGlmICghbnIpIHtcXG4rXFx0XFx0aWYgKHdpbGxfYWxsb2MpIHtcXG4rXFx0XFx0XFx0a3ZmcmVlKCpwYWdlcyk7XFxuK1xcdFxcdFxcdCpwYWdlcyA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdG1heHNpemUgPSBtaW5fdChzaXplX3QsIG5yICogUEFHRV9TSVpFIC0gb2Zmc2V0LCBtYXhzaXplKTtcXG4gXFx0aW92X2l0ZXJfYWR2YW5jZShpLCBtYXhzaXplKTtcXG4gXFx0cmV0dXJuIG1heHNpemU7XFxuQEAgLTE2MjgsNiArMTYzNyw4IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXFxuIFxcdGJpLmJpX2J2ZWNfZG9uZSA9IHNraXA7XFxuIFxcbiBcXHRtYXhwYWdlcyA9IHdhbnRfcGFnZXNfYXJyYXkocGFnZXMsIG1heHNpemUsIHNraXAsIG1heHBhZ2VzKTtcXG4rXFx0aWYgKCFtYXhwYWdlcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHR3aGlsZSAoYmkuYmlfc2l6ZSBcXHUwMDI2XFx1MDAyNiBiaS5iaV9pZHggXFx1MDAzYyBpLVxcdTAwM2Vucl9zZWdzKSB7XFxuIFxcdFxcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYnZlY19pdGVyX2J2ZWMoaS1cXHUwMDNlYnZlYywgYmkpO1xcbkBAIC0xNzQ1LDYgKzE3NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIFxcdHVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSAwO1xcbiBcXHRzaXplX3Qgb2Zmc2V0O1xcbitcXHRib29sIHdpbGxfYWxsb2MgPSAhKnBhZ2VzO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4gXFx0aWYgKGktXFx1MDAzZWRhdGFfc291cmNlID09IElURVJfREVTVClcXG5AQCAtMTc2MSw4ICsxNzczLDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXFxuIFxcdGlmICghbWF4cGFnZXMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRyZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGFkZHIsIG1heHBhZ2VzLCBndXBfZmxhZ3MsICpwYWdlcyk7XFxuLVxcdGlmICh1bmxpa2VseShyZXMgXFx1MDAzYz0gMCkpXFxuK1xcdGlmICh1bmxpa2VseShyZXMgXFx1MDAzYz0gMCkpIHtcXG4rXFx0XFx0aWYgKHdpbGxfYWxsb2MpIHtcXG4rXFx0XFx0XFx0a3ZmcmVlKCpwYWdlcyk7XFxuK1xcdFxcdFxcdCpwYWdlcyA9IE5VTEw7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4gXFx0bWF4c2l6ZSA9IG1pbl90KHNpemVfdCwgbWF4c2l6ZSwgcmVzICogUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4gXFx0aW92X2l0ZXJfYWR2YW5jZShpLCBtYXhzaXplKTtcXG4gXFx0cmV0dXJuIG1heHNpemU7XFxuZGlmZiAtLWdpdCBhL2xpYi9zY2F0dGVybGlzdC5jIGIvbGliL3NjYXR0ZXJsaXN0LmNcXG5pbmRleCBiN2ZlOTFlZjM1YjhjNi4uNmVhNDBkMmU2MjQ3NTUgMTAwNjQ0XFxuLS0tIGEvbGliL3NjYXR0ZXJsaXN0LmNcXG4rKysgYi9saWIvc2NhdHRlcmxpc3QuY1xcbkBAIC0xMzY2LDYgKzEzNjYsNyBAQCBzdGF0aWMgc3NpemVfdCBleHRyYWN0X3hhcnJheV90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdHNnX21heC0tO1xcbiBcXG4gXFx0XFx0bWF4c2l6ZSAtPSBsZW47XFxuK1xcdFxcdHN0YXJ0ICs9IGxlbjtcXG4gXFx0XFx0cmV0ICs9IGxlbjtcXG4gXFx0XFx0aWYgKG1heHNpemUgXFx1MDAzYz0gMCB8fCBzZ19tYXggPT0gMClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jIGIvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmNcXG5pbmRleCBmMDJmN2I3YWE3OTYwNS4uZTdlMTU0Zjk0ZjY2NWYgMTAwNjQ0XFxuLS0tIGEvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmNcXG4rKysgYi9saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuY1xcbkBAIC0yNzUsNyArMjc1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRzdHJ1Y3QgcGFnZSAqKnNwYWdlcywgKipicGFnZXM7XFxuIFxcdHU4ICpzY3JhdGNoLCAqYnVmZmVyO1xcbiBcXHRzaXplX3QgYnVmc2l6ZSwgbnBhZ2VzLCBzaXplLCBjb3BpZWQ7XFxuLVxcdGludCBpLCBiLCBwYXR0O1xcbitcXHRpbnQgaSwgcGF0dDtcXG4gXFxuIFxcdGJ1ZnNpemUgPSAweDEwMDAwMDtcXG4gXFx0bnBhZ2VzID0gYnVmc2l6ZSAvIFBBR0VfU0laRTtcXG5AQCAtMjk4LDEwICsyOTgsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2NvcHlfdG9fYnZlYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpdGVyLm5yX3NlZ3MsIDApO1xcbiBcXG4gXFx0LyogQnVpbGQgdGhlIGV4cGVjdGVkIGltYWdlIGluIHRoZSBzY3JhdGNoIGJ1ZmZlci4gKi9cXG4tXFx0YiA9IDA7XFxuIFxcdHBhdHQgPSAwO1xcbiBcXHRtZW1zZXQoc2NyYXRjaCwgMCwgYnVmc2l6ZSk7XFxuLVxcdGZvciAocHIgPSBidmVjX3Rlc3RfcmFuZ2VzOyBwci1cXHUwMDNlZnJvbSBcXHUwMDNlPSAwOyBwcisrLCBiKyspIHtcXG4rXFx0Zm9yIChwciA9IGJ2ZWNfdGVzdF9yYW5nZXM7IHByLVxcdTAwM2Vmcm9tIFxcdTAwM2U9IDA7IHByKyspIHtcXG4gXFx0XFx0dTggKnAgPSBzY3JhdGNoICsgcHItXFx1MDAzZXBhZ2UgKiBQQUdFX1NJWkU7XFxuIFxcbiBcXHRcXHRmb3IgKGkgPSBwci1cXHUwMDNlZnJvbTsgaSBcXHUwMDNjIHByLVxcdTAwM2V0bzsgaSsrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMzowMC40MDM4MDc3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4NDg0ODQ1NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZTX1NVUFBPUlRcIixcbiAgICBcIkZTQ0FDSEVcIixcbiAgICBcIkNBQ0hFRklMRVNcIixcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3diX2JlZ2luXCIsXG4gICAgXCJuZXRmc193Yl9lbmRcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiLFxuICAgIFwibmV0ZnNfd3JpdGVfYmVnaW5cIixcbiAgICBcIm5ldGZzX3BlcmZvcm1fd3JpdGVcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfcGFnZXNcIixcbiAgICBcImV4dHJhY3RfaXRlcl90b19zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZnMgbG9naWMsIGluY2x1ZGluZyB3cml0ZWJhY2sgbG9ja2luZywgdW5idWZmZXJlZCB3cml0ZXMsIGFuZCBpdGVyYXRvciBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gSXQgYWxzbyBhZmZlY3RzIGNhY2hlZmlsZXMgYW5kIEFGUy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTA0Yjk0ZDQwZTA4NWVhMGJjMGZiMmJlNjE2YTU2MTk2NDA0ODI4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDE0OjIyOjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N5bWxpbmsuYyBiL2ZzL2Fmcy9zeW1saW5rLmNcbmluZGV4IGVkNTg2ODM2OWYzNzJkLi4xNmI0ODIzY2I3YjdlNyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zeW1saW5rLmNcbisrKyBiL2ZzL2Fmcy9zeW1saW5rLmNcbkBAIC0yNTUsMTEgKzI1NSwxMSBAQCBpbnQgYWZzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdH1cbiBcbiBcdGlmIChyZXQgPT0gMCkge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLndiX2xvY2spO1xuK1x0XHRuZXRmc193Yl9iZWdpbihcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgZmFsc2UpO1xuIFx0XHRuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIodm5vZGUtXHUwMDNlZGlyZWN0b3J5KTtcbiBcdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5ID0gTlVMTDtcbiBcdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5X3NpemUgPSAwO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMud2JfbG9jayk7XG4rXHRcdG5ldGZzX3diX2VuZChcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcyk7XG4gXHR9IGVsc2UgaWYgKHJldCA9PSAxKSB7XG4gXHRcdHJldCA9IDA7IC8qIFNraXBwZWQgd3JpdGUgZHVlIHRvIGxvY2sgY29uZmxpY3QuICovXG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9uYW1laS5jIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jXG5pbmRleCAyOTM3ZGI2OTBiNDBiNS4uZDQzMDlkZmI1NWRmNGUgMTAwNjQ0XG4tLS0gYS9mcy9jYWNoZWZpbGVzL25hbWVpLmNcbisrKyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuY1xuQEAgLTM3NSw3ICszNzUsNyBAQCBpbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXG4gXHRcdFx0XHRcdCAgICBcIlJlbmFtZSBmYWlsZWQgd2l0aCBlcnJvciAlZFwiLCByZXQpO1xuIFx0fVxuIFxuLVx0X19jYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKHJlcCkpO1xuK1x0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShyZXApKTtcbiBcdGVuZF9yZW5hbWluZyhcdTAwMjZyZCk7XG4gXHRfbGVhdmUoXCIgPSAwXCIpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDY3LDcgKzQ2Nyw2IEBAIHN0cnVjdCBmaWxlICpjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdGlmICh1bmxpa2VseSghZmlsZS1cdTAwM2VmX29wLVx1MDAzZXJlYWRfaXRlcikgfHxcbiBcdCAgICB1bmxpa2VseSghZmlsZS1cdTAwM2VmX29wLVx1MDAzZXdyaXRlX2l0ZXIpKSB7XG4tXHRcdGZwdXQoZmlsZSk7XG4gXHRcdHByX25vdGljZShcIkNhY2hlIGRvZXMgbm90IHN1cHBvcnQgcmVhZF9pdGVyIGFuZCB3cml0ZV9pdGVyXFxuXCIpO1xuIFx0XHRnb3RvIGVycl91bnVzZTtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcbmluZGV4IDc2ZDBmNmEyOWFiYWIyLi4yNGE4YTU0MThlMzExOSAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xuKysrIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXG5AQCAtNjU5LDcgKzY1OSw3IEBAIGludCBuZXRmc193cml0ZV9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCxcbiBcdCAqIHdpdGhpbiB0aGUgY2FjaGUgZ3JhbnVsZSBjb250YWluaW5nIHRoZSBFT0YsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZFxuIFx0ICogdG8gcHJlbG9hZCB0aGUgZ3JhbnVsZS5cbiBcdCAqL1xuLVx0aWYgKCFuZXRmc19pc19jYWNoZV9lbmFibGVkKGN0eCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoIW5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoY3R4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuZXRmc19za2lwX2ZvbGlvX3JlYWQoZm9saW8sIHBvcywgbGVuLCBmYWxzZSkpIHtcbiBcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3JoX3dyaXRlX3pza2lwKTtcbiBcdFx0Z290byBoYXZlX2ZvbGlvX25vX3dhaXQ7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbmluZGV4IDZiZGUzMzIwYmNlYzY2Li4yY2RiNjhlNmIxNmZmZiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbisrKyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbkBAIC0yNzcsNyArMjc3LDcgQEAgc3NpemVfdCBuZXRmc19wZXJmb3JtX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHQgKiBjYWNoaW5nIHNlcnZpY2UgdGVtcG9yYXJpbHkgYmVjYXVzZSB0aGUgYmFja2luZyBzdG9yZSBnb3RcbiBcdFx0ICogY3VsbGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKG5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoY3R4KSkge1xuK1x0XHRpZiAobmV0ZnNfaXNfY2FjaGVfbWF5YmVfZW5hYmxlZChjdHgpKSB7XG4gXHRcdFx0aWYgKGZpbmZvKSB7XG4gXHRcdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfd3N0cmVhbV9jb25mbGljdCk7XG4gXHRcdFx0XHRnb3RvIGZsdXNoX2NvbnRlbnQ7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuaW5kZXggMjVmOGNlYjE1ZmFkNjQuLmMxNmZiYWQyODZhMTc3IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbisrKyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5AQCAtMTY2LDEzICsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFx0XHQgKi9cbiBcdFx0c3VicmVxLVx1MDAzZWVycm9yID0gLUVBR0FJTjtcbiBcdFx0dHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpO1xuLVx0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKVxuK1x0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKSB7XG4gXHRcdFx0aW92X2l0ZXJfYWR2YW5jZShcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlci5pdGVyLCBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuK1x0XHRcdHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgKz0gc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChzdHJlYW0tXHUwMDNlc291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB3cmVxLVx1MDAzZW5ldGZzX29wcy1cdTAwM2VyZXRyeV9yZXF1ZXN0KVxuIFx0XHRcdHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcbiBcbitcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuQEAgLTE4NiwxNyArMTg5LDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcbiBcdFx0bmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7XG4gXG4tXHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSkge1xuK1x0XHRpZiAoc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUpXG4gXHRcdFx0c3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUoc3VicmVxKTtcbi1cdFx0XHRfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgc291cmNlO1xuLVxuLVx0XHRcdG5ldGZzX3Jlc2V0X2l0ZXIoc3VicmVxKTtcbi1cdFx0XHRzb3VyY2UgPSBzdWJyZXEtXHUwMDNlaW9faXRlcjtcbi1cdFx0XHRuZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCBcdTAwMjZzb3VyY2UpO1xuLVx0XHR9XG4rXHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9pbnRlcm5hbC5oIGIvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuaW5kZXggNjQ1OTk2ZWNmYzgwMzYuLmQ4ODljYWE0MDFkYzI0IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuQEAgLTIzOSw2ICsyMzksMTggQEAgc3RhdGljIGlubGluZSBib29sIG5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgpXG4gI2VuZGlmXG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBuZXRmc19pc19jYWNoZV9tYXliZV9lbmFibGVkKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4KVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfRlNDQUNIRSlcbitcdHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gY3R4LVx1MDAzZWNhY2hlO1xuK1xuK1x0cmV0dXJuIGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkgXHUwMDI2XHUwMDI2XG4rXHRcdHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX0lTX0NBQ0hJTkcsIFx1MDAyNmNvb2tpZS1cdTAwM2VmbGFncyk7XG4rI2Vsc2VcbitcdHJldHVybiBmYWxzZTtcbisjZW5kaWZcbit9XG4rXG4gLypcbiAgKiBHZXQgYSByZWYgb24gYSBuZXRmcyBncm91cCBhdHRhY2hlZCB0byBhIGRpcnR5IHBhZ2UgKGUuZy4gYSBjZXBoIHNuYXApLlxuICAqL1xuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2xvY2tpbmcuYyBiL2ZzL25ldGZzL2xvY2tpbmcuY1xuaW5kZXggMjI0OWVjZDA5ZDBhOGQuLjRlM2JlMmI4MTUwNDA4IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvbG9ja2luZy5jXG4rKysgYi9mcy9uZXRmcy9sb2NraW5nLmNcbkBAIC05LDYgKzksMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiBcbitzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyIHtcbitcdHN0cnVjdCBsaXN0X2hlYWRcdGxpbms7XHRcdC8qIExpbmsgaW4gaWN0eC1cdTAwM2V3Yl9xdWV1ZSAqL1xuK1x0c3RydWN0IHRhc2tfc3RydWN0XHQqd2FpdGVyO1x0LyogV2FpdGVyIHRhc2s7IGNsZWFyZWQgd2hlbiBsb2NrIGdyYW50ZWQgKi9cbit9O1xuK1xuIC8qXG4gICogaW5vZGVfZGlvX3dhaXRfaW50ZXJydXB0aWJsZSAtIHdhaXQgZm9yIG91dHN0YW5kaW5nIERJTyByZXF1ZXN0cyB0byBmaW5pc2hcbiAgKiBAaW5vZGU6IGlub2RlIHRvIHdhaXQgZm9yXG5AQCAtMjAzLDMgKzIwOCw5MyBAQCB2b2lkIG5ldGZzX2VuZF9pb19kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHVwX3JlYWQoXHUwMDI2aW5vZGUtXHUwMDNlaV9yd3NlbSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0ZnNfZW5kX2lvX2RpcmVjdCk7XG4rXG4rLypcbisgKiBXYWl0IHRvIGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byB3cml0ZWJhY2suXG4rICovXG4rc3RhdGljIGJvb2wgbmV0ZnNfd2JfYmVnaW5fd2FpdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXG4re1xuK1x0c3RydWN0IG5ldGZzX3diX3dhaXRlciB3YWl0ZXIgPSB7fTtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDtcbitcdGJvb2wgZ290ID0gZmFsc2U7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aWN0eC1cdTAwM2Vsb2NrKTtcbitcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soTkVURlNfSUNUWF9XQl9MT0NLLCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSkge1xuK1x0XHRnZXRfdGFza19zdHJ1Y3QodHNrKTtcbitcdFx0d2FpdGVyLndhaXRlciA9IHRzaztcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ3YWl0ZXIubGluaywgXHUwMDI2aWN0eC1cdTAwM2V3Yl9xdWV1ZSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRnb3QgPSB0cnVlO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2Vsb2NrKTtcbitcbitcdGlmICghZ290KSB7XG4rXHRcdGZvciAoOzspIHtcbitcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdFx0LyogUmVhZCB3YWl0ZXIgYmVmb3JlIGFjY2Vzc2luZyBpbm9kZSBzdGF0ZS4gKi9cbitcdFx0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ3YWl0ZXIud2FpdGVyKSA9PSBOVUxMKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0c2NoZWR1bGUoKTtcbitcdFx0fVxuK1x0fVxuK1x0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qKlxuKyAqIG5ldGZzX3diX2JlZ2luIC0gQmVnaW4gd3JpdGViYWNrLCB3YWl0aW5nIGlmIG5lZWQgYmVcbisgKiBAaWN0eDogVGhlIGlub2RlIHRvIGdldCB3cml0ZWJhY2sgYWNjZXNzIG9uXG4rICogQG5vd2FpdDogUmV0dXJuIGZhaWx1cmUgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gd2FpdGluZyBpZiB0cnVlXG4rICpcbisgKiBCZWdpbiB3cml0ZWJhY2sgdG8gYW4gaW5vZGUsIHdhaXRpbmcgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgaWYgQG5vd2FpdCBpc1xuKyAqIGZhbHNlLiAgVGhpcyBwcmV2ZW50cyBjb2xsZWN0aW9uIGZyb20gYmVpbmcgZG9uZSBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4rICogdG8gdGhlIGlzc3VhbmNlIG9mIHdyaXRlIHN1YnJlcXVlc3RzLlxuKyAqXG4rICogTm90ZSB0aGF0IHdyaXRlYmFjayBtYXkgYmUgZW5kZWQgaW4gYSBkaWZmZXJlbnQgcHJvY2VzcyAoZS5nLiB0aGUgY29sbGVjdGlvblxuKyAqIGZ1bmN0aW9uIG9uIGEgd29ya3F1ZXVlKSB0aGFuIHN0YXJ0ZWQgaXQuXG4rICpcbisgKiBSZXR1cm46IFRydWUgaWYgY2FuIHByb2NlZWQsIGZhbHNlIGlmIGRlbmllZC5cbisgKi9cbitib29sIG5ldGZzX3diX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCwgYm9vbCBub3dhaXQpXG4re1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soTkVURlNfSUNUWF9XQl9MT0NLLCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAobm93YWl0KSB7XG4rXHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3NraXApO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja193YWl0KTtcbitcdHJldHVybiBuZXRmc193Yl9iZWdpbl93YWl0KGljdHgpO1xuK31cbitFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTtcbitcbisvKiBuZXRmc193Yl9lbmQgLSBFbmQgd3JpdGViYWNrXG4rICogQGljdHg6IFRoZSBpbm9kZSB3ZSBoYXZlIHdyaXRlYmFjayBhY2Nlc3MgdG9cbisgKlxuKyAqIEVuZCB3cml0ZWJhY2sgYWNjZXNzIG9uIGFuIGlub2RlLCB3YWtpbmcgdXAgdGhlIG5leHQgd3JpdGViYWNrIHJlcXVlc3QuXG4rICovXG4rdm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KVxuK3tcbitcdHN0cnVjdCBuZXRmc193Yl93YWl0ZXIgKndhaXRlcjtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xuK1xuK1x0V0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChORVRGU19JQ1RYX1dCX0xPQ0ssIFx1MDAyNmljdHgtXHUwMDNlZmxhZ3MpKTtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpY3R4LVx1MDAzZWxvY2spO1xuK1xuK1x0d2FpdGVyID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmljdHgtXHUwMDNld2JfcXVldWUsIHN0cnVjdCBuZXRmc193Yl93YWl0ZXIsIGxpbmspO1xuK1x0aWYgKHdhaXRlcikge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZ3YWl0ZXItXHUwMDNlbGluayk7XG4rXHRcdHRzayA9IHdhaXRlci1cdTAwM2V3YWl0ZXI7XG4rXHRcdC8qIFdyaXRlIGlub2RlIHN0YXRlIGJlZm9yZSBjbGVhcmluZyB3YWl0ZXIuICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNndhaXRlci1cdTAwM2V3YWl0ZXIsIE5VTEwpO1xuK1x0XHR3YWtlX3VwX3Byb2Nlc3ModHNrKTtcbitcdFx0cHV0X3Rhc2tfc3RydWN0KHRzayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKE5FVEZTX0lDVFhfV0JfTE9DSywgXHUwMDI2aWN0eC1cdTAwM2VmbGFncyk7XG4rXHR9XG4rXG4rXHRzcGluX3VubG9jayhcdTAwMjZpY3R4LVx1MDAzZWxvY2spO1xuK31cbitFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2VuZCk7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jIGIvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jXG5pbmRleCAyNGZjMmJiMmY4YTQ3Yi4uMjEwZWI4ZjM5NThkNzcgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmNcbisrKyBiL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuY1xuQEAgLTQwOCw2ICs0MDgsMTYgQEAgYm9vbCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFx0bmV0ZnNfd2FrZV9ycmVxX2ZsYWcod3JlcSwgTkVURlNfUlJFUV9JTl9QUk9HUkVTUywgbmV0ZnNfcnJlcV90cmFjZV93YWtlX2lwKTtcbiBcdC8qIEFzIHdlIGNsZWFyZWQgTkVURlNfUlJFUV9JTl9QUk9HUkVTUywgd2UgYWNxdWlyZWQgaXRzIHJlZi4gKi9cbiBcbitcdHN3aXRjaCAod3JlcS1cdTAwM2VvcmlnaW4pIHtcbitcdGNhc2UgTkVURlNfV1JJVEVCQUNLOlxuK1x0Y2FzZSBORVRGU19XUklURUJBQ0tfU0lOR0xFOlxuK1x0Y2FzZSBORVRGU19XUklURVRIUk9VR0g6XG4rXHRcdG5ldGZzX3diX2VuZChpY3R4KTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbiBcdGlmICh3cmVxLVx1MDAzZWlvY2IpIHtcbiBcdFx0c2l6ZV90IHdyaXR0ZW4gPSBtaW4od3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCwgd3JlcS1cdTAwM2VsZW4pO1xuIFx0XHR3cmVxLVx1MDAzZWlvY2ItXHUwMDNla2lfcG9zICs9IHdyaXR0ZW47XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbmluZGV4IGMwM2M3Y2M0NWU0NzE2Li5mMjc2MWM5OTc5NWE2YiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbisrKyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbkBAIC0xMDYsNyArMTA2LDcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRfZW50ZXIoXCJSPSV4XCIsIHdyZXEtXHUwMDNlZGVidWdfaWQpO1xuIFxuIFx0aWN0eCA9IG5ldGZzX2lub2RlKHdyZXEtXHUwMDNlaW5vZGUpO1xuLVx0aWYgKGlzX2NhY2hlYWJsZSBcdTAwMjZcdTAwMjYgbmV0ZnNfaXNfY2FjaGVfZW5hYmxlZChpY3R4KSlcbitcdGlmIChpc19jYWNoZWFibGUpXG4gXHRcdGZzY2FjaGVfYmVnaW5fd3JpdGVfb3BlcmF0aW9uKFx1MDAyNndyZXEtXHUwMDNlY2FjaGVfcmVzb3VyY2VzLCBuZXRmc19pX2Nvb2tpZShpY3R4KSk7XG4gXHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlciwgd3JlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9TT1VSQ0UpIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5vbWVtO1xuQEAgLTU1MSwxNCArNTUxLDggQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spKSB7XG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkge1xuLVx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3NraXApO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4tXHR9XG4rXHRpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSlcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBOZWVkIHRoZSBmaXJzdCBmb2xpbyB0byBiZSBhYmxlIHRvIHNldCB1cCB0aGUgb3AuICovXG4gXHRmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgTlVMTCwgXHUwMDI2ZXJyb3IpO1xuQEAgLTU4OCwxMyArNTgyLDEzIEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHR9XG4gXG4gXHRcdGVycm9yID0gbmV0ZnNfd3JpdGVfZm9saW8od3JlcSwgd2JjLCBmb2xpbyk7XG4tXHRcdGlmIChlcnJvciBcdTAwM2MgMClcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKGVycm9yID09IC1FTk9NRU0pIHtcbitcdFx0XHRmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uod2JjLCBmb2xpbyk7XG4rXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0fVxuIFx0fSB3aGlsZSAoKGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd2JjLCBmb2xpbywgXHUwMDI2ZXJyb3IpKSk7XG4gXG4gXHRuZXRmc19lbmRfaXNzdWVfd3JpdGUod3JlcSk7XG4tXG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbiBcdG5ldGZzX3dha2VfY29sbGVjdG9yKHdyZXEpO1xuIFxuIFx0bmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfcmV0dXJuKTtcbkBAIC02MDIsOSArNTk2LDE2IEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0cmV0dXJuIGVycm9yO1xuIFxuIGNvdWxkbnRfc3RhcnQ6XG4tXHRuZXRmc19raWxsX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIHdiYywgZm9saW8pO1xuK1x0aWYgKGVycm9yID09IC1FTk9NRU0pIHtcbitcdFx0Zm9saW9fcmVkaXJ0eV9mb3Jfd3JpdGVwYWdlKHdiYywgZm9saW8pO1xuK1x0XHRmb2xpb191bmxvY2soZm9saW8pO1xuK1x0XHRmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sIFx1MDAyNmVycm9yKTtcbitcdFx0V0FSTl9PTl9PTkNFKGZvbGlvICE9IE5VTEwpO1xuK1x0fSBlbHNlIHtcbitcdFx0bmV0ZnNfa2lsbF9kaXJ0eV9wYWdlcyhtYXBwaW5nLCB3YmMsIGZvbGlvKTtcbitcdH1cbiBvdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbitcdG5ldGZzX3diX2VuZChpY3R4KTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIGVycm9yKTtcbiBcdHJldHVybiBlcnJvcjtcbiB9XG5AQCAtNjE4LDE2ICs2MTksMTcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW5cbiBcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gTlVMTDtcbiBcdHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCA9IG5ldGZzX2lub2RlKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSk7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4rXHRuZXRmc193Yl9iZWdpbihpY3R4LCBmYWxzZSk7XG4gXG4gXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLCBpb2NiLVx1MDAzZWtpX2ZpbHAsXG4gXHRcdFx0XHQgICAgICBpb2NiLVx1MDAzZWtpX3BvcywgTkVURlNfV1JJVEVUSFJPVUdIKTtcbiBcdGlmIChJU19FUlIod3JlcSkpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4rXHRcdG5ldGZzX3diX2VuZChpY3R4KTtcbiBcdFx0cmV0dXJuIHdyZXE7XG4gXHR9XG4gXG4gXHR3cmVxLVx1MDAzZWlvX3N0cmVhbXNbMF0uYXZhaWwgPSB0cnVlO1xuK1x0X19zZXRfYml0KE5FVEZTX1JSRVFfT0ZGTE9BRF9DT0xMRUNUSU9OLCBcdTAwMjZ3cmVxLVx1MDAzZWZsYWdzKTtcbiBcdHRyYWNlX25ldGZzX3dyaXRlKHdyZXEsIG5ldGZzX3dyaXRlX3RyYWNlX3dyaXRldGhyb3VnaCk7XG4gXHRyZXR1cm4gd3JlcTtcbiB9XG5AQCAtNjg1LDcgKzY4Nyw2IEBAIGludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jXG4gc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGZvbGlvICp3cml0ZXRocm91Z2hfY2FjaGUpXG4ge1xuLVx0c3RydWN0IG5ldGZzX2lub2RlICppY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cdTAwM2Vpbm9kZSk7XG4gXHRzc2l6ZV90IHJldDtcbiBcbiBcdF9lbnRlcihcIlI9JXhcIiwgd3JlcS1cdTAwM2VkZWJ1Z19pZCk7XG5AQCAtNjk5LDggKzcwMCw2IEBAIHNzaXplX3QgbmV0ZnNfZW5kX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jXG4gXG4gXHRuZXRmc19lbmRfaXNzdWVfd3JpdGUod3JlcSk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbi1cbiBcdGlmICh3cmVxLVx1MDAzZWlvY2IpXG4gXHRcdHJldCA9IC1FSU9DQlFVRVVFRDtcbiBcdGVsc2VcbkBAIC04NDcsMTUgKzg0NiwxMCBAQCBpbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdGlmIChXQVJOX09OX09OQ0UoIWlvdl9pdGVyX2lzX2ZvbGlvcShpdGVyKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuLVx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jaykpIHtcbi1cdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7XG4tXHRcdFx0LyogVGhlIFZGUyB3aWxsIGhhdmUgdW5kaXJ0aWVkIHRoZSBpbm9kZS4gKi9cbi1cdFx0XHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZpY3R4LVx1MDAzZWlub2RlKTtcbi1cdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja19za2lwKTtcbi1cdFx0XHRyZXR1cm4gMTtcbi1cdFx0fVxuLVx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja193YWl0KTtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spO1xuK1x0aWYgKCFuZXRmc193Yl9iZWdpbihpY3R4LCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpIHtcbitcdFx0LyogVGhlIFZGUyB3aWxsIGhhdmUgdW5kaXJ0aWVkIHRoZSBpbm9kZS4gKi9cbitcdFx0bmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoXHUwMDI2aWN0eC1cdTAwM2Vpbm9kZSk7XG4rXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuIFx0d3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEobWFwcGluZywgTlVMTCwgMCwgTkVURlNfV1JJVEVCQUNLX1NJTkdMRSk7XG5AQCAtODkzLDcgKzg4Nyw2IEBAIGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0c21wX3dtYigpOyAvKiBXcml0ZSBsaXN0cyBiZWZvcmUgQUxMX1FVRVVFRC4gKi9cbiBcdHNldF9iaXQoTkVURlNfUlJFUV9BTExfUVVFVUVELCBcdTAwMjZ3cmVxLVx1MDAzZWZsYWdzKTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spO1xuIFx0bmV0ZnNfd2FrZV9jb2xsZWN0b3Iod3JlcSk7XG4gXG4gXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9yZXR1cm4pO1xuQEAgLTkwMSw3ICs4OTQsNyBAQCBpbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdHJldHVybiByZXQ7XG4gXG4gY291bGRudF9zdGFydDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spO1xuK1x0bmV0ZnNfd2JfZW5kKGljdHgpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZnMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZnMuaFxuaW5kZXggMjQzYzBmNzM3OTM4ODMuLjFiYzEyMGQ2MWM1YmViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZzLmhcbkBAIC02MSwxNCArNjEsMTYgQEAgc3RydWN0IG5ldGZzX2lub2RlIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRlNDQUNIRSlcbiBcdHN0cnVjdCBmc2NhY2hlX2Nvb2tpZVx0KmNhY2hlO1xuICNlbmRpZlxuLVx0c3RydWN0IG11dGV4XHRcdHdiX2xvY2s7XHQvKiBXcml0ZWJhY2sgc2VyaWFsaXNhdGlvbiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0d2JfcXVldWU7XHQvKiBRdWV1ZSBvZiBwcm9jZXNzZXMgd2FudGluZyB0byBkbyB3cml0ZWJhY2sgKi9cbiBcdGxvZmZfdFx0XHRcdF9yZW1vdGVfaV9zaXplO1x0LyogU2l6ZSBvZiB0aGUgcmVtb3RlIGZpbGUgKi9cbiBcdGxvZmZfdFx0XHRcdF96ZXJvX3BvaW50O1x0LyogU2l6ZSBhZnRlciB3aGljaCB3ZSBhc3N1bWUgdGhlcmUncyBubyBkYXRhXG4gXHRcdFx0XHRcdFx0ICogb24gdGhlIHNlcnZlciAqL1xuK1x0c3BpbmxvY2tfdFx0XHRsb2NrO1x0XHQvKiBMb2NrIGNvdmVyaW5nIHdiX3F1ZXVlICovXG4gXHRhdG9taWNfdFx0XHRpb19jb3VudDtcdC8qIE51bWJlciBvZiBvdXRzdGFuZGluZyByZXFzICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuICNkZWZpbmUgTkVURlNfSUNUWF9PRElSRUNUXHQwXHRcdC8qIFRoZSBmaWxlIGhhcyBESU8gaW4gcHJvZ3Jlc3MgKi9cbiAjZGVmaW5lIE5FVEZTX0lDVFhfVU5CVUZGRVJFRFx0MVx0XHQvKiBJL08gc2hvdWxkIG5vdCB1c2UgdGhlIHBhZ2VjYWNoZSAqL1xuKyNkZWZpbmUgTkVURlNfSUNUWF9XQl9MT0NLXHQyXHRcdC8qIFdyaXRlYmFjayBzZXJpYWxpc2F0aW9uIGxvY2sgKi9cbiAjZGVmaW5lIE5FVEZTX0lDVFhfTU9ESUZJRURfQVRUUiAzXHRcdC8qIEluZGljYXRlIGNoYW5nZSBpbiBtdGltZS9jdGltZSAqL1xuICNkZWZpbmUgTkVURlNfSUNUWF9TSU5HTEVfTk9fVVBMT0FEIDRcdFx0LyogTW9ub2xpdGhpYyBwYXlsb2FkLCBjYWNoZSBidXQgbm8gdXBsb2FkICovXG4gfTtcbkBAIC00NjIsNiArNDY0LDEwIEBAIGludCBuZXRmc19hbGxvY19mb2xpb3FfYnVmZmVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdCAgICAgIHNpemVfdCAqX2N1cl9zaXplLCBzc2l6ZV90IHNpemUsIGdmcF90IGdmcCk7XG4gdm9pZCBuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIoc3RydWN0IGZvbGlvX3F1ZXVlICpmcSk7XG4gXG4rLyogV3JpdGViYWNrIGV4Y2x1c2lvbiBBUEkuICovXG4rYm9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTtcbit2b2lkIG5ldGZzX3diX2VuZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpO1xuK1xuIC8qKlxuICAqIG5ldGZzX2lub2RlIC0gR2V0IHRoZSBuZXRmcyBpbm9kZSBjb250ZXh0IGZyb20gdGhlIGlub2RlXG4gICogQGlub2RlOiBUaGUgaW5vZGUgdG8gcXVlcnlcbkBAIC03NDMsNyArNzQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2lub2RlX2luaXQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTQ0FDSEUpXG4gXHRjdHgtXHUwMDNlY2FjaGUgPSBOVUxMO1xuICNlbmRpZlxuLVx0bXV0ZXhfaW5pdChcdTAwMjZjdHgtXHUwMDNld2JfbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNld2JfcXVldWUpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0LyogLVx1MDAzZXJlbGVhc2VwYWdlKCkgZHJpdmVzIHplcm9fcG9pbnQgKi9cbiBcdGlmICh1c2VfemVyb19wb2ludCkge1xuIFx0XHRjdHgtXHUwMDNlX3plcm9fcG9pbnQgPSBjdHgtXHUwMDNlX3JlbW90ZV9pX3NpemU7XG5AQCAtNzUzLDcgKzc2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19pbm9kZV9pbml0KHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxuIFxuIC8qKlxuICAqIG5ldGZzX3Jlc2l6ZV9maWxlIC0gTm90ZSB0aGF0IGEgZmlsZSBnb3QgcmVzaXplZFxuLSAqIEBjdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkXG4rICogQGljdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkXG4gICogQG5ld19pX3NpemU6IFRoZSBuZXcgZmlsZSBzaXplXG4gICogQGNoYW5nZWRfb25fc2VydmVyOiBUaGUgY2hhbmdlIHdhcyBhcHBsaWVkIHRvIHRoZSBzZXJ2ZXJcbiAgKlxuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcbmluZGV4IDI0MzY2MmFmMWFmNzNmLi41YTY0MzQ3MDk3MTZlMSAxMDA2NDRcbi0tLSBhL2xpYi9pb3ZfaXRlci5jXG4rKysgYi9saWIvaW92X2l0ZXIuY1xuQEAgLTE1NjgsNiArMTU2OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHR1bnNpZ25lZCBpbnQgbnIgPSAwLCBvZmZzZXQ7XG4gXHRsb2ZmX3QgcG9zID0gaS1cdTAwM2V4YXJyYXlfc3RhcnQgKyBpLVx1MDAzZWlvdl9vZmZzZXQ7XG4rXHRib29sIHdpbGxfYWxsb2MgPSAhKnBhZ2VzO1xuIFx0WEFfU1RBVEUoeGFzLCBpLVx1MDAzZXhhcnJheSwgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcbiBcdG9mZnNldCA9IHBvcyBcdTAwMjYgflBBR0VfTUFTSztcbkBAIC0xNTk1LDYgKzE1OTYsMTQgQEAgc3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4rXHRpZiAoIW5yKSB7XG4rXHRcdGlmICh3aWxsX2FsbG9jKSB7XG4rXHRcdFx0a3ZmcmVlKCpwYWdlcyk7XG4rXHRcdFx0KnBhZ2VzID0gTlVMTDtcbitcdFx0fVxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbiBcdG1heHNpemUgPSBtaW5fdChzaXplX3QsIG5yICogUEFHRV9TSVpFIC0gb2Zmc2V0LCBtYXhzaXplKTtcbiBcdGlvdl9pdGVyX2FkdmFuY2UoaSwgbWF4c2l6ZSk7XG4gXHRyZXR1cm4gbWF4c2l6ZTtcbkBAIC0xNjI4LDYgKzE2MzcsOCBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0YmkuYmlfYnZlY19kb25lID0gc2tpcDtcbiBcbiBcdG1heHBhZ2VzID0gd2FudF9wYWdlc19hcnJheShwYWdlcywgbWF4c2l6ZSwgc2tpcCwgbWF4cGFnZXMpO1xuK1x0aWYgKCFtYXhwYWdlcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHR3aGlsZSAoYmkuYmlfc2l6ZSBcdTAwMjZcdTAwMjYgYmkuYmlfaWR4IFx1MDAzYyBpLVx1MDAzZW5yX3NlZ3MpIHtcbiBcdFx0c3RydWN0IGJpb192ZWMgYnYgPSBidmVjX2l0ZXJfYnZlYyhpLVx1MDAzZWJ2ZWMsIGJpKTtcbkBAIC0xNzQ1LDYgKzE3NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFx0dW5zaWduZWQgaW50IGd1cF9mbGFncyA9IDA7XG4gXHRzaXplX3Qgb2Zmc2V0O1xuK1x0Ym9vbCB3aWxsX2FsbG9jID0gISpwYWdlcztcbiBcdGludCByZXM7XG4gXG4gXHRpZiAoaS1cdTAwM2VkYXRhX3NvdXJjZSA9PSBJVEVSX0RFU1QpXG5AQCAtMTc2MSw4ICsxNzczLDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXG4gXHRpZiAoIW1heHBhZ2VzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHJlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgbWF4cGFnZXMsIGd1cF9mbGFncywgKnBhZ2VzKTtcbi1cdGlmICh1bmxpa2VseShyZXMgXHUwMDNjPSAwKSlcbitcdGlmICh1bmxpa2VseShyZXMgXHUwMDNjPSAwKSkge1xuK1x0XHRpZiAod2lsbF9hbGxvYykge1xuK1x0XHRcdGt2ZnJlZSgqcGFnZXMpO1xuK1x0XHRcdCpwYWdlcyA9IE5VTEw7XG4rXHRcdH1cbiBcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbiBcdG1heHNpemUgPSBtaW5fdChzaXplX3QsIG1heHNpemUsIHJlcyAqIFBBR0VfU0laRSAtIG9mZnNldCk7XG4gXHRpb3ZfaXRlcl9hZHZhbmNlKGksIG1heHNpemUpO1xuIFx0cmV0dXJuIG1heHNpemU7XG5kaWZmIC0tZ2l0IGEvbGliL3NjYXR0ZXJsaXN0LmMgYi9saWIvc2NhdHRlcmxpc3QuY1xuaW5kZXggYjdmZTkxZWYzNWI4YzYuLjZlYTQwZDJlNjI0NzU1IDEwMDY0NFxuLS0tIGEvbGliL3NjYXR0ZXJsaXN0LmNcbisrKyBiL2xpYi9zY2F0dGVybGlzdC5jXG5AQCAtMTM2Niw2ICsxMzY2LDcgQEAgc3RhdGljIHNzaXplX3QgZXh0cmFjdF94YXJyYXlfdG9fc2coc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRzZ19tYXgtLTtcbiBcbiBcdFx0bWF4c2l6ZSAtPSBsZW47XG4rXHRcdHN0YXJ0ICs9IGxlbjtcbiBcdFx0cmV0ICs9IGxlbjtcbiBcdFx0aWYgKG1heHNpemUgXHUwMDNjPSAwIHx8IHNnX21heCA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jIGIvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmNcbmluZGV4IGYwMmY3YjdhYTc5NjA1Li5lN2UxNTRmOTRmNjY1ZiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jXG4rKysgYi9saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuY1xuQEAgLTI3NSw3ICsyNzUsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2NvcHlfdG9fYnZlYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRzdHJ1Y3QgcGFnZSAqKnNwYWdlcywgKipicGFnZXM7XG4gXHR1OCAqc2NyYXRjaCwgKmJ1ZmZlcjtcbiBcdHNpemVfdCBidWZzaXplLCBucGFnZXMsIHNpemUsIGNvcGllZDtcbi1cdGludCBpLCBiLCBwYXR0O1xuK1x0aW50IGksIHBhdHQ7XG4gXG4gXHRidWZzaXplID0gMHgxMDAwMDA7XG4gXHRucGFnZXMgPSBidWZzaXplIC8gUEFHRV9TSVpFO1xuQEAgLTI5OCwxMCArMjk4LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGl0ZXIubnJfc2VncywgMCk7XG4gXG4gXHQvKiBCdWlsZCB0aGUgZXhwZWN0ZWQgaW1hZ2UgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1xuLVx0YiA9IDA7XG4gXHRwYXR0ID0gMDtcbiBcdG1lbXNldChzY3JhdGNoLCAwLCBidWZzaXplKTtcbi1cdGZvciAocHIgPSBidmVjX3Rlc3RfcmFuZ2VzOyBwci1cdTAwM2Vmcm9tIFx1MDAzZT0gMDsgcHIrKywgYisrKSB7XG4rXHRmb3IgKHByID0gYnZlY190ZXN0X3JhbmdlczsgcHItXHUwMDNlZnJvbSBcdTAwM2U9IDA7IHByKyspIHtcbiBcdFx0dTggKnAgPSBzY3JhdGNoICsgcHItXHUwMDNlcGFnZSAqIFBBR0VfU0laRTtcbiBcbiBcdFx0Zm9yIChpID0gcHItXHUwMDNlZnJvbTsgaSBcdTAwM2MgcHItXHUwMDNldG87IGkrKylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjIzOjAwLjQwMzgwOTQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzMTk4NzgxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggU2VyaWVzOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGluIGZyb250IG9mIG1lLCBhbmQgaXQgdG91Y2hlcyBhIHNpZ25pZmljYW50IHN3YXRoIG9mIHRoZSBrZXJuZWw6IGBmcy9hZnMvc3ltbGluay5jYCwgYGZzL2NhY2hlZmlsZXMvbmFtZWkuY2AsIGEgYnVuY2ggb2YgYGZzL25ldGZzLypgIGZpbGVzIChidWZmZXJlZCByZWFkL3dyaXRlLCBkaXJlY3Qgd3JpdGUsIGludGVybmFsIGhlYWRlcnMsIGxvY2tpbmcsIHdyaXRlIGNvbGxlY3Rpb24sIGlzc3VlKSwgYGluY2x1ZGUvbGludXgvbmV0ZnMuaGAsIGFuZCBzb21lIHN0dWZmIGluIGBsaWIvYCByZWxhdGVkIHRvIGBpb3ZfaXRlcmAgYW5kIGBzY2F0dGVybGlzdGAsIHBsdXMgYSBLVW5pdCB0ZXN0LiBUaGlzIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVxdWlyZSBzb21lIGZvY3VzZWQgYXR0ZW50aW9uLlxuXG5GaXJzdCwgbGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSByZXBsYWNpbmcgc29tZSBtdXRleC1iYXNlZCBsb2NraW5nIGluIGBhZnMvc3ltbGluay5jYCB3aXRoIGEgY3VzdG9tIHdyaXRlYmFjayBsb2NraW5nIG1lY2hhbmlzbSB1c2luZyBgbmV0ZnNfd2JfYmVnaW5gIGFuZCBgbmV0ZnNfd2JfZW5kYC4gVGhhdOKAmXMgaW50ZXJlc3Rpbmc7IHNlZW1zIGxpa2UgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgcGVyaGFwcyBhIGNoYW5nZSB0byBoYW5kbGUgY29udGVudGlvbiBiZXR0ZXIuIGBjYWNoZWZpbGVzL25hbWVpLmNgIGxvb2tzIGxpa2UgaXQgaXMgc2ltcGxpZnlpbmcgc29tZSBpbm9kZSB1c2FnZSB0cmFja2luZy4gVGhlbiBpbiBgZnMvbmV0ZnNgIHRoZXJlIGlzIGNoYW5nZXMgdG8gY2FjaGUgZnVuY3Rpb25hbGl0eS4gYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCBzZWVtcyB0byBiZSBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBpdGVyYXRvciBhZHZhbmNlbWVudCBkdXJpbmcgZGlyZWN0IHdyaXRlcywgYW5kIHdlJ3JlIHNlZWluZyBzb21lIGNsZWFudXAgb2YgZmFsbGJhY2tzLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGxvY2sgaXMgY2hhbmdlZCBmcm9tIGEgbXV0ZXggdG8gYSB3YWl0IHF1ZXVlIHdpdGggYSBzcGlubG9jayB3aXRoaW4uIFRoZSBgd3JpdGVfY29sbGVjdGAgYW5kIGB3cml0ZV9pc3N1ZWAgbW9kdWxlcyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgd3JpdGViYWNrIGxvY2tpbmcuIFRoZXJlIGFyZSBhbHNvIGFkanVzdG1lbnRzIGZvciBoYW5kbGluZyBgLUVOT01FTWAgZnJvbSBgbmV0ZnNfd3JpdGVfZm9saW9gLlxuXG5Nb3Zpbmcgb24gdG8gYGxpYi9gLCB0aGUgYGlvdl9pdGVyYCBjb2RlIGlzIGdldHRpbmcgYSBjcml0aWNhbCBsb29rLiBJIHNlZSBmaXhlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdoZW4gZXh0cmFjdGluZyBwYWdlcywgZW5zdXJpbmcgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwLCBlc3BlY2lhbGx5IHdoZW4gYEVOT01FTWAgaXMgZW5jb3VudGVyZWQuIFRoZSBgc2NhdHRlcmxpc3RgIGNvZGUgaGFzIGEgc21hbGwgZml4IHJlbGF0ZWQgdG8gdGhlIGBleHRyYWN0X3hhcnJheV90b19zZ2AgZnVuY3Rpb24uIEFuZCBmaW5hbGx5IHRoZSB0ZXN0IHN1aXRlIGhhcyBoYWQgc29tZSBpcnJlbGV2YW50IHZhcmlhYmxlcyBkZWxldGVkLiBUaGVzZSBhcmUgYWxsIHN1YnRsZSwgYnV0IGltcG9ydGFudCwgY2hhbmdlcyB0aGF0IGNvdWxkIGltcGFjdCBhIGxvdCBvZiB1c2Vyc3BhY2UgYmVoYXZpb3IuXG5cbkZ1bmN0aW9uYWxseSwgdGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBpbXBhY3RmdWwuIFRoZSBuZXRmcyBjb2RlIGlzIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIGBpb3ZfaXRlcmAgYW5kIGBzY2F0dGVybGlzdGAgY2hhbmdlcyBoYXZlIGJyb2FkIGltcGxpY2F0aW9ucywgbm90IHRvIG1lbnRpb24gdGhlIEFGUyBjaGFuZ2VzLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgY29tcHJlaGVuc2l2ZSBzZXQgb2YgbW9kaWZpY2F0aW9ucy5cblxuQmFzZWQgb24gdGhpcywgdGhpcyBzZXJpZXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBcImZ1enogbWUhXCIgSSdtIGdvaW5nIHRvIHdhbnQgdG8gc3ViamVjdCB0aGlzIHRvIHNvbWUgaGVhdnkgZnV6emluZyBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYnVncy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX05FVEZTX1NVUFBPUlRgIGlzIHRoZSBiaWcgb25lLCBvYnZpb3VzbHkuIFdlJ2xsIG5lZWQgdGhhdCBlbmFibGVkLiBgQ09ORklHX0ZTQ0FDSEVgIGlzIGFsc28gcmVsZXZhbnQsIHNpbmNlIHdlJ3JlIHRvdWNoaW5nIGBjYWNoZWZpbGVzYC4gQW5kIHNpbmNlIGBhZnMvc3ltbGluay5jYCBpcyBiZWluZyBtb2RpZmllZCwgYENPTkZJR19BRlNfRlNgIGlzIGltcG9ydGFudCwgdG9vLiBBbmQgb2YgY291cnNlLCBgQ09ORklHX0NBQ0hFRklMRVNgIGFzIGl0IGltcGFjdHMgdGhvc2UgZnVuY3Rpb25hbGl0aWVzIGRpcmVjdGx5LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBUaGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgc2VlbSB0byBiZTogYG5ldGZzX3diX2JlZ2luYCwgYG5ldGZzX3diX2VuZGAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAsIGBpb3ZfaXRlcl9leHRyYWN0X3hhcnJheV9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjX3BhZ2VzYCwgYW5kIGBleHRyYWN0X3hhcnJheV90b19zZ2AuIEknbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNvdmVyZWQgd2VsbC5cblxuSnVzdCBkb3VibGUtY2hlY2tpbmcuLi55dXAsIGBDT05GSUdfTkVURlNfU1VQUE9SVGAgaXMgdGhlIGxpbmNocGluLiBXZSdyZSBnb2luZyB0byB0cmVhdCB0aGlzIHdpdGggY2FyZSBhbmQgcHJvY2VlZCBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMzoxMy43MjM2OTAzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTkxNjA3NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGU19TVVBQT1JUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25ldGZzL0tjb25maWctMi1cXG5mcy9uZXRmcy9LY29uZmlnOjM6Y29uZmlnIE5FVEZTX1NVUFBPUlRcXG5mcy9uZXRmcy9LY29uZmlnLTQtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6MTYuNzE1MzA1ODQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5OTA2ODAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbjogYENPTkZJR19GU0NBQ0hFYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUga2V5LCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfRlNDQUNIRWAuIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25maXJtIHRoZSBzdGF0dXMgb2YgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbi4gSXMgaXQgZW5hYmxlZD8gSXMgaXQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkPyBUaGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudCBkZXBlbmRpbmcgb24gdGhlIHNldHRpbmcuIElmIGl0J3MgZW5hYmxlZCwgSSBjYW4gdGhlbiBwcm9jZWVkIHdpdGggbXkgcGxhbm5lZCB0cm91Ymxlc2hvb3Rpbmcgb3IgaW52ZXN0aWdhdGlvbi4gSWYgbm90IGVuYWJsZWQsIGl0J3MgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBhcHByb2FjaC4gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBkZXBlbmRlbmN5IHRvIG90aGVyIGZlYXR1cmVzIGFzIHdlbGwuIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IHN0YW5kcyB0byBrbm93IHdoZXJlIHRvIG1vdmUgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDYsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMzoyNS4zMTQzNzY3NTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5OTg1MTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNDQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9LY29uZmlnPTI1PWNvbmZpZyBORVRGU19ERUJVR1xcbi0tXFxuZnMvbmV0ZnMvS2NvbmZpZy0zMi1cXG5mcy9uZXRmcy9LY29uZmlnOjMzOmNvbmZpZyBGU0NBQ0hFXFxuZnMvbmV0ZnMvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJHZW5lcmFsIGZpbGVzeXN0ZW0gbG9jYWwgY2FjaGluZyBtYW5hZ2VyXFxcIlxcbi0tXFxuZnMvbmV0ZnMvS2NvbmZpZy00My1cXG5mcy9uZXRmcy9LY29uZmlnOjQ0OmNvbmZpZyBGU0NBQ0hFX1NUQVRTXFxuZnMvbmV0ZnMvS2NvbmZpZy00NS1cXHRib29sIFxcXCJHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6MjcuNTE0MjM0NjA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkxMDE5NTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIGBDT05GSUdfQ0FDSEVGSUxFU2AsIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOlxuXG4qKkRpZ2dpbmcgaW50byBDYWNoZWZpbGVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgQ09ORklHX0NBQ0hFRklMRVNgLiBUaGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZSwgdGhlIHZlcnkgZm91bmRhdGlvbi4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIGluIG15IGhlYWQ6IGVuYWJsaW5nIGl0IG1lYW5zIHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gdXNlIGEgY2FjaGluZyBtZWNoYW5pc20uIEJ1dCB3aGF0ICpraW5kKiBvZiBjYWNoaW5nPyBJcyBpdCBibG9jay1sZXZlbCwgZmlsZS1sZXZlbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgZmlsZXN5c3RlbSBpcyB0aGlzIHJ1bm5pbmcgb24/IEtub3dpbmcgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbSAoZS5nLiwgZXh0NCwgWEZTLCBCdHJmcywgZXRjLikgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNhY2hlIGludGVyYWN0cyBhbmQgcGVyZm9ybXMuIEknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZG93bnNpZGVzOiBjYWNoZSBpbnZhbGlkYXRpb24sIHdyaXRlIHBlbmFsdGllcywgYW5kIG92ZXJhbGwgc3RvcmFnZSBvdmVyaGVhZC4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGdhaW4sIGEgcGVyZm9ybWFuY2UgKmxvc3MqLCBvciBhIHdhc2ggZGVwZW5kaW5nIG9uIG51bWVyb3VzIGZhY3RvcnMuIEknbSBnb2luZyB0byBuZWVkIG1vcmUgY29udGV4dC4gSSB3YW50IHRvIGtub3cgYWJvdXQgdGhlIHdvcmtsb2FkLCB0aGUgaGFyZHdhcmUsIGFuZCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBzZXR0aW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGltcGFjdHMgbXkgdXNlcidzIHN5c3RlbXMgYW5kIHdoYXQgYmVuZWZpdHMgdGhleSBtaWdodCBiZSBnZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjIzOjM3LjQyNDQzMzgwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxNjQ2MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQUNIRUZJTEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozOmNvbmZpZyBDQUNIRUZJTEVTXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xMy1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MTQ6Y29uZmlnIENBQ0hFRklMRVNfREVCVUdcXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRGVidWcgQ2FjaGVGaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yMi1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIlByb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXFxcIlxcbi0tXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI5LVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozMDpjb25maWcgQ0FDSEVGSUxFU19PTkRFTUFORFxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBvbi1kZW1hbmQgcmVhZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6MzkuODE2MDg3Njk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyNjM2OTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlF1aWNrIENoZWNrOiBBRlMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IGluYWR2ZXJ0ZW50bHkgZW5hYmxlZCBgQ09ORklHX0FGU19GU2AuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2ssIGJ1dCBhIG5lY2Vzc2FyeSBvbmUgZ2l2ZW4gdGhlIGNvbnRleHQuIFdlJ3ZlIHNlZW4gc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgbGF0ZWx5IHdpdGggc2ltaWxhciBsZWdhY3kgZmlsZXN5c3RlbXMsIGFuZCBJIGRvbid0IHdhbnQgdG8gY2hhc2UgYSByZWQgaGVycmluZyBsYXRlci4gQmVzdCB0byBydWxlIGl0IG91dCBpbW1lZGlhdGVseSwgc28gd2UgY2FuIGZvY3VzIG9uIHRoZSBjb3JlIGlzc3VlLiBBRlMgaGFzIGl0cyBvd24gaWRpb3N5bmNyYXNpZXMsIGFuZCBldmVuIGlmIGl0J3Mgbm90IHRoZSByb290IGNhdXNlLCBpdHMgcHJlc2VuY2UgY291bGQgY29tcGxpY2F0ZSBkZWJ1Z2dpbmcgaWYgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIGludGVybmFscy4gTGV0J3MgY29uZmlybSBpdHMgc3RhdHVzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEyOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjIzOjQ1Ljc0MjQ2MTEzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NDc4MDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZTX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvYWZzL0tjb25maWc6Mjpjb25maWcgQUZTX0ZTXFxuZnMvYWZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcXFwiXFxuLS1cXG5mcy9hZnMvS2NvbmZpZz0xNz1jb25maWcgQUZTX0RFQlVHXFxuLS1cXG5mcy9hZnMvS2NvbmZpZy0yNi1cXG5mcy9hZnMvS2NvbmZpZzoyNzpjb25maWcgQUZTX0ZTQ0FDSEVcXG5mcy9hZnMvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMzo0Ny44MDcyNTAwNzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1ODU0MTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBGaWxlc3lzdGVtIFdyaXRlYmFjayBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGNydWNpYWwgZm9yIG5ldHdvcmsgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhbmQgY2FjaGluZzogYE5FVEZTX1NVUFBPUlRgLCBgRlNDQUNIRWAsIGBDQUNIRUZJTEVTYCwgYW5kIGBBRlNfRlNgLiBUaGF0IG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbXMuXG5cbk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHdyaXRlIHByb2Nlc3MuIEknbSBzZWVpbmcgYG5ldGZzX3diX2JlZ2luYCBhbmQgYG5ldGZzX3diX2VuZGAg4oCTIHRob3NlIGFyZSBvYnZpb3VzbHkgaW1wb3J0YW50IGZvciB3cml0ZWJhY2sgaW5pdGlhdGlvbiBhbmQgY29tcGxldGlvbi4gVGhlbiB0aGVyZSdzIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCBhbmQgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgIHdoaWNoIGxpa2VseSBkZWFsIHdpdGggZGlmZmVyZW50IHdyaXRlIHN0cmF0ZWdpZXMuIFRoZSBgaW92X2l0ZXJfZXh0cmFjdF8uLi5gIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZzsgSSBrbm93IHRob3NlIHJlbGF0ZSB0byBzY2F0dGVyLWdhdGhlciBJL08gYW5kIHBhZ2UgZXh0cmFjdGlvbiwgc28gdGhleSdsbCBiZSBrZXkgdG8gaG93IGRhdGEgaXMgbW92ZWQuIFNwZWNpZmljYWxseSBJJ20gc2VlaW5nIGBpb3ZfaXRlcl9leHRyYWN0X3hhcnJheV9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjX3BhZ2VzYCBhbmQgYGV4dHJhY3RfeGFycmF5X3RvX3NnYCBhcyBpbXBvcnRhbnQuXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9ucyBpbnZvbHZlZD8gQWhhISBIZXJlIGFyZSBhIGZldyBtb3JlOiBgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbmAsIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgLCBgbmV0ZnNfZW5kX3dyaXRldGhyb3VnaGAsIGBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0YCwgYW5kIGBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlYC4gVGhvc2Ugc2VlbSB0byBiZSByZWxhdGVkIHRvIGJ1bGsgd3JpdGVzLCB3cml0ZS10aHJvdWdoIGNvbnNpc3RlbmN5LCBhbmQgY2FjaGluZyBvYmplY3RzLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCBkYXRhIGludGVncml0eSBjb25zaWRlcmF0aW9ucy5cblxuTm93LCBsZXQncyBzZWUsIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byBrbm93IGlmIHRoZXkncmUgZXhwb3J0ZWQgb3Igc3RhdGljLi4uIEkgcmVjYWxsIHRoYXQgYG5ldGZzX3diX2JlZ2luYCBpcyBleHBvcnRlZCwgdGhhdCdzIGdvb2QuIE5vdywgbG9va2luZyBjbG9zZXIsIGBpb3ZfaXRlcl9leHRyYWN0X3hhcnJheV9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXNgLCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlc2AgYXJlIHN0YXRpYyB3aXRoaW4gYGxpYi9pb3ZfaXRlci5jYC4gQW5kIGBleHRyYWN0X3hhcnJheV90b19zZ2AgaXMgc3RhdGljIGluIGBsaWIvc2NhdHRlcmxpc3QuY2AuIFNvIHRoZXkncmUgaW50ZXJuYWwuXG5cbkFoIGhhISBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AgLSB0aGF0IGxvb2tzIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBiZWluZyB0aGUgXCJtYXN0ZXJcIiBmdW5jdGlvbi4gSXQgcHJvYmFibHkgY2FsbHMgdGhvc2Ugc3RhdGljIG9uZXMgSSBqdXN0IGNoZWNrZWQuIEkgc2hvdWxkIGNoZWNrIHRoYXQgb25lIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6NTYuOTY1Nzk0ODkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3MTM3MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvdl9pdGVyX2V4dHJhY3RfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLWludGVncml0eS5jPTM2OD1pbnQgYmlvX2ludGVncml0eV9tYXBfdXNlcihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4tLVxcbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zOTktXFxuYmxvY2svYmlvLWludGVncml0eS5jOjQwMDpcXHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFxcdTAwMjZwYWdlcywgYnl0ZXMsIG5yX3ZlY3MsXFxuYmxvY2svYmlvLWludGVncml0eS5jLTQwMS1cXHRcXHRcXHRcXHRcXHRleHRyYWN0aW9uX2ZsYWdzLCBcXHUwMDI2b2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvdGVlL3RlZV9zaG0uYz00MDE9cmVnaXN0ZXJfc2htX2hlbHBlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IGlvdl9pdGVyICppdGVyLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3RlZS90ZWVfc2htLmMtNDQ2LVxcbmRyaXZlcnMvdGVlL3RlZV9zaG0uYzo0NDc6XFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpdGVyLCBcXHUwMDI2c2htLVxcdTAwM2VwYWdlcywgTE9OR19NQVgsIG51bV9wYWdlcywgMCxcXG5kcml2ZXJzL3RlZS90ZWVfc2htLmMtNDQ4LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9mZik7XFxuLS1cXG5mcy9kaXJlY3QtaW8uYy00My0vKlxcbmZzL2RpcmVjdC1pby5jOjQ0OiAqIEhvdyBtYW55IHVzZXIgcGFnZXMgdG8gbWFwIGluIG9uZSBjYWxsIHRvIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKS4gIFRoaXNcXG5mcy9kaXJlY3QtaW8uYy00NS0gKiBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIGEgc3RydWN0dXJlIGluIHRoZSBzbGFiIGNhY2hlXFxuLS1cXG5mcy9kaXJlY3QtaW8uYz0xMTY9c3RydWN0IGRpbyB7XFxuLS1cXG5mcy9kaXJlY3QtaW8uYy0xMjgtXFx0c3BpbmxvY2tfdCBiaW9fbG9jaztcXHRcXHQvKiBwcm90ZWN0cyBCSU8gZmllbGRzIGJlbG93ICovXFxuZnMvZGlyZWN0LWlvLmM6MTI5OlxcdGludCBwYWdlX2Vycm9ycztcXHRcXHQvKiBlcnIgZnJvbSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCkgKi9cXG5mcy9kaXJlY3QtaW8uYy0xMzAtXFx0aW50IGlzX2FzeW5jO1xcdFxcdFxcdC8qIGlzIElPIGFzeW5jID8gKi9cXG4tLVxcbmZzL2RpcmVjdC1pby5jPTE2Nj1zdGF0aWMgaW5saW5lIGludCBkaW9fcmVmaWxsX3BhZ2VzKHN0cnVjdCBkaW8gKmRpbywgc3RydWN0IGRpb19zdWJtaXQgKnNkaW8pXFxuLS1cXG5mcy9kaXJlY3QtaW8uYy0xNzEtXFxuZnMvZGlyZWN0LWlvLmM6MTcyOlxcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc2Rpby1cXHUwMDNlaXRlciwgXFx1MDAyNnBhZ2VzLCBMT05HX01BWCxcXG5mcy9kaXJlY3QtaW8uYy0xNzMtXFx0XFx0XFx0XFx0ICAgICBESU9fUEFHRVMsIDAsIFxcdTAwMjZzZGlvLVxcdTAwM2Vmcm9tKTtcXG4tLVxcbmZzL2RpcmVjdC1pby5jLTIwMi0gKiBHZXQgYW5vdGhlciB1c2Vyc3BhY2UgcGFnZS4gIFJldHVybnMgYW4gRVJSX1BUUiBvbiBlcnJvci4gIFBhZ2VzIGFyZVxcbmZzL2RpcmVjdC1pby5jOjIwMzogKiBidWZmZXJlZCBpbnNpZGUgdGhlIGRpbyBzbyB0aGF0IHdlIGNhbiBjYWxsIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKVxcbmZzL2RpcmVjdC1pby5jLTIwNC0gKiBhZ2FpbnN0IGEgZGVjZW50IG51bWJlciBvZiBwYWdlcywgbGVzcyBmcmVxdWVudGx5LiAgVG8gcHJvdmlkZSBuaWNlciB1c2Ugb2ZcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTE1NDg9c3RhdGljIGludCBmdXNlX2dldF91c2VyX3BhZ2VzKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzdHJ1Y3QgaW92X2l0ZXIgKmlpLFxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMTU1OS1cXHQgKiBIb3dldmVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBmdXNlX2Nvbm4gcmVxdWlyZXMgcGFnZXMgaW5zdGVhZCBvZlxcbmZzL2Z1c2UvZmlsZS5jOjE1NjA6XFx0ICogcG9pbnRlciAoZS5nLiwgdmlydGlvLWZzKSwgdXNlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSBpbnN0ZWFkLlxcbmZzL2Z1c2UvZmlsZS5jLTE1NjEtXFx0ICovXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xNTg1LVxcdCAqIFVudGlsIHRoZXJlIGlzIHN1cHBvcnQgZm9yIGlvdl9pdGVyX2V4dHJhY3RfZm9saW9zKCksIHdlIGhhdmUgdG9cXG5mcy9mdXNlL2ZpbGUuYzoxNTg2OlxcdCAqIG1hbnVhbGx5IGV4dHJhY3QgcGFnZXMgdXNpbmcgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpIGFuZCB0aGVuXFxuZnMvZnVzZS9maWxlLmMtMTU4Ny1cXHQgKiBjb3B5IHRoYXQgdG8gYSBmb2xpb3MgYXJyYXkuXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xNTk5LVxcbmZzL2Z1c2UvZmlsZS5jOjE2MDA6XFx0XFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpaSwgXFx1MDAyNnBhZ2VzLFxcbmZzL2Z1c2UvZmlsZS5jLTE2MDEtXFx0XFx0XFx0XFx0XFx0ICAgICAqbmJ5dGVzcCAtIG5ieXRlcyxcXG4tLVxcbmZzL25ldGZzL2l0ZXJhdG9yLmM9MzY9c3NpemVfdCBuZXRmc19leHRyYWN0X3VzZXJfaXRlcihzdHJ1Y3QgaW92X2l0ZXIgKm9yaWcsIHNpemVfdCBvcmlnX2xlbixcXG4tLVxcbmZzL25ldGZzL2l0ZXJhdG9yLmMtNjYtXFx0d2hpbGUgKGNvdW50IFxcdTAwMjZcXHUwMDI2IG5wYWdlcyBcXHUwMDNjIG1heF9wYWdlcykge1xcbmZzL25ldGZzL2l0ZXJhdG9yLmM6Njc6XFx0XFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhvcmlnLCBcXHUwMDI2cGFnZXMsIGNvdW50LFxcbmZzL25ldGZzL2l0ZXJhdG9yLmMtNjgtXFx0XFx0XFx0XFx0XFx0ICAgICBtYXhfcGFnZXMgLSBucGFnZXMsIGV4dHJhY3Rpb25fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTM3Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW92X2l0ZXJfdWJ1ZihzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTM4Ny1cXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjM4ODpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTM4OS1cXHRcXHRcXHQgICAgICAgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIGludCBtYXhwYWdlcyxcXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTE2MTY9c3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjX3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE2NDYtXFx0XFx0LypcXG5saWIvaW92X2l0ZXIuYzoxNjQ3OlxcdFxcdCAqIFRoZSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzIGludGVyZmFjZSBvbmx5IGFsbG93cyBhbiBvZmZzZXRcXG5saWIvaW92X2l0ZXIuYy0xNjQ4LVxcdFxcdCAqIGludG8gdGhlIGZpcnN0IHBhZ2UuICBCcmVhayBvdXQgb2YgdGhlIGxvb3AgaWYgd2Ugc2VlIGFuXFxubGliL2lvdl9pdGVyLmMtMTY0OS1cXHRcXHQgKiBvZmZzZXQgaW50byBzdWJzZXF1ZW50IHBhZ2VzLCB0aGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBjYWxsXFxubGliL2lvdl9pdGVyLmM6MTY1MDpcXHRcXHQgKiBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzIGFnYWluIGZvciB0aGUgcmVtaW5kZXIuXFxubGliL2lvdl9pdGVyLmMtMTY1MS1cXHRcXHQgKi9cXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE2NjgtXFx0XFx0ICogVGhlIGNhbGxlciB3aWxsIGhhbmRsZSB0aGlzIHdpdGggYW5vdGhlciBjYWxsIHRvXFxubGliL2lvdl9pdGVyLmM6MTY2OTpcXHRcXHQgKiBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzLlxcbmxpYi9pb3ZfaXRlci5jLTE2NzAtXFx0XFx0ICovXFxuLS1cXG5saWIvaW92X2l0ZXIuYz0xNzQ5PXN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXFxuLS1cXG5saWIvaW92X2l0ZXIuYy0xNzg5LS8qKlxcbmxpYi9pb3ZfaXRlci5jOjE3OTA6ICogaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyAtIEV4dHJhY3QgYSBsaXN0IG9mIGNvbnRpZ3VvdXMgcGFnZXMgZnJvbSBhbiBpdGVyYXRvclxcbmxpYi9pb3ZfaXRlci5jLTE3OTEtICogQGk6IFRoZSBpdGVyYXRvciB0byBleHRyYWN0IGZyb21cXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE4MzEtICovXFxubGliL2lvdl9pdGVyLmM6MTgzMjpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxcbmxpYi9pb3ZfaXRlci5jLTE4MzMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlICoqKnBhZ2VzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTg2NC19XFxubGliL2lvdl9pdGVyLmM6MTg2NTpFWFBPUlRfU1lNQk9MX0dQTChpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKTtcXG5saWIvaW92X2l0ZXIuYy0xODY2LVxcbmxpYi9pb3ZfaXRlci5jPTE4Njc9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTkwOC0gKlxcbmxpYi9pb3ZfaXRlci5jOjE5MDk6ICogTGlrZSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCksIGJ1dCByZXR1cm5zIHBoeXNpY2FsbHkgY29udGlndW91cyByYW5nZXNcXG5saWIvaW92X2l0ZXIuYy0xOTEwLSAqIGNvbnRhaW5lZCBpbiBhIHNpbmdsZSBmb2xpbyBhcyBhIHNpbmdsZSBidmVjIGluc3RlYWQgb2YgbXVsdGlwbGUgZW50cmllcy5cXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTE5MTY9c3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTkzNC1cXG5saWIvaW92X2l0ZXIuYzoxOTM1OlxcdHNpemUgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFxcdTAwMjZwYWdlcywgbWF4X3NpemUsIGVudHJpZXNfbGVmdCxcXG5saWIvaW92X2l0ZXIuYy0xOTM2LVxcdFxcdFxcdGV4dHJhY3Rpb25fZmxhZ3MsIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxubGliL3NjYXR0ZXJsaXN0LmM9MTExMz1zdGF0aWMgc3NpemVfdCBleHRyYWN0X3VzZXJfdG9fc2coc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubGliL3NjYXR0ZXJsaXN0LmMtMTEyOS1cXHRkbyB7XFxubGliL3NjYXR0ZXJsaXN0LmM6MTEzMDpcXHRcXHRyZXMgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFxcdTAwMjZwYWdlcywgbWF4c2l6ZSwgc2dfbWF4LFxcbmxpYi9zY2F0dGVybGlzdC5jLTExMzEtXFx0XFx0XFx0XFx0XFx0ICAgICBleHRyYWN0aW9uX2ZsYWdzLCBcXHUwMDI2b2ZmKTtcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTcwNz1zdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2V4dHJhY3RfcGFnZXNfa3ZlYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy03MzQtXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6NzM1OlxcdFxcdGxlbiA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoXFx1MDAyNml0ZXIsIFxcdTAwMjZwYWdlcywgMTAwICogMTAyNCxcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy03MzYtXFx0XFx0XFx0XFx0XFx0ICAgICBBUlJBWV9TSVpFKHBhZ2VsaXN0KSwgMCwgXFx1MDAyNm9mZnNldDApO1xcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM9Nzg3PXN0YXRpYyB2b2lkIF9faW5pdCBpb3Zfa3VuaXRfZXh0cmFjdF9wYWdlc19idmVjKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTgxMi1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo4MTM6XFx0XFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhcXHUwMDI2aXRlciwgXFx1MDAyNnBhZ2VzLCAxMDAgKiAxMDI0LFxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTgxNC1cXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUocGFnZWxpc3QpLCAwLCBcXHUwMDI2b2Zmc2V0MCk7XFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz04NjU9c3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9leHRyYWN0X3BhZ2VzX2ZvbGlvcShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy04OTYtXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6ODk3OlxcdFxcdFxcdGxlbiA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoXFx1MDAyNml0ZXIsIFxcdTAwMjZwYWdlcywgMTAwICogMTAyNCxcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy04OTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBBUlJBWV9TSVpFKHBhZ2VsaXN0KSwgMCwgXFx1MDAyNm9mZnNldDApO1xcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM9OTQ0PXN0YXRpYyB2b2lkIF9faW5pdCBpb3Zfa3VuaXRfZXh0cmFjdF9wYWdlc194YXJyYXkoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtOTc0LVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjk3NTpcXHRcXHRcXHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKFxcdTAwMjZpdGVyLCBcXHUwMDI2cGFnZXMsIDEwMCAqIDEwMjQsXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtOTc2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQVJSQVlfU0laRShwYWdlbGlzdCksIDAsIFxcdTAwMjZvZmZzZXQwKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTczNzA9c3NpemVfdCBza2Jfc3BsaWNlX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03Mzg5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjczOTA6XFx0XFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpdGVyLCBcXHUwMDI2cHBhZ2VzLCBtYXhzaXplLCBuciwgMCwgXFx1MDAyNm9mZik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzM5MS1cXHRcXHRpZiAobGVuIFxcdTAwM2M9IDApIHtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTQyMT1zdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTAwLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjUwMTpcXHRcXHRcXHRyYyA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoaXRlciwgXFx1MDAyNnBhZ2VzLFxcbm5ldC90bHMvdGxzX2RldmljZS5jLTUwMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY29weSwgMSwgMCwgXFx1MDAyNm9mZik7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTEwMTU9c3RhdGljIGludCB0bHNfc3dfc2VuZG1zZ19zcGxpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTEwMjQtXFxubmV0L3Rscy90bHNfc3cuYzoxMDI1OlxcdFxcdHBhcnQgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBcXHUwMDI2cGFnZXMsXFxubmV0L3Rscy90bHNfc3cuYy0xMDI2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHRyeV90b19jb3B5LCAxLCAwLCBcXHUwMDI2b2ZmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6NTkuMDEyOTM5MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NDkzNDg4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlJlZmxlY3Rpbmcgb24gS2VybmVsIFN5bWJvbCBFeHBvcnQgYW5kIFN0YXRpYyBGdW5jdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlc2UgSS9PIHZlY3RvciBpdGVyYXRpb24gZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIGBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzYCBpcyB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbjsgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGdldHMgZXhwb3J0ZWQgYW5kIHVzZWQgZXh0ZXJuYWxseS4gTWFrZXMgc2Vuc2UuIEl0IGFjdHMgYXMgdGhlIHdyYXBwZXIgZm9yIHRoZSBsb3dlci1sZXZlbCwgc3RhdGljIGZ1bmN0aW9ucyB1bmRlcm5lYXRoLiBUaGVyZWZvcmUsIGFkZGluZyB0aGF0IHRvIHRoZSBmb2N1cyBzeW1ib2xzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGVudHJ5IHBvaW50LlxuXG5Ob3csIEknbSBub3RpbmcgdGhhdCBgZXh0cmFjdF94YXJyYXlfdG9fc2dgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCBpdCAqaXMqIGNhbGxlZCBieSBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gU28gaXQncyBzdGlsbCBwbGF5aW5nIGEgY3J1Y2lhbCByb2xlLCBqdXN0IG5vdCBhIGdsb2JhbGx5IHZpc2libGUgb25lLiBLZWVwIHRoYXQgZGVwZW5kZW5jeSBpbiBtaW5kIGFzIEkgYnVpbGQgb3V0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjExLjU2MjI5MDU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc0MTg0MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dHJhY3RfaXRlcl90b19zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJjcnlwdG8vYWZfYWxnLmM9OTA5PWludCBhZl9hbGdfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxuY3J5cHRvL2FmX2FsZy5jLTEwMjYtXFxuY3J5cHRvL2FmX2FsZy5jOjEwMjc6XFx0XFx0XFx0cGxlbiA9IGV4dHJhY3RfaXRlcl90b19zZyhcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLCBcXHUwMDI2c2d0YWJsZSxcXG5jcnlwdG8vYWZfYWxnLmMtMTAyOC1cXHRcXHRcXHRcXHRcXHRcXHQgIE1BWF9TR0xfRU5UUyAtIHNnbC1cXHUwMDNlY3VyLCAwKTtcXG4tLVxcbmNyeXB0by9hZl9hbGcuYz0xMjExPWludCBhZl9hbGdfZ2V0X3JzZ2woc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBmbGFncyxcXG4tLVxcbmNyeXB0by9hZl9hbGcuYy0xMjQ4LVxcdFxcdHNnX2luaXRfdGFibGUocnNnbC1cXHUwMDNlc2dsLnNndC5zZ2wsIEFMR19NQVhfUEFHRVMpO1xcbmNyeXB0by9hZl9hbGcuYzoxMjQ5OlxcdFxcdGVyciA9IGV4dHJhY3RfaXRlcl90b19zZyhcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgc2VnbGVuLCBcXHUwMDI2cnNnbC1cXHUwMDNlc2dsLnNndCxcXG5jcnlwdG8vYWZfYWxnLmMtMTI1MC1cXHRcXHRcXHRcXHRcXHQgQUxHX01BWF9QQUdFUywgMCk7XFxuLS1cXG5jcnlwdG8vYWxnaWZfaGFzaC5jPTYzPXN0YXRpYyBpbnQgaGFzaF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbmNyeXB0by9hbGdpZl9oYXNoLmMtMTE4LVxcbmNyeXB0by9hbGdpZl9oYXNoLmM6MTE5OlxcdFxcdGVyciA9IGV4dHJhY3RfaXRlcl90b19zZyhcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgTE9OR19NQVgsXFxuY3J5cHRvL2FsZ2lmX2hhc2guYy0xMjAtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjdHgtXFx1MDAzZXNnbC5zZ3QsIG5wYWdlcywgMCk7XFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz00Mzg3PXN0YXRpYyB2b2lkICpzbWIyX2dldF9hZWFkX3JlcShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgc3RydWN0IHNtYl9ycXN0ICpycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtNDQyMS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzo0NDIyOlxcdFxcdHJjID0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIGNvdW50LCBcXHUwMDI2c2d0YWJsZSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy00NDIzLVxcdFxcdFxcdFxcdFxcdG51bV9zZ3MgLSBzZ3RhYmxlLm5lbnRzLCAwKTtcXG4tLVxcbmZzL3NtYi9zbWJkaXJlY3QvbXIuYz0yNDE9c3RhdGljIGludCBzbWJkaXJlY3RfaXRlcl90b19zZ3Qoc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvc21iL3NtYmRpcmVjdC9tci5jLTI0OC1cXG5mcy9zbWIvc21iZGlyZWN0L21yLmM6MjQ5OlxcdHJldCA9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBpb3ZfaXRlcl9jb3VudChpdGVyKSwgc2d0LCBtYXhfc2csIDApO1xcbmZzL3NtYi9zbWJkaXJlY3QvbXIuYy0yNTAtXFx0V0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdWlvLmg9NDE3PXN0cnVjdCBzZ190YWJsZTtcXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjQxODpzc2l6ZV90IGV4dHJhY3RfaXRlcl90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBsZW4sXFxuaW5jbHVkZS9saW51eC91aW8uaC00MTktXFx0XFx0XFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ3RhYmxlLCB1bnNpZ25lZCBpbnQgc2dfbWF4LFxcbi0tXFxubGliL3NjYXR0ZXJsaXN0LmM9MTMzNT1zdGF0aWMgc3NpemVfdCBleHRyYWN0X3hhcnJheV90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5saWIvc2NhdHRlcmxpc3QuYy0xMzgxLS8qKlxcbmxpYi9zY2F0dGVybGlzdC5jOjEzODI6ICogZXh0cmFjdF9pdGVyX3RvX3NnIC0gRXh0cmFjdCBwYWdlcyBmcm9tIGFuIGl0ZXJhdG9yIGFuZCBhZGQgdG8gYW4gc2dsaXN0XFxubGliL3NjYXR0ZXJsaXN0LmMtMTM4My0gKiBAaXRlcjogVGhlIGl0ZXJhdG9yIHRvIGV4dHJhY3QgZnJvbVxcbi0tXFxubGliL3NjYXR0ZXJsaXN0LmMtMTQwOC0gKi9cXG5saWIvc2NhdHRlcmxpc3QuYzoxNDA5OnNzaXplX3QgZXh0cmFjdF9pdGVyX3RvX3NnKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc2l6ZV90IG1heHNpemUsXFxubGliL3NjYXR0ZXJsaXN0LmMtMTQxMC1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndGFibGUsIHVuc2lnbmVkIGludCBzZ19tYXgsXFxuLS1cXG5saWIvc2NhdHRlcmxpc3QuYy0xNDM4LX1cXG5saWIvc2NhdHRlcmxpc3QuYzoxNDM5OkVYUE9SVF9TWU1CT0xfR1BMKGV4dHJhY3RfaXRlcl90b19zZyk7XFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz0xMDc2PWlvdl9rdW5pdF9pdGVyX3RvX3NnX2NoZWNrKHN0cnVjdCBrdW5pdCAqdGVzdCwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTA4OC1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzoxMDg5OlxcdGkgPSBleHRyYWN0X2l0ZXJfdG9fc2coaXRlciwgYnVmc2l6ZSwgZGF0YS1cXHUwMDNlc2d0LCAwLCAwKTtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMDkwLVxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBpLCAwKTtcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTEwOTItXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6MTA5MzpcXHRpID0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIGJ1ZnNpemUgLSB0YWlsLCBkYXRhLVxcdTAwM2VzZ3QsIDEsIDApO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTEwOTQtXFx0S1VOSVRfQVNTRVJUX0xFKHRlc3QsIGksIGJ1ZnNpemUgLSB0YWlsKTtcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTEwOTYtXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6MTA5NzpcXHRpICs9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBidWZzaXplIC0gdGFpbCAtIGksIGRhdGEtXFx1MDAzZXNndCxcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMDk4LVxcdFxcdFxcdFxcdGRhdGEtXFx1MDAzZW5wYWdlcyAtIGRhdGEtXFx1MDAzZXNndC1cXHUwMDNlbmVudHMsIDApO1xcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTEwMS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzoxMTAyOlxcdGkgKz0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIHRhaWwsIGRhdGEtXFx1MDAzZXNndCxcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMTAzLVxcdFxcdFxcdFxcdGRhdGEtXFx1MDAzZW5wYWdlcyAtIGRhdGEtXFx1MDAzZXNndC1cXHUwMDNlbmVudHMsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDoxMy45MzY0ODA1NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTA3NjExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBleHRyYWN0X2l0ZXJfdG9fc2dgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGV4dHJhY3RfaXRlcl90b19zZ2AgaXMgdGhlIGtleSBmdW5jdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGgsIHRoZSBvbmUgdGhhdCdzIGV4cG9ydGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aC4gTXkgYnJhaW4ncyBhbHJlYWR5IG1ha2luZyBhc3NvY2lhdGlvbnMuLi4gbGV0J3Mgc2VlLCB3aGF0IGZ1bmN0aW9ucyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aD9cblxuQWxyaWdodCwgbGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGBuZXRmc193Yl9iZWdpbmAsIGBuZXRmc193Yl9lbmRgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAsIGBuZXRmc193cml0ZXBhZ2VzYCwgYW5kIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gbGlrZSBuYXR1cmFsIGNvbXBhbmlvbnMuIEkgbmVlZCB0byBncmFzcCBob3cgZGF0YSBnZXRzIHByZXBwZWQsIHdyaXR0ZW4sIGFuZCBmaW5hbGl6ZWQgd2l0aGluIHRoZSBuZXRmcyBjb250ZXh0LiBJJ20gZ29pbmcgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXNlIGZ1bmN0aW9ucyB1dGlsaXplIG9yIGludGVyYWN0IHdpdGggYGlvdl9pdGVyX2V4dHJhY3RfcGFnZXNgLCBhcyB0aGF04oCZcyBhIGxpa2VseSBwYXJhbGxlbCBmdW5jdGlvbiBhbmQgSSBuZWVkIHRvIGVuc3VyZSBJIGFtIHVwIHRvIGRhdGUgd2l0aCBiZXN0IHByYWN0aWNlLlxuXG5GaXJzdCBvZmYsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBUaGF0J2xsIGluZm9ybSBob3cgd2lkZWx5IGF2YWlsYWJsZSBpdCBpcyBhbmQgd2hldGhlciBpdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB1bmJ1ZmZlcmVkIHdyaXRlcy4gVGhpcyBnaXZlcyBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNjcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjQ6MTkuMjExNTU5ODk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDExMTM3Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zNzE9ZmlsZXN5c3RlbSBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgVkZTIHJlYWQvd3JpdGVfaXRlciBtZXRob2RzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtMzc2LVxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6Mzc3OlxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3OC1cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9Mzk3PVRoZXJlIGFyZSB0aHJlZSBmdW5jdGlvbnMgZm9yIHdyaXRlczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwMi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cCk7XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDo0MDM6XFx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcbi0tXFxuZnMvOXAvdmZzX2ZpbGUuYz00MDE9djlmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy85cC92ZnNfZmlsZS5jLTQwOC1cXHRpZiAoZmlkLVxcdTAwM2Vtb2RlIFxcdTAwMjYgKFA5TF9ESVJFQ1QgfCBQOUxfTk9XUklURUNBQ0hFKSlcXG5mcy85cC92ZnNfZmlsZS5jOjQwOTpcXHRcXHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzLzlwL3Zmc19maWxlLmMtNDEwLVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz01MDE9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNC1cXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcXHUwMDI2aWN0eC1cXHUwMDNlZmxhZ3MpKVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NTE1OlxcdFxcdHJldHVybiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MTYtXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTYte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6NjU6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9jb2xsZWN0KHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTY2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTkzLSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjk0OnN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy05NS17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTAtXFx0XFx0aWYgKCFyZXRyeSkge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1MTpcXHRcXHRcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1Mi1cXHRcXHRcXHRzdWJyZXEgPSBOVUxMO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk3LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE5ODpcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk5LVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjAyLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwMzpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDQte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA2LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwNzpcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwOC1cXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE1OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg0LVxcdGlmIChhc3luYykge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI4NTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNndyZXEtXFx1MDAzZXdvcmssIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4Ni1cXHRcXHR3cmVxLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4OS1cXHR9IGVsc2Uge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI5MDpcXHRcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI5MS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDktXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEwLS8qKlxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMi0gKiBAaW9jYjogSU8gc3RhdGUgc3RydWN0dXJlXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjItICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzIzOnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtXFx0XFx0XFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MjpcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4My1vdXQ6XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODYtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4NzpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0yOTk3PXNzaXplX3QgY2lmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDA0LVxcdGlmIChpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19ESVJFQ1QpIHtcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDA1OlxcdFxcdHdyaXR0ZW4gPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwNi1cXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgQ0lGU19DQUNIRV9SRUFEKGNpbm9kZSkpIHtcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMzNjE9c3RhdGljIGludCBjaWZzX3N3YXBfcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMzY3LVxcdGVsc2VcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzY4OlxcdFxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgaXRlciwgTlVMTCk7XFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzM2OS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaD00MDE9c3NpemVfdCBuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDAyLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDAzOnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDA0OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDA1LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDoyMS4yMjI3MDgyMjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk5NDUyNTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkZvY3VzaW5nIHRoZSBMZW5zOiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgKipcblxuUmlnaHQsIHNvIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgIGFuZCBpdHMgbG9ja2VkIGNvdW50ZXJwYXJ0LCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGFyZSBhbHJlYWR5IGV4cG9ydGVkLiBHaXZlbiB0aGF0LCBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIGFkZCB0aGVtIHNwZWNpZmljYWxseSB0byB0aGUgZm9jdXMgc3ltYm9scy4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBiaXRzLCBhbmQgaW5jbHVkaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmluaXRlbHkgc2hhcnBlbiBvdXIgdmlldyBvZiB0aGUgdW5idWZmZXJlZCB3cml0ZSBwYXRoLiBUaGlzIHNlZW1zIGxpa2UgYSBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBjaGVjayBgbmV0ZnNfd3JpdGVwYWdlc2AuIEl0J3MgYSBrZXkgZnVuY3Rpb24gcmVsYXRlZCB0byB3cml0ZSBvcGVyYXRpb25zLCBhbmQgd2UgY2FuIGNvbXBhcmUgYW5kIGNvbnRyYXN0IHRoZSBkaWZmZXJlbnQgYXBwcm9hY2hlcy4gV2UgY2FuIHVzZSBpdCBhcyBhIHJlZmVyZW5jZSwgb3IgYXMgYSBjb250cmFzdGluZyB2aWV3IG9mIHRoZSB3cml0ZSBwcm9jZXNzLCBpbiBvcmRlciB0byBlbmhhbmNlIG91ciB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDcwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjMwLjIxNzIzNjc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc3NDkzNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3dyaXRlcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD00NjA9Zm9yIGl0IHRvIGludGVydmVuZSBhdCB2YXJpb3VzIHRpbWVzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDYzLVxcdGludCBuZXRmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmb2xpbyAqKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjQ2NDpcXHRpbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ2NS1cXHRcXHRcXHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4tLVxcbmZzLzlwL3Zmc19hZGRyLmM9MTYwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdjlmc19hZGRyX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy85cC92ZnNfYWRkci5jLTE2Ni1cXHQuZGlyZWN0X0lPXFx0XFx0PSBub29wX2RpcmVjdF9JTyxcXG5mcy85cC92ZnNfYWRkci5jOjE2NzpcXHQud3JpdGVwYWdlc1xcdFxcdD0gbmV0ZnNfd3JpdGVwYWdlcyxcXG5mcy85cC92ZnNfYWRkci5jLTE2OC1cXHQubWlncmF0ZV9mb2xpb1xcdFxcdD0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxcbi0tXFxuZnMvYWZzL3dyaXRlLmM9MjI4PWludCBhZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLS1cXG5mcy9hZnMvd3JpdGUuYy0yNDEtXFxuZnMvYWZzL3dyaXRlLmM6MjQyOlxcdHJldCA9IG5ldGZzX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTtcXG5mcy9hZnMvd3JpdGUuYy0yNDMtXFx0dXBfcmVhZChcXHUwMDI2dm5vZGUtXFx1MDAzZXZhbGlkYXRlX2xvY2spO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01MjI9c3RhdGljIHZvaWQgbmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NDUtICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo1NDY6aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NDctXFx0XFx0ICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjExLX1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYxMjpFWFBPUlRfU1lNQk9MKG5ldGZzX3dyaXRlcGFnZXMpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjEzLVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmM9MzM3ND1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNpZnNfYWRkcl9vcHMgPSB7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMzc2LVxcdC5yZWFkYWhlYWRcXHQ9IG5ldGZzX3JlYWRhaGVhZCxcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzc3OlxcdC53cml0ZXBhZ2VzXFx0PSBuZXRmc193cml0ZXBhZ2VzLFxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzNzgtXFx0LmRpcnR5X2ZvbGlvXFx0PSBuZXRmc19kaXJ0eV9mb2xpbyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMzOTc9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzX3NtYWxsYnVmID0ge1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzOTgtXFx0LnJlYWRfZm9saW9cXHQ9IG5ldGZzX3JlYWRfZm9saW8sXFxuZnMvc21iL2NsaWVudC9maWxlLmM6MzM5OTpcXHQud3JpdGVwYWdlc1xcdD0gbmV0ZnNfd3JpdGVwYWdlcyxcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zNDAwLVxcdC5kaXJ0eV9mb2xpb1xcdD0gbmV0ZnNfZGlydHlfZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9NDE5PWludCBuZXRmc193cml0ZV9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKiwgc3RydWN0IGZpbGUgKixcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MjEtXFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICoqLCB2b2lkICoqZnNkYXRhKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDIyOmludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MjMtXFx0XFx0ICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjMyLjI5NDc0MDc3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE1Nzg2ODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGtlcm5lbCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZWJhY2sqKlxuXG5Pa2F5LCBgbmV0ZnNfd3JpdGVwYWdlc2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB3cml0ZSBvcGVyYXRpb25zIHdpdGhpbiBhIG5ldHdvcmsgZmlsZXN5c3RlbS4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLiBUaGF0IHNob3VsZCBiZSB0aGUgYXRvbWljIHVuaXQsIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayB3aXRoaW4gdGhlIG92ZXJhbGwgd3JpdGViYWNrIHNjaGVtZS4gVW5kZXJzdGFuZGluZyBob3cgYSAqc2luZ2xlKiBwYWdlIGdldHMgZmx1c2hlZCBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIGFyY2hpdGVjdHVyZSdzIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBsaWtlbHkgb2ZmZXJzIGluc2lnaHRzIGludG8gaG93IGluZGl2aWR1YWwgZGF0YSBibG9ja3MgYXJlIHRyYW5zbWl0dGVkIG92ZXIgdGhlIG5ldHdvcmsgYW5kIGFueSBhc3NvY2lhdGVkIGJ1ZmZlcmluZyBvciBjYWNoaW5nIHN0cmF0ZWdpZXMgdXNlZCBhdCB0aGUgY2xpZW50IG9yIHNlcnZlci4gTGV0J3Mgc2VlIGlmIHRoaXMgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgIGZ1bmN0aW9uIGdpdmVzIHVzIGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IGBuZXRmc193cml0ZXBhZ2VzYCBvcGVyYXRlcyBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDo0NC40NTI2MTMwNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTQ4MDUwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0PTQzNj1hIHNpbmdsZSBSUEMgKGFuZCBub3Qgd3JpdHRlbiBiYWNrKSBhbmQgaXMgbWFpbnRhaW5lZCBhcyBhIG1vbm9saXRoaWMgYmxvYlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00NDAtXFx0dm9pZCBuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjQ0MTpcXHRpbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ0Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4tLVxcbmZzL2Fmcy9kaXIuYz0yMjAxPXN0YXRpYyBpbnQgYWZzX2Rpcl93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTIyMjItXFx0XFx0XFx0XFx0ICAgICBpX3NpemVfcmVhZChcXHUwMDI2ZHZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZSkpO1xcbmZzL2Fmcy9kaXIuYzoyMjIzOlxcdFxcdHJldCA9IG5ldGZzX3dyaXRlYmFja19zaW5nbGUobWFwcGluZywgd2JjLCBcXHUwMDI2aXRlcik7XFxuZnMvYWZzL2Rpci5jLTIyMjQtXFx0XFx0aWYgKHJldCA9PSAxKVxcbi0tXFxuZnMvYWZzL3N5bWxpbmsuYz0yMzQ9aW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9hZnMvc3ltbGluay5jLTI1My1cXHRcXHRcXHRcXHQgICAgIGlfc2l6ZV9yZWFkKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUpKTtcXG5mcy9hZnMvc3ltbGluay5jOjI1NDpcXHRcXHRyZXQgPSBuZXRmc193cml0ZWJhY2tfc2luZ2xlKG1hcHBpbmcsIHdiYywgXFx1MDAyNml0ZXIpO1xcbmZzL2Fmcy9zeW1saW5rLmMtMjU1LVxcdH1cXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NzE0PXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW9fc2luZ2xlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04MjQtLyoqXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MjU6ICogbmV0ZnNfd3JpdGViYWNrX3NpbmdsZSAtIFdyaXRlIGJhY2sgYSBtb25vbGl0aGljIHBheWxvYWRcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgyNi0gKiBAbWFwcGluZzogVGhlIG1hcHBpbmcgdG8gd3JpdGUgZnJvbVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04MzUtICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MzY6aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04MzctXFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTkwMC19XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo5MDE6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZWJhY2tfc2luZ2xlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaD00MTA9c3NpemVfdCBuZXRmc19yZWFkX3NpbmdsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDExOmludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MTItXFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjQ2LjQ2NzQyNTkwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODAzMTg0MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0RlMgV3JpdGViYWNrIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvdGVudGlhbGx5IGludm9sdmVkIGluIHNvbWUgY29yZSBuZXR3b3JrIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGNhY2hlZmlsZXNfYnVyeV9vYmplY3RgLiBJZiB0aGF0J3MgcmVsZXZhbnQsIHRoZXJlJ3MgYSBnb29kIHJlYXNvbiB0byBpbnZlc3RpZ2F0ZSBob3cgaXQgd29ya3Mgd2l0aCB3cml0ZWJhY2suIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW5zdHJ1bWVudGFsLiBUaGlzIGlzIGJlY2F1c2UgSSB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIGNhY2hpbmcgd29ya3MuIEFuZCB0aHVzLCBJJ2xsIHN0YXJ0IHdpdGggdGhpcyBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg2NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjUxLjI3MDYxMzYwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0Njc5NjY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWNoZWZpbGVzX2J1cnlfb2JqZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM9MzkyPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfaW52YWxpZGF0ZV9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpXFxuLS1cXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTQzNS1cXHRcXHRcXHRpZiAoIUlTX0VSUihvYmopKVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6NDM2OlxcdFxcdFxcdFxcdGNhY2hlZmlsZXNfYnVyeV9vYmplY3Qodm9sdW1lLVxcdTAwM2VjYWNoZSwgb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMtNDM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBmYW4sIG9iaixcXG4tLVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaD0yNzY9ZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaC0yNzctXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUpO1xcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaDoyNzg6ZXh0ZXJuIGludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjc5LVxcdFxcdFxcdFxcdCAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM9MjMxPXN0YXRpYyBpbnQgY2FjaGVmaWxlc191bmxpbmsoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTI2OC0gKi9cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6MjY5OmludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMjcwLVxcdFxcdFxcdCAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTU4OD1ib29sIGNhY2hlZmlsZXNfbG9va191cF9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNjE3LVxcdFxcdGVsc2VcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NjE4OlxcdFxcdFxcdHJldCA9IGNhY2hlZmlsZXNfYnVyeV9vYmplY3Qodm9sdW1lLVxcdTAwM2VjYWNoZSwgb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy02MTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYW4sIGRlLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTc1OD1pbnQgY2FjaGVmaWxlc19jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgc3RydWN0IGRlbnRyeSAqZGlyLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTc4NS1cXHQvKlxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo3ODY6XFx0ICogY2FjaGVmaWxlc19idXJ5X29iamVjdCgpIGV4cGVjdHMgMiByZWZlcmVuY2VzIHRvICd2aWN0aW0nLFxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy03ODctXFx0ICogYW5kIGRyb3BzIG9uZS5cXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy03ODktXFx0ZGdldCh2aWN0aW0pO1xcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo3OTA6XFx0cmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdChjYWNoZSwgTlVMTCwgZGlyLCB2aWN0aW0sXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTc5MS1cXHRcXHRcXHRcXHQgICAgIEZTQ0FDSEVfT0JKRUNUX1dBU19DVUxMRUQpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy92b2x1bWUuYz0xOD12b2lkIGNhY2hlZmlsZXNfYWNxdWlyZV92b2x1bWUoc3RydWN0IGZzY2FjaGVfdm9sdW1lICp2Y29va2llKVxcbi0tXFxuZnMvY2FjaGVmaWxlcy92b2x1bWUuYy02My1cXHRcXHRcXHRpZiAoIUlTX0VSUih2ZGVudHJ5KSlcXG5mcy9jYWNoZWZpbGVzL3ZvbHVtZS5jOjY0OlxcdFxcdFxcdFxcdGNhY2hlZmlsZXNfYnVyeV9vYmplY3QoY2FjaGUsIE5VTEwsIGNhY2hlLVxcdTAwM2VzdG9yZSxcXG5mcy9jYWNoZWZpbGVzL3ZvbHVtZS5jLTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB2ZGVudHJ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDo1My4zMTc0MTY2NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMDA5MDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENhY2hlZmlsZXMgSW50ZXJuYWwgTWVjaGFuaWNzKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgaW50ZXJuYWwgdG8gY2FjaGVmaWxlcywgZ290IGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgdGhlIHRlbXBvcmFyeSBmaWxlcyBhcmUgY3JlYXRlZC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBhIGZpbGUgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHdoZXJlIHRoZSBncm91bmR3b3JrIGlzIGxhaWQgZm9yIHRoZSBjYWNoZSBmaWxlLiBJIGV4cGVjdCB0aGVyZSdzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gdGhlcmUsIGxpa2VseSByZWxhdGVkIHRvIHNlY3VyZSBmaWxlIG5hbWluZywgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzc4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjQ6NTcuMDI3NTEwMDA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAyOTc0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNhY2hlZmlsZXNfY3JlYXRlX3RtcGZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYz0zOTI9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19pbnZhbGlkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSlcXG4tLVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMtNDA3LVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6NDA4OlxcdG5ld19maWxlID0gY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShvYmplY3QpO1xcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMtNDA5LVxcdGlmIChJU19FUlIobmV3X2ZpbGUpKVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oPTI5NT1leHRlcm4gaW50IGNhY2hlZmlsZXNfY2hlY2tfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjk2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRpciwgY2hhciAqZmlsZW5hbWUpO1xcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaDoyOTc6ZXh0ZXJuIHN0cnVjdCBmaWxlICpjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KTtcXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjk4LWV4dGVybiBib29sIGNhY2hlZmlsZXNfY29tbWl0X3RtcGZpbGUoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTM4Nz1pbnQgY2FjaGVmaWxlc19kZWxldGVfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQwOS0gKi9cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NDEwOnN0cnVjdCBmaWxlICpjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy00MTEte1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTQ4OD1zdGF0aWMgYm9vbCBjYWNoZWZpbGVzX2NyZWF0ZV9maWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ5Ny1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NDk4OlxcdGZpbGUgPSBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKG9iamVjdCk7XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ5OS1cXHRpZiAoSVNfRVJSKGZpbGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDo1OS4wMzA0OTU3NjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ5MzczOTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2FjaGVmaWxlcyBXcml0ZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYGNhY2hlZmlsZXNgIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdyaXRlIHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB3cml0aW5nIGRhdGEuIEZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmbG93OiBgbmV0ZnNfd2JfYmVnaW5gLCBgbmV0ZnNfd2JfZW5kYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGFuZCBpdHMgbG9ja2VkIGNvdW50ZXJwYXJ0IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYWxvbmcgd2l0aCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIEknbSBhbHNvIGluY2x1ZGluZyBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AgYW5kIGBleHRyYWN0X2l0ZXJfdG9fc2dgIHNpbmNlIHRoZXNlIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCBkdXJpbmcgdGhlIEkvTyBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHdpdGggc2NhdHRlci9nYXRoZXIgbGlzdHMuIEJlZm9yZSBtb3Zpbmcgb24sIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYG5ldGZzX3dyaXRlX2JlZ2luYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgSSdtIHdvcmtpbmcgaW4sIGJlY2F1c2UgaXQgY291bGQgcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnRleHQsIG9yIGJlIGEgbWlzc2luZyBsaW5rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQxMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNTowNi41MjQyMzg0NzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTUxNjkxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfd3JpdGVfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD00NzY9VGhlcmUgaXMgYWxzbyBhIGRlcHJlY2F0ZWQgZnVuY3Rpb24gZm9yIGZpbGVzeXN0ZW1zIHRoYXQgc3RpbGwgdXNlIHRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00NzgtXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDo0Nzk6XFx0aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDgwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxuZnMvY2VwaC9hZGRyLmM9MTg3OD1zdGF0aWMgaW50IGNlcGhfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvY2VwaC9hZGRyLmMtMTg4Ny1cXG5mcy9jZXBoL2FkZHIuYzoxODg4OlxcdHIgPSBuZXRmc193cml0ZV9iZWdpbihcXHUwMDI2Y2ktXFx1MDAzZW5ldGZzLCBmaWxlLCBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGxlbiwgZm9saW9wLCBOVUxMKTtcXG5mcy9jZXBoL2FkZHIuYy0xODg5LVxcdGlmIChyIFxcdTAwM2MgMClcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz01NjE9c3RhdGljIGJvb2wgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTk1LS8qKlxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1OTY6ICogbmV0ZnNfd3JpdGVfYmVnaW4gLSBIZWxwZXIgdG8gcHJlcGFyZSBmb3Igd3JpdGluZyBbREVQUkVDQVRFRF1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTk3LSAqIEBjdHg6IFRoZSBuZXRmcyBjb250ZXh0XFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI3LSAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo2Mjg6aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02MjktXFx0XFx0ICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNC19XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjcxNTpFWFBPUlRfU1lNQk9MKG5ldGZzX3dyaXRlX2JlZ2luKTtcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzE2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQxOD1pbnQgbmV0ZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZm9saW8gKik7XFxuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQxOTppbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICosIHN0cnVjdCBmaWxlICosXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQyMC1cXHRcXHQgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNTowOC45MTk0MTM2ODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkxODE5OTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQWRkaW5nIGBuZXRmc193cml0ZV9iZWdpbmAgdG8gRm9jdXMgU3ltYm9scyBhbmQgVmVyaWZ5aW5nIGBuZXRmc19wZXJmb3JtX3dyaXRlYCBFeHBvcnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBgbmV0ZnNfd3JpdGVfYmVnaW5gICppcyogZXhwb3J0ZWQuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuIEkgbmVlZCB0byBnZXQgdGhhdCBhZGRlZCB0byB0aGUgZm9jdXMgc3ltYm9scyByaWdodCBhd2F5LiBJdCdzIGNsZWFybHkgYSBrZXkgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSwgc28gSSBuZWVkIHRvIHRyYWNrIGl0IGNsb3NlbHkuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGlzIGV4cG9ydGVkLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHRoaXMgYW5hbHlzaXMsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIEkgY2FuIHdvcmsgd2l0aCBpdCwgb3IgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uLCBzbyBJJ2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IGl0J3MgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mzc1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6MTcuODM3NjE1MDM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk0MTk4MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3BlcmZvcm1fd3JpdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zOTc9VGhlcmUgYXJlIHRocmVlIGZ1bmN0aW9ucyBmb3Igd3JpdGVzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDAwLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjQwMTpcXHRzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00MDItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTU2MT1zdGF0aWMgYm9vbCBuZXRmc19za2lwX2ZvbGlvX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgc2l6ZV90IGxlbixcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02MjQtICpcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NjI1OiAqIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIGRlcHJlY2F0ZWQgYW5kIG5ldGZzX3BlcmZvcm1fd3JpdGUoKVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02MjYtICogdXNlZCBpbnN0ZWFkLlxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz0zNz12b2lkIG5ldGZzX3VwZGF0ZV9pX3NpemUoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTczLS8qKlxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NzQ6ICogbmV0ZnNfcGVyZm9ybV93cml0ZSAtIENvcHkgZGF0YSBpbnRvIHRoZSBwYWdlY2FjaGUuXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy03NS0gKiBAaW9jYjogVGhlIG9wZXJhdGlvbiBwYXJhbWV0ZXJzXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTg2LSAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6ODc6c3NpemVfdCBuZXRmc19wZXJmb3JtX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtODgtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0Mi19XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0NDM6RVhQT1JUX1NZTUJPTChuZXRmc19wZXJmb3JtX3dyaXRlKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0NC1cXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY4PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4My1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ4NDpcXHRyZXR1cm4gbmV0ZnNfcGVyZm9ybV93cml0ZShpb2NiLCBmcm9tLCBuZXRmc19ncm91cCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODUtfVxcbi0tXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmM9MTk9c3RhdGljIHZvaWQgbmV0ZnNfcGdwcml2Ml9jb3B5X2ZvbGlvKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpjcmVxLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMjctXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmM6Mjg6XFx0LyogbmV0ZnNfcGVyZm9ybV93cml0ZSgpIG1heSBzaGlmdCBpX3NpemUgYXJvdW5kIHRoZSBwYWdlIG9yIGZyb20gb3V0XFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMjktXFx0ICogb2YgdGhlIHBhZ2UgdG8gYmV5b25kIGl0LCBidXQgY2Fubm90IG1vdmUgaV9zaXplIGludG8gb3IgdGhyb3VnaCB0aGVcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MzIwPXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTMzOS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjM0MDpcXHQvKiBuZXRmc19wZXJmb3JtX3dyaXRlKCkgbWF5IHNoaWZ0IGlfc2l6ZSBhcm91bmQgdGhlIHBhZ2Ugb3IgZnJvbSBvdXRcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTM0MS1cXHQgKiBvZiB0aGUgcGFnZSB0byBiZXlvbmQgaXQsIGJ1dCBjYW5ub3QgbW92ZSBpX3NpemUgaW50byBvciB0aHJvdWdoIHRoZVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTIwMj1lbnVtIG5ldGZzX2lvX29yaWdpbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtMjExLVxcdE5FVEZTX1dSSVRFQkFDS19TSU5HTEUsXFx0XFx0LyogVGhpcyBtb25vbGl0aGljIHdyaXRlIHdhcyB0cmlnZ2VyZWQgYnkgd3JpdGVwYWdlcyAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDoyMTI6XFx0TkVURlNfV1JJVEVUSFJPVUdILFxcdFxcdC8qIFRoaXMgd3JpdGUgd2FzIG1hZGUgYnkgbmV0ZnNfcGVyZm9ybV93cml0ZSgpICovXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTIxMy1cXHRORVRGU19VTkJVRkZFUkVEX1dSSVRFLFxcdFxcdC8qIFRoaXMgaXMgYW4gdW5idWZmZXJlZCB3cml0ZSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTM5Nj1zc2l6ZV90IG5ldGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC0zOTgtLyogSGlnaC1sZXZlbCB3cml0ZSBBUEkgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6Mzk5OnNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDAwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6MTkuOTMxODIwNDQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjczNzA5MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBZGRpbmcgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIHRvIHRoZSBGb2N1cyBMaXN0KipcblxuQWxyaWdodCwgc28gYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgY29uZmlybXMgaXQncyBhIGxlZ2l0aW1hdGUgZW50cnkgcG9pbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBgbmV0ZnNgIGNvbnRleHQuIFRoZXJlZm9yZSwgaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSB0byBhZGQgdGhpcyB0byB0aGUgZm9jdXMgc3ltYm9scy4gVGhpcyB3aWxsIGFsbG93IGZvciBtb3JlIHRhcmdldGVkIGFuZCBlZmZpY2llbnQgZGVidWdnaW5nIG9yIGFuYWx5c2lzLCBhbmQgd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgY2FsbCBwYXRoIHByb3Blcmx5LiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIGxpc3QgaW1tZWRpYXRlbHkuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGBuZXRmc193cml0ZV9jb2xsZWN0aW9uYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB3cml0ZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIG9uIGEgbW9yZSBncmFudWxhciBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNTozMy4yMDU1MzQ2NDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjY1OTkyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfd3JpdGVfY29sbGVjdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9pbnRlcm5hbC5oPTE5Mz1pbnQgbmV0ZnNfZm9saW9fd3JpdHRlbl9iYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmZzL25ldGZzL2ludGVybmFsLmg6MTk0OmJvb2wgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSk7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDoxOTU6dm9pZCBuZXRmc193cml0ZV9jb2xsZWN0aW9uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmZzL25ldGZzL2ludGVybmFsLmgtMTk2LVxcbi0tXFxuZnMvbmV0ZnMvbWlzYy5jPTUxMz1zc2l6ZV90IG5ldGZzX3dhaXRfZm9yX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxKVxcbmZzL25ldGZzL21pc2MuYy01MTQte1xcbmZzL25ldGZzL21pc2MuYzo1MTU6XFx0cmV0dXJuIG5ldGZzX3dhaXRfZm9yX2luX3Byb2dyZXNzKHJyZXEsIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb24pO1xcbmZzL25ldGZzL21pc2MuYy01MTYtfVxcbi0tXFxuZnMvbmV0ZnMvbWlzYy5jPTU2Mj12b2lkIG5ldGZzX3dhaXRfZm9yX3BhdXNlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcXG5mcy9uZXRmcy9taXNjLmMtNTYzLXtcXG5mcy9uZXRmcy9taXNjLmM6NTY0OlxcdHJldHVybiBuZXRmc193YWl0X2Zvcl9wYXVzZShycmVxLCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKTtcXG5mcy9uZXRmcy9taXNjLmMtNTY1LX1cXG4tLVxcbmZzL25ldGZzL29iamVjdHMuYz0xOD1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL29iamVjdHMuYy02Ni1cXHR9IGVsc2Uge1xcbmZzL25ldGZzL29iamVjdHMuYzo2NzpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnJyZXEtXFx1MDAzZXdvcmssIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb25fd29ya2VyKTtcXG5mcy9uZXRmcy9vYmplY3RzLmMtNjgtXFx0fVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jPTIwMD1zdGF0aWMgdm9pZCBuZXRmc19jb2xsZWN0X3dyaXRlX3Jlc3VsdHMoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMtMzYwLSAqL1xcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYzozNjE6Ym9vbCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy0zNjIte1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQzNS1cXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6NDM2OnZvaWQgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy00Mzcte1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQ0MS1cXHRpZiAobmV0ZnNfY2hlY2tfcnJlcV9pbl9wcm9ncmVzcyhycmVxKSkge1xcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYzo0NDI6XFx0XFx0aWYgKG5ldGZzX3dyaXRlX2NvbGxlY3Rpb24ocnJlcSkpXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQ0My1cXHRcXHRcXHQvKiBEcm9wIHRoZSByZWYgZnJvbSB0aGUgSU5fUFJPR1JFU1MgZmxhZy4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6MzUuMzMyMTQwNTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA0MDU2MjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTmV0ZnMgV3JpdGUtVGhyb3VnaCBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBuZXRmcyBpc3N1ZS4gSXQncyBvYnZpb3VzbHkgaW50ZXJuYWwgdG8gdGhlIGBuZXRmc2AgY29kZSBiYXNlIOKAkyBtYWtlcyBzZW5zZS4gTGV0J3Mgc2VlLi4uIHRoZSBwcm9ibGVtIGxpa2VseSBjZW50ZXJzIGFyb3VuZCB0aGUgd3JpdGUtdGhyb3VnaCBmdW5jdGlvbmFsaXR5LiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoYCBhbmQgYG5ldGZzX2VuZF93cml0ZXRocm91Z2hgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgYW5kIGV4aXQgcG9pbnRzIG9mIHRoZSB3cml0ZXRocm91Z2ggb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQsIHdoYXQgdGhleSdyZSBkb2luZyB3aGVuIHRoZXkncmUgY2FsbGVkLCBhbmQgd2hhdCBzdGF0ZSB0aGV5IGFyZSBjaGFuZ2luZy4gSSBuZWVkIHRvIHNlZSBpZiB0aGUgd3JpdGUtdGhyb3VnaCBmbG93IGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIEknbGwgcHJvYmFibHkgbG9vayBhdCB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCwgYW5kIHdoZXJlIHRoZXkncmUgYmVpbmcgY2FsbGVkIGZyb20gdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcwOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI1OjQ0LjM3MjcwNjAwMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NjU0MzYwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19iZWdpbl93cml0ZXRocm91Z2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz04Nz1zc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTExOC1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjExOTpcXHRcXHR3cmVxID0gbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKGlvY2IsIGl0ZXItXFx1MDAzZWNvdW50KTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTEyMC1cXHRcXHRpZiAoSVNfRVJSKHdyZXEpKSB7XFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIxMj1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4tLVxcbmZzL25ldGZzL2ludGVybmFsLmgtMjE0LVxcdFxcdFxcdCAgIGxvZmZfdCBzdGFydCwgc2l6ZV90IGxlbiwgYm9vbCB0b19lb2YpO1xcbmZzL25ldGZzL2ludGVybmFsLmg6MjE1OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKTtcXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNi1pbnQgbmV0ZnNfYWR2YW5jZV93cml0ZXRocm91Z2goc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MTI9RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjE2LSAqL1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjE3OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6NDYuNDI5MjgwODM5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjc4Njk1NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0RlMgV3JpdGViYWNrIE1lY2hhbmlzbSoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSdtIGRlZXAgaW5zaWRlIHRoZSBOZXRGUyB3cml0ZWJhY2sgcHJvY2VzcyByaWdodCBub3cuIE15IGZvY3VzIGlzIGVudGlyZWx5IG9uIHRoZXNlIGludGVybmFsIHN5bWJvbHM6IGBuZXRmc193Yl9iZWdpbmAsIGBuZXRmc193Yl9lbmRgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLCBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AsIGFuZCBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGxheWVycyBpbiBob3cgTmV0RlMgaGFuZGxlcyB3cml0aW5nIGRhdGEuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pY3Mgb2YgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBuZXRmc193Yl9iZWdpbmAgYW5kIGBuZXRmc193Yl9lbmRgIGFyZSBleHBvcnRlZC4gVGhpcyBjb25maXJtcyB0aGUgd3JpdGViYWNrIHByb2Nlc3MgaXMgYmVpbmcgY2FsbGVkIGNvcnJlY3RseS4gVGhhdCB3aWxsIHByb3ZpZGUgYSBnb29kIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgaXMgaGFuZGxlZCBhbmQgZmx1c2hlZCB0byBzdG9yYWdlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHdyaXRlYmFjayBwYXRoIGFuZCBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6NTYuNzA3OTc5MTY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk2NjExNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3diX2JlZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9zeW1saW5rLmM9MjM0PWludCBhZnNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvYWZzL3N5bWxpbmsuYy0yNTctXFx0aWYgKHJldCA9PSAwKSB7XFxuZnMvYWZzL3N5bWxpbmsuYzoyNTg6XFx0XFx0bmV0ZnNfd2JfYmVnaW4oXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcywgZmFsc2UpO1xcbmZzL2Fmcy9zeW1saW5rLmMtMjU5LVxcdFxcdG5ldGZzX2ZyZWVfZm9saW9xX2J1ZmZlcih2bm9kZS1cXHUwMDNlZGlyZWN0b3J5KTtcXG4tLVxcbmZzL25ldGZzL2xvY2tpbmcuYz0yMTA9RVhQT1JUX1NZTUJPTChuZXRmc19lbmRfaW9fZGlyZWN0KTtcXG4tLVxcbmZzL25ldGZzL2xvY2tpbmcuYy0yMTQtICovXFxuZnMvbmV0ZnMvbG9ja2luZy5jOjIxNTpzdGF0aWMgYm9vbCBuZXRmc193Yl9iZWdpbl93YWl0KHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eClcXG5mcy9uZXRmcy9sb2NraW5nLmMtMjE2LXtcXG4tLVxcbmZzL25ldGZzL2xvY2tpbmcuYy0yNDUtLyoqXFxuZnMvbmV0ZnMvbG9ja2luZy5jOjI0NjogKiBuZXRmc193Yl9iZWdpbiAtIEJlZ2luIHdyaXRlYmFjaywgd2FpdGluZyBpZiBuZWVkIGJlXFxuZnMvbmV0ZnMvbG9ja2luZy5jLTI0Ny0gKiBAaWN0eDogVGhlIGlub2RlIHRvIGdldCB3cml0ZWJhY2sgYWNjZXNzIG9uXFxuLS1cXG5mcy9uZXRmcy9sb2NraW5nLmMtMjU4LSAqL1xcbmZzL25ldGZzL2xvY2tpbmcuYzoyNTk6Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KVxcbmZzL25ldGZzL2xvY2tpbmcuYy0yNjAte1xcbi0tXFxuZnMvbmV0ZnMvbG9ja2luZy5jLTI2Ny1cXHRuZXRmc19zdGF0KFxcdTAwMjZuZXRmc19uX3diX2xvY2tfd2FpdCk7XFxuZnMvbmV0ZnMvbG9ja2luZy5jOjI2ODpcXHRyZXR1cm4gbmV0ZnNfd2JfYmVnaW5fd2FpdChpY3R4KTtcXG5mcy9uZXRmcy9sb2NraW5nLmMtMjY5LX1cXG5mcy9uZXRmcy9sb2NraW5nLmM6MjcwOkVYUE9SVF9TWU1CT0wobmV0ZnNfd2JfYmVnaW4pO1xcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzEtXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTU0Nj1pbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNTUzLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NTU0OlxcdGlmICghbmV0ZnNfd2JfYmVnaW4oaWN0eCwgd2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSlcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU1NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjE3PXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MjEtXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MjI6XFx0bmV0ZnNfd2JfYmVnaW4oaWN0eCwgZmFsc2UpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjIzLVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz04MzY9aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg0OC1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjg0OTpcXHRpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpIHtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg1MC1cXHRcXHQvKiBUaGUgVkZTIHdpbGwgaGF2ZSB1bmRpcnRpZWQgdGhlIGlub2RlLiAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQ2NT12b2lkIG5ldGZzX2ZyZWVfZm9saW9xX2J1ZmZlcihzdHJ1Y3QgZm9saW9fcXVldWUgKmZxKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00NjctLyogV3JpdGViYWNrIGV4Y2x1c2lvbiBBUEkuICovXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQ2ODpib29sIG5ldGZzX3diX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCwgYm9vbCBub3dhaXQpO1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00Njktdm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6NTguODA0NjAyNzUzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzI4MDcyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4cG9ydGVkIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZDogdGhlc2UgZnVuY3Rpb25zICphcmUqIGV4cG9ydGVkLiBHb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkIGJhc2VkIG9uIHRoZSBicm9hZGVyIHN5c3RlbSBkZXNpZ24uXG5cbk5vdywgbGV0IG1lIHNvbGlkaWZ5IHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0J3M6XG5cbiogICBgbmV0ZnNfd2JfYmVnaW5gXG4qICAgYG5ldGZzX3diX2VuZGBcbiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYFxuKiAgIGBuZXRmc193cml0ZXBhZ2VzYFxuKiAgIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYFxuKiAgIGBuZXRmc193cml0ZV9iZWdpbmBcbiogICBgbmV0ZnNfcGVyZm9ybV93cml0ZWBcbiogICBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2BcbiogICBgZXh0cmFjdF9pdGVyX3RvX3NnYFxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZXhwb3J0IHN0YXR1cyBvZiBgbmV0ZnNfd2JfZW5kYC4gUmVkdW5kYW5jeSBpcyBrZXksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY3JpdGljYWwgc3lzdGVtIGNhbGxzLiBUaGF0J3MgYSBrZXkgcG9pbnQgdGhhdCB3aWxsIGFsd2F5cyBiZSBpbiB0aGUgYmFjayBvZiBteSBtaW5kIHdoZW4gSSBldmFsdWF0ZSBzeXN0ZW0gZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcyMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjowMy41Mzc0MTI4MTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjEwOTM3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfd2JfZW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9zeW1saW5rLmM9MjM0PWludCBhZnNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvYWZzL3N5bWxpbmsuYy0yNjEtXFx0XFx0dm5vZGUtXFx1MDAzZWRpcmVjdG9yeV9zaXplID0gMDtcXG5mcy9hZnMvc3ltbGluay5jOjI2MjpcXHRcXHRuZXRmc193Yl9lbmQoXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcyk7XFxuZnMvYWZzL3N5bWxpbmsuYy0yNjMtXFx0fSBlbHNlIGlmIChyZXQgPT0gMSkge1xcbi0tXFxuZnMvbmV0ZnMvbG9ja2luZy5jPTI3MD1FWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTtcXG5mcy9uZXRmcy9sb2NraW5nLmMtMjcxLVxcbmZzL25ldGZzL2xvY2tpbmcuYzoyNzI6LyogbmV0ZnNfd2JfZW5kIC0gRW5kIHdyaXRlYmFja1xcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzMtICogQGljdHg6IFRoZSBpbm9kZSB3ZSBoYXZlIHdyaXRlYmFjayBhY2Nlc3MgdG9cXG4tLVxcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzYtICovXFxuZnMvbmV0ZnMvbG9ja2luZy5jOjI3Nzp2b2lkIG5ldGZzX3diX2VuZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXFxuZnMvbmV0ZnMvbG9ja2luZy5jLTI3OC17XFxuLS1cXG5mcy9uZXRmcy9sb2NraW5nLmMtMjk5LX1cXG5mcy9uZXRmcy9sb2NraW5nLmM6MzAwOkVYUE9SVF9TWU1CT0wobmV0ZnNfd2JfZW5kKTtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYz0zNjE9Ym9vbCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQxNC1cXHRjYXNlIE5FVEZTX1dSSVRFVEhST1VHSDpcXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6NDE1OlxcdFxcdG5ldGZzX3diX2VuZChpY3R4KTtcXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMtNDE2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDY9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYwNy1vdXQ6XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MDg6XFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjA5LVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCBlcnJvcik7XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTYxNz1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjI2LVxcdGlmIChJU19FUlIod3JlcSkpIHtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYyNzpcXHRcXHRuZXRmc193Yl9lbmQoaWN0eCk7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MjgtXFx0XFx0cmV0dXJuIHdyZXE7XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTgzNj1pbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODk2LWNvdWxkbnRfc3RhcnQ6XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4OTc6XFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODk4LVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQ2OD1ib29sIG5ldGZzX3diX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCwgYm9vbCBub3dhaXQpO1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0Njk6dm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjowNS41NTg1MTQ4MDZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NDE4NzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZm9yIEV4cG9ydGVkIFN5bWJvbHMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBjaGVjayBjb25maXJtcyB0aGF0J3MgZXhwb3J0ZWQuIE5vdywgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBpdGVtIG9uIG15IGxpc3QuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlYCBpcyBhbHNvIGV4cG9ydGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQ7IGtub3dpbmcgdGhlIGV4cG9ydCBzdGF0dXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGNvbXBvbmVudHMgaW50ZXJhY3QgYW5kIHdoZXRoZXIgSSBjYW4gcmVseSBvbiBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gdGhlIGNvbnRleHQgSSdtIGludmVzdGlnYXRpbmcuIEdvdHRhIGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjowOS43MDI3MDU0MjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTM3NDE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvbmFtZWkuYz00Nz1zdGF0aWMgdm9pZCBfX2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01My1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NTQ6c3RhdGljIHZvaWQgY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTY2PXZvaWQgY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTcxLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo3MjpcXHRjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBpbm9kZSk7XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTczLVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTIyMD12b2lkIGNhY2hlZmlsZXNfcHV0X2RpcmVjdG9yeShzdHJ1Y3QgZGVudHJ5ICpkaXIpXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMjIyLVxcdGlmIChkaXIpIHtcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6MjIzOlxcdFxcdGNhY2hlZmlsZXNfZG9fdW5tYXJrX2lub2RlX2luX3VzZShOVUxMLCBkX2lub2RlKGRpcikpO1xcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy0yMjQtXFx0XFx0ZHB1dChkaXIpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTI2OT1pbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMzc3LVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzozNzg6XFx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShyZXApKTtcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMzc5LVxcdGVuZF9yZW5hbWluZyhcXHUwMDI2cmQpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTQxMD1zdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdClcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy00NzctZXJyX3VudXNlOlxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo0Nzg6XFx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZmlsZV9pbm9kZShmaWxlKSk7XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ3OS1cXHRmcHV0KGZpbGUpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTUxMz1zdGF0aWMgYm9vbCBjYWNoZWZpbGVzX29wZW5fZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01NzktZXJyb3I6XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjU4MDpcXHRjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKGRlbnRyeSkpO1xcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01ODEtXFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjoxMi4wMTY0NTI0NzdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4NzI3MTAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFN0YWduYW50IFNpdHVhdGlvbioqXG5cbkFscmlnaHQsIHRoaXMgZmVlbHMuLi4gc3R1Y2suIFRoaW5ncyBhcmVuJ3QgbW92aW5nLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGlzIHN0YXRpYywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqLiBMZXQncyB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIGN1bHByaXQgaW4gdGhlIGNhY2hpbmcgbGF5ZXIuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUncyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBjb250cmlidXRpbmcgdG8gdGhpcyBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMgb2YgYGNhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZWAuIElzIGl0IGV2ZW4gdmlzaWJsZSB0byB0aGUga2VybmVsIG1vZHVsZT8gVGhhdCBjb3VsZCBlYXNpbHkgYmUgdGhlIHNvdXJjZSBvZiBteSBwcm9ibGVtLCBpZiBJIGNhbid0IGFjY2VzcyBpdC4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4MjIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjoxOC4wMDM3Mjc0MTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTI5Nzk0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM9MzI4PXN0YXRpYyB2b2lkIGNhY2hlZmlsZXNfY2xlYW5fdXBfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0zNDYtXFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYzozNDc6XFx0Y2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgb2JqZWN0LVxcdTAwM2VmaWxlKTtcXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTM0OC1cXG4tLVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaD0yNzE9ZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZWZpbGVzX29iamVjdF9qYXI7XFxuLS1cXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjc1LSAqL1xcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaDoyNzY6ZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaC0yNzctXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTMzPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfbWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDYtICovXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjQ3OnN0YXRpYyB2b2lkIF9fY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy00OC1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM9NTQ9c3RhdGljIHZvaWQgY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTU3LVxcdGlub2RlX2xvY2soaW5vZGUpO1xcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo1ODpcXHRfX2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShvYmplY3QsIGlub2RlKTtcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTktXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy02NS0gKi9cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NjY6dm9pZCBjYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTY3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz01MTM9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19vcGVuX2ZpbGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTcwLVxcdGZzY2FjaGVfY29va2llX2xvb2t1cF9uZWdhdGl2ZShvYmplY3QtXFx1MDAzZWNvb2tpZSk7XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjU3MTpcXHRjYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBmaWxlKTtcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTcyLVxcdGZwdXQoZmlsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI2OjIwLjExNjcxNDE1NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjkzMTUzMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDYWNoZWZpbGVzIEludGVncmF0aW9uIGluIE5ldEZTKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgY2FjaGVmaWxlcyBpbnRlcmFjdHMgd2l0aCBuZXRmcyBpbnRlcm5hbGx5LiBUaGUgY29yZSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgdGhlc2Ugd3JpdGUtcmVsYXRlZCBmdW5jdGlvbnM6IGBuZXRmc193Yl9iZWdpbmAsIGBuZXRmc193Yl9lbmRgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLCBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AsIGFuZCBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBjYWNoZWZpbGVzIGludGVncmF0aW9uLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgaWYgYG5ldGZzX3dyaXRlX2JlZ2luYCBpcyBhY3R1YWxseSBzdGlsbCBpbiB1c2UsIGV2ZW4gdGhvdWdoIGl0J3MgbWFya2VkIGFzIGRlcHJlY2F0ZWQuIEJldHRlciBzYWZlIHRoYW4gc29ycnkg4oCTIGl0J3MgZ29pbmcgb24gdGhlIGxpc3QuXG5cbk5vdywgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIHNlZWluZyBgTkVURlNfU1VQUE9SVGAsIGBGU0NBQ0hFYCwgYENBQ0hFRklMRVNgLCBhbmQgYEFGU19GU2AgYXMgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEknbGwgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgQ09ORklHX0ZTQ0FDSEVfU1RBVFNgIGlzbid0IG5lZWRlZC4gV2hhdCBhYm91dCBgQ09ORklHX0NBQ0hFRklMRVNfT05ERU1BTkRgPyBOYWgsIGRvZXNuJ3Qgc2VlbSBkaXJlY3RseSByZWxldmFudCB0byB0aGlzIHNwZWNpZmljIGludGVncmF0aW9uIHBvaW50LlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHNhbml0eSBjaGVjazogY2FuIEkgZ2V0IGF3YXkgd2l0aCBqdXN0IGVuYWJsaW5nIGBORVRGU19TVVBQT1JUYD8gWWVzLCBsb29rcyBsaWtlIHRoYXQncyBzdWZmaWNpZW50LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIGRvY3VtZW50IHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjY2MCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjY6MjguODA5ODY5Njc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3NzkxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZTX1NVUFBPUlRcIixcbiAgICBcIkZTQ0FDSEVcIixcbiAgICBcIkNBQ0hFRklMRVNcIixcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3diX2JlZ2luXCIsXG4gICAgXCJuZXRmc193Yl9lbmRcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiLFxuICAgIFwibmV0ZnNfd3JpdGVfYmVnaW5cIixcbiAgICBcIm5ldGZzX3BlcmZvcm1fd3JpdGVcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfcGFnZXNcIixcbiAgICBcImV4dHJhY3RfaXRlcl90b19zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZnMgbG9naWMsIGluY2x1ZGluZyB3cml0ZWJhY2sgbG9ja2luZywgdW5idWZmZXJlZCB3cml0ZXMsIGFuZCBpdGVyYXRvciBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gSXQgYWxzbyBhZmZlY3RzIGNhY2hlZmlsZXMgYW5kIEFGUy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURlNfU1VQUE9SVFwiLFxuICAgIFwiRlNDQUNIRVwiLFxuICAgIFwiQ0FDSEVGSUxFU1wiLFxuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZnNfd2JfYmVnaW5cIixcbiAgICBcIm5ldGZzX3diX2VuZFwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gICAgXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gICAgXCJuZXRmc193cml0ZWJhY2tfc2luZ2xlXCIsXG4gICAgXCJuZXRmc193cml0ZV9iZWdpblwiLFxuICAgIFwibmV0ZnNfcGVyZm9ybV93cml0ZVwiLFxuICAgIFwiaW92X2l0ZXJfZXh0cmFjdF9wYWdlc1wiLFxuICAgIFwiZXh0cmFjdF9pdGVyX3RvX3NnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXRmcyBsb2dpYywgaW5jbHVkaW5nIHdyaXRlYmFjayBsb2NraW5nLCB1bmJ1ZmZlcmVkIHdyaXRlcywgYW5kIGl0ZXJhdG9yIGV4dHJhY3Rpb24gZnVuY3Rpb25zLiBJdCBhbHNvIGFmZmVjdHMgY2FjaGVmaWxlcyBhbmQgQUZTLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 14:13:33 +0000 UTC FinishedAt: 2026-06-25 14:26:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "7a0e692a0381254b2f77c54dec100cd3325a6fdf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFS_SUPPORT", "FSCACHE", "CACHEFILES", "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "7a0e692a0381254b2f77c54dec100cd3325a6fdf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFS_SUPPORT", "FSCACHE", "CACHEFILES", "AFS_FS" ], "series_id": "a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netfs_wb_begin", "netfs_wb_end", "netfs_unbuffered_write_iter", "netfs_unbuffered_write_iter_locked", "netfs_writepages", "netfs_writeback_single", "netfs_write_begin", "netfs_perform_write", "iov_iter_extract_pages", "extract_iter_to_sg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZTX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7RlNDQUNIRSYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGZzX3diX2JlZ2luJiMzNDssCiAgICAmIzM0O25ldGZzX3diX2VuZCYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVfYmVnaW4mIzM0OywKICAgICYjMzQ7bmV0ZnNfcGVyZm9ybV93cml0ZSYjMzQ7LAogICAgJiMzNDtpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2V4dHJhY3RfaXRlcl90b19zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZzIGxvZ2ljLCBpbmNsdWRpbmcgd3JpdGViYWNrIGxvY2tpbmcsIHVuYnVmZmVyZWQgd3JpdGVzLCBhbmQgaXRlcmF0b3IgZXh0cmFjdGlvbiBmdW5jdGlvbnMuIEl0IGFsc28gYWZmZWN0cyBjYWNoZWZpbGVzIGFuZCBBRlMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTA0Yjk0ZDQwZTA4NWVhMGJjMGZiMmJlNjE2YTU2MTk2NDA0ODI4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDE0OjIyOjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zeW1saW5rLmMgYi9mcy9hZnMvc3ltbGluay5jXG5pbmRleCBlZDU4NjgzNjlmMzcyZC4uMTZiNDgyM2NiN2I3ZTcgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc3ltbGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc3ltbGluay5jXG5AQCAtMjU1LDExICYjNDM7MjU1LDExIEBAIGludCBhZnNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0fVxuIFxuIFx0aWYgKHJldCA9PSAwKSB7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMud2JfbG9jayk7XG4mIzQzO1x0XHRuZXRmc193Yl9iZWdpbihcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgZmFsc2UpO1xuIFx0XHRuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIodm5vZGUtXHUwMDNlZGlyZWN0b3J5KTtcbiBcdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5ID0gTlVMTDtcbiBcdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5X3NpemUgPSAwO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMud2JfbG9jayk7XG4mIzQzO1x0XHRuZXRmc193Yl9lbmQoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMpO1xuIFx0fSBlbHNlIGlmIChyZXQgPT0gMSkge1xuIFx0XHRyZXQgPSAwOyAvKiBTa2lwcGVkIHdyaXRlIGR1ZSB0byBsb2NrIGNvbmZsaWN0LiAqL1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuY1xuaW5kZXggMjkzN2RiNjkwYjQwYjUuLmQ0MzA5ZGZiNTVkZjRlIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmNcbkBAIC0zNzUsNyAmIzQzOzM3NSw3IEBAIGludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiBcdFx0XHRcdFx0ICAgIFwmIzM0O1JlbmFtZSBmYWlsZWQgd2l0aCBlcnJvciAlZFwmIzM0OywgcmV0KTtcbiBcdH1cbiBcbi1cdF9fY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShyZXApKTtcbiYjNDM7XHRjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKHJlcCkpO1xuIFx0ZW5kX3JlbmFtaW5nKFx1MDAyNnJkKTtcbiBcdF9sZWF2ZShcJiMzNDsgPSAwXCYjMzQ7KTtcbiBcdHJldHVybiAwO1xuQEAgLTQ2Nyw3ICYjNDM7NDY3LDYgQEAgc3RydWN0IGZpbGUgKmNhY2hlZmlsZXNfY3JlYXRlX3RtcGZpbGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpXG4gXHRyZXQgPSAtRUlOVkFMO1xuIFx0aWYgKHVubGlrZWx5KCFmaWxlLVx1MDAzZWZfb3AtXHUwMDNlcmVhZF9pdGVyKSB8fFxuIFx0ICAgIHVubGlrZWx5KCFmaWxlLVx1MDAzZWZfb3AtXHUwMDNld3JpdGVfaXRlcikpIHtcbi1cdFx0ZnB1dChmaWxlKTtcbiBcdFx0cHJfbm90aWNlKFwmIzM0O0NhY2hlIGRvZXMgbm90IHN1cHBvcnQgcmVhZF9pdGVyIGFuZCB3cml0ZV9pdGVyXFxuXCYjMzQ7KTtcbiBcdFx0Z290byBlcnJfdW51c2U7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXG5pbmRleCA3NmQwZjZhMjlhYmFiMi4uMjRhOGE1NDE4ZTMxMTkgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xuQEAgLTY1OSw3ICYjNDM7NjU5LDcgQEAgaW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxuIFx0ICogd2l0aGluIHRoZSBjYWNoZSBncmFudWxlIGNvbnRhaW5pbmcgdGhlIEVPRiwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkXG4gXHQgKiB0byBwcmVsb2FkIHRoZSBncmFudWxlLlxuIFx0ICovXG4tXHRpZiAoIW5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoY3R4KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoIW5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoY3R4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuZXRmc19za2lwX2ZvbGlvX3JlYWQoZm9saW8sIHBvcywgbGVuLCBmYWxzZSkpIHtcbiBcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3JoX3dyaXRlX3pza2lwKTtcbiBcdFx0Z290byBoYXZlX2ZvbGlvX25vX3dhaXQ7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbmluZGV4IDZiZGUzMzIwYmNlYzY2Li4yY2RiNjhlNmIxNmZmZiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbkBAIC0yNzcsNyAmIzQzOzI3Nyw3IEBAIHNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdFx0ICogY2FjaGluZyBzZXJ2aWNlIHRlbXBvcmFyaWx5IGJlY2F1c2UgdGhlIGJhY2tpbmcgc3RvcmUgZ290XG4gXHRcdCAqIGN1bGxlZC5cbiBcdFx0ICovXG4tXHRcdGlmIChuZXRmc19pc19jYWNoZV9lbmFibGVkKGN0eCkpIHtcbiYjNDM7XHRcdGlmIChuZXRmc19pc19jYWNoZV9tYXliZV9lbmFibGVkKGN0eCkpIHtcbiBcdFx0XHRpZiAoZmluZm8pIHtcbiBcdFx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93aF93c3RyZWFtX2NvbmZsaWN0KTtcbiBcdFx0XHRcdGdvdG8gZmx1c2hfY29udGVudDtcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5pbmRleCAyNWY4Y2ViMTVmYWQ2NC4uYzE2ZmJhZDI4NmExNzcgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbkBAIC0xNjYsMTMgJiM0MzsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFx0XHQgKi9cbiBcdFx0c3VicmVxLVx1MDAzZWVycm9yID0gLUVBR0FJTjtcbiBcdFx0dHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpO1xuLVx0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKVxuJiM0MztcdFx0aWYgKHN1YnJlcS1cdTAwM2V0cmFuc2ZlcnJlZCBcdTAwM2UgMCkge1xuIFx0XHRcdGlvdl9pdGVyX2FkdmFuY2UoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIuaXRlciwgc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkKTtcbiYjNDM7XHRcdFx0d3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCAmIzQzOz0gc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoc3RyZWFtLVx1MDAzZXNvdXJjZSA9PSBORVRGU19VUExPQURfVE9fU0VSVkVSIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgd3JlcS1cdTAwM2VuZXRmc19vcHMtXHUwMDNlcmV0cnlfcmVxdWVzdClcbiBcdFx0XHR3cmVxLVx1MDAzZW5ldGZzX29wcy1cdTAwM2VyZXRyeV9yZXF1ZXN0KHdyZXEsIHN0cmVhbSk7XG4gXG4mIzQzO1x0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX01BREVfUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTkVFRF9SRVRSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiBcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbiBcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9GQUlMRUQsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG5AQCAtMTg2LDE3ICYjNDM7MTg5LDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcbiBcdFx0bmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7XG4gXG4tXHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSkge1xuJiM0MztcdFx0aWYgKHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKVxuIFx0XHRcdHN0cmVhbS1cdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XG4tXHRcdFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4tXHRcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0c3RydWN0IGlvdl9pdGVyIHNvdXJjZTtcbi1cbi1cdFx0XHRuZXRmc19yZXNldF9pdGVyKHN1YnJlcSk7XG4tXHRcdFx0c291cmNlID0gc3VicmVxLVx1MDAzZWlvX2l0ZXI7XG4tXHRcdFx0bmV0ZnNfcmVpc3N1ZV93cml0ZShzdHJlYW0sIHN1YnJlcSwgXHUwMDI2c291cmNlKTtcbi1cdFx0fVxuJiM0MztcdFx0X19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9pbnRlcm5hbC5oIGIvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuaW5kZXggNjQ1OTk2ZWNmYzgwMzYuLmQ4ODljYWE0MDFkYzI0IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuQEAgLTIzOSw2ICYjNDM7MjM5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRmc19pc19jYWNoZV9lbmFibGVkKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4KVxuICNlbmRpZlxuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgpXG4mIzQzO3tcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTQ0FDSEUpXG4mIzQzO1x0c3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBjdHgtXHUwMDNlY2FjaGU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0dGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfSVNfQ0FDSElORywgXHUwMDI2Y29va2llLVx1MDAzZWZsYWdzKTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogR2V0IGEgcmVmIG9uIGEgbmV0ZnMgZ3JvdXAgYXR0YWNoZWQgdG8gYSBkaXJ0eSBwYWdlIChlLmcuIGEgY2VwaCBzbmFwKS5cbiAgKi9cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9sb2NraW5nLmMgYi9mcy9uZXRmcy9sb2NraW5nLmNcbmluZGV4IDIyNDllY2QwOWQwYThkLi40ZTNiZTJiODE1MDQwOCAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2xvY2tpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvbG9ja2luZy5jXG5AQCAtOSw2ICYjNDM7OSwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG4mIzQzO3N0cnVjdCBuZXRmc193Yl93YWl0ZXIge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdGxpbms7XHRcdC8qIExpbmsgaW4gaWN0eC1cdTAwM2V3Yl9xdWV1ZSAqL1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdFx0KndhaXRlcjtcdC8qIFdhaXRlciB0YXNrOyBjbGVhcmVkIHdoZW4gbG9jayBncmFudGVkICovXG4mIzQzO307XG4mIzQzO1xuIC8qXG4gICogaW5vZGVfZGlvX3dhaXRfaW50ZXJydXB0aWJsZSAtIHdhaXQgZm9yIG91dHN0YW5kaW5nIERJTyByZXF1ZXN0cyB0byBmaW5pc2hcbiAgKiBAaW5vZGU6IGlub2RlIHRvIHdhaXQgZm9yXG5AQCAtMjAzLDMgJiM0MzsyMDgsOTMgQEAgdm9pZCBuZXRmc19lbmRfaW9fZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHR1cF9yZWFkKFx1MDAyNmlub2RlLVx1MDAzZWlfcndzZW0pO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldGZzX2VuZF9pb19kaXJlY3QpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogV2FpdCB0byBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gd3JpdGViYWNrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgbmV0ZnNfd2JfYmVnaW5fd2FpdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyIHdhaXRlciA9IHt9O1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDtcbiYjNDM7XHRib29sIGdvdCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aWN0eC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhORVRGU19JQ1RYX1dCX0xPQ0ssIFx1MDAyNmljdHgtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRnZXRfdGFza19zdHJ1Y3QodHNrKTtcbiYjNDM7XHRcdHdhaXRlci53YWl0ZXIgPSB0c2s7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNndhaXRlci5saW5rLCBcdTAwMjZpY3R4LVx1MDAzZXdiX3F1ZXVlKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Z290ID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFnb3QpIHtcbiYjNDM7XHRcdGZvciAoOzspIHtcbiYjNDM7XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0XHQvKiBSZWFkIHdhaXRlciBiZWZvcmUgYWNjZXNzaW5nIGlub2RlIHN0YXRlLiAqL1xuJiM0MztcdFx0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ3YWl0ZXIud2FpdGVyKSA9PSBOVUxMKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRzY2hlZHVsZSgpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBuZXRmc193Yl9iZWdpbiAtIEJlZ2luIHdyaXRlYmFjaywgd2FpdGluZyBpZiBuZWVkIGJlXG4mIzQzOyAqIEBpY3R4OiBUaGUgaW5vZGUgdG8gZ2V0IHdyaXRlYmFjayBhY2Nlc3Mgb25cbiYjNDM7ICogQG5vd2FpdDogUmV0dXJuIGZhaWx1cmUgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gd2FpdGluZyBpZiB0cnVlXG4mIzQzOyAqXG4mIzQzOyAqIEJlZ2luIHdyaXRlYmFjayB0byBhbiBpbm9kZSwgd2FpdGluZyBmb3IgZXhjbHVzaXZlIGFjY2VzcyBpZiBAbm93YWl0IGlzXG4mIzQzOyAqIGZhbHNlLiAgVGhpcyBwcmV2ZW50cyBjb2xsZWN0aW9uIGZyb20gYmVpbmcgZG9uZSBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4mIzQzOyAqIHRvIHRoZSBpc3N1YW5jZSBvZiB3cml0ZSBzdWJyZXF1ZXN0cy5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZSB0aGF0IHdyaXRlYmFjayBtYXkgYmUgZW5kZWQgaW4gYSBkaWZmZXJlbnQgcHJvY2VzcyAoZS5nLiB0aGUgY29sbGVjdGlvblxuJiM0MzsgKiBmdW5jdGlvbiBvbiBhIHdvcmtxdWV1ZSkgdGhhbiBzdGFydGVkIGl0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IFRydWUgaWYgY2FuIHByb2NlZWQsIGZhbHNlIGlmIGRlbmllZC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgbmV0ZnNfd2JfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICppY3R4LCBib29sIG5vd2FpdClcbiYjNDM7e1xuJiM0MztcdGlmICghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKE5FVEZTX0lDVFhfV0JfTE9DSywgXHUwMDI2aWN0eC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAobm93YWl0KSB7XG4mIzQzO1x0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja19za2lwKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3diX2xvY2tfd2FpdCk7XG4mIzQzO1x0cmV0dXJuIG5ldGZzX3diX2JlZ2luX3dhaXQoaWN0eCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChuZXRmc193Yl9iZWdpbik7XG4mIzQzO1xuJiM0MzsvKiBuZXRmc193Yl9lbmQgLSBFbmQgd3JpdGViYWNrXG4mIzQzOyAqIEBpY3R4OiBUaGUgaW5vZGUgd2UgaGF2ZSB3cml0ZWJhY2sgYWNjZXNzIHRvXG4mIzQzOyAqXG4mIzQzOyAqIEVuZCB3cml0ZWJhY2sgYWNjZXNzIG9uIGFuIGlub2RlLCB3YWtpbmcgdXAgdGhlIG5leHQgd3JpdGViYWNrIHJlcXVlc3QuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG5ldGZzX3diX2VuZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyICp3YWl0ZXI7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0c2s7XG4mIzQzO1xuJiM0MztcdFdBUk5fT05fT05DRSghdGVzdF9iaXQoTkVURlNfSUNUWF9XQl9MT0NLLCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpY3R4LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHR3YWl0ZXIgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXHUwMDI2aWN0eC1cdTAwM2V3Yl9xdWV1ZSwgc3RydWN0IG5ldGZzX3diX3dhaXRlciwgbGluayk7XG4mIzQzO1x0aWYgKHdhaXRlcikge1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2d2FpdGVyLVx1MDAzZWxpbmspO1xuJiM0MztcdFx0dHNrID0gd2FpdGVyLVx1MDAzZXdhaXRlcjtcbiYjNDM7XHRcdC8qIFdyaXRlIGlub2RlIHN0YXRlIGJlZm9yZSBjbGVhcmluZyB3YWl0ZXIuICovXG4mIzQzO1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZ3YWl0ZXItXHUwMDNld2FpdGVyLCBOVUxMKTtcbiYjNDM7XHRcdHdha2VfdXBfcHJvY2Vzcyh0c2spO1xuJiM0MztcdFx0cHV0X3Rhc2tfc3RydWN0KHRzayk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGNsZWFyX2JpdF91bmxvY2soTkVURlNfSUNUWF9XQl9MT0NLLCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChuZXRmc193Yl9lbmQpO1xuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYyBiL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuY1xuaW5kZXggMjRmYzJiYjJmOGE0N2IuLjIxMGViOGYzOTU4ZDc3IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmNcbkBAIC00MDgsNiAmIzQzOzQwOCwxNiBAQCBib29sIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb24oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4gXHRuZXRmc193YWtlX3JyZXFfZmxhZyh3cmVxLCBORVRGU19SUkVRX0lOX1BST0dSRVNTLCBuZXRmc19ycmVxX3RyYWNlX3dha2VfaXApO1xuIFx0LyogQXMgd2UgY2xlYXJlZCBORVRGU19SUkVRX0lOX1BST0dSRVNTLCB3ZSBhY3F1aXJlZCBpdHMgcmVmLiAqL1xuIFxuJiM0MztcdHN3aXRjaCAod3JlcS1cdTAwM2VvcmlnaW4pIHtcbiYjNDM7XHRjYXNlIE5FVEZTX1dSSVRFQkFDSzpcbiYjNDM7XHRjYXNlIE5FVEZTX1dSSVRFQkFDS19TSU5HTEU6XG4mIzQzO1x0Y2FzZSBORVRGU19XUklURVRIUk9VR0g6XG4mIzQzO1x0XHRuZXRmc193Yl9lbmQoaWN0eCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh3cmVxLVx1MDAzZWlvY2IpIHtcbiBcdFx0c2l6ZV90IHdyaXR0ZW4gPSBtaW4od3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCwgd3JlcS1cdTAwM2VsZW4pO1xuIFx0XHR3cmVxLVx1MDAzZWlvY2ItXHUwMDNla2lfcG9zICYjNDM7PSB3cml0dGVuO1xuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5pbmRleCBjMDNjN2NjNDVlNDcxNi4uZjI3NjFjOTk3OTVhNmIgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5AQCAtMTA2LDcgJiM0MzsxMDYsNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdF9lbnRlcihcJiMzNDtSPSV4XCYjMzQ7LCB3cmVxLVx1MDAzZWRlYnVnX2lkKTtcbiBcbiBcdGljdHggPSBuZXRmc19pbm9kZSh3cmVxLVx1MDAzZWlub2RlKTtcbi1cdGlmIChpc19jYWNoZWFibGUgXHUwMDI2XHUwMDI2IG5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoaWN0eCkpXG4mIzQzO1x0aWYgKGlzX2NhY2hlYWJsZSlcbiBcdFx0ZnNjYWNoZV9iZWdpbl93cml0ZV9vcGVyYXRpb24oXHUwMDI2d3JlcS1cdTAwM2VjYWNoZV9yZXNvdXJjZXMsIG5ldGZzX2lfY29va2llKGljdHgpKTtcbiBcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLCB3cmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSkgXHUwMDNjIDApXG4gXHRcdGdvdG8gbm9tZW07XG5AQCAtNTUxLDE0ICYjNDM7NTUxLDggQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spKSB7XG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkge1xuLVx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3NraXApO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4tXHR9XG4mIzQzO1x0aWYgKCFuZXRmc193Yl9iZWdpbihpY3R4LCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIE5lZWQgdGhlIGZpcnN0IGZvbGlvIHRvIGJlIGFibGUgdG8gc2V0IHVwIHRoZSBvcC4gKi9cbiBcdGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd2JjLCBOVUxMLCBcdTAwMjZlcnJvcik7XG5AQCAtNTg4LDEzICYjNDM7NTgyLDEzIEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHR9XG4gXG4gXHRcdGVycm9yID0gbmV0ZnNfd3JpdGVfZm9saW8od3JlcSwgd2JjLCBmb2xpbyk7XG4tXHRcdGlmIChlcnJvciBcdTAwM2MgMClcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmIChlcnJvciA9PSAtRU5PTUVNKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSh3YmMsIGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdH1cbiBcdH0gd2hpbGUgKChmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sIFx1MDAyNmVycm9yKSkpO1xuIFxuIFx0bmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHdyZXEpO1xuLVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4gXHRuZXRmc193YWtlX2NvbGxlY3Rvcih3cmVxKTtcbiBcbiBcdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X3JldHVybik7XG5AQCAtNjAyLDkgJiM0Mzs1OTYsMTYgQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRyZXR1cm4gZXJyb3I7XG4gXG4gY291bGRudF9zdGFydDpcbi1cdG5ldGZzX2tpbGxfZGlydHlfcGFnZXMobWFwcGluZywgd2JjLCBmb2xpbyk7XG4mIzQzO1x0aWYgKGVycm9yID09IC1FTk9NRU0pIHtcbiYjNDM7XHRcdGZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSh3YmMsIGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1x0XHRmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sIFx1MDAyNmVycm9yKTtcbiYjNDM7XHRcdFdBUk5fT05fT05DRShmb2xpbyAhPSBOVUxMKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bmV0ZnNfa2lsbF9kaXJ0eV9wYWdlcyhtYXBwaW5nLCB3YmMsIGZvbGlvKTtcbiYjNDM7XHR9XG4gb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4mIzQzO1x0bmV0ZnNfd2JfZW5kKGljdHgpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCBlcnJvcik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuQEAgLTYxOCwxNiAmIzQzOzYxOSwxNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlblxuIFx0c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEgPSBOVUxMO1xuIFx0c3RydWN0IG5ldGZzX2lub2RlICppY3R4ID0gbmV0ZnNfaW5vZGUoZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbiYjNDM7XHRuZXRmc193Yl9iZWdpbihpY3R4LCBmYWxzZSk7XG4gXG4gXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLCBpb2NiLVx1MDAzZWtpX2ZpbHAsXG4gXHRcdFx0XHQgICAgICBpb2NiLVx1MDAzZWtpX3BvcywgTkVURlNfV1JJVEVUSFJPVUdIKTtcbiBcdGlmIChJU19FUlIod3JlcSkpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4mIzQzO1x0XHRuZXRmc193Yl9lbmQoaWN0eCk7XG4gXHRcdHJldHVybiB3cmVxO1xuIFx0fVxuIFxuIFx0d3JlcS1cdTAwM2Vpb19zdHJlYW1zWzBdLmF2YWlsID0gdHJ1ZTtcbiYjNDM7XHRfX3NldF9iaXQoTkVURlNfUlJFUV9PRkZMT0FEX0NPTExFQ1RJT04sIFx1MDAyNndyZXEtXHUwMDNlZmxhZ3MpO1xuIFx0dHJhY2VfbmV0ZnNfd3JpdGUod3JlcSwgbmV0ZnNfd3JpdGVfdHJhY2Vfd3JpdGV0aHJvdWdoKTtcbiBcdHJldHVybiB3cmVxO1xuIH1cbkBAIC02ODUsNyAmIzQzOzY4Nyw2IEBAIGludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jXG4gc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGZvbGlvICp3cml0ZXRocm91Z2hfY2FjaGUpXG4ge1xuLVx0c3RydWN0IG5ldGZzX2lub2RlICppY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cdTAwM2Vpbm9kZSk7XG4gXHRzc2l6ZV90IHJldDtcbiBcbiBcdF9lbnRlcihcJiMzNDtSPSV4XCYjMzQ7LCB3cmVxLVx1MDAzZWRlYnVnX2lkKTtcbkBAIC02OTksOCAmIzQzOzcwMCw2IEBAIHNzaXplX3QgbmV0ZnNfZW5kX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jXG4gXG4gXHRuZXRmc19lbmRfaXNzdWVfd3JpdGUod3JlcSk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbi1cbiBcdGlmICh3cmVxLVx1MDAzZWlvY2IpXG4gXHRcdHJldCA9IC1FSU9DQlFVRVVFRDtcbiBcdGVsc2VcbkBAIC04NDcsMTUgJiM0Mzs4NDYsMTAgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFpb3ZfaXRlcl9pc19mb2xpb3EoaXRlcikpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbi1cdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spKSB7XG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkge1xuLVx0XHRcdC8qIFRoZSBWRlMgd2lsbCBoYXZlIHVuZGlydGllZCB0aGUgaW5vZGUuICovXG4tXHRcdFx0bmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoXHUwMDI2aWN0eC1cdTAwM2Vpbm9kZSk7XG4tXHRcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3diX2xvY2tfc2tpcCk7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3diX2xvY2tfd2FpdCk7XG4tXHRcdG11dGV4X2xvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbiYjNDM7XHRpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSkge1xuJiM0MztcdFx0LyogVGhlIFZGUyB3aWxsIGhhdmUgdW5kaXJ0aWVkIHRoZSBpbm9kZS4gKi9cbiYjNDM7XHRcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFx1MDAyNmljdHgtXHUwMDNlaW5vZGUpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4gXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShtYXBwaW5nLCBOVUxMLCAwLCBORVRGU19XUklURUJBQ0tfU0lOR0xFKTtcbkBAIC04OTMsNyAmIzQzOzg4Nyw2IEBAIGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0c21wX3dtYigpOyAvKiBXcml0ZSBsaXN0cyBiZWZvcmUgQUxMX1FVRVVFRC4gKi9cbiBcdHNldF9iaXQoTkVURlNfUlJFUV9BTExfUVVFVUVELCBcdTAwMjZ3cmVxLVx1MDAzZWZsYWdzKTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spO1xuIFx0bmV0ZnNfd2FrZV9jb2xsZWN0b3Iod3JlcSk7XG4gXG4gXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9yZXR1cm4pO1xuQEAgLTkwMSw3ICYjNDM7ODk0LDcgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRyZXR1cm4gcmV0O1xuIFxuIGNvdWxkbnRfc3RhcnQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbiYjNDM7XHRuZXRmc193Yl9lbmQoaWN0eCk7XG4gXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZzLmhcbmluZGV4IDI0M2MwZjczNzkzODgzLi4xYmMxMjBkNjFjNWJlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRmcy5oXG5AQCAtNjEsMTQgJiM0Mzs2MSwxNiBAQCBzdHJ1Y3QgbmV0ZnNfaW5vZGUge1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19GU0NBQ0hFKVxuIFx0c3RydWN0IGZzY2FjaGVfY29va2llXHQqY2FjaGU7XG4gI2VuZGlmXG4tXHRzdHJ1Y3QgbXV0ZXhcdFx0d2JfbG9jaztcdC8qIFdyaXRlYmFjayBzZXJpYWxpc2F0aW9uICovXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZFx0d2JfcXVldWU7XHQvKiBRdWV1ZSBvZiBwcm9jZXNzZXMgd2FudGluZyB0byBkbyB3cml0ZWJhY2sgKi9cbiBcdGxvZmZfdFx0XHRcdF9yZW1vdGVfaV9zaXplO1x0LyogU2l6ZSBvZiB0aGUgcmVtb3RlIGZpbGUgKi9cbiBcdGxvZmZfdFx0XHRcdF96ZXJvX3BvaW50O1x0LyogU2l6ZSBhZnRlciB3aGljaCB3ZSBhc3N1bWUgdGhlcmUmIzM5O3Mgbm8gZGF0YVxuIFx0XHRcdFx0XHRcdCAqIG9uIHRoZSBzZXJ2ZXIgKi9cbiYjNDM7XHRzcGlubG9ja190XHRcdGxvY2s7XHRcdC8qIExvY2sgY292ZXJpbmcgd2JfcXVldWUgKi9cbiBcdGF0b21pY190XHRcdGlvX2NvdW50O1x0LyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIHJlcXMgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBORVRGU19JQ1RYX09ESVJFQ1RcdDBcdFx0LyogVGhlIGZpbGUgaGFzIERJTyBpbiBwcm9ncmVzcyAqL1xuICNkZWZpbmUgTkVURlNfSUNUWF9VTkJVRkZFUkVEXHQxXHRcdC8qIEkvTyBzaG91bGQgbm90IHVzZSB0aGUgcGFnZWNhY2hlICovXG4mIzQzOyNkZWZpbmUgTkVURlNfSUNUWF9XQl9MT0NLXHQyXHRcdC8qIFdyaXRlYmFjayBzZXJpYWxpc2F0aW9uIGxvY2sgKi9cbiAjZGVmaW5lIE5FVEZTX0lDVFhfTU9ESUZJRURfQVRUUiAzXHRcdC8qIEluZGljYXRlIGNoYW5nZSBpbiBtdGltZS9jdGltZSAqL1xuICNkZWZpbmUgTkVURlNfSUNUWF9TSU5HTEVfTk9fVVBMT0FEIDRcdFx0LyogTW9ub2xpdGhpYyBwYXlsb2FkLCBjYWNoZSBidXQgbm8gdXBsb2FkICovXG4gfTtcbkBAIC00NjIsNiAmIzQzOzQ2NCwxMCBAQCBpbnQgbmV0ZnNfYWxsb2NfZm9saW9xX2J1ZmZlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHQgICAgICBzaXplX3QgKl9jdXJfc2l6ZSwgc3NpemVfdCBzaXplLCBnZnBfdCBnZnApO1xuIHZvaWQgbmV0ZnNfZnJlZV9mb2xpb3FfYnVmZmVyKHN0cnVjdCBmb2xpb19xdWV1ZSAqZnEpO1xuIFxuJiM0MzsvKiBXcml0ZWJhY2sgZXhjbHVzaW9uIEFQSS4gKi9cbiYjNDM7Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTtcbiYjNDM7dm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcbiYjNDM7XG4gLyoqXG4gICogbmV0ZnNfaW5vZGUgLSBHZXQgdGhlIG5ldGZzIGlub2RlIGNvbnRleHQgZnJvbSB0aGUgaW5vZGVcbiAgKiBAaW5vZGU6IFRoZSBpbm9kZSB0byBxdWVyeVxuQEAgLTc0Myw3ICYjNDM7NzQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2lub2RlX2luaXQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTQ0FDSEUpXG4gXHRjdHgtXHUwMDNlY2FjaGUgPSBOVUxMO1xuICNlbmRpZlxuLVx0bXV0ZXhfaW5pdChcdTAwMjZjdHgtXHUwMDNld2JfbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y3R4LVx1MDAzZXdiX3F1ZXVlKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4gXHQvKiAtXHUwMDNlcmVsZWFzZXBhZ2UoKSBkcml2ZXMgemVyb19wb2ludCAqL1xuIFx0aWYgKHVzZV96ZXJvX3BvaW50KSB7XG4gXHRcdGN0eC1cdTAwM2VfemVyb19wb2ludCA9IGN0eC1cdTAwM2VfcmVtb3RlX2lfc2l6ZTtcbkBAIC03NTMsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19pbm9kZV9pbml0KHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxuIFxuIC8qKlxuICAqIG5ldGZzX3Jlc2l6ZV9maWxlIC0gTm90ZSB0aGF0IGEgZmlsZSBnb3QgcmVzaXplZFxuLSAqIEBjdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkXG4mIzQzOyAqIEBpY3R4OiBUaGUgbmV0ZnMgaW5vZGUgYmVpbmcgcmVzaXplZFxuICAqIEBuZXdfaV9zaXplOiBUaGUgbmV3IGZpbGUgc2l6ZVxuICAqIEBjaGFuZ2VkX29uX3NlcnZlcjogVGhlIGNoYW5nZSB3YXMgYXBwbGllZCB0byB0aGUgc2VydmVyXG4gICpcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXG5pbmRleCAyNDM2NjJhZjFhZjczZi4uNWE2NDM0NzA5NzE2ZTEgMTAwNjQ0XG4tLS0gYS9saWIvaW92X2l0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL2lvdl9pdGVyLmNcbkBAIC0xNTY4LDYgJiM0MzsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHVuc2lnbmVkIGludCBuciA9IDAsIG9mZnNldDtcbiBcdGxvZmZfdCBwb3MgPSBpLVx1MDAzZXhhcnJheV9zdGFydCAmIzQzOyBpLVx1MDAzZWlvdl9vZmZzZXQ7XG4mIzQzO1x0Ym9vbCB3aWxsX2FsbG9jID0gISpwYWdlcztcbiBcdFhBX1NUQVRFKHhhcywgaS1cdTAwM2V4YXJyYXksIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gXG4gXHRvZmZzZXQgPSBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG5AQCAtMTU5NSw2ICYjNDM7MTU5NiwxNCBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3hhcnJheV9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiYjNDM7XHRpZiAoIW5yKSB7XG4mIzQzO1x0XHRpZiAod2lsbF9hbGxvYykge1xuJiM0MztcdFx0XHRrdmZyZWUoKnBhZ2VzKTtcbiYjNDM7XHRcdFx0KnBhZ2VzID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRtYXhzaXplID0gbWluX3Qoc2l6ZV90LCBuciAqIFBBR0VfU0laRSAtIG9mZnNldCwgbWF4c2l6ZSk7XG4gXHRpb3ZfaXRlcl9hZHZhbmNlKGksIG1heHNpemUpO1xuIFx0cmV0dXJuIG1heHNpemU7XG5AQCAtMTYyOCw2ICYjNDM7MTYzNyw4IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXG4gXHRiaS5iaV9idmVjX2RvbmUgPSBza2lwO1xuIFxuIFx0bWF4cGFnZXMgPSB3YW50X3BhZ2VzX2FycmF5KHBhZ2VzLCBtYXhzaXplLCBza2lwLCBtYXhwYWdlcyk7XG4mIzQzO1x0aWYgKCFtYXhwYWdlcylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0d2hpbGUgKGJpLmJpX3NpemUgXHUwMDI2XHUwMDI2IGJpLmJpX2lkeCBcdTAwM2MgaS1cdTAwM2Vucl9zZWdzKSB7XG4gXHRcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYnZlY19pdGVyX2J2ZWMoaS1cdTAwM2VidmVjLCBiaSk7XG5AQCAtMTc0NSw2ICYjNDM7MTc1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gMDtcbiBcdHNpemVfdCBvZmZzZXQ7XG4mIzQzO1x0Ym9vbCB3aWxsX2FsbG9jID0gISpwYWdlcztcbiBcdGludCByZXM7XG4gXG4gXHRpZiAoaS1cdTAwM2VkYXRhX3NvdXJjZSA9PSBJVEVSX0RFU1QpXG5AQCAtMTc2MSw4ICYjNDM7MTc3MywxNCBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0aWYgKCFtYXhwYWdlcylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRyZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGFkZHIsIG1heHBhZ2VzLCBndXBfZmxhZ3MsICpwYWdlcyk7XG4tXHRpZiAodW5saWtlbHkocmVzIFx1MDAzYz0gMCkpXG4mIzQzO1x0aWYgKHVubGlrZWx5KHJlcyBcdTAwM2M9IDApKSB7XG4mIzQzO1x0XHRpZiAod2lsbF9hbGxvYykge1xuJiM0MztcdFx0XHRrdmZyZWUoKnBhZ2VzKTtcbiYjNDM7XHRcdFx0KnBhZ2VzID0gTlVMTDtcbiYjNDM7XHRcdH1cbiBcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bWF4c2l6ZSA9IG1pbl90KHNpemVfdCwgbWF4c2l6ZSwgcmVzICogUEFHRV9TSVpFIC0gb2Zmc2V0KTtcbiBcdGlvdl9pdGVyX2FkdmFuY2UoaSwgbWF4c2l6ZSk7XG4gXHRyZXR1cm4gbWF4c2l6ZTtcbmRpZmYgLS1naXQgYS9saWIvc2NhdHRlcmxpc3QuYyBiL2xpYi9zY2F0dGVybGlzdC5jXG5pbmRleCBiN2ZlOTFlZjM1YjhjNi4uNmVhNDBkMmU2MjQ3NTUgMTAwNjQ0XG4tLS0gYS9saWIvc2NhdHRlcmxpc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3NjYXR0ZXJsaXN0LmNcbkBAIC0xMzY2LDYgJiM0MzsxMzY2LDcgQEAgc3RhdGljIHNzaXplX3QgZXh0cmFjdF94YXJyYXlfdG9fc2coc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRzZ19tYXgtLTtcbiBcbiBcdFx0bWF4c2l6ZSAtPSBsZW47XG4mIzQzO1x0XHRzdGFydCAmIzQzOz0gbGVuO1xuIFx0XHRyZXQgJiM0Mzs9IGxlbjtcbiBcdFx0aWYgKG1heHNpemUgXHUwMDNjPSAwIHx8IHNnX21heCA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jIGIvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmNcbmluZGV4IGYwMmY3YjdhYTc5NjA1Li5lN2UxNTRmOTRmNjY1ZiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuY1xuQEAgLTI3NSw3ICYjNDM7Mjc1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0c3RydWN0IHBhZ2UgKipzcGFnZXMsICoqYnBhZ2VzO1xuIFx0dTggKnNjcmF0Y2gsICpidWZmZXI7XG4gXHRzaXplX3QgYnVmc2l6ZSwgbnBhZ2VzLCBzaXplLCBjb3BpZWQ7XG4tXHRpbnQgaSwgYiwgcGF0dDtcbiYjNDM7XHRpbnQgaSwgcGF0dDtcbiBcbiBcdGJ1ZnNpemUgPSAweDEwMDAwMDtcbiBcdG5wYWdlcyA9IGJ1ZnNpemUgLyBQQUdFX1NJWkU7XG5AQCAtMjk4LDEwICYjNDM7Mjk4LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGl0ZXIubnJfc2VncywgMCk7XG4gXG4gXHQvKiBCdWlsZCB0aGUgZXhwZWN0ZWQgaW1hZ2UgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1xuLVx0YiA9IDA7XG4gXHRwYXR0ID0gMDtcbiBcdG1lbXNldChzY3JhdGNoLCAwLCBidWZzaXplKTtcbi1cdGZvciAocHIgPSBidmVjX3Rlc3RfcmFuZ2VzOyBwci1cdTAwM2Vmcm9tIFx1MDAzZT0gMDsgcHImIzQzOyYjNDM7LCBiJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAocHIgPSBidmVjX3Rlc3RfcmFuZ2VzOyBwci1cdTAwM2Vmcm9tIFx1MDAzZT0gMDsgcHImIzQzOyYjNDM7KSB7XG4gXHRcdHU4ICpwID0gc2NyYXRjaCAmIzQzOyBwci1cdTAwM2VwYWdlICogUEFHRV9TSVpFO1xuIFxuIFx0XHRmb3IgKGkgPSBwci1cdTAwM2Vmcm9tOyBpIFx1MDAzYyBwci1cdTAwM2V0bzsgaSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURlNfU1VQUE9SVCYjMzQ7LAogICAgJiMzNDtGU0NBQ0hFJiMzNDssCiAgICAmIzM0O0NBQ0hFRklMRVMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfd2JfYmVnaW4mIzM0OywKICAgICYjMzQ7bmV0ZnNfd2JfZW5kJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlciYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGViYWNrX3NpbmdsZSYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZV9iZWdpbiYjMzQ7LAogICAgJiMzNDtuZXRmc19wZXJmb3JtX3dyaXRlJiMzNDssCiAgICAmIzM0O2lvdl9pdGVyX2V4dHJhY3RfcGFnZXMmIzM0OywKICAgICYjMzQ7ZXh0cmFjdF9pdGVyX3RvX3NnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZnMgbG9naWMsIGluY2x1ZGluZyB3cml0ZWJhY2sgbG9ja2luZywgdW5idWZmZXJlZCB3cml0ZXMsIGFuZCBpdGVyYXRvciBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gSXQgYWxzbyBhZmZlY3RzIGNhY2hlZmlsZXMgYW5kIEFGUy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDkwNGI5NGQ0MGUwODVlYTBiYzBmYjJiZTYxNmE1NjE5NjQwNDgyODcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAxNDoyMjo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zeW1saW5rLmMgYi9mcy9hZnMvc3ltbGluay5jCmluZGV4IGVkNTg2ODM2OWYzNzJkLi4xNmI0ODIzY2I3YjdlNyAxMDA2NDQKLS0tIGEvZnMvYWZzL3N5bWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc3ltbGluay5jCkBAIC0yNTUsMTEgJiM0MzsyNTUsMTEgQEAgaW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJfQogCiAJaWYgKHJldCA9PSAwKSB7Ci0JCW11dGV4X2xvY2soJmFtcDt2bm9kZS0mZ3Q7bmV0ZnMud2JfbG9jayk7CiYjNDM7CQluZXRmc193Yl9iZWdpbigmYW1wO3Zub2RlLSZndDtuZXRmcywgZmFsc2UpOwogCQluZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIodm5vZGUtJmd0O2RpcmVjdG9yeSk7CiAJCXZub2RlLSZndDtkaXJlY3RvcnkgPSBOVUxMOwogCQl2bm9kZS0mZ3Q7ZGlyZWN0b3J5X3NpemUgPSAwOwotCQltdXRleF91bmxvY2soJmFtcDt2bm9kZS0mZ3Q7bmV0ZnMud2JfbG9jayk7CiYjNDM7CQluZXRmc193Yl9lbmQoJmFtcDt2bm9kZS0mZ3Q7bmV0ZnMpOwogCX0gZWxzZSBpZiAocmV0ID09IDEpIHsKIAkJcmV0ID0gMDsgLyogU2tpcHBlZCB3cml0ZSBkdWUgdG8gbG9jayBjb25mbGljdC4gKi8KIAl9CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL25hbWVpLmMgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmMKaW5kZXggMjkzN2RiNjkwYjQwYjUuLmQ0MzA5ZGZiNTVkZjRlIDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCkBAIC0zNzUsNyAmIzQzOzM3NSw3IEBAIGludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKIAkJCQkJICAgICYjMzQ7UmVuYW1lIGZhaWxlZCB3aXRoIGVycm9yICVkJiMzNDssIHJldCk7CiAJfQogCi0JX19jYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKHJlcCkpOwomIzQzOwljYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKHJlcCkpOwogCWVuZF9yZW5hbWluZygmYW1wO3JkKTsKIAlfbGVhdmUoJiMzNDsgPSAwJiMzNDspOwogCXJldHVybiAwOwpAQCAtNDY3LDcgJiM0Mzs0NjcsNiBAQCBzdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCkKIAlyZXQgPSAtRUlOVkFMOwogCWlmICh1bmxpa2VseSghZmlsZS0mZ3Q7Zl9vcC0mZ3Q7cmVhZF9pdGVyKSB8fAogCSAgICB1bmxpa2VseSghZmlsZS0mZ3Q7Zl9vcC0mZ3Q7d3JpdGVfaXRlcikpIHsKLQkJZnB1dChmaWxlKTsKIAkJcHJfbm90aWNlKCYjMzQ7Q2FjaGUgZG9lcyBub3Qgc3VwcG9ydCByZWFkX2l0ZXIgYW5kIHdyaXRlX2l0ZXJcbiYjMzQ7KTsKIAkJZ290byBlcnJfdW51c2U7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jCmluZGV4IDc2ZDBmNmEyOWFiYWIyLi4yNGE4YTU0MThlMzExOSAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYwpAQCAtNjU5LDcgJiM0Mzs2NTksNyBAQCBpbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICpjdHgsCiAJICogd2l0aGluIHRoZSBjYWNoZSBncmFudWxlIGNvbnRhaW5pbmcgdGhlIEVPRiwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkCiAJICogdG8gcHJlbG9hZCB0aGUgZ3JhbnVsZS4KIAkgKi8KLQlpZiAoIW5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoY3R4KSAmYW1wOyZhbXA7CiYjNDM7CWlmICghbmV0ZnNfaXNfY2FjaGVfbWF5YmVfZW5hYmxlZChjdHgpICZhbXA7JmFtcDsKIAkgICAgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKGZvbGlvLCBwb3MsIGxlbiwgZmFsc2UpKSB7CiAJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3JoX3dyaXRlX3pza2lwKTsKIAkJZ290byBoYXZlX2ZvbGlvX25vX3dhaXQ7CmRpZmYgLS1naXQgYS9mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jIGIvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYwppbmRleCA2YmRlMzMyMGJjZWM2Ni4uMmNkYjY4ZTZiMTZmZmYgMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYwpAQCAtMjc3LDcgJiM0MzsyNzcsNyBAQCBzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJCSAqIGNhY2hpbmcgc2VydmljZSB0ZW1wb3JhcmlseSBiZWNhdXNlIHRoZSBiYWNraW5nIHN0b3JlIGdvdAogCQkgKiBjdWxsZWQuCiAJCSAqLwotCQlpZiAobmV0ZnNfaXNfY2FjaGVfZW5hYmxlZChjdHgpKSB7CiYjNDM7CQlpZiAobmV0ZnNfaXNfY2FjaGVfbWF5YmVfZW5hYmxlZChjdHgpKSB7CiAJCQlpZiAoZmluZm8pIHsKIAkJCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93aF93c3RyZWFtX2NvbmZsaWN0KTsKIAkJCQlnb3RvIGZsdXNoX2NvbnRlbnQ7CmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jCmluZGV4IDI1ZjhjZWIxNWZhZDY0Li5jMTZmYmFkMjg2YTE3NyAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMKQEAgLTE2NiwxMyAmIzQzOzE2NiwxNiBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAJCSAqLwogCQlzdWJyZXEtJmd0O2Vycm9yID0gLUVBR0FJTjsKIAkJdHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpOwotCQlpZiAoc3VicmVxLSZndDt0cmFuc2ZlcnJlZCAmZ3Q7IDApCiYjNDM7CQlpZiAoc3VicmVxLSZndDt0cmFuc2ZlcnJlZCAmZ3Q7IDApIHsKIAkJCWlvdl9pdGVyX2FkdmFuY2UoJmFtcDt3cmVxLSZndDtidWZmZXIuaXRlciwgc3VicmVxLSZndDt0cmFuc2ZlcnJlZCk7CiYjNDM7CQkJd3JlcS0mZ3Q7dHJhbnNmZXJyZWQgJiM0Mzs9IHN1YnJlcS0mZ3Q7dHJhbnNmZXJyZWQ7CiYjNDM7CQl9CiAKIAkJaWYgKHN0cmVhbS0mZ3Q7c291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgJmFtcDsmYW1wOwogCQkgICAgd3JlcS0mZ3Q7bmV0ZnNfb3BzLSZndDtyZXRyeV9yZXF1ZXN0KQogCQkJd3JlcS0mZ3Q7bmV0ZnNfb3BzLSZndDtyZXRyeV9yZXF1ZXN0KHdyZXEsIHN0cmVhbSk7CiAKJiM0MzsJCV9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKIAkJX19jbGVhcl9iaXQoTkVURlNfU1JFUV9ORUVEX1JFVFJZLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX0JPVU5EQVJZLCAmYW1wO3N1YnJlcS0mZ3Q7ZmxhZ3MpOwogCQlfX2NsZWFyX2JpdChORVRGU19TUkVRX0ZBSUxFRCwgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKQEAgLTE4NiwxNyAmIzQzOzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpCiAKIAkJbmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7CiAKLQkJaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSkgewomIzQzOwkJaWYgKHN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZSkKIAkJCXN0cmVhbS0mZ3Q7cHJlcGFyZV93cml0ZShzdWJyZXEpOwotCQkJX19zZXRfYml0KE5FVEZTX1NSRVFfSU5fUFJPR1JFU1MsICZhbXA7c3VicmVxLSZndDtmbGFncyk7Ci0JCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93aF9yZXRyeV93cml0ZV9zdWJyZXEpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGlvdl9pdGVyIHNvdXJjZTsKLQotCQkJbmV0ZnNfcmVzZXRfaXRlcihzdWJyZXEpOwotCQkJc291cmNlID0gc3VicmVxLSZndDtpb19pdGVyOwotCQkJbmV0ZnNfcmVpc3N1ZV93cml0ZShzdHJlYW0sIHN1YnJlcSwgJmFtcDtzb3VyY2UpOwotCQl9CiYjNDM7CQlfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgJmFtcDtzdWJyZXEtJmd0O2ZsYWdzKTsKJiM0MzsJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7CiAJfQogCiAJbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpOwpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvaW50ZXJuYWwuaCBiL2ZzL25ldGZzL2ludGVybmFsLmgKaW5kZXggNjQ1OTk2ZWNmYzgwMzYuLmQ4ODljYWE0MDFkYzI0IDEwMDY0NAotLS0gYS9mcy9uZXRmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2ludGVybmFsLmgKQEAgLTIzOSw2ICYjNDM7MjM5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRmc19pc19jYWNoZV9lbmFibGVkKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4KQogI2VuZGlmCiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZnNfaXNfY2FjaGVfbWF5YmVfZW5hYmxlZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCkKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTQ0FDSEUpCiYjNDM7CXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gY3R4LSZndDtjYWNoZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkgJmFtcDsmYW1wOwomIzQzOwkJdGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfSVNfQ0FDSElORywgJmFtcDtjb29raWUtJmd0O2ZsYWdzKTsKJiM0MzsjZWxzZQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogLyoKICAqIEdldCBhIHJlZiBvbiBhIG5ldGZzIGdyb3VwIGF0dGFjaGVkIHRvIGEgZGlydHkgcGFnZSAoZS5nLiBhIGNlcGggc25hcCkuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2xvY2tpbmcuYyBiL2ZzL25ldGZzL2xvY2tpbmcuYwppbmRleCAyMjQ5ZWNkMDlkMGE4ZC4uNGUzYmUyYjgxNTA0MDggMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL2xvY2tpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9sb2NraW5nLmMKQEAgLTksNiAmIzQzOzksMTEgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmcy5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIAomIzQzO3N0cnVjdCBuZXRmc193Yl93YWl0ZXIgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CQkvKiBMaW5rIGluIGljdHgtJmd0O3diX3F1ZXVlICovCiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdAkqd2FpdGVyOwkvKiBXYWl0ZXIgdGFzazsgY2xlYXJlZCB3aGVuIGxvY2sgZ3JhbnRlZCAqLwomIzQzO307CiYjNDM7CiAvKgogICogaW5vZGVfZGlvX3dhaXRfaW50ZXJydXB0aWJsZSAtIHdhaXQgZm9yIG91dHN0YW5kaW5nIERJTyByZXF1ZXN0cyB0byBmaW5pc2gKICAqIEBpbm9kZTogaW5vZGUgdG8gd2FpdCBmb3IKQEAgLTIwMywzICYjNDM7MjA4LDkzIEBAIHZvaWQgbmV0ZnNfZW5kX2lvX2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCXVwX3JlYWQoJmFtcDtpbm9kZS0mZ3Q7aV9yd3NlbSk7CiB9CiBFWFBPUlRfU1lNQk9MKG5ldGZzX2VuZF9pb19kaXJlY3QpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogV2FpdCB0byBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gd3JpdGViYWNrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIG5ldGZzX3diX2JlZ2luX3dhaXQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGZzX3diX3dhaXRlciB3YWl0ZXIgPSB7fTsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwomIzQzOwlib29sIGdvdCA9IGZhbHNlOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtpY3R4LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhORVRGU19JQ1RYX1dCX0xPQ0ssICZhbXA7aWN0eC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKJiM0MzsJCXdhaXRlci53YWl0ZXIgPSB0c2s7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7d2FpdGVyLmxpbmssICZhbXA7aWN0eC0mZ3Q7d2JfcXVldWUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZ290ID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9jaygmYW1wO2ljdHgtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoIWdvdCkgewomIzQzOwkJZm9yICg7OykgewomIzQzOwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKJiM0MzsJCQkvKiBSZWFkIHdhaXRlciBiZWZvcmUgYWNjZXNzaW5nIGlub2RlIHN0YXRlLiAqLwomIzQzOwkJCWlmIChzbXBfbG9hZF9hY3F1aXJlKCZhbXA7d2FpdGVyLndhaXRlcikgPT0gTlVMTCkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJc2NoZWR1bGUoKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBuZXRmc193Yl9iZWdpbiAtIEJlZ2luIHdyaXRlYmFjaywgd2FpdGluZyBpZiBuZWVkIGJlCiYjNDM7ICogQGljdHg6IFRoZSBpbm9kZSB0byBnZXQgd3JpdGViYWNrIGFjY2VzcyBvbgomIzQzOyAqIEBub3dhaXQ6IFJldHVybiBmYWlsdXJlIGltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIHdhaXRpbmcgaWYgdHJ1ZQomIzQzOyAqCiYjNDM7ICogQmVnaW4gd3JpdGViYWNrIHRvIGFuIGlub2RlLCB3YWl0aW5nIGZvciBleGNsdXNpdmUgYWNjZXNzIGlmIEBub3dhaXQgaXMKJiM0MzsgKiBmYWxzZS4gIFRoaXMgcHJldmVudHMgY29sbGVjdGlvbiBmcm9tIGJlaW5nIGRvbmUgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdAomIzQzOyAqIHRvIHRoZSBpc3N1YW5jZSBvZiB3cml0ZSBzdWJyZXF1ZXN0cy4KJiM0MzsgKgomIzQzOyAqIE5vdGUgdGhhdCB3cml0ZWJhY2sgbWF5IGJlIGVuZGVkIGluIGEgZGlmZmVyZW50IHByb2Nlc3MgKGUuZy4gdGhlIGNvbGxlY3Rpb24KJiM0MzsgKiBmdW5jdGlvbiBvbiBhIHdvcmtxdWV1ZSkgdGhhbiBzdGFydGVkIGl0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBUcnVlIGlmIGNhbiBwcm9jZWVkLCBmYWxzZSBpZiBkZW5pZWQuCiYjNDM7ICovCiYjNDM7Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KQomIzQzO3sKJiM0MzsJaWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soTkVURlNfSUNUWF9XQl9MT0NLLCAmYW1wO2ljdHgtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAobm93YWl0KSB7CiYjNDM7CQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93Yl9sb2NrX3NraXApOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3diX2xvY2tfd2FpdCk7CiYjNDM7CXJldHVybiBuZXRmc193Yl9iZWdpbl93YWl0KGljdHgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTsKJiM0MzsKJiM0MzsvKiBuZXRmc193Yl9lbmQgLSBFbmQgd3JpdGViYWNrCiYjNDM7ICogQGljdHg6IFRoZSBpbm9kZSB3ZSBoYXZlIHdyaXRlYmFjayBhY2Nlc3MgdG8KJiM0MzsgKgomIzQzOyAqIEVuZCB3cml0ZWJhY2sgYWNjZXNzIG9uIGFuIGlub2RlLCB3YWtpbmcgdXAgdGhlIG5leHQgd3JpdGViYWNrIHJlcXVlc3QuCiYjNDM7ICovCiYjNDM7dm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGZzX3diX3dhaXRlciAqd2FpdGVyOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKJiM0MzsKJiM0MzsJV0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChORVRGU19JQ1RYX1dCX0xPQ0ssICZhbXA7aWN0eC0mZ3Q7ZmxhZ3MpKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aWN0eC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXdhaXRlciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO2ljdHgtJmd0O3diX3F1ZXVlLCBzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyLCBsaW5rKTsKJiM0MzsJaWYgKHdhaXRlcikgewomIzQzOwkJbGlzdF9kZWwoJmFtcDt3YWl0ZXItJmd0O2xpbmspOwomIzQzOwkJdHNrID0gd2FpdGVyLSZndDt3YWl0ZXI7CiYjNDM7CQkvKiBXcml0ZSBpbm9kZSBzdGF0ZSBiZWZvcmUgY2xlYXJpbmcgd2FpdGVyLiAqLwomIzQzOwkJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDt3YWl0ZXItJmd0O3dhaXRlciwgTlVMTCk7CiYjNDM7CQl3YWtlX3VwX3Byb2Nlc3ModHNrKTsKJiM0MzsJCXB1dF90YXNrX3N0cnVjdCh0c2spOwomIzQzOwl9IGVsc2UgewomIzQzOwkJY2xlYXJfYml0X3VubG9jayhORVRGU19JQ1RYX1dCX0xPQ0ssICZhbXA7aWN0eC0mZ3Q7ZmxhZ3MpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aWN0eC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wobmV0ZnNfd2JfZW5kKTsKZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYyBiL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYwppbmRleCAyNGZjMmJiMmY4YTQ3Yi4uMjEwZWI4ZjM5NThkNzcgMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMKQEAgLTQwOCw2ICYjNDM7NDA4LDE2IEBAIGJvb2wgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSkKIAluZXRmc193YWtlX3JyZXFfZmxhZyh3cmVxLCBORVRGU19SUkVRX0lOX1BST0dSRVNTLCBuZXRmc19ycmVxX3RyYWNlX3dha2VfaXApOwogCS8qIEFzIHdlIGNsZWFyZWQgTkVURlNfUlJFUV9JTl9QUk9HUkVTUywgd2UgYWNxdWlyZWQgaXRzIHJlZi4gKi8KIAomIzQzOwlzd2l0Y2ggKHdyZXEtJmd0O29yaWdpbikgewomIzQzOwljYXNlIE5FVEZTX1dSSVRFQkFDSzoKJiM0MzsJY2FzZSBORVRGU19XUklURUJBQ0tfU0lOR0xFOgomIzQzOwljYXNlIE5FVEZTX1dSSVRFVEhST1VHSDoKJiM0MzsJCW5ldGZzX3diX2VuZChpY3R4KTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKIAlpZiAod3JlcS0mZ3Q7aW9jYikgewogCQlzaXplX3Qgd3JpdHRlbiA9IG1pbih3cmVxLSZndDt0cmFuc2ZlcnJlZCwgd3JlcS0mZ3Q7bGVuKTsKIAkJd3JlcS0mZ3Q7aW9jYi0mZ3Q7a2lfcG9zICYjNDM7PSB3cml0dGVuOwpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKaW5kZXggYzAzYzdjYzQ1ZTQ3MTYuLmYyNzYxYzk5Nzk1YTZiIDEwMDY0NAotLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKQEAgLTEwNiw3ICYjNDM7MTA2LDcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJX2VudGVyKCYjMzQ7Uj0leCYjMzQ7LCB3cmVxLSZndDtkZWJ1Z19pZCk7CiAKIAlpY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS0mZ3Q7aW5vZGUpOwotCWlmIChpc19jYWNoZWFibGUgJmFtcDsmYW1wOyBuZXRmc19pc19jYWNoZV9lbmFibGVkKGljdHgpKQomIzQzOwlpZiAoaXNfY2FjaGVhYmxlKQogCQlmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbigmYW1wO3dyZXEtJmd0O2NhY2hlX3Jlc291cmNlcywgbmV0ZnNfaV9jb29raWUoaWN0eCkpOwogCWlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KCZhbXA7d3JlcS0mZ3Q7YnVmZmVyLCB3cmVxLSZndDtkZWJ1Z19pZCwgSVRFUl9TT1VSQ0UpICZsdDsgMCkKIAkJZ290byBub21lbTsKQEAgLTU1MSwxNCAmIzQzOzU1MSw4IEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJaW50IGVycm9yID0gMDsKIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spKSB7Ci0JCWlmICh3YmMtJmd0O3N5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpIHsKLQkJCW5ldGZzX3N0YXQoJmFtcDtuZXRmc19uX3diX2xvY2tfc2tpcCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93Yl9sb2NrX3dhaXQpOwotCQltdXRleF9sb2NrKCZhbXA7aWN0eC0mZ3Q7d2JfbG9jayk7Ci0JfQomIzQzOwlpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpCiYjNDM7CQlyZXR1cm4gMDsKIAogCS8qIE5lZWQgdGhlIGZpcnN0IGZvbGlvIHRvIGJlIGFibGUgdG8gc2V0IHVwIHRoZSBvcC4gKi8KIAlmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgTlVMTCwgJmFtcDtlcnJvcik7CkBAIC01ODgsMTMgJiM0Mzs1ODIsMTMgQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCX0KIAogCQllcnJvciA9IG5ldGZzX3dyaXRlX2ZvbGlvKHdyZXEsIHdiYywgZm9saW8pOwotCQlpZiAoZXJyb3IgJmx0OyAwKQotCQkJYnJlYWs7CiYjNDM7CQlpZiAoZXJyb3IgPT0gLUVOT01FTSkgewomIzQzOwkJCWZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSh3YmMsIGZvbGlvKTsKJiM0MzsJCQlmb2xpb191bmxvY2soZm9saW8pOwomIzQzOwkJfQogCX0gd2hpbGUgKChmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sICZhbXA7ZXJyb3IpKSk7CiAKIAluZXRmc19lbmRfaXNzdWVfd3JpdGUod3JlcSk7Ci0KLQltdXRleF91bmxvY2soJmFtcDtpY3R4LSZndDt3Yl9sb2NrKTsKIAluZXRmc193YWtlX2NvbGxlY3Rvcih3cmVxKTsKIAogCW5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X3JldHVybik7CkBAIC02MDIsOSAmIzQzOzU5NiwxNiBAQCBpbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlyZXR1cm4gZXJyb3I7CiAKIGNvdWxkbnRfc3RhcnQ6Ci0JbmV0ZnNfa2lsbF9kaXJ0eV9wYWdlcyhtYXBwaW5nLCB3YmMsIGZvbGlvKTsKJiM0MzsJaWYgKGVycm9yID09IC1FTk9NRU0pIHsKJiM0MzsJCWZvbGlvX3JlZGlydHlfZm9yX3dyaXRlcGFnZSh3YmMsIGZvbGlvKTsKJiM0MzsJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQlmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sICZhbXA7ZXJyb3IpOwomIzQzOwkJV0FSTl9PTl9PTkNFKGZvbGlvICE9IE5VTEwpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZnNfa2lsbF9kaXJ0eV9wYWdlcyhtYXBwaW5nLCB3YmMsIGZvbGlvKTsKJiM0MzsJfQogb3V0OgotCW11dGV4X3VubG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwomIzQzOwluZXRmc193Yl9lbmQoaWN0eCk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgZXJyb3IpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTYxOCwxNiAmIzQzOzYxOSwxNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbgogCXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gTlVMTDsKIAlzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHggPSBuZXRmc19pbm9kZShmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApKTsKIAotCW11dGV4X2xvY2soJmFtcDtpY3R4LSZndDt3Yl9sb2NrKTsKJiM0MzsJbmV0ZnNfd2JfYmVnaW4oaWN0eCwgZmFsc2UpOwogCiAJd3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoaW9jYi0mZ3Q7a2lfZmlscC0mZ3Q7Zl9tYXBwaW5nLCBpb2NiLSZndDtraV9maWxwLAogCQkJCSAgICAgIGlvY2ItJmd0O2tpX3BvcywgTkVURlNfV1JJVEVUSFJPVUdIKTsKIAlpZiAoSVNfRVJSKHdyZXEpKSB7Ci0JCW11dGV4X3VubG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwomIzQzOwkJbmV0ZnNfd2JfZW5kKGljdHgpOwogCQlyZXR1cm4gd3JlcTsKIAl9CiAKIAl3cmVxLSZndDtpb19zdHJlYW1zWzBdLmF2YWlsID0gdHJ1ZTsKJiM0MzsJX19zZXRfYml0KE5FVEZTX1JSRVFfT0ZGTE9BRF9DT0xMRUNUSU9OLCAmYW1wO3dyZXEtJmd0O2ZsYWdzKTsKIAl0cmFjZV9uZXRmc193cml0ZSh3cmVxLCBuZXRmc193cml0ZV90cmFjZV93cml0ZXRocm91Z2gpOwogCXJldHVybiB3cmVxOwogfQpAQCAtNjg1LDcgJiM0Mzs2ODcsNiBAQCBpbnQgbmV0ZnNfYWR2YW5jZV93cml0ZXRocm91Z2goc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsIHN0cnVjdCB3cml0ZWJhY2tfYwogc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJCSAgICAgICBzdHJ1Y3QgZm9saW8gKndyaXRldGhyb3VnaF9jYWNoZSkKIHsKLQlzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHggPSBuZXRmc19pbm9kZSh3cmVxLSZndDtpbm9kZSk7CiAJc3NpemVfdCByZXQ7CiAKIAlfZW50ZXIoJiMzNDtSPSV4JiMzNDssIHdyZXEtJmd0O2RlYnVnX2lkKTsKQEAgLTY5OSw4ICYjNDM7NzAwLDYgQEAgc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2MKIAogCW5ldGZzX2VuZF9pc3N1ZV93cml0ZSh3cmVxKTsKIAotCW11dGV4X3VubG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwotCiAJaWYgKHdyZXEtJmd0O2lvY2IpCiAJCXJldCA9IC1FSU9DQlFVRVVFRDsKIAllbHNlCkBAIC04NDcsMTUgJiM0Mzs4NDYsMTAgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJaWYgKFdBUk5fT05fT05DRSghaW92X2l0ZXJfaXNfZm9saW9xKGl0ZXIpKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDtpY3R4LSZndDt3Yl9sb2NrKSkgewotCQlpZiAod2JjLSZndDtzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7Ci0JCQkvKiBUaGUgVkZTIHdpbGwgaGF2ZSB1bmRpcnRpZWQgdGhlIGlub2RlLiAqLwotCQkJbmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoJmFtcDtpY3R4LSZndDtpbm9kZSk7Ci0JCQluZXRmc19zdGF0KCZhbXA7bmV0ZnNfbl93Yl9sb2NrX3NraXApOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJbmV0ZnNfc3RhdCgmYW1wO25ldGZzX25fd2JfbG9ja193YWl0KTsKLQkJbXV0ZXhfbG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwomIzQzOwlpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy0mZ3Q7c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpIHsKJiM0MzsJCS8qIFRoZSBWRlMgd2lsbCBoYXZlIHVuZGlydGllZCB0aGUgaW5vZGUuICovCiYjNDM7CQluZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eSgmYW1wO2ljdHgtJmd0O2lub2RlKTsKJiM0MzsJCXJldHVybiAxOwogCX0KIAogCXdyZXEgPSBuZXRmc19jcmVhdGVfd3JpdGVfcmVxKG1hcHBpbmcsIE5VTEwsIDAsIE5FVEZTX1dSSVRFQkFDS19TSU5HTEUpOwpAQCAtODkzLDcgJiM0Mzs4ODcsNiBAQCBpbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAlzbXBfd21iKCk7IC8qIFdyaXRlIGxpc3RzIGJlZm9yZSBBTExfUVVFVUVELiAqLwogCXNldF9iaXQoTkVURlNfUlJFUV9BTExfUVVFVUVELCAmYW1wO3dyZXEtJmd0O2ZsYWdzKTsKIAotCW11dGV4X3VubG9jaygmYW1wO2ljdHgtJmd0O3diX2xvY2spOwogCW5ldGZzX3dha2VfY29sbGVjdG9yKHdyZXEpOwogCiAJbmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfcmV0dXJuKTsKQEAgLTkwMSw3ICYjNDM7ODk0LDcgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJcmV0dXJuIHJldDsKIAogY291bGRudF9zdGFydDoKLQltdXRleF91bmxvY2soJmFtcDtpY3R4LSZndDt3Yl9sb2NrKTsKJiM0MzsJbmV0ZnNfd2JfZW5kKGljdHgpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZnMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZnMuaAppbmRleCAyNDNjMGY3Mzc5Mzg4My4uMWJjMTIwZDYxYzViZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGZzLmgKQEAgLTYxLDE0ICYjNDM7NjEsMTYgQEAgc3RydWN0IG5ldGZzX2lub2RlIHsKICNpZiBJU19FTkFCTEVEKENPTkZJR19GU0NBQ0hFKQogCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY2FjaGU7CiAjZW5kaWYKLQlzdHJ1Y3QgbXV0ZXgJCXdiX2xvY2s7CS8qIFdyaXRlYmFjayBzZXJpYWxpc2F0aW9uICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQJd2JfcXVldWU7CS8qIFF1ZXVlIG9mIHByb2Nlc3NlcyB3YW50aW5nIHRvIGRvIHdyaXRlYmFjayAqLwogCWxvZmZfdAkJCV9yZW1vdGVfaV9zaXplOwkvKiBTaXplIG9mIHRoZSByZW1vdGUgZmlsZSAqLwogCWxvZmZfdAkJCV96ZXJvX3BvaW50OwkvKiBTaXplIGFmdGVyIHdoaWNoIHdlIGFzc3VtZSB0aGVyZSYjMzk7cyBubyBkYXRhCiAJCQkJCQkgKiBvbiB0aGUgc2VydmVyICovCiYjNDM7CXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBMb2NrIGNvdmVyaW5nIHdiX3F1ZXVlICovCiAJYXRvbWljX3QJCWlvX2NvdW50OwkvKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgcmVxcyAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogI2RlZmluZSBORVRGU19JQ1RYX09ESVJFQ1QJMAkJLyogVGhlIGZpbGUgaGFzIERJTyBpbiBwcm9ncmVzcyAqLwogI2RlZmluZSBORVRGU19JQ1RYX1VOQlVGRkVSRUQJMQkJLyogSS9PIHNob3VsZCBub3QgdXNlIHRoZSBwYWdlY2FjaGUgKi8KJiM0MzsjZGVmaW5lIE5FVEZTX0lDVFhfV0JfTE9DSwkyCQkvKiBXcml0ZWJhY2sgc2VyaWFsaXNhdGlvbiBsb2NrICovCiAjZGVmaW5lIE5FVEZTX0lDVFhfTU9ESUZJRURfQVRUUiAzCQkvKiBJbmRpY2F0ZSBjaGFuZ2UgaW4gbXRpbWUvY3RpbWUgKi8KICNkZWZpbmUgTkVURlNfSUNUWF9TSU5HTEVfTk9fVVBMT0FEIDQJCS8qIE1vbm9saXRoaWMgcGF5bG9hZCwgY2FjaGUgYnV0IG5vIHVwbG9hZCAqLwogfTsKQEAgLTQ2Miw2ICYjNDM7NDY0LDEwIEBAIGludCBuZXRmc19hbGxvY19mb2xpb3FfYnVmZmVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJICAgICAgc2l6ZV90ICpfY3VyX3NpemUsIHNzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgbmV0ZnNfZnJlZV9mb2xpb3FfYnVmZmVyKHN0cnVjdCBmb2xpb19xdWV1ZSAqZnEpOwogCiYjNDM7LyogV3JpdGViYWNrIGV4Y2x1c2lvbiBBUEkuICovCiYjNDM7Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTsKJiM0Mzt2b2lkIG5ldGZzX3diX2VuZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpOwomIzQzOwogLyoqCiAgKiBuZXRmc19pbm9kZSAtIEdldCB0aGUgbmV0ZnMgaW5vZGUgY29udGV4dCBmcm9tIHRoZSBpbm9kZQogICogQGlub2RlOiBUaGUgaW5vZGUgdG8gcXVlcnkKQEAgLTc0Myw3ICYjNDM7NzQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2lub2RlX2luaXQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRlNDQUNIRSkKIAljdHgtJmd0O2NhY2hlID0gTlVMTDsKICNlbmRpZgotCW11dGV4X2luaXQoJmFtcDtjdHgtJmd0O3diX2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2N0eC0mZ3Q7d2JfcXVldWUpOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2N0eC0mZ3Q7bG9jayk7CiAJLyogLSZndDtyZWxlYXNlcGFnZSgpIGRyaXZlcyB6ZXJvX3BvaW50ICovCiAJaWYgKHVzZV96ZXJvX3BvaW50KSB7CiAJCWN0eC0mZ3Q7X3plcm9fcG9pbnQgPSBjdHgtJmd0O19yZW1vdGVfaV9zaXplOwpAQCAtNzUzLDcgJiM0Mzs3NjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfaW5vZGVfaW5pdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCwKIAogLyoqCiAgKiBuZXRmc19yZXNpemVfZmlsZSAtIE5vdGUgdGhhdCBhIGZpbGUgZ290IHJlc2l6ZWQKLSAqIEBjdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkCiYjNDM7ICogQGljdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkCiAgKiBAbmV3X2lfc2l6ZTogVGhlIG5ldyBmaWxlIHNpemUKICAqIEBjaGFuZ2VkX29uX3NlcnZlcjogVGhlIGNoYW5nZSB3YXMgYXBwbGllZCB0byB0aGUgc2VydmVyCiAgKgpkaWZmIC0tZ2l0IGEvbGliL2lvdl9pdGVyLmMgYi9saWIvaW92X2l0ZXIuYwppbmRleCAyNDM2NjJhZjFhZjczZi4uNWE2NDM0NzA5NzE2ZTEgMTAwNjQ0Ci0tLSBhL2xpYi9pb3ZfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9pb3ZfaXRlci5jCkBAIC0xNTY4LDYgJiM0MzsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJdW5zaWduZWQgaW50IG5yID0gMCwgb2Zmc2V0OwogCWxvZmZfdCBwb3MgPSBpLSZndDt4YXJyYXlfc3RhcnQgJiM0MzsgaS0mZ3Q7aW92X29mZnNldDsKJiM0MzsJYm9vbCB3aWxsX2FsbG9jID0gISpwYWdlczsKIAlYQV9TVEFURSh4YXMsIGktJmd0O3hhcnJheSwgcG9zICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwogCiAJb2Zmc2V0ID0gcG9zICZhbXA7IH5QQUdFX01BU0s7CkBAIC0xNTk1LDYgJiM0MzsxNTk2LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSwKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKJiM0MzsJaWYgKCFucikgewomIzQzOwkJaWYgKHdpbGxfYWxsb2MpIHsKJiM0MzsJCQlrdmZyZWUoKnBhZ2VzKTsKJiM0MzsJCQkqcGFnZXMgPSBOVUxMOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKIAltYXhzaXplID0gbWluX3Qoc2l6ZV90LCBuciAqIFBBR0VfU0laRSAtIG9mZnNldCwgbWF4c2l6ZSk7CiAJaW92X2l0ZXJfYWR2YW5jZShpLCBtYXhzaXplKTsKIAlyZXR1cm4gbWF4c2l6ZTsKQEAgLTE2MjgsNiAmIzQzOzE2MzcsOCBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLAogCWJpLmJpX2J2ZWNfZG9uZSA9IHNraXA7CiAKIAltYXhwYWdlcyA9IHdhbnRfcGFnZXNfYXJyYXkocGFnZXMsIG1heHNpemUsIHNraXAsIG1heHBhZ2VzKTsKJiM0MzsJaWYgKCFtYXhwYWdlcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCiAJd2hpbGUgKGJpLmJpX3NpemUgJmFtcDsmYW1wOyBiaS5iaV9pZHggJmx0OyBpLSZndDtucl9zZWdzKSB7CiAJCXN0cnVjdCBiaW9fdmVjIGJ2ID0gYnZlY19pdGVyX2J2ZWMoaS0mZ3Q7YnZlYywgYmkpOwpAQCAtMTc0NSw2ICYjNDM7MTc1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksCiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSAwOwogCXNpemVfdCBvZmZzZXQ7CiYjNDM7CWJvb2wgd2lsbF9hbGxvYyA9ICEqcGFnZXM7CiAJaW50IHJlczsKIAogCWlmIChpLSZndDtkYXRhX3NvdXJjZSA9PSBJVEVSX0RFU1QpCkBAIC0xNzYxLDggJiM0MzsxNzczLDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksCiAJaWYgKCFtYXhwYWdlcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzID0gcGluX3VzZXJfcGFnZXNfZmFzdChhZGRyLCBtYXhwYWdlcywgZ3VwX2ZsYWdzLCAqcGFnZXMpOwotCWlmICh1bmxpa2VseShyZXMgJmx0Oz0gMCkpCiYjNDM7CWlmICh1bmxpa2VseShyZXMgJmx0Oz0gMCkpIHsKJiM0MzsJCWlmICh3aWxsX2FsbG9jKSB7CiYjNDM7CQkJa3ZmcmVlKCpwYWdlcyk7CiYjNDM7CQkJKnBhZ2VzID0gTlVMTDsKJiM0MzsJCX0KIAkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwogCW1heHNpemUgPSBtaW5fdChzaXplX3QsIG1heHNpemUsIHJlcyAqIFBBR0VfU0laRSAtIG9mZnNldCk7CiAJaW92X2l0ZXJfYWR2YW5jZShpLCBtYXhzaXplKTsKIAlyZXR1cm4gbWF4c2l6ZTsKZGlmZiAtLWdpdCBhL2xpYi9zY2F0dGVybGlzdC5jIGIvbGliL3NjYXR0ZXJsaXN0LmMKaW5kZXggYjdmZTkxZWYzNWI4YzYuLjZlYTQwZDJlNjI0NzU1IDEwMDY0NAotLS0gYS9saWIvc2NhdHRlcmxpc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvc2NhdHRlcmxpc3QuYwpAQCAtMTM2Niw2ICYjNDM7MTM2Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGV4dHJhY3RfeGFycmF5X3RvX3NnKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJc2dfbWF4LS07CiAKIAkJbWF4c2l6ZSAtPSBsZW47CiYjNDM7CQlzdGFydCAmIzQzOz0gbGVuOwogCQlyZXQgJiM0Mzs9IGxlbjsKIAkJaWYgKG1heHNpemUgJmx0Oz0gMCB8fCBzZ19tYXggPT0gMCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMgYi9saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYwppbmRleCBmMDJmN2I3YWE3OTYwNS4uZTdlMTU0Zjk0ZjY2NWYgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jCkBAIC0yNzUsNyAmIzQzOzI3NSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBpb3Zfa3VuaXRfY29weV90b19idmVjKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlzdHJ1Y3QgcGFnZSAqKnNwYWdlcywgKipicGFnZXM7CiAJdTggKnNjcmF0Y2gsICpidWZmZXI7CiAJc2l6ZV90IGJ1ZnNpemUsIG5wYWdlcywgc2l6ZSwgY29waWVkOwotCWludCBpLCBiLCBwYXR0OwomIzQzOwlpbnQgaSwgcGF0dDsKIAogCWJ1ZnNpemUgPSAweDEwMDAwMDsKIAlucGFnZXMgPSBidWZzaXplIC8gUEFHRV9TSVpFOwpAQCAtMjk4LDEwICYjNDM7Mjk4LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpdGVyLm5yX3NlZ3MsIDApOwogCiAJLyogQnVpbGQgdGhlIGV4cGVjdGVkIGltYWdlIGluIHRoZSBzY3JhdGNoIGJ1ZmZlci4gKi8KLQliID0gMDsKIAlwYXR0ID0gMDsKIAltZW1zZXQoc2NyYXRjaCwgMCwgYnVmc2l6ZSk7Ci0JZm9yIChwciA9IGJ2ZWNfdGVzdF9yYW5nZXM7IHByLSZndDtmcm9tICZndDs9IDA7IHByJiM0MzsmIzQzOywgYiYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChwciA9IGJ2ZWNfdGVzdF9yYW5nZXM7IHByLSZndDtmcm9tICZndDs9IDA7IHByJiM0MzsmIzQzOykgewogCQl1OCAqcCA9IHNjcmF0Y2ggJiM0MzsgcHItJmd0O3BhZ2UgKiBQQUdFX1NJWkU7CiAKIAkJZm9yIChpID0gcHItJmd0O2Zyb207IGkgJmx0OyBwci0mZ3Q7dG87IGkmIzQzOyYjNDM7KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIGl0IHRvdWNoZXMgYSBzaWduaWZpY2FudCBzd2F0aCBvZiB0aGUga2VybmVsOiBgZnMvYWZzL3N5bWxpbmsuY2AsIGBmcy9jYWNoZWZpbGVzL25hbWVpLmNgLCBhIGJ1bmNoIG9mIGBmcy9uZXRmcy8qYCBmaWxlcyAoYnVmZmVyZWQgcmVhZC93cml0ZSwgZGlyZWN0IHdyaXRlLCBpbnRlcm5hbCBoZWFkZXJzLCBsb2NraW5nLCB3cml0ZSBjb2xsZWN0aW9uLCBpc3N1ZSksIGBpbmNsdWRlL2xpbnV4L25ldGZzLmhgLCBhbmQgc29tZSBzdHVmZiBpbiBgbGliL2AgcmVsYXRlZCB0byBgaW92X2l0ZXJgIGFuZCBgc2NhdHRlcmxpc3RgLCBwbHVzIGEgS1VuaXQgdGVzdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBmb2N1c2VkIGF0dGVudGlvbi4KCkZpcnN0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIHNvbWUgbXV0ZXgtYmFzZWQgbG9ja2luZyBpbiBgYWZzL3N5bWxpbmsuY2Agd2l0aCBhIGN1c3RvbSB3cml0ZWJhY2sgbG9ja2luZyBtZWNoYW5pc20gdXNpbmcgYG5ldGZzX3diX2JlZ2luYCBhbmQgYG5ldGZzX3diX2VuZGAuIFRoYXTigJlzIGludGVyZXN0aW5nOyBzZWVtcyBsaWtlIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIHBlcmhhcHMgYSBjaGFuZ2UgdG8gaGFuZGxlIGNvbnRlbnRpb24gYmV0dGVyLiBgY2FjaGVmaWxlcy9uYW1laS5jYCBsb29rcyBsaWtlIGl0IGlzIHNpbXBsaWZ5aW5nIHNvbWUgaW5vZGUgdXNhZ2UgdHJhY2tpbmcuIFRoZW4gaW4gYGZzL25ldGZzYCB0aGVyZSBpcyBjaGFuZ2VzIHRvIGNhY2hlIGZ1bmN0aW9uYWxpdHkuIGBmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY2Agc2VlbXMgdG8gYmUgZml4aW5nIGEgYnVnIHJlbGF0ZWQgdG8gaXRlcmF0b3IgYWR2YW5jZW1lbnQgZHVyaW5nIGRpcmVjdCB3cml0ZXMsIGFuZCB3ZSYjMzk7cmUgc2VlaW5nIHNvbWUgY2xlYW51cCBvZiBmYWxsYmFja3MuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gbG9jayBpcyBjaGFuZ2VkIGZyb20gYSBtdXRleCB0byBhIHdhaXQgcXVldWUgd2l0aCBhIHNwaW5sb2NrIHdpdGhpbi4gVGhlIGB3cml0ZV9jb2xsZWN0YCBhbmQgYHdyaXRlX2lzc3VlYCBtb2R1bGVzIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSB0aGlzIG5ldyB3cml0ZWJhY2sgbG9ja2luZy4gVGhlcmUgYXJlIGFsc28gYWRqdXN0bWVudHMgZm9yIGhhbmRsaW5nIGAtRU5PTUVNYCBmcm9tIGBuZXRmc193cml0ZV9mb2xpb2AuCgpNb3Zpbmcgb24gdG8gYGxpYi9gLCB0aGUgYGlvdl9pdGVyYCBjb2RlIGlzIGdldHRpbmcgYSBjcml0aWNhbCBsb29rLiBJIHNlZSBmaXhlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdoZW4gZXh0cmFjdGluZyBwYWdlcywgZW5zdXJpbmcgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwLCBlc3BlY2lhbGx5IHdoZW4gYEVOT01FTWAgaXMgZW5jb3VudGVyZWQuIFRoZSBgc2NhdHRlcmxpc3RgIGNvZGUgaGFzIGEgc21hbGwgZml4IHJlbGF0ZWQgdG8gdGhlIGBleHRyYWN0X3hhcnJheV90b19zZ2AgZnVuY3Rpb24uIEFuZCBmaW5hbGx5IHRoZSB0ZXN0IHN1aXRlIGhhcyBoYWQgc29tZSBpcnJlbGV2YW50IHZhcmlhYmxlcyBkZWxldGVkLiBUaGVzZSBhcmUgYWxsIHN1YnRsZSwgYnV0IGltcG9ydGFudCwgY2hhbmdlcyB0aGF0IGNvdWxkIGltcGFjdCBhIGxvdCBvZiB1c2Vyc3BhY2UgYmVoYXZpb3IuCgpGdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgaW1wYWN0ZnVsLiBUaGUgbmV0ZnMgY29kZSBpcyBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIHRoZSBgaW92X2l0ZXJgIGFuZCBgc2NhdHRlcmxpc3RgIGNoYW5nZXMgaGF2ZSBicm9hZCBpbXBsaWNhdGlvbnMsIG5vdCB0byBtZW50aW9uIHRoZSBBRlMgY2hhbmdlcy4gVGhpcyBsb29rcyBsaWtlIGEgZmFpcmx5IGNvbXByZWhlbnNpdmUgc2V0IG9mIG1vZGlmaWNhdGlvbnMuCgpCYXNlZCBvbiB0aGlzLCB0aGlzIHNlcmllcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6eiBtZSEmIzM0OyBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gc3ViamVjdCB0aGlzIHRvIHNvbWUgaGVhdnkgZnV6emluZyBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYnVncy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfTkVURlNfU1VQUE9SVGAgaXMgdGhlIGJpZyBvbmUsIG9idmlvdXNseS4gV2UmIzM5O2xsIG5lZWQgdGhhdCBlbmFibGVkLiBgQ09ORklHX0ZTQ0FDSEVgIGlzIGFsc28gcmVsZXZhbnQsIHNpbmNlIHdlJiMzOTtyZSB0b3VjaGluZyBgY2FjaGVmaWxlc2AuIEFuZCBzaW5jZSBgYWZzL3N5bWxpbmsuY2AgaXMgYmVpbmcgbW9kaWZpZWQsIGBDT05GSUdfQUZTX0ZTYCBpcyBpbXBvcnRhbnQsIHRvby4gQW5kIG9mIGNvdXJzZSwgYENPTkZJR19DQUNIRUZJTEVTYCBhcyBpdCBpbXBhY3RzIHRob3NlIGZ1bmN0aW9uYWxpdGllcyBkaXJlY3RseS4KCkZpbmFsbHksIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCBzZWVtIHRvIGJlOiBgbmV0ZnNfd2JfYmVnaW5gLCBgbmV0ZnNfd2JfZW5kYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXNgLCBhbmQgYGV4dHJhY3RfeGFycmF5X3RvX3NnYC4gSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNvdmVyZWQgd2VsbC4KCkp1c3QgZG91YmxlLWNoZWNraW5nLi4ueXVwLCBgQ09ORklHX05FVEZTX1NVUFBPUlRgIGlzIHRoZSBsaW5jaHBpbi4gV2UmIzM5O3JlIGdvaW5nIHRvIHRyZWF0IHRoaXMgd2l0aCBjYXJlIGFuZCBwcm9jZWVkIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGU19TVVBQT1JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL0tjb25maWctMi1cbmZzL25ldGZzL0tjb25maWc6Mzpjb25maWcgTkVURlNfU1VQUE9SVFxuZnMvbmV0ZnMvS2NvbmZpZy00LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwNgoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb246IGBDT05GSUdfRlNDQUNIRWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBrZXksIG9mIGNvdXJzZSwgaXMgYENPTkZJR19GU0NBQ0hFYC4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IGNvbmZpcm0gdGhlIHN0YXR1cyBvZiB0aGlzIHBhcnRpY3VsYXIgb3B0aW9uLiBJcyBpdCBlbmFibGVkPyBJcyBpdCBidWlsdC1pbiwgbW9kdWxhciwgb3IgZGlzYWJsZWQ/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50IGRlcGVuZGluZyBvbiB0aGUgc2V0dGluZy4gSWYgaXQmIzM5O3MgZW5hYmxlZCwgSSBjYW4gdGhlbiBwcm9jZWVkIHdpdGggbXkgcGxhbm5lZCB0cm91Ymxlc2hvb3Rpbmcgb3IgaW52ZXN0aWdhdGlvbi4gSWYgbm90IGVuYWJsZWQsIGl0JiMzOTtzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgYXBwcm9hY2guIEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gY29uc2lkZXIgaXRzIGRlcGVuZGVuY3kgdG8gb3RoZXIgZmVhdHVyZXMgYXMgd2VsbC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQgc3RhbmRzIHRvIGtub3cgd2hlcmUgdG8gbW92ZSBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU0NBQ0hFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL0tjb25maWc9MjU9Y29uZmlnIE5FVEZTX0RFQlVHXG4tLVxuZnMvbmV0ZnMvS2NvbmZpZy0zMi1cbmZzL25ldGZzL0tjb25maWc6MzM6Y29uZmlnIEZTQ0FDSEVcbmZzL25ldGZzL0tjb25maWctMzQtXHRib29sIFwmIzM0O0dlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXJcJiMzNDtcbi0tXG5mcy9uZXRmcy9LY29uZmlnLTQzLVxuZnMvbmV0ZnMvS2NvbmZpZzo0NDpjb25maWcgRlNDQUNIRV9TVEFUU1xuZnMvbmV0ZnMvS2NvbmZpZy00NS1cdGJvb2wgXCYjMzQ7R2F0aGVyIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIG9uIGxvY2FsIGNhY2hpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIGBDT05GSUdfQ0FDSEVGSUxFU2AsIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOgoKKipEaWdnaW5nIGludG8gQ2FjaGVmaWxlcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBDT05GSUdfQ0FDSEVGSUxFU2AuIFRoYXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZSwgdGhlIHZlcnkgZm91bmRhdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBpbiBteSBoZWFkOiBlbmFibGluZyBpdCBtZWFucyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIHVzZSBhIGNhY2hpbmcgbWVjaGFuaXNtLiBCdXQgd2hhdCAqa2luZCogb2YgY2FjaGluZz8gSXMgaXQgYmxvY2stbGV2ZWwsIGZpbGUtbGV2ZWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGZpbGVzeXN0ZW0gaXMgdGhpcyBydW5uaW5nIG9uPyBLbm93aW5nIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gKGUuZy4sIGV4dDQsIFhGUywgQnRyZnMsIGV0Yy4pIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjYWNoZSBpbnRlcmFjdHMgYW5kIHBlcmZvcm1zLiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBkb3duc2lkZXM6IGNhY2hlIGludmFsaWRhdGlvbiwgd3JpdGUgcGVuYWx0aWVzLCBhbmQgb3ZlcmFsbCBzdG9yYWdlIG92ZXJoZWFkLiBUaGlzIGNvdWxkIGJlIGEgcGVyZm9ybWFuY2UgZ2FpbiwgYSBwZXJmb3JtYW5jZSAqbG9zcyosIG9yIGEgd2FzaCBkZXBlbmRpbmcgb24gbnVtZXJvdXMgZmFjdG9ycy4gSSYjMzk7bSBnb2luZyB0byBuZWVkIG1vcmUgY29udGV4dC4gSSB3YW50IHRvIGtub3cgYWJvdXQgdGhlIHdvcmtsb2FkLCB0aGUgaGFyZHdhcmUsIGFuZCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBzZXR0aW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGltcGFjdHMgbXkgdXNlciYjMzk7cyBzeXN0ZW1zIGFuZCB3aGF0IGJlbmVmaXRzIHRoZXkgbWlnaHQgYmUgZ2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FDSEVGSUxFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jYWNoZWZpbGVzL0tjb25maWctMi1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozOmNvbmZpZyBDQUNIRUZJTEVTXG5mcy9jYWNoZWZpbGVzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0ZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1wmIzM0O1xuLS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xMy1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzoxNDpjb25maWcgQ0FDSEVGSUxFU19ERUJVR1xuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtEZWJ1ZyBDYWNoZUZpbGVzXCYjMzQ7XG4tLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTIyLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjIzOmNvbmZpZyBDQUNIRUZJTEVTX0VSUk9SX0lOSkVDVElPTlxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtQcm92aWRlIGVycm9yIGluamVjdGlvbiBmb3IgY2FjaGVmaWxlc1wmIzM0O1xuLS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yOS1cbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozMDpjb25maWcgQ0FDSEVGSUxFU19PTkRFTUFORFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBvbi1kZW1hbmQgcmVhZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTI5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlF1aWNrIENoZWNrOiBBRlMgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IGluYWR2ZXJ0ZW50bHkgZW5hYmxlZCBgQ09ORklHX0FGU19GU2AuIEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrLCBidXQgYSBuZWNlc3Nhcnkgb25lIGdpdmVuIHRoZSBjb250ZXh0LiBXZSYjMzk7dmUgc2VlbiBzb21lIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBsYXRlbHkgd2l0aCBzaW1pbGFyIGxlZ2FjeSBmaWxlc3lzdGVtcywgYW5kIEkgZG9uJiMzOTt0IHdhbnQgdG8gY2hhc2UgYSByZWQgaGVycmluZyBsYXRlci4gQmVzdCB0byBydWxlIGl0IG91dCBpbW1lZGlhdGVseSwgc28gd2UgY2FuIGZvY3VzIG9uIHRoZSBjb3JlIGlzc3VlLiBBRlMgaGFzIGl0cyBvd24gaWRpb3N5bmNyYXNpZXMsIGFuZCBldmVuIGlmIGl0JiMzOTtzIG5vdCB0aGUgcm9vdCBjYXVzZSwgaXRzIHByZXNlbmNlIGNvdWxkIGNvbXBsaWNhdGUgZGVidWdnaW5nIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gaW50ZXJuYWxzLiBMZXQmIzM5O3MgY29uZmlybSBpdHMgc3RhdHVzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0NjQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZWJhY2sgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGNydWNpYWwgZm9yIG5ldHdvcmsgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhbmQgY2FjaGluZzogYE5FVEZTX1NVUFBPUlRgLCBgRlNDQUNIRWAsIGBDQUNIRUZJTEVTYCwgYW5kIGBBRlNfRlNgLiBUaGF0IG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbXMuCgpNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoZSB3cml0ZSBwcm9jZXNzLiBJJiMzOTttIHNlZWluZyBgbmV0ZnNfd2JfYmVnaW5gIGFuZCBgbmV0ZnNfd2JfZW5kYCDigJMgdGhvc2UgYXJlIG9idmlvdXNseSBpbXBvcnRhbnQgZm9yIHdyaXRlYmFjayBpbml0aWF0aW9uIGFuZCBjb21wbGV0aW9uLiBUaGVuIHRoZXJlJiMzOTtzIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCBhbmQgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgIHdoaWNoIGxpa2VseSBkZWFsIHdpdGggZGlmZmVyZW50IHdyaXRlIHN0cmF0ZWdpZXMuIFRoZSBgaW92X2l0ZXJfZXh0cmFjdF8uLi5gIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZzsgSSBrbm93IHRob3NlIHJlbGF0ZSB0byBzY2F0dGVyLWdhdGhlciBJL08gYW5kIHBhZ2UgZXh0cmFjdGlvbiwgc28gdGhleSYjMzk7bGwgYmUga2V5IHRvIGhvdyBkYXRhIGlzIG1vdmVkLiBTcGVjaWZpY2FsbHkgSSYjMzk7bSBzZWVpbmcgYGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzYCwgYGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXNgIGFuZCBgZXh0cmFjdF94YXJyYXlfdG9fc2dgIGFzIGltcG9ydGFudC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9ucyBpbnZvbHZlZD8gQWhhISBIZXJlIGFyZSBhIGZldyBtb3JlOiBgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbmAsIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgLCBgbmV0ZnNfZW5kX3dyaXRldGhyb3VnaGAsIGBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0YCwgYW5kIGBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlYC4gVGhvc2Ugc2VlbSB0byBiZSByZWxhdGVkIHRvIGJ1bGsgd3JpdGVzLCB3cml0ZS10aHJvdWdoIGNvbnNpc3RlbmN5LCBhbmQgY2FjaGluZyBvYmplY3RzLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCBkYXRhIGludGVncml0eSBjb25zaWRlcmF0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucywgSSBuZWVkIHRvIGtub3cgaWYgdGhleSYjMzk7cmUgZXhwb3J0ZWQgb3Igc3RhdGljLi4uIEkgcmVjYWxsIHRoYXQgYG5ldGZzX3diX2JlZ2luYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kLiBOb3csIGxvb2tpbmcgY2xvc2VyLCBgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF91c2VyX3BhZ2VzYCwgYW5kIGBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXNgIGFyZSBzdGF0aWMgd2l0aGluIGBsaWIvaW92X2l0ZXIuY2AuIEFuZCBgZXh0cmFjdF94YXJyYXlfdG9fc2dgIGlzIHN0YXRpYyBpbiBgbGliL3NjYXR0ZXJsaXN0LmNgLiBTbyB0aGV5JiMzOTtyZSBpbnRlcm5hbC4KCkFoIGhhISBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AgLSB0aGF0IGxvb2tzIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBiZWluZyB0aGUgJiMzNDttYXN0ZXImIzM0OyBmdW5jdGlvbi4gSXQgcHJvYmFibHkgY2FsbHMgdGhvc2Ugc3RhdGljIG9uZXMgSSBqdXN0IGNoZWNrZWQuIEkgc2hvdWxkIGNoZWNrIHRoYXQgb25lIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW92X2l0ZXJfZXh0cmFjdF9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iaW8taW50ZWdyaXR5LmM9MzY4PWludCBiaW9faW50ZWdyaXR5X21hcF91c2VyKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zOTktXG5ibG9jay9iaW8taW50ZWdyaXR5LmM6NDAwOlx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpdGVyLCBcdTAwMjZwYWdlcywgYnl0ZXMsIG5yX3ZlY3MsXG5ibG9jay9iaW8taW50ZWdyaXR5LmMtNDAxLVx0XHRcdFx0XHRleHRyYWN0aW9uX2ZsYWdzLCBcdTAwMjZvZmZzZXQpO1xuLS1cbmRyaXZlcnMvdGVlL3RlZV9zaG0uYz00MDE9cmVnaXN0ZXJfc2htX2hlbHBlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IGlvdl9pdGVyICppdGVyLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy90ZWUvdGVlX3NobS5jLTQ0Ni1cbmRyaXZlcnMvdGVlL3RlZV9zaG0uYzo0NDc6XHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFx1MDAyNnNobS1cdTAwM2VwYWdlcywgTE9OR19NQVgsIG51bV9wYWdlcywgMCxcbmRyaXZlcnMvdGVlL3RlZV9zaG0uYy00NDgtXHRcdFx0XHQgICAgIFx1MDAyNm9mZik7XG4tLVxuZnMvZGlyZWN0LWlvLmMtNDMtLypcbmZzL2RpcmVjdC1pby5jOjQ0OiAqIEhvdyBtYW55IHVzZXIgcGFnZXMgdG8gbWFwIGluIG9uZSBjYWxsIHRvIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKS4gIFRoaXNcbmZzL2RpcmVjdC1pby5jLTQ1LSAqIGRldGVybWluZXMgdGhlIHNpemUgb2YgYSBzdHJ1Y3R1cmUgaW4gdGhlIHNsYWIgY2FjaGVcbi0tXG5mcy9kaXJlY3QtaW8uYz0xMTY9c3RydWN0IGRpbyB7XG4tLVxuZnMvZGlyZWN0LWlvLmMtMTI4LVx0c3BpbmxvY2tfdCBiaW9fbG9jaztcdFx0LyogcHJvdGVjdHMgQklPIGZpZWxkcyBiZWxvdyAqL1xuZnMvZGlyZWN0LWlvLmM6MTI5Olx0aW50IHBhZ2VfZXJyb3JzO1x0XHQvKiBlcnIgZnJvbSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCkgKi9cbmZzL2RpcmVjdC1pby5jLTEzMC1cdGludCBpc19hc3luYztcdFx0XHQvKiBpcyBJTyBhc3luYyA/ICovXG4tLVxuZnMvZGlyZWN0LWlvLmM9MTY2PXN0YXRpYyBpbmxpbmUgaW50IGRpb19yZWZpbGxfcGFnZXMoc3RydWN0IGRpbyAqZGlvLCBzdHJ1Y3QgZGlvX3N1Ym1pdCAqc2Rpbylcbi0tXG5mcy9kaXJlY3QtaW8uYy0xNzEtXG5mcy9kaXJlY3QtaW8uYzoxNzI6XHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKHNkaW8tXHUwMDNlaXRlciwgXHUwMDI2cGFnZXMsIExPTkdfTUFYLFxuZnMvZGlyZWN0LWlvLmMtMTczLVx0XHRcdFx0ICAgICBESU9fUEFHRVMsIDAsIFx1MDAyNnNkaW8tXHUwMDNlZnJvbSk7XG4tLVxuZnMvZGlyZWN0LWlvLmMtMjAyLSAqIEdldCBhbm90aGVyIHVzZXJzcGFjZSBwYWdlLiAgUmV0dXJucyBhbiBFUlJfUFRSIG9uIGVycm9yLiAgUGFnZXMgYXJlXG5mcy9kaXJlY3QtaW8uYzoyMDM6ICogYnVmZmVyZWQgaW5zaWRlIHRoZSBkaW8gc28gdGhhdCB3ZSBjYW4gY2FsbCBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKClcbmZzL2RpcmVjdC1pby5jLTIwNC0gKiBhZ2FpbnN0IGEgZGVjZW50IG51bWJlciBvZiBwYWdlcywgbGVzcyBmcmVxdWVudGx5LiAgVG8gcHJvdmlkZSBuaWNlciB1c2Ugb2Zcbi0tXG5mcy9mdXNlL2ZpbGUuYz0xNTQ4PXN0YXRpYyBpbnQgZnVzZV9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgZnVzZV9hcmdzX3BhZ2VzICphcCwgc3RydWN0IGlvdl9pdGVyICppaSxcbi0tXG5mcy9mdXNlL2ZpbGUuYy0xNTU5LVx0ICogSG93ZXZlciBpZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgZnVzZV9jb25uIHJlcXVpcmVzIHBhZ2VzIGluc3RlYWQgb2ZcbmZzL2Z1c2UvZmlsZS5jOjE1NjA6XHQgKiBwb2ludGVyIChlLmcuLCB2aXJ0aW8tZnMpLCB1c2UgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpIGluc3RlYWQuXG5mcy9mdXNlL2ZpbGUuYy0xNTYxLVx0ICovXG4tLVxuZnMvZnVzZS9maWxlLmMtMTU4NS1cdCAqIFVudGlsIHRoZXJlIGlzIHN1cHBvcnQgZm9yIGlvdl9pdGVyX2V4dHJhY3RfZm9saW9zKCksIHdlIGhhdmUgdG9cbmZzL2Z1c2UvZmlsZS5jOjE1ODY6XHQgKiBtYW51YWxseSBleHRyYWN0IHBhZ2VzIHVzaW5nIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSBhbmQgdGhlblxuZnMvZnVzZS9maWxlLmMtMTU4Ny1cdCAqIGNvcHkgdGhhdCB0byBhIGZvbGlvcyBhcnJheS5cbi0tXG5mcy9mdXNlL2ZpbGUuYy0xNTk5LVxuZnMvZnVzZS9maWxlLmM6MTYwMDpcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpaSwgXHUwMDI2cGFnZXMsXG5mcy9mdXNlL2ZpbGUuYy0xNjAxLVx0XHRcdFx0XHQgICAgICpuYnl0ZXNwIC0gbmJ5dGVzLFxuLS1cbmZzL25ldGZzL2l0ZXJhdG9yLmM9MzY9c3NpemVfdCBuZXRmc19leHRyYWN0X3VzZXJfaXRlcihzdHJ1Y3QgaW92X2l0ZXIgKm9yaWcsIHNpemVfdCBvcmlnX2xlbixcbi0tXG5mcy9uZXRmcy9pdGVyYXRvci5jLTY2LVx0d2hpbGUgKGNvdW50IFx1MDAyNlx1MDAyNiBucGFnZXMgXHUwMDNjIG1heF9wYWdlcykge1xuZnMvbmV0ZnMvaXRlcmF0b3IuYzo2NzpcdFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhvcmlnLCBcdTAwMjZwYWdlcywgY291bnQsXG5mcy9uZXRmcy9pdGVyYXRvci5jLTY4LVx0XHRcdFx0XHQgICAgIG1heF9wYWdlcyAtIG5wYWdlcywgZXh0cmFjdGlvbl9mbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTM3Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW92X2l0ZXJfdWJ1ZihzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXG4tLVxuaW5jbHVkZS9saW51eC91aW8uaC0zODctXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjM4ODpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcbmluY2x1ZGUvbGludXgvdWlvLmgtMzg5LVx0XHRcdCAgICAgICBzaXplX3QgbWF4c2l6ZSwgdW5zaWduZWQgaW50IG1heHBhZ2VzLFxuLS1cbmxpYi9pb3ZfaXRlci5jPTE2MTY9c3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjX3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcbi0tXG5saWIvaW92X2l0ZXIuYy0xNjQ2LVx0XHQvKlxubGliL2lvdl9pdGVyLmM6MTY0NzpcdFx0ICogVGhlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMgaW50ZXJmYWNlIG9ubHkgYWxsb3dzIGFuIG9mZnNldFxubGliL2lvdl9pdGVyLmMtMTY0OC1cdFx0ICogaW50byB0aGUgZmlyc3QgcGFnZS4gIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBzZWUgYW5cbmxpYi9pb3ZfaXRlci5jLTE2NDktXHRcdCAqIG9mZnNldCBpbnRvIHN1YnNlcXVlbnQgcGFnZXMsIHRoZSBjYWxsZXIgd2lsbCBoYXZlIHRvIGNhbGxcbmxpYi9pb3ZfaXRlci5jOjE2NTA6XHRcdCAqIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMgYWdhaW4gZm9yIHRoZSByZW1pbmRlci5cbmxpYi9pb3ZfaXRlci5jLTE2NTEtXHRcdCAqL1xuLS1cbmxpYi9pb3ZfaXRlci5jLTE2NjgtXHRcdCAqIFRoZSBjYWxsZXIgd2lsbCBoYW5kbGUgdGhpcyB3aXRoIGFub3RoZXIgY2FsbCB0b1xubGliL2lvdl9pdGVyLmM6MTY2OTpcdFx0ICogaW92X2l0ZXJfZXh0cmFjdF9wYWdlcy5cbmxpYi9pb3ZfaXRlci5jLTE2NzAtXHRcdCAqL1xuLS1cbmxpYi9pb3ZfaXRlci5jPTE3NDk9c3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF91c2VyX3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcbi0tXG5saWIvaW92X2l0ZXIuYy0xNzg5LS8qKlxubGliL2lvdl9pdGVyLmM6MTc5MDogKiBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzIC0gRXh0cmFjdCBhIGxpc3Qgb2YgY29udGlndW91cyBwYWdlcyBmcm9tIGFuIGl0ZXJhdG9yXG5saWIvaW92X2l0ZXIuYy0xNzkxLSAqIEBpOiBUaGUgaXRlcmF0b3IgdG8gZXh0cmFjdCBmcm9tXG4tLVxubGliL2lvdl9pdGVyLmMtMTgzMS0gKi9cbmxpYi9pb3ZfaXRlci5jOjE4MzI6c3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcbmxpYi9pb3ZfaXRlci5jLTE4MzMtXHRcdFx0ICAgICAgIHN0cnVjdCBwYWdlICoqKnBhZ2VzLFxuLS1cbmxpYi9pb3ZfaXRlci5jLTE4NjQtfVxubGliL2lvdl9pdGVyLmM6MTg2NTpFWFBPUlRfU1lNQk9MX0dQTChpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKTtcbmxpYi9pb3ZfaXRlci5jLTE4NjYtXG5saWIvaW92X2l0ZXIuYz0xODY3PXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2NvbnRpZ19mb2xpb19sZW4oc3RydWN0IHBhZ2UgKipwYWdlcyxcbi0tXG5saWIvaW92X2l0ZXIuYy0xOTA4LSAqXG5saWIvaW92X2l0ZXIuYzoxOTA5OiAqIExpa2UgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpLCBidXQgcmV0dXJucyBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcmFuZ2VzXG5saWIvaW92X2l0ZXIuYy0xOTEwLSAqIGNvbnRhaW5lZCBpbiBhIHNpbmdsZSBmb2xpbyBhcyBhIHNpbmdsZSBidmVjIGluc3RlYWQgb2YgbXVsdGlwbGUgZW50cmllcy5cbi0tXG5saWIvaW92X2l0ZXIuYz0xOTE2PXNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjcyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHN0cnVjdCBiaW9fdmVjICpidixcbi0tXG5saWIvaW92X2l0ZXIuYy0xOTM0LVxubGliL2lvdl9pdGVyLmM6MTkzNTpcdHNpemUgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFx1MDAyNnBhZ2VzLCBtYXhfc2l6ZSwgZW50cmllc19sZWZ0LFxubGliL2lvdl9pdGVyLmMtMTkzNi1cdFx0XHRleHRyYWN0aW9uX2ZsYWdzLCBcdTAwMjZvZmZzZXQpO1xuLS1cbmxpYi9zY2F0dGVybGlzdC5jPTExMTM9c3RhdGljIHNzaXplX3QgZXh0cmFjdF91c2VyX3RvX3NnKHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5saWIvc2NhdHRlcmxpc3QuYy0xMTI5LVx0ZG8ge1xubGliL3NjYXR0ZXJsaXN0LmM6MTEzMDpcdFx0cmVzID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpdGVyLCBcdTAwMjZwYWdlcywgbWF4c2l6ZSwgc2dfbWF4LFxubGliL3NjYXR0ZXJsaXN0LmMtMTEzMS1cdFx0XHRcdFx0ICAgICBleHRyYWN0aW9uX2ZsYWdzLCBcdTAwMjZvZmYpO1xuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTcwNz1zdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2V4dHJhY3RfcGFnZXNfa3ZlYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNzM0LVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6NzM1Olx0XHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKFx1MDAyNml0ZXIsIFx1MDAyNnBhZ2VzLCAxMDAgKiAxMDI0LFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtNzM2LVx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUocGFnZWxpc3QpLCAwLCBcdTAwMjZvZmZzZXQwKTtcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz03ODc9c3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9leHRyYWN0X3BhZ2VzX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTgxMi1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjgxMzpcdFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhcdTAwMjZpdGVyLCBcdTAwMjZwYWdlcywgMTAwICogMTAyNCxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTgxNC1cdFx0XHRcdFx0ICAgICBBUlJBWV9TSVpFKHBhZ2VsaXN0KSwgMCwgXHUwMDI2b2Zmc2V0MCk7XG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM9ODY1PXN0YXRpYyB2b2lkIF9faW5pdCBpb3Zfa3VuaXRfZXh0cmFjdF9wYWdlc19mb2xpb3Eoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTg5Ni1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjg5NzpcdFx0XHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKFx1MDAyNml0ZXIsIFx1MDAyNnBhZ2VzLCAxMDAgKiAxMDI0LFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtODk4LVx0XHRcdFx0XHRcdCAgICAgQVJSQVlfU0laRShwYWdlbGlzdCksIDAsIFx1MDAyNm9mZnNldDApO1xuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTk0ND1zdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2V4dHJhY3RfcGFnZXNfeGFycmF5KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy05NzQtXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo5NzU6XHRcdFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhcdTAwMjZpdGVyLCBcdTAwMjZwYWdlcywgMTAwICogMTAyNCxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTk3Ni1cdFx0XHRcdFx0XHQgICAgIEFSUkFZX1NJWkUocGFnZWxpc3QpLCAwLCBcdTAwMjZvZmZzZXQwKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03MzcwPXNzaXplX3Qgc2tiX3NwbGljZV9mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTczODktXG5uZXQvY29yZS9za2J1ZmYuYzo3MzkwOlx0XHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFx1MDAyNnBwYWdlcywgbWF4c2l6ZSwgbnIsIDAsIFx1MDAyNm9mZik7XG5uZXQvY29yZS9za2J1ZmYuYy03MzkxLVx0XHRpZiAobGVuIFx1MDAzYz0gMCkge1xuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTQyMT1zdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jLTUwMC1cbm5ldC90bHMvdGxzX2RldmljZS5jOjUwMTpcdFx0XHRyYyA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoaXRlciwgXHUwMDI2cGFnZXMsXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy01MDItXHRcdFx0XHRcdFx0ICAgIGNvcHksIDEsIDAsIFx1MDAyNm9mZik7XG4tLVxubmV0L3Rscy90bHNfc3cuYz0xMDE1PXN0YXRpYyBpbnQgdGxzX3N3X3NlbmRtc2dfc3BsaWNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMTAyNC1cbm5ldC90bHMvdGxzX3N3LmM6MTAyNTpcdFx0cGFydCA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCBcdTAwMjZwYWdlcyxcbm5ldC90bHMvdGxzX3N3LmMtMTAyNi1cdFx0XHRcdFx0ICAgICAgdHJ5X3RvX2NvcHksIDEsIDAsIFx1MDAyNm9mZik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzA5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlJlZmxlY3Rpbmcgb24gS2VybmVsIFN5bWJvbCBFeHBvcnQgYW5kIFN0YXRpYyBGdW5jdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlc2UgSS9PIHZlY3RvciBpdGVyYXRpb24gZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIGBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzYCBpcyB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbjsgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGdldHMgZXhwb3J0ZWQgYW5kIHVzZWQgZXh0ZXJuYWxseS4gTWFrZXMgc2Vuc2UuIEl0IGFjdHMgYXMgdGhlIHdyYXBwZXIgZm9yIHRoZSBsb3dlci1sZXZlbCwgc3RhdGljIGZ1bmN0aW9ucyB1bmRlcm5lYXRoLiBUaGVyZWZvcmUsIGFkZGluZyB0aGF0IHRvIHRoZSBmb2N1cyBzeW1ib2xzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGVudHJ5IHBvaW50LgoKTm93LCBJJiMzOTttIG5vdGluZyB0aGF0IGBleHRyYWN0X3hhcnJheV90b19zZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCBpdCAqaXMqIGNhbGxlZCBieSBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gU28gaXQmIzM5O3Mgc3RpbGwgcGxheWluZyBhIGNydWNpYWwgcm9sZSwganVzdCBub3QgYSBnbG9iYWxseSB2aXNpYmxlIG9uZS4gS2VlcCB0aGF0IGRlcGVuZGVuY3kgaW4gbWluZCBhcyBJIGJ1aWxkIG91dCB0aGUgZGVwZW5kZW5jeSBncmFwaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0cmFjdF9pdGVyX3RvX3NnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2NyeXB0by9hZl9hbGcuYz05MDk9aW50IGFmX2FsZ19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXG4tLVxuY3J5cHRvL2FmX2FsZy5jLTEwMjYtXG5jcnlwdG8vYWZfYWxnLmM6MTAyNzpcdFx0XHRwbGVuID0gZXh0cmFjdF9pdGVyX3RvX3NnKFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgbGVuLCBcdTAwMjZzZ3RhYmxlLFxuY3J5cHRvL2FmX2FsZy5jLTEwMjgtXHRcdFx0XHRcdFx0ICBNQVhfU0dMX0VOVFMgLSBzZ2wtXHUwMDNlY3VyLCAwKTtcbi0tXG5jcnlwdG8vYWZfYWxnLmM9MTIxMT1pbnQgYWZfYWxnX2dldF9yc2dsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MsXG4tLVxuY3J5cHRvL2FmX2FsZy5jLTEyNDgtXHRcdHNnX2luaXRfdGFibGUocnNnbC1cdTAwM2VzZ2wuc2d0LnNnbCwgQUxHX01BWF9QQUdFUyk7XG5jcnlwdG8vYWZfYWxnLmM6MTI0OTpcdFx0ZXJyID0gZXh0cmFjdF9pdGVyX3RvX3NnKFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgc2VnbGVuLCBcdTAwMjZyc2dsLVx1MDAzZXNnbC5zZ3QsXG5jcnlwdG8vYWZfYWxnLmMtMTI1MC1cdFx0XHRcdFx0IEFMR19NQVhfUEFHRVMsIDApO1xuLS1cbmNyeXB0by9hbGdpZl9oYXNoLmM9NjM9c3RhdGljIGludCBoYXNoX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbmNyeXB0by9hbGdpZl9oYXNoLmMtMTE4LVxuY3J5cHRvL2FsZ2lmX2hhc2guYzoxMTk6XHRcdGVyciA9IGV4dHJhY3RfaXRlcl90b19zZyhcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIsIExPTkdfTUFYLFxuY3J5cHRvL2FsZ2lmX2hhc2guYy0xMjAtXHRcdFx0XHRcdCBcdTAwMjZjdHgtXHUwMDNlc2dsLnNndCwgbnBhZ2VzLCAwKTtcbi0tXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz00Mzg3PXN0YXRpYyB2b2lkICpzbWIyX2dldF9hZWFkX3JlcShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgc3RydWN0IHNtYl9ycXN0ICpycXN0LFxuLS1cbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTQ0MjEtXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzo0NDIyOlx0XHRyYyA9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBjb3VudCwgXHUwMDI2c2d0YWJsZSxcbmZzL3NtYi9jbGllbnQvc21iMm9wcy5jLTQ0MjMtXHRcdFx0XHRcdG51bV9zZ3MgLSBzZ3RhYmxlLm5lbnRzLCAwKTtcbi0tXG5mcy9zbWIvc21iZGlyZWN0L21yLmM9MjQxPXN0YXRpYyBpbnQgc21iZGlyZWN0X2l0ZXJfdG9fc2d0KHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9zbWIvc21iZGlyZWN0L21yLmMtMjQ4LVxuZnMvc21iL3NtYmRpcmVjdC9tci5jOjI0OTpcdHJldCA9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBpb3ZfaXRlcl9jb3VudChpdGVyKSwgc2d0LCBtYXhfc2csIDApO1xuZnMvc21iL3NtYmRpcmVjdC9tci5jLTI1MC1cdFdBUk5fT04ocmV0IFx1MDAzYyAwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTQxNz1zdHJ1Y3Qgc2dfdGFibGU7XG5pbmNsdWRlL2xpbnV4L3Vpby5oOjQxODpzc2l6ZV90IGV4dHJhY3RfaXRlcl90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBsZW4sXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTQxOS1cdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndGFibGUsIHVuc2lnbmVkIGludCBzZ19tYXgsXG4tLVxubGliL3NjYXR0ZXJsaXN0LmM9MTMzNT1zdGF0aWMgc3NpemVfdCBleHRyYWN0X3hhcnJheV90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxubGliL3NjYXR0ZXJsaXN0LmMtMTM4MS0vKipcbmxpYi9zY2F0dGVybGlzdC5jOjEzODI6ICogZXh0cmFjdF9pdGVyX3RvX3NnIC0gRXh0cmFjdCBwYWdlcyBmcm9tIGFuIGl0ZXJhdG9yIGFuZCBhZGQgdG8gYW4gc2dsaXN0XG5saWIvc2NhdHRlcmxpc3QuYy0xMzgzLSAqIEBpdGVyOiBUaGUgaXRlcmF0b3IgdG8gZXh0cmFjdCBmcm9tXG4tLVxubGliL3NjYXR0ZXJsaXN0LmMtMTQwOC0gKi9cbmxpYi9zY2F0dGVybGlzdC5jOjE0MDk6c3NpemVfdCBleHRyYWN0X2l0ZXJfdG9fc2coc3RydWN0IGlvdl9pdGVyICppdGVyLCBzaXplX3QgbWF4c2l6ZSxcbmxpYi9zY2F0dGVybGlzdC5jLTE0MTAtXHRcdFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ3RhYmxlLCB1bnNpZ25lZCBpbnQgc2dfbWF4LFxuLS1cbmxpYi9zY2F0dGVybGlzdC5jLTE0MzgtfVxubGliL3NjYXR0ZXJsaXN0LmM6MTQzOTpFWFBPUlRfU1lNQk9MX0dQTChleHRyYWN0X2l0ZXJfdG9fc2cpO1xuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTEwNzY9aW92X2t1bml0X2l0ZXJfdG9fc2dfY2hlY2soc3RydWN0IGt1bml0ICp0ZXN0LCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTA4OC1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjEwODk6XHRpID0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIGJ1ZnNpemUsIGRhdGEtXHUwMDNlc2d0LCAwLCAwKTtcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTEwOTAtXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgaSwgMCk7XG4tLVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTA5Mi1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjEwOTM6XHRpID0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIGJ1ZnNpemUgLSB0YWlsLCBkYXRhLVx1MDAzZXNndCwgMSwgMCk7XG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMDk0LVx0S1VOSVRfQVNTRVJUX0xFKHRlc3QsIGksIGJ1ZnNpemUgLSB0YWlsKTtcbi0tXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMDk2LVxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6MTA5NzpcdGkgJiM0Mzs9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBidWZzaXplIC0gdGFpbCAtIGksIGRhdGEtXHUwMDNlc2d0LFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTA5OC1cdFx0XHRcdGRhdGEtXHUwMDNlbnBhZ2VzIC0gZGF0YS1cdTAwM2VzZ3QtXHUwMDNlbmVudHMsIDApO1xuLS1cbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTExMDEtXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzoxMTAyOlx0aSAmIzQzOz0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIHRhaWwsIGRhdGEtXHUwMDNlc2d0LFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTEwMy1cdFx0XHRcdGRhdGEtXHUwMDNlbnBhZ2VzIC0gZGF0YS1cdTAwM2VzZ3QtXHUwMDNlbmVudHMsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA2NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBleHRyYWN0X2l0ZXJfdG9fc2dgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBleHRyYWN0X2l0ZXJfdG9fc2dgIGlzIHRoZSBrZXkgZnVuY3Rpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgdGhlIG9uZSB0aGF0JiMzOTtzIGV4cG9ydGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aC4gTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBtYWtpbmcgYXNzb2NpYXRpb25zLi4uIGxldCYjMzk7cyBzZWUsIHdoYXQgZnVuY3Rpb25zIGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoPwoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgbmV0ZnNfd2JfYmVnaW5gLCBgbmV0ZnNfd2JfZW5kYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGxpa2UgbmF0dXJhbCBjb21wYW5pb25zLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IGRhdGEgZ2V0cyBwcmVwcGVkLCB3cml0dGVuLCBhbmQgZmluYWxpemVkIHdpdGhpbiB0aGUgbmV0ZnMgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBwYXkgcGFydGljdWxhcmx5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlc2UgZnVuY3Rpb25zIHV0aWxpemUgb3IgaW50ZXJhY3Qgd2l0aCBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AsIGFzIHRoYXTigJlzIGEgbGlrZWx5IHBhcmFsbGVsIGZ1bmN0aW9uIGFuZCBJIG5lZWQgdG8gZW5zdXJlIEkgYW0gdXAgdG8gZGF0ZSB3aXRoIGJlc3QgcHJhY3RpY2UuCgpGaXJzdCBvZmYsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBUaGF0JiMzOTtsbCBpbmZvcm0gaG93IHdpZGVseSBhdmFpbGFibGUgaXQgaXMgYW5kIHdoZXRoZXIgaXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHVuYnVmZmVyZWQgd3JpdGVzLiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9MzcxPWZpbGVzeXN0ZW0gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHN0YW5kYXJkIFZGUyByZWFkL3dyaXRlX2l0ZXIgbWV0aG9kczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzYtXHRzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6Mzc3Olx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC0zNzgtXG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zOTc9VGhlcmUgYXJlIHRocmVlIGZ1bmN0aW9ucyBmb3Igd3JpdGVzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwMi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6NDAzOlx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00MDQtXHRcdFx0XHRcdFx0ICAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cCk7XG4tLVxuZnMvOXAvdmZzX2ZpbGUuYz00MDE9djlmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvOXAvdmZzX2ZpbGUuYy00MDgtXHRpZiAoZmlkLVx1MDAzZW1vZGUgXHUwMDI2IChQOUxfRElSRUNUIHwgUDlMX05PV1JJVEVDQUNIRSkpXG5mcy85cC92ZnNfZmlsZS5jOjQwOTpcdFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbmZzLzlwL3Zmc19maWxlLmMtNDEwLVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NTAxPXNzaXplX3QgbmV0ZnNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTE0LVx0ICAgIHRlc3RfYml0KE5FVEZTX0lDVFhfVU5CVUZGRVJFRCwgXHUwMDI2aWN0eC1cdTAwM2VmbGFncykpXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjUxNTpcdFx0cmV0dXJuIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihpb2NiLCBmcm9tKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNTE2LVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE0LSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTU6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTYte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTY0LSAqL1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6NjU6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9jb2xsZWN0KHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjYtXHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy05My0gKi9cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjk0OnN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTk1LXtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTAtXHRcdGlmICghcmV0cnkpIHtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1MTpcdFx0XHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTUyLVx0XHRcdHN1YnJlcSA9IE5VTEw7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk3LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MTk4Olx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9kb25lKHdyZXEpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk5LVx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwMi1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwMzpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwNC17XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA2LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjA3Olx0bmV0ZnNfdW5idWZmZXJlZF93cml0ZSh3cmVxKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwOC1cdG5ldGZzX3B1dF9yZXF1ZXN0KHdyZXEsIG5ldGZzX3JyZXFfdHJhY2VfcHV0X2NvbXBsZXRlKTtcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMTU6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE2LVx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODQtXHRpZiAoYXN5bmMpIHtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI4NTpcdFx0SU5JVF9XT1JLKFx1MDAyNndyZXEtXHUwMDNld29yaywgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yODYtXHRcdHdyZXEtXHUwMDNlaW9jYiA9IGlvY2I7XG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg5LVx0fSBlbHNlIHtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI5MDpcdFx0cmV0ID0gbmV0ZnNfdW5idWZmZXJlZF93cml0ZSh3cmVxKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI5MS1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwNy19XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMwOS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMC0vKipcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEyLSAqIEBpb2NiOiBJTyBzdGF0ZSBzdHJ1Y3R1cmVcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjItICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMjM6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjQte1xuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4MS1cdFx0XHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODI6XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzgzLW91dDpcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODYtfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6Mzg3OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKTtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0yOTk3PXNzaXplX3QgY2lmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwNC1cdGlmIChpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19ESVJFQ1QpIHtcbmZzL3NtYi9jbGllbnQvZmlsZS5jOjMwMDU6XHRcdHdyaXR0ZW4gPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDA2LVx0XHRpZiAod3JpdHRlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgQ0lGU19DQUNIRV9SRUFEKGNpbm9kZSkpIHtcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0zMzYxPXN0YXRpYyBpbnQgY2lmc19zd2FwX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzNjctXHRlbHNlXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzY4Olx0XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGl0ZXIsIE5VTEwpO1xuZnMvc21iL2NsaWVudC9maWxlLmMtMzM2OS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQwMT1zc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQwMi1cdFx0XHRcdFx0IHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQwMzpzc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDA0OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MDUtXHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcwNgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGb2N1c2luZyB0aGUgTGVuczogYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCoqCgpSaWdodCwgc28gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAgYW5kIGl0cyBsb2NrZWQgY291bnRlcnBhcnQsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYXJlIGFscmVhZHkgZXhwb3J0ZWQuIEdpdmVuIHRoYXQsIGl0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgdG8gYWRkIHRoZW0gc3BlY2lmaWNhbGx5IHRvIHRoZSBmb2N1cyBzeW1ib2xzLiBXZSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGJpdHMsIGFuZCBpbmNsdWRpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZGVmaW5pdGVseSBzaGFycGVuIG91ciB2aWV3IG9mIHRoZSB1bmJ1ZmZlcmVkIHdyaXRlIHBhdGguIFRoaXMgc2VlbXMgbGlrZSBhIGNydWNpYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgY2hlY2sgYG5ldGZzX3dyaXRlcGFnZXNgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIHdyaXRlIG9wZXJhdGlvbnMsIGFuZCB3ZSBjYW4gY29tcGFyZSBhbmQgY29udHJhc3QgdGhlIGRpZmZlcmVudCBhcHByb2FjaGVzLiBXZSBjYW4gdXNlIGl0IGFzIGEgcmVmZXJlbmNlLCBvciBhcyBhIGNvbnRyYXN0aW5nIHZpZXcgb2YgdGhlIHdyaXRlIHByb2Nlc3MsIGluIG9yZGVyIHRvIGVuaGFuY2Ugb3VyIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD00NjA9Zm9yIGl0IHRvIGludGVydmVuZSBhdCB2YXJpb3VzIHRpbWVzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ2My1cdGludCBuZXRmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmb2xpbyAqKTtcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6NDY0Olx0aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ2NS1cdFx0XHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbi0tXG5mcy85cC92ZnNfYWRkci5jPTE2MD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHY5ZnNfYWRkcl9vcGVyYXRpb25zID0ge1xuLS1cbmZzLzlwL3Zmc19hZGRyLmMtMTY2LVx0LmRpcmVjdF9JT1x0XHQ9IG5vb3BfZGlyZWN0X0lPLFxuZnMvOXAvdmZzX2FkZHIuYzoxNjc6XHQud3JpdGVwYWdlc1x0XHQ9IG5ldGZzX3dyaXRlcGFnZXMsXG5mcy85cC92ZnNfYWRkci5jLTE2OC1cdC5taWdyYXRlX2ZvbGlvXHRcdD0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxuLS1cbmZzL2Fmcy93cml0ZS5jPTIyOD1pbnQgYWZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2Fmcy93cml0ZS5jLTI0MS1cbmZzL2Fmcy93cml0ZS5jOjI0MjpcdHJldCA9IG5ldGZzX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTtcbmZzL2Fmcy93cml0ZS5jLTI0My1cdHVwX3JlYWQoXHUwMDI2dm5vZGUtXHUwMDNldmFsaWRhdGVfbG9jayk7XG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01MjI9c3RhdGljIHZvaWQgbmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNTQ1LSAqL1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo1NDY6aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU0Ny1cdFx0ICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYxMS19XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYxMjpFWFBPUlRfU1lNQk9MKG5ldGZzX3dyaXRlcGFnZXMpO1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTMtXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9MzM3ND1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNpZnNfYWRkcl9vcHMgPSB7XG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmMtMzM3Ni1cdC5yZWFkYWhlYWRcdD0gbmV0ZnNfcmVhZGFoZWFkLFxuZnMvc21iL2NsaWVudC9maWxlLmM6MzM3NzpcdC53cml0ZXBhZ2VzXHQ9IG5ldGZzX3dyaXRlcGFnZXMsXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMzc4LVx0LmRpcnR5X2ZvbGlvXHQ9IG5ldGZzX2RpcnR5X2ZvbGlvLFxuLS1cbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMzOTc9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzX3NtYWxsYnVmID0ge1xuZnMvc21iL2NsaWVudC9maWxlLmMtMzM5OC1cdC5yZWFkX2ZvbGlvXHQ9IG5ldGZzX3JlYWRfZm9saW8sXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzk5Olx0LndyaXRlcGFnZXNcdD0gbmV0ZnNfd3JpdGVwYWdlcyxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTM0MDAtXHQuZGlydHlfZm9saW9cdD0gbmV0ZnNfZGlydHlfZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQxOT1pbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICosIHN0cnVjdCBmaWxlICosXG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQyMS1cdFx0ICAgICAgc3RydWN0IGZvbGlvICoqLCB2b2lkICoqZnNkYXRhKTtcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0MjI6aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDIzLVx0XHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBrZXJuZWwgY29kZSBzbmlwcGV0OgoKKipEaXZpbmcgaW50byB0aGUgTmV0d29yayBGaWxlc3lzdGVtIFdyaXRlYmFjayoqCgpPa2F5LCBgbmV0ZnNfd3JpdGVwYWdlc2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgd3JpdGUgb3BlcmF0aW9ucyB3aXRoaW4gYSBuZXR3b3JrIGZpbGVzeXN0ZW0uIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGViYWNrIHByb2Nlc3MuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIFRoYXQgc2hvdWxkIGJlIHRoZSBhdG9taWMgdW5pdCwgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrIHdpdGhpbiB0aGUgb3ZlcmFsbCB3cml0ZWJhY2sgc2NoZW1lLiBVbmRlcnN0YW5kaW5nIGhvdyBhICpzaW5nbGUqIHBhZ2UgZ2V0cyBmbHVzaGVkIGlzIGtleSB0byBncmFzcGluZyB0aGUgYXJjaGl0ZWN0dXJlJiMzOTtzIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBsaWtlbHkgb2ZmZXJzIGluc2lnaHRzIGludG8gaG93IGluZGl2aWR1YWwgZGF0YSBibG9ja3MgYXJlIHRyYW5zbWl0dGVkIG92ZXIgdGhlIG5ldHdvcmsgYW5kIGFueSBhc3NvY2lhdGVkIGJ1ZmZlcmluZyBvciBjYWNoaW5nIHN0cmF0ZWdpZXMgdXNlZCBhdCB0aGUgY2xpZW50IG9yIHNlcnZlci4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBmdW5jdGlvbiBnaXZlcyB1cyBhIGJldHRlciBwaWN0dXJlIG9mIGhvdyBgbmV0ZnNfd3JpdGVwYWdlc2Agb3BlcmF0ZXMgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD00MzY9YSBzaW5nbGUgUlBDIChhbmQgbm90IHdyaXR0ZW4gYmFjaykgYW5kIGlzIG1haW50YWluZWQgYXMgYSBtb25vbGl0aGljIGJsb2Jcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ0MC1cdHZvaWQgbmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSk7XG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjQ0MTpcdGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00NDItXHRcdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbi0tXG5mcy9hZnMvZGlyLmM9MjIwMT1zdGF0aWMgaW50IGFmc19kaXJfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9hZnMvZGlyLmMtMjIyMi1cdFx0XHRcdCAgICAgaV9zaXplX3JlYWQoXHUwMDI2ZHZub2RlLVx1MDAzZW5ldGZzLmlub2RlKSk7XG5mcy9hZnMvZGlyLmM6MjIyMzpcdFx0cmV0ID0gbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShtYXBwaW5nLCB3YmMsIFx1MDAyNml0ZXIpO1xuZnMvYWZzL2Rpci5jLTIyMjQtXHRcdGlmIChyZXQgPT0gMSlcbi0tXG5mcy9hZnMvc3ltbGluay5jPTIzND1pbnQgYWZzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9hZnMvc3ltbGluay5jLTI1My1cdFx0XHRcdCAgICAgaV9zaXplX3JlYWQoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUpKTtcbmZzL2Fmcy9zeW1saW5rLmM6MjU0Olx0XHRyZXQgPSBuZXRmc193cml0ZWJhY2tfc2luZ2xlKG1hcHBpbmcsIHdiYywgXHUwMDI2aXRlcik7XG5mcy9hZnMvc3ltbGluay5jLTI1NS1cdH1cbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTcxND1zdGF0aWMgaW50IG5ldGZzX3dyaXRlX2ZvbGlvX3NpbmdsZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgyNC0vKipcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6ODI1OiAqIG5ldGZzX3dyaXRlYmFja19zaW5nbGUgLSBXcml0ZSBiYWNrIGEgbW9ub2xpdGhpYyBwYXlsb2FkXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgyNi0gKiBAbWFwcGluZzogVGhlIG1hcHBpbmcgdG8gd3JpdGUgZnJvbVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODM1LSAqL1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MzY6aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgzNy1cdFx0XHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTkwMC19XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjkwMTpFWFBPUlRfU1lNQk9MKG5ldGZzX3dyaXRlYmFja19zaW5nbGUpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaD00MTA9c3NpemVfdCBuZXRmc19yZWFkX3NpbmdsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0MTE6aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDEyLVx0XHRcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg2NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTmV0RlMgV3JpdGViYWNrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgcG90ZW50aWFsbHkgaW52b2x2ZWQgaW4gc29tZSBjb3JlIG5ldHdvcmsgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgY2FjaGVmaWxlc19idXJ5X29iamVjdGAuIElmIHRoYXQmIzM5O3MgcmVsZXZhbnQsIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24gdG8gaW52ZXN0aWdhdGUgaG93IGl0IHdvcmtzIHdpdGggd3JpdGViYWNrLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGluc3RydW1lbnRhbC4gVGhpcyBpcyBiZWNhdXNlIEkgdW5kZXJzdGFuZCBob3cgbmV0d29yayBjYWNoaW5nIHdvcmtzLiBBbmQgdGh1cywgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGlzIGFzc3VtcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhY2hlZmlsZXNfYnVyeV9vYmplY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYz0zOTI9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19pbnZhbGlkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSlcbi0tXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTQzNS1cdFx0XHRpZiAoIUlTX0VSUihvYmopKVxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYzo0MzY6XHRcdFx0XHRjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHZvbHVtZS1cdTAwM2VjYWNoZSwgb2JqZWN0LFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy00MzctXHRcdFx0XHRcdFx0ICAgICAgIGZhbiwgb2JqLFxuLS1cbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaD0yNzY9ZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oLTI3Ny1cdFx0XHRcdFx0ICAgc3RydWN0IGZpbGUgKmZpbGUpO1xuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oOjI3ODpleHRlcm4gaW50IGNhY2hlZmlsZXNfYnVyeV9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oLTI3OS1cdFx0XHRcdCAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTIzMT1zdGF0aWMgaW50IGNhY2hlZmlsZXNfdW5saW5rKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMjY4LSAqL1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjI2OTppbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMjcwLVx0XHRcdCAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz01ODg9Ym9vbCBjYWNoZWZpbGVzX2xvb2tfdXBfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy02MTctXHRcdGVsc2VcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo2MTg6XHRcdFx0cmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdCh2b2x1bWUtXHUwMDNlY2FjaGUsIG9iamVjdCxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy02MTktXHRcdFx0XHRcdFx0ICAgICBmYW4sIGRlLFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz03NTg9aW50IGNhY2hlZmlsZXNfY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIHN0cnVjdCBkZW50cnkgKmRpcixcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNzg1LVx0LypcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo3ODY6XHQgKiBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KCkgZXhwZWN0cyAyIHJlZmVyZW5jZXMgdG8gJiMzOTt2aWN0aW0mIzM5OyxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy03ODctXHQgKiBhbmQgZHJvcHMgb25lLlxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy03ODktXHRkZ2V0KHZpY3RpbSk7XG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NzkwOlx0cmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdChjYWNoZSwgTlVMTCwgZGlyLCB2aWN0aW0sXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNzkxLVx0XHRcdFx0ICAgICBGU0NBQ0hFX09CSkVDVF9XQVNfQ1VMTEVEKTtcbi0tXG5mcy9jYWNoZWZpbGVzL3ZvbHVtZS5jPTE4PXZvaWQgY2FjaGVmaWxlc19hY3F1aXJlX3ZvbHVtZShzdHJ1Y3QgZnNjYWNoZV92b2x1bWUgKnZjb29raWUpXG4tLVxuZnMvY2FjaGVmaWxlcy92b2x1bWUuYy02My1cdFx0XHRpZiAoIUlTX0VSUih2ZGVudHJ5KSlcbmZzL2NhY2hlZmlsZXMvdm9sdW1lLmM6NjQ6XHRcdFx0XHRjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBOVUxMLCBjYWNoZS1cdTAwM2VzdG9yZSxcbmZzL2NhY2hlZmlsZXMvdm9sdW1lLmMtNjUtXHRcdFx0XHRcdFx0ICAgICAgIHZkZW50cnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzc4CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDYWNoZWZpbGVzIEludGVybmFsIE1lY2hhbmljcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgaW50ZXJuYWwgdG8gY2FjaGVmaWxlcywgZ290IGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgdGhlIHRlbXBvcmFyeSBmaWxlcyBhcmUgY3JlYXRlZC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYSBmaWxlIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgd2hlcmUgdGhlIGdyb3VuZHdvcmsgaXMgbGFpZCBmb3IgdGhlIGNhY2hlIGZpbGUuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gdGhlcmUsIGxpa2VseSByZWxhdGVkIHRvIHNlY3VyZSBmaWxlIG5hbWluZywgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhY2hlZmlsZXNfY3JlYXRlX3RtcGZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYz0zOTI9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19pbnZhbGlkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSlcbi0tXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTQwNy1cbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6NDA4Olx0bmV3X2ZpbGUgPSBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKG9iamVjdCk7XG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTQwOS1cdGlmIChJU19FUlIobmV3X2ZpbGUpKVxuLS1cbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaD0yOTU9ZXh0ZXJuIGludCBjYWNoZWZpbGVzX2NoZWNrX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjk2LVx0XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGlyLCBjaGFyICpmaWxlbmFtZSk7XG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmg6Mjk3OmV4dGVybiBzdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCk7XG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjk4LWV4dGVybiBib29sIGNhY2hlZmlsZXNfY29tbWl0X3RtcGZpbGUoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz0zODc9aW50IGNhY2hlZmlsZXNfZGVsZXRlX29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDA5LSAqL1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjQxMDpzdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdClcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy00MTEte1xuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz00ODg9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19jcmVhdGVfZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdClcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDk3LVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjQ5ODpcdGZpbGUgPSBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKG9iamVjdCk7XG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDk5LVx0aWYgKElTX0VSUihmaWxlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENhY2hlZmlsZXMgV3JpdGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYGNhY2hlZmlsZXNgIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdyaXRlIHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB3cml0aW5nIGRhdGEuIEZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmbG93OiBgbmV0ZnNfd2JfYmVnaW5gLCBgbmV0ZnNfd2JfZW5kYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGFuZCBpdHMgbG9ja2VkIGNvdW50ZXJwYXJ0IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYWxvbmcgd2l0aCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIEkmIzM5O20gYWxzbyBpbmNsdWRpbmcgYGlvdl9pdGVyX2V4dHJhY3RfcGFnZXNgIGFuZCBgZXh0cmFjdF9pdGVyX3RvX3NnYCBzaW5jZSB0aGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQgZHVyaW5nIHRoZSBJL08gb3BlcmF0aW9ucywgZXNwZWNpYWxseSB3aXRoIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzLiBCZWZvcmUgbW92aW5nIG9uLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBuZXRmc193cml0ZV9iZWdpbmAgZnVuY3Rpb24gaXMgcHJvcGVybHkgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgd2l0aGluIHRoZSBjb250ZXh0IEkmIzM5O20gd29ya2luZyBpbiwgYmVjYXVzZSBpdCBjb3VsZCBwcm92aWRlIGFkZGl0aW9uYWwgY29udGV4dCwgb3IgYmUgYSBtaXNzaW5nIGxpbmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3dyaXRlX2JlZ2luJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9NDc2PVRoZXJlIGlzIGFsc28gYSBkZXByZWNhdGVkIGZ1bmN0aW9uIGZvciBmaWxlc3lzdGVtcyB0aGF0IHN0aWxsIHVzZSB0aGVcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ3OC1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6NDc5Olx0aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00ODAtXHRcdFx0ICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBsZW4sXG4tLVxuZnMvY2VwaC9hZGRyLmM9MTg3OD1zdGF0aWMgaW50IGNlcGhfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmZzL2NlcGgvYWRkci5jLTE4ODctXG5mcy9jZXBoL2FkZHIuYzoxODg4Olx0ciA9IG5ldGZzX3dyaXRlX2JlZ2luKFx1MDAyNmNpLVx1MDAzZW5ldGZzLCBmaWxlLCBpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcywgbGVuLCBmb2xpb3AsIE5VTEwpO1xuZnMvY2VwaC9hZGRyLmMtMTg4OS1cdGlmIChyIFx1MDAzYyAwKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz01NjE9c3RhdGljIGJvb2wgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU5NS0vKipcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1OTY6ICogbmV0ZnNfd3JpdGVfYmVnaW4gLSBIZWxwZXIgdG8gcHJlcGFyZSBmb3Igd3JpdGluZyBbREVQUkVDQVRFRF1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01OTctICogQGN0eDogVGhlIG5ldGZzIGNvbnRleHRcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI3LSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjYyODppbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI5LVx0XHQgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNC19XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzE1OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVfYmVnaW4pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNi1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9NDE4PWludCBuZXRmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmb2xpbyAqKTtcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0MTk6aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQyMC1cdFx0ICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBZGRpbmcgYG5ldGZzX3dyaXRlX2JlZ2luYCB0byBGb2N1cyBTeW1ib2xzIGFuZCBWZXJpZnlpbmcgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIEV4cG9ydCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBgbmV0ZnNfd3JpdGVfYmVnaW5gICppcyogZXhwb3J0ZWQuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuIEkgbmVlZCB0byBnZXQgdGhhdCBhZGRlZCB0byB0aGUgZm9jdXMgc3ltYm9scyByaWdodCBhd2F5LiBJdCYjMzk7cyBjbGVhcmx5IGEga2V5IHBpZWNlIG9mIGZ1bmN0aW9uYWxpdHksIHNvIEkgbmVlZCB0byB0cmFjayBpdCBjbG9zZWx5LgoKTm93LCBsZXQmIzM5O3MgbW92ZSBvbiB0byB0aGUgbmV4dCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGFuYWx5c2lzLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBJIGNhbiB3b3JrIHdpdGggaXQsIG9yIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXRoZXIgSSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IGl0JiMzOTtzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19wZXJmb3JtX3dyaXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9Mzk3PVRoZXJlIGFyZSB0aHJlZSBmdW5jdGlvbnMgZm9yIHdyaXRlczo6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00MDAtXHRcdFx0XHRcdFx0IHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDo0MDE6XHRzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwMi1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NTYxPXN0YXRpYyBib29sIG5ldGZzX3NraXBfZm9saW9fcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02MjQtICpcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo2MjU6ICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBhbmQgbmV0ZnNfcGVyZm9ybV93cml0ZSgpXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI2LSAqIHVzZWQgaW5zdGVhZC5cbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTM3PXZvaWQgbmV0ZnNfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTczLS8qKlxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo3NDogKiBuZXRmc19wZXJmb3JtX3dyaXRlIC0gQ29weSBkYXRhIGludG8gdGhlIHBhZ2VjYWNoZS5cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNzUtICogQGlvY2I6IFRoZSBvcGVyYXRpb24gcGFyYW1ldGVyc1xuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtODYtICovXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjg3OnNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtODgtXHRcdFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00NDItfVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0NDM6RVhQT1JUX1NZTUJPTChuZXRmc19wZXJmb3JtX3dyaXRlKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQ0LVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY4PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODMtXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ4NDpcdHJldHVybiBuZXRmc19wZXJmb3JtX3dyaXRlKGlvY2IsIGZyb20sIG5ldGZzX2dyb3VwKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDg1LX1cbi0tXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYz0xOT1zdGF0aWMgdm9pZCBuZXRmc19wZ3ByaXYyX2NvcHlfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKmNyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMjctXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYzoyODpcdC8qIG5ldGZzX3BlcmZvcm1fd3JpdGUoKSBtYXkgc2hpZnQgaV9zaXplIGFyb3VuZCB0aGUgcGFnZSBvciBmcm9tIG91dFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMjktXHQgKiBvZiB0aGUgcGFnZSB0byBiZXlvbmQgaXQsIGJ1dCBjYW5ub3QgbW92ZSBpX3NpemUgaW50byBvciB0aHJvdWdoIHRoZVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MzIwPXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0zMzktXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjM0MDpcdC8qIG5ldGZzX3BlcmZvcm1fd3JpdGUoKSBtYXkgc2hpZnQgaV9zaXplIGFyb3VuZCB0aGUgcGFnZSBvciBmcm9tIG91dFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0zNDEtXHQgKiBvZiB0aGUgcGFnZSB0byBiZXlvbmQgaXQsIGJ1dCBjYW5ub3QgbW92ZSBpX3NpemUgaW50byBvciB0aHJvdWdoIHRoZVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaD0yMDI9ZW51bSBuZXRmc19pb19vcmlnaW4ge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaC0yMTEtXHRORVRGU19XUklURUJBQ0tfU0lOR0xFLFx0XHQvKiBUaGlzIG1vbm9saXRoaWMgd3JpdGUgd2FzIHRyaWdnZXJlZCBieSB3cml0ZXBhZ2VzICovXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6MjEyOlx0TkVURlNfV1JJVEVUSFJPVUdILFx0XHQvKiBUaGlzIHdyaXRlIHdhcyBtYWRlIGJ5IG5ldGZzX3BlcmZvcm1fd3JpdGUoKSAqL1xuaW5jbHVkZS9saW51eC9uZXRmcy5oLTIxMy1cdE5FVEZTX1VOQlVGRkVSRURfV1JJVEUsXHRcdC8qIFRoaXMgaXMgYW4gdW5idWZmZXJlZCB3cml0ZSAqL1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaD0zOTY9c3NpemVfdCBuZXRmc19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcik7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTM5OC0vKiBIaWdoLWxldmVsIHdyaXRlIEFQSSAqL1xuaW5jbHVkZS9saW51eC9uZXRmcy5oOjM5OTpzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDAwLVx0XHRcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3OTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBZGRpbmcgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIHRvIHRoZSBGb2N1cyBMaXN0KioKCkFscmlnaHQsIHNvIGBuZXRmc19wZXJmb3JtX3dyaXRlYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGNvbmZpcm1zIGl0JiMzOTtzIGEgbGVnaXRpbWF0ZSBlbnRyeSBwb2ludCBmb3Igd3JpdGUgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGBuZXRmc2AgY29udGV4dC4gVGhlcmVmb3JlLCBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIGFkZCB0aGlzIHRvIHRoZSBmb2N1cyBzeW1ib2xzLiBUaGlzIHdpbGwgYWxsb3cgZm9yIG1vcmUgdGFyZ2V0ZWQgYW5kIGVmZmljaWVudCBkZWJ1Z2dpbmcgb3IgYW5hbHlzaXMsIGFuZCB3aWxsIGFsbG93IG1lIHRvIHRyYWNrIHRoZSBjYWxsIHBhdGggcHJvcGVybHkuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIGxpc3QgaW1tZWRpYXRlbHkuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGBuZXRmc193cml0ZV9jb2xsZWN0aW9uYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB3cml0ZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIG9uIGEgbW9yZSBncmFudWxhciBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfd3JpdGVfY29sbGVjdGlvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9pbnRlcm5hbC5oPTE5Mz1pbnQgbmV0ZnNfZm9saW9fd3JpdHRlbl9iYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuZnMvbmV0ZnMvaW50ZXJuYWwuaDoxOTQ6Ym9vbCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKTtcbmZzL25ldGZzL2ludGVybmFsLmg6MTk1OnZvaWQgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmZzL25ldGZzL2ludGVybmFsLmgtMTk2LVxuLS1cbmZzL25ldGZzL21pc2MuYz01MTM9c3NpemVfdCBuZXRmc193YWl0X2Zvcl93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcbmZzL25ldGZzL21pc2MuYy01MTQte1xuZnMvbmV0ZnMvbWlzYy5jOjUxNTpcdHJldHVybiBuZXRmc193YWl0X2Zvcl9pbl9wcm9ncmVzcyhycmVxLCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKTtcbmZzL25ldGZzL21pc2MuYy01MTYtfVxuLS1cbmZzL25ldGZzL21pc2MuYz01NjI9dm9pZCBuZXRmc193YWl0X2Zvcl9wYXVzZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEpXG5mcy9uZXRmcy9taXNjLmMtNTYzLXtcbmZzL25ldGZzL21pc2MuYzo1NjQ6XHRyZXR1cm4gbmV0ZnNfd2FpdF9mb3JfcGF1c2UocnJlcSwgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbik7XG5mcy9uZXRmcy9taXNjLmMtNTY1LX1cbi0tXG5mcy9uZXRmcy9vYmplY3RzLmM9MTg9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2FsbG9jX3JlcXVlc3Qoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvb2JqZWN0cy5jLTY2LVx0fSBlbHNlIHtcbmZzL25ldGZzL29iamVjdHMuYzo2NzpcdFx0SU5JVF9XT1JLKFx1MDAyNnJyZXEtXHUwMDNld29yaywgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbl93b3JrZXIpO1xuZnMvbmV0ZnMvb2JqZWN0cy5jLTY4LVx0fVxuLS1cbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYz0yMDA9c3RhdGljIHZvaWQgbmV0ZnNfY29sbGVjdF93cml0ZV9yZXN1bHRzKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuLS1cbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy0zNjAtICovXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6MzYxOmJvb2wgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy0zNjIte1xuLS1cbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy00MzUtXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6NDM2OnZvaWQgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQzNy17XG4tLVxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQ0MS1cdGlmIChuZXRmc19jaGVja19ycmVxX2luX3Byb2dyZXNzKHJyZXEpKSB7XG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6NDQyOlx0XHRpZiAobmV0ZnNfd3JpdGVfY29sbGVjdGlvbihycmVxKSlcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy00NDMtXHRcdFx0LyogRHJvcCB0aGUgcmVmIGZyb20gdGhlIElOX1BST0dSRVNTIGZsYWcuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzA5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmc6CgoqKkRpZ2dpbmcgaW50byB0aGUgTmV0ZnMgV3JpdGUtVGhyb3VnaCBNZWNoYW5pc20qKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG5ldGZzIGlzc3VlLiBJdCYjMzk7cyBvYnZpb3VzbHkgaW50ZXJuYWwgdG8gdGhlIGBuZXRmc2AgY29kZSBiYXNlIOKAkyBtYWtlcyBzZW5zZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcHJvYmxlbSBsaWtlbHkgY2VudGVycyBhcm91bmQgdGhlIHdyaXRlLXRocm91Z2ggZnVuY3Rpb25hbGl0eS4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGV4YW1pbmUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYG5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaGAgYW5kIGBuZXRmc19lbmRfd3JpdGV0aHJvdWdoYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IGFuZCBleGl0IHBvaW50cyBvZiB0aGUgd3JpdGV0aHJvdWdoIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgY2FsbGVkLCB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nIHdoZW4gdGhleSYjMzk7cmUgY2FsbGVkLCBhbmQgd2hhdCBzdGF0ZSB0aGV5IGFyZSBjaGFuZ2luZy4gSSBuZWVkIHRvIHNlZSBpZiB0aGUgd3JpdGUtdGhyb3VnaCBmbG93IGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgYXQgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGVyZSB0aGV5JiMzOTtyZSBiZWluZyBjYWxsZWQgZnJvbSB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX2JlZ2luX3dyaXRldGhyb3VnaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTExOC1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6MTE5Olx0XHR3cmVxID0gbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKGlvY2IsIGl0ZXItXHUwMDNlY291bnQpO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0xMjAtXHRcdGlmIChJU19FUlIod3JlcSkpIHtcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIxMj1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNC1cdFx0XHQgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBsZW4sIGJvb2wgdG9fZW9mKTtcbmZzL25ldGZzL2ludGVybmFsLmg6MjE1OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKTtcbmZzL25ldGZzL2ludGVybmFsLmgtMjE2LWludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MTI9RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYxNi0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjE3OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM3MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldEZTIFdyaXRlYmFjayBNZWNoYW5pc20qKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIEkmIzM5O20gZGVlcCBpbnNpZGUgdGhlIE5ldEZTIHdyaXRlYmFjayBwcm9jZXNzIHJpZ2h0IG5vdy4gTXkgZm9jdXMgaXMgZW50aXJlbHkgb24gdGhlc2UgaW50ZXJuYWwgc3ltYm9sczogYG5ldGZzX3diX2JlZ2luYCwgYG5ldGZzX3diX2VuZGAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGBuZXRmc193cml0ZXBhZ2VzYCwgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLCBgbmV0ZnNfd3JpdGVfYmVnaW5gLCBgbmV0ZnNfcGVyZm9ybV93cml0ZWAsIGBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzYCwgYW5kIGBleHRyYWN0X2l0ZXJfdG9fc2dgLiBUaGVzZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGluIGhvdyBOZXRGUyBoYW5kbGVzIHdyaXRpbmcgZGF0YS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pY3Mgb2YgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBuZXRmc193Yl9iZWdpbmAgYW5kIGBuZXRmc193Yl9lbmRgIGFyZSBleHBvcnRlZC4gVGhpcyBjb25maXJtcyB0aGUgd3JpdGViYWNrIHByb2Nlc3MgaXMgYmVpbmcgY2FsbGVkIGNvcnJlY3RseS4gVGhhdCB3aWxsIHByb3ZpZGUgYSBnb29kIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgaXMgaGFuZGxlZCBhbmQgZmx1c2hlZCB0byBzdG9yYWdlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHdyaXRlYmFjayBwYXRoIGFuZCBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfd2JfYmVnaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL3N5bWxpbmsuYz0yMzQ9aW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvYWZzL3N5bWxpbmsuYy0yNTctXHRpZiAocmV0ID09IDApIHtcbmZzL2Fmcy9zeW1saW5rLmM6MjU4Olx0XHRuZXRmc193Yl9iZWdpbihcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgZmFsc2UpO1xuZnMvYWZzL3N5bWxpbmsuYy0yNTktXHRcdG5ldGZzX2ZyZWVfZm9saW9xX2J1ZmZlcih2bm9kZS1cdTAwM2VkaXJlY3RvcnkpO1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYz0yMTA9RVhQT1JUX1NZTUJPTChuZXRmc19lbmRfaW9fZGlyZWN0KTtcbi0tXG5mcy9uZXRmcy9sb2NraW5nLmMtMjE0LSAqL1xuZnMvbmV0ZnMvbG9ja2luZy5jOjIxNTpzdGF0aWMgYm9vbCBuZXRmc193Yl9iZWdpbl93YWl0KHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eClcbmZzL25ldGZzL2xvY2tpbmcuYy0yMTYte1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yNDUtLyoqXG5mcy9uZXRmcy9sb2NraW5nLmM6MjQ2OiAqIG5ldGZzX3diX2JlZ2luIC0gQmVnaW4gd3JpdGViYWNrLCB3YWl0aW5nIGlmIG5lZWQgYmVcbmZzL25ldGZzL2xvY2tpbmcuYy0yNDctICogQGljdHg6IFRoZSBpbm9kZSB0byBnZXQgd3JpdGViYWNrIGFjY2VzcyBvblxuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yNTgtICovXG5mcy9uZXRmcy9sb2NraW5nLmM6MjU5OmJvb2wgbmV0ZnNfd2JfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICppY3R4LCBib29sIG5vd2FpdClcbmZzL25ldGZzL2xvY2tpbmcuYy0yNjAte1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yNjctXHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja193YWl0KTtcbmZzL25ldGZzL2xvY2tpbmcuYzoyNjg6XHRyZXR1cm4gbmV0ZnNfd2JfYmVnaW5fd2FpdChpY3R4KTtcbmZzL25ldGZzL2xvY2tpbmcuYy0yNjktfVxuZnMvbmV0ZnMvbG9ja2luZy5jOjI3MDpFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTtcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzEtXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDY9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NTMtXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjU1NDpcdGlmICghbmV0ZnNfd2JfYmVnaW4oaWN0eCwgd2JjLVx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpKVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NTUtXHRcdHJldHVybiAwO1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjE3PXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjIxLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MjI6XHRuZXRmc193Yl9iZWdpbihpY3R4LCBmYWxzZSk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyMy1cbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTgzNj1pbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg0OC1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6ODQ5Olx0aWYgKCFuZXRmc193Yl9iZWdpbihpY3R4LCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpIHtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODUwLVx0XHQvKiBUaGUgVkZTIHdpbGwgaGF2ZSB1bmRpcnRpZWQgdGhlIGlub2RlLiAqL1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZnMuaD00NjU9dm9pZCBuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIoc3RydWN0IGZvbGlvX3F1ZXVlICpmcSk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQ2Ny0vKiBXcml0ZWJhY2sgZXhjbHVzaW9uIEFQSS4gKi9cbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0Njg6Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTtcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00Njktdm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4cG9ydGVkIFN5bWJvbHMqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb25maXJtZWQ6IHRoZXNlIGZ1bmN0aW9ucyAqYXJlKiBleHBvcnRlZC4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQgYmFzZWQgb24gdGhlIGJyb2FkZXIgc3lzdGVtIGRlc2lnbi4KCk5vdywgbGV0IG1lIHNvbGlkaWZ5IHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0JiMzOTtzOgoKKiAgIGBuZXRmc193Yl9iZWdpbmAKKiAgIGBuZXRmc193Yl9lbmRgCiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYAoqICAgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgCiogICBgbmV0ZnNfd3JpdGVwYWdlc2AKKiAgIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYAoqICAgYG5ldGZzX3dyaXRlX2JlZ2luYAoqICAgYG5ldGZzX3BlcmZvcm1fd3JpdGVgCiogICBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AKKiAgIGBleHRyYWN0X2l0ZXJfdG9fc2dgCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMgb2YgYG5ldGZzX3diX2VuZGAuIFJlZHVuZGFuY3kgaXMga2V5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNyaXRpY2FsIHN5c3RlbSBjYWxscy4gVGhhdCYjMzk7cyBhIGtleSBwb2ludCB0aGF0IHdpbGwgYWx3YXlzIGJlIGluIHRoZSBiYWNrIG9mIG15IG1pbmQgd2hlbiBJIGV2YWx1YXRlIHN5c3RlbSBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3diX2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvc3ltbGluay5jPTIzND1pbnQgYWZzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9hZnMvc3ltbGluay5jLTI2MS1cdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5X3NpemUgPSAwO1xuZnMvYWZzL3N5bWxpbmsuYzoyNjI6XHRcdG5ldGZzX3diX2VuZChcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcyk7XG5mcy9hZnMvc3ltbGluay5jLTI2My1cdH0gZWxzZSBpZiAocmV0ID09IDEpIHtcbi0tXG5mcy9uZXRmcy9sb2NraW5nLmM9MjcwPUVYUE9SVF9TWU1CT0wobmV0ZnNfd2JfYmVnaW4pO1xuZnMvbmV0ZnMvbG9ja2luZy5jLTI3MS1cbmZzL25ldGZzL2xvY2tpbmcuYzoyNzI6LyogbmV0ZnNfd2JfZW5kIC0gRW5kIHdyaXRlYmFja1xuZnMvbmV0ZnMvbG9ja2luZy5jLTI3My0gKiBAaWN0eDogVGhlIGlub2RlIHdlIGhhdmUgd3JpdGViYWNrIGFjY2VzcyB0b1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yNzYtICovXG5mcy9uZXRmcy9sb2NraW5nLmM6Mjc3OnZvaWQgbmV0ZnNfd2JfZW5kKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eClcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzgte1xuLS1cbmZzL25ldGZzL2xvY2tpbmcuYy0yOTktfVxuZnMvbmV0ZnMvbG9ja2luZy5jOjMwMDpFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2VuZCk7XG4tLVxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jPTM2MT1ib29sIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb24oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXG4tLVxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQxNC1cdGNhc2UgTkVURlNfV1JJVEVUSFJPVUdIOlxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jOjQxNTpcdFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQxNi1cdFx0YnJlYWs7XG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDY9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MDctb3V0OlxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MDg6XHRuZXRmc193Yl9lbmQoaWN0eCk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYwOS1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgZXJyb3IpO1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjE3PXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjI2LVx0aWYgKElTX0VSUih3cmVxKSkge1xuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2Mjc6XHRcdG5ldGZzX3diX2VuZChpY3R4KTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjI4LVx0XHRyZXR1cm4gd3JlcTtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTgzNj1pbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg5Ni1jb3VsZG50X3N0YXJ0OlxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4OTc6XHRuZXRmc193Yl9lbmQoaWN0eCk7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg5OC1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9NDY4PWJvb2wgbmV0ZnNfd2JfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICppY3R4LCBib29sIG5vd2FpdCk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDY5OnZvaWQgbmV0ZnNfd2JfZW5kKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCk7XG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDcwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAxNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk2OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBmb3IgRXhwb3J0ZWQgU3ltYm9scyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBjaGVjayBjb25maXJtcyB0aGF0JiMzOTtzIGV4cG9ydGVkLiBOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIHRoZSBuZXh0IGl0ZW0gb24gbXkgbGlzdC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2VgIGlzIGFsc28gZXhwb3J0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsga25vd2luZyB0aGUgZXhwb3J0IHN0YXR1cyBpcyBmdW5kYW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgY29tcG9uZW50cyBpbnRlcmFjdCBhbmQgd2hldGhlciBJIGNhbiByZWx5IG9uIGEgcGFydGljdWxhciBmdW5jdGlvbiBpbiB0aGUgY29udGV4dCBJJiMzOTttIGludmVzdGlnYXRpbmcuIEdvdHRhIGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NhY2hlZmlsZXMvbmFtZWkuYz00Nz1zdGF0aWMgdm9pZCBfX2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTMtXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NTQ6c3RhdGljIHZvaWQgY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTU1LVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz02Nj12b2lkIGNhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNzEtXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NzI6XHRjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBpbm9kZSk7XG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNzMtXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTIyMD12b2lkIGNhY2hlZmlsZXNfcHV0X2RpcmVjdG9yeShzdHJ1Y3QgZGVudHJ5ICpkaXIpXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTIyMi1cdGlmIChkaXIpIHtcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzoyMjM6XHRcdGNhY2hlZmlsZXNfZG9fdW5tYXJrX2lub2RlX2luX3VzZShOVUxMLCBkX2lub2RlKGRpcikpO1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTIyNC1cdFx0ZHB1dChkaXIpO1xuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz0yNjk9aW50IGNhY2hlZmlsZXNfYnVyeV9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy0zNzctXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6Mzc4Olx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShyZXApKTtcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy0zNzktXHRlbmRfcmVuYW1pbmcoXHUwMDI2cmQpO1xuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz00MTA9c3RydWN0IGZpbGUgKmNhY2hlZmlsZXNfY3JlYXRlX3RtcGZpbGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ3Ny1lcnJfdW51c2U6XG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NDc4Olx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZmlsZV9pbm9kZShmaWxlKSk7XG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDc5LVx0ZnB1dChmaWxlKTtcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM9NTEzPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfb3Blbl9maWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuLS1cbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01NzktZXJyb3I6XG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NTgwOlx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShkZW50cnkpKTtcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01ODEtXHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODIyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBTdGFnbmFudCBTaXR1YXRpb24qKgoKQWxyaWdodCwgdGhpcyBmZWVscy4uLiBzdHVjay4gVGhpbmdzIGFyZW4mIzM5O3QgbW92aW5nLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGlzIHN0YXRpYywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqLiBMZXQmIzM5O3MgemVybyBpbiBvbiBhIHBvdGVudGlhbCBjdWxwcml0IGluIHRoZSBjYWNoaW5nIGxheWVyLiBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBjb250cmlidXRpbmcgdG8gdGhpcyBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMgb2YgYGNhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZWAuIElzIGl0IGV2ZW4gdmlzaWJsZSB0byB0aGUga2VybmVsIG1vZHVsZT8gVGhhdCBjb3VsZCBlYXNpbHkgYmUgdGhlIHNvdXJjZSBvZiBteSBwcm9ibGVtLCBpZiBJIGNhbiYjMzk7dCBhY2Nlc3MgaXQuIFRoaXMgY291bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jPTMyOD1zdGF0aWMgdm9pZCBjYWNoZWZpbGVzX2NsZWFuX3VwX29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTM0Ni1cbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6MzQ3Olx0Y2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgb2JqZWN0LVx1MDAzZWZpbGUpO1xuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0zNDgtXG4tLVxuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oPTI3MT1leHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlZmlsZXNfb2JqZWN0X2phcjtcbi0tXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjc1LSAqL1xuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oOjI3NjpleHRlcm4gdm9pZCBjYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjc3LVx0XHRcdFx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSk7XG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTMzPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfbWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ2LSAqL1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjQ3OnN0YXRpYyB2b2lkIF9fY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ4LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTU0PXN0YXRpYyB2b2lkIGNhY2hlZmlsZXNfZG9fdW5tYXJrX2lub2RlX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTctXHRpbm9kZV9sb2NrKGlub2RlKTtcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo1ODpcdF9fY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgaW5vZGUpO1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTU5LVx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNjUtICovXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NjY6dm9pZCBjYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNjctXHRcdFx0XHQgICAgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTUxMz1zdGF0aWMgYm9vbCBjYWNoZWZpbGVzX29wZW5fZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTcwLVx0ZnNjYWNoZV9jb29raWVfbG9va3VwX25lZ2F0aXZlKG9iamVjdC1cdTAwM2Vjb29raWUpO1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjU3MTpcdGNhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShvYmplY3QsIGZpbGUpO1xuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTU3Mi1cdGZwdXQoZmlsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNjYwCgkJCQkJCQlvdXRwdXQ6IDE5OAoJCQkJCQkJdGhvdWdodHM6IDIzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ2FjaGVmaWxlcyBJbnRlZ3JhdGlvbiBpbiBOZXRGUyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgY2FjaGVmaWxlcyBpbnRlcmFjdHMgd2l0aCBuZXRmcyBpbnRlcm5hbGx5LiBUaGUgY29yZSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgdGhlc2Ugd3JpdGUtcmVsYXRlZCBmdW5jdGlvbnM6IGBuZXRmc193Yl9iZWdpbmAsIGBuZXRmc193Yl9lbmRgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLCBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AsIGFuZCBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIGNhY2hlZmlsZXMgaW50ZWdyYXRpb24uCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGlmIGBuZXRmc193cml0ZV9iZWdpbmAgaXMgYWN0dWFsbHkgc3RpbGwgaW4gdXNlLCBldmVuIHRob3VnaCBpdCYjMzk7cyBtYXJrZWQgYXMgZGVwcmVjYXRlZC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeSDigJMgaXQmIzM5O3MgZ29pbmcgb24gdGhlIGxpc3QuCgpOb3csIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gc2VlaW5nIGBORVRGU19TVVBQT1JUYCwgYEZTQ0FDSEVgLCBgQ0FDSEVGSUxFU2AsIGFuZCBgQUZTX0ZTYCBhcyB0aGUga2V5IHBsYXllcnMgaGVyZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4gYENPTkZJR19GU0NBQ0hFX1NUQVRTYCBpc24mIzM5O3QgbmVlZGVkLiBXaGF0IGFib3V0IGBDT05GSUdfQ0FDSEVGSUxFU19PTkRFTUFORGA/IE5haCwgZG9lc24mIzM5O3Qgc2VlbSBkaXJlY3RseSByZWxldmFudCB0byB0aGlzIHNwZWNpZmljIGludGVncmF0aW9uIHBvaW50LgoKQWxyaWdodCwgYSBxdWljayBzYW5pdHkgY2hlY2s6IGNhbiBJIGdldCBhd2F5IHdpdGgganVzdCBlbmFibGluZyBgTkVURlNfU1VQUE9SVGA/IFllcywgbG9va3MgbGlrZSB0aGF0JiMzOTtzIHN1ZmZpY2llbnQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBFeGNlbGxlbnQuCgpOb3csIGxldCYjMzk7cyBkb2N1bWVudCB0aGVzZSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZTX1NVUFBPUlQmIzM0OywKICAgICYjMzQ7RlNDQUNIRSYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGZzX3diX2JlZ2luJiMzNDssCiAgICAmIzM0O25ldGZzX3diX2VuZCYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXImIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVfYmVnaW4mIzM0OywKICAgICYjMzQ7bmV0ZnNfcGVyZm9ybV93cml0ZSYjMzQ7LAogICAgJiMzNDtpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2V4dHJhY3RfaXRlcl90b19zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZzIGxvZ2ljLCBpbmNsdWRpbmcgd3JpdGViYWNrIGxvY2tpbmcsIHVuYnVmZmVyZWQgd3JpdGVzLCBhbmQgaXRlcmF0b3IgZXh0cmFjdGlvbiBmdW5jdGlvbnMuIEl0IGFsc28gYWZmZWN0cyBjYWNoZWZpbGVzIGFuZCBBRlMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGU19TVVBQT1JUJiMzNDssCiAgICAmIzM0O0ZTQ0FDSEUmIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc193Yl9iZWdpbiYjMzQ7LAogICAgJiMzNDtuZXRmc193Yl9lbmQmIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZWJhY2tfc2luZ2xlJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlX2JlZ2luJiMzNDssCiAgICAmIzM0O25ldGZzX3BlcmZvcm1fd3JpdGUmIzM0OywKICAgICYjMzQ7aW92X2l0ZXJfZXh0cmFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDtleHRyYWN0X2l0ZXJfdG9fc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXRmcyBsb2dpYywgaW5jbHVkaW5nIHdyaXRlYmFjayBsb2NraW5nLCB1bmJ1ZmZlcmVkIHdyaXRlcywgYW5kIGl0ZXJhdG9yIGV4dHJhY3Rpb24gZnVuY3Rpb25zLiBJdCBhbHNvIGFmZmVjdHMgY2FjaGVmaWxlcyBhbmQgQUZTLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjIyOjU5LjcwMjIzNzI5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTE4NjQyNjEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGU19TVVBQT1JUXCIsXG4gICAgXCJGU0NBQ0hFXCIsXG4gICAgXCJDQUNIRUZJTEVTXCIsXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc193Yl9iZWdpblwiLFxuICAgIFwibmV0ZnNfd2JfZW5kXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRcIixcbiAgICBcIm5ldGZzX3dyaXRlcGFnZXNcIixcbiAgICBcIm5ldGZzX3dyaXRlYmFja19zaW5nbGVcIixcbiAgICBcIm5ldGZzX3dyaXRlX2JlZ2luXCIsXG4gICAgXCJuZXRmc19wZXJmb3JtX3dyaXRlXCIsXG4gICAgXCJpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzXCIsXG4gICAgXCJleHRyYWN0X2l0ZXJfdG9fc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldGZzIGxvZ2ljLCBpbmNsdWRpbmcgd3JpdGViYWNrIGxvY2tpbmcsIHVuYnVmZmVyZWQgd3JpdGVzLCBhbmQgaXRlcmF0b3IgZXh0cmFjdGlvbiBmdW5jdGlvbnMuIEl0IGFsc28gYWZmZWN0cyBjYWNoZWZpbGVzIGFuZCBBRlMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgc28gdGhleSBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMjo1OS43MDIyNDQ3NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDcxNDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDkwNGI5NGQ0MGUwODVlYTBiYzBmYjJiZTYxNmE1NjE5NjQwNDgyODdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMTQ6MjI6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N5bWxpbmsuYyBiL2ZzL2Fmcy9zeW1saW5rLmNcXG5pbmRleCBlZDU4NjgzNjlmMzcyZC4uMTZiNDgyM2NiN2I3ZTcgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3N5bWxpbmsuY1xcbisrKyBiL2ZzL2Fmcy9zeW1saW5rLmNcXG5AQCAtMjU1LDExICsyNTUsMTEgQEAgaW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChyZXQgPT0gMCkge1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMud2JfbG9jayk7XFxuK1xcdFxcdG5ldGZzX3diX2JlZ2luKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMsIGZhbHNlKTtcXG4gXFx0XFx0bmV0ZnNfZnJlZV9mb2xpb3FfYnVmZmVyKHZub2RlLVxcdTAwM2VkaXJlY3RvcnkpO1xcbiBcXHRcXHR2bm9kZS1cXHUwMDNlZGlyZWN0b3J5ID0gTlVMTDtcXG4gXFx0XFx0dm5vZGUtXFx1MDAzZWRpcmVjdG9yeV9zaXplID0gMDtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMud2JfbG9jayk7XFxuK1xcdFxcdG5ldGZzX3diX2VuZChcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzKTtcXG4gXFx0fSBlbHNlIGlmIChyZXQgPT0gMSkge1xcbiBcXHRcXHRyZXQgPSAwOyAvKiBTa2lwcGVkIHdyaXRlIGR1ZSB0byBsb2NrIGNvbmZsaWN0LiAqL1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuY1xcbmluZGV4IDI5MzdkYjY5MGI0MGI1Li5kNDMwOWRmYjU1ZGY0ZSAxMDA2NDRcXG4tLS0gYS9mcy9jYWNoZWZpbGVzL25hbWVpLmNcXG4rKysgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmNcXG5AQCAtMzc1LDcgKzM3NSw3IEBAIGludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJSZW5hbWUgZmFpbGVkIHdpdGggZXJyb3IgJWRcXFwiLCByZXQpO1xcbiBcXHR9XFxuIFxcbi1cXHRfX2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShvYmplY3QsIGRfaW5vZGUocmVwKSk7XFxuK1xcdGNhY2hlZmlsZXNfZG9fdW5tYXJrX2lub2RlX2luX3VzZShvYmplY3QsIGRfaW5vZGUocmVwKSk7XFxuIFxcdGVuZF9yZW5hbWluZyhcXHUwMDI2cmQpO1xcbiBcXHRfbGVhdmUoXFxcIiA9IDBcXFwiKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQ2Nyw3ICs0NjcsNiBAQCBzdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdClcXG4gXFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0aWYgKHVubGlrZWx5KCFmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VyZWFkX2l0ZXIpIHx8XFxuIFxcdCAgICB1bmxpa2VseSghZmlsZS1cXHUwMDNlZl9vcC1cXHUwMDNld3JpdGVfaXRlcikpIHtcXG4tXFx0XFx0ZnB1dChmaWxlKTtcXG4gXFx0XFx0cHJfbm90aWNlKFxcXCJDYWNoZSBkb2VzIG5vdCBzdXBwb3J0IHJlYWRfaXRlciBhbmQgd3JpdGVfaXRlclxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gZXJyX3VudXNlO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xcbmluZGV4IDc2ZDBmNmEyOWFiYWIyLi4yNGE4YTU0MThlMzExOSAxMDA2NDRcXG4tLS0gYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcXG4rKysgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcXG5AQCAtNjU5LDcgKzY1OSw3IEBAIGludCBuZXRmc193cml0ZV9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCxcXG4gXFx0ICogd2l0aGluIHRoZSBjYWNoZSBncmFudWxlIGNvbnRhaW5pbmcgdGhlIEVPRiwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkXFxuIFxcdCAqIHRvIHByZWxvYWQgdGhlIGdyYW51bGUuXFxuIFxcdCAqL1xcbi1cXHRpZiAoIW5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoY3R4KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAoIW5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoY3R4KSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKGZvbGlvLCBwb3MsIGxlbiwgZmFsc2UpKSB7XFxuIFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fcmhfd3JpdGVfenNraXApO1xcbiBcXHRcXHRnb3RvIGhhdmVfZm9saW9fbm9fd2FpdDtcXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcXG5pbmRleCA2YmRlMzMyMGJjZWM2Ni4uMmNkYjY4ZTZiMTZmZmYgMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuY1xcbisrKyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcXG5AQCAtMjc3LDcgKzI3Nyw3IEBAIHNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gXFx0XFx0ICogY2FjaGluZyBzZXJ2aWNlIHRlbXBvcmFyaWx5IGJlY2F1c2UgdGhlIGJhY2tpbmcgc3RvcmUgZ290XFxuIFxcdFxcdCAqIGN1bGxlZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChuZXRmc19pc19jYWNoZV9lbmFibGVkKGN0eCkpIHtcXG4rXFx0XFx0aWYgKG5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoY3R4KSkge1xcbiBcXHRcXHRcXHRpZiAoZmluZm8pIHtcXG4gXFx0XFx0XFx0XFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93aF93c3RyZWFtX2NvbmZsaWN0KTtcXG4gXFx0XFx0XFx0XFx0Z290byBmbHVzaF9jb250ZW50O1xcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXFxuaW5kZXggMjVmOGNlYjE1ZmFkNjQuLmMxNmZiYWQyODZhMTc3IDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXFxuKysrIGIvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcXG5AQCAtMTY2LDEzICsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3VicmVxLVxcdTAwM2VlcnJvciA9IC1FQUdBSU47XFxuIFxcdFxcdHRyYWNlX25ldGZzX3NyZXEoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX3JldHJ5KTtcXG4tXFx0XFx0aWYgKHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQgXFx1MDAzZSAwKVxcbitcXHRcXHRpZiAoc3VicmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0aW92X2l0ZXJfYWR2YW5jZShcXHUwMDI2d3JlcS1cXHUwMDNlYnVmZmVyLml0ZXIsIHN1YnJlcS1cXHUwMDNldHJhbnNmZXJyZWQpO1xcbitcXHRcXHRcXHR3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCArPSBzdWJyZXEtXFx1MDAzZXRyYW5zZmVycmVkO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoc3RyZWFtLVxcdTAwM2Vzb3VyY2UgPT0gTkVURlNfVVBMT0FEX1RPX1NFUlZFUiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgd3JlcS1cXHUwMDNlbmV0ZnNfb3BzLVxcdTAwM2VyZXRyeV9yZXF1ZXN0KVxcbiBcXHRcXHRcXHR3cmVxLVxcdTAwM2VuZXRmc19vcHMtXFx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcXG4gXFxuK1xcdFxcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfTUFERV9QUk9HUkVTUywgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFxcdTAwMjZzdWJyZXEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9CT1VOREFSWSwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRcXHRfX2NsZWFyX2JpdChORVRGU19TUkVRX0ZBSUxFRCwgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbkBAIC0xODYsMTcgKzE4OSwxMCBAQCBzdGF0aWMgaW50IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuIFxcbiBcXHRcXHRuZXRmc19nZXRfc3VicmVxdWVzdChzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfZ2V0X3Jlc3VibWl0KTtcXG4gXFxuLVxcdFxcdGlmIChzdHJlYW0tXFx1MDAzZXByZXBhcmVfd3JpdGUpIHtcXG4rXFx0XFx0aWYgKHN0cmVhbS1cXHUwMDNlcHJlcGFyZV93cml0ZSlcXG4gXFx0XFx0XFx0c3RyZWFtLVxcdTAwM2VwcmVwYXJlX3dyaXRlKHN1YnJlcSk7XFxuLVxcdFxcdFxcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcXHUwMDI2c3VicmVxLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0c3RydWN0IGlvdl9pdGVyIHNvdXJjZTtcXG4tXFxuLVxcdFxcdFxcdG5ldGZzX3Jlc2V0X2l0ZXIoc3VicmVxKTtcXG4tXFx0XFx0XFx0c291cmNlID0gc3VicmVxLVxcdTAwM2Vpb19pdGVyO1xcbi1cXHRcXHRcXHRuZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCBcXHUwMDI2c291cmNlKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgXFx1MDAyNnN1YnJlcS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRuZXRmc19zdGF0KFxcdTAwMjZuZXRmc19uX3doX3JldHJ5X3dyaXRlX3N1YnJlcSk7XFxuIFxcdH1cXG4gXFxuIFxcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvaW50ZXJuYWwuaCBiL2ZzL25ldGZzL2ludGVybmFsLmhcXG5pbmRleCA2NDU5OTZlY2ZjODAzNi4uZDg4OWNhYTQwMWRjMjQgMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvaW50ZXJuYWwuaFxcbisrKyBiL2ZzL25ldGZzL2ludGVybmFsLmhcXG5AQCAtMjM5LDYgKzIzOSwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbmV0ZnNfaXNfY2FjaGVfZW5hYmxlZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eClcXG4gI2VuZGlmXFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBuZXRmc19pc19jYWNoZV9tYXliZV9lbmFibGVkKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4KVxcbit7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19GU0NBQ0hFKVxcbitcXHRzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IGN0eC1cXHUwMDNlY2FjaGU7XFxuK1xcbitcXHRyZXR1cm4gZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHR0ZXN0X2JpdChGU0NBQ0hFX0NPT0tJRV9JU19DQUNISU5HLCBcXHUwMDI2Y29va2llLVxcdTAwM2VmbGFncyk7XFxuKyNlbHNlXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIC8qXFxuICAqIEdldCBhIHJlZiBvbiBhIG5ldGZzIGdyb3VwIGF0dGFjaGVkIHRvIGEgZGlydHkgcGFnZSAoZS5nLiBhIGNlcGggc25hcCkuXFxuICAqL1xcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9sb2NraW5nLmMgYi9mcy9uZXRmcy9sb2NraW5nLmNcXG5pbmRleCAyMjQ5ZWNkMDlkMGE4ZC4uNGUzYmUyYjgxNTA0MDggMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvbG9ja2luZy5jXFxuKysrIGIvZnMvbmV0ZnMvbG9ja2luZy5jXFxuQEAgLTksNiArOSwxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbitzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpbms7XFx0XFx0LyogTGluayBpbiBpY3R4LVxcdTAwM2V3Yl9xdWV1ZSAqL1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3RcXHQqd2FpdGVyO1xcdC8qIFdhaXRlciB0YXNrOyBjbGVhcmVkIHdoZW4gbG9jayBncmFudGVkICovXFxuK307XFxuK1xcbiAvKlxcbiAgKiBpbm9kZV9kaW9fd2FpdF9pbnRlcnJ1cHRpYmxlIC0gd2FpdCBmb3Igb3V0c3RhbmRpbmcgRElPIHJlcXVlc3RzIHRvIGZpbmlzaFxcbiAgKiBAaW5vZGU6IGlub2RlIHRvIHdhaXQgZm9yXFxuQEAgLTIwMywzICsyMDgsOTMgQEAgdm9pZCBuZXRmc19lbmRfaW9fZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdHVwX3JlYWQoXFx1MDAyNmlub2RlLVxcdTAwM2VpX3J3c2VtKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG5ldGZzX2VuZF9pb19kaXJlY3QpO1xcbitcXG4rLypcXG4rICogV2FpdCB0byBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gd3JpdGViYWNrLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgbmV0ZnNfd2JfYmVnaW5fd2FpdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXFxuK3tcXG4rXFx0c3RydWN0IG5ldGZzX3diX3dhaXRlciB3YWl0ZXIgPSB7fTtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50O1xcbitcXHRib29sIGdvdCA9IGZhbHNlO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soTkVURlNfSUNUWF9XQl9MT0NLLCBcXHUwMDI2aWN0eC1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdGdldF90YXNrX3N0cnVjdCh0c2spO1xcbitcXHRcXHR3YWl0ZXIud2FpdGVyID0gdHNrO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZ3YWl0ZXIubGluaywgXFx1MDAyNmljdHgtXFx1MDAzZXdiX3F1ZXVlKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0Z290ID0gdHJ1ZTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aWN0eC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAoIWdvdCkge1xcbitcXHRcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcXG4rXFx0XFx0XFx0LyogUmVhZCB3YWl0ZXIgYmVmb3JlIGFjY2Vzc2luZyBpbm9kZSBzdGF0ZS4gKi9cXG4rXFx0XFx0XFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNndhaXRlci53YWl0ZXIpID09IE5VTEwpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRzY2hlZHVsZSgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIG5ldGZzX3diX2JlZ2luIC0gQmVnaW4gd3JpdGViYWNrLCB3YWl0aW5nIGlmIG5lZWQgYmVcXG4rICogQGljdHg6IFRoZSBpbm9kZSB0byBnZXQgd3JpdGViYWNrIGFjY2VzcyBvblxcbisgKiBAbm93YWl0OiBSZXR1cm4gZmFpbHVyZSBpbW1lZGlhdGVseSByYXRoZXIgdGhhbiB3YWl0aW5nIGlmIHRydWVcXG4rICpcXG4rICogQmVnaW4gd3JpdGViYWNrIHRvIGFuIGlub2RlLCB3YWl0aW5nIGZvciBleGNsdXNpdmUgYWNjZXNzIGlmIEBub3dhaXQgaXNcXG4rICogZmFsc2UuICBUaGlzIHByZXZlbnRzIGNvbGxlY3Rpb24gZnJvbSBiZWluZyBkb25lIG91dCBvZiBvcmRlciB3aXRoIHJlc3BlY3RcXG4rICogdG8gdGhlIGlzc3VhbmNlIG9mIHdyaXRlIHN1YnJlcXVlc3RzLlxcbisgKlxcbisgKiBOb3RlIHRoYXQgd3JpdGViYWNrIG1heSBiZSBlbmRlZCBpbiBhIGRpZmZlcmVudCBwcm9jZXNzIChlLmcuIHRoZSBjb2xsZWN0aW9uXFxuKyAqIGZ1bmN0aW9uIG9uIGEgd29ya3F1ZXVlKSB0aGFuIHN0YXJ0ZWQgaXQuXFxuKyAqXFxuKyAqIFJldHVybjogVHJ1ZSBpZiBjYW4gcHJvY2VlZCwgZmFsc2UgaWYgZGVuaWVkLlxcbisgKi9cXG4rYm9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KVxcbit7XFxuK1xcdGlmICghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKE5FVEZTX0lDVFhfV0JfTE9DSywgXFx1MDAyNmljdHgtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChub3dhaXQpIHtcXG4rXFx0XFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3NraXApO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xcbitcXHRyZXR1cm4gbmV0ZnNfd2JfYmVnaW5fd2FpdChpY3R4KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTtcXG4rXFxuKy8qIG5ldGZzX3diX2VuZCAtIEVuZCB3cml0ZWJhY2tcXG4rICogQGljdHg6IFRoZSBpbm9kZSB3ZSBoYXZlIHdyaXRlYmFjayBhY2Nlc3MgdG9cXG4rICpcXG4rICogRW5kIHdyaXRlYmFjayBhY2Nlc3Mgb24gYW4gaW5vZGUsIHdha2luZyB1cCB0aGUgbmV4dCB3cml0ZWJhY2sgcmVxdWVzdC5cXG4rICovXFxuK3ZvaWQgbmV0ZnNfd2JfZW5kKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyICp3YWl0ZXI7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xcbitcXG4rXFx0V0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChORVRGU19JQ1RYX1dCX0xPQ0ssIFxcdTAwMjZpY3R4LVxcdTAwM2VmbGFncykpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHdhaXRlciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2aWN0eC1cXHUwMDNld2JfcXVldWUsIHN0cnVjdCBuZXRmc193Yl93YWl0ZXIsIGxpbmspO1xcbitcXHRpZiAod2FpdGVyKSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZ3YWl0ZXItXFx1MDAzZWxpbmspO1xcbitcXHRcXHR0c2sgPSB3YWl0ZXItXFx1MDAzZXdhaXRlcjtcXG4rXFx0XFx0LyogV3JpdGUgaW5vZGUgc3RhdGUgYmVmb3JlIGNsZWFyaW5nIHdhaXRlci4gKi9cXG4rXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNndhaXRlci1cXHUwMDNld2FpdGVyLCBOVUxMKTtcXG4rXFx0XFx0d2FrZV91cF9wcm9jZXNzKHRzayk7XFxuK1xcdFxcdHB1dF90YXNrX3N0cnVjdCh0c2spO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKE5FVEZTX0lDVFhfV0JfTE9DSywgXFx1MDAyNmljdHgtXFx1MDAzZWZsYWdzKTtcXG4rXFx0fVxcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmljdHgtXFx1MDAzZWxvY2spO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wobmV0ZnNfd2JfZW5kKTtcXG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jIGIvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jXFxuaW5kZXggMjRmYzJiYjJmOGE0N2IuLjIxMGViOGYzOTU4ZDc3IDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuY1xcbisrKyBiL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuY1xcbkBAIC00MDgsNiArNDA4LDE2IEBAIGJvb2wgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG4gXFx0bmV0ZnNfd2FrZV9ycmVxX2ZsYWcod3JlcSwgTkVURlNfUlJFUV9JTl9QUk9HUkVTUywgbmV0ZnNfcnJlcV90cmFjZV93YWtlX2lwKTtcXG4gXFx0LyogQXMgd2UgY2xlYXJlZCBORVRGU19SUkVRX0lOX1BST0dSRVNTLCB3ZSBhY3F1aXJlZCBpdHMgcmVmLiAqL1xcbiBcXG4rXFx0c3dpdGNoICh3cmVxLVxcdTAwM2VvcmlnaW4pIHtcXG4rXFx0Y2FzZSBORVRGU19XUklURUJBQ0s6XFxuK1xcdGNhc2UgTkVURlNfV1JJVEVCQUNLX1NJTkdMRTpcXG4rXFx0Y2FzZSBORVRGU19XUklURVRIUk9VR0g6XFxuK1xcdFxcdG5ldGZzX3diX2VuZChpY3R4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAod3JlcS1cXHUwMDNlaW9jYikge1xcbiBcXHRcXHRzaXplX3Qgd3JpdHRlbiA9IG1pbih3cmVxLVxcdTAwM2V0cmFuc2ZlcnJlZCwgd3JlcS1cXHUwMDNlbGVuKTtcXG4gXFx0XFx0d3JlcS1cXHUwMDNlaW9jYi1cXHUwMDNla2lfcG9zICs9IHdyaXR0ZW47XFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXFxuaW5kZXggYzAzYzdjYzQ1ZTQ3MTYuLmYyNzYxYzk5Nzk1YTZiIDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcXG4rKysgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXFxuQEAgLTEwNiw3ICsxMDYsNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0X2VudGVyKFxcXCJSPSV4XFxcIiwgd3JlcS1cXHUwMDNlZGVidWdfaWQpO1xcbiBcXG4gXFx0aWN0eCA9IG5ldGZzX2lub2RlKHdyZXEtXFx1MDAzZWlub2RlKTtcXG4tXFx0aWYgKGlzX2NhY2hlYWJsZSBcXHUwMDI2XFx1MDAyNiBuZXRmc19pc19jYWNoZV9lbmFibGVkKGljdHgpKVxcbitcXHRpZiAoaXNfY2FjaGVhYmxlKVxcbiBcXHRcXHRmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbihcXHUwMDI2d3JlcS1cXHUwMDNlY2FjaGVfcmVzb3VyY2VzLCBuZXRmc19pX2Nvb2tpZShpY3R4KSk7XFxuIFxcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFxcdTAwMjZ3cmVxLVxcdTAwM2VidWZmZXIsIHdyZXEtXFx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIG5vbWVtO1xcbkBAIC01NTEsMTQgKzU1MSw4IEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRpbnQgZXJyb3IgPSAwO1xcbiBcXG4tXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKSkge1xcbi1cXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7XFxuLVxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2JfbG9ja19za2lwKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4tXFx0fVxcbitcXHRpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LyogTmVlZCB0aGUgZmlyc3QgZm9saW8gdG8gYmUgYWJsZSB0byBzZXQgdXAgdGhlIG9wLiAqL1xcbiBcXHRmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgTlVMTCwgXFx1MDAyNmVycm9yKTtcXG5AQCAtNTg4LDEzICs1ODIsMTMgQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGVycm9yID0gbmV0ZnNfd3JpdGVfZm9saW8od3JlcSwgd2JjLCBmb2xpbyk7XFxuLVxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAoZXJyb3IgPT0gLUVOT01FTSkge1xcbitcXHRcXHRcXHRmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uod2JjLCBmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fSB3aGlsZSAoKGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd2JjLCBmb2xpbywgXFx1MDAyNmVycm9yKSkpO1xcbiBcXG4gXFx0bmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHdyZXEpO1xcbi1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4gXFx0bmV0ZnNfd2FrZV9jb2xsZWN0b3Iod3JlcSk7XFxuIFxcbiBcXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9yZXR1cm4pO1xcbkBAIC02MDIsOSArNTk2LDE2IEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIFxcbiBjb3VsZG50X3N0YXJ0Olxcbi1cXHRuZXRmc19raWxsX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIHdiYywgZm9saW8pO1xcbitcXHRpZiAoZXJyb3IgPT0gLUVOT01FTSkge1xcbitcXHRcXHRmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uod2JjLCBmb2xpbyk7XFxuK1xcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdFxcdGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd2JjLCBmb2xpbywgXFx1MDAyNmVycm9yKTtcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvICE9IE5VTEwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRuZXRmc19raWxsX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIHdiYywgZm9saW8pO1xcbitcXHR9XFxuIG91dDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4rXFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgZXJyb3IpO1xcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG5AQCAtNjE4LDE2ICs2MTksMTcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW5cXG4gXFx0c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHggPSBuZXRmc19pbm9kZShmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApKTtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmljdHgtXFx1MDAzZXdiX2xvY2spO1xcbitcXHRuZXRmc193Yl9iZWdpbihpY3R4LCBmYWxzZSk7XFxuIFxcbiBcXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcsIGlvY2ItXFx1MDAzZWtpX2ZpbHAsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGlvY2ItXFx1MDAzZWtpX3BvcywgTkVURlNfV1JJVEVUSFJPVUdIKTtcXG4gXFx0aWYgKElTX0VSUih3cmVxKSkge1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmljdHgtXFx1MDAzZXdiX2xvY2spO1xcbitcXHRcXHRuZXRmc193Yl9lbmQoaWN0eCk7XFxuIFxcdFxcdHJldHVybiB3cmVxO1xcbiBcXHR9XFxuIFxcbiBcXHR3cmVxLVxcdTAwM2Vpb19zdHJlYW1zWzBdLmF2YWlsID0gdHJ1ZTtcXG4rXFx0X19zZXRfYml0KE5FVEZTX1JSRVFfT0ZGTE9BRF9DT0xMRUNUSU9OLCBcXHUwMDI2d3JlcS1cXHUwMDNlZmxhZ3MpO1xcbiBcXHR0cmFjZV9uZXRmc193cml0ZSh3cmVxLCBuZXRmc193cml0ZV90cmFjZV93cml0ZXRocm91Z2gpO1xcbiBcXHRyZXR1cm4gd3JlcTtcXG4gfVxcbkBAIC02ODUsNyArNjg3LDYgQEAgaW50IG5ldGZzX2FkdmFuY2Vfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NcXG4gc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmb2xpbyAqd3JpdGV0aHJvdWdoX2NhY2hlKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCA9IG5ldGZzX2lub2RlKHdyZXEtXFx1MDAzZWlub2RlKTtcXG4gXFx0c3NpemVfdCByZXQ7XFxuIFxcbiBcXHRfZW50ZXIoXFxcIlI9JXhcXFwiLCB3cmVxLVxcdTAwM2VkZWJ1Z19pZCk7XFxuQEAgLTY5OSw4ICs3MDAsNiBAQCBzc2l6ZV90IG5ldGZzX2VuZF93cml0ZXRocm91Z2goc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsIHN0cnVjdCB3cml0ZWJhY2tfY1xcbiBcXG4gXFx0bmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHdyZXEpO1xcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4tXFxuIFxcdGlmICh3cmVxLVxcdTAwM2Vpb2NiKVxcbiBcXHRcXHRyZXQgPSAtRUlPQ0JRVUVVRUQ7XFxuIFxcdGVsc2VcXG5AQCAtODQ3LDE1ICs4NDYsMTAgQEAgaW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIWlvdl9pdGVyX2lzX2ZvbGlvcShpdGVyKSkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKSkge1xcbi1cXHRcXHRpZiAod2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7XFxuLVxcdFxcdFxcdC8qIFRoZSBWRlMgd2lsbCBoYXZlIHVuZGlydGllZCB0aGUgaW5vZGUuICovXFxuLVxcdFxcdFxcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFxcdTAwMjZpY3R4LVxcdTAwM2Vpbm9kZSk7XFxuLVxcdFxcdFxcdG5ldGZzX3N0YXQoXFx1MDAyNm5ldGZzX25fd2JfbG9ja19za2lwKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDE7XFxuLVxcdFxcdH1cXG4tXFx0XFx0bmV0ZnNfc3RhdChcXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4rXFx0aWYgKCFuZXRmc193Yl9iZWdpbihpY3R4LCB3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpKSB7XFxuK1xcdFxcdC8qIFRoZSBWRlMgd2lsbCBoYXZlIHVuZGlydGllZCB0aGUgaW5vZGUuICovXFxuK1xcdFxcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFxcdTAwMjZpY3R4LVxcdTAwM2Vpbm9kZSk7XFxuK1xcdFxcdHJldHVybiAxO1xcbiBcXHR9XFxuIFxcbiBcXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShtYXBwaW5nLCBOVUxMLCAwLCBORVRGU19XUklURUJBQ0tfU0lOR0xFKTtcXG5AQCAtODkzLDcgKzg4Nyw2IEBAIGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRzbXBfd21iKCk7IC8qIFdyaXRlIGxpc3RzIGJlZm9yZSBBTExfUVVFVUVELiAqL1xcbiBcXHRzZXRfYml0KE5FVEZTX1JSRVFfQUxMX1FVRVVFRCwgXFx1MDAyNndyZXEtXFx1MDAzZWZsYWdzKTtcXG4gXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2aWN0eC1cXHUwMDNld2JfbG9jayk7XFxuIFxcdG5ldGZzX3dha2VfY29sbGVjdG9yKHdyZXEpO1xcbiBcXG4gXFx0bmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfcmV0dXJuKTtcXG5AQCAtOTAxLDcgKzg5NCw3IEBAIGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiBcXG4gY291bGRudF9zdGFydDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpY3R4LVxcdTAwM2V3Yl9sb2NrKTtcXG4rXFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZzLmhcXG5pbmRleCAyNDNjMGY3Mzc5Mzg4My4uMWJjMTIwZDYxYzViZWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRmcy5oXFxuQEAgLTYxLDE0ICs2MSwxNiBAQCBzdHJ1Y3QgbmV0ZnNfaW5vZGUge1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRlNDQUNIRSlcXG4gXFx0c3RydWN0IGZzY2FjaGVfY29va2llXFx0KmNhY2hlO1xcbiAjZW5kaWZcXG4tXFx0c3RydWN0IG11dGV4XFx0XFx0d2JfbG9jaztcXHQvKiBXcml0ZWJhY2sgc2VyaWFsaXNhdGlvbiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0d2JfcXVldWU7XFx0LyogUXVldWUgb2YgcHJvY2Vzc2VzIHdhbnRpbmcgdG8gZG8gd3JpdGViYWNrICovXFxuIFxcdGxvZmZfdFxcdFxcdFxcdF9yZW1vdGVfaV9zaXplO1xcdC8qIFNpemUgb2YgdGhlIHJlbW90ZSBmaWxlICovXFxuIFxcdGxvZmZfdFxcdFxcdFxcdF96ZXJvX3BvaW50O1xcdC8qIFNpemUgYWZ0ZXIgd2hpY2ggd2UgYXNzdW1lIHRoZXJlJ3Mgbm8gZGF0YVxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgKiBvbiB0aGUgc2VydmVyICovXFxuK1xcdHNwaW5sb2NrX3RcXHRcXHRsb2NrO1xcdFxcdC8qIExvY2sgY292ZXJpbmcgd2JfcXVldWUgKi9cXG4gXFx0YXRvbWljX3RcXHRcXHRpb19jb3VudDtcXHQvKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgcmVxcyAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuICNkZWZpbmUgTkVURlNfSUNUWF9PRElSRUNUXFx0MFxcdFxcdC8qIFRoZSBmaWxlIGhhcyBESU8gaW4gcHJvZ3Jlc3MgKi9cXG4gI2RlZmluZSBORVRGU19JQ1RYX1VOQlVGRkVSRURcXHQxXFx0XFx0LyogSS9PIHNob3VsZCBub3QgdXNlIHRoZSBwYWdlY2FjaGUgKi9cXG4rI2RlZmluZSBORVRGU19JQ1RYX1dCX0xPQ0tcXHQyXFx0XFx0LyogV3JpdGViYWNrIHNlcmlhbGlzYXRpb24gbG9jayAqL1xcbiAjZGVmaW5lIE5FVEZTX0lDVFhfTU9ESUZJRURfQVRUUiAzXFx0XFx0LyogSW5kaWNhdGUgY2hhbmdlIGluIG10aW1lL2N0aW1lICovXFxuICNkZWZpbmUgTkVURlNfSUNUWF9TSU5HTEVfTk9fVVBMT0FEIDRcXHRcXHQvKiBNb25vbGl0aGljIHBheWxvYWQsIGNhY2hlIGJ1dCBubyB1cGxvYWQgKi9cXG4gfTtcXG5AQCAtNDYyLDYgKzQ2NCwxMCBAQCBpbnQgbmV0ZnNfYWxsb2NfZm9saW9xX2J1ZmZlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gXFx0XFx0XFx0ICAgICAgc2l6ZV90ICpfY3VyX3NpemUsIHNzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKTtcXG4gdm9pZCBuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIoc3RydWN0IGZvbGlvX3F1ZXVlICpmcSk7XFxuIFxcbisvKiBXcml0ZWJhY2sgZXhjbHVzaW9uIEFQSS4gKi9cXG4rYm9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTtcXG4rdm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcXG4rXFxuIC8qKlxcbiAgKiBuZXRmc19pbm9kZSAtIEdldCB0aGUgbmV0ZnMgaW5vZGUgY29udGV4dCBmcm9tIHRoZSBpbm9kZVxcbiAgKiBAaW5vZGU6IFRoZSBpbm9kZSB0byBxdWVyeVxcbkBAIC03NDMsNyArNzQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2lub2RlX2luaXQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19GU0NBQ0hFKVxcbiBcXHRjdHgtXFx1MDAzZWNhY2hlID0gTlVMTDtcXG4gI2VuZGlmXFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNmN0eC1cXHUwMDNld2JfbG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZXdiX3F1ZXVlKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuIFxcdC8qIC1cXHUwMDNlcmVsZWFzZXBhZ2UoKSBkcml2ZXMgemVyb19wb2ludCAqL1xcbiBcXHRpZiAodXNlX3plcm9fcG9pbnQpIHtcXG4gXFx0XFx0Y3R4LVxcdTAwM2VfemVyb19wb2ludCA9IGN0eC1cXHUwMDNlX3JlbW90ZV9pX3NpemU7XFxuQEAgLTc1Myw3ICs3NjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfaW5vZGVfaW5pdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCxcXG4gXFxuIC8qKlxcbiAgKiBuZXRmc19yZXNpemVfZmlsZSAtIE5vdGUgdGhhdCBhIGZpbGUgZ290IHJlc2l6ZWRcXG4tICogQGN0eDogVGhlIG5ldGZzIGlub2RlIGJlaW5nIHJlc2l6ZWRcXG4rICogQGljdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkXFxuICAqIEBuZXdfaV9zaXplOiBUaGUgbmV3IGZpbGUgc2l6ZVxcbiAgKiBAY2hhbmdlZF9vbl9zZXJ2ZXI6IFRoZSBjaGFuZ2Ugd2FzIGFwcGxpZWQgdG8gdGhlIHNlcnZlclxcbiAgKlxcbmRpZmYgLS1naXQgYS9saWIvaW92X2l0ZXIuYyBiL2xpYi9pb3ZfaXRlci5jXFxuaW5kZXggMjQzNjYyYWYxYWY3M2YuLjVhNjQzNDcwOTcxNmUxIDEwMDY0NFxcbi0tLSBhL2xpYi9pb3ZfaXRlci5jXFxuKysrIGIvbGliL2lvdl9pdGVyLmNcXG5AQCAtMTU2OCw2ICsxNTY4LDcgQEAgc3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnIgPSAwLCBvZmZzZXQ7XFxuIFxcdGxvZmZfdCBwb3MgPSBpLVxcdTAwM2V4YXJyYXlfc3RhcnQgKyBpLVxcdTAwM2Vpb3Zfb2Zmc2V0O1xcbitcXHRib29sIHdpbGxfYWxsb2MgPSAhKnBhZ2VzO1xcbiBcXHRYQV9TVEFURSh4YXMsIGktXFx1MDAzZXhhcnJheSwgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiBcXG4gXFx0b2Zmc2V0ID0gcG9zIFxcdTAwMjYgflBBR0VfTUFTSztcXG5AQCAtMTU5NSw2ICsxNTk2LDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcXG4gXFx0fVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuK1xcdGlmICghbnIpIHtcXG4rXFx0XFx0aWYgKHdpbGxfYWxsb2MpIHtcXG4rXFx0XFx0XFx0a3ZmcmVlKCpwYWdlcyk7XFxuK1xcdFxcdFxcdCpwYWdlcyA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdG1heHNpemUgPSBtaW5fdChzaXplX3QsIG5yICogUEFHRV9TSVpFIC0gb2Zmc2V0LCBtYXhzaXplKTtcXG4gXFx0aW92X2l0ZXJfYWR2YW5jZShpLCBtYXhzaXplKTtcXG4gXFx0cmV0dXJuIG1heHNpemU7XFxuQEAgLTE2MjgsNiArMTYzNyw4IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXFxuIFxcdGJpLmJpX2J2ZWNfZG9uZSA9IHNraXA7XFxuIFxcbiBcXHRtYXhwYWdlcyA9IHdhbnRfcGFnZXNfYXJyYXkocGFnZXMsIG1heHNpemUsIHNraXAsIG1heHBhZ2VzKTtcXG4rXFx0aWYgKCFtYXhwYWdlcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHR3aGlsZSAoYmkuYmlfc2l6ZSBcXHUwMDI2XFx1MDAyNiBiaS5iaV9pZHggXFx1MDAzYyBpLVxcdTAwM2Vucl9zZWdzKSB7XFxuIFxcdFxcdHN0cnVjdCBiaW9fdmVjIGJ2ID0gYnZlY19pdGVyX2J2ZWMoaS1cXHUwMDNlYnZlYywgYmkpO1xcbkBAIC0xNzQ1LDYgKzE3NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIFxcdHVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSAwO1xcbiBcXHRzaXplX3Qgb2Zmc2V0O1xcbitcXHRib29sIHdpbGxfYWxsb2MgPSAhKnBhZ2VzO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4gXFx0aWYgKGktXFx1MDAzZWRhdGFfc291cmNlID09IElURVJfREVTVClcXG5AQCAtMTc2MSw4ICsxNzczLDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXFxuIFxcdGlmICghbWF4cGFnZXMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRyZXMgPSBwaW5fdXNlcl9wYWdlc19mYXN0KGFkZHIsIG1heHBhZ2VzLCBndXBfZmxhZ3MsICpwYWdlcyk7XFxuLVxcdGlmICh1bmxpa2VseShyZXMgXFx1MDAzYz0gMCkpXFxuK1xcdGlmICh1bmxpa2VseShyZXMgXFx1MDAzYz0gMCkpIHtcXG4rXFx0XFx0aWYgKHdpbGxfYWxsb2MpIHtcXG4rXFx0XFx0XFx0a3ZmcmVlKCpwYWdlcyk7XFxuK1xcdFxcdFxcdCpwYWdlcyA9IE5VTEw7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4gXFx0bWF4c2l6ZSA9IG1pbl90KHNpemVfdCwgbWF4c2l6ZSwgcmVzICogUEFHRV9TSVpFIC0gb2Zmc2V0KTtcXG4gXFx0aW92X2l0ZXJfYWR2YW5jZShpLCBtYXhzaXplKTtcXG4gXFx0cmV0dXJuIG1heHNpemU7XFxuZGlmZiAtLWdpdCBhL2xpYi9zY2F0dGVybGlzdC5jIGIvbGliL3NjYXR0ZXJsaXN0LmNcXG5pbmRleCBiN2ZlOTFlZjM1YjhjNi4uNmVhNDBkMmU2MjQ3NTUgMTAwNjQ0XFxuLS0tIGEvbGliL3NjYXR0ZXJsaXN0LmNcXG4rKysgYi9saWIvc2NhdHRlcmxpc3QuY1xcbkBAIC0xMzY2LDYgKzEzNjYsNyBAQCBzdGF0aWMgc3NpemVfdCBleHRyYWN0X3hhcnJheV90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdFxcdHNnX21heC0tO1xcbiBcXG4gXFx0XFx0bWF4c2l6ZSAtPSBsZW47XFxuK1xcdFxcdHN0YXJ0ICs9IGxlbjtcXG4gXFx0XFx0cmV0ICs9IGxlbjtcXG4gXFx0XFx0aWYgKG1heHNpemUgXFx1MDAzYz0gMCB8fCBzZ19tYXggPT0gMClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jIGIvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmNcXG5pbmRleCBmMDJmN2I3YWE3OTYwNS4uZTdlMTU0Zjk0ZjY2NWYgMTAwNjQ0XFxuLS0tIGEvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmNcXG4rKysgYi9saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuY1xcbkBAIC0yNzUsNyArMjc1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRzdHJ1Y3QgcGFnZSAqKnNwYWdlcywgKipicGFnZXM7XFxuIFxcdHU4ICpzY3JhdGNoLCAqYnVmZmVyO1xcbiBcXHRzaXplX3QgYnVmc2l6ZSwgbnBhZ2VzLCBzaXplLCBjb3BpZWQ7XFxuLVxcdGludCBpLCBiLCBwYXR0O1xcbitcXHRpbnQgaSwgcGF0dDtcXG4gXFxuIFxcdGJ1ZnNpemUgPSAweDEwMDAwMDtcXG4gXFx0bnBhZ2VzID0gYnVmc2l6ZSAvIFBBR0VfU0laRTtcXG5AQCAtMjk4LDEwICsyOTgsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2NvcHlfdG9fYnZlYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpdGVyLm5yX3NlZ3MsIDApO1xcbiBcXG4gXFx0LyogQnVpbGQgdGhlIGV4cGVjdGVkIGltYWdlIGluIHRoZSBzY3JhdGNoIGJ1ZmZlci4gKi9cXG4tXFx0YiA9IDA7XFxuIFxcdHBhdHQgPSAwO1xcbiBcXHRtZW1zZXQoc2NyYXRjaCwgMCwgYnVmc2l6ZSk7XFxuLVxcdGZvciAocHIgPSBidmVjX3Rlc3RfcmFuZ2VzOyBwci1cXHUwMDNlZnJvbSBcXHUwMDNlPSAwOyBwcisrLCBiKyspIHtcXG4rXFx0Zm9yIChwciA9IGJ2ZWNfdGVzdF9yYW5nZXM7IHByLVxcdTAwM2Vmcm9tIFxcdTAwM2U9IDA7IHByKyspIHtcXG4gXFx0XFx0dTggKnAgPSBzY3JhdGNoICsgcHItXFx1MDAzZXBhZ2UgKiBQQUdFX1NJWkU7XFxuIFxcbiBcXHRcXHRmb3IgKGkgPSBwci1cXHUwMDNlZnJvbTsgaSBcXHUwMDNjIHByLVxcdTAwM2V0bzsgaSsrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMzowMC40MDM4MDc3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4NDg0ODQ1NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZTX1NVUFBPUlRcIixcbiAgICBcIkZTQ0FDSEVcIixcbiAgICBcIkNBQ0hFRklMRVNcIixcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3diX2JlZ2luXCIsXG4gICAgXCJuZXRmc193Yl9lbmRcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiLFxuICAgIFwibmV0ZnNfd3JpdGVfYmVnaW5cIixcbiAgICBcIm5ldGZzX3BlcmZvcm1fd3JpdGVcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfcGFnZXNcIixcbiAgICBcImV4dHJhY3RfaXRlcl90b19zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZnMgbG9naWMsIGluY2x1ZGluZyB3cml0ZWJhY2sgbG9ja2luZywgdW5idWZmZXJlZCB3cml0ZXMsIGFuZCBpdGVyYXRvciBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gSXQgYWxzbyBhZmZlY3RzIGNhY2hlZmlsZXMgYW5kIEFGUy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTA0Yjk0ZDQwZTA4NWVhMGJjMGZiMmJlNjE2YTU2MTk2NDA0ODI4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDE0OjIyOjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3N5bWxpbmsuYyBiL2ZzL2Fmcy9zeW1saW5rLmNcbmluZGV4IGVkNTg2ODM2OWYzNzJkLi4xNmI0ODIzY2I3YjdlNyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zeW1saW5rLmNcbisrKyBiL2ZzL2Fmcy9zeW1saW5rLmNcbkBAIC0yNTUsMTEgKzI1NSwxMSBAQCBpbnQgYWZzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdH1cbiBcbiBcdGlmIChyZXQgPT0gMCkge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLndiX2xvY2spO1xuK1x0XHRuZXRmc193Yl9iZWdpbihcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcywgZmFsc2UpO1xuIFx0XHRuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIodm5vZGUtXHUwMDNlZGlyZWN0b3J5KTtcbiBcdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5ID0gTlVMTDtcbiBcdFx0dm5vZGUtXHUwMDNlZGlyZWN0b3J5X3NpemUgPSAwO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMud2JfbG9jayk7XG4rXHRcdG5ldGZzX3diX2VuZChcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcyk7XG4gXHR9IGVsc2UgaWYgKHJldCA9PSAxKSB7XG4gXHRcdHJldCA9IDA7IC8qIFNraXBwZWQgd3JpdGUgZHVlIHRvIGxvY2sgY29uZmxpY3QuICovXG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9uYW1laS5jIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jXG5pbmRleCAyOTM3ZGI2OTBiNDBiNS4uZDQzMDlkZmI1NWRmNGUgMTAwNjQ0XG4tLS0gYS9mcy9jYWNoZWZpbGVzL25hbWVpLmNcbisrKyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuY1xuQEAgLTM3NSw3ICszNzUsNyBAQCBpbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXG4gXHRcdFx0XHRcdCAgICBcIlJlbmFtZSBmYWlsZWQgd2l0aCBlcnJvciAlZFwiLCByZXQpO1xuIFx0fVxuIFxuLVx0X19jYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKHJlcCkpO1xuK1x0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShyZXApKTtcbiBcdGVuZF9yZW5hbWluZyhcdTAwMjZyZCk7XG4gXHRfbGVhdmUoXCIgPSAwXCIpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDY3LDcgKzQ2Nyw2IEBAIHN0cnVjdCBmaWxlICpjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdGlmICh1bmxpa2VseSghZmlsZS1cdTAwM2VmX29wLVx1MDAzZXJlYWRfaXRlcikgfHxcbiBcdCAgICB1bmxpa2VseSghZmlsZS1cdTAwM2VmX29wLVx1MDAzZXdyaXRlX2l0ZXIpKSB7XG4tXHRcdGZwdXQoZmlsZSk7XG4gXHRcdHByX25vdGljZShcIkNhY2hlIGRvZXMgbm90IHN1cHBvcnQgcmVhZF9pdGVyIGFuZCB3cml0ZV9pdGVyXFxuXCIpO1xuIFx0XHRnb3RvIGVycl91bnVzZTtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcbmluZGV4IDc2ZDBmNmEyOWFiYWIyLi4yNGE4YTU0MThlMzExOSAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xuKysrIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXG5AQCAtNjU5LDcgKzY1OSw3IEBAIGludCBuZXRmc193cml0ZV9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCxcbiBcdCAqIHdpdGhpbiB0aGUgY2FjaGUgZ3JhbnVsZSBjb250YWluaW5nIHRoZSBFT0YsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZFxuIFx0ICogdG8gcHJlbG9hZCB0aGUgZ3JhbnVsZS5cbiBcdCAqL1xuLVx0aWYgKCFuZXRmc19pc19jYWNoZV9lbmFibGVkKGN0eCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoIW5ldGZzX2lzX2NhY2hlX21heWJlX2VuYWJsZWQoY3R4KSBcdTAwMjZcdTAwMjZcbiBcdCAgICBuZXRmc19za2lwX2ZvbGlvX3JlYWQoZm9saW8sIHBvcywgbGVuLCBmYWxzZSkpIHtcbiBcdFx0bmV0ZnNfc3RhdChcdTAwMjZuZXRmc19uX3JoX3dyaXRlX3pza2lwKTtcbiBcdFx0Z290byBoYXZlX2ZvbGlvX25vX3dhaXQ7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbmluZGV4IDZiZGUzMzIwYmNlYzY2Li4yY2RiNjhlNmIxNmZmZiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbisrKyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmNcbkBAIC0yNzcsNyArMjc3LDcgQEAgc3NpemVfdCBuZXRmc19wZXJmb3JtX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHQgKiBjYWNoaW5nIHNlcnZpY2UgdGVtcG9yYXJpbHkgYmVjYXVzZSB0aGUgYmFja2luZyBzdG9yZSBnb3RcbiBcdFx0ICogY3VsbGVkLlxuIFx0XHQgKi9cbi1cdFx0aWYgKG5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoY3R4KSkge1xuK1x0XHRpZiAobmV0ZnNfaXNfY2FjaGVfbWF5YmVfZW5hYmxlZChjdHgpKSB7XG4gXHRcdFx0aWYgKGZpbmZvKSB7XG4gXHRcdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfd3N0cmVhbV9jb25mbGljdCk7XG4gXHRcdFx0XHRnb3RvIGZsdXNoX2NvbnRlbnQ7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMgYi9mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuY1xuaW5kZXggMjVmOGNlYjE1ZmFkNjQuLmMxNmZiYWQyODZhMTc3IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmNcbisrKyBiL2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jXG5AQCAtMTY2LDEzICsxNjYsMTYgQEAgc3RhdGljIGludCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFx0XHQgKi9cbiBcdFx0c3VicmVxLVx1MDAzZWVycm9yID0gLUVBR0FJTjtcbiBcdFx0dHJhY2VfbmV0ZnNfc3JlcShzdWJyZXEsIG5ldGZzX3NyZXFfdHJhY2VfcmV0cnkpO1xuLVx0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKVxuK1x0XHRpZiAoc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkIFx1MDAzZSAwKSB7XG4gXHRcdFx0aW92X2l0ZXJfYWR2YW5jZShcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlci5pdGVyLCBzdWJyZXEtXHUwMDNldHJhbnNmZXJyZWQpO1xuK1x0XHRcdHdyZXEtXHUwMDNldHJhbnNmZXJyZWQgKz0gc3VicmVxLVx1MDAzZXRyYW5zZmVycmVkO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChzdHJlYW0tXHUwMDNlc291cmNlID09IE5FVEZTX1VQTE9BRF9UT19TRVJWRVIgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB3cmVxLVx1MDAzZW5ldGZzX29wcy1cdTAwM2VyZXRyeV9yZXF1ZXN0KVxuIFx0XHRcdHdyZXEtXHUwMDNlbmV0ZnNfb3BzLVx1MDAzZXJldHJ5X3JlcXVlc3Qod3JlcSwgc3RyZWFtKTtcbiBcbitcdFx0X19jbGVhcl9iaXQoTkVURlNfU1JFUV9NQURFX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRfX2NsZWFyX2JpdChORVRGU19TUkVRX05FRURfUkVUUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfQk9VTkRBUlksIFx1MDAyNnN1YnJlcS1cdTAwM2VmbGFncyk7XG4gXHRcdF9fY2xlYXJfYml0KE5FVEZTX1NSRVFfRkFJTEVELCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuQEAgLTE4NiwxNyArMTg5LDEwIEBAIHN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbiBcbiBcdFx0bmV0ZnNfZ2V0X3N1YnJlcXVlc3Qoc3VicmVxLCBuZXRmc19zcmVxX3RyYWNlX2dldF9yZXN1Ym1pdCk7XG4gXG4tXHRcdGlmIChzdHJlYW0tXHUwMDNlcHJlcGFyZV93cml0ZSkge1xuK1x0XHRpZiAoc3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUpXG4gXHRcdFx0c3RyZWFtLVx1MDAzZXByZXBhcmVfd3JpdGUoc3VicmVxKTtcbi1cdFx0XHRfX3NldF9iaXQoTkVURlNfU1JFUV9JTl9QUk9HUkVTUywgXHUwMDI2c3VicmVxLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgc291cmNlO1xuLVxuLVx0XHRcdG5ldGZzX3Jlc2V0X2l0ZXIoc3VicmVxKTtcbi1cdFx0XHRzb3VyY2UgPSBzdWJyZXEtXHUwMDNlaW9faXRlcjtcbi1cdFx0XHRuZXRmc19yZWlzc3VlX3dyaXRlKHN0cmVhbSwgc3VicmVxLCBcdTAwMjZzb3VyY2UpO1xuLVx0XHR9XG4rXHRcdF9fc2V0X2JpdChORVRGU19TUkVRX0lOX1BST0dSRVNTLCBcdTAwMjZzdWJyZXEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2hfcmV0cnlfd3JpdGVfc3VicmVxKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfZG9uZSh3cmVxKTtcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9pbnRlcm5hbC5oIGIvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuaW5kZXggNjQ1OTk2ZWNmYzgwMzYuLmQ4ODljYWE0MDFkYzI0IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvbmV0ZnMvaW50ZXJuYWwuaFxuQEAgLTIzOSw2ICsyMzksMTggQEAgc3RhdGljIGlubGluZSBib29sIG5ldGZzX2lzX2NhY2hlX2VuYWJsZWQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgpXG4gI2VuZGlmXG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBuZXRmc19pc19jYWNoZV9tYXliZV9lbmFibGVkKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4KVxuK3tcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfRlNDQUNIRSlcbitcdHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gY3R4LVx1MDAzZWNhY2hlO1xuK1xuK1x0cmV0dXJuIGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkgXHUwMDI2XHUwMDI2XG4rXHRcdHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX0lTX0NBQ0hJTkcsIFx1MDAyNmNvb2tpZS1cdTAwM2VmbGFncyk7XG4rI2Vsc2VcbitcdHJldHVybiBmYWxzZTtcbisjZW5kaWZcbit9XG4rXG4gLypcbiAgKiBHZXQgYSByZWYgb24gYSBuZXRmcyBncm91cCBhdHRhY2hlZCB0byBhIGRpcnR5IHBhZ2UgKGUuZy4gYSBjZXBoIHNuYXApLlxuICAqL1xuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2xvY2tpbmcuYyBiL2ZzL25ldGZzL2xvY2tpbmcuY1xuaW5kZXggMjI0OWVjZDA5ZDBhOGQuLjRlM2JlMmI4MTUwNDA4IDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvbG9ja2luZy5jXG4rKysgYi9mcy9uZXRmcy9sb2NraW5nLmNcbkBAIC05LDYgKzksMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmcy5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbiBcbitzdHJ1Y3QgbmV0ZnNfd2Jfd2FpdGVyIHtcbitcdHN0cnVjdCBsaXN0X2hlYWRcdGxpbms7XHRcdC8qIExpbmsgaW4gaWN0eC1cdTAwM2V3Yl9xdWV1ZSAqL1xuK1x0c3RydWN0IHRhc2tfc3RydWN0XHQqd2FpdGVyO1x0LyogV2FpdGVyIHRhc2s7IGNsZWFyZWQgd2hlbiBsb2NrIGdyYW50ZWQgKi9cbit9O1xuK1xuIC8qXG4gICogaW5vZGVfZGlvX3dhaXRfaW50ZXJydXB0aWJsZSAtIHdhaXQgZm9yIG91dHN0YW5kaW5nIERJTyByZXF1ZXN0cyB0byBmaW5pc2hcbiAgKiBAaW5vZGU6IGlub2RlIHRvIHdhaXQgZm9yXG5AQCAtMjAzLDMgKzIwOCw5MyBAQCB2b2lkIG5ldGZzX2VuZF9pb19kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdHVwX3JlYWQoXHUwMDI2aW5vZGUtXHUwMDNlaV9yd3NlbSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0ZnNfZW5kX2lvX2RpcmVjdCk7XG4rXG4rLypcbisgKiBXYWl0IHRvIGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byB3cml0ZWJhY2suXG4rICovXG4rc3RhdGljIGJvb2wgbmV0ZnNfd2JfYmVnaW5fd2FpdChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXG4re1xuK1x0c3RydWN0IG5ldGZzX3diX3dhaXRlciB3YWl0ZXIgPSB7fTtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDtcbitcdGJvb2wgZ290ID0gZmFsc2U7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aWN0eC1cdTAwM2Vsb2NrKTtcbitcbitcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soTkVURlNfSUNUWF9XQl9MT0NLLCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSkge1xuK1x0XHRnZXRfdGFza19zdHJ1Y3QodHNrKTtcbitcdFx0d2FpdGVyLndhaXRlciA9IHRzaztcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ3YWl0ZXIubGluaywgXHUwMDI2aWN0eC1cdTAwM2V3Yl9xdWV1ZSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRnb3QgPSB0cnVlO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2Vsb2NrKTtcbitcbitcdGlmICghZ290KSB7XG4rXHRcdGZvciAoOzspIHtcbitcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdFx0LyogUmVhZCB3YWl0ZXIgYmVmb3JlIGFjY2Vzc2luZyBpbm9kZSBzdGF0ZS4gKi9cbitcdFx0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZ3YWl0ZXIud2FpdGVyKSA9PSBOVUxMKVxuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0c2NoZWR1bGUoKTtcbitcdFx0fVxuK1x0fVxuK1x0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qKlxuKyAqIG5ldGZzX3diX2JlZ2luIC0gQmVnaW4gd3JpdGViYWNrLCB3YWl0aW5nIGlmIG5lZWQgYmVcbisgKiBAaWN0eDogVGhlIGlub2RlIHRvIGdldCB3cml0ZWJhY2sgYWNjZXNzIG9uXG4rICogQG5vd2FpdDogUmV0dXJuIGZhaWx1cmUgaW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gd2FpdGluZyBpZiB0cnVlXG4rICpcbisgKiBCZWdpbiB3cml0ZWJhY2sgdG8gYW4gaW5vZGUsIHdhaXRpbmcgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgaWYgQG5vd2FpdCBpc1xuKyAqIGZhbHNlLiAgVGhpcyBwcmV2ZW50cyBjb2xsZWN0aW9uIGZyb20gYmVpbmcgZG9uZSBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4rICogdG8gdGhlIGlzc3VhbmNlIG9mIHdyaXRlIHN1YnJlcXVlc3RzLlxuKyAqXG4rICogTm90ZSB0aGF0IHdyaXRlYmFjayBtYXkgYmUgZW5kZWQgaW4gYSBkaWZmZXJlbnQgcHJvY2VzcyAoZS5nLiB0aGUgY29sbGVjdGlvblxuKyAqIGZ1bmN0aW9uIG9uIGEgd29ya3F1ZXVlKSB0aGFuIHN0YXJ0ZWQgaXQuXG4rICpcbisgKiBSZXR1cm46IFRydWUgaWYgY2FuIHByb2NlZWQsIGZhbHNlIGlmIGRlbmllZC5cbisgKi9cbitib29sIG5ldGZzX3diX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCwgYm9vbCBub3dhaXQpXG4re1xuK1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soTkVURlNfSUNUWF9XQl9MT0NLLCBcdTAwMjZpY3R4LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAobm93YWl0KSB7XG4rXHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3NraXApO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja193YWl0KTtcbitcdHJldHVybiBuZXRmc193Yl9iZWdpbl93YWl0KGljdHgpO1xuK31cbitFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTtcbitcbisvKiBuZXRmc193Yl9lbmQgLSBFbmQgd3JpdGViYWNrXG4rICogQGljdHg6IFRoZSBpbm9kZSB3ZSBoYXZlIHdyaXRlYmFjayBhY2Nlc3MgdG9cbisgKlxuKyAqIEVuZCB3cml0ZWJhY2sgYWNjZXNzIG9uIGFuIGlub2RlLCB3YWtpbmcgdXAgdGhlIG5leHQgd3JpdGViYWNrIHJlcXVlc3QuXG4rICovXG4rdm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KVxuK3tcbitcdHN0cnVjdCBuZXRmc193Yl93YWl0ZXIgKndhaXRlcjtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrO1xuK1xuK1x0V0FSTl9PTl9PTkNFKCF0ZXN0X2JpdChORVRGU19JQ1RYX1dCX0xPQ0ssIFx1MDAyNmljdHgtXHUwMDNlZmxhZ3MpKTtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpY3R4LVx1MDAzZWxvY2spO1xuK1xuK1x0d2FpdGVyID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmljdHgtXHUwMDNld2JfcXVldWUsIHN0cnVjdCBuZXRmc193Yl93YWl0ZXIsIGxpbmspO1xuK1x0aWYgKHdhaXRlcikge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZ3YWl0ZXItXHUwMDNlbGluayk7XG4rXHRcdHRzayA9IHdhaXRlci1cdTAwM2V3YWl0ZXI7XG4rXHRcdC8qIFdyaXRlIGlub2RlIHN0YXRlIGJlZm9yZSBjbGVhcmluZyB3YWl0ZXIuICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNndhaXRlci1cdTAwM2V3YWl0ZXIsIE5VTEwpO1xuK1x0XHR3YWtlX3VwX3Byb2Nlc3ModHNrKTtcbitcdFx0cHV0X3Rhc2tfc3RydWN0KHRzayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKE5FVEZTX0lDVFhfV0JfTE9DSywgXHUwMDI2aWN0eC1cdTAwM2VmbGFncyk7XG4rXHR9XG4rXG4rXHRzcGluX3VubG9jayhcdTAwMjZpY3R4LVx1MDAzZWxvY2spO1xuK31cbitFWFBPUlRfU1lNQk9MKG5ldGZzX3diX2VuZCk7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jIGIvZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jXG5pbmRleCAyNGZjMmJiMmY4YTQ3Yi4uMjEwZWI4ZjM5NThkNzcgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmNcbisrKyBiL2ZzL25ldGZzL3dyaXRlX2NvbGxlY3QuY1xuQEAgLTQwOCw2ICs0MDgsMTYgQEAgYm9vbCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxuIFx0bmV0ZnNfd2FrZV9ycmVxX2ZsYWcod3JlcSwgTkVURlNfUlJFUV9JTl9QUk9HUkVTUywgbmV0ZnNfcnJlcV90cmFjZV93YWtlX2lwKTtcbiBcdC8qIEFzIHdlIGNsZWFyZWQgTkVURlNfUlJFUV9JTl9QUk9HUkVTUywgd2UgYWNxdWlyZWQgaXRzIHJlZi4gKi9cbiBcbitcdHN3aXRjaCAod3JlcS1cdTAwM2VvcmlnaW4pIHtcbitcdGNhc2UgTkVURlNfV1JJVEVCQUNLOlxuK1x0Y2FzZSBORVRGU19XUklURUJBQ0tfU0lOR0xFOlxuK1x0Y2FzZSBORVRGU19XUklURVRIUk9VR0g6XG4rXHRcdG5ldGZzX3diX2VuZChpY3R4KTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbiBcdGlmICh3cmVxLVx1MDAzZWlvY2IpIHtcbiBcdFx0c2l6ZV90IHdyaXR0ZW4gPSBtaW4od3JlcS1cdTAwM2V0cmFuc2ZlcnJlZCwgd3JlcS1cdTAwM2VsZW4pO1xuIFx0XHR3cmVxLVx1MDAzZWlvY2ItXHUwMDNla2lfcG9zICs9IHdyaXR0ZW47XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbmluZGV4IGMwM2M3Y2M0NWU0NzE2Li5mMjc2MWM5OTc5NWE2YiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbisrKyBiL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmNcbkBAIC0xMDYsNyArMTA2LDcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRfZW50ZXIoXCJSPSV4XCIsIHdyZXEtXHUwMDNlZGVidWdfaWQpO1xuIFxuIFx0aWN0eCA9IG5ldGZzX2lub2RlKHdyZXEtXHUwMDNlaW5vZGUpO1xuLVx0aWYgKGlzX2NhY2hlYWJsZSBcdTAwMjZcdTAwMjYgbmV0ZnNfaXNfY2FjaGVfZW5hYmxlZChpY3R4KSlcbitcdGlmIChpc19jYWNoZWFibGUpXG4gXHRcdGZzY2FjaGVfYmVnaW5fd3JpdGVfb3BlcmF0aW9uKFx1MDAyNndyZXEtXHUwMDNlY2FjaGVfcmVzb3VyY2VzLCBuZXRmc19pX2Nvb2tpZShpY3R4KSk7XG4gXHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZ3cmVxLVx1MDAzZWJ1ZmZlciwgd3JlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9TT1VSQ0UpIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5vbWVtO1xuQEAgLTU1MSwxNCArNTUxLDggQEAgaW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IGVycm9yID0gMDtcbiBcbi1cdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spKSB7XG4tXHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkge1xuLVx0XHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3NraXApO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHRcdG5ldGZzX3N0YXQoXHUwMDI2bmV0ZnNfbl93Yl9sb2NrX3dhaXQpO1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4tXHR9XG4rXHRpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSlcbitcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBOZWVkIHRoZSBmaXJzdCBmb2xpbyB0byBiZSBhYmxlIHRvIHNldCB1cCB0aGUgb3AuICovXG4gXHRmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgTlVMTCwgXHUwMDI2ZXJyb3IpO1xuQEAgLTU4OCwxMyArNTgyLDEzIEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHR9XG4gXG4gXHRcdGVycm9yID0gbmV0ZnNfd3JpdGVfZm9saW8od3JlcSwgd2JjLCBmb2xpbyk7XG4tXHRcdGlmIChlcnJvciBcdTAwM2MgMClcbi1cdFx0XHRicmVhaztcbitcdFx0aWYgKGVycm9yID09IC1FTk9NRU0pIHtcbitcdFx0XHRmb2xpb19yZWRpcnR5X2Zvcl93cml0ZXBhZ2Uod2JjLCBmb2xpbyk7XG4rXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0fVxuIFx0fSB3aGlsZSAoKGZvbGlvID0gd3JpdGViYWNrX2l0ZXIobWFwcGluZywgd2JjLCBmb2xpbywgXHUwMDI2ZXJyb3IpKSk7XG4gXG4gXHRuZXRmc19lbmRfaXNzdWVfd3JpdGUod3JlcSk7XG4tXG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbiBcdG5ldGZzX3dha2VfY29sbGVjdG9yKHdyZXEpO1xuIFxuIFx0bmV0ZnNfcHV0X3JlcXVlc3Qod3JlcSwgbmV0ZnNfcnJlcV90cmFjZV9wdXRfcmV0dXJuKTtcbkBAIC02MDIsOSArNTk2LDE2IEBAIGludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0cmV0dXJuIGVycm9yO1xuIFxuIGNvdWxkbnRfc3RhcnQ6XG4tXHRuZXRmc19raWxsX2RpcnR5X3BhZ2VzKG1hcHBpbmcsIHdiYywgZm9saW8pO1xuK1x0aWYgKGVycm9yID09IC1FTk9NRU0pIHtcbitcdFx0Zm9saW9fcmVkaXJ0eV9mb3Jfd3JpdGVwYWdlKHdiYywgZm9saW8pO1xuK1x0XHRmb2xpb191bmxvY2soZm9saW8pO1xuK1x0XHRmb2xpbyA9IHdyaXRlYmFja19pdGVyKG1hcHBpbmcsIHdiYywgZm9saW8sIFx1MDAyNmVycm9yKTtcbitcdFx0V0FSTl9PTl9PTkNFKGZvbGlvICE9IE5VTEwpO1xuK1x0fSBlbHNlIHtcbitcdFx0bmV0ZnNfa2lsbF9kaXJ0eV9wYWdlcyhtYXBwaW5nLCB3YmMsIGZvbGlvKTtcbitcdH1cbiBvdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbitcdG5ldGZzX3diX2VuZChpY3R4KTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIGVycm9yKTtcbiBcdHJldHVybiBlcnJvcjtcbiB9XG5AQCAtNjE4LDE2ICs2MTksMTcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW5cbiBcdHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxID0gTlVMTDtcbiBcdHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCA9IG5ldGZzX2lub2RlKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSk7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4rXHRuZXRmc193Yl9iZWdpbihpY3R4LCBmYWxzZSk7XG4gXG4gXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLCBpb2NiLVx1MDAzZWtpX2ZpbHAsXG4gXHRcdFx0XHQgICAgICBpb2NiLVx1MDAzZWtpX3BvcywgTkVURlNfV1JJVEVUSFJPVUdIKTtcbiBcdGlmIChJU19FUlIod3JlcSkpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jayk7XG4rXHRcdG5ldGZzX3diX2VuZChpY3R4KTtcbiBcdFx0cmV0dXJuIHdyZXE7XG4gXHR9XG4gXG4gXHR3cmVxLVx1MDAzZWlvX3N0cmVhbXNbMF0uYXZhaWwgPSB0cnVlO1xuK1x0X19zZXRfYml0KE5FVEZTX1JSRVFfT0ZGTE9BRF9DT0xMRUNUSU9OLCBcdTAwMjZ3cmVxLVx1MDAzZWZsYWdzKTtcbiBcdHRyYWNlX25ldGZzX3dyaXRlKHdyZXEsIG5ldGZzX3dyaXRlX3RyYWNlX3dyaXRldGhyb3VnaCk7XG4gXHRyZXR1cm4gd3JlcTtcbiB9XG5AQCAtNjg1LDcgKzY4Nyw2IEBAIGludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jXG4gc3NpemVfdCBuZXRmc19lbmRfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGZvbGlvICp3cml0ZXRocm91Z2hfY2FjaGUpXG4ge1xuLVx0c3RydWN0IG5ldGZzX2lub2RlICppY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cdTAwM2Vpbm9kZSk7XG4gXHRzc2l6ZV90IHJldDtcbiBcbiBcdF9lbnRlcihcIlI9JXhcIiwgd3JlcS1cdTAwM2VkZWJ1Z19pZCk7XG5AQCAtNjk5LDggKzcwMCw2IEBAIHNzaXplX3QgbmV0ZnNfZW5kX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jXG4gXG4gXHRuZXRmc19lbmRfaXNzdWVfd3JpdGUod3JlcSk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2aWN0eC1cdTAwM2V3Yl9sb2NrKTtcbi1cbiBcdGlmICh3cmVxLVx1MDAzZWlvY2IpXG4gXHRcdHJldCA9IC1FSU9DQlFVRVVFRDtcbiBcdGVsc2VcbkBAIC04NDcsMTUgKzg0NiwxMCBAQCBpbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdGlmIChXQVJOX09OX09OQ0UoIWlvdl9pdGVyX2lzX2ZvbGlvcShpdGVyKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuLVx0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmljdHgtXHUwMDNld2JfbG9jaykpIHtcbi1cdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7XG4tXHRcdFx0LyogVGhlIFZGUyB3aWxsIGhhdmUgdW5kaXJ0aWVkIHRoZSBpbm9kZS4gKi9cbi1cdFx0XHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZpY3R4LVx1MDAzZWlub2RlKTtcbi1cdFx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja19za2lwKTtcbi1cdFx0XHRyZXR1cm4gMTtcbi1cdFx0fVxuLVx0XHRuZXRmc19zdGF0KFx1MDAyNm5ldGZzX25fd2JfbG9ja193YWl0KTtcbi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spO1xuK1x0aWYgKCFuZXRmc193Yl9iZWdpbihpY3R4LCB3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpIHtcbitcdFx0LyogVGhlIFZGUyB3aWxsIGhhdmUgdW5kaXJ0aWVkIHRoZSBpbm9kZS4gKi9cbitcdFx0bmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoXHUwMDI2aWN0eC1cdTAwM2Vpbm9kZSk7XG4rXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuIFx0d3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEobWFwcGluZywgTlVMTCwgMCwgTkVURlNfV1JJVEVCQUNLX1NJTkdMRSk7XG5AQCAtODkzLDcgKzg4Nyw2IEBAIGludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0c21wX3dtYigpOyAvKiBXcml0ZSBsaXN0cyBiZWZvcmUgQUxMX1FVRVVFRC4gKi9cbiBcdHNldF9iaXQoTkVURlNfUlJFUV9BTExfUVVFVUVELCBcdTAwMjZ3cmVxLVx1MDAzZWZsYWdzKTtcbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spO1xuIFx0bmV0ZnNfd2FrZV9jb2xsZWN0b3Iod3JlcSk7XG4gXG4gXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9yZXR1cm4pO1xuQEAgLTkwMSw3ICs4OTQsNyBAQCBpbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdHJldHVybiByZXQ7XG4gXG4gY291bGRudF9zdGFydDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZpY3R4LVx1MDAzZXdiX2xvY2spO1xuK1x0bmV0ZnNfd2JfZW5kKGljdHgpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZnMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZnMuaFxuaW5kZXggMjQzYzBmNzM3OTM4ODMuLjFiYzEyMGQ2MWM1YmViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGZzLmhcbkBAIC02MSwxNCArNjEsMTYgQEAgc3RydWN0IG5ldGZzX2lub2RlIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRlNDQUNIRSlcbiBcdHN0cnVjdCBmc2NhY2hlX2Nvb2tpZVx0KmNhY2hlO1xuICNlbmRpZlxuLVx0c3RydWN0IG11dGV4XHRcdHdiX2xvY2s7XHQvKiBXcml0ZWJhY2sgc2VyaWFsaXNhdGlvbiAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0d2JfcXVldWU7XHQvKiBRdWV1ZSBvZiBwcm9jZXNzZXMgd2FudGluZyB0byBkbyB3cml0ZWJhY2sgKi9cbiBcdGxvZmZfdFx0XHRcdF9yZW1vdGVfaV9zaXplO1x0LyogU2l6ZSBvZiB0aGUgcmVtb3RlIGZpbGUgKi9cbiBcdGxvZmZfdFx0XHRcdF96ZXJvX3BvaW50O1x0LyogU2l6ZSBhZnRlciB3aGljaCB3ZSBhc3N1bWUgdGhlcmUncyBubyBkYXRhXG4gXHRcdFx0XHRcdFx0ICogb24gdGhlIHNlcnZlciAqL1xuK1x0c3BpbmxvY2tfdFx0XHRsb2NrO1x0XHQvKiBMb2NrIGNvdmVyaW5nIHdiX3F1ZXVlICovXG4gXHRhdG9taWNfdFx0XHRpb19jb3VudDtcdC8qIE51bWJlciBvZiBvdXRzdGFuZGluZyByZXFzICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuICNkZWZpbmUgTkVURlNfSUNUWF9PRElSRUNUXHQwXHRcdC8qIFRoZSBmaWxlIGhhcyBESU8gaW4gcHJvZ3Jlc3MgKi9cbiAjZGVmaW5lIE5FVEZTX0lDVFhfVU5CVUZGRVJFRFx0MVx0XHQvKiBJL08gc2hvdWxkIG5vdCB1c2UgdGhlIHBhZ2VjYWNoZSAqL1xuKyNkZWZpbmUgTkVURlNfSUNUWF9XQl9MT0NLXHQyXHRcdC8qIFdyaXRlYmFjayBzZXJpYWxpc2F0aW9uIGxvY2sgKi9cbiAjZGVmaW5lIE5FVEZTX0lDVFhfTU9ESUZJRURfQVRUUiAzXHRcdC8qIEluZGljYXRlIGNoYW5nZSBpbiBtdGltZS9jdGltZSAqL1xuICNkZWZpbmUgTkVURlNfSUNUWF9TSU5HTEVfTk9fVVBMT0FEIDRcdFx0LyogTW9ub2xpdGhpYyBwYXlsb2FkLCBjYWNoZSBidXQgbm8gdXBsb2FkICovXG4gfTtcbkBAIC00NjIsNiArNDY0LDEwIEBAIGludCBuZXRmc19hbGxvY19mb2xpb3FfYnVmZmVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIFx0XHRcdCAgICAgIHNpemVfdCAqX2N1cl9zaXplLCBzc2l6ZV90IHNpemUsIGdmcF90IGdmcCk7XG4gdm9pZCBuZXRmc19mcmVlX2ZvbGlvcV9idWZmZXIoc3RydWN0IGZvbGlvX3F1ZXVlICpmcSk7XG4gXG4rLyogV3JpdGViYWNrIGV4Y2x1c2lvbiBBUEkuICovXG4rYm9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KTtcbit2b2lkIG5ldGZzX3diX2VuZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpO1xuK1xuIC8qKlxuICAqIG5ldGZzX2lub2RlIC0gR2V0IHRoZSBuZXRmcyBpbm9kZSBjb250ZXh0IGZyb20gdGhlIGlub2RlXG4gICogQGlub2RlOiBUaGUgaW5vZGUgdG8gcXVlcnlcbkBAIC03NDMsNyArNzQ5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2lub2RlX2luaXQoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZTQ0FDSEUpXG4gXHRjdHgtXHUwMDNlY2FjaGUgPSBOVUxMO1xuICNlbmRpZlxuLVx0bXV0ZXhfaW5pdChcdTAwMjZjdHgtXHUwMDNld2JfbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjdHgtXHUwMDNld2JfcXVldWUpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuIFx0LyogLVx1MDAzZXJlbGVhc2VwYWdlKCkgZHJpdmVzIHplcm9fcG9pbnQgKi9cbiBcdGlmICh1c2VfemVyb19wb2ludCkge1xuIFx0XHRjdHgtXHUwMDNlX3plcm9fcG9pbnQgPSBjdHgtXHUwMDNlX3JlbW90ZV9pX3NpemU7XG5AQCAtNzUzLDcgKzc2MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19pbm9kZV9pbml0KHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxuIFxuIC8qKlxuICAqIG5ldGZzX3Jlc2l6ZV9maWxlIC0gTm90ZSB0aGF0IGEgZmlsZSBnb3QgcmVzaXplZFxuLSAqIEBjdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkXG4rICogQGljdHg6IFRoZSBuZXRmcyBpbm9kZSBiZWluZyByZXNpemVkXG4gICogQG5ld19pX3NpemU6IFRoZSBuZXcgZmlsZSBzaXplXG4gICogQGNoYW5nZWRfb25fc2VydmVyOiBUaGUgY2hhbmdlIHdhcyBhcHBsaWVkIHRvIHRoZSBzZXJ2ZXJcbiAgKlxuZGlmZiAtLWdpdCBhL2xpYi9pb3ZfaXRlci5jIGIvbGliL2lvdl9pdGVyLmNcbmluZGV4IDI0MzY2MmFmMWFmNzNmLi41YTY0MzQ3MDk3MTZlMSAxMDA2NDRcbi0tLSBhL2xpYi9pb3ZfaXRlci5jXG4rKysgYi9saWIvaW92X2l0ZXIuY1xuQEAgLTE1NjgsNiArMTU2OCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfeGFycmF5X3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHR1bnNpZ25lZCBpbnQgbnIgPSAwLCBvZmZzZXQ7XG4gXHRsb2ZmX3QgcG9zID0gaS1cdTAwM2V4YXJyYXlfc3RhcnQgKyBpLVx1MDAzZWlvdl9vZmZzZXQ7XG4rXHRib29sIHdpbGxfYWxsb2MgPSAhKnBhZ2VzO1xuIFx0WEFfU1RBVEUoeGFzLCBpLVx1MDAzZXhhcnJheSwgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcbiBcdG9mZnNldCA9IHBvcyBcdTAwMjYgflBBR0VfTUFTSztcbkBAIC0xNTk1LDYgKzE1OTYsMTQgQEAgc3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF94YXJyYXlfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4rXHRpZiAoIW5yKSB7XG4rXHRcdGlmICh3aWxsX2FsbG9jKSB7XG4rXHRcdFx0a3ZmcmVlKCpwYWdlcyk7XG4rXHRcdFx0KnBhZ2VzID0gTlVMTDtcbitcdFx0fVxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbiBcdG1heHNpemUgPSBtaW5fdChzaXplX3QsIG5yICogUEFHRV9TSVpFIC0gb2Zmc2V0LCBtYXhzaXplKTtcbiBcdGlvdl9pdGVyX2FkdmFuY2UoaSwgbWF4c2l6ZSk7XG4gXHRyZXR1cm4gbWF4c2l6ZTtcbkBAIC0xNjI4LDYgKzE2MzcsOCBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0YmkuYmlfYnZlY19kb25lID0gc2tpcDtcbiBcbiBcdG1heHBhZ2VzID0gd2FudF9wYWdlc19hcnJheShwYWdlcywgbWF4c2l6ZSwgc2tpcCwgbWF4cGFnZXMpO1xuK1x0aWYgKCFtYXhwYWdlcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHR3aGlsZSAoYmkuYmlfc2l6ZSBcdTAwMjZcdTAwMjYgYmkuYmlfaWR4IFx1MDAzYyBpLVx1MDAzZW5yX3NlZ3MpIHtcbiBcdFx0c3RydWN0IGJpb192ZWMgYnYgPSBidmVjX2l0ZXJfYnZlYyhpLVx1MDAzZWJ2ZWMsIGJpKTtcbkBAIC0xNzQ1LDYgKzE3NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFx0dW5zaWduZWQgaW50IGd1cF9mbGFncyA9IDA7XG4gXHRzaXplX3Qgb2Zmc2V0O1xuK1x0Ym9vbCB3aWxsX2FsbG9jID0gISpwYWdlcztcbiBcdGludCByZXM7XG4gXG4gXHRpZiAoaS1cdTAwM2VkYXRhX3NvdXJjZSA9PSBJVEVSX0RFU1QpXG5AQCAtMTc2MSw4ICsxNzczLDE0IEBAIHN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXG4gXHRpZiAoIW1heHBhZ2VzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdHJlcyA9IHBpbl91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgbWF4cGFnZXMsIGd1cF9mbGFncywgKnBhZ2VzKTtcbi1cdGlmICh1bmxpa2VseShyZXMgXHUwMDNjPSAwKSlcbitcdGlmICh1bmxpa2VseShyZXMgXHUwMDNjPSAwKSkge1xuK1x0XHRpZiAod2lsbF9hbGxvYykge1xuK1x0XHRcdGt2ZnJlZSgqcGFnZXMpO1xuK1x0XHRcdCpwYWdlcyA9IE5VTEw7XG4rXHRcdH1cbiBcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbiBcdG1heHNpemUgPSBtaW5fdChzaXplX3QsIG1heHNpemUsIHJlcyAqIFBBR0VfU0laRSAtIG9mZnNldCk7XG4gXHRpb3ZfaXRlcl9hZHZhbmNlKGksIG1heHNpemUpO1xuIFx0cmV0dXJuIG1heHNpemU7XG5kaWZmIC0tZ2l0IGEvbGliL3NjYXR0ZXJsaXN0LmMgYi9saWIvc2NhdHRlcmxpc3QuY1xuaW5kZXggYjdmZTkxZWYzNWI4YzYuLjZlYTQwZDJlNjI0NzU1IDEwMDY0NFxuLS0tIGEvbGliL3NjYXR0ZXJsaXN0LmNcbisrKyBiL2xpYi9zY2F0dGVybGlzdC5jXG5AQCAtMTM2Niw2ICsxMzY2LDcgQEAgc3RhdGljIHNzaXplX3QgZXh0cmFjdF94YXJyYXlfdG9fc2coc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRzZ19tYXgtLTtcbiBcbiBcdFx0bWF4c2l6ZSAtPSBsZW47XG4rXHRcdHN0YXJ0ICs9IGxlbjtcbiBcdFx0cmV0ICs9IGxlbjtcbiBcdFx0aWYgKG1heHNpemUgXHUwMDNjPSAwIHx8IHNnX21heCA9PSAwKVxuIFx0XHRcdGJyZWFrO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jIGIvbGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmNcbmluZGV4IGYwMmY3YjdhYTc5NjA1Li5lN2UxNTRmOTRmNjY1ZiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jXG4rKysgYi9saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuY1xuQEAgLTI3NSw3ICsyNzUsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2NvcHlfdG9fYnZlYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRzdHJ1Y3QgcGFnZSAqKnNwYWdlcywgKipicGFnZXM7XG4gXHR1OCAqc2NyYXRjaCwgKmJ1ZmZlcjtcbiBcdHNpemVfdCBidWZzaXplLCBucGFnZXMsIHNpemUsIGNvcGllZDtcbi1cdGludCBpLCBiLCBwYXR0O1xuK1x0aW50IGksIHBhdHQ7XG4gXG4gXHRidWZzaXplID0gMHgxMDAwMDA7XG4gXHRucGFnZXMgPSBidWZzaXplIC8gUEFHRV9TSVpFO1xuQEAgLTI5OCwxMCArMjk4LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9jb3B5X3RvX2J2ZWMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGl0ZXIubnJfc2VncywgMCk7XG4gXG4gXHQvKiBCdWlsZCB0aGUgZXhwZWN0ZWQgaW1hZ2UgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyLiAqL1xuLVx0YiA9IDA7XG4gXHRwYXR0ID0gMDtcbiBcdG1lbXNldChzY3JhdGNoLCAwLCBidWZzaXplKTtcbi1cdGZvciAocHIgPSBidmVjX3Rlc3RfcmFuZ2VzOyBwci1cdTAwM2Vmcm9tIFx1MDAzZT0gMDsgcHIrKywgYisrKSB7XG4rXHRmb3IgKHByID0gYnZlY190ZXN0X3JhbmdlczsgcHItXHUwMDNlZnJvbSBcdTAwM2U9IDA7IHByKyspIHtcbiBcdFx0dTggKnAgPSBzY3JhdGNoICsgcHItXHUwMDNlcGFnZSAqIFBBR0VfU0laRTtcbiBcbiBcdFx0Zm9yIChpID0gcHItXHUwMDNlZnJvbTsgaSBcdTAwM2MgcHItXHUwMDNldG87IGkrKylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjIzOjAwLjQwMzgwOTQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzMTk4NzgxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggU2VyaWVzOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGluIGZyb250IG9mIG1lLCBhbmQgaXQgdG91Y2hlcyBhIHNpZ25pZmljYW50IHN3YXRoIG9mIHRoZSBrZXJuZWw6IGBmcy9hZnMvc3ltbGluay5jYCwgYGZzL2NhY2hlZmlsZXMvbmFtZWkuY2AsIGEgYnVuY2ggb2YgYGZzL25ldGZzLypgIGZpbGVzIChidWZmZXJlZCByZWFkL3dyaXRlLCBkaXJlY3Qgd3JpdGUsIGludGVybmFsIGhlYWRlcnMsIGxvY2tpbmcsIHdyaXRlIGNvbGxlY3Rpb24sIGlzc3VlKSwgYGluY2x1ZGUvbGludXgvbmV0ZnMuaGAsIGFuZCBzb21lIHN0dWZmIGluIGBsaWIvYCByZWxhdGVkIHRvIGBpb3ZfaXRlcmAgYW5kIGBzY2F0dGVybGlzdGAsIHBsdXMgYSBLVW5pdCB0ZXN0LiBUaGlzIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVxdWlyZSBzb21lIGZvY3VzZWQgYXR0ZW50aW9uLlxuXG5GaXJzdCwgbGV0J3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSByZXBsYWNpbmcgc29tZSBtdXRleC1iYXNlZCBsb2NraW5nIGluIGBhZnMvc3ltbGluay5jYCB3aXRoIGEgY3VzdG9tIHdyaXRlYmFjayBsb2NraW5nIG1lY2hhbmlzbSB1c2luZyBgbmV0ZnNfd2JfYmVnaW5gIGFuZCBgbmV0ZnNfd2JfZW5kYC4gVGhhdOKAmXMgaW50ZXJlc3Rpbmc7IHNlZW1zIGxpa2UgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgcGVyaGFwcyBhIGNoYW5nZSB0byBoYW5kbGUgY29udGVudGlvbiBiZXR0ZXIuIGBjYWNoZWZpbGVzL25hbWVpLmNgIGxvb2tzIGxpa2UgaXQgaXMgc2ltcGxpZnlpbmcgc29tZSBpbm9kZSB1c2FnZSB0cmFja2luZy4gVGhlbiBpbiBgZnMvbmV0ZnNgIHRoZXJlIGlzIGNoYW5nZXMgdG8gY2FjaGUgZnVuY3Rpb25hbGl0eS4gYGZzL25ldGZzL2RpcmVjdF93cml0ZS5jYCBzZWVtcyB0byBiZSBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBpdGVyYXRvciBhZHZhbmNlbWVudCBkdXJpbmcgZGlyZWN0IHdyaXRlcywgYW5kIHdlJ3JlIHNlZWluZyBzb21lIGNsZWFudXAgb2YgZmFsbGJhY2tzLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGxvY2sgaXMgY2hhbmdlZCBmcm9tIGEgbXV0ZXggdG8gYSB3YWl0IHF1ZXVlIHdpdGggYSBzcGlubG9jayB3aXRoaW4uIFRoZSBgd3JpdGVfY29sbGVjdGAgYW5kIGB3cml0ZV9pc3N1ZWAgbW9kdWxlcyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgd3JpdGViYWNrIGxvY2tpbmcuIFRoZXJlIGFyZSBhbHNvIGFkanVzdG1lbnRzIGZvciBoYW5kbGluZyBgLUVOT01FTWAgZnJvbSBgbmV0ZnNfd3JpdGVfZm9saW9gLlxuXG5Nb3Zpbmcgb24gdG8gYGxpYi9gLCB0aGUgYGlvdl9pdGVyYCBjb2RlIGlzIGdldHRpbmcgYSBjcml0aWNhbCBsb29rLiBJIHNlZSBmaXhlcyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHdoZW4gZXh0cmFjdGluZyBwYWdlcywgZW5zdXJpbmcgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBjbGVhbnVwLCBlc3BlY2lhbGx5IHdoZW4gYEVOT01FTWAgaXMgZW5jb3VudGVyZWQuIFRoZSBgc2NhdHRlcmxpc3RgIGNvZGUgaGFzIGEgc21hbGwgZml4IHJlbGF0ZWQgdG8gdGhlIGBleHRyYWN0X3hhcnJheV90b19zZ2AgZnVuY3Rpb24uIEFuZCBmaW5hbGx5IHRoZSB0ZXN0IHN1aXRlIGhhcyBoYWQgc29tZSBpcnJlbGV2YW50IHZhcmlhYmxlcyBkZWxldGVkLiBUaGVzZSBhcmUgYWxsIHN1YnRsZSwgYnV0IGltcG9ydGFudCwgY2hhbmdlcyB0aGF0IGNvdWxkIGltcGFjdCBhIGxvdCBvZiB1c2Vyc3BhY2UgYmVoYXZpb3IuXG5cbkZ1bmN0aW9uYWxseSwgdGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSBpbXBhY3RmdWwuIFRoZSBuZXRmcyBjb2RlIGlzIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIGBpb3ZfaXRlcmAgYW5kIGBzY2F0dGVybGlzdGAgY2hhbmdlcyBoYXZlIGJyb2FkIGltcGxpY2F0aW9ucywgbm90IHRvIG1lbnRpb24gdGhlIEFGUyBjaGFuZ2VzLiBUaGlzIGxvb2tzIGxpa2UgYSBmYWlybHkgY29tcHJlaGVuc2l2ZSBzZXQgb2YgbW9kaWZpY2F0aW9ucy5cblxuQmFzZWQgb24gdGhpcywgdGhpcyBzZXJpZXMgaW1tZWRpYXRlbHkgc2NyZWFtcyBcImZ1enogbWUhXCIgSSdtIGdvaW5nIHRvIHdhbnQgdG8gc3ViamVjdCB0aGlzIHRvIHNvbWUgaGVhdnkgZnV6emluZyBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgYnVncy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX05FVEZTX1NVUFBPUlRgIGlzIHRoZSBiaWcgb25lLCBvYnZpb3VzbHkuIFdlJ2xsIG5lZWQgdGhhdCBlbmFibGVkLiBgQ09ORklHX0ZTQ0FDSEVgIGlzIGFsc28gcmVsZXZhbnQsIHNpbmNlIHdlJ3JlIHRvdWNoaW5nIGBjYWNoZWZpbGVzYC4gQW5kIHNpbmNlIGBhZnMvc3ltbGluay5jYCBpcyBiZWluZyBtb2RpZmllZCwgYENPTkZJR19BRlNfRlNgIGlzIGltcG9ydGFudCwgdG9vLiBBbmQgb2YgY291cnNlLCBgQ09ORklHX0NBQ0hFRklMRVNgIGFzIGl0IGltcGFjdHMgdGhvc2UgZnVuY3Rpb25hbGl0aWVzIGRpcmVjdGx5LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBUaGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgc2VlbSB0byBiZTogYG5ldGZzX3diX2JlZ2luYCwgYG5ldGZzX3diX2VuZGAsIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAsIGBpb3ZfaXRlcl9leHRyYWN0X3hhcnJheV9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjX3BhZ2VzYCwgYW5kIGBleHRyYWN0X3hhcnJheV90b19zZ2AuIEknbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgYWxsIGNvdmVyZWQgd2VsbC5cblxuSnVzdCBkb3VibGUtY2hlY2tpbmcuLi55dXAsIGBDT05GSUdfTkVURlNfU1VQUE9SVGAgaXMgdGhlIGxpbmNocGluLiBXZSdyZSBnb2luZyB0byB0cmVhdCB0aGlzIHdpdGggY2FyZSBhbmQgcHJvY2VlZCBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMzoxMy43MjM2OTAzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTkxNjA3NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRGU19TVVBQT1JUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25ldGZzL0tjb25maWctMi1cXG5mcy9uZXRmcy9LY29uZmlnOjM6Y29uZmlnIE5FVEZTX1NVUFBPUlRcXG5mcy9uZXRmcy9LY29uZmlnLTQtXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6MTYuNzE1MzA1ODQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5OTA2ODAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbjogYENPTkZJR19GU0NBQ0hFYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUga2V5LCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfRlNDQUNIRWAuIEkgbmVlZCB0byBpbW1lZGlhdGVseSBjb25maXJtIHRoZSBzdGF0dXMgb2YgdGhpcyBwYXJ0aWN1bGFyIG9wdGlvbi4gSXMgaXQgZW5hYmxlZD8gSXMgaXQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGRpc2FibGVkPyBUaGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudCBkZXBlbmRpbmcgb24gdGhlIHNldHRpbmcuIElmIGl0J3MgZW5hYmxlZCwgSSBjYW4gdGhlbiBwcm9jZWVkIHdpdGggbXkgcGxhbm5lZCB0cm91Ymxlc2hvb3Rpbmcgb3IgaW52ZXN0aWdhdGlvbi4gSWYgbm90IGVuYWJsZWQsIGl0J3MgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBhcHByb2FjaC4gSSdsbCBwcm9iYWJseSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBkZXBlbmRlbmN5IHRvIG90aGVyIGZlYXR1cmVzIGFzIHdlbGwuIEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IHN0YW5kcyB0byBrbm93IHdoZXJlIHRvIG1vdmUgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMDYsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMzoyNS4zMTQzNzY3NTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5OTg1MTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNDQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9LY29uZmlnPTI1PWNvbmZpZyBORVRGU19ERUJVR1xcbi0tXFxuZnMvbmV0ZnMvS2NvbmZpZy0zMi1cXG5mcy9uZXRmcy9LY29uZmlnOjMzOmNvbmZpZyBGU0NBQ0hFXFxuZnMvbmV0ZnMvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJHZW5lcmFsIGZpbGVzeXN0ZW0gbG9jYWwgY2FjaGluZyBtYW5hZ2VyXFxcIlxcbi0tXFxuZnMvbmV0ZnMvS2NvbmZpZy00My1cXG5mcy9uZXRmcy9LY29uZmlnOjQ0OmNvbmZpZyBGU0NBQ0hFX1NUQVRTXFxuZnMvbmV0ZnMvS2NvbmZpZy00NS1cXHRib29sIFxcXCJHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6MjcuNTE0MjM0NjA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTkxMDE5NTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIGBDT05GSUdfQ0FDSEVGSUxFU2AsIGFzIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsOlxuXG4qKkRpZ2dpbmcgaW50byBDYWNoZWZpbGVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgQ09ORklHX0NBQ0hFRklMRVNgLiBUaGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgaGVyZSwgdGhlIHZlcnkgZm91bmRhdGlvbi4gSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIGluIG15IGhlYWQ6IGVuYWJsaW5nIGl0IG1lYW5zIHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gdXNlIGEgY2FjaGluZyBtZWNoYW5pc20uIEJ1dCB3aGF0ICpraW5kKiBvZiBjYWNoaW5nPyBJcyBpdCBibG9jay1sZXZlbCwgZmlsZS1sZXZlbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgZmlsZXN5c3RlbSBpcyB0aGlzIHJ1bm5pbmcgb24/IEtub3dpbmcgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbSAoZS5nLiwgZXh0NCwgWEZTLCBCdHJmcywgZXRjLikgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGNhY2hlIGludGVyYWN0cyBhbmQgcGVyZm9ybXMuIEknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZG93bnNpZGVzOiBjYWNoZSBpbnZhbGlkYXRpb24sIHdyaXRlIHBlbmFsdGllcywgYW5kIG92ZXJhbGwgc3RvcmFnZSBvdmVyaGVhZC4gVGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGdhaW4sIGEgcGVyZm9ybWFuY2UgKmxvc3MqLCBvciBhIHdhc2ggZGVwZW5kaW5nIG9uIG51bWVyb3VzIGZhY3RvcnMuIEknbSBnb2luZyB0byBuZWVkIG1vcmUgY29udGV4dC4gSSB3YW50IHRvIGtub3cgYWJvdXQgdGhlIHdvcmtsb2FkLCB0aGUgaGFyZHdhcmUsIGFuZCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgcGFydGljdWxhciBzZXR0aW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGltcGFjdHMgbXkgdXNlcidzIHN5c3RlbXMgYW5kIHdoYXQgYmVuZWZpdHMgdGhleSBtaWdodCBiZSBnZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyNywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjIzOjM3LjQyNDQzMzgwN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkxNjQ2MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQUNIRUZJTEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozOmNvbmZpZyBDQUNIRUZJTEVTXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xMy1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MTQ6Y29uZmlnIENBQ0hFRklMRVNfREVCVUdcXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRGVidWcgQ2FjaGVGaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yMi1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIlByb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXFxcIlxcbi0tXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI5LVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozMDpjb25maWcgQ0FDSEVGSUxFU19PTkRFTUFORFxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBvbi1kZW1hbmQgcmVhZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6MzkuODE2MDg3Njk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkyNjM2OTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlF1aWNrIENoZWNrOiBBRlMgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBoYXZlbid0IGluYWR2ZXJ0ZW50bHkgZW5hYmxlZCBgQ09ORklHX0FGU19GU2AuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2ssIGJ1dCBhIG5lY2Vzc2FyeSBvbmUgZ2l2ZW4gdGhlIGNvbnRleHQuIFdlJ3ZlIHNlZW4gc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgbGF0ZWx5IHdpdGggc2ltaWxhciBsZWdhY3kgZmlsZXN5c3RlbXMsIGFuZCBJIGRvbid0IHdhbnQgdG8gY2hhc2UgYSByZWQgaGVycmluZyBsYXRlci4gQmVzdCB0byBydWxlIGl0IG91dCBpbW1lZGlhdGVseSwgc28gd2UgY2FuIGZvY3VzIG9uIHRoZSBjb3JlIGlzc3VlLiBBRlMgaGFzIGl0cyBvd24gaWRpb3N5bmNyYXNpZXMsIGFuZCBldmVuIGlmIGl0J3Mgbm90IHRoZSByb290IGNhdXNlLCBpdHMgcHJlc2VuY2UgY291bGQgY29tcGxpY2F0ZSBkZWJ1Z2dpbmcgaWYgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIGludGVybmFscy4gTGV0J3MgY29uZmlybSBpdHMgc3RhdHVzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEyOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjIzOjQ1Ljc0MjQ2MTEzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NDc4MDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZTX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvYWZzL0tjb25maWc6Mjpjb25maWcgQUZTX0ZTXFxuZnMvYWZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcXFwiXFxuLS1cXG5mcy9hZnMvS2NvbmZpZz0xNz1jb25maWcgQUZTX0RFQlVHXFxuLS1cXG5mcy9hZnMvS2NvbmZpZy0yNi1cXG5mcy9hZnMvS2NvbmZpZzoyNzpjb25maWcgQUZTX0ZTQ0FDSEVcXG5mcy9hZnMvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyMzo0Ny44MDcyNTAwNzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1ODU0MTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0d29yayBGaWxlc3lzdGVtIFdyaXRlYmFjayBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGNydWNpYWwgZm9yIG5ldHdvcmsgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhbmQgY2FjaGluZzogYE5FVEZTX1NVUFBPUlRgLCBgRlNDQUNIRWAsIGBDQUNIRUZJTEVTYCwgYW5kIGBBRlNfRlNgLiBUaGF0IG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbXMuXG5cbk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhlIHdyaXRlIHByb2Nlc3MuIEknbSBzZWVpbmcgYG5ldGZzX3diX2JlZ2luYCBhbmQgYG5ldGZzX3diX2VuZGAg4oCTIHRob3NlIGFyZSBvYnZpb3VzbHkgaW1wb3J0YW50IGZvciB3cml0ZWJhY2sgaW5pdGlhdGlvbiBhbmQgY29tcGxldGlvbi4gVGhlbiB0aGVyZSdzIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCBhbmQgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgIHdoaWNoIGxpa2VseSBkZWFsIHdpdGggZGlmZmVyZW50IHdyaXRlIHN0cmF0ZWdpZXMuIFRoZSBgaW92X2l0ZXJfZXh0cmFjdF8uLi5gIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBpbnRlcmVzdGluZzsgSSBrbm93IHRob3NlIHJlbGF0ZSB0byBzY2F0dGVyLWdhdGhlciBJL08gYW5kIHBhZ2UgZXh0cmFjdGlvbiwgc28gdGhleSdsbCBiZSBrZXkgdG8gaG93IGRhdGEgaXMgbW92ZWQuIFNwZWNpZmljYWxseSBJJ20gc2VlaW5nIGBpb3ZfaXRlcl9leHRyYWN0X3hhcnJheV9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXNgLCBgaW92X2l0ZXJfZXh0cmFjdF9idmVjX3BhZ2VzYCBhbmQgYGV4dHJhY3RfeGFycmF5X3RvX3NnYCBhcyBpbXBvcnRhbnQuXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9ucyBpbnZvbHZlZD8gQWhhISBIZXJlIGFyZSBhIGZldyBtb3JlOiBgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbmAsIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgLCBgbmV0ZnNfZW5kX3dyaXRldGhyb3VnaGAsIGBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0YCwgYW5kIGBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlYC4gVGhvc2Ugc2VlbSB0byBiZSByZWxhdGVkIHRvIGJ1bGsgd3JpdGVzLCB3cml0ZS10aHJvdWdoIGNvbnNpc3RlbmN5LCBhbmQgY2FjaGluZyBvYmplY3RzLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIHBlcmZvcm1hbmNlIGFuZCBkYXRhIGludGVncml0eSBjb25zaWRlcmF0aW9ucy5cblxuTm93LCBsZXQncyBzZWUsIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMsIEkgbmVlZCB0byBrbm93IGlmIHRoZXkncmUgZXhwb3J0ZWQgb3Igc3RhdGljLi4uIEkgcmVjYWxsIHRoYXQgYG5ldGZzX3diX2JlZ2luYCBpcyBleHBvcnRlZCwgdGhhdCdzIGdvb2QuIE5vdywgbG9va2luZyBjbG9zZXIsIGBpb3ZfaXRlcl9leHRyYWN0X3hhcnJheV9wYWdlc2AsIGBpb3ZfaXRlcl9leHRyYWN0X3VzZXJfcGFnZXNgLCBhbmQgYGlvdl9pdGVyX2V4dHJhY3RfYnZlY19wYWdlc2AgYXJlIHN0YXRpYyB3aXRoaW4gYGxpYi9pb3ZfaXRlci5jYC4gQW5kIGBleHRyYWN0X3hhcnJheV90b19zZ2AgaXMgc3RhdGljIGluIGBsaWIvc2NhdHRlcmxpc3QuY2AuIFNvIHRoZXkncmUgaW50ZXJuYWwuXG5cbkFoIGhhISBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AgLSB0aGF0IGxvb2tzIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBiZWluZyB0aGUgXCJtYXN0ZXJcIiBmdW5jdGlvbi4gSXQgcHJvYmFibHkgY2FsbHMgdGhvc2Ugc3RhdGljIG9uZXMgSSBqdXN0IGNoZWNrZWQuIEkgc2hvdWxkIGNoZWNrIHRoYXQgb25lIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NjQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6NTYuOTY1Nzk0ODkzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3MTM3MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvdl9pdGVyX2V4dHJhY3RfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLWludGVncml0eS5jPTM2OD1pbnQgYmlvX2ludGVncml0eV9tYXBfdXNlcihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4tLVxcbmJsb2NrL2Jpby1pbnRlZ3JpdHkuYy0zOTktXFxuYmxvY2svYmlvLWludGVncml0eS5jOjQwMDpcXHRyZXQgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFxcdTAwMjZwYWdlcywgYnl0ZXMsIG5yX3ZlY3MsXFxuYmxvY2svYmlvLWludGVncml0eS5jLTQwMS1cXHRcXHRcXHRcXHRcXHRleHRyYWN0aW9uX2ZsYWdzLCBcXHUwMDI2b2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvdGVlL3RlZV9zaG0uYz00MDE9cmVnaXN0ZXJfc2htX2hlbHBlcihzdHJ1Y3QgdGVlX2NvbnRleHQgKmN0eCwgc3RydWN0IGlvdl9pdGVyICppdGVyLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3RlZS90ZWVfc2htLmMtNDQ2LVxcbmRyaXZlcnMvdGVlL3RlZV9zaG0uYzo0NDc6XFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpdGVyLCBcXHUwMDI2c2htLVxcdTAwM2VwYWdlcywgTE9OR19NQVgsIG51bV9wYWdlcywgMCxcXG5kcml2ZXJzL3RlZS90ZWVfc2htLmMtNDQ4LVxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9mZik7XFxuLS1cXG5mcy9kaXJlY3QtaW8uYy00My0vKlxcbmZzL2RpcmVjdC1pby5jOjQ0OiAqIEhvdyBtYW55IHVzZXIgcGFnZXMgdG8gbWFwIGluIG9uZSBjYWxsIHRvIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKS4gIFRoaXNcXG5mcy9kaXJlY3QtaW8uYy00NS0gKiBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIGEgc3RydWN0dXJlIGluIHRoZSBzbGFiIGNhY2hlXFxuLS1cXG5mcy9kaXJlY3QtaW8uYz0xMTY9c3RydWN0IGRpbyB7XFxuLS1cXG5mcy9kaXJlY3QtaW8uYy0xMjgtXFx0c3BpbmxvY2tfdCBiaW9fbG9jaztcXHRcXHQvKiBwcm90ZWN0cyBCSU8gZmllbGRzIGJlbG93ICovXFxuZnMvZGlyZWN0LWlvLmM6MTI5OlxcdGludCBwYWdlX2Vycm9ycztcXHRcXHQvKiBlcnIgZnJvbSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCkgKi9cXG5mcy9kaXJlY3QtaW8uYy0xMzAtXFx0aW50IGlzX2FzeW5jO1xcdFxcdFxcdC8qIGlzIElPIGFzeW5jID8gKi9cXG4tLVxcbmZzL2RpcmVjdC1pby5jPTE2Nj1zdGF0aWMgaW5saW5lIGludCBkaW9fcmVmaWxsX3BhZ2VzKHN0cnVjdCBkaW8gKmRpbywgc3RydWN0IGRpb19zdWJtaXQgKnNkaW8pXFxuLS1cXG5mcy9kaXJlY3QtaW8uYy0xNzEtXFxuZnMvZGlyZWN0LWlvLmM6MTcyOlxcdHJldCA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc2Rpby1cXHUwMDNlaXRlciwgXFx1MDAyNnBhZ2VzLCBMT05HX01BWCxcXG5mcy9kaXJlY3QtaW8uYy0xNzMtXFx0XFx0XFx0XFx0ICAgICBESU9fUEFHRVMsIDAsIFxcdTAwMjZzZGlvLVxcdTAwM2Vmcm9tKTtcXG4tLVxcbmZzL2RpcmVjdC1pby5jLTIwMi0gKiBHZXQgYW5vdGhlciB1c2Vyc3BhY2UgcGFnZS4gIFJldHVybnMgYW4gRVJSX1BUUiBvbiBlcnJvci4gIFBhZ2VzIGFyZVxcbmZzL2RpcmVjdC1pby5jOjIwMzogKiBidWZmZXJlZCBpbnNpZGUgdGhlIGRpbyBzbyB0aGF0IHdlIGNhbiBjYWxsIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKVxcbmZzL2RpcmVjdC1pby5jLTIwNC0gKiBhZ2FpbnN0IGEgZGVjZW50IG51bWJlciBvZiBwYWdlcywgbGVzcyBmcmVxdWVudGx5LiAgVG8gcHJvdmlkZSBuaWNlciB1c2Ugb2ZcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTE1NDg9c3RhdGljIGludCBmdXNlX2dldF91c2VyX3BhZ2VzKHN0cnVjdCBmdXNlX2FyZ3NfcGFnZXMgKmFwLCBzdHJ1Y3QgaW92X2l0ZXIgKmlpLFxcbi0tXFxuZnMvZnVzZS9maWxlLmMtMTU1OS1cXHQgKiBIb3dldmVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBmdXNlX2Nvbm4gcmVxdWlyZXMgcGFnZXMgaW5zdGVhZCBvZlxcbmZzL2Z1c2UvZmlsZS5jOjE1NjA6XFx0ICogcG9pbnRlciAoZS5nLiwgdmlydGlvLWZzKSwgdXNlIGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoKSBpbnN0ZWFkLlxcbmZzL2Z1c2UvZmlsZS5jLTE1NjEtXFx0ICovXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xNTg1LVxcdCAqIFVudGlsIHRoZXJlIGlzIHN1cHBvcnQgZm9yIGlvdl9pdGVyX2V4dHJhY3RfZm9saW9zKCksIHdlIGhhdmUgdG9cXG5mcy9mdXNlL2ZpbGUuYzoxNTg2OlxcdCAqIG1hbnVhbGx5IGV4dHJhY3QgcGFnZXMgdXNpbmcgaW92X2l0ZXJfZXh0cmFjdF9wYWdlcygpIGFuZCB0aGVuXFxuZnMvZnVzZS9maWxlLmMtMTU4Ny1cXHQgKiBjb3B5IHRoYXQgdG8gYSBmb2xpb3MgYXJyYXkuXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0xNTk5LVxcbmZzL2Z1c2UvZmlsZS5jOjE2MDA6XFx0XFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpaSwgXFx1MDAyNnBhZ2VzLFxcbmZzL2Z1c2UvZmlsZS5jLTE2MDEtXFx0XFx0XFx0XFx0XFx0ICAgICAqbmJ5dGVzcCAtIG5ieXRlcyxcXG4tLVxcbmZzL25ldGZzL2l0ZXJhdG9yLmM9MzY9c3NpemVfdCBuZXRmc19leHRyYWN0X3VzZXJfaXRlcihzdHJ1Y3QgaW92X2l0ZXIgKm9yaWcsIHNpemVfdCBvcmlnX2xlbixcXG4tLVxcbmZzL25ldGZzL2l0ZXJhdG9yLmMtNjYtXFx0d2hpbGUgKGNvdW50IFxcdTAwMjZcXHUwMDI2IG5wYWdlcyBcXHUwMDNjIG1heF9wYWdlcykge1xcbmZzL25ldGZzL2l0ZXJhdG9yLmM6Njc6XFx0XFx0cmV0ID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhvcmlnLCBcXHUwMDI2cGFnZXMsIGNvdW50LFxcbmZzL25ldGZzL2l0ZXJhdG9yLmMtNjgtXFx0XFx0XFx0XFx0XFx0ICAgICBtYXhfcGFnZXMgLSBucGFnZXMsIGV4dHJhY3Rpb25fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Vpby5oPTM3Mj1zdGF0aWMgaW5saW5lIHZvaWQgaW92X2l0ZXJfdWJ1ZihzdHJ1Y3QgaW92X2l0ZXIgKmksIHVuc2lnbmVkIGludCBkaXJlY3Rpb24sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTM4Ny1cXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjM4ODpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLCBzdHJ1Y3QgcGFnZSAqKipwYWdlcyxcXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTM4OS1cXHRcXHRcXHQgICAgICAgc2l6ZV90IG1heHNpemUsIHVuc2lnbmVkIGludCBtYXhwYWdlcyxcXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTE2MTY9c3RhdGljIHNzaXplX3QgaW92X2l0ZXJfZXh0cmFjdF9idmVjX3BhZ2VzKHN0cnVjdCBpb3ZfaXRlciAqaSxcXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE2NDYtXFx0XFx0LypcXG5saWIvaW92X2l0ZXIuYzoxNjQ3OlxcdFxcdCAqIFRoZSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzIGludGVyZmFjZSBvbmx5IGFsbG93cyBhbiBvZmZzZXRcXG5saWIvaW92X2l0ZXIuYy0xNjQ4LVxcdFxcdCAqIGludG8gdGhlIGZpcnN0IHBhZ2UuICBCcmVhayBvdXQgb2YgdGhlIGxvb3AgaWYgd2Ugc2VlIGFuXFxubGliL2lvdl9pdGVyLmMtMTY0OS1cXHRcXHQgKiBvZmZzZXQgaW50byBzdWJzZXF1ZW50IHBhZ2VzLCB0aGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBjYWxsXFxubGliL2lvdl9pdGVyLmM6MTY1MDpcXHRcXHQgKiBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzIGFnYWluIGZvciB0aGUgcmVtaW5kZXIuXFxubGliL2lvdl9pdGVyLmMtMTY1MS1cXHRcXHQgKi9cXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE2NjgtXFx0XFx0ICogVGhlIGNhbGxlciB3aWxsIGhhbmRsZSB0aGlzIHdpdGggYW5vdGhlciBjYWxsIHRvXFxubGliL2lvdl9pdGVyLmM6MTY2OTpcXHRcXHQgKiBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzLlxcbmxpYi9pb3ZfaXRlci5jLTE2NzAtXFx0XFx0ICovXFxuLS1cXG5saWIvaW92X2l0ZXIuYz0xNzQ5PXN0YXRpYyBzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfdXNlcl9wYWdlcyhzdHJ1Y3QgaW92X2l0ZXIgKmksXFxuLS1cXG5saWIvaW92X2l0ZXIuYy0xNzg5LS8qKlxcbmxpYi9pb3ZfaXRlci5jOjE3OTA6ICogaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyAtIEV4dHJhY3QgYSBsaXN0IG9mIGNvbnRpZ3VvdXMgcGFnZXMgZnJvbSBhbiBpdGVyYXRvclxcbmxpYi9pb3ZfaXRlci5jLTE3OTEtICogQGk6IFRoZSBpdGVyYXRvciB0byBleHRyYWN0IGZyb21cXG4tLVxcbmxpYi9pb3ZfaXRlci5jLTE4MzEtICovXFxubGliL2lvdl9pdGVyLmM6MTgzMjpzc2l6ZV90IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoc3RydWN0IGlvdl9pdGVyICppLFxcbmxpYi9pb3ZfaXRlci5jLTE4MzMtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlICoqKnBhZ2VzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTg2NC19XFxubGliL2lvdl9pdGVyLmM6MTg2NTpFWFBPUlRfU1lNQk9MX0dQTChpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKTtcXG5saWIvaW92X2l0ZXIuYy0xODY2LVxcbmxpYi9pb3ZfaXRlci5jPTE4Njc9c3RhdGljIHVuc2lnbmVkIGludCBnZXRfY29udGlnX2ZvbGlvX2xlbihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTkwOC0gKlxcbmxpYi9pb3ZfaXRlci5jOjE5MDk6ICogTGlrZSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKCksIGJ1dCByZXR1cm5zIHBoeXNpY2FsbHkgY29udGlndW91cyByYW5nZXNcXG5saWIvaW92X2l0ZXIuYy0xOTEwLSAqIGNvbnRhaW5lZCBpbiBhIHNpbmdsZSBmb2xpbyBhcyBhIHNpbmdsZSBidmVjIGluc3RlYWQgb2YgbXVsdGlwbGUgZW50cmllcy5cXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTE5MTY9c3NpemVfdCBpb3ZfaXRlcl9leHRyYWN0X2J2ZWNzKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc3RydWN0IGJpb192ZWMgKmJ2LFxcbi0tXFxubGliL2lvdl9pdGVyLmMtMTkzNC1cXG5saWIvaW92X2l0ZXIuYzoxOTM1OlxcdHNpemUgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFxcdTAwMjZwYWdlcywgbWF4X3NpemUsIGVudHJpZXNfbGVmdCxcXG5saWIvaW92X2l0ZXIuYy0xOTM2LVxcdFxcdFxcdGV4dHJhY3Rpb25fZmxhZ3MsIFxcdTAwMjZvZmZzZXQpO1xcbi0tXFxubGliL3NjYXR0ZXJsaXN0LmM9MTExMz1zdGF0aWMgc3NpemVfdCBleHRyYWN0X3VzZXJfdG9fc2coc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubGliL3NjYXR0ZXJsaXN0LmMtMTEyOS1cXHRkbyB7XFxubGliL3NjYXR0ZXJsaXN0LmM6MTEzMDpcXHRcXHRyZXMgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKGl0ZXIsIFxcdTAwMjZwYWdlcywgbWF4c2l6ZSwgc2dfbWF4LFxcbmxpYi9zY2F0dGVybGlzdC5jLTExMzEtXFx0XFx0XFx0XFx0XFx0ICAgICBleHRyYWN0aW9uX2ZsYWdzLCBcXHUwMDI2b2ZmKTtcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jPTcwNz1zdGF0aWMgdm9pZCBfX2luaXQgaW92X2t1bml0X2V4dHJhY3RfcGFnZXNfa3ZlYyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy03MzQtXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6NzM1OlxcdFxcdGxlbiA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoXFx1MDAyNml0ZXIsIFxcdTAwMjZwYWdlcywgMTAwICogMTAyNCxcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy03MzYtXFx0XFx0XFx0XFx0XFx0ICAgICBBUlJBWV9TSVpFKHBhZ2VsaXN0KSwgMCwgXFx1MDAyNm9mZnNldDApO1xcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM9Nzg3PXN0YXRpYyB2b2lkIF9faW5pdCBpb3Zfa3VuaXRfZXh0cmFjdF9wYWdlc19idmVjKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTgxMi1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzo4MTM6XFx0XFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhcXHUwMDI2aXRlciwgXFx1MDAyNnBhZ2VzLCAxMDAgKiAxMDI0LFxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTgxNC1cXHRcXHRcXHRcXHRcXHQgICAgIEFSUkFZX1NJWkUocGFnZWxpc3QpLCAwLCBcXHUwMDI2b2Zmc2V0MCk7XFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz04NjU9c3RhdGljIHZvaWQgX19pbml0IGlvdl9rdW5pdF9leHRyYWN0X3BhZ2VzX2ZvbGlvcShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy04OTYtXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6ODk3OlxcdFxcdFxcdGxlbiA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoXFx1MDAyNml0ZXIsIFxcdTAwMjZwYWdlcywgMTAwICogMTAyNCxcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy04OTgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBBUlJBWV9TSVpFKHBhZ2VsaXN0KSwgMCwgXFx1MDAyNm9mZnNldDApO1xcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM9OTQ0PXN0YXRpYyB2b2lkIF9faW5pdCBpb3Zfa3VuaXRfZXh0cmFjdF9wYWdlc194YXJyYXkoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtOTc0LVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jOjk3NTpcXHRcXHRcXHRsZW4gPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKFxcdTAwMjZpdGVyLCBcXHUwMDI2cGFnZXMsIDEwMCAqIDEwMjQsXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtOTc2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQVJSQVlfU0laRShwYWdlbGlzdCksIDAsIFxcdTAwMjZvZmZzZXQwKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTczNzA9c3NpemVfdCBza2Jfc3BsaWNlX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03Mzg5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjczOTA6XFx0XFx0bGVuID0gaW92X2l0ZXJfZXh0cmFjdF9wYWdlcyhpdGVyLCBcXHUwMDI2cHBhZ2VzLCBtYXhzaXplLCBuciwgMCwgXFx1MDAyNm9mZik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzM5MS1cXHRcXHRpZiAobGVuIFxcdTAwM2M9IDApIHtcXG4tLVxcbm5ldC90bHMvdGxzX2RldmljZS5jPTQyMT1zdGF0aWMgaW50IHRsc19wdXNoX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtNTAwLVxcbm5ldC90bHMvdGxzX2RldmljZS5jOjUwMTpcXHRcXHRcXHRyYyA9IGlvdl9pdGVyX2V4dHJhY3RfcGFnZXMoaXRlciwgXFx1MDAyNnBhZ2VzLFxcbm5ldC90bHMvdGxzX2RldmljZS5jLTUwMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgY29weSwgMSwgMCwgXFx1MDAyNm9mZik7XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTEwMTU9c3RhdGljIGludCB0bHNfc3dfc2VuZG1zZ19zcGxpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTEwMjQtXFxubmV0L3Rscy90bHNfc3cuYzoxMDI1OlxcdFxcdHBhcnQgPSBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzKFxcdTAwMjZtc2ctXFx1MDAzZW1zZ19pdGVyLCBcXHUwMDI2cGFnZXMsXFxubmV0L3Rscy90bHNfc3cuYy0xMDI2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHRyeV90b19jb3B5LCAxLCAwLCBcXHUwMDI2b2ZmKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjM6NTkuMDEyOTM5MTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NDkzNDg4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlJlZmxlY3Rpbmcgb24gS2VybmVsIFN5bWJvbCBFeHBvcnQgYW5kIFN0YXRpYyBGdW5jdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlc2UgSS9PIHZlY3RvciBpdGVyYXRpb24gZnVuY3Rpb25zLiBJdCBzZWVtcyBsaWtlIGBpb3ZfaXRlcl9leHRyYWN0X3BhZ2VzYCBpcyB0aGUgcHVibGljLWZhY2luZyBmdW5jdGlvbjsgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGdldHMgZXhwb3J0ZWQgYW5kIHVzZWQgZXh0ZXJuYWxseS4gTWFrZXMgc2Vuc2UuIEl0IGFjdHMgYXMgdGhlIHdyYXBwZXIgZm9yIHRoZSBsb3dlci1sZXZlbCwgc3RhdGljIGZ1bmN0aW9ucyB1bmRlcm5lYXRoLiBUaGVyZWZvcmUsIGFkZGluZyB0aGF0IHRvIHRoZSBmb2N1cyBzeW1ib2xzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGVudHJ5IHBvaW50LlxuXG5Ob3csIEknbSBub3RpbmcgdGhhdCBgZXh0cmFjdF94YXJyYXlfdG9fc2dgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQuIEJ1dCBpdCAqaXMqIGNhbGxlZCBieSBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gU28gaXQncyBzdGlsbCBwbGF5aW5nIGEgY3J1Y2lhbCByb2xlLCBqdXN0IG5vdCBhIGdsb2JhbGx5IHZpc2libGUgb25lLiBLZWVwIHRoYXQgZGVwZW5kZW5jeSBpbiBtaW5kIGFzIEkgYnVpbGQgb3V0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjExLjU2MjI5MDU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc0MTg0MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dHJhY3RfaXRlcl90b19zZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJjcnlwdG8vYWZfYWxnLmM9OTA5PWludCBhZl9hbGdfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxuY3J5cHRvL2FmX2FsZy5jLTEwMjYtXFxuY3J5cHRvL2FmX2FsZy5jOjEwMjc6XFx0XFx0XFx0cGxlbiA9IGV4dHJhY3RfaXRlcl90b19zZyhcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgbGVuLCBcXHUwMDI2c2d0YWJsZSxcXG5jcnlwdG8vYWZfYWxnLmMtMTAyOC1cXHRcXHRcXHRcXHRcXHRcXHQgIE1BWF9TR0xfRU5UUyAtIHNnbC1cXHUwMDNlY3VyLCAwKTtcXG4tLVxcbmNyeXB0by9hZl9hbGcuYz0xMjExPWludCBhZl9hbGdfZ2V0X3JzZ2woc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBmbGFncyxcXG4tLVxcbmNyeXB0by9hZl9hbGcuYy0xMjQ4LVxcdFxcdHNnX2luaXRfdGFibGUocnNnbC1cXHUwMDNlc2dsLnNndC5zZ2wsIEFMR19NQVhfUEFHRVMpO1xcbmNyeXB0by9hZl9hbGcuYzoxMjQ5OlxcdFxcdGVyciA9IGV4dHJhY3RfaXRlcl90b19zZyhcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgc2VnbGVuLCBcXHUwMDI2cnNnbC1cXHUwMDNlc2dsLnNndCxcXG5jcnlwdG8vYWZfYWxnLmMtMTI1MC1cXHRcXHRcXHRcXHRcXHQgQUxHX01BWF9QQUdFUywgMCk7XFxuLS1cXG5jcnlwdG8vYWxnaWZfaGFzaC5jPTYzPXN0YXRpYyBpbnQgaGFzaF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbmNyeXB0by9hbGdpZl9oYXNoLmMtMTE4LVxcbmNyeXB0by9hbGdpZl9oYXNoLmM6MTE5OlxcdFxcdGVyciA9IGV4dHJhY3RfaXRlcl90b19zZyhcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlciwgTE9OR19NQVgsXFxuY3J5cHRvL2FsZ2lmX2hhc2guYy0xMjAtXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjdHgtXFx1MDAzZXNnbC5zZ3QsIG5wYWdlcywgMCk7XFxuLS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYz00Mzg3PXN0YXRpYyB2b2lkICpzbWIyX2dldF9hZWFkX3JlcShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgc3RydWN0IHNtYl9ycXN0ICpycXN0LFxcbi0tXFxuZnMvc21iL2NsaWVudC9zbWIyb3BzLmMtNDQyMS1cXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYzo0NDIyOlxcdFxcdHJjID0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIGNvdW50LCBcXHUwMDI2c2d0YWJsZSxcXG5mcy9zbWIvY2xpZW50L3NtYjJvcHMuYy00NDIzLVxcdFxcdFxcdFxcdFxcdG51bV9zZ3MgLSBzZ3RhYmxlLm5lbnRzLCAwKTtcXG4tLVxcbmZzL3NtYi9zbWJkaXJlY3QvbXIuYz0yNDE9c3RhdGljIGludCBzbWJkaXJlY3RfaXRlcl90b19zZ3Qoc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvc21iL3NtYmRpcmVjdC9tci5jLTI0OC1cXG5mcy9zbWIvc21iZGlyZWN0L21yLmM6MjQ5OlxcdHJldCA9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBpb3ZfaXRlcl9jb3VudChpdGVyKSwgc2d0LCBtYXhfc2csIDApO1xcbmZzL3NtYi9zbWJkaXJlY3QvbXIuYy0yNTAtXFx0V0FSTl9PTihyZXQgXFx1MDAzYyAwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdWlvLmg9NDE3PXN0cnVjdCBzZ190YWJsZTtcXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjQxODpzc2l6ZV90IGV4dHJhY3RfaXRlcl90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHNpemVfdCBsZW4sXFxuaW5jbHVkZS9saW51eC91aW8uaC00MTktXFx0XFx0XFx0ICAgc3RydWN0IHNnX3RhYmxlICpzZ3RhYmxlLCB1bnNpZ25lZCBpbnQgc2dfbWF4LFxcbi0tXFxubGliL3NjYXR0ZXJsaXN0LmM9MTMzNT1zdGF0aWMgc3NpemVfdCBleHRyYWN0X3hhcnJheV90b19zZyhzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5saWIvc2NhdHRlcmxpc3QuYy0xMzgxLS8qKlxcbmxpYi9zY2F0dGVybGlzdC5jOjEzODI6ICogZXh0cmFjdF9pdGVyX3RvX3NnIC0gRXh0cmFjdCBwYWdlcyBmcm9tIGFuIGl0ZXJhdG9yIGFuZCBhZGQgdG8gYW4gc2dsaXN0XFxubGliL3NjYXR0ZXJsaXN0LmMtMTM4My0gKiBAaXRlcjogVGhlIGl0ZXJhdG9yIHRvIGV4dHJhY3QgZnJvbVxcbi0tXFxubGliL3NjYXR0ZXJsaXN0LmMtMTQwOC0gKi9cXG5saWIvc2NhdHRlcmxpc3QuYzoxNDA5OnNzaXplX3QgZXh0cmFjdF9pdGVyX3RvX3NnKHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgc2l6ZV90IG1heHNpemUsXFxubGliL3NjYXR0ZXJsaXN0LmMtMTQxMC1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndGFibGUsIHVuc2lnbmVkIGludCBzZ19tYXgsXFxuLS1cXG5saWIvc2NhdHRlcmxpc3QuYy0xNDM4LX1cXG5saWIvc2NhdHRlcmxpc3QuYzoxNDM5OkVYUE9SVF9TWU1CT0xfR1BMKGV4dHJhY3RfaXRlcl90b19zZyk7XFxuLS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYz0xMDc2PWlvdl9rdW5pdF9pdGVyX3RvX3NnX2NoZWNrKHN0cnVjdCBrdW5pdCAqdGVzdCwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTA4OC1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzoxMDg5OlxcdGkgPSBleHRyYWN0X2l0ZXJfdG9fc2coaXRlciwgYnVmc2l6ZSwgZGF0YS1cXHUwMDNlc2d0LCAwLCAwKTtcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMDkwLVxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCBpLCAwKTtcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTEwOTItXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6MTA5MzpcXHRpID0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIGJ1ZnNpemUgLSB0YWlsLCBkYXRhLVxcdTAwM2VzZ3QsIDEsIDApO1xcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTEwOTQtXFx0S1VOSVRfQVNTRVJUX0xFKHRlc3QsIGksIGJ1ZnNpemUgLSB0YWlsKTtcXG4tLVxcbmxpYi90ZXN0cy9rdW5pdF9pb3ZfaXRlci5jLTEwOTYtXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmM6MTA5NzpcXHRpICs9IGV4dHJhY3RfaXRlcl90b19zZyhpdGVyLCBidWZzaXplIC0gdGFpbCAtIGksIGRhdGEtXFx1MDAzZXNndCxcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMDk4LVxcdFxcdFxcdFxcdGRhdGEtXFx1MDAzZW5wYWdlcyAtIGRhdGEtXFx1MDAzZXNndC1cXHUwMDNlbmVudHMsIDApO1xcbi0tXFxubGliL3Rlc3RzL2t1bml0X2lvdl9pdGVyLmMtMTEwMS1cXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYzoxMTAyOlxcdGkgKz0gZXh0cmFjdF9pdGVyX3RvX3NnKGl0ZXIsIHRhaWwsIGRhdGEtXFx1MDAzZXNndCxcXG5saWIvdGVzdHMva3VuaXRfaW92X2l0ZXIuYy0xMTAzLVxcdFxcdFxcdFxcdGRhdGEtXFx1MDAzZW5wYWdlcyAtIGRhdGEtXFx1MDAzZXNndC1cXHUwMDNlbmVudHMsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDoxMy45MzY0ODA1NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTA3NjExMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBleHRyYWN0X2l0ZXJfdG9fc2dgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGV4dHJhY3RfaXRlcl90b19zZ2AgaXMgdGhlIGtleSBmdW5jdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGgsIHRoZSBvbmUgdGhhdCdzIGV4cG9ydGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSB3cml0ZWJhY2sgcGF0aC4gTXkgYnJhaW4ncyBhbHJlYWR5IG1ha2luZyBhc3NvY2lhdGlvbnMuLi4gbGV0J3Mgc2VlLCB3aGF0IGZ1bmN0aW9ucyBkb2VzIHRoaXMgaW50ZXJhY3Qgd2l0aD9cblxuQWxyaWdodCwgbGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGBuZXRmc193Yl9iZWdpbmAsIGBuZXRmc193Yl9lbmRgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAsIGBuZXRmc193cml0ZXBhZ2VzYCwgYW5kIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gbGlrZSBuYXR1cmFsIGNvbXBhbmlvbnMuIEkgbmVlZCB0byBncmFzcCBob3cgZGF0YSBnZXRzIHByZXBwZWQsIHdyaXR0ZW4sIGFuZCBmaW5hbGl6ZWQgd2l0aGluIHRoZSBuZXRmcyBjb250ZXh0LiBJJ20gZ29pbmcgdG8gcGF5IHBhcnRpY3VsYXJseSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXNlIGZ1bmN0aW9ucyB1dGlsaXplIG9yIGludGVyYWN0IHdpdGggYGlvdl9pdGVyX2V4dHJhY3RfcGFnZXNgLCBhcyB0aGF04oCZcyBhIGxpa2VseSBwYXJhbGxlbCBmdW5jdGlvbiBhbmQgSSBuZWVkIHRvIGVuc3VyZSBJIGFtIHVwIHRvIGRhdGUgd2l0aCBiZXN0IHByYWN0aWNlLlxuXG5GaXJzdCBvZmYsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBUaGF0J2xsIGluZm9ybSBob3cgd2lkZWx5IGF2YWlsYWJsZSBpdCBpcyBhbmQgd2hldGhlciBpdCdzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB1bmJ1ZmZlcmVkIHdyaXRlcy4gVGhpcyBnaXZlcyBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNjcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjQ6MTkuMjExNTU5ODk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDExMTM3Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zNzE9ZmlsZXN5c3RlbSBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgc3RhbmRhcmQgVkZTIHJlYWQvd3JpdGVfaXRlciBtZXRob2RzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtMzc2LVxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpO1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q6Mzc3OlxcdHNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTM3OC1cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3Q9Mzk3PVRoZXJlIGFyZSB0aHJlZSBmdW5jdGlvbnMgZm9yIHdyaXRlczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQwMi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cCk7XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDo0MDM6XFx0c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcbi0tXFxuZnMvOXAvdmZzX2ZpbGUuYz00MDE9djlmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy85cC92ZnNfZmlsZS5jLTQwOC1cXHRpZiAoZmlkLVxcdTAwM2Vtb2RlIFxcdTAwMjYgKFA5TF9ESVJFQ1QgfCBQOUxfTk9XUklURUNBQ0hFKSlcXG5mcy85cC92ZnNfZmlsZS5jOjQwOTpcXHRcXHRyZXR1cm4gbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKGlvY2IsIGZyb20pO1xcbmZzLzlwL3Zmc19maWxlLmMtNDEwLVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz01MDE9c3NpemVfdCBuZXRmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTUxNC1cXHQgICAgdGVzdF9iaXQoTkVURlNfSUNUWF9VTkJVRkZFUkVELCBcXHUwMDI2aWN0eC1cXHUwMDNlZmxhZ3MpKVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NTE1OlxcdFxcdHJldHVybiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy01MTYtXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNC0gKi9cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoxNTpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTYte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtNjQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6NjU6c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9jb2xsZWN0KHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTY2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19pb19zdHJlYW0gKnN0cmVhbSxcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTkzLSAqL1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjk0OnN0YXRpYyBpbnQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy05NS17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0xNTAtXFx0XFx0aWYgKCFyZXRyeSkge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE1MTpcXHRcXHRcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2NvbGxlY3Qod3JlcSwgc3RyZWFtLCBzdWJyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTE1Mi1cXHRcXHRcXHRzdWJyZXEgPSBOVUxMO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk3LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjE5ODpcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2RvbmUod3JlcSk7XFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMTk5LVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjAyLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwMzpzdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMDQte1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjA2LVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjIwNzpcXHRuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIwOC1cXHRuZXRmc19wdXRfcmVxdWVzdCh3cmVxLCBuZXRmc19ycmVxX3RyYWNlX3B1dF9jb21wbGV0ZSk7XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE1OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjg0LVxcdGlmIChhc3luYykge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI4NTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNndyZXEtXFx1MDAzZXdvcmssIG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfYXN5bmMpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4Ni1cXHRcXHR3cmVxLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI4OS1cXHR9IGVsc2Uge1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjI5MDpcXHRcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlKHdyZXEpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTI5MS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDktXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzEwLS8qKlxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjMxMTogKiBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIgLSBVbmJ1ZmZlcmVkIHdyaXRlIHRvIGEgZmlsZVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMxMi0gKiBAaW9jYjogSU8gc3RhdGUgc3RydWN0dXJlXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMjItICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzIzOnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTMyNC17XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtXFx0XFx0XFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MjpcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4My1vdXQ6XFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODYtfVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4NzpFWFBPUlRfU1lNQk9MKG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcik7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYz0yOTk3PXNzaXplX3QgY2lmc19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMDA0LVxcdGlmIChpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19ESVJFQ1QpIHtcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMDA1OlxcdFxcdHdyaXR0ZW4gPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoaW9jYiwgZnJvbSk7XFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzAwNi1cXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgQ0lGU19DQUNIRV9SRUFEKGNpbm9kZSkpIHtcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMzNjE9c3RhdGljIGludCBjaWZzX3N3YXBfcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMzY3LVxcdGVsc2VcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzY4OlxcdFxcdHJldCA9IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoaW9jYiwgaXRlciwgTlVMTCk7XFxuZnMvc21iL2NsaWVudC9maWxlLmMtMzM2OS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaD00MDE9c3NpemVfdCBuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDAyLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDAzOnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDA0OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDA1LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDoyMS4yMjI3MDgyMjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk5NDUyNTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkZvY3VzaW5nIHRoZSBMZW5zOiBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgKipcblxuUmlnaHQsIHNvIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJgIGFuZCBpdHMgbG9ja2VkIGNvdW50ZXJwYXJ0LCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAsIGFyZSBhbHJlYWR5IGV4cG9ydGVkLiBHaXZlbiB0aGF0LCBpdCBtYWtlcyBwZXJmZWN0IHNlbnNlIHRvIGFkZCB0aGVtIHNwZWNpZmljYWxseSB0byB0aGUgZm9jdXMgc3ltYm9scy4gV2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBiaXRzLCBhbmQgaW5jbHVkaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGRlZmluaXRlbHkgc2hhcnBlbiBvdXIgdmlldyBvZiB0aGUgdW5idWZmZXJlZCB3cml0ZSBwYXRoLiBUaGlzIHNlZW1zIGxpa2UgYSBjcnVjaWFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgZmxvdy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB3ZSBjaGVjayBgbmV0ZnNfd3JpdGVwYWdlc2AuIEl0J3MgYSBrZXkgZnVuY3Rpb24gcmVsYXRlZCB0byB3cml0ZSBvcGVyYXRpb25zLCBhbmQgd2UgY2FuIGNvbXBhcmUgYW5kIGNvbnRyYXN0IHRoZSBkaWZmZXJlbnQgYXBwcm9hY2hlcy4gV2UgY2FuIHVzZSBpdCBhcyBhIHJlZmVyZW5jZSwgb3IgYXMgYSBjb250cmFzdGluZyB2aWV3IG9mIHRoZSB3cml0ZSBwcm9jZXNzLCBpbiBvcmRlciB0byBlbmhhbmNlIG91ciB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDcwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjMwLjIxNzIzNjc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc3NDkzNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3dyaXRlcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD00NjA9Zm9yIGl0IHRvIGludGVydmVuZSBhdCB2YXJpb3VzIHRpbWVzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDYzLVxcdGludCBuZXRmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICosIHN0cnVjdCBmb2xpbyAqKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjQ2NDpcXHRpbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ2NS1cXHRcXHRcXHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTtcXG4tLVxcbmZzLzlwL3Zmc19hZGRyLmM9MTYwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdjlmc19hZGRyX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy85cC92ZnNfYWRkci5jLTE2Ni1cXHQuZGlyZWN0X0lPXFx0XFx0PSBub29wX2RpcmVjdF9JTyxcXG5mcy85cC92ZnNfYWRkci5jOjE2NzpcXHQud3JpdGVwYWdlc1xcdFxcdD0gbmV0ZnNfd3JpdGVwYWdlcyxcXG5mcy85cC92ZnNfYWRkci5jLTE2OC1cXHQubWlncmF0ZV9mb2xpb1xcdFxcdD0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvLFxcbi0tXFxuZnMvYWZzL3dyaXRlLmM9MjI4PWludCBhZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuLS1cXG5mcy9hZnMvd3JpdGUuYy0yNDEtXFxuZnMvYWZzL3dyaXRlLmM6MjQyOlxcdHJldCA9IG5ldGZzX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTtcXG5mcy9hZnMvd3JpdGUuYy0yNDMtXFx0dXBfcmVhZChcXHUwMDI2dm5vZGUtXFx1MDAzZXZhbGlkYXRlX2xvY2spO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01MjI9c3RhdGljIHZvaWQgbmV0ZnNfZW5kX2lzc3VlX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NDUtICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo1NDY6aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NDctXFx0XFx0ICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjExLX1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYxMjpFWFBPUlRfU1lNQk9MKG5ldGZzX3dyaXRlcGFnZXMpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjEzLVxcbi0tXFxuZnMvc21iL2NsaWVudC9maWxlLmM9MzM3ND1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNpZnNfYWRkcl9vcHMgPSB7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zMzc2LVxcdC5yZWFkYWhlYWRcXHQ9IG5ldGZzX3JlYWRhaGVhZCxcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzozMzc3OlxcdC53cml0ZXBhZ2VzXFx0PSBuZXRmc193cml0ZXBhZ2VzLFxcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzNzgtXFx0LmRpcnR5X2ZvbGlvXFx0PSBuZXRmc19kaXJ0eV9mb2xpbyxcXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTMzOTc9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzX3NtYWxsYnVmID0ge1xcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTMzOTgtXFx0LnJlYWRfZm9saW9cXHQ9IG5ldGZzX3JlYWRfZm9saW8sXFxuZnMvc21iL2NsaWVudC9maWxlLmM6MzM5OTpcXHQud3JpdGVwYWdlc1xcdD0gbmV0ZnNfd3JpdGVwYWdlcyxcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy0zNDAwLVxcdC5kaXJ0eV9mb2xpb1xcdD0gbmV0ZnNfZGlydHlfZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg9NDE5PWludCBuZXRmc193cml0ZV9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKiwgc3RydWN0IGZpbGUgKixcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MjEtXFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICoqLCB2b2lkICoqZnNkYXRhKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDIyOmludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MjMtXFx0XFx0ICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjMyLjI5NDc0MDc3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE1Nzg2ODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGtlcm5lbCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZWJhY2sqKlxuXG5Pa2F5LCBgbmV0ZnNfd3JpdGVwYWdlc2AgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBoYW5kbGluZyB3cml0ZSBvcGVyYXRpb25zIHdpdGhpbiBhIG5ldHdvcmsgZmlsZXN5c3RlbS4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLiBUaGF0IHNob3VsZCBiZSB0aGUgYXRvbWljIHVuaXQsIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jayB3aXRoaW4gdGhlIG92ZXJhbGwgd3JpdGViYWNrIHNjaGVtZS4gVW5kZXJzdGFuZGluZyBob3cgYSAqc2luZ2xlKiBwYWdlIGdldHMgZmx1c2hlZCBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIGFyY2hpdGVjdHVyZSdzIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBsaWtlbHkgb2ZmZXJzIGluc2lnaHRzIGludG8gaG93IGluZGl2aWR1YWwgZGF0YSBibG9ja3MgYXJlIHRyYW5zbWl0dGVkIG92ZXIgdGhlIG5ldHdvcmsgYW5kIGFueSBhc3NvY2lhdGVkIGJ1ZmZlcmluZyBvciBjYWNoaW5nIHN0cmF0ZWdpZXMgdXNlZCBhdCB0aGUgY2xpZW50IG9yIHNlcnZlci4gTGV0J3Mgc2VlIGlmIHRoaXMgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgIGZ1bmN0aW9uIGdpdmVzIHVzIGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IGBuZXRmc193cml0ZXBhZ2VzYCBvcGVyYXRlcyBpbiBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDo0NC40NTI2MTMwNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTQ4MDUwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0PTQzNj1hIHNpbmdsZSBSUEMgKGFuZCBub3Qgd3JpdHRlbiBiYWNrKSBhbmQgaXMgbWFpbnRhaW5lZCBhcyBhIG1vbm9saXRoaWMgYmxvYlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00NDAtXFx0dm9pZCBuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjQ0MTpcXHRpbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0LTQ0Mi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4tLVxcbmZzL2Fmcy9kaXIuYz0yMjAxPXN0YXRpYyBpbnQgYWZzX2Rpcl93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvYWZzL2Rpci5jLTIyMjItXFx0XFx0XFx0XFx0ICAgICBpX3NpemVfcmVhZChcXHUwMDI2ZHZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZSkpO1xcbmZzL2Fmcy9kaXIuYzoyMjIzOlxcdFxcdHJldCA9IG5ldGZzX3dyaXRlYmFja19zaW5nbGUobWFwcGluZywgd2JjLCBcXHUwMDI2aXRlcik7XFxuZnMvYWZzL2Rpci5jLTIyMjQtXFx0XFx0aWYgKHJldCA9PSAxKVxcbi0tXFxuZnMvYWZzL3N5bWxpbmsuYz0yMzQ9aW50IGFmc19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9hZnMvc3ltbGluay5jLTI1My1cXHRcXHRcXHRcXHQgICAgIGlfc2l6ZV9yZWFkKFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUpKTtcXG5mcy9hZnMvc3ltbGluay5jOjI1NDpcXHRcXHRyZXQgPSBuZXRmc193cml0ZWJhY2tfc2luZ2xlKG1hcHBpbmcsIHdiYywgXFx1MDAyNml0ZXIpO1xcbmZzL2Fmcy9zeW1saW5rLmMtMjU1LVxcdH1cXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NzE0PXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW9fc2luZ2xlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04MjQtLyoqXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MjU6ICogbmV0ZnNfd3JpdGViYWNrX3NpbmdsZSAtIFdyaXRlIGJhY2sgYSBtb25vbGl0aGljIHBheWxvYWRcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgyNi0gKiBAbWFwcGluZzogVGhlIG1hcHBpbmcgdG8gd3JpdGUgZnJvbVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04MzUtICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MzY6aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04MzctXFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTkwMC19XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo5MDE6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZWJhY2tfc2luZ2xlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaD00MTA9c3NpemVfdCBuZXRmc19yZWFkX3NpbmdsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6NDExOmludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00MTItXFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjQ2LjQ2NzQyNTkwM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODAzMTg0MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0RlMgV3JpdGViYWNrIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvdGVudGlhbGx5IGludm9sdmVkIGluIHNvbWUgY29yZSBuZXR3b3JrIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGNhY2hlZmlsZXNfYnVyeV9vYmplY3RgLiBJZiB0aGF0J3MgcmVsZXZhbnQsIHRoZXJlJ3MgYSBnb29kIHJlYXNvbiB0byBpbnZlc3RpZ2F0ZSBob3cgaXQgd29ya3Mgd2l0aCB3cml0ZWJhY2suIE15IGV4cGVyaWVuY2Ugc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW5zdHJ1bWVudGFsLiBUaGlzIGlzIGJlY2F1c2UgSSB1bmRlcnN0YW5kIGhvdyBuZXR3b3JrIGNhY2hpbmcgd29ya3MuIEFuZCB0aHVzLCBJJ2xsIHN0YXJ0IHdpdGggdGhpcyBhc3N1bXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg2NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI0OjUxLjI3MDYxMzYwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0Njc5NjY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYWNoZWZpbGVzX2J1cnlfb2JqZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM9MzkyPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfaW52YWxpZGF0ZV9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpXFxuLS1cXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTQzNS1cXHRcXHRcXHRpZiAoIUlTX0VSUihvYmopKVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6NDM2OlxcdFxcdFxcdFxcdGNhY2hlZmlsZXNfYnVyeV9vYmplY3Qodm9sdW1lLVxcdTAwM2VjYWNoZSwgb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMtNDM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBmYW4sIG9iaixcXG4tLVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaD0yNzY9ZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaC0yNzctXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUpO1xcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaDoyNzg6ZXh0ZXJuIGludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjc5LVxcdFxcdFxcdFxcdCAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM9MjMxPXN0YXRpYyBpbnQgY2FjaGVmaWxlc191bmxpbmsoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTI2OC0gKi9cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6MjY5OmludCBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMjcwLVxcdFxcdFxcdCAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTU4OD1ib29sIGNhY2hlZmlsZXNfbG9va191cF9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNjE3LVxcdFxcdGVsc2VcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NjE4OlxcdFxcdFxcdHJldCA9IGNhY2hlZmlsZXNfYnVyeV9vYmplY3Qodm9sdW1lLVxcdTAwM2VjYWNoZSwgb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy02MTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYW4sIGRlLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTc1OD1pbnQgY2FjaGVmaWxlc19jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgc3RydWN0IGRlbnRyeSAqZGlyLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTc4NS1cXHQvKlxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo3ODY6XFx0ICogY2FjaGVmaWxlc19idXJ5X29iamVjdCgpIGV4cGVjdHMgMiByZWZlcmVuY2VzIHRvICd2aWN0aW0nLFxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy03ODctXFx0ICogYW5kIGRyb3BzIG9uZS5cXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy03ODktXFx0ZGdldCh2aWN0aW0pO1xcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo3OTA6XFx0cmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdChjYWNoZSwgTlVMTCwgZGlyLCB2aWN0aW0sXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTc5MS1cXHRcXHRcXHRcXHQgICAgIEZTQ0FDSEVfT0JKRUNUX1dBU19DVUxMRUQpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy92b2x1bWUuYz0xOD12b2lkIGNhY2hlZmlsZXNfYWNxdWlyZV92b2x1bWUoc3RydWN0IGZzY2FjaGVfdm9sdW1lICp2Y29va2llKVxcbi0tXFxuZnMvY2FjaGVmaWxlcy92b2x1bWUuYy02My1cXHRcXHRcXHRpZiAoIUlTX0VSUih2ZGVudHJ5KSlcXG5mcy9jYWNoZWZpbGVzL3ZvbHVtZS5jOjY0OlxcdFxcdFxcdFxcdGNhY2hlZmlsZXNfYnVyeV9vYmplY3QoY2FjaGUsIE5VTEwsIGNhY2hlLVxcdTAwM2VzdG9yZSxcXG5mcy9jYWNoZWZpbGVzL3ZvbHVtZS5jLTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB2ZGVudHJ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDo1My4zMTc0MTY2NjNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMDA5MDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENhY2hlZmlsZXMgSW50ZXJuYWwgTWVjaGFuaWNzKipcblxuT2theSwgc28gd2UncmUgdGFsa2luZyBhYm91dCBzb21ldGhpbmcgaW50ZXJuYWwgdG8gY2FjaGVmaWxlcywgZ290IGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBob3cgdGhlIHRlbXBvcmFyeSBmaWxlcyBhcmUgY3JlYXRlZC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBhIGZpbGUgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgY2xvc2VseSBhdCBgY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHdoZXJlIHRoZSBncm91bmR3b3JrIGlzIGxhaWQgZm9yIHRoZSBjYWNoZSBmaWxlLiBJIGV4cGVjdCB0aGVyZSdzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgaW4gdGhlcmUsIGxpa2VseSByZWxhdGVkIHRvIHNlY3VyZSBmaWxlIG5hbWluZywgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzc4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjQ6NTcuMDI3NTEwMDA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAyOTc0NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNhY2hlZmlsZXNfY3JlYXRlX3RtcGZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYz0zOTI9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19pbnZhbGlkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSlcXG4tLVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMtNDA3LVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6NDA4OlxcdG5ld19maWxlID0gY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShvYmplY3QpO1xcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMtNDA5LVxcdGlmIChJU19FUlIobmV3X2ZpbGUpKVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pbnRlcm5hbC5oPTI5NT1leHRlcm4gaW50IGNhY2hlZmlsZXNfY2hlY2tfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjk2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRpciwgY2hhciAqZmlsZW5hbWUpO1xcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaDoyOTc6ZXh0ZXJuIHN0cnVjdCBmaWxlICpjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KTtcXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjk4LWV4dGVybiBib29sIGNhY2hlZmlsZXNfY29tbWl0X3RtcGZpbGUoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTM4Nz1pbnQgY2FjaGVmaWxlc19kZWxldGVfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQwOS0gKi9cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NDEwOnN0cnVjdCBmaWxlICpjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy00MTEte1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTQ4OD1zdGF0aWMgYm9vbCBjYWNoZWZpbGVzX2NyZWF0ZV9maWxlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0KVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ5Ny1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NDk4OlxcdGZpbGUgPSBjYWNoZWZpbGVzX2NyZWF0ZV90bXBmaWxlKG9iamVjdCk7XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ5OS1cXHRpZiAoSVNfRVJSKGZpbGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNDo1OS4wMzA0OTU3NjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ5MzczOTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ2FjaGVmaWxlcyBXcml0ZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYGNhY2hlZmlsZXNgIGFuZCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdyaXRlIHByb2Nlc3MuIE15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHBpbnBvaW50aW5nIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZCBpbiB3cml0aW5nIGRhdGEuIEZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmbG93OiBgbmV0ZnNfd2JfYmVnaW5gLCBgbmV0ZnNfd2JfZW5kYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcmAsIGFuZCBpdHMgbG9ja2VkIGNvdW50ZXJwYXJ0IGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYCwgYWxvbmcgd2l0aCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGFuZCBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAuIEknbSBhbHNvIGluY2x1ZGluZyBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AgYW5kIGBleHRyYWN0X2l0ZXJfdG9fc2dgIHNpbmNlIHRoZXNlIGFyZSBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCBkdXJpbmcgdGhlIEkvTyBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHdpdGggc2NhdHRlci9nYXRoZXIgbGlzdHMuIEJlZm9yZSBtb3Zpbmcgb24sIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgYG5ldGZzX3dyaXRlX2JlZ2luYCBmdW5jdGlvbiBpcyBwcm9wZXJseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgSSdtIHdvcmtpbmcgaW4sIGJlY2F1c2UgaXQgY291bGQgcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnRleHQsIG9yIGJlIGEgbWlzc2luZyBsaW5rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQxMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNTowNi41MjQyMzg0NzZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTUxNjkxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfd3JpdGVfYmVnaW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD00NzY9VGhlcmUgaXMgYWxzbyBhIGRlcHJlY2F0ZWQgZnVuY3Rpb24gZm9yIGZpbGVzeXN0ZW1zIHRoYXQgc3RpbGwgdXNlIHRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00NzgtXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdDo0Nzk6XFx0aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDgwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxuZnMvY2VwaC9hZGRyLmM9MTg3OD1zdGF0aWMgaW50IGNlcGhfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvY2VwaC9hZGRyLmMtMTg4Ny1cXG5mcy9jZXBoL2FkZHIuYzoxODg4OlxcdHIgPSBuZXRmc193cml0ZV9iZWdpbihcXHUwMDI2Y2ktXFx1MDAzZW5ldGZzLCBmaWxlLCBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBwb3MsIGxlbiwgZm9saW9wLCBOVUxMKTtcXG5mcy9jZXBoL2FkZHIuYy0xODg5LVxcdGlmIChyIFxcdTAwM2MgMClcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz01NjE9c3RhdGljIGJvb2wgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTk1LS8qKlxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1OTY6ICogbmV0ZnNfd3JpdGVfYmVnaW4gLSBIZWxwZXIgdG8gcHJlcGFyZSBmb3Igd3JpdGluZyBbREVQUkVDQVRFRF1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTk3LSAqIEBjdHg6IFRoZSBuZXRmcyBjb250ZXh0XFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI3LSAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo2Mjg6aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02MjktXFx0XFx0ICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNC19XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjcxNTpFWFBPUlRfU1lNQk9MKG5ldGZzX3dyaXRlX2JlZ2luKTtcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzE2LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQxOD1pbnQgbmV0ZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZm9saW8gKik7XFxuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQxOTppbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICosIHN0cnVjdCBmaWxlICosXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTQyMC1cXHRcXHQgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNTowOC45MTk0MTM2ODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODkxODE5OTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQWRkaW5nIGBuZXRmc193cml0ZV9iZWdpbmAgdG8gRm9jdXMgU3ltYm9scyBhbmQgVmVyaWZ5aW5nIGBuZXRmc19wZXJmb3JtX3dyaXRlYCBFeHBvcnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBgbmV0ZnNfd3JpdGVfYmVnaW5gICppcyogZXhwb3J0ZWQuIEdvb2QsIHRoYXQgY29uZmlybXMgaXQuIEkgbmVlZCB0byBnZXQgdGhhdCBhZGRlZCB0byB0aGUgZm9jdXMgc3ltYm9scyByaWdodCBhd2F5LiBJdCdzIGNsZWFybHkgYSBrZXkgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eSwgc28gSSBuZWVkIHRvIHRyYWNrIGl0IGNsb3NlbHkuXG5cbk5vdywgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBmdW5jdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGlzIGV4cG9ydGVkLiBUaGF0J3MgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHRoaXMgYW5hbHlzaXMsIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIEkgY2FuIHdvcmsgd2l0aCBpdCwgb3IgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uLCBzbyBJJ2xsIGdvIGFoZWFkIGFuZCBjaGVjayB0aGF0IGl0J3MgZXhwb3J0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Mzc1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6MTcuODM3NjE1MDM5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk0MTk4MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3BlcmZvcm1fd3JpdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdD0zOTc9VGhlcmUgYXJlIHRocmVlIGZ1bmN0aW9ucyBmb3Igd3JpdGVzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmV0ZnNfbGlicmFyeS5yc3QtNDAwLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25ldGZzX2xpYnJhcnkucnN0OjQwMTpcXHRzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZXRmc19saWJyYXJ5LnJzdC00MDItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApO1xcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTU2MT1zdGF0aWMgYm9vbCBuZXRmc19za2lwX2ZvbGlvX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgc2l6ZV90IGxlbixcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02MjQtICpcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NjI1OiAqIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIGRlcHJlY2F0ZWQgYW5kIG5ldGZzX3BlcmZvcm1fd3JpdGUoKVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02MjYtICogdXNlZCBpbnN0ZWFkLlxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz0zNz12b2lkIG5ldGZzX3VwZGF0ZV9pX3NpemUoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTczLS8qKlxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NzQ6ICogbmV0ZnNfcGVyZm9ybV93cml0ZSAtIENvcHkgZGF0YSBpbnRvIHRoZSBwYWdlY2FjaGUuXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy03NS0gKiBAaW9jYjogVGhlIG9wZXJhdGlvbiBwYXJhbWV0ZXJzXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTg2LSAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6ODc6c3NpemVfdCBuZXRmc19wZXJmb3JtX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtODgtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRmc19ncm91cCAqbmV0ZnNfZ3JvdXApXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0Mi19XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0NDM6RVhQT1JUX1NZTUJPTChuZXRmc19wZXJmb3JtX3dyaXRlKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0NC1cXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9NDY4PXNzaXplX3QgbmV0ZnNfYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4My1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ4NDpcXHRyZXR1cm4gbmV0ZnNfcGVyZm9ybV93cml0ZShpb2NiLCBmcm9tLCBuZXRmc19ncm91cCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy00ODUtfVxcbi0tXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmM9MTk9c3RhdGljIHZvaWQgbmV0ZnNfcGdwcml2Ml9jb3B5X2ZvbGlvKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpjcmVxLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMjctXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmM6Mjg6XFx0LyogbmV0ZnNfcGVyZm9ybV93cml0ZSgpIG1heSBzaGlmdCBpX3NpemUgYXJvdW5kIHRoZSBwYWdlIG9yIGZyb20gb3V0XFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMjktXFx0ICogb2YgdGhlIHBhZ2UgdG8gYmV5b25kIGl0LCBidXQgY2Fubm90IG1vdmUgaV9zaXplIGludG8gb3IgdGhyb3VnaCB0aGVcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9MzIwPXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTMzOS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjM0MDpcXHQvKiBuZXRmc19wZXJmb3JtX3dyaXRlKCkgbWF5IHNoaWZ0IGlfc2l6ZSBhcm91bmQgdGhlIHBhZ2Ugb3IgZnJvbSBvdXRcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTM0MS1cXHQgKiBvZiB0aGUgcGFnZSB0byBiZXlvbmQgaXQsIGJ1dCBjYW5ub3QgbW92ZSBpX3NpemUgaW50byBvciB0aHJvdWdoIHRoZVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTIwMj1lbnVtIG5ldGZzX2lvX29yaWdpbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtMjExLVxcdE5FVEZTX1dSSVRFQkFDS19TSU5HTEUsXFx0XFx0LyogVGhpcyBtb25vbGl0aGljIHdyaXRlIHdhcyB0cmlnZ2VyZWQgYnkgd3JpdGVwYWdlcyAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDoyMTI6XFx0TkVURlNfV1JJVEVUSFJPVUdILFxcdFxcdC8qIFRoaXMgd3JpdGUgd2FzIG1hZGUgYnkgbmV0ZnNfcGVyZm9ybV93cml0ZSgpICovXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oLTIxMy1cXHRORVRGU19VTkJVRkZFUkVEX1dSSVRFLFxcdFxcdC8qIFRoaXMgaXMgYW4gdW5idWZmZXJlZCB3cml0ZSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTM5Nj1zc2l6ZV90IG5ldGZzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC0zOTgtLyogSGlnaC1sZXZlbCB3cml0ZSBBUEkgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZzLmg6Mzk5OnNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDAwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6MTkuOTMxODIwNDQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjczNzA5MTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBZGRpbmcgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIHRvIHRoZSBGb2N1cyBMaXN0KipcblxuQWxyaWdodCwgc28gYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgY29uZmlybXMgaXQncyBhIGxlZ2l0aW1hdGUgZW50cnkgcG9pbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBgbmV0ZnNgIGNvbnRleHQuIFRoZXJlZm9yZSwgaXQgbWFrZXMgcGVyZmVjdCBzZW5zZSB0byBhZGQgdGhpcyB0byB0aGUgZm9jdXMgc3ltYm9scy4gVGhpcyB3aWxsIGFsbG93IGZvciBtb3JlIHRhcmdldGVkIGFuZCBlZmZpY2llbnQgZGVidWdnaW5nIG9yIGFuYWx5c2lzLCBhbmQgd2lsbCBhbGxvdyBtZSB0byB0cmFjayB0aGUgY2FsbCBwYXRoIHByb3Blcmx5LiBJJ2xsIG1ha2Ugc3VyZSB0byBhZGQgaXQgdG8gdGhlIGZvY3VzIGxpc3QgaW1tZWRpYXRlbHkuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGBuZXRmc193cml0ZV9jb2xsZWN0aW9uYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB3cml0ZSBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIG9uIGEgbW9yZSBncmFudWxhciBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNTozMy4yMDU1MzQ2NDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjY1OTkyMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfd3JpdGVfY29sbGVjdGlvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9pbnRlcm5hbC5oPTE5Mz1pbnQgbmV0ZnNfZm9saW9fd3JpdHRlbl9iYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmZzL25ldGZzL2ludGVybmFsLmg6MTk0OmJvb2wgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSk7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDoxOTU6dm9pZCBuZXRmc193cml0ZV9jb2xsZWN0aW9uX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbmZzL25ldGZzL2ludGVybmFsLmgtMTk2LVxcbi0tXFxuZnMvbmV0ZnMvbWlzYy5jPTUxMz1zc2l6ZV90IG5ldGZzX3dhaXRfZm9yX3dyaXRlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxKVxcbmZzL25ldGZzL21pc2MuYy01MTQte1xcbmZzL25ldGZzL21pc2MuYzo1MTU6XFx0cmV0dXJuIG5ldGZzX3dhaXRfZm9yX2luX3Byb2dyZXNzKHJyZXEsIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb24pO1xcbmZzL25ldGZzL21pc2MuYy01MTYtfVxcbi0tXFxuZnMvbmV0ZnMvbWlzYy5jPTU2Mj12b2lkIG5ldGZzX3dhaXRfZm9yX3BhdXNlZF93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSlcXG5mcy9uZXRmcy9taXNjLmMtNTYzLXtcXG5mcy9uZXRmcy9taXNjLmM6NTY0OlxcdHJldHVybiBuZXRmc193YWl0X2Zvcl9wYXVzZShycmVxLCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKTtcXG5mcy9uZXRmcy9taXNjLmMtNTY1LX1cXG4tLVxcbmZzL25ldGZzL29iamVjdHMuYz0xOD1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL29iamVjdHMuYy02Ni1cXHR9IGVsc2Uge1xcbmZzL25ldGZzL29iamVjdHMuYzo2NzpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnJyZXEtXFx1MDAzZXdvcmssIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb25fd29ya2VyKTtcXG5mcy9uZXRmcy9vYmplY3RzLmMtNjgtXFx0fVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jPTIwMD1zdGF0aWMgdm9pZCBuZXRmc19jb2xsZWN0X3dyaXRlX3Jlc3VsdHMoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMtMzYwLSAqL1xcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYzozNjE6Ym9vbCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy0zNjIte1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQzNS1cXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6NDM2OnZvaWQgbmV0ZnNfd3JpdGVfY29sbGVjdGlvbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy00Mzcte1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQ0MS1cXHRpZiAobmV0ZnNfY2hlY2tfcnJlcV9pbl9wcm9ncmVzcyhycmVxKSkge1xcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYzo0NDI6XFx0XFx0aWYgKG5ldGZzX3dyaXRlX2NvbGxlY3Rpb24ocnJlcSkpXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQ0My1cXHRcXHRcXHQvKiBEcm9wIHRoZSByZWYgZnJvbSB0aGUgSU5fUFJPR1JFU1MgZmxhZy4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6MzUuMzMyMTQwNTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA0MDU2MjE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTmV0ZnMgV3JpdGUtVGhyb3VnaCBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhpcyBuZXRmcyBpc3N1ZS4gSXQncyBvYnZpb3VzbHkgaW50ZXJuYWwgdG8gdGhlIGBuZXRmc2AgY29kZSBiYXNlIOKAkyBtYWtlcyBzZW5zZS4gTGV0J3Mgc2VlLi4uIHRoZSBwcm9ibGVtIGxpa2VseSBjZW50ZXJzIGFyb3VuZCB0aGUgd3JpdGUtdGhyb3VnaCBmdW5jdGlvbmFsaXR5LiBNeSBmaXJzdCBtb3ZlIHdpbGwgYmUgdG8gZXhhbWluZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoYCBhbmQgYG5ldGZzX2VuZF93cml0ZXRocm91Z2hgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgYW5kIGV4aXQgcG9pbnRzIG9mIHRoZSB3cml0ZXRocm91Z2ggb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQsIHdoYXQgdGhleSdyZSBkb2luZyB3aGVuIHRoZXkncmUgY2FsbGVkLCBhbmQgd2hhdCBzdGF0ZSB0aGV5IGFyZSBjaGFuZ2luZy4gSSBuZWVkIHRvIHNlZSBpZiB0aGUgd3JpdGUtdGhyb3VnaCBmbG93IGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIEknbGwgcHJvYmFibHkgbG9vayBhdCB3aGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCwgYW5kIHdoZXJlIHRoZXkncmUgYmVpbmcgY2FsbGVkIGZyb20gdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcwOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI1OjQ0LjM3MjcwNjAwMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NjU0MzYwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19iZWdpbl93cml0ZXRocm91Z2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz04Nz1zc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTExOC1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjExOTpcXHRcXHR3cmVxID0gbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKGlvY2IsIGl0ZXItXFx1MDAzZWNvdW50KTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTEyMC1cXHRcXHRpZiAoSVNfRVJSKHdyZXEpKSB7XFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIxMj1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4tLVxcbmZzL25ldGZzL2ludGVybmFsLmgtMjE0LVxcdFxcdFxcdCAgIGxvZmZfdCBzdGFydCwgc2l6ZV90IGxlbiwgYm9vbCB0b19lb2YpO1xcbmZzL25ldGZzL2ludGVybmFsLmg6MjE1OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKTtcXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNi1pbnQgbmV0ZnNfYWR2YW5jZV93cml0ZXRocm91Z2goc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MTI9RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjE2LSAqL1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjE3OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6NDYuNDI5MjgwODM5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjc4Njk1NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0RlMgV3JpdGViYWNrIE1lY2hhbmlzbSoqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZy4gSSdtIGRlZXAgaW5zaWRlIHRoZSBOZXRGUyB3cml0ZWJhY2sgcHJvY2VzcyByaWdodCBub3cuIE15IGZvY3VzIGlzIGVudGlyZWx5IG9uIHRoZXNlIGludGVybmFsIHN5bWJvbHM6IGBuZXRmc193Yl9iZWdpbmAsIGBuZXRmc193Yl9lbmRgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLCBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AsIGFuZCBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gVGhlc2UgYXJlIHRoZSBrZXkgcGxheWVycyBpbiBob3cgTmV0RlMgaGFuZGxlcyB3cml0aW5nIGRhdGEuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBtZWNoYW5pY3Mgb2YgdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBuZXRmc193Yl9iZWdpbmAgYW5kIGBuZXRmc193Yl9lbmRgIGFyZSBleHBvcnRlZC4gVGhpcyBjb25maXJtcyB0aGUgd3JpdGViYWNrIHByb2Nlc3MgaXMgYmVpbmcgY2FsbGVkIGNvcnJlY3RseS4gVGhhdCB3aWxsIHByb3ZpZGUgYSBnb29kIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRhdGEgaXMgaGFuZGxlZCBhbmQgZmx1c2hlZCB0byBzdG9yYWdlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHdyaXRlYmFjayBwYXRoIGFuZCBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZCwgYW5kIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNzAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6NTYuNzA3OTc5MTY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk2NjExNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3diX2JlZ2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9zeW1saW5rLmM9MjM0PWludCBhZnNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvYWZzL3N5bWxpbmsuYy0yNTctXFx0aWYgKHJldCA9PSAwKSB7XFxuZnMvYWZzL3N5bWxpbmsuYzoyNTg6XFx0XFx0bmV0ZnNfd2JfYmVnaW4oXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcywgZmFsc2UpO1xcbmZzL2Fmcy9zeW1saW5rLmMtMjU5LVxcdFxcdG5ldGZzX2ZyZWVfZm9saW9xX2J1ZmZlcih2bm9kZS1cXHUwMDNlZGlyZWN0b3J5KTtcXG4tLVxcbmZzL25ldGZzL2xvY2tpbmcuYz0yMTA9RVhQT1JUX1NZTUJPTChuZXRmc19lbmRfaW9fZGlyZWN0KTtcXG4tLVxcbmZzL25ldGZzL2xvY2tpbmcuYy0yMTQtICovXFxuZnMvbmV0ZnMvbG9ja2luZy5jOjIxNTpzdGF0aWMgYm9vbCBuZXRmc193Yl9iZWdpbl93YWl0KHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eClcXG5mcy9uZXRmcy9sb2NraW5nLmMtMjE2LXtcXG4tLVxcbmZzL25ldGZzL2xvY2tpbmcuYy0yNDUtLyoqXFxuZnMvbmV0ZnMvbG9ja2luZy5jOjI0NjogKiBuZXRmc193Yl9iZWdpbiAtIEJlZ2luIHdyaXRlYmFjaywgd2FpdGluZyBpZiBuZWVkIGJlXFxuZnMvbmV0ZnMvbG9ja2luZy5jLTI0Ny0gKiBAaWN0eDogVGhlIGlub2RlIHRvIGdldCB3cml0ZWJhY2sgYWNjZXNzIG9uXFxuLS1cXG5mcy9uZXRmcy9sb2NraW5nLmMtMjU4LSAqL1xcbmZzL25ldGZzL2xvY2tpbmcuYzoyNTk6Ym9vbCBuZXRmc193Yl9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgsIGJvb2wgbm93YWl0KVxcbmZzL25ldGZzL2xvY2tpbmcuYy0yNjAte1xcbi0tXFxuZnMvbmV0ZnMvbG9ja2luZy5jLTI2Ny1cXHRuZXRmc19zdGF0KFxcdTAwMjZuZXRmc19uX3diX2xvY2tfd2FpdCk7XFxuZnMvbmV0ZnMvbG9ja2luZy5jOjI2ODpcXHRyZXR1cm4gbmV0ZnNfd2JfYmVnaW5fd2FpdChpY3R4KTtcXG5mcy9uZXRmcy9sb2NraW5nLmMtMjY5LX1cXG5mcy9uZXRmcy9sb2NraW5nLmM6MjcwOkVYUE9SVF9TWU1CT0wobmV0ZnNfd2JfYmVnaW4pO1xcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzEtXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTU0Nj1pbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNTUzLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NTU0OlxcdGlmICghbmV0ZnNfd2JfYmVnaW4oaWN0eCwgd2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSlcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU1NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjE3PXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MjEtXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MjI6XFx0bmV0ZnNfd2JfYmVnaW4oaWN0eCwgZmFsc2UpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjIzLVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz04MzY9aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg0OC1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjg0OTpcXHRpZiAoIW5ldGZzX3diX2JlZ2luKGljdHgsIHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkpIHtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg1MC1cXHRcXHQvKiBUaGUgVkZTIHdpbGwgaGF2ZSB1bmRpcnRpZWQgdGhlIGlub2RlLiAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQ2NT12b2lkIG5ldGZzX2ZyZWVfZm9saW9xX2J1ZmZlcihzdHJ1Y3QgZm9saW9fcXVldWUgKmZxKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00NjctLyogV3JpdGViYWNrIGV4Y2x1c2lvbiBBUEkuICovXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oOjQ2ODpib29sIG5ldGZzX3diX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCwgYm9vbCBub3dhaXQpO1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaC00Njktdm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjU6NTguODA0NjAyNzUzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzI4MDcyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4cG9ydGVkIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZDogdGhlc2UgZnVuY3Rpb25zICphcmUqIGV4cG9ydGVkLiBHb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdGVkIGJhc2VkIG9uIHRoZSBicm9hZGVyIHN5c3RlbSBkZXNpZ24uXG5cbk5vdywgbGV0IG1lIHNvbGlkaWZ5IHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0J3M6XG5cbiogICBgbmV0ZnNfd2JfYmVnaW5gXG4qICAgYG5ldGZzX3diX2VuZGBcbiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYFxuKiAgIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYFxuKiAgIGBuZXRmc193cml0ZXBhZ2VzYFxuKiAgIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYFxuKiAgIGBuZXRmc193cml0ZV9iZWdpbmBcbiogICBgbmV0ZnNfcGVyZm9ybV93cml0ZWBcbiogICBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2BcbiogICBgZXh0cmFjdF9pdGVyX3RvX3NnYFxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZXhwb3J0IHN0YXR1cyBvZiBgbmV0ZnNfd2JfZW5kYC4gUmVkdW5kYW5jeSBpcyBrZXksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY3JpdGljYWwgc3lzdGVtIGNhbGxzLiBUaGF0J3MgYSBrZXkgcG9pbnQgdGhhdCB3aWxsIGFsd2F5cyBiZSBpbiB0aGUgYmFjayBvZiBteSBtaW5kIHdoZW4gSSBldmFsdWF0ZSBzeXN0ZW0gZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcyMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjowMy41Mzc0MTI4MTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjEwOTM3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfd2JfZW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9zeW1saW5rLmM9MjM0PWludCBhZnNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvYWZzL3N5bWxpbmsuYy0yNjEtXFx0XFx0dm5vZGUtXFx1MDAzZWRpcmVjdG9yeV9zaXplID0gMDtcXG5mcy9hZnMvc3ltbGluay5jOjI2MjpcXHRcXHRuZXRmc193Yl9lbmQoXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcyk7XFxuZnMvYWZzL3N5bWxpbmsuYy0yNjMtXFx0fSBlbHNlIGlmIChyZXQgPT0gMSkge1xcbi0tXFxuZnMvbmV0ZnMvbG9ja2luZy5jPTI3MD1FWFBPUlRfU1lNQk9MKG5ldGZzX3diX2JlZ2luKTtcXG5mcy9uZXRmcy9sb2NraW5nLmMtMjcxLVxcbmZzL25ldGZzL2xvY2tpbmcuYzoyNzI6LyogbmV0ZnNfd2JfZW5kIC0gRW5kIHdyaXRlYmFja1xcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzMtICogQGljdHg6IFRoZSBpbm9kZSB3ZSBoYXZlIHdyaXRlYmFjayBhY2Nlc3MgdG9cXG4tLVxcbmZzL25ldGZzL2xvY2tpbmcuYy0yNzYtICovXFxuZnMvbmV0ZnMvbG9ja2luZy5jOjI3Nzp2b2lkIG5ldGZzX3diX2VuZChzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmljdHgpXFxuZnMvbmV0ZnMvbG9ja2luZy5jLTI3OC17XFxuLS1cXG5mcy9uZXRmcy9sb2NraW5nLmMtMjk5LX1cXG5mcy9uZXRmcy9sb2NraW5nLmM6MzAwOkVYUE9SVF9TWU1CT0wobmV0ZnNfd2JfZW5kKTtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYz0zNjE9Ym9vbCBuZXRmc193cml0ZV9jb2xsZWN0aW9uKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTQxNC1cXHRjYXNlIE5FVEZTX1dSSVRFVEhST1VHSDpcXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6NDE1OlxcdFxcdG5ldGZzX3diX2VuZChpY3R4KTtcXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMtNDE2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz01NDY9aW50IG5ldGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYwNy1vdXQ6XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MDg6XFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjA5LVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCBlcnJvcik7XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTYxNz1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjI2LVxcdGlmIChJU19FUlIod3JlcSkpIHtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYyNzpcXHRcXHRuZXRmc193Yl9lbmQoaWN0eCk7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MjgtXFx0XFx0cmV0dXJuIHdyZXE7XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTgzNj1pbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODk2LWNvdWxkbnRfc3RhcnQ6XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4OTc6XFx0bmV0ZnNfd2JfZW5kKGljdHgpO1xcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODk4LVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmcy5oPTQ2OD1ib29sIG5ldGZzX3diX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqaWN0eCwgYm9vbCBub3dhaXQpO1xcbmluY2x1ZGUvbGludXgvbmV0ZnMuaDo0Njk6dm9pZCBuZXRmc193Yl9lbmQoc3RydWN0IG5ldGZzX2lub2RlICppY3R4KTtcXG5pbmNsdWRlL2xpbnV4L25ldGZzLmgtNDcwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjowNS41NTg1MTQ4MDZaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NDE4NzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgZm9yIEV4cG9ydGVkIFN5bWJvbHMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBjaGVjayBjb25maXJtcyB0aGF0J3MgZXhwb3J0ZWQuIE5vdywgbGV0J3MgbW92ZSBvbiB0byB0aGUgbmV4dCBpdGVtIG9uIG15IGxpc3QuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBgY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlYCBpcyBhbHNvIGV4cG9ydGVkLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQ7IGtub3dpbmcgdGhlIGV4cG9ydCBzdGF0dXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGNvbXBvbmVudHMgaW50ZXJhY3QgYW5kIHdoZXRoZXIgSSBjYW4gcmVseSBvbiBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4gdGhlIGNvbnRleHQgSSdtIGludmVzdGlnYXRpbmcuIEdvdHRhIGJlIG1ldGhvZGljYWwgYWJvdXQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjowOS43MDI3MDU0MjdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTM3NDE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvbmFtZWkuYz00Nz1zdGF0aWMgdm9pZCBfX2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01My1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NTQ6c3RhdGljIHZvaWQgY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTY2PXZvaWQgY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTcxLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo3MjpcXHRjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBpbm9kZSk7XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTczLVxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTIyMD12b2lkIGNhY2hlZmlsZXNfcHV0X2RpcmVjdG9yeShzdHJ1Y3QgZGVudHJ5ICpkaXIpXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMjIyLVxcdGlmIChkaXIpIHtcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6MjIzOlxcdFxcdGNhY2hlZmlsZXNfZG9fdW5tYXJrX2lub2RlX2luX3VzZShOVUxMLCBkX2lub2RlKGRpcikpO1xcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy0yMjQtXFx0XFx0ZHB1dChkaXIpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTI2OT1pbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMzc3LVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzozNzg6XFx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZF9pbm9kZShyZXApKTtcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtMzc5LVxcdGVuZF9yZW5hbWluZyhcXHUwMDI2cmQpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTQxMD1zdHJ1Y3QgZmlsZSAqY2FjaGVmaWxlc19jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdClcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy00NzctZXJyX3VudXNlOlxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo0Nzg6XFx0Y2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgZmlsZV9pbm9kZShmaWxlKSk7XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTQ3OS1cXHRmcHV0KGZpbGUpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTUxMz1zdGF0aWMgYm9vbCBjYWNoZWZpbGVzX29wZW5fZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01NzktZXJyb3I6XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjU4MDpcXHRjYWNoZWZpbGVzX2RvX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBkX2lub2RlKGRlbnRyeSkpO1xcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy01ODEtXFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjoxMi4wMTY0NTI0NzdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4NzI3MTAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFN0YWduYW50IFNpdHVhdGlvbioqXG5cbkFscmlnaHQsIHRoaXMgZmVlbHMuLi4gc3R1Y2suIFRoaW5ncyBhcmVuJ3QgbW92aW5nLiBNeSBndXQgdGVsbHMgbWUgc29tZXRoaW5nIGlzIHN0YXRpYywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqLiBMZXQncyB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIGN1bHByaXQgaW4gdGhlIGNhY2hpbmcgbGF5ZXIuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUncyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBjb250cmlidXRpbmcgdG8gdGhpcyBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4cG9ydCBzdGF0dXMgb2YgYGNhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZWAuIElzIGl0IGV2ZW4gdmlzaWJsZSB0byB0aGUga2VybmVsIG1vZHVsZT8gVGhhdCBjb3VsZCBlYXNpbHkgYmUgdGhlIHNvdXJjZSBvZiBteSBwcm9ibGVtLCBpZiBJIGNhbid0IGFjY2VzcyBpdC4gVGhpcyBjb3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE4MjIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQxNDoyNjoxOC4wMDM3Mjc0MTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTI5Nzk0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM9MzI4PXN0YXRpYyB2b2lkIGNhY2hlZmlsZXNfY2xlYW5fdXBfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0zNDYtXFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYzozNDc6XFx0Y2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKG9iamVjdCwgb2JqZWN0LVxcdTAwM2VmaWxlKTtcXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTM0OC1cXG4tLVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaD0yNzE9ZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZWZpbGVzX29iamVjdF9qYXI7XFxuLS1cXG5mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgtMjc1LSAqL1xcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaDoyNzY6ZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaC0yNzctXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUpO1xcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jPTMzPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfbWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNDYtICovXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjQ3OnN0YXRpYyB2b2lkIF9fY2FjaGVmaWxlc191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy00OC1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM9NTQ9c3RhdGljIHZvaWQgY2FjaGVmaWxlc19kb191bm1hcmtfaW5vZGVfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTU3LVxcdGlub2RlX2xvY2soaW5vZGUpO1xcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYzo1ODpcXHRfX2NhY2hlZmlsZXNfdW5tYXJrX2lub2RlX2luX3VzZShvYmplY3QsIGlub2RlKTtcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTktXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYy02NS0gKi9cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmM6NjY6dm9pZCBjYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jLTY3LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2NhY2hlZmlsZXMvbmFtZWkuYz01MTM9c3RhdGljIGJvb2wgY2FjaGVmaWxlc19vcGVuX2ZpbGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXFxuLS1cXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTcwLVxcdGZzY2FjaGVfY29va2llX2xvb2t1cF9uZWdhdGl2ZShvYmplY3QtXFx1MDAzZWNvb2tpZSk7XFxuZnMvY2FjaGVmaWxlcy9uYW1laS5jOjU3MTpcXHRjYWNoZWZpbGVzX3VubWFya19pbm9kZV9pbl91c2Uob2JqZWN0LCBmaWxlKTtcXG5mcy9jYWNoZWZpbGVzL25hbWVpLmMtNTcyLVxcdGZwdXQoZmlsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDE0OjI2OjIwLjExNjcxNDE1NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjkzMTUzMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDYWNoZWZpbGVzIEludGVncmF0aW9uIGluIE5ldEZTKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgY2FjaGVmaWxlcyBpbnRlcmFjdHMgd2l0aCBuZXRmcyBpbnRlcm5hbGx5LiBUaGUgY29yZSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgdGhlc2Ugd3JpdGUtcmVsYXRlZCBmdW5jdGlvbnM6IGBuZXRmc193Yl9iZWdpbmAsIGBuZXRmc193Yl9lbmRgLCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyYCwgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLCBgbmV0ZnNfd3JpdGVwYWdlc2AsIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLCBgaW92X2l0ZXJfZXh0cmFjdF9wYWdlc2AsIGFuZCBgZXh0cmFjdF9pdGVyX3RvX3NnYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCdzIHJlbGV2YW50IHRvIHRoZSBjYWNoZWZpbGVzIGludGVncmF0aW9uLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgaWYgYG5ldGZzX3dyaXRlX2JlZ2luYCBpcyBhY3R1YWxseSBzdGlsbCBpbiB1c2UsIGV2ZW4gdGhvdWdoIGl0J3MgbWFya2VkIGFzIGRlcHJlY2F0ZWQuIEJldHRlciBzYWZlIHRoYW4gc29ycnkg4oCTIGl0J3MgZ29pbmcgb24gdGhlIGxpc3QuXG5cbk5vdywgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIHNlZWluZyBgTkVURlNfU1VQUE9SVGAsIGBGU0NBQ0hFYCwgYENBQ0hFRklMRVNgLCBhbmQgYEFGU19GU2AgYXMgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEknbGwgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBgQ09ORklHX0ZTQ0FDSEVfU1RBVFNgIGlzbid0IG5lZWRlZC4gV2hhdCBhYm91dCBgQ09ORklHX0NBQ0hFRklMRVNfT05ERU1BTkRgPyBOYWgsIGRvZXNuJ3Qgc2VlbSBkaXJlY3RseSByZWxldmFudCB0byB0aGlzIHNwZWNpZmljIGludGVncmF0aW9uIHBvaW50LlxuXG5BbHJpZ2h0LCBhIHF1aWNrIHNhbml0eSBjaGVjazogY2FuIEkgZ2V0IGF3YXkgd2l0aCBqdXN0IGVuYWJsaW5nIGBORVRGU19TVVBQT1JUYD8gWWVzLCBsb29rcyBsaWtlIHRoYXQncyBzdWZmaWNpZW50LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIGRvY3VtZW50IHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjY2MCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMTQ6MjY6MjguODA5ODY5Njc2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3NzkxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZTX1NVUFBPUlRcIixcbiAgICBcIkZTQ0FDSEVcIixcbiAgICBcIkNBQ0hFRklMRVNcIixcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3diX2JlZ2luXCIsXG4gICAgXCJuZXRmc193Yl9lbmRcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlclwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiLFxuICAgIFwibmV0ZnNfd3JpdGVfYmVnaW5cIixcbiAgICBcIm5ldGZzX3BlcmZvcm1fd3JpdGVcIixcbiAgICBcImlvdl9pdGVyX2V4dHJhY3RfcGFnZXNcIixcbiAgICBcImV4dHJhY3RfaXRlcl90b19zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0ZnMgbG9naWMsIGluY2x1ZGluZyB3cml0ZWJhY2sgbG9ja2luZywgdW5idWZmZXJlZCB3cml0ZXMsIGFuZCBpdGVyYXRvciBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gSXQgYWxzbyBhZmZlY3RzIGNhY2hlZmlsZXMgYW5kIEFGUy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBzbyB0aGV5IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURlNfU1VQUE9SVFwiLFxuICAgIFwiRlNDQUNIRVwiLFxuICAgIFwiQ0FDSEVGSUxFU1wiLFxuICAgIFwiQUZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZnNfd2JfYmVnaW5cIixcbiAgICBcIm5ldGZzX3diX2VuZFwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gICAgXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gICAgXCJuZXRmc193cml0ZWJhY2tfc2luZ2xlXCIsXG4gICAgXCJuZXRmc193cml0ZV9iZWdpblwiLFxuICAgIFwibmV0ZnNfcGVyZm9ybV93cml0ZVwiLFxuICAgIFwiaW92X2l0ZXJfZXh0cmFjdF9wYWdlc1wiLFxuICAgIFwiZXh0cmFjdF9pdGVyX3RvX3NnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXRmcyBsb2dpYywgaW5jbHVkaW5nIHdyaXRlYmFjayBsb2NraW5nLCB1bmJ1ZmZlcmVkIHdyaXRlcywgYW5kIGl0ZXJhdG9yIGV4dHJhY3Rpb24gZnVuY3Rpb25zLiBJdCBhbHNvIGFmZmVjdHMgY2FjaGVmaWxlcyBhbmQgQUZTLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHNvIHRoZXkgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[1] Phase: Succeeded StartedAt: 2026-06-25 14:26:40 +0000 UTC FinishedAt: 2026-06-25 14:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 14:26:40 +0000 UTC FinishedAt: 2026-06-25 14:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2] Phase: Succeeded StartedAt: 2026-06-25 14:26:40 +0000 UTC FinishedAt: 2026-06-25 18:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-25 14:26:40 +0000 UTC FinishedAt: 2026-06-25 18:26:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-25 14:26:40 +0000 UTC FinishedAt: 2026-06-25 14:26:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-25 14:26:40 +0000 UTC FinishedAt: 2026-06-25 14:26:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowg2n58/series-workflowg2n58-convert-artifact-377580290/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-25 14:26:50 +0000 UTC FinishedAt: 2026-06-25 14:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-25 14:26:50 +0000 UTC FinishedAt: 2026-06-25 14:50:58 +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:*46c90414-aaa4-4ffa-9090-fb28fd660659,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-workflowg2n58/series-workflowg2n58-convert-artifact-377580290/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": "339baae2-1b07-47e7-bcc9-2067a0269fe1", "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-workflowg2n58/series-workflowg2n58-build-action-2053175744/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-25 14:26:50 +0000 UTC FinishedAt: 2026-06-25 14:49:35 +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:*46c90414-aaa4-4ffa-9090-fb28fd660659,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-workflowg2n58/series-workflowg2n58-convert-artifact-377580290/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": "339baae2-1b07-47e7-bcc9-2067a0269fe1", "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-workflowg2n58/series-workflowg2n58-build-action-2053175744/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-25 14:50:58 +0000 UTC FinishedAt: 2026-06-25 14:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-25 14:50:58 +0000 UTC FinishedAt: 2026-06-25 14:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-25 14:50:58 +0000 UTC FinishedAt: 2026-06-25 14:51:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-25 14:50:58 +0000 UTC FinishedAt: 2026-06-25 14:51:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowg2n58/series-workflowg2n58-convert-artifact-1899053405/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-25 14:51:08 +0000 UTC FinishedAt: 2026-06-25 14:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-25 14:51:08 +0000 UTC FinishedAt: 2026-06-25 14:53:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*339baae2-1b07-47e7-bcc9-2067a0269fe1,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-workflowg2n58/series-workflowg2n58-build-action-2053175744/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-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-25 14:53:21 +0000 UTC FinishedAt: 2026-06-25 14:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-25 14:53:21 +0000 UTC FinishedAt: 2026-06-25 14:53:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-25 14:53:21 +0000 UTC FinishedAt: 2026-06-25 15:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-25 14:53:21 +0000 UTC FinishedAt: 2026-06-25 15:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*46c90414-aaa4-4ffa-9090-fb28fd660659,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-workflowg2n58/series-workflowg2n58-convert-artifact-1899053405/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": "315d587f-ffd8-4cd4-a61e-9bfa240c4497", "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-workflowg2n58/series-workflowg2n58-build-action-2626060857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-25 14:53:21 +0000 UTC FinishedAt: 2026-06-25 15:19:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*46c90414-aaa4-4ffa-9090-fb28fd660659,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-workflowg2n58/series-workflowg2n58-convert-artifact-1899053405/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": "315d587f-ffd8-4cd4-a61e-9bfa240c4497", "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-workflowg2n58/series-workflowg2n58-build-action-2626060857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-25 15:20:13 +0000 UTC FinishedAt: 2026-06-25 15:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-25 15:20:13 +0000 UTC FinishedAt: 2026-06-25 15:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-25 15:20:13 +0000 UTC FinishedAt: 2026-06-25 15:22:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-25 15:20:13 +0000 UTC FinishedAt: 2026-06-25 15:22:14 +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:*315d587f-ffd8-4cd4-a61e-9bfa240c4497,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-workflowg2n58/series-workflowg2n58-build-action-2626060857/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-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-25 15:22:23 +0000 UTC FinishedAt: 2026-06-25 18:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-25 15:22:23 +0000 UTC FinishedAt: 2026-06-25 18:26:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"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:*339baae2-1b07-47e7-bcc9-2067a0269fe1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*315d587f-ffd8-4cd4-a61e-9bfa240c4497,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-workflowg2n58/series-workflowg2n58-build-action-2053175744/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-workflowg2n58/series-workflowg2n58-build-action-2626060857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-25 15:22:23 +0000 UTC FinishedAt: 2026-06-25 15:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-25 15:22:23 +0000 UTC FinishedAt: 2026-06-25 15:22:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"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-workflowg2n58/series-workflowg2n58-convert-artifact-3886580194/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-25 15:22:23 +0000 UTC FinishedAt: 2026-06-25 15:22:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-25 15:22:23 +0000 UTC FinishedAt: 2026-06-25 15:22:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-25 15:22:23 +0000 UTC FinishedAt: 2026-06-25 15:22:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-25 15:22:33 +0000 UTC FinishedAt: 2026-06-25 18:26:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg2n58[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_wb_begin","netfs_wb_end","netfs_unbuffered_write_iter","netfs_unbuffered_write_iter_locked","netfs_writepages","netfs_writeback_single","netfs_write_begin","netfs_perform_write","iov_iter_extract_pages","extract_iter_to_sg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7a0e692a0381254b2f77c54dec100cd3325a6fdf","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFS_SUPPORT","FSCACHE","CACHEFILES","AFS_FS"],"series_id":"a4c0ac1a-9b44-4440-8da4-778c3b9ce0a0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-25 15:22:33 +0000 UTC FinishedAt: 2026-06-25 18:26:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*339baae2-1b07-47e7-bcc9-2067a0269fe1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*315d587f-ffd8-4cd4-a61e-9bfa240c4497,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-workflowg2n58/series-workflowg2n58-build-action-2053175744/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-workflowg2n58/series-workflowg2n58-build-action-2626060857/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-workflowg2n58/series-workflowg2n58-convert-artifact-3886580194/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,}