Name: series-workflowgx8vn Phase: Succeeded StartedAt: 2026-09-14 12:49:38 +0000 UTC FinishedAt: 2026-09-14 18:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[0] Phase: Succeeded StartedAt: 2026-09-14 12:49:38 +0000 UTC FinishedAt: 2026-09-14 13:33:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 12:49:38 +0000 UTC FinishedAt: 2026-09-14 13:33:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_TABLES" ], "series_id": "7adcbe12-088a-4857-aff3-1fdd3dd2fc59" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_setelem_catchall_insert", "nft_setelem_catchall_deactivate", "nft_setelem_insert", "nft_setelem_deactivate", "nft_add_set_elem", "nft_del_setelem" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "base_tree": "nf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1faW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2FkZF9zZXRfZWxlbSYjMzQ7LAogICAgJiMzNDtuZnRfZGVsX3NldGVsZW0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGV4cGlyYXRpb24gY2hlY2tzIHZpYSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHRvIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AsIG1hdGNoaW5nIHRoZSBleHBpcmF0aW9uIGNoZWNrIHNlbWFudGljcyB1c2VkIGluIG90aGVyIHNldCB0eXBlcyAoc3VjaCBhcyBoYXNoLCByYnRyZWUsIGFuZCBwaXBhcG8pLlxuXG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOiBUaGUgbG9jYWwgdmFyaWFibGUgYHRzdGFtcGAgaXMgYW4gZXhwbGljaXRseSBpbml0aWFsaXplZCA2NC1iaXQgdGltZXN0YW1wIChgdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldClgKS4gVGhlIHNldCBlbGVtZW50IGV4dGVuc2lvbiBpbnNwZWN0ZWQgYnkgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBpbiBgbmZ0X3NldF9lbGVtX2luaXQoKWAsIHdoZXJlIGB0aW1lb3V0YCBhbmQgYGV4cGlyYXRpb25gIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgZmlyc3QgY29uZmlybXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYE5GVF9TRVRfRVhUX1RJTUVPVVRgIGV4dGVuc2lvbiBiZWZvcmUgcmVhZGluZyB0aGVzZSBmaWVsZHMuXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6IEZhaWxpbmcgdG8gY2hlY2sgZXhwaXJhdGlvbiBmb3IgY2F0Y2hhbGwgZWxlbWVudHMgcHJldmlvdXNseSByaXNrZWQgbG9naWNhbCBlcnJvcnMgKC1FRVhJU1Qgb24gaW5zZXJ0KSBhbmQgbGlmZWN5Y2xlIGJ1Z3Mgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSAvIGRvdWJsZS1mcmVlIGlmIGRlYWN0aXZhdGlvbiByYWNlZCB3aXRoIEdDIGVsZW1lbnQgcmVjbGFtYXRpb24gKGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYygpYCkuIE1lbW9yeSBzYWZldHkgaXNzdWVzIG9mIHRoaXMgdHlwZSAoVUFGLCBkb3VibGUtZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIHBhcnRpYWwgc3RydWN0dXJlIGNvcGllcyBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGIwYjdjMWViNDkzNDI3ZTg0NDc2NjRlNzFlOTVjYTMyMWM5NDBmZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjExOjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IDc2NWE5MmZhOTBkNjIuLjdlZjJlMTllNjY1NWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTkxLDExICYjNDM7Njk5MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4gXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuJiM0MztcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xuIFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuIFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG4tXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpIHtcbiYjNDM7XHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XG4gXHRcdFx0KnByaXYgPSBjYXRjaGFsbC1cdTAwM2VlbGVtO1xuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHR9XG5AQCAtNzA4OCwxMSAmIzQzOzcwOTAsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiYjNDM7XHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXG4mIzQzO1x0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcbiYjNDM7XHRcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0a2ZyZWUoZWxlbS1cdTAwM2Vwcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1faW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2FkZF9zZXRfZWxlbSYjMzQ7LAogICAgJiMzNDtuZnRfZGVsX3NldGVsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGIwYjdjMWViNDkzNDI3ZTg0NDc2NjRlNzFlOTVjYTMyMWM5NDBmZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEzOjExOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCA3NjVhOTJmYTkwZDYyLi43ZWYyZTE5ZTY2NTVhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwpAQCAtNjk5MSwxMSAmIzQzOzY5OTEsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LAogewogCXN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsOwogCXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7CiYjNDM7CXU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpOwogCXN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgJmFtcDtzZXQtJmd0O2NhdGNoYWxsX2xpc3QsIGxpc3QpIHsKIAkJZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLSZndDtlbGVtKTsKLQkJaWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSkgewomIzQzOwkJaWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7CiAJCQkqcHJpdiA9IGNhdGNoYWxsLSZndDtlbGVtOwogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCX0KQEAgLTcwODgsMTEgJiM0Mzs3MDkwLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pCiB7CiAJc3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7CiYjNDM7CXU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpOwogCXN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgJmFtcDtzZXQtJmd0O2NhdGNoYWxsX2xpc3QsIGxpc3QpIHsKIAkJZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLSZndDtlbGVtKTsKLQkJaWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpKQomIzQzOwkJaWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8CiYjNDM7CQkgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpCiAJCQljb250aW51ZTsKIAogCQlrZnJlZShlbGVtLSZndDtwcml2KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIGluc3RydWN0aW9ucyBhbmQgc2FmZXR5IGd1aWRlbGluZXMgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIOKAkyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIFJpZ2h0LCB0aGlzIGlzIGRlZmVuc2l2ZSBRQSBmb3Igc3l6a2FsbGVyLCBldmFsdWF0aW5nIGEgTGludXgga2VybmVsIHBhdGNoIGFwcGxpZWQgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gU291bmRzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGRlZmluaXRlbHkgYmVuaWduOyBkZXZlbG9wZXIgUUEsIHBhdGNoIGV2YWx1YXRpb24uLi4gbm8gbWFsd2FyZSBvciBleHBsb2l0IGRldmVsb3BtZW50IGhlcmUuCgpUaGUgY29yZSBvZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGluc3BlY3RpbmcgdGhlIGNvZGUsIGZpZ3VyaW5nIG91dCBgV29ydGhGdXp6aW5nYCwgZXh0cmFjdGluZyBhbnkgYEZvY3VzU3ltYm9sc2AsIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGVuLCBvZiBjb3Vyc2UsIHJlcG9ydGluZyB0aGUgcmVzdWx0cy4KClJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYWN0dWFsIHBhdGNoLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdHdvIGZ1bmN0aW9ucywgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCwgd2l0aGluIGBuZl90YWJsZXNfYXBpLmNgLiBUaGUgZGlmZiBpbnRyb2R1Y2VzIGEgYHRzdGFtcGAgKHRpbWVzdGFtcCkgdmFyaWFibGUgYW5kIGFkZHMgYSBjYWxsIHRvIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYCBpbiB0aGUgY29uZGl0aW9uYWwgY2hlY2tzIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgc29tZSB0aW1lLWJhc2VkIGV4cGlyeSBjaGVja3Mgd2l0aGluIHRoaXMgYG5mdF9zZXRfZWxlbWAgZnVuY3Rpb25hbGl0eS4KCk5vdyBJIG5lZWQgdG8gZ28gZGVlcGVyLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgZnVsbHksIEkmIzM5O2xsIG5lZWQgdG8gc2VlIG1vcmUgY29udGV4dC4gVGltZSB0byB1c2Ugc29tZSB0b29scyDigJMgZWl0aGVyIGEgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlIG9yIG1heWJlIGEgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgY2FsbGVycyBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IGBuZnRfc2V0X2VsZW1gIGlzIHVzZWQgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdGltZXN0YW1wIGNoZWNrcyBpbnRlcmFjdCB3aXRoIHRoZSBvdmVyYWxsIGRhdGEgZmxvdyBhbmQgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGNvZGUgcGF0aHMgdGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBhbmFseXNpcyBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5ODA6XHRcdFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxuNjk4MTpcdFx0XHRcdHJldHVybiBleHQ7XG42OTgyOlx0XHR9XG42OTgzOlx0XG42OTg0Olx0XHRyZXR1cm4gTlVMTDtcbjY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG42OTk1Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5OTY6XHRcbjY5OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG42OTk4Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjY5OTk6XHRcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbjcwMDA6XHRcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xuNzAwMTpcdFx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcwMDI6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjcwMDM6XHRcdFx0fVxuNzAwNDpcdFx0fVxuNzAwNTpcdFxuNzAwNjpcdFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG43MDA3Olx0XHRpZiAoIWNhdGNoYWxsKVxuNzAwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcwMDk6XHRcbjcwMTA6XHRcdGNhdGNoYWxsLVx1MDAzZWVsZW0gPSBlbGVtLVx1MDAzZXByaXY7XG43MDExOlx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XG43MDEyOlx0XG43MDEzOlx0XHRyZXR1cm4gMDtcbjcwMTQ6XHR9XG43MDE1Olx0XG43MDE2Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzAxNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDE4Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjcwMTk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcbjcwMjA6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG43MDIxOlx0e1xuNzAyMjpcdFx0aW50IHJldDtcbjcwMjM6XHRcbjcwMjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxuNzAyNTpcdFx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG43MDI2Olx0XHRlbHNlXG43MDI3Olx0XHRcdHJldCA9IHNldC1cdTAwM2VvcHMtXHUwMDNlaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xuNzAyODpcdFxuNzAyOTpcdFx0cmV0dXJuIHJldDtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwMzM6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuNzAzNDpcdHtcbjcwMzU6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XG43MDM2Olx0XG43MDM3Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfRkxBR1MpIFx1MDAyNlx1MDAyNlxuNzAzODpcdFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG43MDM5Olx0XHRcdHJldHVybiB0cnVlO1xuNzA0MDpcdFxuNzA0MTpcdFx0cmV0dXJuIGZhbHNlO1xuNzA0MjpcdH1cbjcwNDM6XHRcbjcwNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDQ1Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbjcwNDY6XHR7XG43MDQ3Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xuNzA0ODpcdFxuNzA0OTpcdFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xuNzA1MDpcdFx0XHRuZnRfY2xlYXIobmV0LCBleHQpO1xuNzA1MTpcdFx0fSBlbHNlIHtcbjcwNTI6XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbjcwNTM6XHRcdH1cbjcwNTQ6XHR9XG43MDU1Olx0XG43MDU2Olx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDU3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXG43MDU4Olx0e1xuNzA1OTpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbjcwNjA6XHRcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXHUwMDNldXBkYXRlO1xuNzA2MTpcdFxuNzA2MjpcdFx0aWYgKHVwZGF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1RSQU5TX1VQRF9USU1FT1VUKVxuNzA2MzpcdFx0XHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0LCB1cGRhdGUtXHUwMDNldGltZW91dCk7XG43MDY0Olx0XG43MDY1Olx0XHRpZiAodXBkYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXG43MDY2Olx0XHRcdFdSSVRFX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24sIGdldF9qaWZmaWVzXzY0KCkgJiM0MzsgdXBkYXRlLVx1MDAzZWV4cGlyYXRpb24pO1xuNzA2NzpcdH1cbjcwNjg6XHRcbjcwNjk6XHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG43MDcwOlx0XHRcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlKVxuNzA3MTpcdHtcbjcwNzI6XHRcdGludCBpO1xuNzA3MzpcdFxuNzA3NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGUtXHUwMDNlbmVsZW1zOyBpJiM0MzsmIzQzOykge1xuNzA3NTpcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtID0gXHUwMDI2dGUtXHUwMDNlZWxlbXNbaV07XG43MDc2Olx0XG43MDc3Olx0XHRcdGlmIChlbGVtLVx1MDAzZXVwZGF0ZSlcbjcwNzg6XHRcdFx0XHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXHUwMDNlc2V0LCBlbGVtKTtcbjcwNzk6XHRcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MzgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFJlbGV2YW50IFNlY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDcwODAgdG8gNzEzMC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBkaXNjdXNzZWQgd2l0aGluIHRoYXQgc2VnbWVudC4gSSBzdXNwZWN0IGl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIGp1bmN0dXJlIGluIHRoZSBhcmd1bWVudCwgcGVyaGFwcyBhIGRldGFpbGVkIGFuYWx5c2lzLCBhIGNhc2Ugc3R1ZHksIGEgcGl2b3RhbCBjb21wYXJpc29uLCBvciB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBldmlkZW5jZS4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIHF1aWNrbHkgc2tpbSB0aG9zZSBsaW5lcywgbG9va2luZyBmb3Iga2V5IHRlcm1zLCBtZXRob2RvbG9naWNhbCBzaGlmdHMsIGNvbmNsdXNpb25zIGJlaW5nIGRyYXduLCBvciBjb3VudGVyYXJndW1lbnRzIGJlaW5nIGFkZHJlc3NlZC4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlIGNvbnRleHQgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgdGhhdCBzZWN0aW9uIGlmIHRoZSBtZWFuaW5nIGlzIHVuY2xlYXIuIEZyb20gZXhwZXJpZW5jZSwgaW1wb3J0YW50IGRpc2N1c3Npb25zIGFyZSBvZnRlbiBwcmVzZW50ZWQgaW4gc2hvcnQgc2VjdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQuIEkgd2lsbCBhbHNvIGJlIHByZXBhcmVkIHRvIHJldmlzaXQgYW5kIHJlLXJlYWQgaXQgaWYgdGhlIGZpcnN0IHBhc3MgZG9lc24mIzM5O3QgcHJvdmlkZSBhIGNsZWFyIHBpY3R1cmU7IHNvbWV0aW1lcyB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGFyZ3VtZW50IG9ubHkgcmV2ZWFsIHRoZW1zZWx2ZXMgYWZ0ZXIgYSBtb3JlIHRob3JvdWdoIGFuZCBjYXJlZnVsIGV4YW1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwODA6XHRcdFx0XHRuZnRfc2V0ZWxlbV9hY3RpdmF0ZShjdHgtXHUwMDNlbmV0LCB0ZS1cdTAwM2VzZXQsIGVsZW0tXHUwMDNlcHJpdik7XG43MDgxOlx0XG43MDgyOlx0XHRcdG5mX3RhYmxlc19zZXRlbGVtX25vdGlmeShjdHgsIHRlLVx1MDAzZXNldCwgZWxlbS1cdTAwM2Vwcml2LFxuNzA4MzpcdFx0XHRcdFx0XHQgTkZUX01TR19ORVdTRVRFTEVNKTtcbjcwODQ6XHRcdFx0a2ZyZWUoZWxlbS1cdTAwM2V1cGRhdGUpO1xuNzA4NTpcdFx0fVxuNzA4NjpcdH1cbjcwODc6XHRcbjcwODg6XHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzA4OTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuNzA5MDpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuNzA5MTpcdHtcbjcwOTI6XHRcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xuNzA5MzpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG43MDk0Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjcwOTU6XHRcbjcwOTY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG43MDk3Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjcwOTg6XHRcdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XG43MDk5Olx0XHRcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbjcxMDA6XHRcdFx0XHRjb250aW51ZTtcbjcxMDE6XHRcbjcxMDI6XHRcdFx0a2ZyZWUoZWxlbS1cdTAwM2Vwcml2KTtcbjcxMDM6XHRcdFx0ZWxlbS1cdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcxMDQ6XHRcdFx0bmZ0X3NldF9lbGVtX2NoYW5nZV9hY3RpdmUobmV0LCBzZXQsIGV4dCk7XG43MTA1Olx0XHRcdHJldHVybiAwO1xuNzEwNjpcdFx0fVxuNzEwNzpcdFxuNzEwODpcdFx0cmV0dXJuIC1FTk9FTlQ7XG43MTA5Olx0fVxuNzExMDpcdFxuNzExMTpcdHN0YXRpYyBpbnQgX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcxMTI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuNzExMzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG43MTE0Olx0e1xuNzExNTpcdFx0dm9pZCAqcHJpdjtcbjcxMTY6XHRcbjcxMTc6XHRcdHByaXYgPSBzZXQtXHUwMDNlb3BzLVx1MDAzZWRlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xuNzExODpcdFx0aWYgKCFwcml2KVxuNzExOTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjcxMjA6XHRcbjcxMjE6XHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG43MTIyOlx0XHRlbGVtLVx1MDAzZXByaXYgPSBwcml2O1xuNzEyMzpcdFx0c2V0LVx1MDAzZW5kZWFjdCYjNDM7JiM0Mzs7XG43MTI0Olx0XG43MTI1Olx0XHRyZXR1cm4gMDtcbjcxMjY6XHR9XG43MTI3Olx0XG43MTI4Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcxMjk6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcxMzA6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSwgdTMyIGZsYWdzKVxuNzEzMTpcdHtcbjcxMzI6XHRcdGludCByZXQ7XG43MTMzOlx0XG43MTM0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcbjcxMzU6XHRcdFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XG43MTM2Olx0XHRlbHNlXG43MTM3Olx0XHRcdHJldCA9IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XG43MTM4Olx0XG43MTM5Olx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNzEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIG5mX3RhYmxlcyBmb3IgU2VjdXJpdHkgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgYG5mX3RhYmxlc2AgaW4gbmV0ZmlsdGVyLCBhIGtub3duIHRhcmdldCBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGZvY3VzIGltbWVkaWF0ZWx5IHNoaWZ0cyB0byB0aGUgYXR0YWNrIHN1cmZhY2U6IG5ldGxpbmsgYWNjZXNzIHZpYSBgbmZuZXRsaW5rYC4gVGhhdCBtZWFucyB1bnByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzIGFyZSBpbiBwbGF5IGlmIGBORl9UQUJMRVNgIGlzIGVuYWJsZWQsIG9yIGZ1bGwgYENBUF9ORVRfQURNSU5gIGFjY2VzcyBpZiB0aGF0IGlzbiYjMzk7dCB0aGUgY2FzZS4gVGhpcyBtYWtlcyBpdCBhbiBhdHRyYWN0aXZlIHRhcmdldCwgYXMgZXhwZWN0ZWQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzLiBMZXQgbWUgY2hlY2sgdGhlIGdpdCBsb2cgZm9yIHRoZSBjb21taXQuIEhtbSwgSSBkb24mIzM5O3QgaGF2ZSB0aGUgYGdpdCBsb2dgIHRvb2wgcmVhZGlseSBhdmFpbGFibGUuIE5vIHByb2JsZW0sIGxldCYjMzk7cyBzZWUsIEkgY2FuIHVzZSBncmVwcGVyIG9yIGlmIEkgY2FuJiMzOTt0IGRvIHRoYXQsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvbW1pdCBkaWZmIGFuZCBzZWFyY2ggdGhlIGNvbW1pdCBtZXNzYWdlIGlmIG5lY2Vzc2FyeS4KCkFjdHVhbGx5LCBiZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGUgY29tbWl0LCBsZXQmIzM5O3MgY2xhcmlmeSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgc2hvdWxkIGNoZWNrIHdoaWNoIEtjb25maWcgb3B0aW9ucyBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiBgbmZfdGFibGVzX2FwaS5jYC4gQSBxdWljayBgZ3JlcGAgZm9yIGBuZl90YWJsZXNfYXBpLm9gIG9yIGBDT05GSUdfTkZfVEFCTEVTYCB3aWxsIGdpdmUgbWUgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gVGhpcyB3aWxsIGhlbHAgdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGFyZSByZWxldmFudCwgYW5kIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19hcGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODQ9b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXHQmIzQzOz0gbmZfZHVwX25ldGRldi5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04Ni0jIG5mX3RhYmxlc1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NzpuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXHRcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgYnVpbGQgcHJvY2Vzcy4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCB0aGUgaXNzdWUgaXMgbGlrZWx5IHJvb3RlZCBpbiBvbmUgb2YgdGhlIE1ha2VmaWxlIHJ1bGVzIGZvciB0aGF0IHN1YnN5c3RlbS4gTXkgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIG1vc3QgbGlrZWx5IGFyb3VuZCBsaW5lIDg0LiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgc2VjdGlvbiB3aWxsIGhhbmRsZSB0aGUgY29tcGlsYXRpb24gb3IgbGlua2luZyBvZiBhIG1vZHVsZSBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGFuZCB0aGlzIHdpbGwgbW9zdCBsaWtlbHkgcmV2ZWFsIHdoYXQgSSBuZWVkIHRvIHNlZSBhYm91dCB0aGUgb2JqZWN0IGZpbGVzIG9yIGNvbW1hbmRzIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XG4gIDgxOlx0b2JqLSQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpICYjNDM7PSBuZl9jb25uY291bnQub1xuICA4MjpcdFxuICA4MzpcdCMgZ2VuZXJpYyBwYWNrZXQgZHVwbGljYXRpb24gZnJvbSBuZXRkZXYgZmFtaWx5XG4gIDg0Olx0b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXHQmIzQzOz0gbmZfZHVwX25ldGRldi5vXG4gIDg1Olx0XG4gIDg2Olx0IyBuZl90YWJsZXNcbiAgODc6XHRuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcbiAgODg6XHRcdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG4gIDg5Olx0XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbiAgOTA6XHRcdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxuICA5MTpcdFx0XHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXG4gIDkyOlx0XHRcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxuICA5MzpcdFx0XHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxuICA5NDpcdFx0XHQgIG5mdF9zZXRfcGlwYXBvLm9cbiAgOTU6XHRcbiAgOTY6XHRpZmRlZiBDT05GSUdfWDg2XzY0XG4gIDk3Olx0aWZuZGVmIENPTkZJR19VTUxcbiAgOTg6XHRuZl90YWJsZXMtb2JqcyAmIzQzOz0gbmZ0X3NldF9waXBhcG9fYXZ4Mi5vXG4gIDk5Olx0ZW5kaWZcbiAxMDA6XHRlbmRpZlxuIDEwMTpcdFxuIDEwMjpcdGlmZGVmIENPTkZJR19ORlRfQ1RcbiAxMDM6XHRpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkVcbiAxMDQ6XHRuZl90YWJsZXMtb2JqcyAmIzQzOz0gbmZ0X2N0X2Zhc3Qub1xuIDEwNTpcdGVuZGlmXG4gMTA2Olx0ZW5kaWZcbiAxMDc6XHRcbiAxMDg6XHRvYmotJChDT05GSUdfTkZfVEFCTEVTKVx0XHQmIzQzOz0gbmZfdGFibGVzLm9cbiAxMDk6XHRvYmotJChDT05GSUdfTkZUX0NPTVBBVClcdCYjNDM7PSBuZnRfY29tcGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBvZiBgbmZfdGFibGVzLW9ianNgKioKCkFscmlnaHQsIHNvIGBuZl90YWJsZXMtb2Jqc2AgaXMgdGhlIGtleSwgYW5kIEkga25vdyBpdCYjMzk7cyB1bmRlciB0aGUgY29udHJvbCBvZiBgQ09ORklHX05GX1RBQkxFU2AuIFRoaXMgcmluZ3MgYSBiZWxsLiBJdCBzb3VuZHMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3ksIHNvIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBjb25uZWN0aW9uLiBUaW1lIHRvIGp1bXAgb3ZlciB0byB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIGZvciBgbmV0ZmlsdGVyYCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgdHJlZSDigJMgdGhhdCB3b3VsZCBiZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhpcyBzaG91bGQgY2xlYXJseSBsYXkgb3V0IHRoZSByZWxhdGlvbnNoaXAgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcyBpbiBob3cgYE5GX1RBQkxFU2AgYWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIGBuZl90YWJsZXMtb2Jqc2AuIEJlc3QgdG8gY2hlY2sgdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYG5ldGZpbHRlcmAgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gQW5kIGlmIG15IG1lbW9yeSBzZXJ2ZXMsIHRoZSByZWxldmFudCBzZWN0aW9uIGZvciB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbiBzdGFydHMgYXJvdW5kIGxpbmUgNDU1LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgb3B0aW9ucyBhdmFpbGFibGUsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyIHdpdGhpbiB0aGlzIGNvbXBsZXggZnJhbWV3b3JrLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBzdGF0ZW1lbnRzLCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIG1heWJlIHNvbWUgYHNlbGVjdGAgc3RhdGVtZW50cyB0byBndWlkZSB0aGUgYnVpbGQgcHJvY2Vzcy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGNvbW1lbnRlZCBlbm91Z2ggdGhhdCBJIGNhbiBxdWlja2x5IGdyb2sgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdmFyaW91cyBOZXRmaWx0ZXIgZmVhdHVyZXMgYW5kIG9wdGlvbnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUwOlx0Y29uZmlnIE5FVEZJTFRFUl9TWU5QUk9YWVxuIDQ1MTpcdFx0dHJpc3RhdGVcbiA0NTI6XHRcbiA0NTM6XHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xuIDQ1NDpcdFxuIDQ1NTpcdGNvbmZpZyBORl9UQUJMRVNcbiA0NTY6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDQ1NzpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiA0NTg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuIDQ1OTpcdFx0aGVscFxuIDQ2MDpcdFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXG4gNDYxOlx0XHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XG4gNDYyOlx0XHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxuIDQ2MzpcdFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICYjMzk7bmZ0JiMzOTsgdXRpbGl0eVxuIDQ2NDpcdFx0ICAoaHR0cHM6Ly93d3cubmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9uZnRhYmxlcykgdXNlcyB0byBidWlsZCB0aGVcbiA0NjU6XHRcdCAgcnVsZS1zZXQuIEl0IGFsc28gY29tZXMgd2l0aCB0aGUgZ2VuZXJpYyBzZXQgaW5mcmFzdHJ1Y3R1cmUgdGhhdFxuIDQ2NjpcdFx0ICBhbGxvd3MgeW91IHRvIGNvbnN0cnVjdCBtYXBwaW5ncyBiZXR3ZWVuIG1hdGNoaW5ncyBhbmQgYWN0aW9uc1xuIDQ2NzpcdFx0ICBmb3IgcGVyZm9ybWFuY2UgbG9va3Vwcy5cbiA0Njg6XHRcbiA0Njk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA0NzA6XHRcbiA0NzE6XHRpZiBORl9UQUJMRVNcbiA0NzI6XHRjb25maWcgTkZfVEFCTEVTX0lORVRcbiA0NzM6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDQ3NDpcdFx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NzYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBQYXRjaCBJbXBhY3Qgb24gU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgaXQgdG91Y2hlczogYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIHRoZW0gaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucz8gWWVzLCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoZXkgYXJlIGluZGVlZCBkZWNsYXJlZCBhcyBzdGF0aWMuIAoKTm93LCBoZXJl4oCZcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBob3cgc3RhdGljIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZC4gVGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCBzdGF0aWMgKmlubGluZSogZnVuY3Rpb25zIGRlY2xhcmVkIGluIGhlYWRlciBmaWxlcyBkb27igJl0IGhhdmUgZGlzdGluY3Qgc3ltYm9scyBpbiBgdm1saW51eGAgYW5kIGNhbiYjMzk7dCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4gSG1tLCBidXQgdGhlc2UgYXJlICpub3QqIGlubGluZSBmdW5jdGlvbnMgaW4gYSBoZWFkZXIuIFRoZXkmIzM5O3JlIHN0YXRpYyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gYSBgLmNgIGZpbGUsIGBuZl90YWJsZXNfYXBpLmNgLiBBcmUgdGhleSB0cmVhdGVkIHRoZSBzYW1lIHdheT8gQ291bGQgdGhlIGNvbXBpbGVyIGlubGluZSB0aGVtIGFueXdheSwgb3IgZG8gdGhleSByZW1haW4gYXMgZGlzdGluY3Qgc3ltYm9scz8gSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhleSBhcmUgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb25zLCBhbmQgd2hhdCB0aG9zZSBjYWxsZXIgZnVuY3Rpb25zIGFyZS4KClRoZXJlZm9yZSwgbGV0IG1lIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYm90aCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYCB0byB1bmRlcnN0YW5kIHRoZWlyIHVzYWdlIGFuZCB3aGV0aGVyIHRoZSBjb21waWxlciBpcyBsaWtlbHkgdG8gaW5saW5lIHRoZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGltcGFjdCBhbmQgd2hldGhlciB0aGV5JiMzOTtyZSBwcm9wZXJseSByZXByZXNlbnRlZCBpbiB0aGUgc3ltYm9sIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTY5PXN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9jYXRjaGFsbF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTg3OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODgtXHRcdFx0XHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDE2PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDI1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI2LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYG5mdF9zZXRlbGVtX2luc2VydGAgQ2FsbGVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmZ0X3NldGVsZW1faW5zZXJ0YCBpcyBiZWluZyBpbnZva2VkLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIHJpZ2h0IG5vdy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGFwcHJvYWNoIOKAkyB1c2luZyB0aGUgdG9vbGluZyBJJiMzOTttIG1vc3QgY29tZm9ydGFibGUgd2l0aC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHRyYWNrIGRvd24gYWxsIGRpcmVjdCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIGBubWAgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB3cmFwcGVyIGZ1bmN0aW9ucywgb3IgbWFjcm9zIGludm9sdmVkLCBzbyBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIGF0IHRoZSBhc3NlbWJseSBsZXZlbC4KCkJleW9uZCBhIHNpbXBsZSB0ZXh0IHNlYXJjaCB0aG91Z2gsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgc3RhdGljIGFuYWx5c2lzIHRlY2huaXF1ZXMuIFRvb2xzIGxpa2UgYGtjYWNoZWdyaW5kYCBvciBldmVuIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgc2NyaXB0IHdpdGggc29tZXRoaW5nIGxpa2UgYGNsYW5nYCBjb3VsZCBwcm92aWRlIGNhbGwgZ3JhcGhzLiBUaGF0IHdpbGwgYmUgbW9yZSBpbnNpZ2h0ZnVsIHRoYW4gYSByYXcgdGV4dCBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgdG9vLCBzaW5jZSB0aGF0IGNhbiBhZGQgY29tcGxleGl0eS4KCk9uY2UgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgY2FsbCBzaXRlcywgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkgYXJlIG1hZGUuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCBsb2NrcyBhcmUgaGVsZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlcnJvciBwYXRocz8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBkbyB0aGVzZSBjYWxscyBpbXBhY3QgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5PyBJJiMzOTtsbCBwcm9iYWJseSBlbmQgdXAgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGRldGFpbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBsaWtlbHkgdG8gbGVhZCB0byBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZXQgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgdXNlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9zZXRlbGVtX2luc2VydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5ODc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDE2OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTctXHRcdFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ5PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1NzEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NTcyOlx0ZXJyID0gbmZ0X3NldGVsZW1faW5zZXJ0KGN0eC1cdTAwM2VuZXQsIHNldCwgXHUwMDI2ZWxlbSwgXHUwMDI2ZWxlbV9wcml2LCBmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTczLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIE5GVCBTZXQgRWxlbWVudCBJbnNlcnRpb24gUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgbmV3IGVsZW1lbnRzIGFyZSBhZGRlZCB0byBORlQgc2V0cy4gSSBzZWUgdGhhdCB0aGUgYG5mdF9hZGRfc2V0X2VsZW1gIGZ1bmN0aW9uIGlzIHRoZSBrZXkgcGxheWVyIGhlcmUsIGFuZCB0aGF0IGl0IGNhbGxzIGBuZnRfc2V0ZWxlbV9pbnNlcnRgLiBHb29kLCBtYWtlcyBzZW5zZS4gQnV0IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFdoYXQmIzM5O3MgdGhlICpvcmlnaW4qIG9mIGBuZnRfYWRkX3NldF9lbGVtYD8gQWgsIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgYG5mX3RhYmxlc19uZXdzZXRlbGVtYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgSSYjMzk7bSBhZnRlciwgdGhlIGluaXRpYWwgdHJpZ2dlciBmb3IgYSBuZXcgc2V0IGVsZW1lbnQuCgpOb3csIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGRlYWN0aXZhdGlvbiDigJMgc3BlY2lmaWNhbGx5IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gV2hhdCB0cmlnZ2VycyB0aGF0PyBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGUgbW9yZSBnZW5lcmljIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCBmdW5jdGlvbiwganVzdCB0byBnZXQgYSBicm9hZGVyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IHNldCBlbGVtZW50cyBhcmUgZGVhY3RpdmF0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGhzIGZvciBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIHJlbW92YWwgc2NlbmFyaW9zLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNjk9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2FkZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwODctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDg4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg5LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcxMjg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFuYWx5emluZyBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAgQ2FsbGVycyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IHdhbnRzIG1lIHRvIGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgbGlrZWx5IG1lYW5zIGlkZW50aWZ5aW5nIHdoZXJlIHRoaXMgY29yZSBmdW5jdGlvbiBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayBpcyBiZWluZyBpbnZva2VkLiBJdCYjMzk7cyBhYm91dCBmaWd1cmluZyBvdXQgd2hpY2ggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0IHRvIGRpc2FibGUgb3IgaW52YWxpZGF0ZSBlbGVtZW50cyB3aXRoaW4gTmV0ZmlsdGVyIHRhYmxlcyBvciBzZXRzLCB3aGljaCBpbiB0dXJuIGFmZmVjdCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBuZXR3b3JrIGJlaGF2aW9yLiBNeSBpbnR1aXRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd2luZyBtZSB0byBwb3RlbnRpYWwgYXJlYXM6CgoqICAgKipSdWxlIE1hbmFnZW1lbnQ6KiogSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdGhpcyBpcyBkaXJlY3RseSBsaW5rZWQgdG8gdGhlIHJlbW92YWwgb3IgZGVhY3RpdmF0aW9uIG9mIHJ1bGVzIHdpdGhpbiBOZXRmaWx0ZXIgc2V0cy4gU28gSSYjMzk7ZCBiZSBsb29raW5nIGZvciBjb2RlIHJlbGF0ZWQgdG8gYG5mdCBhZGQvZGVsZXRlIGVsZW1lbnRgIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgYSBtb3JlIGludGVybmFsIGZ1bmN0aW9uLgoqICAgKipTZXQgR2FyYmFnZSBDb2xsZWN0aW9uL0V4cGlyeToqKiBUaGlzIGNvdWxkIGJlIHBhcnQgb2YgYSBtZWNoYW5pc20gdG8gYXV0b21hdGljYWxseSByZW1vdmUgb3IgaW52YWxpZGF0ZSBzZXQgZWxlbWVudHMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCAoZS5nLiwgZHVlIHRvIHRpbWVvdXRzLCByZXNvdXJjZSBsaW1pdGF0aW9ucywgb3IgcG9saWN5IGNoYW5nZXMpLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHRpbWVycywgY2xlYW51cCByb3V0aW5lcyBvciBldmVudHMuCiogICAqKkVycm9yIEhhbmRsaW5nL1JvbGxiYWNrOioqIFBvdGVudGlhbGx5LCBpdCBjb3VsZCBiZSB1c2VkIGluIHNjZW5hcmlvcyB3aGVyZSBhIE5ldGZpbHRlciBvcGVyYXRpb24gZmFpbHMsIGFuZCB3ZSBuZWVkIHRvIHJvbGwgYmFjayBjaGFuZ2VzLCBkZWFjdGl2YXRpbmcgZWxlbWVudHMgYWRkZWQgZHVyaW5nIGEgZmFpbGVkIHRyYW5zYWN0aW9uLgoqICAgKipDb25udHJhY2sgSW50ZWdyYXRpb246KiogU2luY2Ugc2V0cyBjYW4gYmUgdXNlZCB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHRoaXMgZnVuY3Rpb24gY291bGQgYmUgdXRpbGl6ZWQgdG8gaGFuZGxlIHRoZSByZW1vdmFsIG9mIHNldCBlbGVtZW50cyB0aGF0IGNvcnJlc3BvbmQgdG8gZXhwaXJlZCBvciB0ZXJtaW5hdGVkIGNvbm5lY3Rpb25zLgoqICAgKipDb25maWd1cmF0aW9uIFJlbG9hZHM6KiogV2hlbiBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbG9hZGVkIG9yIHVwZGF0ZWQsIGV4aXN0aW5nIHNldCBlbGVtZW50cyBtaWdodCBiZSBkZWFjdGl2YXRlZCBhbmQgbmV3IGVsZW1lbnRzIGFjdGl2YXRlZC4gSSB3aWxsIGhhdmUgdG8gbG9vayBhdCB0aGUgcmVsb2FkIG9yIGNvbmZpZyBjb2RlLgoKRXNzZW50aWFsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxpZmVjeWNsZSBvZiBzZXQgZWxlbWVudHMgYW5kIGhvdyB0aGV5IGFyZSBtYW5hZ2VkOiBjcmVhdGlvbiwgYWN0aXZhdGlvbiwgdXNlLCBhbmQgdWx0aW1hdGVseSwgZGVhY3RpdmF0aW9uL3JlbW92YWwuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgY29kZSBwYXRoIHRoYXQgaGFuZGxlcyB0aGUgJiMzOTtjbGVhbnVwJiMzOTsgc3RhZ2Ugb2YgdGhlc2UgZWxlbWVudHMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBzdGFydCB0cmFjaW5nIGNhbGxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA4OD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMTAtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTExOnN0YXRpYyBpbnQgX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMTItXHRcdFx0XHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTI3LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEyODpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEyOS1cdFx0XHRcdCAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM2LVx0ZWxzZVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEzNzpcdFx0cmV0ID0gX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzgtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzgyOT1zdGF0aWMgaW50IG5mdF9kZWxfc2V0ZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5MDEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTAyOlx0ZXJyID0gbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjdHgtXHUwMDNlbmV0LCBzZXQsIFx1MDAyNmVsZW0sIGZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5MDMtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBORlQgRGVsZXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mdF9kZWxfc2V0ZWxlbWAgaGVyZSwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgbmZfdGFibGVzX2RlbHNldGVsZW1gLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gU3RhbmRhcmQgZGVsZXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGUgZWxlbWVudCBkZWFjdGl2YXRpb24sIHNvIEkgbmVlZCB0byBkaWcgaW50byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBwYXRjaCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGV4cGlyYXRpb24gbG9naWMsIHdoaWNoIG1ha2VzIHNlbnNlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBzZXRzLiBMZXQgbWUgc2VhcmNoIGZvciBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGNoYW5nZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmZ0X3NldF9lbGVtX2V4cGlyZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5ODc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTktXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDAwOlx0XHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDAxLVx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5OC1cdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk5Olx0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTAwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjc5PXN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2OTI6XHRcdGlmICghX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5My1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTU5PXN0YXRpYyBpbmxpbmUgaW50IG5mdF9yaGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTY4LVx0XHRyZXR1cm4gMTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6Njk6XHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZoZS1cdTAwM2VleHQsIHgtXHUwMDNldHN0YW1wKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNzAtXHRcdHJldHVybiAxO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz00MTk9c3RhdGljIHN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKnBpcGFwb19nZXRfc2xvdyhjb25zdCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtNDc4LVx0XHRcdGUgPSBmLVx1MDAzZW10W2JdLmU7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6NDc5Olx0XHRcdGlmICh1bmxpa2VseShfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNmUtXHUwMDNlZXh0LCB0c3RhbXApIHx8XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtNDgwLVx0XHRcdFx0ICAgICAhbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZlLVx1MDAzZWV4dCwgZ2VubWFzaykpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xNzEwPXN0YXRpYyB2b2lkIHBpcGFwb19nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQsIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzUwLVx0XHQgKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNzUxOlx0XHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZlLVx1MDAzZWV4dCwgdHN0YW1wKSkge1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3NTItXHRcdFx0aWYgKCFuZnRfdHJhbnNfZ2Nfc3BhY2UoZ2MpKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmM9MTEzMD1zdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICpwaXBhcG9fZ2V0X2F2eDIoY29uc3Qgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmMtMTIxNi1cdFx0XHRlID0gZi1cdTAwM2VtdFtyZXRdLmU7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYzoxMjE3Olx0XHRcdGlmICh1bmxpa2VseShfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNmUtXHUwMDNlZXh0LCB0c3RhbXApIHx8XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYy0xMjE4LVx0XHRcdFx0ICAgICAhbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZlLVx1MDAzZWV4dCwgZ2VubWFzaykpKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTM0Mj1zdGF0aWMgaW50IF9fbmZ0X3JidHJlZV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0zOTctXHRcdCAqL1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjM5ODpcdFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2cmJlLVx1MDAzZWV4dCwgdHN0YW1wKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0zOTktXHRcdCAgICBuZnRfc2V0X2VsZW1fYWN0aXZlKFx1MDAyNnJiZS1cdTAwM2VleHQsIGN1cl9nZW5tYXNrKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz03ODM9bmZ0X3JidHJlZV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODE5LVx0XHRcdFx0Y29udGludWU7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6ODIwOlx0XHRcdH0gZWxzZSBpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZyYmUtXHUwMDNlZXh0LCB0c3RhbXApKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODIxLVx0XHRcdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg5MT1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtOTExLVx0XHR9XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6OTEyOlx0XHRpZiAoIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2cmJlLVx1MDAzZWV4dCwgdHN0YW1wKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy05MTMtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzIxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2F0Y2hhbGwgRWxlbWVudCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgdG8gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhlIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYCBjaGVjaywgaW5jb3Jwb3JhdGluZyB0aGUgYHRzdGFtcGAuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMsIHdoaWNoIGlzIGtleS4KCkluIHRoZSBpbnNlcnQgZnVuY3Rpb24sIHRoZSBvbGQgY29kZSByZXR1cm5lZCBgLUVFWElTVGAgaWYgYW4gYWN0aXZlIGNhdGNoYWxsIGVsZW1lbnQgd2FzIGZvdW5kLiBOb3csIGl0IHNraXBzIHRoZSBlbGVtZW50ICppZiBpdCYjMzk7cyBleHBpcmVkKiBhbmQgYXR0ZW1wdHMgdG8gaW5zZXJ0IGEgKm5ldyogY2F0Y2hhbGwgZWxlbWVudC4gSG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgdG8gdGhlICpvbGQqLCBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQgdGhhdCYjMzk7cyBhbHJlYWR5IGluIGBzZXQtJmd0O2NhdGNoYWxsX2xpc3RgPyBUaGF0JiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG5vdCBiZWluZyByZW1vdmVkLiBUaGUgZXhpc3RpbmcgZWxlbWVudCBpcyBqdXN0IGlnbm9yZWQsIGFuZCBhICpuZXcqIG9uZSBpcyBhcHBlbmRlZCB0byB0aGUgbGlzdC4KCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGluc2VydGlvbiBjb2RlOiB0aGUgb2xkIGV4cGlyZWQgZWxlbWVudCB3YXNuJiMzOTt0IHJlbW92ZWQgYmVmb3JlIHRoZSBuZXcgb25lIHdhcyBhZGRlZCB0byBgc2V0LSZndDtjYXRjaGFsbF9saXN0YC4gKlllcyEqIFRoYXQgbWVhbnMgdGhlcmUgY2FuIG5vdyBiZSBtdWx0aXBsZSBjYXRjaGFsbCBlbGVtZW50cyBpbiBgc2V0LSZndDtjYXRjaGFsbF9saXN0YC4gVGhlIG9sZCBlbGVtZW50IGlzIG5vdCByZW1vdmVkIHdoZW4gaXQgZXhwaXJlcywgdGhlIG5ldyBlbGVtZW50IGlzIGp1c3QgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEKCkluIHRoZSBkZWFjdGl2YXRpb24gZnVuY3Rpb24sIGl0IG5vdyBza2lwcyBleHBpcmVkIGVsZW1lbnRzIGFzIHdlbGwuIElmIGFuIGV4cGlyZWQgY2F0Y2hhbGwgaXMgZm91bmQgaXQganVzdCBjb250aW51ZXMgdG8gdGhlIG5leHQgZWxlbWVudC4gSXQgZXZlbnR1YWxseSByZXR1cm5zIGAtRU5PRU5UYCBpZiBubyBhY3RpdmUvbm9uLWV4cGlyZWQgZWxlbWVudHMgYXJlIGZvdW5kLgoKVGhpcyBhbGwgcG9pbnRzIHRvIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IGNhdGNoYWxsIGVsZW1lbnRzIGFyZSBtYW5hZ2VkLiBXZSYjMzk7cmUgZGVmZXJyaW5nIHRoZSBjbGVhbnVwIG9mIGV4cGlyZWQgZWxlbWVudHMgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLCB0cmFuc2FjdGlvbiBjb21taXQvYWJvcnQsIG9yIHBvdGVudGlhbGx5IGR1cmluZyBsb29rdXBzLiBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb3BlcmF0ZXMsIGFsb25nIHdpdGggYW55IHRyYW5zYWN0aW9uLXJlbGF0ZWQgaW1wbGljYXRpb25zLiBBbHNvLCB3aGF0IGhhcHBlbnMgaW4gYG5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0IGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGhvdyBpdCBtaWdodCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhpcyBpcyBsaWtlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGJ1dCB0aGUgaW1wbGljYXRpb25zIG9uIGxpc3QgbWFuYWdlbWVudCBuZWVkIGEgY2xvc2VyIGxvb2suIEkgcmVhbGx5IGhvcGUgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGtub3dzIGhvdyB0byBoYW5kbGUgbGlzdHMgb2YgZXhwaXJlZCBlbGVtZW50cyBpbiB0aGlzIG1hbm5lci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Njk2MDpcdFx0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG42OTYxOlx0XHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuNjk2MjpcdFxuNjk2MzpcdFx0XHRleHByX2FycmF5W2ldID0gTlVMTDtcbjY5NjQ6XHRcdH1cbjY5NjU6XHRcbjY5NjY6XHRcdHJldHVybiAtRU5PTUVNO1xuNjk2NzpcdH1cbjY5Njg6XHRcbjY5Njk6XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjY5NzA6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG42OTcxOlx0e1xuNjk3MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTczOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XG42OTc0Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5NzU6XHRcbjY5NzY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuNjk3NzpcdFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG42OTc4Olx0XHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG42OTc5Olx0XHRcdCAgICAhbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0KSBcdTAwMjZcdTAwMjZcbjY5ODA6XHRcdFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxuNjk4MTpcdFx0XHRcdHJldHVybiBleHQ7XG42OTgyOlx0XHR9XG42OTgzOlx0XG42OTg0Olx0XHRyZXR1cm4gTlVMTDtcbjY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipFeGFtaW5pbmcgQ2F0Y2hhbGwgRWxlbWVudCBHYXJiYWdlIENvbGxlY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzIGZvciAmIzM0O2NhdGNoYWxsJiMzNDsgZWxlbWVudHMgaW4gdGhpcyBgbmZ0YWJsZXNgIGNvbnRleHQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZXNlIGVsZW1lbnRzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgbmZ0X3NldF9jYXRjaGFsbF9nY2AgYW5kIGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luY2AuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlc2UgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgaGFuZGxpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIHJlbGF0ZWQgdG8gdGhlc2Ugc3BlY2lhbCAmIzM0O2NhdGNoYWxsJiMzNDsgZWxlbWVudHMuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB3aGVyZSB0aGVzZSBjYXRjaGFsbCBlbGVtZW50cyBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSBzeXN0ZW0gYW5kLCBjcnVjaWFsbHksIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGlzIHRyaWdnZXJlZCBhbmQgd2hhdCBjcml0ZXJpYSBkZXRlcm1pbmUgd2hlbiB0aG9zZSBlbGVtZW50cyBhcmUgY29uc2lkZXJlZCBlbGlnaWJsZSBmb3IgY29sbGVjdGlvbi4gSG9wZWZ1bGx5LCBieSB0cmFja2luZyB0aGUgY29udHJvbCBmbG93IG9mIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucywgSSBjYW4gZ2FpbiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBjYXRjaGFsbCBlbGVtZW50cyBhbmQgaG93IHRoZWlyIG1lbW9yeSBpcyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYXRjaGFsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTgzNz1zdGF0aWMgaW50IG5mdF9tYXBlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NTItXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NTM6c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NTQtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg1OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg1OTpzdGF0aWMgdm9pZCBuZnRfbWFwX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg2MC1cdFx0XHRcdFx0c3RydWN0IG5mdF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjItXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg2MzpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODY0LVx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NjY6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODY3Olx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjgtXHRcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg3MS1cdFx0bmZ0X3NldF9lbGVtX2NoYW5nZV9hY3RpdmUoY3R4LVx1MDAzZW5ldCwgc2V0LCBleHQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODcyOlx0XHRuZnRfc2V0ZWxlbV9kYXRhX2RlYWN0aXZhdGUoY3R4LVx1MDAzZW5ldCwgc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg3My1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04ODE9c3RhdGljIHZvaWQgbmZ0X21hcF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODkxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODkyOlx0bmZ0X21hcF9jYXRjaGFsbF9kZWFjdGl2YXRlKGN0eCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5My19XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDI1Mj1pbnQgbmZ0X3NldGVsZW1fdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00Mjg0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDI4NTppbnQgbmZ0X3NldF9jYXRjaGFsbF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI4Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI4OS1cdH07XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MjkwOlx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MjkxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQyOTQtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0Mjk1Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI5Ni1cdFx0XHRcdGxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChjdHgtXHUwMDNlbmV0KSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDI5NzpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI5OC1cdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZHVtbXlfaXRlci5nZW5tYXNrKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzAwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDMwMTpcdFx0cmV0ID0gbmZ0X3NldGVsZW1fdmFsaWRhdGUoY3R4LCBzZXQsIFx1MDAyNmR1bW15X2l0ZXIsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDMwMi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01NDM2PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU2ODMtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzZXQtXHUwMDNlYmluZGluZ3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTY4NDpcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU2ODUtXHRyZWZjb3VudF9zZXQoXHUwMDI2c2V0LVx1MDAzZXJlZnMsIDEpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDAtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQxOnN0YXRpYyB2b2lkIG5mdF9zZXRfY2F0Y2hhbGxfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc0Mi1cdFx0XHRcdCAgICAgc3RydWN0IG5mdF9zZXQgKnNldClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDMte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0NDpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKm5leHQsICpjYXRjaGFsbDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQ2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhdGNoYWxsLCBuZXh0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0NzpcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNmNhdGNoYWxsLVx1MDAzZWxpc3QpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0ODpcdFx0bmZfdGFibGVzX3NldF9lbGVtX2Rlc3Ryb3koY3R4LCBzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0OTpcdFx0a2ZyZWVfcmN1KGNhdGNoYWxsLCByY3UpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc1MC1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01NzYxPXN0YXRpYyB2b2lkIG5mdF9zZXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NzEtXHRzZXQtXHUwMDNlb3BzLVx1MDAzZWRlc3Ryb3koY3R4LCBzZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc3MjpcdG5mdF9zZXRfY2F0Y2hhbGxfZGVzdHJveShjdHgsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NzczLVx0bmZ0X3NldF9wdXQoc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01ODQ2PXN0YXRpYyBpbnQgbmZfdGFibGVzX2JpbmRfY2hlY2tfc2V0ZWxlbShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NTgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1ODU5OnN0YXRpYyBpbnQgbmZ0X3NldF9jYXRjaGFsbF9iaW5kX2NoZWNrKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01ODYwLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg2Mi1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KGN0eC1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTg2MzpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg2NC1cdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NjYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1ODY3Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg2OC1cdFx0XHRcdGxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChjdHgtXHUwMDNlbmV0KSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTg2OTpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg3MC1cdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU4NzM6XHRcdHJldCA9IG5mdF9zZXRlbGVtX2RhdGFfdmFsaWRhdGUoY3R4LCBzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg3NC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01ODgxPWludCBuZl90YWJsZXNfYmluZF9zZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTA1LVx0XHRpZiAoIWl0ZXIuZXJyKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTkwNjpcdFx0XHRpdGVyLmVyciA9IG5mdF9zZXRfY2F0Y2hhbGxfYmluZF9jaGVjayhjdHgsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTA3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU5NDA9c3RhdGljIGludCBuZnRfbWFwZWxlbV9hY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTU3OnN0YXRpYyB2b2lkIG5mdF9tYXBfY2F0Y2hhbGxfYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NTgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjAtXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjE6XHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjItXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTY0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjU6XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjYtXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTk2OS1cdFx0bmZ0X2NsZWFyKGN0eC1cdTAwM2VuZXQsIGV4dCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTcwOlx0XHRuZnRfc2V0ZWxlbV9kYXRhX2FjdGl2YXRlKGN0eC1cdTAwM2VuZXQsIHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTcxLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU5NzQ9c3RhdGljIHZvaWQgbmZ0X21hcF9hY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5ODQtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTg1Olx0bmZ0X21hcF9jYXRjaGFsbF9hY3RpdmF0ZShjdHgsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTg2LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02MjY2PXN0cnVjdCBuZnRfc2V0X2R1bXBfY3R4IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MjcxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjI3MjpzdGF0aWMgaW50IG5mdF9zZXRfY2F0Y2hhbGxfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MjczLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsIGJvb2wgcmVzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI3NS17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2Mjc2Olx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Mjc3LVx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX2N1cihuZXQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYyODAtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2MjgxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2MjgyOlx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MjgzLVx0XHRpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSB8fFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYyODYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2Mjg3Olx0XHRyZXQgPSBuZl90YWJsZXNfZmlsbF9zZXRlbGVtKHNrYiwgc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtLCByZXNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Mjg4LVx0XHRpZiAocmVzZXQgXHUwMDI2XHUwMDI2ICFyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjI5Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19kdW1wX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjM2Ni1cdGlmICghYXJncy5pdGVyLmVyciBcdTAwMjZcdTAwMjYgYXJncy5pdGVyLmNvdW50ID09IGNiLVx1MDAzZWFyZ3NbMF0pXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2MzY3Olx0XHRhcmdzLml0ZXIuZXJyID0gbmZ0X3NldF9jYXRjaGFsbF9kdW1wKG5ldCwgc2tiLCBzZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MzY4LVx0XHRcdFx0XHRcdCAgICAgIGR1bXBfY3R4LVx1MDAzZXJlc2V0LCBjYi1cdTAwM2VzZXEpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY0Nzc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9wYXJzZV9kYXRhKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjQ5Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY0OTc6c3RhdGljIHZvaWQgKm5mdF9zZXRlbGVtX2NhdGNoYWxsX2dldChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NDk4LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY0OTkte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjUwMDpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUwMS1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTA0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjUwNTpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjUwNjpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUwNy1cdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgfHxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTEwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjUxMTpcdFx0cHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTEyLVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02NTE4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fZ2V0KHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUyNy1cdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NTI4Olx0XHRwcml2ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZ2V0KGN0eC1cdTAwM2VuZXQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTI5LVx0XHRpZiAoIXByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjkyND1zdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk2OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5Njk6c3RydWN0IG5mdF9zZXRfZXh0ICpuZnRfc2V0X2NhdGNoYWxsX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTcwLVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5NzEte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3MjpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk3My1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTc1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3NjpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3NzpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk3OC1cdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTg2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk4NzpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTg4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5MS17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTkyOlx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTkzLVx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTk2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk5NzpcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTk4Olx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTk5LVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwMC1cdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwMTpcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDAyLVx0XHRcdHJldHVybiAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDA2Olx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDA3Olx0aWYgKCFjYXRjaGFsbClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDgtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwOS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMTA6XHRjYXRjaGFsbC1cdTAwM2VlbGVtID0gZWxlbS1cdTAwM2Vwcml2O1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAxMTpcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmNhdGNoYWxsLVx1MDAzZWxpc3QsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTItXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzAxNj1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNC1cdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAyNTpcdFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNi1cdGVsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDMxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAzMjpzdGF0aWMgYm9vbCBuZnRfc2V0ZWxlbV9pc19jYXRjaGFsbChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAzMy1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNDQ9c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fYWN0aXZhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwNDgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDQ5Olx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA1MC1cdFx0bmZ0X2NsZWFyKG5ldCwgZXh0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDY5PXN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19hZGQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg3LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA4ODpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4OS1cdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDkxLXtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwOTI6XHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwOTMtXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDk1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5NjpcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk3Olx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDk4LVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTAyLVx0XHRrZnJlZShlbGVtLVx1MDAzZXByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEwMzpcdFx0ZWxlbS1cdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMDQtXHRcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcxMjg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXHRlbHNlXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE0MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDI6c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVzdHJveShzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDMte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE0NDpcdGxpc3RfZGVsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDU6XHRrZnJlZV9yY3UoY2F0Y2hhbGwsIHJjdSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQ2LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTQ4OnN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2NhdGNoYWxsX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQ5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTEte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1MjpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsLCAqbmV4dDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTU0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhdGNoYWxsLCBuZXh0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1NTpcdFx0aWYgKGNhdGNoYWxsLVx1MDAzZWVsZW0gPT0gZWxlbV9wcml2KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTU2Olx0XHRcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX2Rlc3Ryb3koY2F0Y2hhbGwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE1Ny1cdFx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MTYyPXN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE2NS17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTY2Olx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNjc6XHRcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX3JlbW92ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNjgtXHRlbHNlXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzE3Mj1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfcmVtb3ZlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE4Ny1cdFx0bmZ0X3NldGVsZW1fcmVtb3ZlKGN0eC1cdTAwM2VuZXQsIHRlLVx1MDAzZXNldCwgdGUtXHUwMDNlZWxlbXNbaV0ucHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTg4Olx0XHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRlLVx1MDAzZXNldCwgdGUtXHUwMDNlZWxlbXNbaV0ucHJpdikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxODktXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlbmVsZW1zKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03Nzg0PXN0YXRpYyBib29sIG5mdF90cmFuc19lbGVtc19uZXdfYWJvcnQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03Nzk5LVx0XHRpZiAoIXRlLVx1MDAzZXNldC1cdTAwM2VvcHMtXHUwMDNlYWJvcnRfc2tpcF9yZW1vdmFsIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3ODAwOlx0XHQgICAgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwodGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4MDEtXHRcdFx0bmZ0X3NldGVsZW1fcmVtb3ZlKGN0eC1cdTAwM2VuZXQsIHRlLVx1MDAzZXNldCwgdGUtXHUwMDNlZWxlbXNbaV0ucHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODAyLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzgwMzpcdFx0aWYgKCFuZnRfc2V0ZWxlbV9pc19jYXRjaGFsbCh0ZS1cdTAwM2VzZXQsIHRlLVx1MDAzZWVsZW1zW2ldLnByaXYpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzgwNC1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VuZWxlbXMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4MTM9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2Rlc3Ryb3lfYWJvcnQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODIzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzgyNDpcdFx0aWYgKCFuZnRfc2V0ZWxlbV9pc19jYXRjaGFsbCh0ZS1cdTAwM2VzZXQsIHRlLVx1MDAzZWVsZW1zW2ldLnByaXYpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzgyNS1cdFx0XHR0ZS1cdTAwM2VzZXQtXHUwMDNlbmRlYWN0LS07XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzkyMz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk1MC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5NTE6c3RhdGljIGludCBfX25mdF9zZXRfY2F0Y2hhbGxfZmx1c2goY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NTItXHRcdFx0XHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTY3LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Nzk2ODpzdGF0aWMgaW50IG5mdF9zZXRfY2F0Y2hhbGxfZmx1c2goY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NjktXHRcdFx0XHQgIHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3MS1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KGN0eC1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Nzk3MjpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3My1cdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NzUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTc2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3Ny1cdFx0XHRcdGxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChjdHgtXHUwMDNlbmV0KSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Nzk3ODpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3OS1cdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk4MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5ODI6XHRcdHJldCA9IF9fbmZ0X3NldF9jYXRjaGFsbF9mbHVzaChjdHgsIHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTgzLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc5OTE9c3RhdGljIGludCBuZnRfc2V0X2ZsdXNoKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsIHU4IGdlbm1hc2spXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwMy1cdGlmICghaXRlci5lcnIpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4MDA0Olx0XHRpdGVyLmVyciA9IG5mdF9zZXRfY2F0Y2hhbGxfZmx1c2goY3R4LCBzZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDQ5NT1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZ2NfdHJhbnNfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDUwNi1cdFx0ZWxlbV9wcml2ID0gdHJhbnMtXHUwMDNlcHJpdltpXTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNTA3Olx0XHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRyYW5zLVx1MDAzZXNldCwgZWxlbV9wcml2KSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNTA4LVx0XHRcdGF0b21pY19kZWMoXHUwMDI2dHJhbnMtXHUwMDNlc2V0LVx1MDAzZW5lbGVtcyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2NDA9dm9pZCBuZnRfdHJhbnNfZ2NfcXVldWVfc3luY19kb25lKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKnRyYW5zKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjUxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2NTI6c3RydWN0IG5mdF90cmFuc19nYyAqbmZ0X3RyYW5zX2djX2NhdGNoYWxsX2FzeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NTMtXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBnY19zZXEpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY1NC17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY1NTpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NTYtXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0ID0gZ2MtXHUwMDNlc2V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjU4LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2NTk6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjYwOlx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY2MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjczOlx0XHRuZnRfdHJhbnNfZ2NfZWxlbV9hZGQoZ2MsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NzQtXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NzgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY3OTpzdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjgwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjgxOlx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2ODItXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAoZ2MtXHUwMDNlbmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjg5Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhdGNoYWxsLCBuZXh0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2OTA6XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjk4LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2OTk6XHRcdGVsZW1fcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMC1cdFx0bmZ0X3NldGVsZW1fZGF0YV9kZWFjdGl2YXRlKGdjLVx1MDAzZW5ldCwgZ2MtXHUwMDNlc2V0LCBlbGVtX3ByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3MDE6XHRcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX2Rlc3Ryb3koY2F0Y2hhbGwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3MDItXHRcdG5mdF90cmFuc19nY19lbGVtX2FkZChnYywgZWxlbV9wcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNTkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG5mX3RhYmxlcyBDYXRjaGFsbCBFbGVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBkZWFsaW5nIHdpdGggY2F0Y2hhbGwgZWxlbWVudHMgaW4gYG5mX3RhYmxlc2Agc2V0cy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBiZWNhdXNlIGluc2VydGluZyBhIGNhdGNoYWxsIGVsZW1lbnQgd2hlbiB0aGVyZSB3YXMgYW4gZXhwaXJlZCBvbmUgcHJlc2VudCB1c2VkIHRvIGNhdXNlIGlzc3VlcyAocmV0dXJuaW5nIGAtRUVYSVNUYCBpbmNvcnJlY3RseSwgb3IgZGVhY3RpdmF0aW5nIHRoZSBleHBpcmVkIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgYWN0aXZlIG9uZSkuIFRoaXMgaGFzIHRvdWNoZWQgZXhlY3V0YWJsZSBsb2dpYyB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4KCkZpcnN0IHRoaW5ncyBmaXJzdDogaXMgdGhpcyBldmVuIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBgbmZfdGFibGVzYCBpcyBjb3JlLCByZWFjaGFibGUgYnkgdW5wcml2aWxlZ2VkIHVzZXJzIGluIHVzZXIgbmFtZXNwYWNlcyAodGhyb3VnaCBgQ0xPTkVfTkVXVVNFUiB8IENMT05FX05FV05FVGApIG9yLCBtb3JlIGNvbW1vbmx5LCBieSByb290IGFuZCB0aG9zZSB3aXRoIGBDQVBfTkVUX0FETUlOYC4gVGhpcyBtYWtlcyBpdCBwcmltZSBzeXprYWxsZXIgdGVycml0b3J5IOKAkyBhIHdlbGwta25vd24gYnVnLXByb25lIHN1YnN5c3RlbS4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRlZmluaW5nIG15IGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3Mgc2VlLCB0aGUgZnVuY3Rpb25zIHRvdWNoZWQgYXJlIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRob3NlIHRoZSByaWdodCBsZXZlbCBvZiBncmFudWxhcml0eSBmb3IgdGhlIGZ1enplcj8gTGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyEgVGhleSBzdGF0ZSB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFsdGVyZWQsIG9yIHRoZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBBbHNvLCBsZXQmIzM5O3MgYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgZnV6emVyIGZyb20gYmVpbmcgZGlsdXRlZC4gU28sIGFyZSB0aGVzZSBpdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgbWlnaHQgYmUgaW5saW5lZC4KCkhhbmcgb24uIEkgc2VlIHRoZXkmIzM5O3JlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGZ1bmN0aW9uczogYHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KC4uLilgIGFuZCBgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKC4uLilgLiBDb3VsZCB0aGUgY29tcGlsZXIgaGF2ZSBpbmxpbmVkIHRoZW0/IEdpdmVuIHRoZXkmIzM5O3JlIG9ubHkgY2FsbGVkICpvbmNlKiBlYWNoLCBmcm9tIGBuZnRfc2V0ZWxlbV9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAgcmVzcGVjdGl2ZWx5LCBpdCYjMzk7cyB2ZXJ5IHBvc3NpYmxlLgoKT2theSwgc28gd2hhdCAqYXJlKiB0aGUgYWN0dWFsIGVudHJ5cG9pbnRzPyBJIGhhdmUgdG8gY29uc2lkZXI6CiogICBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YAoqICAgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgCiogICBgbmZ0X3NldGVsZW1faW5zZXJ0YAoqICAgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgCiogICBgbmZfdGFibGVzX25ld3NldGVsZW1gCiogICBgbmZfdGFibGVzX2RlbHNldGVsZW1gCgpTbywgbGV0JiMzOTtzIGluY2x1ZGUgYm90aCB0aGUgY29yZSBjYXRjaGFsbCBmdW5jdGlvbnMgYW5kIHRoZWlyIGltbWVkaWF0ZSBjYWxsZXJzLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHNjb3BlLCBhbmQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGNoZWNrIHdoYXQgb3RoZXIgc3ltYm9scyBleGlzdCBpbiBgbmZfdGFibGVzX2FwaS5jYCBhcm91bmQgYG5ld3NldGVsZW1gIGFuZCBgZGVsc2V0ZWxlbWAuIFRoaXMgd2lsbCBnaXZlIHRoZSBmdXp6ZXIgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfKG5ld3xkZWwpc2V0ZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2Njg6c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2OS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Nzk5MT1zdGF0aWMgaW50IG5mdF9zZXRfZmx1c2goc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwgdTggZ2VubWFzaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDA4LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODAwOTpzdGF0aWMgaW50IG5mX3RhYmxlc19kZWxzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDEwLVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDQyLVx0W05GVF9NU0dfTkVXU0VURUxFTV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA0MzpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfbmV3c2V0ZWxlbSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDQ0LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjAtXHRbTkZUX01TR19ERUxTRVRFTEVNXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDYxOlx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjItXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2Ni1cdFtORlRfTVNHX0RFU1RST1lTRVRFTEVNXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDY3Olx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjgtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1MDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgZGVmaW5pdGVseSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGZvY3VzIGlzIHByZWNpc2UuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgd291bGQgYmUgYG5mdF9zZXRlbGVtX2luc2VydGAsIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCwgYG5mX3RhYmxlc19uZXdzZXRlbGVtYCwgYW5kIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIAoKTm93LCBob3cgZ3JhbnVsYXIgZG8gSSBuZWVkIHRvIGJlIHdpdGggdGhlIGtleSBmdW5jdGlvbnMgdG8gaW5jbHVkZT8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBGb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLCBJIGhhdmU6IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgLCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAsIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAsIGFuZCBgbmZfdGFibGVzX2RlbHNldGVsZW1gLgoKSG9sZCBvbi4uLiB3aGF0IGFib3V0IHRoZSB1c2VyLWZhY2luZyBlbnRyeXBvaW50czogYG5mdF9hZGRfc2V0X2VsZW1gIGFuZCBgbmZ0X2RlbF9zZXRlbGVtYD8gVGhvc2UgYXJlIGNydWNpYWwsIHRvby4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBgY2F0Y2hhbGxgIGZ1bmN0aW9ucyBtaWdodCBiZSBpbmxpbmVkLiBJZiB0aGV5IGFyZSBpbmxpbmVkLCB0aGVuIGluY2x1ZGluZyBgbmZ0X3NldGVsZW1faW5zZXJ0YCwgYG5mdF9hZGRfc2V0X2VsZW1gLCBvciBgbmZfdGFibGVzX25ld3NldGVsZW1gIHdvdWxkIGNhcHR1cmUgdGhlbS4gCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJvYWRlbiB0aGUgbmV0IGEgYml0LCBqdXN0IHRvIGJlIHN1cmU6CgoqICAgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAKKiAgIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYAoqICAgYG5mdF9zZXRlbGVtX2luc2VydGAKKiAgIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYAoqICAgYG5mdF9hZGRfc2V0X2VsZW1gCiogICBgbmZ0X2RlbF9zZXRlbGVtYAoKQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaXMgc2V0LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGlzIGVuYWJsZWQuIFdhaXQsIGRvZXMgdGhhdCBvcHRpb24gZGVwZW5kIG9uIGFueXRoaW5nIGVsc2U/IEkgc2hvdWxkIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFyb3VuZCBgY29uZmlnIE5GX1RBQkxFU2AgKGFyb3VuZCBsaW5lIDQ1NSkuIEkmIzM5O2xsIHNjYW4gYSB3aWRlciByYW5nZSwgc2F5IGxpbmVzIDQ0MCB0byA0NzAsIGp1c3QgdG8gYmUgc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGV2YW50IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRcbiA0NDE6XHRjb25maWcgTkZfTkFUX1JFRElSRUNUXG4gNDQyOlx0XHRib29sXG4gNDQzOlx0XG4gNDQ0Olx0Y29uZmlnIE5GX05BVF9NQVNRVUVSQURFXG4gNDQ1Olx0XHRib29sXG4gNDQ2Olx0XG4gNDQ3Olx0Y29uZmlnIE5GX05BVF9PVlNcbiA0NDg6XHRcdGJvb2xcbiA0NDk6XHRcbiA0NTA6XHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXG4gNDUxOlx0XHR0cmlzdGF0ZVxuIDQ1MjpcdFxuIDQ1MzpcdGVuZGlmICMgTkZfQ09OTlRSQUNLXG4gNDU0Olx0XG4gNDU1Olx0Y29uZmlnIE5GX1RBQkxFU1xuIDQ1NjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gNDU3Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuIDQ1ODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gNDU5Olx0XHRoZWxwXG4gNDYwOlx0XHQgIG5mdGFibGVzIGlzIHRoZSBuZXcgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGZyYW1ld29yayB0aGF0IGludGVuZHMgdG9cbiA0NjE6XHRcdCAgcmVwbGFjZSB0aGUgZXhpc3Rpbmcge2lwLGlwNixhcnAsZWJ9X3RhYmxlcyBpbmZyYXN0cnVjdHVyZS4gSXRcbiA0NjI6XHRcdCAgcHJvdmlkZXMgYSBwc2V1ZG8tc3RhdGUgbWFjaGluZSB3aXRoIGFuIGV4dGVuc2libGUgaW5zdHJ1Y3Rpb24tc2V0XG4gNDYzOlx0XHQgIChhbHNvIGtub3duIGFzIGV4cHJlc3Npb25zKSB0aGF0IHRoZSB1c2Vyc3BhY2UgJiMzOTtuZnQmIzM5OyB1dGlsaXR5XG4gNDY0Olx0XHQgIChodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL25mdGFibGVzKSB1c2VzIHRvIGJ1aWxkIHRoZVxuIDQ2NTpcdFx0ICBydWxlLXNldC4gSXQgYWxzbyBjb21lcyB3aXRoIHRoZSBnZW5lcmljIHNldCBpbmZyYXN0cnVjdHVyZSB0aGF0XG4gNDY2Olx0XHQgIGFsbG93cyB5b3UgdG8gY29uc3RydWN0IG1hcHBpbmdzIGJldHdlZW4gbWF0Y2hpbmdzIGFuZCBhY3Rpb25zXG4gNDY3Olx0XHQgIGZvciBwZXJmb3JtYW5jZSBsb29rdXBzLlxuIDQ2ODpcdFxuIDQ2OTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDQ3MDpcdFxuIDQ3MTpcdGlmIE5GX1RBQkxFU1xuIDQ3MjpcdGNvbmZpZyBORl9UQUJMRVNfSU5FVFxuIDQ3MzpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gNDc0Olx0XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIGBORl9UQUJMRVNgIGl0c2VsZiBkb2VzbiYjMzk7dCBleHBsaWNpdGx5ICpkZXBlbmQgb24qIGFueXRoaW5nIGVsc2UgaW4gdGhlIHN0YW5kYXJkIEtjb25maWcgc2Vuc2UuIEJ1dCwgaXQmIzM5O3MgbmVzdGVkIHdpdGhpbiB0aGUgJiMzNDtDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uJiMzNDsgbWVudS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBwYXJ0IG9mIGEgbGFyZ2VyLCBjb250ZXh0dWFsIGdyb3VwaW5nLiBBbmQgdGhhdCBtZW51IGlzICpndWFyZGVkKiBieSB0aGUgYE5FVEZJTFRFUmAgc3ltYm9sLCB3aGljaCBtZWFucyBlbmFibGluZyBgTkZfVEFCTEVTYCBoaW5nZXMgb24gYE5FVEZJTFRFUmAgYmVpbmcgYWN0aXZlLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCBwcm9iYWJseSBnbGFuY2UgYXQgdGhlIHN0YXJ0IG9mIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSB2YXJpb3VzIGNvbXBvbmVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBBbHdheXMgZ29vZCB0byBoYXZlIHRoZSBmdWxsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudSBcJiMzNDtDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xuICAgNjpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgaW5ncmVzcyBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZWZhdWx0IHlcbiAgIDg6XHRcdHNlbGVjdCBORVRfSU5HUkVTU1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBmcm9tIGluZ3Jlc3MgdXNpbmcgdGhlIE5ldGZpbHRlclxuICAxMTpcdFx0ICBpbmZyYXN0cnVjdHVyZS5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTkVURklMVEVSX0VHUkVTU1xuICAxNDpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgZWdyZXNzIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0c2VsZWN0IE5FVF9FR1JFU1NcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmVmb3JlIHRyYW5zbWlzc2lvbiB1c2luZyB0aGVcbiAgMTk6XHRcdCAgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcbiAgMjI6XHRcdGRlZl9ib29sIE5FVEZJTFRFUl9FR1JFU1MgXHUwMDI2XHUwMDI2IChORVRfQ0xTX0FDVCB8fCBJRkIpXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXG4gIDI1Olx0XHRib29sXG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gIDI4Olx0XHRib29sXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXG4gIDMxOlx0XHRib29sXG4gIDMyOlx0XG4gIDMzOlx0Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xuICAzNDpcdFx0ZGVmX2Jvb2wgQlBGX1NZU0NBTExcbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xuICAzNzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDM5Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuICA0MDpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTkzCgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbmZfdGFibGVzYCBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMuIFRoaXMgYG5mX3RhYmxlc2AgcGF0Y2ggY2xlYXJseSBoaW5nZXMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCwgYnV0IGBORVRGSUxURVJgIGlzIHByZXR0eSBtdWNoIHN0YW5kYXJkIG5ldHdvcmtpbmcsIHNvIHJlYWxseSwgaXQmIzM5O3MgYWJvdXQgdGhvc2Uga2V5IGBORl9UQUJMRVNgIGNvbmZpZ3VyYXRpb25zLiBGaXJzdCBzdGVwLCBjb25maXJtIHRoYXQgYE5GX1RBQkxFU2AgYnVpbGRzIGBuZl90YWJsZXNfYXBpLm9gIGJ5IGNoZWNraW5nIHRoZSBNYWtlZmlsZS4gWWVwLCBsaW5lIDEwOCBvZiBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWA6IGBvYmotJChDT05GSUdfTkZfVEFCTEVTKSAmIzQzOz0gbmZfdGFibGVzLm9gIGFuZCBgbmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gLi4uYCBjb25maXJtcyBpdC4gQW5kIGBORl9UQUJMRVNgIGlzIGEgY2hpbGQgb2YgYE5FVEZJTFRFUmAuCgpOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gSXMgdGhpcyBwYXRjaCBhY3R1YWxseSBpbiBjb2RlIHRoYXQgZ2V0cyBydW4/IEFic29sdXRlbHkuIEl0IG1vZGlmaWVzIGBuZl90YWJsZXNfYXBpLmNgLCB3aGljaCBoYW5kbGVzIHRob3NlIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyB0byBjb25maWd1cmUgbmZ0YWJsZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRob3NlIHNwZWNpZmljIHNldCBlbGVtZW50cywgdGhlIGNhdGNoYWxsIG9uZXMsIHdpdGggdGltZW91dHMuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHRvIGhhbmRsZSBlbGVtZW50IGV4cGlyYXRpb24gdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYC4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogY2hhbmdlIGluIGhvdyBjYXRjaGFsbCBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgKGF2b2lkaW5nIC1FRVhJU1QgZm9yIGV4cGlyZWQgZWxlbWVudHMpIGFuZCBkZWFjdGl2YXRlZCAoc2tpcHBpbmcgZXhwaXJlZCBlbGVtZW50cykuCgpHaXZlbiB0aGUgaGlzdG9yeSBvZiBidWdzIGluIG5mX3RhYmxlcyBzZXQgc3RhdGUgaGFuZGxpbmcsIGVzcGVjaWFsbHkgdGhlIGxpZmVjeWNsZSB0cmFuc2l0aW9ucyByZWxhdGVkIHRvIGV4cGlyYXRpb24sIEkmIzM5O20gYWxyZWFkeSBzZWVpbmcgc29tZSBwb3RlbnRpYWwgcmVkIGZsYWdzLiBSYWNlIGNvbmRpdGlvbnMsIHN0YXRlIGluY29uc2lzdGVuY2llcywgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MgYXJlIHBsYXVzaWJsZSB3aXRoIHRoaXMga2luZCBvZiBjaGFuZ2UuCgpTbywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyBwYXJhbWV0ZXJzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGBSZWFzb25pbmdgIHdpbGwgaGlnaGxpZ2h0IHRoZSBuZl90YWJsZXMgc2V0IGVsZW1lbnQgbGlmZWN5Y2xlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBleHBpcmF0aW9uIGhhbmRsaW5nIGluIHJlYWNoYWJsZSBuZXRmaWx0ZXIgbmV0bGluayBjb2RlLCBwb2ludGluZyBvdXQgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zLCBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgd2l0aCBjYXRjaGFsbCBlbGVtZW50cy4gV2UmIzM5O2xsIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZXNlIGZ1bmN0aW9uczogYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAsIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCwgYG5mdF9zZXRlbGVtX2luc2VydGAsIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCwgYG5mdF9hZGRfc2V0X2VsZW1gLCBhbmQgYG5mdF9kZWxfc2V0ZWxlbWAuIEFuZCBvZiBjb3Vyc2UsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBORVRGSUxURVJgIGFuZCBgTkZfVEFCTEVTYC4KClRoYXQmIzM5O3MgaXQuIEl0JiMzOTtzIGFsbCBjbGVhci4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1faW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2FkZF9zZXRfZWxlbSYjMzQ7LAogICAgJiMzNDtuZnRfZGVsX3NldGVsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1faW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2FkZF9zZXRfZWxlbSYjMzQ7LAogICAgJiMzNDtuZnRfZGVsX3NldGVsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGV4cGlyYXRpb24gY2hlY2tzIHZpYSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHRvIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AsIG1hdGNoaW5nIHRoZSBleHBpcmF0aW9uIGNoZWNrIHNlbWFudGljcyB1c2VkIGluIG90aGVyIHNldCB0eXBlcyAoc3VjaCBhcyBoYXNoLCByYnRyZWUsIGFuZCBwaXBhcG8pLlxuXG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOiBUaGUgbG9jYWwgdmFyaWFibGUgYHRzdGFtcGAgaXMgYW4gZXhwbGljaXRseSBpbml0aWFsaXplZCA2NC1iaXQgdGltZXN0YW1wIChgdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldClgKS4gVGhlIHNldCBlbGVtZW50IGV4dGVuc2lvbiBpbnNwZWN0ZWQgYnkgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBpbiBgbmZ0X3NldF9lbGVtX2luaXQoKWAsIHdoZXJlIGB0aW1lb3V0YCBhbmQgYGV4cGlyYXRpb25gIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgZmlyc3QgY29uZmlybXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYE5GVF9TRVRfRVhUX1RJTUVPVVRgIGV4dGVuc2lvbiBiZWZvcmUgcmVhZGluZyB0aGVzZSBmaWVsZHMuXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6IEZhaWxpbmcgdG8gY2hlY2sgZXhwaXJhdGlvbiBmb3IgY2F0Y2hhbGwgZWxlbWVudHMgcHJldmlvdXNseSByaXNrZWQgbG9naWNhbCBlcnJvcnMgKC1FRVhJU1Qgb24gaW5zZXJ0KSBhbmQgbGlmZWN5Y2xlIGJ1Z3Mgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSAvIGRvdWJsZS1mcmVlIGlmIGRlYWN0aXZhdGlvbiByYWNlZCB3aXRoIEdDIGVsZW1lbnQgcmVjbGFtYXRpb24gKGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYygpYCkuIE1lbW9yeSBzYWZldHkgaXNzdWVzIG9mIHRoaXMgdHlwZSAoVUFGLCBkb3VibGUtZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIHBhcnRpYWwgc3RydWN0dXJlIGNvcGllcyBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiMGI3YzFlYjQ5MzQyN2U4NDQ3NjY0ZTcxZTk1Y2EzMjFjOTQwZmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxMzoxMTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggNzY1YTkyZmE5MGQ2Mi4uN2VmMmUxOWU2NjU1YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTY5OTEsMTEgJiM0Mzs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwKIHsKIAlzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDsKIAl1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpOwomIzQzOwl1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTsKIAlzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsICZhbXA7c2V0LSZndDtjYXRjaGFsbF9saXN0LCBsaXN0KSB7CiAJCWV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC0mZ3Q7ZWxlbSk7Ci0JCWlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpIHsKJiM0MzsJCWlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgJmFtcDsmYW1wOwomIzQzOwkJICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkgewogCQkJKnByaXYgPSBjYXRjaGFsbC0mZ3Q7ZWxlbTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9CkBAIC03MDg4LDExICYjNDM7NzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKQogewogCXN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsOwomIzQzOwl1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTsKIAlzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsICZhbXA7c2V0LSZndDtjYXRjaGFsbF9saXN0LCBsaXN0KSB7CiAJCWV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC0mZ3Q7ZWxlbSk7Ci0JCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSkKJiM0MzsJCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fAomIzQzOwkJICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKQogCQkJY29udGludWU7CiAKIAkJa2ZyZWUoZWxlbS0mZ3Q7cHJpdik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCBjb2RlLiBNeSBpbml0aWFsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGltZSB0byBwdWxsIHVwIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEkgdGhpbmsgSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIGxvb2ssIG9yIHBlcmhhcHMgYGdyZXBwZXJgIGlmIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGtleXdvcmRzIG9yIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gZXN0YWJsaXNoIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBzdGFydCBwb2tpbmcgYXJvdW5kIHdpdGggdGhlIGRldGFpbHMgb2YgdGhlIHBhdGNoIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyB3aWxsIGJlIGFzIGNyaXRpY2FsIGFzIHRoZSAmIzM0O3doYXQuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5ODA6XHRcdFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxuNjk4MTpcdFx0XHRcdHJldHVybiBleHQ7XG42OTgyOlx0XHR9XG42OTgzOlx0XG42OTg0Olx0XHRyZXR1cm4gTlVMTDtcbjY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG42OTk1Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5OTY6XHRcbjY5OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG42OTk4Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjY5OTk6XHRcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbjcwMDA6XHRcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xuNzAwMTpcdFx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcwMDI6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjcwMDM6XHRcdFx0fVxuNzAwNDpcdFx0fVxuNzAwNTpcdFxuNzAwNjpcdFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG43MDA3Olx0XHRpZiAoIWNhdGNoYWxsKVxuNzAwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcwMDk6XHRcbjcwMTA6XHRcdGNhdGNoYWxsLVx1MDAzZWVsZW0gPSBlbGVtLVx1MDAzZXByaXY7XG43MDExOlx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XG43MDEyOlx0XG43MDEzOlx0XHRyZXR1cm4gMDtcbjcwMTQ6XHR9XG43MDE1Olx0XG43MDE2Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzAxNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDE4Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjcwMTk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcbjcwMjA6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG43MDIxOlx0e1xuNzAyMjpcdFx0aW50IHJldDtcbjcwMjM6XHRcbjcwMjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxuNzAyNTpcdFx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG43MDI2Olx0XHRlbHNlXG43MDI3Olx0XHRcdHJldCA9IHNldC1cdTAwM2VvcHMtXHUwMDNlaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xuNzAyODpcdFxuNzAyOTpcdFx0cmV0dXJuIHJldDtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwMzM6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuNzAzNDpcdHtcbjcwMzU6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XG43MDM2Olx0XG43MDM3Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfRkxBR1MpIFx1MDAyNlx1MDAyNlxuNzAzODpcdFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG43MDM5Olx0XHRcdHJldHVybiB0cnVlO1xuNzA0MDpcdFxuNzA0MTpcdFx0cmV0dXJuIGZhbHNlO1xuNzA0MjpcdH1cbjcwNDM6XHRcbjcwNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDQ1Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbjcwNDY6XHR7XG43MDQ3Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xuNzA0ODpcdFxuNzA0OTpcdFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xuNzA1MDpcdFx0XHRuZnRfY2xlYXIobmV0LCBleHQpO1xuNzA1MTpcdFx0fSBlbHNlIHtcbjcwNTI6XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbjcwNTM6XHRcdH1cbjcwNTQ6XHR9XG43MDU1Olx0XG43MDU2Olx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDU3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXG43MDU4Olx0e1xuNzA1OTpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbjcwNjA6XHRcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXHUwMDNldXBkYXRlO1xuNzA2MTpcdFxuNzA2MjpcdFx0aWYgKHVwZGF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1RSQU5TX1VQRF9USU1FT1VUKVxuNzA2MzpcdFx0XHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0LCB1cGRhdGUtXHUwMDNldGltZW91dCk7XG43MDY0Olx0XG43MDY1Olx0XHRpZiAodXBkYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXG43MDY2Olx0XHRcdFdSSVRFX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24sIGdldF9qaWZmaWVzXzY0KCkgJiM0MzsgdXBkYXRlLVx1MDAzZWV4cGlyYXRpb24pO1xuNzA2NzpcdH1cbjcwNjg6XHRcbjcwNjk6XHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG43MDcwOlx0XHRcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlKVxuNzA3MTpcdHtcbjcwNzI6XHRcdGludCBpO1xuNzA3MzpcdFxuNzA3NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGUtXHUwMDNlbmVsZW1zOyBpJiM0MzsmIzQzOykge1xuNzA3NTpcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtID0gXHUwMDI2dGUtXHUwMDNlZWxlbXNbaV07XG43MDc2Olx0XG43MDc3Olx0XHRcdGlmIChlbGVtLVx1MDAzZXVwZGF0ZSlcbjcwNzg6XHRcdFx0XHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXHUwMDNlc2V0LCBlbGVtKTtcbjcwNzk6XHRcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEkmIzM5O20gdGhlIG9uZSBoYXZpbmcgdGhlc2UgdGhvdWdodHMsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIG5mX3RhYmxlc19hcGkuYyBDb2RlKioKClJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgYW5kIGV4YW1pbmUgbGluZXMgNzA4MCB0aHJvdWdoIDcxNDAgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNlY3Rpb24gaW4gZGV0YWlsLCBwcm9iYWJseSB0byBncmFzcCBhIHBhcnRpY3VsYXIgZGF0YSBzdHJ1Y3R1cmUgb3IgaW50ZXJhY3Rpb24gcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBBcmUgd2UgZGVhbGluZyB3aXRoIHRhYmxlIGNyZWF0aW9uLCBydWxlIG1hbmlwdWxhdGlvbiwgc2V0IHVwZGF0ZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHdpdGhpbiB0aGUgbmZfdGFibGVzIGZyYW1ld29yaz8gSXMgdGhpcyB3aGVyZSB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXNlci1zcGFjZSBBUEksIG9yIHBlcmhhcHMgYW4gaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9uPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSDigJMgY29tbWVudHMsIHZhcmlhYmxlIG5hbWVzLCBmdW5jdGlvbiBjYWxscyDigJMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGRlc2lnbiBjaG9pY2VzIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvciBidWcgZml4ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwODA6XHRcdFx0XHRuZnRfc2V0ZWxlbV9hY3RpdmF0ZShjdHgtXHUwMDNlbmV0LCB0ZS1cdTAwM2VzZXQsIGVsZW0tXHUwMDNlcHJpdik7XG43MDgxOlx0XG43MDgyOlx0XHRcdG5mX3RhYmxlc19zZXRlbGVtX25vdGlmeShjdHgsIHRlLVx1MDAzZXNldCwgZWxlbS1cdTAwM2Vwcml2LFxuNzA4MzpcdFx0XHRcdFx0XHQgTkZUX01TR19ORVdTRVRFTEVNKTtcbjcwODQ6XHRcdFx0a2ZyZWUoZWxlbS1cdTAwM2V1cGRhdGUpO1xuNzA4NTpcdFx0fVxuNzA4NjpcdH1cbjcwODc6XHRcbjcwODg6XHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzA4OTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuNzA5MDpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuNzA5MTpcdHtcbjcwOTI6XHRcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xuNzA5MzpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG43MDk0Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjcwOTU6XHRcbjcwOTY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG43MDk3Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjcwOTg6XHRcdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XG43MDk5Olx0XHRcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbjcxMDA6XHRcdFx0XHRjb250aW51ZTtcbjcxMDE6XHRcbjcxMDI6XHRcdFx0a2ZyZWUoZWxlbS1cdTAwM2Vwcml2KTtcbjcxMDM6XHRcdFx0ZWxlbS1cdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcxMDQ6XHRcdFx0bmZ0X3NldF9lbGVtX2NoYW5nZV9hY3RpdmUobmV0LCBzZXQsIGV4dCk7XG43MTA1Olx0XHRcdHJldHVybiAwO1xuNzEwNjpcdFx0fVxuNzEwNzpcdFxuNzEwODpcdFx0cmV0dXJuIC1FTk9FTlQ7XG43MTA5Olx0fVxuNzExMDpcdFxuNzExMTpcdHN0YXRpYyBpbnQgX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcxMTI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuNzExMzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG43MTE0Olx0e1xuNzExNTpcdFx0dm9pZCAqcHJpdjtcbjcxMTY6XHRcbjcxMTc6XHRcdHByaXYgPSBzZXQtXHUwMDNlb3BzLVx1MDAzZWRlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xuNzExODpcdFx0aWYgKCFwcml2KVxuNzExOTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjcxMjA6XHRcbjcxMjE6XHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG43MTIyOlx0XHRlbGVtLVx1MDAzZXByaXYgPSBwcml2O1xuNzEyMzpcdFx0c2V0LVx1MDAzZW5kZWFjdCYjNDM7JiM0Mzs7XG43MTI0Olx0XG43MTI1Olx0XHRyZXR1cm4gMDtcbjcxMjY6XHR9XG43MTI3Olx0XG43MTI4Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcxMjk6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcxMzA6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSwgdTMyIGZsYWdzKVxuNzEzMTpcdHtcbjcxMzI6XHRcdGludCByZXQ7XG43MTMzOlx0XG43MTM0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcbjcxMzU6XHRcdFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XG43MTM2Olx0XHRlbHNlXG43MTM3Olx0XHRcdHJldCA9IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XG43MTM4Olx0XG43MTM5Olx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFnYWluLiBJIHNlZSBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBob3cgY2F0Y2hhbGwgZWxlbWVudHMgYXJlIGhhbmRsZWQgd2l0aGluIE5ldGZpbHRlciBzZXRzLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGFuIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIG1lY2hhbmlzbSBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIsIHNvIEkmIzM5O2xsIGJyZWFrIGl0IGRvd24uCgpGaXJzdCwgSSBub3RpY2UgdGhlIGFkZGl0aW9uIG9mIGB1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtgIGluIGJvdGggdGhlIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgZnVuY3Rpb25zLiBUaGlzIHRpbWVzdGFtcCB2YXJpYWJsZSBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBlbGVtZW50IGV4cGlyYXRpb24gb3IgdGltZS1iYXNlZCBtYW5hZ2VtZW50LiBUaGUgc3Vic2VxdWVudCBjYWxscyB0byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBjb25maXJtIHRoaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgZXhwaXJ5IGR1cmluZyBib3RoIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIG9mIHRoZSBjYXRjaGFsbCBlbGVtZW50LgoKSW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAsIHRoZSBjb2RlIG5vdyBjaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgYWN0aXZlICphbmQqIG5vdCBleHBpcmVkIGJlZm9yZSByZXR1cm5pbmcgLUVFWElTVC4gVGhlIHNhbWUgbG9naWMgaXMgYXBwbGllZCB0byBkZWFjdGl2YXRpb24gbG9naWMuCgpTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgZG9lcy4gQmFzZWQgb24gdGhlIG5hbWluZywgaXQmIzM5O3MgY2xlYXIgaXQmIzM5O3MgdGhlIGNvcmUgZXhwaXJ5IGNoZWNrLiBBbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksIEkgbXVzdCBmaWd1cmUgb3V0IHdoYXQgYG5mdF9uZXRfdHN0YW1wYCBkb2VzOyB0aGF0JiMzOTtzIHRoZSBzb3VyY2UgZm9yIHRoaXMgdGltZXN0YW1wLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRpbWVzdGFtcCBpcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBtb3JlIGNvbnRleHQgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gVGltZSBmb3IgYSBncmVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25mdF9zZXRfZWxlbV9leHBpcmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD04MzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKm5mdF9zZXRfZXh0X2V4cHIoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgzNy1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4Mzg6c3RhdGljIGlubGluZSBib29sIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODM5LVx0XHRcdFx0XHQgIHU2NCB0c3RhbXApXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTg0OD1zdGF0aWMgaW5saW5lIGJvb2wgbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODQ5LXtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4NTA6XHRyZXR1cm4gX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIGdldF9qaWZmaWVzXzY0KCkpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg1MS19XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk4Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5OS1cdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMDA6XHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDEtXHRcdFx0KnByaXYgPSBjYXRjaGFsbC1cdTAwM2VlbGVtO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwODg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDk4LVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwOTk6XHRcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMDAtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2Nzk9c3RydWN0IG5mdF90cmFuc19nYyAqbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoc3RydWN0IG5mdF90cmFuc19nYyAqZ2MpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY5MjpcdFx0aWYgKCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkzLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9NTk9c3RhdGljIGlubGluZSBpbnQgbmZ0X3JoYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNjgtXHRcdHJldHVybiAxO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo2OTpcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNmhlLVx1MDAzZWV4dCwgeC1cdTAwM2V0c3RhbXApKVxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy03MC1cdFx0cmV0dXJuIDE7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTQxOT1zdGF0aWMgc3RydWN0IG5mdF9waXBhcG9fZWxlbSAqcGlwYXBvX2dldF9zbG93KGNvbnN0IHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy00NzgtXHRcdFx0ZSA9IGYtXHUwMDNlbXRbYl0uZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzo0Nzk6XHRcdFx0aWYgKHVubGlrZWx5KF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2ZS1cdTAwM2VleHQsIHRzdGFtcCkgfHxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy00ODAtXHRcdFx0XHQgICAgICFuZnRfc2V0X2VsZW1fYWN0aXZlKFx1MDAyNmUtXHUwMDNlZXh0LCBnZW5tYXNrKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE3MTA9c3RhdGljIHZvaWQgcGlwYXBvX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldCwgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3NTAtXHRcdCAqL1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjE3NTE6XHRcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNmUtXHUwMDNlZXh0LCB0c3RhbXApKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTc1Mi1cdFx0XHRpZiAoIW5mdF90cmFuc19nY19zcGFjZShnYykpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYz0xMTMwPXN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKnBpcGFwb19nZXRfYXZ4Mihjb25zdCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYy0xMjE2LVx0XHRcdGUgPSBmLVx1MDAzZW10W3JldF0uZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jOjEyMTc6XHRcdFx0aWYgKHVubGlrZWx5KF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2ZS1cdTAwM2VleHQsIHRzdGFtcCkgfHxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jLTEyMTgtXHRcdFx0XHQgICAgICFuZnRfc2V0X2VsZW1fYWN0aXZlKFx1MDAyNmUtXHUwMDNlZXh0LCBnZW5tYXNrKSkpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MzQyPXN0YXRpYyBpbnQgX19uZnRfcmJ0cmVlX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTM5Ny1cdFx0ICovXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6Mzk4Olx0XHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZyYmUtXHUwMDNlZXh0LCB0c3RhbXApIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTM5OS1cdFx0ICAgIG5mdF9zZXRfZWxlbV9hY3RpdmUoXHUwMDI2cmJlLVx1MDAzZWV4dCwgY3VyX2dlbm1hc2spKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTc4Mz1uZnRfcmJ0cmVlX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04MTktXHRcdFx0XHRjb250aW51ZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo4MjA6XHRcdFx0fSBlbHNlIGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNnJiZS1cdTAwM2VleHQsIHRzdGFtcCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04MjEtXHRcdFx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODkxPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy05MTEtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo5MTI6XHRcdGlmICghX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZyYmUtXHUwMDNlZXh0LCB0c3RhbXApKVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTkxMy1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBORlRhYmxlcyBFeHBpcmVkIEVsZW1lbnQgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24sIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaGAsIGhhbmRsZXMgdGhlIGV4cGlyYXRpb24gb2YgZWxlbWVudHMgd2l0aGluIE5GVGFibGVzIHNldHMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgdGhlIGxpZmV0aW1lIG9mIGVudHJpZXMgaW4gdGhlc2UgdGFibGVzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIHBvdGVudGlhbGx5IG9wdGltaXppbmcgb3IgdHJvdWJsZXNob290aW5nIHNldCBtYW5hZ2VtZW50LiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIHRoZSBpbmNsdXNpb24gbG9jYXRpb24sIGl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzIHJlbGF0ZWQgdG8gZXhwaXJpbmcgZWxlbWVudHMsIHJhdGhlciB0aGFuIHRoZSBleHRlcm5hbCB0cmlnZ2VyaW5nLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBleHBpcmVkIGVsZW1lbnQgcmVtb3ZhbCBpcyBpbXBsZW1lbnRlZCwgY29uc2lkZXJpbmcgZmFjdG9ycyBsaWtlIHBvdGVudGlhbCBsb2NrcywgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IHNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGZvciBkaWZmZXJlbnQgc2V0IHR5cGVzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmRzIHRvd2FyZHMgaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGFuZCBnZXQgYSBzZW5zZSBmb3IgdGhlIGV4cGlyYXRpb24gYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzIHRoYXQgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzU6XHRcdHJldHVybiBuZnRfc2V0X2V4dChleHQsIE5GVF9TRVRfRVhUX0VYUFJFU1NJT05TKTtcbiA4MzY6XHR9XG4gODM3Olx0XG4gODM4Olx0c3RhdGljIGlubGluZSBib29sIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXG4gODM5Olx0XHRcdFx0XHRcdCAgdTY0IHRzdGFtcClcbiA4NDA6XHR7XG4gODQxOlx0XHRpZiAoIW5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX1RJTUVPVVQpIHx8XG4gODQyOlx0XHQgICAgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0KSA9PSAwKVxuIDg0MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODQ0Olx0XG4gODQ1Olx0XHRyZXR1cm4gdGltZV9hZnRlcl9lcTY0KHRzdGFtcCwgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2VleHBpcmF0aW9uKSk7XG4gODQ2Olx0fVxuIDg0NzpcdFxuIDg0ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcbiA4NDk6XHR7XG4gODUwOlx0XHRyZXR1cm4gX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIGdldF9qaWZmaWVzXzY0KCkpO1xuIDg1MTpcdH1cbiA4NTI6XHRcbiA4NTM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9lbGVtX2V4dChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIDg1NDpcdFx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZWxlbV9wcml2ICplbGVtX3ByaXYpXG4gODU1Olx0e1xuIDg1NjpcdFx0cmV0dXJuICh2b2lkICopZWxlbV9wcml2ICYjNDM7IHNldC1cdTAwM2VvcHMtXHUwMDNlZWxlbXNpemU7XG4gODU3Olx0fVxuIDg1ODpcdFxuIDg1OTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mdF9vYmplY3QgKipuZnRfc2V0X2V4dF9vYmooY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZDoKCioqQ2hlY2tpbmcgYG5mdF9uZXRfdHN0YW1wYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuZnRfbmV0X3RzdGFtcGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGN1cnJlbnQgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBpbXBsZW1lbnRlZCB3aXRoIGl0IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBjb25jZXJucy4gSXMgdGhpcyByZWxhdGVkIHRvIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gSXMgaXQgY29uZmlndXJlZCBvcHRpbWFsbHksIG9yIGFyZSB0aGVyZSBvYnZpb3VzIGdhaW5zIHRvIGJlIG1hZGUgYnkgYWRqdXN0aW5nIHNvbWUgb2YgdGhlIHVuZGVybHlpbmcgc2V0dGluZ3M/IEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgYXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgaXRzIHVzYWdlIHdpdGhpbiB0aGUgbmV0d29yayBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yay4gV2hhdCBvdGhlciByZWxhdGVkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBpdD8gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGxpa2VseSBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpZiB0aGlzIHRpbWVzdGFtcCBpcyB3b3JraW5nIGFzIGludGVuZGVkIGFuZCBpZiB0aGVyZSBhcmUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIHRpbWVzdGFtcCBwb3RlbnRpYWxseSBpbXBhY3RzIGEgbG90IG9mIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X25ldF90c3RhbXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTE5NjE9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfcGVybmV0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtMTk2NS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDoxOTY2OnN0YXRpYyBpbmxpbmUgdTY0IG5mdF9uZXRfdHN0YW1wKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC0xOTY3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTg3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTkzLVx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5OTQ6XHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTUtXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5Mi1cdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5MzpcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5NC1cdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjc5PXN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjgxLVx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2ODI6XHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAoZ2MtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjgzLVx0Y29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCA9IGdjLVx1MDAzZXNldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTE3MT1zdGF0aWMgaW50IG5mdF9yaGFzaF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtMTgwLVx0XHQua2V5XHQgPSBlbGVtLVx1MDAzZWtleS52YWwuZGF0YSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6MTgxOlx0XHQudHN0YW1wXHQgPSBuZnRfbmV0X3RzdGFtcChuZXQpLFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy0xODItXHR9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9MjE1PW5mdF9yaGFzaF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTIyMy1cdFx0LmtleVx0ID0gZWxlbS1cdTAwM2VrZXkudmFsLmRhdGEsXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jOjIyNDpcdFx0LnRzdGFtcFx0ID0gbmZ0X25ldF90c3RhbXAobmV0KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtMjI1LVx0fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTI4Nj1zdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI5NS1cdHN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKmUsICpkdXA7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI5NjpcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyOTctXHRzdHJ1Y3QgbmZ0X3BpcGFwb19maWVsZCAqZjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTcxNC1cdHVuc2lnbmVkIGludCBydWxlc19mMCwgZmlyc3RfcnVsZSA9IDA7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTcxNTpcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3MTYtXHRzdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICplO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xOTE0PW5mdF9waXBhcG9fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE5MjYtXHRlID0gcGlwYXBvX2dldChtLCAoY29uc3QgdTggKillbGVtLVx1MDAzZWtleS52YWwuZGF0YSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxOTI3Olx0XHQgICAgICAgbmZ0X2dlbm1hc2tfbmV4dChuZXQpLCBuZnRfbmV0X3RzdGFtcChuZXQpKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xOTI4LVx0aWYgKCFlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz02ODI9c3RhdGljIGludCBuZnRfcmJ0cmVlX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTY4Ny1cdHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6Njg4Olx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtNjg5LVx0aW50IGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9NzgzPW5mdF9yYnRyZWVfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTc4OS1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6NzkwOlx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtNzkxLVx0aW50IGQ7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg5MT1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODk1LVx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNnNldC1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjg5NjpcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTg5Ny1cdHN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MDcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENhdGNoYWxsIEVsZW1lbnQgRXhwaXJhdGlvbiBpbiBOZXRmaWx0ZXIgU2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29kZSBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGhhZCBhIHN1YnRsZSBmbGF3IHJlZ2FyZGluZyBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnRzLiBFc3NlbnRpYWxseSwgdGhlIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIGxvZ2ljIHdhc24mIzM5O3QgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRpbWVvdXRzLgoKSW4gdGhlIGBpbnNlcnRgIGZ1bmN0aW9uLCBpZiBhbiBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQgd2FzIGFjdGl2ZSwgdGhlIGNvZGUgd2FzIGluY29ycmVjdGx5IHJldHVybmluZyBgLUVFWElTVGAuIFRoaXMgbWVhbnMgYSBzdGFsZSwgZXhwaXJlZCBydWxlIGNvdWxkIGJlIHByZXZlbnRpbmcgYSBmcmVzaCBydWxlIGZyb20gdGFraW5nIGVmZmVjdC4gSSYjMzk7dmUgY29ycmVjdGVkIHRoaXMgbm93IHNvIHRoYXQgZXhwaXJlZCBlbGVtZW50cyBhcmVuJiMzOTt0IHRyZWF0ZWQgYXMgYWN0aXZlbHkgY29uZmxpY3RpbmcuCgpUaGUgYGRlYWN0aXZhdGVgIGZ1bmN0aW9uIGhhZCBhIHNpbWlsYXIgaXNzdWUuIElmIHNvbWVvbmUgdHJpZWQgdG8gZGVhY3RpdmF0ZSBhbiBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQsIGl0IHdvdWxkIGdvIGFoZWFkIGFuZCBkZWFjdGl2YXRlIGl0LiBUaGlzIGlzIGEgcHJvYmxlbSwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoaXMgY291bGQgbGVhZCB0byBhIGRvdWJsZSBkZWFjdGl2YXRpb24gb3IgcmFjZSBjb25kaXRpb25zLiBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBza2lwIHRoZXNlIGVsZW1lbnRzLgoKVGhlIGtleSBoZXJlIGlzIGVuc3VyaW5nIGV4cGlyZWQgZWxlbWVudHMgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5IGFjcm9zcyB0aGUgYm9hcmQsIGxpa2UgaG93IHJidHJlZSwgcmhhc2gsIG9yIHBpcGFwbyBzZXRzIG1hbmFnZSB0aGVtOiBieSBpZ25vcmluZyB0aGVtLCBhcyBpZiB0aGV5IGFyZSBub3QgZm91bmQgb3IgcmVhZHkgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4gVGhpcyBjb3JyZWN0aW9uIGlzIGEgc3RhbmRhcmQgYmVzdCBwcmFjdGljZSB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgYmVoYXZpb3VyLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIGZpeCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRpbWUgZm9yIGEgS01TQU4gY2hlY2s6IGFtIEkgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmU/IExldCYjMzk7cyBjaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4KCjEuICAqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlKjogRG9lcyB0aGlzIHBhdGNoIHRvdWNoIGFueSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBtZXNzYWdlIGdlbmVyYXRpb24sIHBhZGRpbmc/IE5vLCBzZWVtcyBzYWZlIGhlcmUuCgoyLiAgKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyo6IEkgbmVlZCB0byBjaGVjayBgbmZ0X25ldF90c3RhbXBgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3QgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIHRoZSBrZXkgdGhpbmcgdG8gZG91YmxlIGNoZWNrLgozLiAgKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocyouIE5vdCBzZWVpbmcgYW55IG9mIHRoYXQgaGVyZS4KNC4gICpCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuKiBUaGlzIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLgoKTG9va3MgbGlrZSB0aGUgb25seSByZW1haW5pbmcgcXVlc3Rpb24gaXMgYG5mdF9uZXRfdHN0YW1wYC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gaG93IHRoYXQgZnVuY3Rpb24gYmVoYXZlcyB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTYwOlx0XG4xOTYxOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfcGVybmV0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbjE5NjI6XHR7XG4xOTYzOlx0XHRyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCBuZl90YWJsZXNfbmV0X2lkKTtcbjE5NjQ6XHR9XG4xOTY1Olx0XG4xOTY2Olx0c3RhdGljIGlubGluZSB1NjQgbmZ0X25ldF90c3RhbXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuMTk2NzpcdHtcbjE5Njg6XHRcdHJldHVybiBuZnRfcGVybmV0KG5ldCktXHUwMDNldHN0YW1wO1xuMTk2OTpcdH1cbjE5NzA6XHRcbjE5NzE6XHQjZW5kaWYgLyogX05FVF9ORl9UQUJMRVNfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE5GVCBFbGVtZW50IEV4cGlyYXRpb24gaW4gbmZfdGFibGVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0aW1lc3RhbXAsIGBuZnRfcGVybmV0KG5ldCktJmd0O3RzdGFtcGAsIGlzIHVwZGF0ZWQgaW4gbmZfdGFibGVzIGR1cmluZyB0cmFuc2FjdGlvbi9uZXRsaW5rIGJhdGNoIHByb2Nlc3NpbmcuIEl0JiMzOTtzIHVwZGF0ZWQgcHJldHR5IHJlZ3VsYXJseS4gQnV0LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGUgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCBmdW5jdGlvbiBhbmQgdGhlIG92ZXJhbGwgZXhwaXJhdGlvbiBtZWNoYW5pc20uCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyBlbGVtZW50IHRpbWVvdXRzIGFyZSBtYW5hZ2VkLiBJIGtub3cgYG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX1RJTUVPVVQpYCBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHRpbWVvdXQgZXh0ZW5zaW9uLiBJZiBpdCAqZG9lcyogZXhpc3QsIEkgZ3JhYiB0aGUgdGltZW91dCB2YWx1ZSB1c2luZyBgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS0mZ3Q7dGltZW91dClgIGFuZCB0aGUgZWxlbWVudCYjMzk7cyBleHBpcmF0aW9uIHRpbWUuCgpXaGF0IEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaXM6IHdoZW4gYSB0aW1lb3V0IGV4dGVuc2lvbiAoYE5GVF9TRVRfRVhUX1RJTUVPVVRgKSBpcyBmaXJzdCAqYWxsb2NhdGVkKiB0byBhIHNldCBlbGVtZW50LCBob3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IFdoYXQgdmFsdWVzIGFyZSBhc3NpZ25lZCBpbml0aWFsbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWZhdWx0IHN0YXRlIG9mIHRoZSB0aW1lb3V0IGNvdW50ZXIuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZnRfc2V0X2VsZW1faW5pdGAgZnVuY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlcnMgSSYjMzk7bSBsb29raW5nIGZvciBhbmQgcHJvdmlkZSBhIHN0YXJ0aW5nIHBvaW50IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGUgdGltZW91dCBleHRlbnNpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhhdCBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9lbGVtX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTg2ND1zdHJ1Y3QgbmZ0X2V4cHIgKm5mdF9zZXRfZWxlbV9leHByX2FsbG9jKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2Ny1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4Njg6c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODY5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02Nzc0PXN0YXRpYyBpbnQgbmZ0X3NldF9leHRfbWVtY3B5KGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLCB1OCBpZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Nzg0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njc4NTpzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY3ODYtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1Mjc6XHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyOC1cdFx0XHRcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgZWxlbS5kYXRhLnZhbC5kYXRhLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4Mjk9c3RhdGljIGludCBuZnRfZGVsX3NldGVsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODg1LVx0ZXJyID0gLUVOT01FTTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc4ODY6XHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzg4Ny1cdFx0XHRcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgTlVMTCwgMCwgMCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYz01Nj1zdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X2R5bnNldF9uZXcoc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy02OC1cdHRpbWVvdXQgPSBwcml2LVx1MDAzZXRpbWVvdXQgPyA6IFJFQURfT05DRShzZXQtXHUwMDNldGltZW91dCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzo2OTpcdGVsZW1fcHJpdiA9IG5mdF9zZXRfZWxlbV9pbml0KHNldCwgXHUwMDI2cHJpdi1cdTAwM2V0bXBsLFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNzAtXHRcdFx0XHQgICAgICBcdTAwMjZyZWdzLVx1MDAzZWRhdGFbcHJpdi1cdTAwM2VzcmVnX2tleV0sIE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzIzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBuZl90YWJsZXNfYXBpLmM6IG5mdF9zZXRfZWxlbV9pbml0KioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGFyZSBiZWluZyBpbml0aWFsaXplZCB3aXRoaW4gdGhlIHNldHMsIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBgbmZ0X3NldF9lbGVtX2luaXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uc3RydWN0aW9uIG9mIHNldCBlbGVtZW50cyB3aXRoaW4gdGhlIE5ldGZpbHRlciB0YWJsZSBmcmFtZXdvcmssIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gYmUgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgbGFpZCBvdXQgYW5kIGhvdyB0aGUgbWVtb3J5IGlzIG1hbmFnZWQgZm9yIHRoZXNlIHNldCBlbGVtZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgZ29hbCBvZiB0aGUgcm91dGluZSBpcy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2Nzg1Olx0c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42Nzg2Olx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuNjc4NzpcdFx0XHRcdFx0XHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxuNjc4ODpcdFx0XHRcdFx0XHRjb25zdCB1MzIgKmRhdGEsXG42Nzg5Olx0XHRcdFx0XHRcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKVxuNjc5MDpcdHtcbjY3OTE6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuNjc5MjpcdFx0dm9pZCAqZWxlbTtcbjY3OTM6XHRcbjY3OTQ6XHRcdGVsZW0gPSBremFsbG9jKHNldC1cdTAwM2VvcHMtXHUwMDNlZWxlbXNpemUgJiM0MzsgdG1wbC1cdTAwM2VsZW4sIGdmcCk7XG42Nzk1Olx0XHRpZiAoZWxlbSA9PSBOVUxMKVxuNjc5NjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjY3OTc6XHRcbjY3OTg6XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtKTtcbjY3OTk6XHRcdG5mdF9zZXRfZXh0X2luaXQoZXh0LCB0bXBsKTtcbjY4MDA6XHRcbjY4MDE6XHRcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9LRVkpIFx1MDAyNlx1MDAyNlxuNjgwMjpcdFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9LRVksXG42ODAzOlx0XHRcdFx0ICAgICAgIG5mdF9zZXRfZXh0X2tleShleHQpLCBrZXksIHNldC1cdTAwM2VrbGVuKSBcdTAwM2MgMClcbjY4MDQ6XHRcdFx0Z290byBlcnJfZXh0X2NoZWNrO1xuNjgwNTpcdFxuNjgwNjpcdFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWV9FTkQpIFx1MDAyNlx1MDAyNlxuNjgwNzpcdFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9LRVlfRU5ELFxuNjgwODpcdFx0XHRcdCAgICAgICBuZnRfc2V0X2V4dF9rZXlfZW5kKGV4dCksIGtleV9lbmQsIHNldC1cdTAwM2VrbGVuKSBcdTAwM2MgMClcbjY4MDk6XHRcdFx0Z290byBlcnJfZXh0X2NoZWNrO1xuNjgxMDpcdFxuNjgxMTpcdFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0RBVEEpIFx1MDAyNlx1MDAyNlxuNjgxMjpcdFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9EQVRBLFxuNjgxMzpcdFx0XHRcdCAgICAgICBuZnRfc2V0X2V4dF9kYXRhKGV4dCksIGRhdGEsIHNldC1cdTAwM2VkbGVuKSBcdTAwM2MgMClcbjY4MTQ6XHRcdFx0Z290byBlcnJfZXh0X2NoZWNrO1xuNjgxNTpcdFxuNjgxNjpcdFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX1RJTUVPVVQpKSB7XG42ODE3Olx0XHRcdG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0ID0gdGltZW91dDtcbjY4MTg6XHRcbjY4MTk6XHRcdFx0aWYgKGV4cGlyYXRpb24gPT0gMClcbjY4MjA6XHRcdFx0XHRleHBpcmF0aW9uID0gdGltZW91dDtcbjY4MjE6XHRcbjY4MjI6XHRcdFx0bmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24gPSBnZXRfamlmZmllc182NCgpICYjNDM7IGV4cGlyYXRpb247XG42ODIzOlx0XHR9XG42ODI0Olx0XG42ODI1Olx0XHRyZXR1cm4gZWxlbTtcbjY4MjY6XHRcbjY4Mjc6XHRlcnJfZXh0X2NoZWNrOlxuNjgyODpcdFx0a2ZyZWUoZWxlbSk7XG42ODI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzUyCgkJCQkJCQlvdXRwdXQ6IDM1OAoJCQkJCQkJdGhvdWdodHM6IDEyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIFNlc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmlzayB0aGF0ICpvbmx5KiBLTVNBTiBjb3VsZCBkZXRlY3QuIFRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBhZGRpbmcgZXhwaXJhdGlvbiBjaGVja3MgdG8gdGhlIGBjYXRjaGFsbGAgc2V0IHR5cGUgd2l0aGluIHRoZSBOZXRmaWx0ZXIgdGFibGUgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBQcmV2aW91c2x5LCB0aGVzZSBmdW5jdGlvbnMgZGlkbiYjMzk7dCBjaGVjayBmb3IgZXhwaXJlZCBlbGVtZW50cywgd2hpY2ggaXMgbm93IGJlaW5nIGNvcnJlY3RlZCB0byBhbGlnbiB3aXRoIGhvdyBvdGhlciBzZXQgdHlwZXMgKHJoYXNoLCByYnRyZWUsIHBpcGFwbykgaGFuZGxlIGV4cGlyYXRpb24gdXNpbmcgdGhlIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAgbWFjcm8uCgpUaGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgb3IgY29udHJvbCBmbG93LgoKKiAgIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhlIGJ1ZyB0aGUgcGF0Y2ggZml4ZXM6IGFuIGV4cGlyZWQgZWxlbWVudCBjb3VsZCBjYXVzZSBgLUVFWElTVGAgb24gaW5zZXJ0IGR1ZSB0byBhbiBpbmNvcnJlY3QgYWN0aXZlIGNoZWNrLiBEZWFjdGl2YXRpbmcgaXQgY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MuCgoqICAgVGhlIHRpbWVyIHZhbHVlIChgdHN0YW1wYCkgdXNlZCBpbiB0aGUgZXhwaXJ5IGNoZWNrIGlzIGluaXRpYWxpemVkIGxvY2FsbHkgd2l0aCB0aGUgcmVzdWx0IG9mIGBuZnRfbmV0X3RzdGFtcChuZXQpYC4KCiogICBga3phbGxvY2AgaXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgY2F0Y2hhbGwgZWxlbWVudCBleHRlbnNpb25zLCBlbnN1cmluZyBpbml0aWFsaXphdGlvbiBvZiBmaWVsZHMgaW5jbHVkaW5nIGB0aW1lb3V0YCBhbmQgYGV4cGlyYXRpb25gLCBhbmQgdGhlc2UgYXJlIHN1YnNlcXVlbnRseSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggaXRzZWxmIGRvZXNuJiMzOTt0IGNoYW5nZSBpbml0aWFsaXphdGlvbiBsb2dpYy4KCiogICBUaGUgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgIG1hY3JvIGNoZWNrcyB0aGF0IGBORlRfU0VUX0VYVF9USU1FT1VUYCBleGlzdHMsIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHRpbWVvdXQgYW5kIGV4cGlyYXRpb24gZmllbGRzLgoKVGhlIGJ1Z3MgdGhpcyBwYXRjaCBhZGRyZXNzZXMgKGRvdWJsZS1mcmVlLCBVQUYsIGFuZCByYWNlcykgYXJlIGNsYXNzaWMgaXNzdWVzIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZS4gVGhlIHBhdGNoIGNvcnJlY3RzIGxvZ2ljIHRvIHByZXZlbnQgdGhlc2UgbWVtb3J5LWxpZmVjeWNsZSBidWdzIGZyb20gYmVpbmcgaGl0LgoKTG9va2luZyBhdCB0aGUgcnVsZXMsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCBLTVNBTiBpcyB1bmlxdWVseSBwb3NpdGlvbmVkIHRvIGNhdGNoOgoKMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGV4cG9zZWQuCjIuICBUaGUgY29kZSBkb2VzbiYjMzk7dCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBmb3IgY29udHJvbCBmbG93LgozLiAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBpbiByZWFjaGFibGUgY29kZS4KNC4gIEJvdW5kcyBjaGVja3MgYW5kIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBhcmUgdW5hZmZlY3RlZCBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKRXNzZW50aWFsbHksIGJ5IGFkZGluZyB0aGlzIGV4cGlyYXRpb24gY2hlY2ssIHdlIGFyZSBlbGltaW5hdGluZyB0aGVzZSBjbGFzc2VzIG9mIGJ1Z3MuIFRoZSBjaGFuZ2VzIGludHJvZHVjZSBzYWZlciBjb2RlLCBidXQgdGhleSBkbyBub3QgaW5jcmVhc2UgdGhlIHJpc2sgb2YgS01TQU4tc3BlY2lmaWMgYnVncy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgdGhlIGFwcHJvcHJpYXRlIGFwcHJvYWNoIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXhwaXJhdGlvbiBjaGVja3MgdmlhIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAgdG8gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCgpYCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCwgbWF0Y2hpbmcgdGhlIGV4cGlyYXRpb24gY2hlY2sgc2VtYW50aWNzIHVzZWQgaW4gb3RoZXIgc2V0IHR5cGVzIChzdWNoIGFzIGhhc2gsIHJidHJlZSwgYW5kIHBpcGFwbykuXG5cbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6IFRoZSBsb2NhbCB2YXJpYWJsZSBgdHN0YW1wYCBpcyBhbiBleHBsaWNpdGx5IGluaXRpYWxpemVkIDY0LWJpdCB0aW1lc3RhbXAgKGB1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KWApLiBUaGUgc2V0IGVsZW1lbnQgZXh0ZW5zaW9uIGluc3BlY3RlZCBieSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBuZnRfc2V0X2VsZW1faW5pdCgpYCwgd2hlcmUgYHRpbWVvdXRgIGFuZCBgZXhwaXJhdGlvbmAgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBmaXJzdCBjb25maXJtcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgTkZUX1NFVF9FWFRfVElNRU9VVGAgZXh0ZW5zaW9uIGJlZm9yZSByZWFkaW5nIHRoZXNlIGZpZWxkcy5cbi0gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTogRmFpbGluZyB0byBjaGVjayBleHBpcmF0aW9uIGZvciBjYXRjaGFsbCBlbGVtZW50cyBwcmV2aW91c2x5IHJpc2tlZCBsb2dpY2FsIGVycm9ycyAoLUVFWElTVCBvbiBpbnNlcnQpIGFuZCBsaWZlY3ljbGUgYnVncyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIC8gZG91YmxlLWZyZWUgaWYgZGVhY3RpdmF0aW9uIHJhY2VkIHdpdGggR0MgZWxlbWVudCByZWNsYW1hdGlvbiAoYG5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKClgKS4gTWVtb3J5IHNhZmV0eSBpc3N1ZXMgb2YgdGhpcyB0eXBlIChVQUYsIGRvdWJsZS1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgcGFydGlhbCBzdHJ1Y3R1cmUgY29waWVzIGFyZSBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBleHBpcmF0aW9uIGNoZWNrcyB2aWEgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCB0byBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KClgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSgpYCBpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLCBtYXRjaGluZyB0aGUgZXhwaXJhdGlvbiBjaGVjayBzZW1hbnRpY3MgdXNlZCBpbiBvdGhlciBzZXQgdHlwZXMgKHN1Y2ggYXMgaGFzaCwgcmJ0cmVlLCBhbmQgcGlwYXBvKS5cblxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczogVGhlIGxvY2FsIHZhcmlhYmxlIGB0c3RhbXBgIGlzIGFuIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgNjQtYml0IHRpbWVzdGFtcCAoYHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpYCkuIFRoZSBzZXQgZWxlbWVudCBleHRlbnNpb24gaW5zcGVjdGVkIGJ5IGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYG5mdF9zZXRfZWxlbV9pbml0KClgLCB3aGVyZSBgdGltZW91dGAgYW5kIGBleHBpcmF0aW9uYCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGZpcnN0IGNvbmZpcm1zIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGBORlRfU0VUX0VYVF9USU1FT1VUYCBleHRlbnNpb24gYmVmb3JlIHJlYWRpbmcgdGhlc2UgZmllbGRzLlxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OiBGYWlsaW5nIHRvIGNoZWNrIGV4cGlyYXRpb24gZm9yIGNhdGNoYWxsIGVsZW1lbnRzIHByZXZpb3VzbHkgcmlza2VkIGxvZ2ljYWwgZXJyb3JzICgtRUVYSVNUIG9uIGluc2VydCkgYW5kIGxpZmVjeWNsZSBidWdzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgLyBkb3VibGUtZnJlZSBpZiBkZWFjdGl2YXRpb24gcmFjZWQgd2l0aCBHQyBlbGVtZW50IHJlY2xhbWF0aW9uIChgbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoKWApLiBNZW1vcnkgc2FmZXR5IGlzc3VlcyBvZiB0aGlzIHR5cGUgKFVBRiwgZG91YmxlLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBObyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBwYXJ0aWFsIHN0cnVjdHVyZSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjExOjA2LjQ0MDc5NjE0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTYyMDM0NjYyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9zZXRlbGVtX2luc2VydFwiLFxuICAgIFwibmZ0X3NldGVsZW1fZGVhY3RpdmF0ZVwiLFxuICAgIFwibmZ0X2FkZF9zZXRfZWxlbVwiLFxuICAgIFwibmZ0X2RlbF9zZXRlbGVtXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGlyYXRpb24gY2hlY2tzIHZpYSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHRvIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AsIG1hdGNoaW5nIHRoZSBleHBpcmF0aW9uIGNoZWNrIHNlbWFudGljcyB1c2VkIGluIG90aGVyIHNldCB0eXBlcyAoc3VjaCBhcyBoYXNoLCByYnRyZWUsIGFuZCBwaXBhcG8pLlxcblxcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6IFRoZSBsb2NhbCB2YXJpYWJsZSBgdHN0YW1wYCBpcyBhbiBleHBsaWNpdGx5IGluaXRpYWxpemVkIDY0LWJpdCB0aW1lc3RhbXAgKGB1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KWApLiBUaGUgc2V0IGVsZW1lbnQgZXh0ZW5zaW9uIGluc3BlY3RlZCBieSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBuZnRfc2V0X2VsZW1faW5pdCgpYCwgd2hlcmUgYHRpbWVvdXRgIGFuZCBgZXhwaXJhdGlvbmAgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBmaXJzdCBjb25maXJtcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgTkZUX1NFVF9FWFRfVElNRU9VVGAgZXh0ZW5zaW9uIGJlZm9yZSByZWFkaW5nIHRoZXNlIGZpZWxkcy5cXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6IEZhaWxpbmcgdG8gY2hlY2sgZXhwaXJhdGlvbiBmb3IgY2F0Y2hhbGwgZWxlbWVudHMgcHJldmlvdXNseSByaXNrZWQgbG9naWNhbCBlcnJvcnMgKC1FRVhJU1Qgb24gaW5zZXJ0KSBhbmQgbGlmZWN5Y2xlIGJ1Z3Mgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSAvIGRvdWJsZS1mcmVlIGlmIGRlYWN0aXZhdGlvbiByYWNlZCB3aXRoIEdDIGVsZW1lbnQgcmVjbGFtYXRpb24gKGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYygpYCkuIE1lbW9yeSBzYWZldHkgaXNzdWVzIG9mIHRoaXMgdHlwZSAoVUFGLCBkb3VibGUtZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIHBhcnRpYWwgc3RydWN0dXJlIGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIGxvZ2ljIGluIG5mX3RhYmxlcyAobmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMpIHRvIHRha2UgZWxlbWVudCBleHBpcmF0aW9uIGludG8gYWNjb3VudCB2aWEgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpLiBuZl90YWJsZXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBhbmQgc2V0IGVsZW1lbnQgbGlmZWN5Y2xlL2V4cGlyYXRpb24gaGFuZGxpbmcgaXMgcHJvbmUgdG8gc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCByZWZlcmVuY2UgY291bnRpbmcvdXNlLWFmdGVyLWZyZWUgYnVncy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGlzIGFsdGVyZWQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTE6MDYuNDQwODk3OTE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUzMjEwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYjBiN2MxZWI0OTM0MjdlODQ0NzY2NGU3MWU5NWNhMzIxYzk0MGZmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjExOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5pbmRleCA3NjVhOTJmYTkwZDYyLi43ZWYyZTE5ZTY2NTVhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5AQCAtNjk5MSwxMSArNjk5MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuIFxcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XFxuK1xcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbiBcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG4tXFx0XFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSkge1xcbitcXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcXG4gXFx0XFx0XFx0KnByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdFxcdH1cXG5AQCAtNzA4OCwxMSArNzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbiB7XFxuIFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbitcXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcXG4gXFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuLVxcdFxcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSlcXG4rXFx0XFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XFxuK1xcdFxcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2Vwcml2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTE6MDcuMDU2ODA3ODA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MzQ5MTM5MzQzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9zZXRlbGVtX2luc2VydFwiLFxuICAgIFwibmZ0X3NldGVsZW1fZGVhY3RpdmF0ZVwiLFxuICAgIFwibmZ0X2FkZF9zZXRfZWxlbVwiLFxuICAgIFwibmZ0X2RlbF9zZXRlbGVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMGI3YzFlYjQ5MzQyN2U4NDQ3NjY0ZTcxZTk1Y2EzMjFjOTQwZmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMzoxMTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IDc2NWE5MmZhOTBkNjIuLjdlZjJlMTllNjY1NWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTkxLDExICs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4rXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKSB7XG4rXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbiBcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbkBAIC03MDg4LDExICs3MDkwLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4rXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXG4rXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuK1x0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxMTowNy4wNTY4MDkyNjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODc5NTgxODMxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBzYWZldHkgZ3VpZGVsaW5lcyB0byBtYWtlIHN1cmUgSSdtIG9uIHRoZSByaWdodCB0cmFjayDigJMgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBSaWdodCwgdGhpcyBpcyBkZWZlbnNpdmUgUUEgZm9yIHN5emthbGxlciwgZXZhbHVhdGluZyBhIExpbnV4IGtlcm5lbCBwYXRjaCBhcHBsaWVkIHRvIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFNvdW5kcyBzdHJhaWdodGZvcndhcmQsIGFuZCBkZWZpbml0ZWx5IGJlbmlnbjsgZGV2ZWxvcGVyIFFBLCBwYXRjaCBldmFsdWF0aW9uLi4uIG5vIG1hbHdhcmUgb3IgZXhwbG9pdCBkZXZlbG9wbWVudCBoZXJlLlxuXG5UaGUgY29yZSBvZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGluc3BlY3RpbmcgdGhlIGNvZGUsIGZpZ3VyaW5nIG91dCBgV29ydGhGdXp6aW5nYCwgZXh0cmFjdGluZyBhbnkgYEZvY3VzU3ltYm9sc2AsIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGVuLCBvZiBjb3Vyc2UsIHJlcG9ydGluZyB0aGUgcmVzdWx0cy5cblxuUmlnaHQsIGxldCdzIGxvb2sgYXQgdGhlIGFjdHVhbCBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHR3byBmdW5jdGlvbnMsIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAsIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYC4gVGhlIGRpZmYgaW50cm9kdWNlcyBhIGB0c3RhbXBgICh0aW1lc3RhbXApIHZhcmlhYmxlIGFuZCBhZGRzIGEgY2FsbCB0byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgaW4gdGhlIGNvbmRpdGlvbmFsIGNoZWNrcyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIHNvbWUgdGltZS1iYXNlZCBleHBpcnkgY2hlY2tzIHdpdGhpbiB0aGlzIGBuZnRfc2V0X2VsZW1gIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdyBJIG5lZWQgdG8gZ28gZGVlcGVyLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgZnVsbHksIEknbGwgbmVlZCB0byBzZWUgbW9yZSBjb250ZXh0LiBUaW1lIHRvIHVzZSBzb21lIHRvb2xzIOKAkyBlaXRoZXIgYSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHdob2xlIHBpY3R1cmUgb3IgbWF5YmUgYSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgYG5mdF9zZXRfZWxlbWAgaXMgdXNlZCBpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0aW1lc3RhbXAgY2hlY2tzIGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgY29kZSBwYXRocyB0aGF0IHdvdWxkIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGFuYWx5c2lzIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjE1LjAxNDk5NjU3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5ODAsXG4gIFwiTGluZUNvdW50XCI6IDEzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTgwOlxcdFxcdFxcdCAgICAhbmZ0X3NldF9lbGVtX2lzX2RlYWQoZXh0KSlcXG42OTgxOlxcdFxcdFxcdFxcdHJldHVybiBleHQ7XFxuNjk4MjpcXHRcXHR9XFxuNjk4MzpcXHRcXG42OTg0OlxcdFxcdHJldHVybiBOVUxMO1xcbjY5ODU6XFx0fVxcbjY5ODY6XFx0XFxuNjk4NzpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNjk4ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG42OTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLFxcbjY5OTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqcHJpdilcXG42OTkxOlxcdHtcXG42OTkyOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbjY5OTM6XFx0XFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG42OTk0OlxcdFxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbjY5OTU6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNjk5NjpcXHRcXG42OTk3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG42OTk4OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNjk5OTpcXHRcXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxuNzAwMDpcXHRcXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxuNzAwMTpcXHRcXHRcXHRcXHQqcHJpdiA9IGNhdGNoYWxsLVxcdTAwM2VlbGVtO1xcbjcwMDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuNzAwMzpcXHRcXHRcXHR9XFxuNzAwNDpcXHRcXHR9XFxuNzAwNTpcXHRcXG43MDA2OlxcdFxcdGNhdGNoYWxsID0ga21hbGxvY19vYmooKmNhdGNoYWxsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjcwMDc6XFx0XFx0aWYgKCFjYXRjaGFsbClcXG43MDA4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjcwMDk6XFx0XFxuNzAxMDpcXHRcXHRjYXRjaGFsbC1cXHUwMDNlZWxlbSA9IGVsZW0tXFx1MDAzZXByaXY7XFxuNzAxMTpcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2Y2F0Y2hhbGwtXFx1MDAzZWxpc3QsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QpO1xcbjcwMTI6XFx0XFxuNzAxMzpcXHRcXHRyZXR1cm4gMDtcXG43MDE0OlxcdH1cXG43MDE1OlxcdFxcbjcwMTY6XFx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcwMTc6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDE4OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuNzAxOTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcXG43MDIwOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG43MDIxOlxcdHtcXG43MDIyOlxcdFxcdGludCByZXQ7XFxuNzAyMzpcXHRcXG43MDI0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG43MDI1OlxcdFxcdFxcdHJldCA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG43MDI2OlxcdFxcdGVsc2VcXG43MDI3OlxcdFxcdFxcdHJldCA9IHNldC1cXHUwMDNlb3BzLVxcdTAwM2VpbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XFxuNzAyODpcXHRcXG43MDI5OlxcdFxcdHJldHVybiByZXQ7XFxuNzAzMDpcXHR9XFxuNzAzMTpcXHRcXG43MDMyOlxcdHN0YXRpYyBib29sIG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzAzMzpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcXG43MDM0OlxcdHtcXG43MDM1OlxcdFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XFxuNzAzNjpcXHRcXG43MDM3OlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9GTEFHUykgXFx1MDAyNlxcdTAwMjZcXG43MDM4OlxcdFxcdCAgICAqbmZ0X3NldF9leHRfZmxhZ3MoZXh0KSBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG43MDM5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjcwNDA6XFx0XFxuNzA0MTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNzA0MjpcXHR9XFxuNzA0MzpcXHRcXG43MDQ0OlxcdHN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2FjdGl2YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDQ1OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbjcwNDY6XFx0e1xcbjcwNDc6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbV9wcml2KTtcXG43MDQ4OlxcdFxcbjcwNDk6XFx0XFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xcbjcwNTA6XFx0XFx0XFx0bmZ0X2NsZWFyKG5ldCwgZXh0KTtcXG43MDUxOlxcdFxcdH0gZWxzZSB7XFxuNzA1MjpcXHRcXHRcXHRzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW1fcHJpdik7XFxuNzA1MzpcXHRcXHR9XFxuNzA1NDpcXHR9XFxuNzA1NTpcXHRcXG43MDU2OlxcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwNTc6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtKVxcbjcwNTg6XFx0e1xcbjcwNTk6XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cXHUwMDNlcHJpdik7XFxuNzA2MDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fdXBkYXRlICp1cGRhdGUgPSBlbGVtLVxcdTAwM2V1cGRhdGU7XFxuNzA2MTpcXHRcXG43MDYyOlxcdFxcdGlmICh1cGRhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1RSQU5TX1VQRF9USU1FT1VUKVxcbjcwNjM6XFx0XFx0XFx0V1JJVEVfT05DRShuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXFx1MDAzZXRpbWVvdXQsIHVwZGF0ZS1cXHUwMDNldGltZW91dCk7XFxuNzA2NDpcXHRcXG43MDY1OlxcdFxcdGlmICh1cGRhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1RSQU5TX1VQRF9FWFBJUkFUSU9OKVxcbjcwNjY6XFx0XFx0XFx0V1JJVEVfT05DRShuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXFx1MDAzZWV4cGlyYXRpb24sIGdldF9qaWZmaWVzXzY0KCkgKyB1cGRhdGUtXFx1MDAzZWV4cGlyYXRpb24pO1xcbjcwNjc6XFx0fVxcbjcwNjg6XFx0XFxuNzA2OTpcXHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuNzA3MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlKVxcbjcwNzE6XFx0e1xcbjcwNzI6XFx0XFx0aW50IGk7XFxuNzA3MzpcXHRcXG43MDc0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZS1cXHUwMDNlbmVsZW1zOyBpKyspIHtcXG43MDc1OlxcdFxcdFxcdHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0gPSBcXHUwMDI2dGUtXFx1MDAzZWVsZW1zW2ldO1xcbjcwNzY6XFx0XFxuNzA3NzpcXHRcXHRcXHRpZiAoZWxlbS1cXHUwMDNldXBkYXRlKVxcbjcwNzg6XFx0XFx0XFx0XFx0bmZ0X3RyYW5zX2VsZW1fdXBkYXRlKHRlLVxcdTAwM2VzZXQsIGVsZW0pO1xcbjcwNzk6XFx0XFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDoxNS4wMTU3Mzc2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0MDA1NzI3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUmVsZXZhbnQgU2VjdGlvbioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDcwODAgdG8gNzEzMC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGRpc2N1c3NlZCB3aXRoaW4gdGhhdCBzZWdtZW50LiBJIHN1c3BlY3QgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBqdW5jdHVyZSBpbiB0aGUgYXJndW1lbnQsIHBlcmhhcHMgYSBkZXRhaWxlZCBhbmFseXNpcywgYSBjYXNlIHN0dWR5LCBhIHBpdm90YWwgY29tcGFyaXNvbiwgb3IgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgZXZpZGVuY2UuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBxdWlja2x5IHNraW0gdGhvc2UgbGluZXMsIGxvb2tpbmcgZm9yIGtleSB0ZXJtcywgbWV0aG9kb2xvZ2ljYWwgc2hpZnRzLCBjb25jbHVzaW9ucyBiZWluZyBkcmF3biwgb3IgY291bnRlcmFyZ3VtZW50cyBiZWluZyBhZGRyZXNzZWQuIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIGNvbnRleHQgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgdGhhdCBzZWN0aW9uIGlmIHRoZSBtZWFuaW5nIGlzIHVuY2xlYXIuIEZyb20gZXhwZXJpZW5jZSwgaW1wb3J0YW50IGRpc2N1c3Npb25zIGFyZSBvZnRlbiBwcmVzZW50ZWQgaW4gc2hvcnQgc2VjdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQuIEkgd2lsbCBhbHNvIGJlIHByZXBhcmVkIHRvIHJldmlzaXQgYW5kIHJlLXJlYWQgaXQgaWYgdGhlIGZpcnN0IHBhc3MgZG9lc24ndCBwcm92aWRlIGEgY2xlYXIgcGljdHVyZTsgc29tZXRpbWVzIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgYXJndW1lbnQgb25seSByZXZlYWwgdGhlbXNlbHZlcyBhZnRlciBhIG1vcmUgdGhvcm91Z2ggYW5kIGNhcmVmdWwgZXhhbWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjE4LjQxNjMxMzgwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDgwOlxcdFxcdFxcdFxcdG5mdF9zZXRlbGVtX2FjdGl2YXRlKGN0eC1cXHUwMDNlbmV0LCB0ZS1cXHUwMDNlc2V0LCBlbGVtLVxcdTAwM2Vwcml2KTtcXG43MDgxOlxcdFxcbjcwODI6XFx0XFx0XFx0bmZfdGFibGVzX3NldGVsZW1fbm90aWZ5KGN0eCwgdGUtXFx1MDAzZXNldCwgZWxlbS1cXHUwMDNlcHJpdixcXG43MDgzOlxcdFxcdFxcdFxcdFxcdFxcdCBORlRfTVNHX05FV1NFVEVMRU0pO1xcbjcwODQ6XFx0XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNldXBkYXRlKTtcXG43MDg1OlxcdFxcdH1cXG43MDg2OlxcdH1cXG43MDg3OlxcdFxcbjcwODg6XFx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG43MDg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzA5MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbjcwOTE6XFx0e1xcbjcwOTI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNzA5MzpcXHRcXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcXG43MDk0OlxcdFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xcbjcwOTU6XFx0XFxuNzA5NjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XFxuNzA5NzpcXHRcXHRcXHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbjcwOTg6XFx0XFx0XFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XFxuNzA5OTpcXHRcXHRcXHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxuNzEwMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MTAxOlxcdFxcbjcxMDI6XFx0XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuNzEwMzpcXHRcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuNzEwNDpcXHRcXHRcXHRuZnRfc2V0X2VsZW1fY2hhbmdlX2FjdGl2ZShuZXQsIHNldCwgZXh0KTtcXG43MTA1OlxcdFxcdFxcdHJldHVybiAwO1xcbjcxMDY6XFx0XFx0fVxcbjcxMDc6XFx0XFxuNzEwODpcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43MTA5OlxcdH1cXG43MTEwOlxcdFxcbjcxMTE6XFx0c3RhdGljIGludCBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcxMTI6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzExMzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcXG43MTE0OlxcdHtcXG43MTE1OlxcdFxcdHZvaWQgKnByaXY7XFxuNzExNjpcXHRcXG43MTE3OlxcdFxcdHByaXYgPSBzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxuNzExODpcXHRcXHRpZiAoIXByaXYpXFxuNzExOTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43MTIwOlxcdFxcbjcxMjE6XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuNzEyMjpcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG43MTIzOlxcdFxcdHNldC1cXHUwMDNlbmRlYWN0Kys7XFxuNzEyNDpcXHRcXG43MTI1OlxcdFxcdHJldHVybiAwO1xcbjcxMjY6XFx0fVxcbjcxMjc6XFx0XFxuNzEyODpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcxMjk6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcxMzA6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXFxuNzEzMTpcXHR7XFxuNzEzMjpcXHRcXHRpbnQgcmV0O1xcbjcxMzM6XFx0XFxuNzEzNDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxuNzEzNTpcXHRcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG43MTM2OlxcdFxcdGVsc2VcXG43MTM3OlxcdFxcdFxcdHJldCA9IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxuNzEzODpcXHRcXG43MTM5OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjE4LjQxNzI0NDU2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyOTI1NjQwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIG5mX3RhYmxlcyBmb3IgU2VjdXJpdHkgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCBgbmZfdGFibGVzYCBpbiBuZXRmaWx0ZXIsIGEga25vd24gdGFyZ2V0IGZvciBzeXprYWxsZXIgZnV6emluZy4gTXkgZm9jdXMgaW1tZWRpYXRlbHkgc2hpZnRzIHRvIHRoZSBhdHRhY2sgc3VyZmFjZTogbmV0bGluayBhY2Nlc3MgdmlhIGBuZm5ldGxpbmtgLiBUaGF0IG1lYW5zIHVucHJpdmlsZWdlZCB1c2VyIG5hbWVzcGFjZXMgYXJlIGluIHBsYXkgaWYgYE5GX1RBQkxFU2AgaXMgZW5hYmxlZCwgb3IgZnVsbCBgQ0FQX05FVF9BRE1JTmAgYWNjZXNzIGlmIHRoYXQgaXNuJ3QgdGhlIGNhc2UuIFRoaXMgbWFrZXMgaXQgYW4gYXR0cmFjdGl2ZSB0YXJnZXQsIGFzIGV4cGVjdGVkLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzLiBMZXQgbWUgY2hlY2sgdGhlIGdpdCBsb2cgZm9yIHRoZSBjb21taXQuIEhtbSwgSSBkb24ndCBoYXZlIHRoZSBgZ2l0IGxvZ2AgdG9vbCByZWFkaWx5IGF2YWlsYWJsZS4gTm8gcHJvYmxlbSwgbGV0J3Mgc2VlLCBJIGNhbiB1c2UgZ3JlcHBlciBvciBpZiBJIGNhbid0IGRvIHRoYXQsIEknbGwgZXhhbWluZSB0aGUgY29tbWl0IGRpZmYgYW5kIHNlYXJjaCB0aGUgY29tbWl0IG1lc3NhZ2UgaWYgbmVjZXNzYXJ5LlxuXG5BY3R1YWxseSwgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhlIGNvbW1pdCwgbGV0J3MgY2xhcmlmeSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgc2hvdWxkIGNoZWNrIHdoaWNoIEtjb25maWcgb3B0aW9ucyBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiBgbmZfdGFibGVzX2FwaS5jYC4gQSBxdWljayBgZ3JlcGAgZm9yIGBuZl90YWJsZXNfYXBpLm9gIG9yIGBDT05GSUdfTkZfVEFCTEVTYCB3aWxsIGdpdmUgbWUgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gVGhpcyB3aWxsIGhlbHAgdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGFyZSByZWxldmFudCwgYW5kIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDcxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTQ6MjIuNzA5ODExNTYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzg5NjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfYXBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcXHQrPSBuZl9kdXBfbmV0ZGV2Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODYtIyBuZl90YWJsZXNcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg3Om5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cXHRcXHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDoyMi44NDc3MTI2MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzYzMTk0OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIE1ha2VmaWxlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHNwZWNpZmljIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGJ1aWxkIHByb2Nlc3MuIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSwgdGhlIGlzc3VlIGlzIGxpa2VseSByb290ZWQgaW4gb25lIG9mIHRoZSBNYWtlZmlsZSBydWxlcyBmb3IgdGhhdCBzdWJzeXN0ZW0uIE15IGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBsb2dpYyBpcyBtb3N0IGxpa2VseSBhcm91bmQgbGluZSA4NC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IHNlY3Rpb24gd2lsbCBoYW5kbGUgdGhlIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgb2YgYSBtb2R1bGUgSSdtIGludGVyZXN0ZWQgaW4sIGFuZCB0aGlzIHdpbGwgbW9zdCBsaWtlbHkgcmV2ZWFsIHdoYXQgSSBuZWVkIHRvIHNlZSBhYm91dCB0aGUgb2JqZWN0IGZpbGVzIG9yIGNvbW1hbmRzIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjI1LjYxMDkxMDM0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXG4gIDgxOlxcdG9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSArPSBuZl9jb25uY291bnQub1xcbiAgODI6XFx0XFxuICA4MzpcXHQjIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGZyb20gbmV0ZGV2IGZhbWlseVxcbiAgODQ6XFx0b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXFx0Kz0gbmZfZHVwX25ldGRldi5vXFxuICA4NTpcXHRcXG4gIDg2OlxcdCMgbmZfdGFibGVzXFxuICA4NzpcXHRuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbiAgODg6XFx0XFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG4gIDg5OlxcdFxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbiAgOTA6XFx0XFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxuICA5MTpcXHRcXHRcXHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXFxcXG4gIDkyOlxcdFxcdFxcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxcXFxuICA5MzpcXHRcXHRcXHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxcXFxuICA5NDpcXHRcXHRcXHQgIG5mdF9zZXRfcGlwYXBvLm9cXG4gIDk1OlxcdFxcbiAgOTY6XFx0aWZkZWYgQ09ORklHX1g4Nl82NFxcbiAgOTc6XFx0aWZuZGVmIENPTkZJR19VTUxcXG4gIDk4OlxcdG5mX3RhYmxlcy1vYmpzICs9IG5mdF9zZXRfcGlwYXBvX2F2eDIub1xcbiAgOTk6XFx0ZW5kaWZcXG4gMTAwOlxcdGVuZGlmXFxuIDEwMTpcXHRcXG4gMTAyOlxcdGlmZGVmIENPTkZJR19ORlRfQ1RcXG4gMTAzOlxcdGlmZGVmIENPTkZJR19NSVRJR0FUSU9OX1JFVFBPTElORVxcbiAxMDQ6XFx0bmZfdGFibGVzLW9ianMgKz0gbmZ0X2N0X2Zhc3Qub1xcbiAxMDU6XFx0ZW5kaWZcXG4gMTA2OlxcdGVuZGlmXFxuIDEwNzpcXHRcXG4gMTA4OlxcdG9iai0kKENPTkZJR19ORl9UQUJMRVMpXFx0XFx0Kz0gbmZfdGFibGVzLm9cXG4gMTA5OlxcdG9iai0kKENPTkZJR19ORlRfQ09NUEFUKVxcdCs9IG5mdF9jb21wYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDoyNS42MTEwNTE1NTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAwMjM0MzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IG9mIGBuZl90YWJsZXMtb2Jqc2AqKlxuXG5BbHJpZ2h0LCBzbyBgbmZfdGFibGVzLW9ianNgIGlzIHRoZSBrZXksIGFuZCBJIGtub3cgaXQncyB1bmRlciB0aGUgY29udHJvbCBvZiBgQ09ORklHX05GX1RBQkxFU2AuIFRoaXMgcmluZ3MgYSBiZWxsLiBJdCBzb3VuZHMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3ksIHNvIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBjb25uZWN0aW9uLiBUaW1lIHRvIGp1bXAgb3ZlciB0byB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIGZvciBgbmV0ZmlsdGVyYCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgdHJlZSDigJMgdGhhdCB3b3VsZCBiZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhpcyBzaG91bGQgY2xlYXJseSBsYXkgb3V0IHRoZSByZWxhdGlvbnNoaXAgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcyBpbiBob3cgYE5GX1RBQkxFU2AgYWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIGBuZl90YWJsZXMtb2Jqc2AuIEJlc3QgdG8gY2hlY2sgdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQxNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTQ6MjguNjEzMzk4MDcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDMzMzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDoyOC42ODc3MzkwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg0NDkwNjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRoZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkLiBMZXQncyBzZWUuLi4gdGhlIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gQW5kIGlmIG15IG1lbW9yeSBzZXJ2ZXMsIHRoZSByZWxldmFudCBzZWN0aW9uIGZvciB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHN0YXJ0cyBhcm91bmQgbGluZSA0NTUuIFRoYXQncyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gZGlnIGluIGFuZCBzZWUgdGhlIG9wdGlvbnMgYXZhaWxhYmxlLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciB3aXRoaW4gdGhpcyBjb21wbGV4IGZyYW1ld29yay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBzdGF0ZW1lbnRzLCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIG1heWJlIHNvbWUgYHNlbGVjdGAgc3RhdGVtZW50cyB0byBndWlkZSB0aGUgYnVpbGQgcHJvY2Vzcy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgY29tbWVudGVkIGVub3VnaCB0aGF0IEkgY2FuIHF1aWNrbHkgZ3JvayB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIE5ldGZpbHRlciBmZWF0dXJlcyBhbmQgb3B0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDozMC44NzIyMzI0NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0Y29uZmlnIE5FVEZJTFRFUl9TWU5QUk9YWVxcbiA0NTE6XFx0XFx0dHJpc3RhdGVcXG4gNDUyOlxcdFxcbiA0NTM6XFx0ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG4gNDU0OlxcdFxcbiA0NTU6XFx0Y29uZmlnIE5GX1RBQkxFU1xcbiA0NTY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuIDQ1NzpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiA0NTg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDU5OlxcdFxcdGhlbHBcXG4gNDYwOlxcdFxcdCAgbmZ0YWJsZXMgaXMgdGhlIG5ldyBwYWNrZXQgY2xhc3NpZmljYXRpb24gZnJhbWV3b3JrIHRoYXQgaW50ZW5kcyB0b1xcbiA0NjE6XFx0XFx0ICByZXBsYWNlIHRoZSBleGlzdGluZyB7aXAsaXA2LGFycCxlYn1fdGFibGVzIGluZnJhc3RydWN0dXJlLiBJdFxcbiA0NjI6XFx0XFx0ICBwcm92aWRlcyBhIHBzZXVkby1zdGF0ZSBtYWNoaW5lIHdpdGggYW4gZXh0ZW5zaWJsZSBpbnN0cnVjdGlvbi1zZXRcXG4gNDYzOlxcdFxcdCAgKGFsc28ga25vd24gYXMgZXhwcmVzc2lvbnMpIHRoYXQgdGhlIHVzZXJzcGFjZSAnbmZ0JyB1dGlsaXR5XFxuIDQ2NDpcXHRcXHQgIChodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL25mdGFibGVzKSB1c2VzIHRvIGJ1aWxkIHRoZVxcbiA0NjU6XFx0XFx0ICBydWxlLXNldC4gSXQgYWxzbyBjb21lcyB3aXRoIHRoZSBnZW5lcmljIHNldCBpbmZyYXN0cnVjdHVyZSB0aGF0XFxuIDQ2NjpcXHRcXHQgIGFsbG93cyB5b3UgdG8gY29uc3RydWN0IG1hcHBpbmdzIGJldHdlZW4gbWF0Y2hpbmdzIGFuZCBhY3Rpb25zXFxuIDQ2NzpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZSBsb29rdXBzLlxcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDQ3MDpcXHRcXG4gNDcxOlxcdGlmIE5GX1RBQkxFU1xcbiA0NzI6XFx0Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxuIDQ3MzpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gNDc0OlxcdFxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDozMC44NzI0NTY0NDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAzNTkwMDU0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBQYXRjaCBJbXBhY3Qgb24gU3RhdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIExldCdzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIGl0IHRvdWNoZXM6IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAuIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZyB0aGVtIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM/IFllcywgYSBxdWljayBjaGVjayBjb25maXJtcyB0aGV5IGFyZSBpbmRlZWQgZGVjbGFyZWQgYXMgc3RhdGljLiBcblxuTm93LCBoZXJl4oCZcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBob3cgc3RhdGljIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZC4gVGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCBzdGF0aWMgKmlubGluZSogZnVuY3Rpb25zIGRlY2xhcmVkIGluIGhlYWRlciBmaWxlcyBkb27igJl0IGhhdmUgZGlzdGluY3Qgc3ltYm9scyBpbiBgdm1saW51eGAgYW5kIGNhbid0IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLiBIbW0sIGJ1dCB0aGVzZSBhcmUgKm5vdCogaW5saW5lIGZ1bmN0aW9ucyBpbiBhIGhlYWRlci4gVGhleSdyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGEgYC5jYCBmaWxlLCBgbmZfdGFibGVzX2FwaS5jYC4gQXJlIHRoZXkgdHJlYXRlZCB0aGUgc2FtZSB3YXk/IENvdWxkIHRoZSBjb21waWxlciBpbmxpbmUgdGhlbSBhbnl3YXksIG9yIGRvIHRoZXkgcmVtYWluIGFzIGRpc3RpbmN0IHN5bWJvbHM/IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXkgYXJlIGNhbGxlZCBmcm9tIG90aGVyIGZ1bmN0aW9ucywgYW5kIHdoYXQgdGhvc2UgY2FsbGVyIGZ1bmN0aW9ucyBhcmUuXG5cblRoZXJlZm9yZSwgbGV0IG1lIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYm90aCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYCB0byB1bmRlcnN0YW5kIHRoZWlyIHVzYWdlIGFuZCB3aGV0aGVyIHRoZSBjb21waWxlciBpcyBsaWtlbHkgdG8gaW5saW5lIHRoZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGltcGFjdCBhbmQgd2hldGhlciB0aGV5J3JlIHByb3Blcmx5IHJlcHJlc2VudGVkIGluIHRoZSBzeW1ib2wgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NzYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDo1MS4yMzE0NjQ5MTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDk3MzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk2OT1zdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk4NzpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk4OC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwMTY9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAyNTpcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNi1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjUxLjc1MjQ0NTY3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzU5MTc0ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBuZnRfc2V0ZWxlbV9pbnNlcnRgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmZ0X3NldGVsZW1faW5zZXJ0YCBpcyBiZWluZyBpbnZva2VkLiBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24gcmlnaHQgbm93LiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGFwcHJvYWNoIOKAkyB1c2luZyB0aGUgdG9vbGluZyBJJ20gbW9zdCBjb21mb3J0YWJsZSB3aXRoLiBJJ20gZ29pbmcgdG8gd2FudCB0byB0cmFjayBkb3duIGFsbCBkaXJlY3QgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIGBubWAgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZS4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHdyYXBwZXIgZnVuY3Rpb25zLCBvciBtYWNyb3MgaW52b2x2ZWQsIHNvIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBhdCB0aGUgYXNzZW1ibHkgbGV2ZWwuXG5cbkJleW9uZCBhIHNpbXBsZSB0ZXh0IHNlYXJjaCB0aG91Z2gsIEknbGwgbmVlZCB0byBjb25zaWRlciBzdGF0aWMgYW5hbHlzaXMgdGVjaG5pcXVlcy4gVG9vbHMgbGlrZSBga2NhY2hlZ3JpbmRgIG9yIGV2ZW4gYSBjYXJlZnVsbHkgY3JhZnRlZCBzY3JpcHQgd2l0aCBzb21ldGhpbmcgbGlrZSBgY2xhbmdgIGNvdWxkIHByb3ZpZGUgY2FsbCBncmFwaHMuIFRoYXQgd2lsbCBiZSBtb3JlIGluc2lnaHRmdWwgdGhhbiBhIHJhdyB0ZXh0IHNlYXJjaC4gSSdsbCBuZWVkIHRvIGJlIGF3YXJlIG9mIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRvbywgc2luY2UgdGhhdCBjYW4gYWRkIGNvbXBsZXhpdHkuXG5cbk9uY2UgSSd2ZSBpZGVudGlmaWVkIHRoZSBjYWxsIHNpdGVzLCBJJ20gZ29pbmcgdG8gbmVlZCB0byBldmFsdWF0ZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5IGFyZSBtYWRlLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IFdoYXQgbG9ja3MgYXJlIGhlbGQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgcGF0aHM/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgZG8gdGhlc2UgY2FsbHMgaW1wYWN0IHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eT8gSSdsbCBwcm9iYWJseSBlbmQgdXAgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGRldGFpbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBsaWtlbHkgdG8gbGVhZCB0byBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZXQgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgdXNlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTQ6NTQuNTExNjIyODcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODU1MDkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0ZWxlbV9pbnNlcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk4Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDE1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMTY6c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTcxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1NzI6XFx0ZXJyID0gbmZ0X3NldGVsZW1faW5zZXJ0KGN0eC1cXHUwMDNlbmV0LCBzZXQsIFxcdTAwMjZlbGVtLCBcXHUwMDI2ZWxlbV9wcml2LCBmbGFncyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU3My1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjU0LjU3MDE4MTIwMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTA2MjUwNjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIE5GVCBTZXQgRWxlbWVudCBJbnNlcnRpb24gUGF0aCoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG5ldyBlbGVtZW50cyBhcmUgYWRkZWQgdG8gTkZUIHNldHMuIEkgc2VlIHRoYXQgdGhlIGBuZnRfYWRkX3NldF9lbGVtYCBmdW5jdGlvbiBpcyB0aGUga2V5IHBsYXllciBoZXJlLCBhbmQgdGhhdCBpdCBjYWxscyBgbmZ0X3NldGVsZW1faW5zZXJ0YC4gR29vZCwgbWFrZXMgc2Vuc2UuIEJ1dCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBXaGF0J3MgdGhlICpvcmlnaW4qIG9mIGBuZnRfYWRkX3NldF9lbGVtYD8gQWgsIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBgbmZfdGFibGVzX25ld3NldGVsZW1gLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IEknbSBhZnRlciwgdGhlIGluaXRpYWwgdHJpZ2dlciBmb3IgYSBuZXcgc2V0IGVsZW1lbnQuXG5cbk5vdywgSSdtIGFsc28gY3VyaW91cyBhYm91dCBkZWFjdGl2YXRpb24g4oCTIHNwZWNpZmljYWxseSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAuIFdoYXQgdHJpZ2dlcnMgdGhhdD8gQW5kIHdoaWxlIEknbSBhdCBpdCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGUgbW9yZSBnZW5lcmljIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCBmdW5jdGlvbiwganVzdCB0byBnZXQgYSBicm9hZGVyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IHNldCBlbGVtZW50cyBhcmUgZGVhY3RpdmF0ZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaHMgZm9yIGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIGFuZCBwb3RlbnRpYWwgcmVtb3ZhbCBzY2VuYXJpb3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE1OjA1LjYzMjY5MDEzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0ODc2NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA2OT1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwODg6c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg5LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MTI4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM0LVxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM1OlxcdFxcdHJldCA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNTowNS43Mzc1NzE5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjU2MDgyNTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCBDYWxsZXJzKipcblxuT2theSwgc28gdGhlIHByb21wdCB3YW50cyBtZSB0byBhbmFseXplIHRoZSBjYWxsZXJzIG9mIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGxpa2VseSBtZWFucyBpZGVudGlmeWluZyB3aGVyZSB0aGlzIGNvcmUgZnVuY3Rpb24gaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgaXMgYmVpbmcgaW52b2tlZC4gSXQncyBhYm91dCBmaWd1cmluZyBvdXQgd2hpY2ggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0IHRvIGRpc2FibGUgb3IgaW52YWxpZGF0ZSBlbGVtZW50cyB3aXRoaW4gTmV0ZmlsdGVyIHRhYmxlcyBvciBzZXRzLCB3aGljaCBpbiB0dXJuIGFmZmVjdCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBuZXR3b3JrIGJlaGF2aW9yLiBNeSBpbnR1aXRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd2luZyBtZSB0byBwb3RlbnRpYWwgYXJlYXM6XG5cbiogICAqKlJ1bGUgTWFuYWdlbWVudDoqKiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRoaXMgaXMgZGlyZWN0bHkgbGlua2VkIHRvIHRoZSByZW1vdmFsIG9yIGRlYWN0aXZhdGlvbiBvZiBydWxlcyB3aXRoaW4gTmV0ZmlsdGVyIHNldHMuIFNvIEknZCBiZSBsb29raW5nIGZvciBjb2RlIHJlbGF0ZWQgdG8gYG5mdCBhZGQvZGVsZXRlIGVsZW1lbnRgIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgYSBtb3JlIGludGVybmFsIGZ1bmN0aW9uLlxuKiAgICoqU2V0IEdhcmJhZ2UgQ29sbGVjdGlvbi9FeHBpcnk6KiogVGhpcyBjb3VsZCBiZSBwYXJ0IG9mIGEgbWVjaGFuaXNtIHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIG9yIGludmFsaWRhdGUgc2V0IGVsZW1lbnRzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQgKGUuZy4sIGR1ZSB0byB0aW1lb3V0cywgcmVzb3VyY2UgbGltaXRhdGlvbnMsIG9yIHBvbGljeSBjaGFuZ2VzKS4gSSdkIGJlIGxvb2tpbmcgZm9yIHRpbWVycywgY2xlYW51cCByb3V0aW5lcyBvciBldmVudHMuXG4qICAgKipFcnJvciBIYW5kbGluZy9Sb2xsYmFjazoqKiBQb3RlbnRpYWxseSwgaXQgY291bGQgYmUgdXNlZCBpbiBzY2VuYXJpb3Mgd2hlcmUgYSBOZXRmaWx0ZXIgb3BlcmF0aW9uIGZhaWxzLCBhbmQgd2UgbmVlZCB0byByb2xsIGJhY2sgY2hhbmdlcywgZGVhY3RpdmF0aW5nIGVsZW1lbnRzIGFkZGVkIGR1cmluZyBhIGZhaWxlZCB0cmFuc2FjdGlvbi5cbiogICAqKkNvbm50cmFjayBJbnRlZ3JhdGlvbjoqKiBTaW5jZSBzZXRzIGNhbiBiZSB1c2VkIHdpdGggY29ubmVjdGlvbiB0cmFja2luZywgdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSB1dGlsaXplZCB0byBoYW5kbGUgdGhlIHJlbW92YWwgb2Ygc2V0IGVsZW1lbnRzIHRoYXQgY29ycmVzcG9uZCB0byBleHBpcmVkIG9yIHRlcm1pbmF0ZWQgY29ubmVjdGlvbnMuXG4qICAgKipDb25maWd1cmF0aW9uIFJlbG9hZHM6KiogV2hlbiBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbG9hZGVkIG9yIHVwZGF0ZWQsIGV4aXN0aW5nIHNldCBlbGVtZW50cyBtaWdodCBiZSBkZWFjdGl2YXRlZCBhbmQgbmV3IGVsZW1lbnRzIGFjdGl2YXRlZC4gSSB3aWxsIGhhdmUgdG8gbG9vayBhdCB0aGUgcmVsb2FkIG9yIGNvbmZpZyBjb2RlLlxuXG5Fc3NlbnRpYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsaWZlY3ljbGUgb2Ygc2V0IGVsZW1lbnRzIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZDogY3JlYXRpb24sIGFjdGl2YXRpb24sIHVzZSwgYW5kIHVsdGltYXRlbHksIGRlYWN0aXZhdGlvbi9yZW1vdmFsLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IGNvZGUgcGF0aCB0aGF0IGhhbmRsZXMgdGhlICdjbGVhbnVwJyBzdGFnZSBvZiB0aGVzZSBlbGVtZW50cy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UgYW5kIHN0YXJ0IHRyYWNpbmcgY2FsbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzM5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTU6MTAuOTkzNjU3OTk4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk0MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwODg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMTAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzExMTpzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzExMi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEyODpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzNi1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEzNzpcXHRcXHRyZXQgPSBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03ODI5PXN0YXRpYyBpbnQgbmZ0X2RlbF9zZXRlbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5MDI6XFx0ZXJyID0gbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjdHgtXFx1MDAzZW5ldCwgc2V0LCBcXHUwMDI2ZWxlbSwgZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5MDMtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE1OjExLjA1MzYwNTI3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTk2NzQ2NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBORlQgRGVsZXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZnRfZGVsX3NldGVsZW1gIGhlcmUsIGFuZCBpdCdzIGNhbGxpbmcgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgbmZfdGFibGVzX2RlbHNldGVsZW1gLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gU3RhbmRhcmQgZGVsZXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBlbGVtZW50IGRlYWN0aXZhdGlvbiwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gSSdtIGd1ZXNzaW5nIHRoaXMgcGF0Y2ggaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBleHBpcmF0aW9uIGxvZ2ljLCB3aGljaCBtYWtlcyBzZW5zZSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc2V0cy4gTGV0IG1lIHNlYXJjaCBmb3IgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGltZSB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTU6MTQuMDUwMzU0NzkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTIzMTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25mdF9zZXRfZWxlbV9leHBpcmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk4Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTk5LVxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDAwOlxcdFxcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDAxLVxcdFxcdFxcdCpwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDk4LVxcdFxcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwOTk6XFx0XFx0ICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMDAtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY3OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjkyOlxcdFxcdGlmICghX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTU5PXN0YXRpYyBpbmxpbmUgaW50IG5mdF9yaGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNjgtXFx0XFx0cmV0dXJuIDE7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo2OTpcXHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2aGUtXFx1MDAzZWV4dCwgeC1cXHUwMDNldHN0YW1wKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTcwLVxcdFxcdHJldHVybiAxO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTQxOT1zdGF0aWMgc3RydWN0IG5mdF9waXBhcG9fZWxlbSAqcGlwYXBvX2dldF9zbG93KGNvbnN0IHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTQ3OC1cXHRcXHRcXHRlID0gZi1cXHUwMDNlbXRbYl0uZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6NDc5OlxcdFxcdFxcdGlmICh1bmxpa2VseShfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZlLVxcdTAwM2VleHQsIHRzdGFtcCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtNDgwLVxcdFxcdFxcdFxcdCAgICAgIW5mdF9zZXRfZWxlbV9hY3RpdmUoXFx1MDAyNmUtXFx1MDAzZWV4dCwgZ2VubWFzaykpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE3MTA9c3RhdGljIHZvaWQgcGlwYXBvX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldCwgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTc1MC1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTc1MTpcXHRcXHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2ZS1cXHUwMDNlZXh0LCB0c3RhbXApKSB7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3NTItXFx0XFx0XFx0aWYgKCFuZnRfdHJhbnNfZ2Nfc3BhY2UoZ2MpKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYz0xMTMwPXN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKnBpcGFwb19nZXRfYXZ4Mihjb25zdCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jLTEyMTYtXFx0XFx0XFx0ZSA9IGYtXFx1MDAzZW10W3JldF0uZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYzoxMjE3OlxcdFxcdFxcdGlmICh1bmxpa2VseShfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZlLVxcdTAwM2VleHQsIHRzdGFtcCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYy0xMjE4LVxcdFxcdFxcdFxcdCAgICAgIW5mdF9zZXRfZWxlbV9hY3RpdmUoXFx1MDAyNmUtXFx1MDAzZWV4dCwgZ2VubWFzaykpKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MzQyPXN0YXRpYyBpbnQgX19uZnRfcmJ0cmVlX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMzk3LVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzozOTg6XFx0XFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNnJiZS1cXHUwMDNlZXh0LCB0c3RhbXApIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTM5OS1cXHRcXHQgICAgbmZ0X3NldF9lbGVtX2FjdGl2ZShcXHUwMDI2cmJlLVxcdTAwM2VleHQsIGN1cl9nZW5tYXNrKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTc4Mz1uZnRfcmJ0cmVlX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTgxOS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6ODIwOlxcdFxcdFxcdH0gZWxzZSBpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2cmJlLVxcdTAwM2VleHQsIHRzdGFtcCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODIxLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg5MT1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy05MTEtXFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo5MTI6XFx0XFx0aWYgKCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZyYmUtXFx1MDAzZWV4dCwgdHN0YW1wKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtOTEzLVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNToxNC4xMzk1OTE1M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NDg0ODg0ODA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENhdGNoYWxsIEVsZW1lbnQgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBJbml0aWFsbHksIEkgc2VlIHRoYXQgdGhleSd2ZSBpbnRyb2R1Y2VkIHRoZSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgY2hlY2ssIGluY29ycG9yYXRpbmcgdGhlIGB0c3RhbXBgLiBUaGlzIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnRzLCB3aGljaCBpcyBrZXkuXG5cbkluIHRoZSBpbnNlcnQgZnVuY3Rpb24sIHRoZSBvbGQgY29kZSByZXR1cm5lZCBgLUVFWElTVGAgaWYgYW4gYWN0aXZlIGNhdGNoYWxsIGVsZW1lbnQgd2FzIGZvdW5kLiBOb3csIGl0IHNraXBzIHRoZSBlbGVtZW50ICppZiBpdCdzIGV4cGlyZWQqIGFuZCBhdHRlbXB0cyB0byBpbnNlcnQgYSAqbmV3KiBjYXRjaGFsbCBlbGVtZW50LiBIb2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgaGFwcGVucyB0byB0aGUgKm9sZCosIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudCB0aGF0J3MgYWxyZWFkeSBpbiBgc2V0LVx1MDAzZWNhdGNoYWxsX2xpc3RgPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBub3QgYmVpbmcgcmVtb3ZlZC4gVGhlIGV4aXN0aW5nIGVsZW1lbnQgaXMganVzdCBpZ25vcmVkLCBhbmQgYSAqbmV3KiBvbmUgaXMgYXBwZW5kZWQgdG8gdGhlIGxpc3QuXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGluc2VydGlvbiBjb2RlOiB0aGUgb2xkIGV4cGlyZWQgZWxlbWVudCB3YXNuJ3QgcmVtb3ZlZCBiZWZvcmUgdGhlIG5ldyBvbmUgd2FzIGFkZGVkIHRvIGBzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdGAuICpZZXMhKiBUaGF0IG1lYW5zIHRoZXJlIGNhbiBub3cgYmUgbXVsdGlwbGUgY2F0Y2hhbGwgZWxlbWVudHMgaW4gYHNldC1cdTAwM2VjYXRjaGFsbF9saXN0YC4gVGhlIG9sZCBlbGVtZW50IGlzIG5vdCByZW1vdmVkIHdoZW4gaXQgZXhwaXJlcywgdGhlIG5ldyBlbGVtZW50IGlzIGp1c3QgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCFcblxuSW4gdGhlIGRlYWN0aXZhdGlvbiBmdW5jdGlvbiwgaXQgbm93IHNraXBzIGV4cGlyZWQgZWxlbWVudHMgYXMgd2VsbC4gSWYgYW4gZXhwaXJlZCBjYXRjaGFsbCBpcyBmb3VuZCBpdCBqdXN0IGNvbnRpbnVlcyB0byB0aGUgbmV4dCBlbGVtZW50LiBJdCBldmVudHVhbGx5IHJldHVybnMgYC1FTk9FTlRgIGlmIG5vIGFjdGl2ZS9ub24tZXhwaXJlZCBlbGVtZW50cyBhcmUgZm91bmQuXG5cblRoaXMgYWxsIHBvaW50cyB0byBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBjYXRjaGFsbCBlbGVtZW50cyBhcmUgbWFuYWdlZC4gV2UncmUgZGVmZXJyaW5nIHRoZSBjbGVhbnVwIG9mIGV4cGlyZWQgZWxlbWVudHMgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLCB0cmFuc2FjdGlvbiBjb21taXQvYWJvcnQsIG9yIHBvdGVudGlhbGx5IGR1cmluZyBsb29rdXBzLiBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb3BlcmF0ZXMsIGFsb25nIHdpdGggYW55IHRyYW5zYWN0aW9uLXJlbGF0ZWQgaW1wbGljYXRpb25zLiBBbHNvLCB3aGF0IGhhcHBlbnMgaW4gYG5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0IGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGhvdyBpdCBtaWdodCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhpcyBpcyBsaWtlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGJ1dCB0aGUgaW1wbGljYXRpb25zIG9uIGxpc3QgbWFuYWdlbWVudCBuZWVkIGEgY2xvc2VyIGxvb2suIEkgcmVhbGx5IGhvcGUgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGtub3dzIGhvdyB0byBoYW5kbGUgbGlzdHMgb2YgZXhwaXJlZCBlbGVtZW50cyBpbiB0aGlzIG1hbm5lci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMjEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTY6MzguOTg4NDQyODY3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTYwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTYwOlxcdFxcdFxcdGlmIChvdmVycmlkZV9leHBycylcXG42OTYxOlxcdFxcdFxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcXG42OTYyOlxcdFxcbjY5NjM6XFx0XFx0XFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XFxuNjk2NDpcXHRcXHR9XFxuNjk2NTpcXHRcXG42OTY2OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjY5Njc6XFx0fVxcbjY5Njg6XFx0XFxuNjk2OTpcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG42OTcwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbjY5NzE6XFx0e1xcbjY5NzI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNjk3MzpcXHRcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XFxuNjk3NDpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG42OTc1OlxcdFxcbjY5NzY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG42OTc3OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNjk3ODpcXHRcXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxuNjk3OTpcXHRcXHRcXHQgICAgIW5mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCkgXFx1MDAyNlxcdTAwMjZcXG42OTgwOlxcdFxcdFxcdCAgICAhbmZ0X3NldF9lbGVtX2lzX2RlYWQoZXh0KSlcXG42OTgxOlxcdFxcdFxcdFxcdHJldHVybiBleHQ7XFxuNjk4MjpcXHRcXHR9XFxuNjk4MzpcXHRcXG42OTg0OlxcdFxcdHJldHVybiBOVUxMO1xcbjY5ODU6XFx0fVxcbjY5ODY6XFx0XFxuNjk4NzpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNjk4ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG42OTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLFxcbjY5OTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqcHJpdilcXG42OTkxOlxcdHtcXG42OTkyOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbjY5OTM6XFx0XFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG42OTk0OlxcdFxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNjozOC45ODg5MDcyNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk4MzAzMDc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgQ2F0Y2hhbGwgRWxlbWVudCBHYXJiYWdlIENvbGxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MgZm9yIFwiY2F0Y2hhbGxcIiBlbGVtZW50cyBpbiB0aGlzIGBuZnRhYmxlc2AgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlc2UgZWxlbWVudHMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb3V0IGBuZnRfc2V0X2NhdGNoYWxsX2djYCBhbmQgYG5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jYC4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIGhhbmRsaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiByZWxhdGVkIHRvIHRoZXNlIHNwZWNpYWwgXCJjYXRjaGFsbFwiIGVsZW1lbnRzLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgd2hlcmUgdGhlc2UgY2F0Y2hhbGwgZWxlbWVudHMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgc3lzdGVtIGFuZCwgY3J1Y2lhbGx5LCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBnYXJiYWdlIGNvbGxlY3RvciBpcyB0cmlnZ2VyZWQgYW5kIHdoYXQgY3JpdGVyaWEgZGV0ZXJtaW5lIHdoZW4gdGhvc2UgZWxlbWVudHMgYXJlIGNvbnNpZGVyZWQgZWxpZ2libGUgZm9yIGNvbGxlY3Rpb24uIEhvcGVmdWxseSwgYnkgdHJhY2tpbmcgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMsIEkgY2FuIGdhaW4gYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgY2F0Y2hhbGwgZWxlbWVudHMgYW5kIGhvdyB0aGVpciBtZW1vcnkgaXMgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE2OjQxLjk3MTk0MTE1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3NzI1OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNhdGNoYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTgzNz1zdGF0aWMgaW50IG5mdF9tYXBlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg1Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NTM6c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODU0LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODU4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg1OTpzdGF0aWMgdm9pZCBuZnRfbWFwX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg2Mi1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXFx1MDAzZW5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODYzOlxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg2NC1cXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODY2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4Njc6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjgtXFx0XFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzEtXFx0XFx0bmZ0X3NldF9lbGVtX2NoYW5nZV9hY3RpdmUoY3R4LVxcdTAwM2VuZXQsIHNldCwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NzI6XFx0XFx0bmZ0X3NldGVsZW1fZGF0YV9kZWFjdGl2YXRlKGN0eC1cXHUwMDNlbmV0LCBzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzMtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODgxPXN0YXRpYyB2b2lkIG5mdF9tYXBfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODkxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg5MjpcXHRuZnRfbWFwX2NhdGNoYWxsX2RlYWN0aXZhdGUoY3R4LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5My19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MjUyPWludCBuZnRfc2V0ZWxlbV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI4NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0Mjg1OmludCBuZnRfc2V0X2NhdGNoYWxsX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI4Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00Mjg5LVxcdH07XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDI5MDpcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MjkxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI5NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0Mjk1OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQyOTYtXFx0XFx0XFx0XFx0bG9ja2RlcF9jb21taXRfbG9ja19pc19oZWxkKGN0eC1cXHUwMDNlbmV0KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQyOTc6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00Mjk4LVxcdFxcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGR1bW15X2l0ZXIuZ2VubWFzaykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzAwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQzMDE6XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fdmFsaWRhdGUoY3R4LCBzZXQsIFxcdTAwMjZkdW1teV9pdGVyLCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDMwMi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU0MzY9c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NjgzLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzZXQtXFx1MDAzZWJpbmRpbmdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1Njg0OlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU2ODUtXFx0cmVmY291bnRfc2V0KFxcdTAwMjZzZXQtXFx1MDAzZXJlZnMsIDEpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc0MC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQxOnN0YXRpYyB2b2lkIG5mdF9zZXRfY2F0Y2hhbGxfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDMte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU3NDQ6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqbmV4dCwgKmNhdGNoYWxsO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0NjpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2F0Y2hhbGwsIG5leHQsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQ3OlxcdFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Y2F0Y2hhbGwtXFx1MDAzZWxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU3NDg6XFx0XFx0bmZfdGFibGVzX3NldF9lbGVtX2Rlc3Ryb3koY3R4LCBzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQ5OlxcdFxcdGtmcmVlX3JjdShjYXRjaGFsbCwgcmN1KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NzUwLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU3NjE9c3RhdGljIHZvaWQgbmZ0X3NldF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NzcxLVxcdHNldC1cXHUwMDNlb3BzLVxcdTAwM2VkZXN0cm95KGN0eCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzcyOlxcdG5mdF9zZXRfY2F0Y2hhbGxfZGVzdHJveShjdHgsIHNldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc3My1cXHRuZnRfc2V0X3B1dChzZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NTg0Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19iaW5kX2NoZWNrX3NldGVsZW0oY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NTgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTg1OTpzdGF0aWMgaW50IG5mdF9zZXRfY2F0Y2hhbGxfYmluZF9jaGVjayhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NjAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01ODYyLVxcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KGN0eC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1ODYzOlxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NjQtXFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01ODY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU4Njc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg2OC1cXHRcXHRcXHRcXHRsb2NrZGVwX2NvbW1pdF9sb2NrX2lzX2hlbGQoY3R4LVxcdTAwM2VuZXQpKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTg2OTpcXHRcXHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NzAtXFx0XFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01ODcyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU4NzM6XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fZGF0YV92YWxpZGF0ZShjdHgsIHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NzQtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01ODgxPWludCBuZl90YWJsZXNfYmluZF9zZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5MDUtXFx0XFx0aWYgKCFpdGVyLmVycilcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTA2OlxcdFxcdFxcdGl0ZXIuZXJyID0gbmZ0X3NldF9jYXRjaGFsbF9iaW5kX2NoZWNrKGN0eCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTA3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NTk0MD1zdGF0aWMgaW50IG5mdF9tYXBlbGVtX2FjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTU2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NTc6c3RhdGljIHZvaWQgbmZ0X21hcF9jYXRjaGFsbF9hY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NTgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjAtXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQoY3R4LVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjE6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTk2Mi1cXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjQ6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjU6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTY2LVxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTY5LVxcdFxcdG5mdF9jbGVhcihjdHgtXFx1MDAzZW5ldCwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTcwOlxcdFxcdG5mdF9zZXRlbGVtX2RhdGFfYWN0aXZhdGUoY3R4LVxcdTAwM2VuZXQsIHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NzEtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NTk3ND1zdGF0aWMgdm9pZCBuZnRfbWFwX2FjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5ODU6XFx0bmZ0X21hcF9jYXRjaGFsbF9hY3RpdmF0ZShjdHgsIHNldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTk4Ni19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02MjY2PXN0cnVjdCBuZnRfc2V0X2R1bXBfY3R4IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYyNzEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjI3MjpzdGF0aWMgaW50IG5mdF9zZXRfY2F0Y2hhbGxfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI3My1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwgYm9vbCByZXNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYyNzUte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYyNzY6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI3Ny1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MjgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYyODE6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2MjgyOlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI4My1cXHRcXHRpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSB8fFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2Mjg3OlxcdFxcdHJldCA9IG5mX3RhYmxlc19maWxsX3NldGVsZW0oc2tiLCBzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtLCByZXNldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI4OC1cXHRcXHRpZiAocmVzZXQgXFx1MDAyNlxcdTAwMjYgIXJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTYyOTY9c3RhdGljIGludCBuZl90YWJsZXNfZHVtcF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjM2Ni1cXHRpZiAoIWFyZ3MuaXRlci5lcnIgXFx1MDAyNlxcdTAwMjYgYXJncy5pdGVyLmNvdW50ID09IGNiLVxcdTAwM2VhcmdzWzBdKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYzNjc6XFx0XFx0YXJncy5pdGVyLmVyciA9IG5mdF9zZXRfY2F0Y2hhbGxfZHVtcChuZXQsIHNrYiwgc2V0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYzNjgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZHVtcF9jdHgtXFx1MDAzZXJlc2V0LCBjYi1cXHUwMDNlc2VxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY0Nzc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9wYXJzZV9kYXRhKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NDk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY0OTc6c3RhdGljIHZvaWQgKm5mdF9zZXRlbGVtX2NhdGNoYWxsX2dldChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjQ5OC1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY0OTkte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY1MDA6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUwMS1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTA0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY1MDU6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NTA2OlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUwNy1cXHRcXHRpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSB8fFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUxMC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NTExOlxcdFxcdHByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTEyLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjUxOD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2dldChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUyNy1cXHR9IGVsc2Uge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY1Mjg6XFx0XFx0cHJpdiA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2dldChjdHgtXFx1MDAzZW5ldCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTI5LVxcdFxcdGlmICghcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5MjQ9c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk2OC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTY5OnN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9jYXRjaGFsbF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5NzAtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk3MS17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3MjpcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTczLVxcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIobmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5NzUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3NjpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5Nzc6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTc4LVxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk4NzpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk4OC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTEte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5OTI6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5My1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTk3OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTk4OlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5OS1cXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwMC1cXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwMTpcXHRcXHRcXHQqcHJpdiA9IGNhdGNoYWxsLVxcdTAwM2VlbGVtO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDItXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDA1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMDY6XFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwNzpcXHRpZiAoIWNhdGNoYWxsKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDgtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwOS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDEwOlxcdGNhdGNoYWxsLVxcdTAwM2VlbGVtID0gZWxlbS1cXHUwMDNlcHJpdjtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDExOlxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZjYXRjaGFsbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAxMi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwMTY9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAyNTpcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNi1cXHRlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDMxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMzI6c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDMzLVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA0ND1zdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDQ4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwNDk6XFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwNTAtXFx0XFx0bmZ0X2NsZWFyKG5ldCwgZXh0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNjk9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2FkZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDg4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4OS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5MS17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5MjpcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDkzLVxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5NS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk3OlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5OC1cXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMDItXFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEwMzpcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEwNC1cXHRcXHRuZnRfc2V0X2VsZW1fY2hhbmdlX2FjdGl2ZShuZXQsIHNldCwgZXh0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcxMjg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzQtXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxMzU6XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzNi1cXHRlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDI6c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVzdHJveShzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQzLXtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTQ0OlxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Y2F0Y2hhbGwtXFx1MDAzZWxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDU6XFx0a2ZyZWVfcmN1KGNhdGNoYWxsLCByY3UpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDYtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE0ODpzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9yZW1vdmUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDktXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTEte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNTI6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1NDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2F0Y2hhbGwsIG5leHQsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTU1OlxcdFxcdGlmIChjYXRjaGFsbC1cXHUwMDNlZWxlbSA9PSBlbGVtX3ByaXYpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTU2OlxcdFxcdFxcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX2Rlc3Ryb3koY2F0Y2hhbGwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MTYyPXN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTY1LXtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTY2OlxcdGlmIChuZnRfc2V0ZWxlbV9pc19jYXRjaGFsbChzZXQsIGVsZW1fcHJpdikpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE2NzpcXHRcXHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9yZW1vdmUobmV0LCBzZXQsIGVsZW1fcHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE2OC1cXHRlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MTcyPXN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19yZW1vdmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxODctXFx0XFx0bmZ0X3NldGVsZW1fcmVtb3ZlKGN0eC1cXHUwMDNlbmV0LCB0ZS1cXHUwMDNlc2V0LCB0ZS1cXHUwMDNlZWxlbXNbaV0ucHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE4ODpcXHRcXHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRlLVxcdTAwM2VzZXQsIHRlLVxcdTAwM2VlbGVtc1tpXS5wcml2KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxODktXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlbmVsZW1zKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc3ODQ9c3RhdGljIGJvb2wgbmZ0X3RyYW5zX2VsZW1zX25ld19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzc5OS1cXHRcXHRpZiAoIXRlLVxcdTAwM2VzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWJvcnRfc2tpcF9yZW1vdmFsIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzgwMDpcXHRcXHQgICAgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwodGUtXFx1MDAzZXNldCwgdGUtXFx1MDAzZWVsZW1zW2ldLnByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4MDEtXFx0XFx0XFx0bmZ0X3NldGVsZW1fcmVtb3ZlKGN0eC1cXHUwMDNlbmV0LCB0ZS1cXHUwMDNlc2V0LCB0ZS1cXHUwMDNlZWxlbXNbaV0ucHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzgwMi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3ODAzOlxcdFxcdGlmICghbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwodGUtXFx1MDAzZXNldCwgdGUtXFx1MDAzZWVsZW1zW2ldLnByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4MDQtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlbmVsZW1zKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4MTM9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2Rlc3Ryb3lfYWJvcnQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4MjMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzgyNDpcXHRcXHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRlLVxcdTAwM2VzZXQsIHRlLVxcdTAwM2VlbGVtc1tpXS5wcml2KSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODI1LVxcdFxcdFxcdHRlLVxcdTAwM2VzZXQtXFx1MDAzZW5kZWFjdC0tO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzkyMz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5NTE6c3RhdGljIGludCBfX25mdF9zZXRfY2F0Y2hhbGxfZmx1c2goY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTY4OnN0YXRpYyBpbnQgbmZ0X3NldF9jYXRjaGFsbF9mbHVzaChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NjktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3MS1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXFx1MDAzZW5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Nzk3MjpcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTczLVxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3NS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTc2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NzctXFx0XFx0XFx0XFx0bG9ja2RlcF9jb21taXRfbG9ja19pc19oZWxkKGN0eC1cXHUwMDNlbmV0KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5Nzg6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTc5LVxcdFxcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk4MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTgyOlxcdFxcdHJldCA9IF9fbmZ0X3NldF9jYXRjaGFsbF9mbHVzaChjdHgsIHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5ODMtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03OTkxPXN0YXRpYyBpbnQgbmZ0X3NldF9mbHVzaChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LCB1OCBnZW5tYXNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwMy1cXHRpZiAoIWl0ZXIuZXJyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjgwMDQ6XFx0XFx0aXRlci5lcnIgPSBuZnRfc2V0X2NhdGNoYWxsX2ZsdXNoKGN0eCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDA1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA0OTU9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2djX3RyYW5zX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDUwNi1cXHRcXHRlbGVtX3ByaXYgPSB0cmFucy1cXHUwMDNlcHJpdltpXTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDUwNzpcXHRcXHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRyYW5zLVxcdTAwM2VzZXQsIGVsZW1fcHJpdikpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA1MDgtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2dHJhbnMtXFx1MDAzZXNldC1cXHUwMDNlbmVsZW1zKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjQwPXZvaWQgbmZ0X3RyYW5zX2djX3F1ZXVlX3N5bmNfZG9uZShzdHJ1Y3QgbmZ0X3RyYW5zX2djICp0cmFucylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjUxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjUyOnN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9hc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY1My1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGdjX3NlcSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY1NC17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2NTU6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NTYtXFx0Y29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCA9IGdjLVxcdTAwM2VzZXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY1OC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY1OTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjYwOlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY3MzpcXHRcXHRuZnRfdHJhbnNfZ2NfZWxlbV9hZGQoZ2MsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY3NC1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY3OC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY3OTpzdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY4MC17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2ODE6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjgyLVxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChnYy1cXHUwMDNlbmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjg4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjg5OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYXRjaGFsbCwgbmV4dCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjkwOlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5OC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY5OTpcXHRcXHRlbGVtX3ByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMC1cXHRcXHRuZnRfc2V0ZWxlbV9kYXRhX2RlYWN0aXZhdGUoZ2MtXFx1MDAzZW5ldCwgZ2MtXFx1MDAzZXNldCwgZWxlbV9wcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDcwMTpcXHRcXHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KGNhdGNoYWxsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMi1cXHRcXHRuZnRfdHJhbnNfZ2NfZWxlbV9hZGQoZ2MsIGVsZW1fcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE2OjQyLjU0OTY3MTU3MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NzY3MjI3NDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogbmZfdGFibGVzIENhdGNoYWxsIEVsZW1lbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBkZWFsaW5nIHdpdGggY2F0Y2hhbGwgZWxlbWVudHMgaW4gYG5mX3RhYmxlc2Agc2V0cy4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGJlY2F1c2UgaW5zZXJ0aW5nIGEgY2F0Y2hhbGwgZWxlbWVudCB3aGVuIHRoZXJlIHdhcyBhbiBleHBpcmVkIG9uZSBwcmVzZW50IHVzZWQgdG8gY2F1c2UgaXNzdWVzIChyZXR1cm5pbmcgYC1FRVhJU1RgIGluY29ycmVjdGx5LCBvciBkZWFjdGl2YXRpbmcgdGhlIGV4cGlyZWQgZWxlbWVudCBpbnN0ZWFkIG9mIHRoZSBhY3RpdmUgb25lKS4gVGhpcyBoYXMgdG91Y2hlZCBleGVjdXRhYmxlIGxvZ2ljIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3Q6IGlzIHRoaXMgZXZlbiBmdXp6YWJsZT8gQWJzb2x1dGVseS4gYG5mX3RhYmxlc2AgaXMgY29yZSwgcmVhY2hhYmxlIGJ5IHVucHJpdmlsZWdlZCB1c2VycyBpbiB1c2VyIG5hbWVzcGFjZXMgKHRocm91Z2ggYENMT05FX05FV1VTRVIgfCBDTE9ORV9ORVdORVRgKSBvciwgbW9yZSBjb21tb25seSwgYnkgcm9vdCBhbmQgdGhvc2Ugd2l0aCBgQ0FQX05FVF9BRE1JTmAuIFRoaXMgbWFrZXMgaXQgcHJpbWUgc3l6a2FsbGVyIHRlcnJpdG9yeSDigJMgYSB3ZWxsLWtub3duIGJ1Zy1wcm9uZSBzdWJzeXN0ZW0uIFNvLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IGB0cnVlYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRlZmluaW5nIG15IGBGb2N1c1N5bWJvbHNgLiBMZXQncyBzZWUsIHRoZSBmdW5jdGlvbnMgdG91Y2hlZCBhcmUgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhvc2UgdGhlIHJpZ2h0IGxldmVsIG9mIGdyYW51bGFyaXR5IGZvciB0aGUgZnV6emVyPyBMZXQncyBub3QgZm9yZ2V0IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMhIFRoZXkgc3RhdGUgdG8gbGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkLCBvciB0aGUgZGlyZWN0IEFQSSBlbnRyeXBvaW50cy4gQWxzbywgbGV0J3MgYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgZnV6emVyIGZyb20gYmVpbmcgZGlsdXRlZC4gU28sIGFyZSB0aGVzZSBpdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgbWlnaHQgYmUgaW5saW5lZC5cblxuSGFuZyBvbi4gSSBzZWUgdGhleSdyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCBmdW5jdGlvbnM6IGBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCguLi4pYCBhbmQgYHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSguLi4pYC4gQ291bGQgdGhlIGNvbXBpbGVyIGhhdmUgaW5saW5lZCB0aGVtPyBHaXZlbiB0aGV5J3JlIG9ubHkgY2FsbGVkICpvbmNlKiBlYWNoLCBmcm9tIGBuZnRfc2V0ZWxlbV9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAgcmVzcGVjdGl2ZWx5LCBpdCdzIHZlcnkgcG9zc2libGUuXG5cbk9rYXksIHNvIHdoYXQgKmFyZSogdGhlIGFjdHVhbCBlbnRyeXBvaW50cz8gSSBoYXZlIHRvIGNvbnNpZGVyOlxuKiAgIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgXG4qICAgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgXG4qICAgYG5mdF9zZXRlbGVtX2luc2VydGBcbiogICBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWBcbiogICBgbmZfdGFibGVzX25ld3NldGVsZW1gXG4qICAgYG5mX3RhYmxlc19kZWxzZXRlbGVtYFxuXG5TbywgbGV0J3MgaW5jbHVkZSBib3RoIHRoZSBjb3JlIGNhdGNoYWxsIGZ1bmN0aW9ucyBhbmQgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgc2NvcGUsIGFuZCBJJ2xsIG1ha2Ugc3VyZSB0byBjaGVjayB3aGF0IG90aGVyIHN5bWJvbHMgZXhpc3QgaW4gYG5mX3RhYmxlc19hcGkuY2AgYXJvdW5kIGBuZXdzZXRlbGVtYCBhbmQgYGRlbHNldGVsZW1gLiBUaGlzIHdpbGwgZ2l2ZSB0aGUgZnV6emVyIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNTksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTc6NTAuMjIxOTQ4ODExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQxNzk2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzXyhuZXd8ZGVsKXNldGVsZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzI0OT1zdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc2NjctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzY2ODpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2OS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Nzk5MT1zdGF0aWMgaW50IG5mdF9zZXRfZmx1c2goc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwgdTggZ2VubWFzaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTgwMDgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODAwOTpzdGF0aWMgaW50IG5mX3RhYmxlc19kZWxzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAxMC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDQyLVxcdFtORlRfTVNHX05FV1NFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDQzOlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfbmV3c2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0NC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDYwLVxcdFtORlRfTVNHX0RFTFNFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDYxOlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsc2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2Mi1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDY2LVxcdFtORlRfTVNHX0RFU1RST1lTRVRFTEVNXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA2NzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX2RlbHNldGVsZW0sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjgtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE3OjUwLjUyNjEzNDA2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTkxMjc5NzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gncyBTY29wZSoqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgZGVmaW5pdGVseSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGZvY3VzIGlzIHByZWNpc2UuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgd291bGQgYmUgYG5mdF9zZXRlbGVtX2luc2VydGAsIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCwgYG5mX3RhYmxlc19uZXdzZXRlbGVtYCwgYW5kIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIFxuXG5Ob3csIGhvdyBncmFudWxhciBkbyBJIG5lZWQgdG8gYmUgd2l0aCB0aGUga2V5IGZ1bmN0aW9ucyB0byBpbmNsdWRlPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gRm9jdXNpbmcgb24gdGhlIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5IHBvaW50cywgSSBoYXZlOiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCwgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLCBgbmZfdGFibGVzX25ld3NldGVsZW1gLCBhbmQgYG5mX3RhYmxlc19kZWxzZXRlbGVtYC5cblxuSG9sZCBvbi4uLiB3aGF0IGFib3V0IHRoZSB1c2VyLWZhY2luZyBlbnRyeXBvaW50czogYG5mdF9hZGRfc2V0X2VsZW1gIGFuZCBgbmZ0X2RlbF9zZXRlbGVtYD8gVGhvc2UgYXJlIGNydWNpYWwsIHRvby4gTGV0J3Mgc2VlIGlmIHRob3NlIGBjYXRjaGFsbGAgZnVuY3Rpb25zIG1pZ2h0IGJlIGlubGluZWQuIElmIHRoZXkgYXJlIGlubGluZWQsIHRoZW4gaW5jbHVkaW5nIGBuZnRfc2V0ZWxlbV9pbnNlcnRgLCBgbmZ0X2FkZF9zZXRfZWxlbWAsIG9yIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAgd291bGQgY2FwdHVyZSB0aGVtLiBcblxuQWxyaWdodCwgbGV0J3MgYnJvYWRlbiB0aGUgbmV0IGEgYml0LCBqdXN0IHRvIGJlIHN1cmU6XG5cbiogICBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YFxuKiAgIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYFxuKiAgIGBuZnRfc2V0ZWxlbV9pbnNlcnRgXG4qICAgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgXG4qICAgYG5mdF9hZGRfc2V0X2VsZW1gXG4qICAgYG5mdF9kZWxfc2V0ZWxlbWBcblxuQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaXMgc2V0LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGlzIGVuYWJsZWQuIFdhaXQsIGRvZXMgdGhhdCBvcHRpb24gZGVwZW5kIG9uIGFueXRoaW5nIGVsc2U/IEkgc2hvdWxkIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFyb3VuZCBgY29uZmlnIE5GX1RBQkxFU2AgKGFyb3VuZCBsaW5lIDQ1NSkuIEknbGwgc2NhbiBhIHdpZGVyIHJhbmdlLCBzYXkgbGluZXMgNDQwIHRvIDQ3MCwganVzdCB0byBiZSBzdXJlIEkgZG9uJ3Qgb3Zlcmxvb2sgYW55IGRlcGVuZGVuY2llcyBvciByZWxldmFudCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUwNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxODo1MC40Mzg5MzQxMTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDA6XFx0XFxuIDQ0MTpcXHRjb25maWcgTkZfTkFUX1JFRElSRUNUXFxuIDQ0MjpcXHRcXHRib29sXFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdGNvbmZpZyBORl9OQVRfTUFTUVVFUkFERVxcbiA0NDU6XFx0XFx0Ym9vbFxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRjb25maWcgTkZfTkFUX09WU1xcbiA0NDg6XFx0XFx0Ym9vbFxcbiA0NDk6XFx0XFxuIDQ1MDpcXHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXFxuIDQ1MTpcXHRcXHR0cmlzdGF0ZVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRjb25maWcgTkZfVEFCTEVTXFxuIDQ1NjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gNDU3OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuIDQ1ODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiA0NTk6XFx0XFx0aGVscFxcbiA0NjA6XFx0XFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXFxuIDQ2MTpcXHRcXHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XFxuIDQ2MjpcXHRcXHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxcbiA0NjM6XFx0XFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICduZnQnIHV0aWxpdHlcXG4gNDY0OlxcdFxcdCAgKGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMpIHVzZXMgdG8gYnVpbGQgdGhlXFxuIDQ2NTpcXHRcXHQgIHJ1bGUtc2V0LiBJdCBhbHNvIGNvbWVzIHdpdGggdGhlIGdlbmVyaWMgc2V0IGluZnJhc3RydWN0dXJlIHRoYXRcXG4gNDY2OlxcdFxcdCAgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgbWFwcGluZ3MgYmV0d2VlbiBtYXRjaGluZ3MgYW5kIGFjdGlvbnNcXG4gNDY3OlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlIGxvb2t1cHMuXFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNDcwOlxcdFxcbiA0NzE6XFx0aWYgTkZfVEFCTEVTXFxuIDQ3MjpcXHRjb25maWcgTkZfVEFCTEVTX0lORVRcXG4gNDczOlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiA0NzQ6XFx0XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE4OjUwLjQzOTA1OTAwNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjc3MTgyNzQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHNvIGBORl9UQUJMRVNgIGl0c2VsZiBkb2Vzbid0IGV4cGxpY2l0bHkgKmRlcGVuZCBvbiogYW55dGhpbmcgZWxzZSBpbiB0aGUgc3RhbmRhcmQgS2NvbmZpZyBzZW5zZS4gQnV0LCBpdCdzIG5lc3RlZCB3aXRoaW4gdGhlIFwiQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblwiIG1lbnUuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBwYXJ0IG9mIGEgbGFyZ2VyLCBjb250ZXh0dWFsIGdyb3VwaW5nLiBBbmQgdGhhdCBtZW51IGlzICpndWFyZGVkKiBieSB0aGUgYE5FVEZJTFRFUmAgc3ltYm9sLCB3aGljaCBtZWFucyBlbmFibGluZyBgTkZfVEFCTEVTYCBoaW5nZXMgb24gYE5FVEZJTFRFUmAgYmVpbmcgYWN0aXZlLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCBwcm9iYWJseSBnbGFuY2UgYXQgdGhlIHN0YXJ0IG9mIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSB2YXJpb3VzIGNvbXBvbmVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBBbHdheXMgZ29vZCB0byBoYXZlIHRoZSBmdWxsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxOToxMy4yMTA4ODk1MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudSBcXFwiQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXFxuICAgNjpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgaW5ncmVzcyBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX0lOR1JFU1NcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgZnJvbSBpbmdyZXNzIHVzaW5nIHRoZSBOZXRmaWx0ZXJcXG4gIDExOlxcdFxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORVRGSUxURVJfRUdSRVNTXFxuICAxNDpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgZWdyZXNzIHN1cHBvcnRcXFwiXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfRUdSRVNTXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGJlZm9yZSB0cmFuc21pc3Npb24gdXNpbmcgdGhlXFxuICAxOTpcXHRcXHQgIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xcbiAgMjI6XFx0XFx0ZGVmX2Jvb2wgTkVURklMVEVSX0VHUkVTUyBcXHUwMDI2XFx1MDAyNiAoTkVUX0NMU19BQ1QgfHwgSUZCKVxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktcXG4gIDI1OlxcdFxcdGJvb2xcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuICAyODpcXHRcXHRib29sXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxcbiAgMzE6XFx0XFx0Ym9vbFxcbiAgMzI6XFx0XFxuICAzMzpcXHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuICAzNDpcXHRcXHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xcbiAgMzc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxuICA0MDpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTk6MTMuMjExMDEwMjc2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4Njc3MzUwMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuZl90YWJsZXNgIFBhdGNoKipcblxuT2theSwgaGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcy4gVGhpcyBgbmZfdGFibGVzYCBwYXRjaCBjbGVhcmx5IGhpbmdlcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCBidXQgYE5FVEZJTFRFUmAgaXMgcHJldHR5IG11Y2ggc3RhbmRhcmQgbmV0d29ya2luZywgc28gcmVhbGx5LCBpdCdzIGFib3V0IHRob3NlIGtleSBgTkZfVEFCTEVTYCBjb25maWd1cmF0aW9ucy4gRmlyc3Qgc3RlcCwgY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGJ1aWxkcyBgbmZfdGFibGVzX2FwaS5vYCBieSBjaGVja2luZyB0aGUgTWFrZWZpbGUuIFllcCwgbGluZSAxMDggb2YgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgOiBgb2JqLSQoQ09ORklHX05GX1RBQkxFUykgKz0gbmZfdGFibGVzLm9gIGFuZCBgbmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gLi4uYCBjb25maXJtcyBpdC4gQW5kIGBORl9UQUJMRVNgIGlzIGEgY2hpbGQgb2YgYE5FVEZJTFRFUmAuXG5cbk5vdywgbGV0J3MgZGl2ZSBkZWVwZXIuIElzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgaW4gY29kZSB0aGF0IGdldHMgcnVuPyBBYnNvbHV0ZWx5LiBJdCBtb2RpZmllcyBgbmZfdGFibGVzX2FwaS5jYCwgd2hpY2ggaGFuZGxlcyB0aG9zZSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgdG8gY29uZmlndXJlIG5mdGFibGVzLiBXZSdyZSB0YWxraW5nIGFib3V0IHRob3NlIHNwZWNpZmljIHNldCBlbGVtZW50cywgdGhlIGNhdGNoYWxsIG9uZXMsIHdpdGggdGltZW91dHMuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHRvIGhhbmRsZSBlbGVtZW50IGV4cGlyYXRpb24gdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYC4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogY2hhbmdlIGluIGhvdyBjYXRjaGFsbCBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgKGF2b2lkaW5nIC1FRVhJU1QgZm9yIGV4cGlyZWQgZWxlbWVudHMpIGFuZCBkZWFjdGl2YXRlZCAoc2tpcHBpbmcgZXhwaXJlZCBlbGVtZW50cykuXG5cbkdpdmVuIHRoZSBoaXN0b3J5IG9mIGJ1Z3MgaW4gbmZfdGFibGVzIHNldCBzdGF0ZSBoYW5kbGluZywgZXNwZWNpYWxseSB0aGUgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIHJlbGF0ZWQgdG8gZXhwaXJhdGlvbiwgSSdtIGFscmVhZHkgc2VlaW5nIHNvbWUgcG90ZW50aWFsIHJlZCBmbGFncy4gUmFjZSBjb25kaXRpb25zLCBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zIGFyZSBwbGF1c2libGUgd2l0aCB0aGlzIGtpbmQgb2YgY2hhbmdlLlxuXG5TbywgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHBhcmFtZXRlcnMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBoaWdobGlnaHQgdGhlIG5mX3RhYmxlcyBzZXQgZWxlbWVudCBsaWZlY3ljbGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGV4cGlyYXRpb24gaGFuZGxpbmcgaW4gcmVhY2hhYmxlIG5ldGZpbHRlciBuZXRsaW5rIGNvZGUsIHBvaW50aW5nIG91dCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMsIHN0YXRlIGluY29uc2lzdGVuY2llcywgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSB3aXRoIGNhdGNoYWxsIGVsZW1lbnRzLiBXZSdsbCBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgLCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAsIGBuZnRfc2V0ZWxlbV9pbnNlcnRgLCBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAsIGBuZnRfYWRkX3NldF9lbGVtYCwgYW5kIGBuZnRfZGVsX3NldGVsZW1gLiBBbmQgb2YgY291cnNlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgTkVURklMVEVSYCBhbmQgYE5GX1RBQkxFU2AuXG5cblRoYXQncyBpdC4gSXQncyBhbGwgY2xlYXIuIEknbSBzYXRpc2ZpZWQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1OTMsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MjA6MDEuODg4MzYzNDExWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzNzM2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0XCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlXCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9hZGRfc2V0X2VsZW1cIixcbiAgICBcIm5mdF9kZWxfc2V0ZWxlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIGxvZ2ljIGluIG5mX3RhYmxlcyAobmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMpIHRvIHRha2UgZWxlbWVudCBleHBpcmF0aW9uIGludG8gYWNjb3VudCB2aWEgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpLiBuZl90YWJsZXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBhbmQgc2V0IGVsZW1lbnQgbGlmZWN5Y2xlL2V4cGlyYXRpb24gaGFuZGxpbmcgaXMgcHJvbmUgdG8gc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCByZWZlcmVuY2UgY291bnRpbmcvdXNlLWFmdGVyLWZyZWUgYnVncy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGlzIGFsdGVyZWQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydFwiLFxuICAgIFwibmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZVwiLFxuICAgIFwibmZ0X3NldGVsZW1faW5zZXJ0XCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlXCIsXG4gICAgXCJuZnRfYWRkX3NldF9lbGVtXCIsXG4gICAgXCJuZnRfZGVsX3NldGVsZW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjYXRjaGFsbCBzZXQgZWxlbWVudCBpbnNlcnRpb24gYW5kIGRlYWN0aXZhdGlvbiBsb2dpYyBpbiBuZl90YWJsZXMgKG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jKSB0byB0YWtlIGVsZW1lbnQgZXhwaXJhdGlvbiBpbnRvIGFjY291bnQgdmlhIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKS4gbmZfdGFibGVzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgYW5kIHNldCBlbGVtZW50IGxpZmVjeWNsZS9leHBpcmF0aW9uIGhhbmRsaW5nIGlzIHByb25lIHRvIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmFjZSBjb25kaXRpb25zLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhpcyBhbHRlcmVkIHN0YXRlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIwOjAxLjk3MDc0NjI1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODA2NzM1MDY1NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoyMDowMS45NzEyNTg2NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc4MDY3Mjk5MDgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBleHBpcmF0aW9uIGNoZWNrcyB2aWEgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCB0byBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KClgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSgpYCBpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLCBtYXRjaGluZyB0aGUgZXhwaXJhdGlvbiBjaGVjayBzZW1hbnRpY3MgdXNlZCBpbiBvdGhlciBzZXQgdHlwZXMgKHN1Y2ggYXMgaGFzaCwgcmJ0cmVlLCBhbmQgcGlwYXBvKS5cXG5cXG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOiBUaGUgbG9jYWwgdmFyaWFibGUgYHRzdGFtcGAgaXMgYW4gZXhwbGljaXRseSBpbml0aWFsaXplZCA2NC1iaXQgdGltZXN0YW1wIChgdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldClgKS4gVGhlIHNldCBlbGVtZW50IGV4dGVuc2lvbiBpbnNwZWN0ZWQgYnkgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBpbiBgbmZ0X3NldF9lbGVtX2luaXQoKWAsIHdoZXJlIGB0aW1lb3V0YCBhbmQgYGV4cGlyYXRpb25gIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgZmlyc3QgY29uZmlybXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYE5GVF9TRVRfRVhUX1RJTUVPVVRgIGV4dGVuc2lvbiBiZWZvcmUgcmVhZGluZyB0aGVzZSBmaWVsZHMuXFxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OiBGYWlsaW5nIHRvIGNoZWNrIGV4cGlyYXRpb24gZm9yIGNhdGNoYWxsIGVsZW1lbnRzIHByZXZpb3VzbHkgcmlza2VkIGxvZ2ljYWwgZXJyb3JzICgtRUVYSVNUIG9uIGluc2VydCkgYW5kIGxpZmVjeWNsZSBidWdzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgLyBkb3VibGUtZnJlZSBpZiBkZWFjdGl2YXRpb24gcmFjZWQgd2l0aCBHQyBlbGVtZW50IHJlY2xhbWF0aW9uIChgbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoKWApLiBNZW1vcnkgc2FmZXR5IGlzc3VlcyBvZiB0aGlzIHR5cGUgKFVBRiwgZG91YmxlLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBObyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBwYXJ0aWFsIHN0cnVjdHVyZSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYjBiN2MxZWI0OTM0MjdlODQ0NzY2NGU3MWU5NWNhMzIxYzk0MGZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTM6MTE6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCA3NjVhOTJmYTkwZDYyLi43ZWYyZTE5ZTY2NTVhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtNjk5MSwxMSArNjk5MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4gXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuK1x0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG4gXHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbi1cdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSkge1xuK1x0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XG4gXHRcdFx0KnByaXYgPSBjYXRjaGFsbC1cdTAwM2VlbGVtO1xuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHR9XG5AQCAtNzA4OCwxMSArNzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuIHtcbiBcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xuK1x0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG4gXHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbi1cdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpKVxuK1x0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcbitcdFx0ICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRrZnJlZShlbGVtLVx1MDAzZXByaXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MjA6MDEuOTcxMjU5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzA4MDM1MDA5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGNvZGUuIE15IGluaXRpYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBUaW1lIHRvIHB1bGwgdXAgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gSSB0aGluayBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBsb29rLCBvciBwZXJoYXBzIGBncmVwcGVyYCBpZiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBrZXl3b3JkcyBvciBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gSSBuZWVkIHRvIGVzdGFibGlzaCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgc3RhcnQgcG9raW5nIGFyb3VuZCB3aXRoIHRoZSBkZXRhaWxzIG9mIHRoZSBwYXRjaCBpdHNlbGYuIFVuZGVyc3RhbmRpbmcgdGhlIFwid2h5XCIgd2lsbCBiZSBhcyBjcml0aWNhbCBhcyB0aGUgXCJ3aGF0LlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIyOjUyLjc3NDc2MzcyMloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk4MCxcbiAgXCJMaW5lQ291bnRcIjogMTMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY5ODA6XFx0XFx0XFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxcbjY5ODE6XFx0XFx0XFx0XFx0cmV0dXJuIGV4dDtcXG42OTgyOlxcdFxcdH1cXG42OTgzOlxcdFxcbjY5ODQ6XFx0XFx0cmV0dXJuIE5VTEw7XFxuNjk4NTpcXHR9XFxuNjk4NjpcXHRcXG42OTg3OlxcdHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG42OTg4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjY5ODk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuNjk5MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9lbGVtX3ByaXYgKipwcml2KVxcbjY5OTE6XFx0e1xcbjY5OTI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNjk5MzpcXHRcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbjY5OTQ6XFx0XFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxuNjk5NTpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG42OTk2OlxcdFxcbjY5OTc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbjY5OTg6XFx0XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG42OTk5OlxcdFxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXFx1MDAyNlxcdTAwMjZcXG43MDAwOlxcdFxcdFxcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcXG43MDAxOlxcdFxcdFxcdFxcdCpwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuNzAwMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG43MDAzOlxcdFxcdFxcdH1cXG43MDA0OlxcdFxcdH1cXG43MDA1OlxcdFxcbjcwMDY6XFx0XFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNzAwNzpcXHRcXHRpZiAoIWNhdGNoYWxsKVxcbjcwMDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzAwOTpcXHRcXG43MDEwOlxcdFxcdGNhdGNoYWxsLVxcdTAwM2VlbGVtID0gZWxlbS1cXHUwMDNlcHJpdjtcXG43MDExOlxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZjYXRjaGFsbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XFxuNzAxMjpcXHRcXG43MDEzOlxcdFxcdHJldHVybiAwO1xcbjcwMTQ6XFx0fVxcbjcwMTU6XFx0XFxuNzAxNjpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNzAxNzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwMTg6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcXG43MDE5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqZWxlbV9wcml2LFxcbjcwMjA6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbjcwMjE6XFx0e1xcbjcwMjI6XFx0XFx0aW50IHJldDtcXG43MDIzOlxcdFxcbjcwMjQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbjcwMjU6XFx0XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xcbjcwMjY6XFx0XFx0ZWxzZVxcbjcwMjc6XFx0XFx0XFx0cmV0ID0gc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWluc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG43MDI4OlxcdFxcbjcwMjk6XFx0XFx0cmV0dXJuIHJldDtcXG43MDMwOlxcdH1cXG43MDMxOlxcdFxcbjcwMzI6XFx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDMzOlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbjcwMzQ6XFx0e1xcbjcwMzU6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbV9wcml2KTtcXG43MDM2OlxcdFxcbjcwMzc6XFx0XFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0ZMQUdTKSBcXHUwMDI2XFx1MDAyNlxcbjcwMzg6XFx0XFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbjcwMzk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNzA0MDpcXHRcXG43MDQxOlxcdFxcdHJldHVybiBmYWxzZTtcXG43MDQyOlxcdH1cXG43MDQzOlxcdFxcbjcwNDQ6XFx0c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fYWN0aXZhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwNDU6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfZWxlbV9wcml2ICplbGVtX3ByaXYpXFxuNzA0NjpcXHR7XFxuNzA0NzpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xcbjcwNDg6XFx0XFxuNzA0OTpcXHRcXHRpZiAobmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoc2V0LCBlbGVtX3ByaXYpKSB7XFxuNzA1MDpcXHRcXHRcXHRuZnRfY2xlYXIobmV0LCBleHQpO1xcbjcwNTE6XFx0XFx0fSBlbHNlIHtcXG43MDUyOlxcdFxcdFxcdHNldC1cXHUwMDNlb3BzLVxcdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcXG43MDUzOlxcdFxcdH1cXG43MDU0OlxcdH1cXG43MDU1OlxcdFxcbjcwNTY6XFx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzA1NzpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXFxuNzA1ODpcXHR7XFxuNzA1OTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtLVxcdTAwM2Vwcml2KTtcXG43MDYwOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXFx1MDAzZXVwZGF0ZTtcXG43MDYxOlxcdFxcbjcwNjI6XFx0XFx0aWYgKHVwZGF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVFJBTlNfVVBEX1RJTUVPVVQpXFxuNzA2MzpcXHRcXHRcXHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNldGltZW91dCwgdXBkYXRlLVxcdTAwM2V0aW1lb3V0KTtcXG43MDY0OlxcdFxcbjcwNjU6XFx0XFx0aWYgKHVwZGF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXFxuNzA2NjpcXHRcXHRcXHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNlZXhwaXJhdGlvbiwgZ2V0X2ppZmZpZXNfNjQoKSArIHVwZGF0ZS1cXHUwMDNlZXhwaXJhdGlvbik7XFxuNzA2NzpcXHR9XFxuNzA2ODpcXHRcXG43MDY5OlxcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19hZGQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG43MDcwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGUpXFxuNzA3MTpcXHR7XFxuNzA3MjpcXHRcXHRpbnQgaTtcXG43MDczOlxcdFxcbjcwNzQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlLVxcdTAwM2VuZWxlbXM7IGkrKykge1xcbjcwNzU6XFx0XFx0XFx0c3RydWN0IG5mdF90cmFuc19vbmVfZWxlbSAqZWxlbSA9IFxcdTAwMjZ0ZS1cXHUwMDNlZWxlbXNbaV07XFxuNzA3NjpcXHRcXG43MDc3OlxcdFxcdFxcdGlmIChlbGVtLVxcdTAwM2V1cGRhdGUpXFxuNzA3ODpcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXFx1MDAzZXNldCwgZWxlbSk7XFxuNzA3OTpcXHRcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIyOjUyLjc3NTE0NDAzMloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODY0MTM4NzYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEknbSB0aGUgb25lIGhhdmluZyB0aGVzZSB0aG91Z2h0cywgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBuZl90YWJsZXNfYXBpLmMgQ29kZSoqXG5cblJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgZXhhbWluZSBsaW5lcyA3MDgwIHRocm91Z2ggNzE0MCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBpbiBkZXRhaWwsIHByb2JhYmx5IHRvIGdyYXNwIGEgcGFydGljdWxhciBkYXRhIHN0cnVjdHVyZSBvciBpbnRlcmFjdGlvbiByZWxhdGVkIHRvIHRoZSBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIFdoYXQncyB0aGUgY29udGV4dD8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0YWJsZSBjcmVhdGlvbiwgcnVsZSBtYW5pcHVsYXRpb24sIHNldCB1cGRhdGVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSB3aXRoaW4gdGhlIG5mX3RhYmxlcyBmcmFtZXdvcms/IElzIHRoaXMgd2hlcmUgd2UncmUgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXNlci1zcGFjZSBBUEksIG9yIHBlcmhhcHMgYW4gaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9uPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIOKAkyBjb21tZW50cywgdmFyaWFibGUgbmFtZXMsIGZ1bmN0aW9uIGNhbGxzIOKAkyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZGVzaWduIGNob2ljZXMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9yIGJ1ZyBmaXhlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MjM6MjEuNDE2NTM1MDcyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDgwOlxcdFxcdFxcdFxcdG5mdF9zZXRlbGVtX2FjdGl2YXRlKGN0eC1cXHUwMDNlbmV0LCB0ZS1cXHUwMDNlc2V0LCBlbGVtLVxcdTAwM2Vwcml2KTtcXG43MDgxOlxcdFxcbjcwODI6XFx0XFx0XFx0bmZfdGFibGVzX3NldGVsZW1fbm90aWZ5KGN0eCwgdGUtXFx1MDAzZXNldCwgZWxlbS1cXHUwMDNlcHJpdixcXG43MDgzOlxcdFxcdFxcdFxcdFxcdFxcdCBORlRfTVNHX05FV1NFVEVMRU0pO1xcbjcwODQ6XFx0XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNldXBkYXRlKTtcXG43MDg1OlxcdFxcdH1cXG43MDg2OlxcdH1cXG43MDg3OlxcdFxcbjcwODg6XFx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG43MDg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzA5MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbjcwOTE6XFx0e1xcbjcwOTI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNzA5MzpcXHRcXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcXG43MDk0OlxcdFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xcbjcwOTU6XFx0XFxuNzA5NjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XFxuNzA5NzpcXHRcXHRcXHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbjcwOTg6XFx0XFx0XFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XFxuNzA5OTpcXHRcXHRcXHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxuNzEwMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MTAxOlxcdFxcbjcxMDI6XFx0XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuNzEwMzpcXHRcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuNzEwNDpcXHRcXHRcXHRuZnRfc2V0X2VsZW1fY2hhbmdlX2FjdGl2ZShuZXQsIHNldCwgZXh0KTtcXG43MTA1OlxcdFxcdFxcdHJldHVybiAwO1xcbjcxMDY6XFx0XFx0fVxcbjcxMDc6XFx0XFxuNzEwODpcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43MTA5OlxcdH1cXG43MTEwOlxcdFxcbjcxMTE6XFx0c3RhdGljIGludCBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcxMTI6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzExMzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcXG43MTE0OlxcdHtcXG43MTE1OlxcdFxcdHZvaWQgKnByaXY7XFxuNzExNjpcXHRcXG43MTE3OlxcdFxcdHByaXYgPSBzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxuNzExODpcXHRcXHRpZiAoIXByaXYpXFxuNzExOTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43MTIwOlxcdFxcbjcxMjE6XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuNzEyMjpcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG43MTIzOlxcdFxcdHNldC1cXHUwMDNlbmRlYWN0Kys7XFxuNzEyNDpcXHRcXG43MTI1OlxcdFxcdHJldHVybiAwO1xcbjcxMjY6XFx0fVxcbjcxMjc6XFx0XFxuNzEyODpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcxMjk6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcxMzA6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXFxuNzEzMTpcXHR7XFxuNzEzMjpcXHRcXHRpbnQgcmV0O1xcbjcxMzM6XFx0XFxuNzEzNDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxuNzEzNTpcXHRcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG43MTM2OlxcdFxcdGVsc2VcXG43MTM3OlxcdFxcdFxcdHJldCA9IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxuNzEzODpcXHRcXG43MTM5OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIzOjIxLjQxNjg4MDAyMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MDU5OTg5OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhZ2Fpbi4gSSBzZWUgY2hhbmdlcyBpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgaG93IGNhdGNoYWxsIGVsZW1lbnRzIGFyZSBoYW5kbGVkIHdpdGhpbiBOZXRmaWx0ZXIgc2V0cy4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGFuIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIG1lY2hhbmlzbSBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIsIHNvIEknbGwgYnJlYWsgaXQgZG93bi5cblxuRmlyc3QsIEkgbm90aWNlIHRoZSBhZGRpdGlvbiBvZiBgdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7YCBpbiBib3RoIHRoZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGZ1bmN0aW9ucy4gVGhpcyB0aW1lc3RhbXAgdmFyaWFibGUgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBlbGVtZW50IGV4cGlyYXRpb24gb3IgdGltZS1iYXNlZCBtYW5hZ2VtZW50LiBUaGUgc3Vic2VxdWVudCBjYWxscyB0byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBjb25maXJtIHRoaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgZXhwaXJ5IGR1cmluZyBib3RoIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIG9mIHRoZSBjYXRjaGFsbCBlbGVtZW50LlxuXG5JbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCwgdGhlIGNvZGUgbm93IGNoZWNrcyBpZiB0aGUgZWxlbWVudCBpcyBhY3RpdmUgKmFuZCogbm90IGV4cGlyZWQgYmVmb3JlIHJldHVybmluZyAtRUVYSVNULiBUaGUgc2FtZSBsb2dpYyBpcyBhcHBsaWVkIHRvIGRlYWN0aXZhdGlvbiBsb2dpYy5cblxuU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgIGRvZXMuIEJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0J3MgY2xlYXIgaXQncyB0aGUgY29yZSBleHBpcnkgY2hlY2suIEFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgSSBtdXN0IGZpZ3VyZSBvdXQgd2hhdCBgbmZ0X25ldF90c3RhbXBgIGRvZXM7IHRoYXQncyB0aGUgc291cmNlIGZvciB0aGlzIHRpbWVzdGFtcC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRpbWVzdGFtcCBpcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgbW9yZSBjb250ZXh0IGZvciB0aGVzZSBmdW5jdGlvbnMuIFRpbWUgZm9yIGEgZ3JlcCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTM1OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIzOjMwLjQ3Njg3Mjc2MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1ODkwOTU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25mdF9zZXRfZWxlbV9leHBpcmVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD04MzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKm5mdF9zZXRfZXh0X2V4cHIoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODM3LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4Mzg6c3RhdGljIGlubGluZSBib29sIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgzOS1cXHRcXHRcXHRcXHRcXHQgIHU2NCB0c3RhbXApXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODQ5LXtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6ODUwOlxcdHJldHVybiBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgZ2V0X2ppZmZpZXNfNjQoKSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg1MS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTg3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTktXFx0XFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMDA6XFx0XFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDEtXFx0XFx0XFx0KnByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwODg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwOTgtXFx0XFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5OTpcXHRcXHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEwMC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjc5PXN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2OTI6XFx0XFx0aWYgKCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5My1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9NTk9c3RhdGljIGlubGluZSBpbnQgbmZ0X3JoYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy02OC1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jOjY5OlxcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZoZS1cXHUwMDNlZXh0LCB4LVxcdTAwM2V0c3RhbXApKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNzAtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICpwaXBhcG9fZ2V0X3Nsb3coY29uc3Qgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtNDc4LVxcdFxcdFxcdGUgPSBmLVxcdTAwM2VtdFtiXS5lO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzo0Nzk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNmUtXFx1MDAzZWV4dCwgdHN0YW1wKSB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy00ODAtXFx0XFx0XFx0XFx0ICAgICAhbmZ0X3NldF9lbGVtX2FjdGl2ZShcXHUwMDI2ZS1cXHUwMDNlZXh0LCBnZW5tYXNrKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzUwLVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNzUxOlxcdFxcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZlLVxcdTAwM2VleHQsIHRzdGFtcCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTc1Mi1cXHRcXHRcXHRpZiAoIW5mdF90cmFuc19nY19zcGFjZShnYykpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jPTExMzA9c3RydWN0IG5mdF9waXBhcG9fZWxlbSAqcGlwYXBvX2dldF9hdngyKGNvbnN0IHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmMtMTIxNi1cXHRcXHRcXHRlID0gZi1cXHUwMDNlbXRbcmV0XS5lO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jOjEyMTc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNmUtXFx1MDAzZWV4dCwgdHN0YW1wKSB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jLTEyMTgtXFx0XFx0XFx0XFx0ICAgICAhbmZ0X3NldF9lbGVtX2FjdGl2ZShcXHUwMDI2ZS1cXHUwMDNlZXh0LCBnZW5tYXNrKSkpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0zNDI9c3RhdGljIGludCBfX25mdF9yYnRyZWVfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0zOTctXFx0XFx0ICovXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjM5ODpcXHRcXHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2cmJlLVxcdTAwM2VleHQsIHRzdGFtcCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMzk5LVxcdFxcdCAgICBuZnRfc2V0X2VsZW1fYWN0aXZlKFxcdTAwMjZyYmUtXFx1MDAzZWV4dCwgY3VyX2dlbm1hc2spKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9NzgzPW5mdF9yYnRyZWVfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODE5LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo4MjA6XFx0XFx0XFx0fSBlbHNlIGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZyYmUtXFx1MDAzZWV4dCwgdHN0YW1wKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04MjEtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODkxPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTkxMS1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjkxMjpcXHRcXHRpZiAoIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNnJiZS1cXHUwMDNlZXh0LCB0c3RhbXApKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy05MTMtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIzOjMyLjYzNTc4NzcyOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODAxNjAzNzc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GVGFibGVzIEV4cGlyZWQgRWxlbWVudCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24sIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaGAsIGhhbmRsZXMgdGhlIGV4cGlyYXRpb24gb2YgZWxlbWVudHMgd2l0aGluIE5GVGFibGVzIHNldHMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgdGhlIGxpZmV0aW1lIG9mIGVudHJpZXMgaW4gdGhlc2UgdGFibGVzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIHBvdGVudGlhbGx5IG9wdGltaXppbmcgb3IgdHJvdWJsZXNob290aW5nIHNldCBtYW5hZ2VtZW50LiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgdGhlIGluY2x1c2lvbiBsb2NhdGlvbiwgaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBpbnRlcm5hbCBtZWNoYW5pY3MgcmVsYXRlZCB0byBleHBpcmluZyBlbGVtZW50cywgcmF0aGVyIHRoYW4gdGhlIGV4dGVybmFsIHRyaWdnZXJpbmcuIEkgbmVlZCB0byBncmFzcCBob3cgdGhlIGV4cGlyZWQgZWxlbWVudCByZW1vdmFsIGlzIGltcGxlbWVudGVkLCBjb25zaWRlcmluZyBmYWN0b3JzIGxpa2UgcG90ZW50aWFsIGxvY2tzLCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yIGRpZmZlcmVudCBzZXQgdHlwZXMuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkcyB0b3dhcmRzIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBhbmQgZ2V0IGEgc2Vuc2UgZm9yIHRoZSBleHBpcmF0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcyB0aGF0IGlzIGltcGxlbWVudGVkIGluIHRoaXMgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MjQ6MDAuNjUxODI4MjU4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM1OlxcdFxcdHJldHVybiBuZnRfc2V0X2V4dChleHQsIE5GVF9TRVRfRVhUX0VYUFJFU1NJT05TKTtcXG4gODM2OlxcdH1cXG4gODM3OlxcdFxcbiA4Mzg6XFx0c3RhdGljIGlubGluZSBib29sIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXFxuIDgzOTpcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCB0c3RhbXApXFxuIDg0MDpcXHR7XFxuIDg0MTpcXHRcXHRpZiAoIW5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX1RJTUVPVVQpIHx8XFxuIDg0MjpcXHRcXHQgICAgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNldGltZW91dCkgPT0gMClcXG4gODQzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0cmV0dXJuIHRpbWVfYWZ0ZXJfZXE2NCh0c3RhbXAsIFJFQURfT05DRShuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXFx1MDAzZWV4cGlyYXRpb24pKTtcXG4gODQ2OlxcdH1cXG4gODQ3OlxcdFxcbiA4NDg6XFx0c3RhdGljIGlubGluZSBib29sIG5mdF9zZXRfZWxlbV9leHBpcmVkKGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0KVxcbiA4NDk6XFx0e1xcbiA4NTA6XFx0XFx0cmV0dXJuIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCBnZXRfamlmZmllc182NCgpKTtcXG4gODUxOlxcdH1cXG4gODUyOlxcdFxcbiA4NTM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfZWxlbV9leHQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gODU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZWxlbV9wcml2ICplbGVtX3ByaXYpXFxuIDg1NTpcXHR7XFxuIDg1NjpcXHRcXHRyZXR1cm4gKHZvaWQgKillbGVtX3ByaXYgKyBzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZWxlbXNpemU7XFxuIDg1NzpcXHR9XFxuIDg1ODpcXHRcXG4gODU5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mdF9vYmplY3QgKipuZnRfc2V0X2V4dF9vYmooY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjI0OjAwLjY1MTk0MjEzOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTM0MjM1MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZDpcblxuKipDaGVja2luZyBgbmZ0X25ldF90c3RhbXBgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbmZ0X25ldF90c3RhbXBgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGN1cnJlbnQgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGltcGxlbWVudGVkIHdpdGggaXQgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGNvbmNlcm5zLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBJcyBpdCBjb25maWd1cmVkIG9wdGltYWxseSwgb3IgYXJlIHRoZXJlIG9idmlvdXMgZ2FpbnMgdG8gYmUgbWFkZSBieSBhZGp1c3Rpbmcgc29tZSBvZiB0aGUgdW5kZXJseWluZyBzZXR0aW5ncz8gSSdsbCBwcm9iYWJseSBsb29rIGF0IHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0cyB1c2FnZSB3aXRoaW4gdGhlIG5ldHdvcmsgcGFja2V0IGZpbHRlcmluZyBmcmFtZXdvcmsuIFdoYXQgb3RoZXIgcmVsYXRlZCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQ/IEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBsaWtlbHkgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyB0aW1lc3RhbXAgaXMgd29ya2luZyBhcyBpbnRlbmRlZCBhbmQgaWYgdGhlcmUgYXJlIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIHRpbWVzdGFtcCBwb3RlbnRpYWxseSBpbXBhY3RzIGEgbG90IG9mIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njg0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoyNDowMy41ODYxNzk0NTNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTgwMDQ5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X25ldF90c3RhbXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTE5NjE9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfcGVybmV0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC0xOTY1LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDoxOTY2OnN0YXRpYyBpbmxpbmUgdTY0IG5mdF9uZXRfdHN0YW1wKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtMTk2Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTg3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTMtXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTk0OlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTUtXFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDkyLVxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwOTM6XFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5NC1cXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjc5PXN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2ODEtXFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjgyOlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChnYy1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY4My1cXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0ID0gZ2MtXFx1MDAzZXNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9MTcxPXN0YXRpYyBpbnQgbmZ0X3JoYXNoX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTE4MC1cXHRcXHQua2V5XFx0ID0gZWxlbS1cXHUwMDNla2V5LnZhbC5kYXRhLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6MTgxOlxcdFxcdC50c3RhbXBcXHQgPSBuZnRfbmV0X3RzdGFtcChuZXQpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtMTgyLVxcdH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTIxNT1uZnRfcmhhc2hfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTIyMy1cXHRcXHQua2V5XFx0ID0gZWxlbS1cXHUwMDNla2V5LnZhbC5kYXRhLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6MjI0OlxcdFxcdC50c3RhbXBcXHQgPSBuZnRfbmV0X3RzdGFtcChuZXQpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtMjI1LVxcdH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTI4Nj1zdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjk1LVxcdHN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKmUsICpkdXA7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjEyOTY6XFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyOTctXFx0c3RydWN0IG5mdF9waXBhcG9fZmllbGQgKmY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzE0LVxcdHVuc2lnbmVkIGludCBydWxlc19mMCwgZmlyc3RfcnVsZSA9IDA7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjE3MTU6XFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3MTYtXFx0c3RydWN0IG5mdF9waXBhcG9fZWxlbSAqZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xOTE0PW5mdF9waXBhcG9fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTkyNi1cXHRlID0gcGlwYXBvX2dldChtLCAoY29uc3QgdTggKillbGVtLVxcdTAwM2VrZXkudmFsLmRhdGEsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjE5Mjc6XFx0XFx0ICAgICAgIG5mdF9nZW5tYXNrX25leHQobmV0KSwgbmZ0X25ldF90c3RhbXAobmV0KSk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE5MjgtXFx0aWYgKCFlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTY4Mj1zdGF0aWMgaW50IG5mdF9yYnRyZWVfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy02ODctXFx0c3RydWN0IG5mdF9yYnRyZWUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6Njg4OlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy02ODktXFx0aW50IGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz03ODM9bmZ0X3JidHJlZV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy03ODktXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6NzkwOlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy03OTEtXFx0aW50IGQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODkxPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTg5NS1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6ODk2OlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTctXFx0c3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoyNDowNS4zMDQxOTMzMjZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjgxMjQ5ODk3MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDYXRjaGFsbCBFbGVtZW50IEV4cGlyYXRpb24gaW4gTmV0ZmlsdGVyIFNldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb2RlIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgaGFkIGEgc3VidGxlIGZsYXcgcmVnYXJkaW5nIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMuIEVzc2VudGlhbGx5LCB0aGUgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgd2Fzbid0IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aW1lb3V0cy5cblxuSW4gdGhlIGBpbnNlcnRgIGZ1bmN0aW9uLCBpZiBhbiBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQgd2FzIGFjdGl2ZSwgdGhlIGNvZGUgd2FzIGluY29ycmVjdGx5IHJldHVybmluZyBgLUVFWElTVGAuIFRoaXMgbWVhbnMgYSBzdGFsZSwgZXhwaXJlZCBydWxlIGNvdWxkIGJlIHByZXZlbnRpbmcgYSBmcmVzaCBydWxlIGZyb20gdGFraW5nIGVmZmVjdC4gSSd2ZSBjb3JyZWN0ZWQgdGhpcyBub3cgc28gdGhhdCBleHBpcmVkIGVsZW1lbnRzIGFyZW4ndCB0cmVhdGVkIGFzIGFjdGl2ZWx5IGNvbmZsaWN0aW5nLlxuXG5UaGUgYGRlYWN0aXZhdGVgIGZ1bmN0aW9uIGhhZCBhIHNpbWlsYXIgaXNzdWUuIElmIHNvbWVvbmUgdHJpZWQgdG8gZGVhY3RpdmF0ZSBhbiBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQsIGl0IHdvdWxkIGdvIGFoZWFkIGFuZCBkZWFjdGl2YXRlIGl0LiBUaGlzIGlzIGEgcHJvYmxlbSwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoaXMgY291bGQgbGVhZCB0byBhIGRvdWJsZSBkZWFjdGl2YXRpb24gb3IgcmFjZSBjb25kaXRpb25zLiBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBza2lwIHRoZXNlIGVsZW1lbnRzLlxuXG5UaGUga2V5IGhlcmUgaXMgZW5zdXJpbmcgZXhwaXJlZCBlbGVtZW50cyBhcmUgdHJlYXRlZCB0aGUgc2FtZSB3YXkgYWNyb3NzIHRoZSBib2FyZCwgbGlrZSBob3cgcmJ0cmVlLCByaGFzaCwgb3IgcGlwYXBvIHNldHMgbWFuYWdlIHRoZW06IGJ5IGlnbm9yaW5nIHRoZW0sIGFzIGlmIHRoZXkgYXJlIG5vdCBmb3VuZCBvciByZWFkeSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGNvcnJlY3Rpb24gaXMgYSBzdGFuZGFyZCBiZXN0IHByYWN0aWNlIHRvIHByZXZlbnQgdW5leHBlY3RlZCBiZWhhdmlvdXIuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmaXggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaW1lIGZvciBhIEtNU0FOIGNoZWNrOiBhbSBJIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlPyBMZXQncyBjaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS5cblxuMS4gICpLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UqOiBEb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55IGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIG1lc3NhZ2UgZ2VuZXJhdGlvbiwgcGFkZGluZz8gTm8sIHNlZW1zIHNhZmUgaGVyZS5cblxuMi4gICpDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMqOiBJIG5lZWQgdG8gY2hlY2sgYG5mdF9uZXRfdHN0YW1wYCB0byBtYWtlIHN1cmUgaXQncyBub3QgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3MgdGhlIGtleSB0aGluZyB0byBkb3VibGUgY2hlY2suXG4zLiAgKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocyouIE5vdCBzZWVpbmcgYW55IG9mIHRoYXQgaGVyZS5cbjQuICAqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLiogVGhpcyBpc24ndCB0aGUgY2FzZSBoZXJlLlxuXG5Mb29rcyBsaWtlIHRoZSBvbmx5IHJlbWFpbmluZyBxdWVzdGlvbiBpcyBgbmZ0X25ldF90c3RhbXBgLiBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGF0IGZ1bmN0aW9uIGJlaGF2ZXMgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoyODo0Ni41NTQwOTMwNTZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOTYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTYwOlxcdFxcbjE5NjE6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfcGVybmV0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4xOTYyOlxcdHtcXG4xOTYzOlxcdFxcdHJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIG5mX3RhYmxlc19uZXRfaWQpO1xcbjE5NjQ6XFx0fVxcbjE5NjU6XFx0XFxuMTk2NjpcXHRzdGF0aWMgaW5saW5lIHU2NCBuZnRfbmV0X3RzdGFtcChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXFxuMTk2NzpcXHR7XFxuMTk2ODpcXHRcXHRyZXR1cm4gbmZ0X3Blcm5ldChuZXQpLVxcdTAwM2V0c3RhbXA7XFxuMTk2OTpcXHR9XFxuMTk3MDpcXHRcXG4xOTcxOlxcdCNlbmRpZiAvKiBfTkVUX05GX1RBQkxFU19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjI4OjQ2LjU1NDE5NjU2NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzY4MzQ1ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkZUIEVsZW1lbnQgRXhwaXJhdGlvbiBpbiBuZl90YWJsZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0aW1lc3RhbXAsIGBuZnRfcGVybmV0KG5ldCktXHUwMDNldHN0YW1wYCwgaXMgdXBkYXRlZCBpbiBuZl90YWJsZXMgZHVyaW5nIHRyYW5zYWN0aW9uL25ldGxpbmsgYmF0Y2ggcHJvY2Vzc2luZy4gSXQncyB1cGRhdGVkIHByZXR0eSByZWd1bGFybHkuIEJ1dCwgSSdtIGNvbmNlcm5lZCBhYm91dCB0aGUgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCBmdW5jdGlvbiBhbmQgdGhlIG92ZXJhbGwgZXhwaXJhdGlvbiBtZWNoYW5pc20uXG5cblNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBwaWVjZSB0b2dldGhlciBob3cgZWxlbWVudCB0aW1lb3V0cyBhcmUgbWFuYWdlZC4gSSBrbm93IGBuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9USU1FT1VUKWAgY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSB0aW1lb3V0IGV4dGVuc2lvbi4gSWYgaXQgKmRvZXMqIGV4aXN0LCBJIGdyYWIgdGhlIHRpbWVvdXQgdmFsdWUgdXNpbmcgYFJFQURfT05DRShuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXHUwMDNldGltZW91dClgIGFuZCB0aGUgZWxlbWVudCdzIGV4cGlyYXRpb24gdGltZS5cblxuV2hhdCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaXM6IHdoZW4gYSB0aW1lb3V0IGV4dGVuc2lvbiAoYE5GVF9TRVRfRVhUX1RJTUVPVVRgKSBpcyBmaXJzdCAqYWxsb2NhdGVkKiB0byBhIHNldCBlbGVtZW50LCBob3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IFdoYXQgdmFsdWVzIGFyZSBhc3NpZ25lZCBpbml0aWFsbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWZhdWx0IHN0YXRlIG9mIHRoZSB0aW1lb3V0IGNvdW50ZXIuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgbmZ0X3NldF9lbGVtX2luaXRgIGZ1bmN0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXJzIEknbSBsb29raW5nIGZvciBhbmQgcHJvdmlkZSBhIHN0YXJ0aW5nIHBvaW50IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgZm9jdXMgb24gaG93IHRoZSB0aW1lb3V0IGV4dGVuc2lvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGF0IGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjI4OjUwLjMyMjU0NTM1OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MjU4ODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0X2VsZW1faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg9ODY0PXN0cnVjdCBuZnRfZXhwciAqbmZ0X3NldF9lbGVtX2V4cHJfYWxsb2MoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04NjctXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjg2ODpzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODY5LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njc3ND1zdGF0aWMgaW50IG5mdF9zZXRfZXh0X21lbWNweShjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCwgdTggaWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Nzg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY3ODU6c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjc4Ni1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTI2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1Mjc6XFx0ZWxlbS5wcml2ID0gbmZ0X3NldF9lbGVtX2luaXQoc2V0LCBcXHUwMDI2dG1wbCwgZWxlbS5rZXkudmFsLmRhdGEsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyOC1cXHRcXHRcXHRcXHQgICAgICBlbGVtLmtleV9lbmQudmFsLmRhdGEsIGVsZW0uZGF0YS52YWwuZGF0YSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4Mjk9c3RhdGljIGludCBuZnRfZGVsX3NldGVsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4ODUtXFx0ZXJyID0gLUVOT01FTTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3ODg2OlxcdGVsZW0ucHJpdiA9IG5mdF9zZXRfZWxlbV9pbml0KHNldCwgXFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4ODctXFx0XFx0XFx0XFx0ICAgICAgZWxlbS5rZXlfZW5kLnZhbC5kYXRhLCBOVUxMLCAwLCAwLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9NTY9c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9keW5zZXRfbmV3KHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy02OC1cXHR0aW1lb3V0ID0gcHJpdi1cXHUwMDNldGltZW91dCA/IDogUkVBRF9PTkNFKHNldC1cXHUwMDNldGltZW91dCk7XFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM6Njk6XFx0ZWxlbV9wcml2ID0gbmZ0X3NldF9lbGVtX2luaXQoc2V0LCBcXHUwMDI2cHJpdi1cXHUwMDNldG1wbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy03MC1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VzcmVnX2tleV0sIE5VTEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjI4OjUyLjMxNTE0MTg0OFoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NDA4OTk0NDg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byBuZl90YWJsZXNfYXBpLmM6IG5mdF9zZXRfZWxlbV9pbml0KipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZl90YWJsZXNfYXBpLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgYXJlIGJlaW5nIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgc2V0cywgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgYG5mdF9zZXRfZWxlbV9pbml0YCBmdW5jdGlvbi4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uc3RydWN0aW9uIG9mIHNldCBlbGVtZW50cyB3aXRoaW4gdGhlIE5ldGZpbHRlciB0YWJsZSBmcmFtZXdvcmssIHNvIGxldCdzIHN0YXJ0IHRoZXJlLiBJIGV4cGVjdCBpdCdzIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGxhaWQgb3V0IGFuZCBob3cgdGhlIG1lbW9yeSBpcyBtYW5hZ2VkIGZvciB0aGVzZSBzZXQgZWxlbWVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXJndW1lbnRzIGl0IHRha2VzLCB3aGF0IGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGdvYWwgb2YgdGhlIHJvdXRpbmUgaXMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMyMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjMwOjI2LjQwNTA4OTc5NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjc4NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjc4NTpcXHRzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG42Nzg2OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxcbjY3ODc6XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgdTMyICprZXksIGNvbnN0IHUzMiAqa2V5X2VuZCxcXG42Nzg4OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHUzMiAqZGF0YSxcXG42Nzg5OlxcdFxcdFxcdFxcdFxcdFxcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKVxcbjY3OTA6XFx0e1xcbjY3OTE6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNjc5MjpcXHRcXHR2b2lkICplbGVtO1xcbjY3OTM6XFx0XFxuNjc5NDpcXHRcXHRlbGVtID0ga3phbGxvYyhzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZWxlbXNpemUgKyB0bXBsLVxcdTAwM2VsZW4sIGdmcCk7XFxuNjc5NTpcXHRcXHRpZiAoZWxlbSA9PSBOVUxMKVxcbjY3OTY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNjc5NzpcXHRcXG42Nzk4OlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtKTtcXG42Nzk5OlxcdFxcdG5mdF9zZXRfZXh0X2luaXQoZXh0LCB0bXBsKTtcXG42ODAwOlxcdFxcbjY4MDE6XFx0XFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWSkgXFx1MDAyNlxcdTAwMjZcXG42ODAyOlxcdFxcdCAgICBuZnRfc2V0X2V4dF9tZW1jcHkodG1wbCwgTkZUX1NFVF9FWFRfS0VZLFxcbjY4MDM6XFx0XFx0XFx0XFx0ICAgICAgIG5mdF9zZXRfZXh0X2tleShleHQpLCBrZXksIHNldC1cXHUwMDNla2xlbikgXFx1MDAzYyAwKVxcbjY4MDQ6XFx0XFx0XFx0Z290byBlcnJfZXh0X2NoZWNrO1xcbjY4MDU6XFx0XFxuNjgwNjpcXHRcXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfS0VZX0VORCkgXFx1MDAyNlxcdTAwMjZcXG42ODA3OlxcdFxcdCAgICBuZnRfc2V0X2V4dF9tZW1jcHkodG1wbCwgTkZUX1NFVF9FWFRfS0VZX0VORCxcXG42ODA4OlxcdFxcdFxcdFxcdCAgICAgICBuZnRfc2V0X2V4dF9rZXlfZW5kKGV4dCksIGtleV9lbmQsIHNldC1cXHUwMDNla2xlbikgXFx1MDAzYyAwKVxcbjY4MDk6XFx0XFx0XFx0Z290byBlcnJfZXh0X2NoZWNrO1xcbjY4MTA6XFx0XFxuNjgxMTpcXHRcXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfREFUQSkgXFx1MDAyNlxcdTAwMjZcXG42ODEyOlxcdFxcdCAgICBuZnRfc2V0X2V4dF9tZW1jcHkodG1wbCwgTkZUX1NFVF9FWFRfREFUQSxcXG42ODEzOlxcdFxcdFxcdFxcdCAgICAgICBuZnRfc2V0X2V4dF9kYXRhKGV4dCksIGRhdGEsIHNldC1cXHUwMDNlZGxlbikgXFx1MDAzYyAwKVxcbjY4MTQ6XFx0XFx0XFx0Z290byBlcnJfZXh0X2NoZWNrO1xcbjY4MTU6XFx0XFxuNjgxNjpcXHRcXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfVElNRU9VVCkpIHtcXG42ODE3OlxcdFxcdFxcdG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNldGltZW91dCA9IHRpbWVvdXQ7XFxuNjgxODpcXHRcXG42ODE5OlxcdFxcdFxcdGlmIChleHBpcmF0aW9uID09IDApXFxuNjgyMDpcXHRcXHRcXHRcXHRleHBpcmF0aW9uID0gdGltZW91dDtcXG42ODIxOlxcdFxcbjY4MjI6XFx0XFx0XFx0bmZ0X3NldF9leHRfdGltZW91dChleHQpLVxcdTAwM2VleHBpcmF0aW9uID0gZ2V0X2ppZmZpZXNfNjQoKSArIGV4cGlyYXRpb247XFxuNjgyMzpcXHRcXHR9XFxuNjgyNDpcXHRcXG42ODI1OlxcdFxcdHJldHVybiBlbGVtO1xcbjY4MjY6XFx0XFxuNjgyNzpcXHRlcnJfZXh0X2NoZWNrOlxcbjY4Mjg6XFx0XFx0a2ZyZWUoZWxlbSk7XFxuNjgyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzA6MjYuNDA1NjczNTM0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NjIzODU1MzE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgU2Vzc2lvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmlzayB0aGF0ICpvbmx5KiBLTVNBTiBjb3VsZCBkZXRlY3QuIFRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBhZGRpbmcgZXhwaXJhdGlvbiBjaGVja3MgdG8gdGhlIGBjYXRjaGFsbGAgc2V0IHR5cGUgd2l0aGluIHRoZSBOZXRmaWx0ZXIgdGFibGUgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBQcmV2aW91c2x5LCB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IGNoZWNrIGZvciBleHBpcmVkIGVsZW1lbnRzLCB3aGljaCBpcyBub3cgYmVpbmcgY29ycmVjdGVkIHRvIGFsaWduIHdpdGggaG93IG90aGVyIHNldCB0eXBlcyAocmhhc2gsIHJidHJlZSwgcGlwYXBvKSBoYW5kbGUgZXhwaXJhdGlvbiB1c2luZyB0aGUgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCBtYWNyby5cblxuVGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIG9yIGNvbnRyb2wgZmxvdy5cblxuKiAgIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhlIGJ1ZyB0aGUgcGF0Y2ggZml4ZXM6IGFuIGV4cGlyZWQgZWxlbWVudCBjb3VsZCBjYXVzZSBgLUVFWElTVGAgb24gaW5zZXJ0IGR1ZSB0byBhbiBpbmNvcnJlY3QgYWN0aXZlIGNoZWNrLiBEZWFjdGl2YXRpbmcgaXQgY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MuXG5cbiogICBUaGUgdGltZXIgdmFsdWUgKGB0c3RhbXBgKSB1c2VkIGluIHRoZSBleHBpcnkgY2hlY2sgaXMgaW5pdGlhbGl6ZWQgbG9jYWxseSB3aXRoIHRoZSByZXN1bHQgb2YgYG5mdF9uZXRfdHN0YW1wKG5ldClgLlxuXG4qICAgYGt6YWxsb2NgIGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGNhdGNoYWxsIGVsZW1lbnQgZXh0ZW5zaW9ucywgZW5zdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgZmllbGRzIGluY2x1ZGluZyBgdGltZW91dGAgYW5kIGBleHBpcmF0aW9uYCwgYW5kIHRoZXNlIGFyZSBzdWJzZXF1ZW50bHkgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGl0c2VsZiBkb2Vzbid0IGNoYW5nZSBpbml0aWFsaXphdGlvbiBsb2dpYy5cblxuKiAgIFRoZSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgbWFjcm8gY2hlY2tzIHRoYXQgYE5GVF9TRVRfRVhUX1RJTUVPVVRgIGV4aXN0cywgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdGltZW91dCBhbmQgZXhwaXJhdGlvbiBmaWVsZHMuXG5cblRoZSBidWdzIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIChkb3VibGUtZnJlZSwgVUFGLCBhbmQgcmFjZXMpIGFyZSBjbGFzc2ljIGlzc3VlcyB0aGF0IEtBU0FOIHNob3VsZCBoYW5kbGUuIFRoZSBwYXRjaCBjb3JyZWN0cyBsb2dpYyB0byBwcmV2ZW50IHRoZXNlIG1lbW9yeS1saWZlY3ljbGUgYnVncyBmcm9tIGJlaW5nIGhpdC5cblxuTG9va2luZyBhdCB0aGUgcnVsZXMsIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGF0IEtNU0FOIGlzIHVuaXF1ZWx5IHBvc2l0aW9uZWQgdG8gY2F0Y2g6XG5cbjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBleHBvc2VkLlxuMi4gIFRoZSBjb2RlIGRvZXNuJ3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy5cbjMuICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIGluIHJlYWNoYWJsZSBjb2RlLlxuNC4gIEJvdW5kcyBjaGVja3MgYW5kIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBhcmUgdW5hZmZlY3RlZCBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5Fc3NlbnRpYWxseSwgYnkgYWRkaW5nIHRoaXMgZXhwaXJhdGlvbiBjaGVjaywgd2UgYXJlIGVsaW1pbmF0aW5nIHRoZXNlIGNsYXNzZXMgb2YgYnVncy4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIHNhZmVyIGNvZGUsIGJ1dCB0aGV5IGRvIG5vdCBpbmNyZWFzZSB0aGUgcmlzayBvZiBLTVNBTi1zcGVjaWZpYyBidWdzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHRoZSBhcHByb3ByaWF0ZSBhcHByb2FjaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1MiwiT3V0cHV0VG9rZW5zIjozNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzM6MDIuNjQ0MjI5NTMxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGlyYXRpb24gY2hlY2tzIHZpYSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHRvIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AsIG1hdGNoaW5nIHRoZSBleHBpcmF0aW9uIGNoZWNrIHNlbWFudGljcyB1c2VkIGluIG90aGVyIHNldCB0eXBlcyAoc3VjaCBhcyBoYXNoLCByYnRyZWUsIGFuZCBwaXBhcG8pLlxcblxcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6IFRoZSBsb2NhbCB2YXJpYWJsZSBgdHN0YW1wYCBpcyBhbiBleHBsaWNpdGx5IGluaXRpYWxpemVkIDY0LWJpdCB0aW1lc3RhbXAgKGB1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KWApLiBUaGUgc2V0IGVsZW1lbnQgZXh0ZW5zaW9uIGluc3BlY3RlZCBieSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBuZnRfc2V0X2VsZW1faW5pdCgpYCwgd2hlcmUgYHRpbWVvdXRgIGFuZCBgZXhwaXJhdGlvbmAgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBmaXJzdCBjb25maXJtcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgTkZUX1NFVF9FWFRfVElNRU9VVGAgZXh0ZW5zaW9uIGJlZm9yZSByZWFkaW5nIHRoZXNlIGZpZWxkcy5cXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6IEZhaWxpbmcgdG8gY2hlY2sgZXhwaXJhdGlvbiBmb3IgY2F0Y2hhbGwgZWxlbWVudHMgcHJldmlvdXNseSByaXNrZWQgbG9naWNhbCBlcnJvcnMgKC1FRVhJU1Qgb24gaW5zZXJ0KSBhbmQgbGlmZWN5Y2xlIGJ1Z3Mgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSAvIGRvdWJsZS1mcmVlIGlmIGRlYWN0aXZhdGlvbiByYWNlZCB3aXRoIEdDIGVsZW1lbnQgcmVjbGFtYXRpb24gKGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYygpYCkuIE1lbW9yeSBzYWZldHkgaXNzdWVzIG9mIHRoaXMgdHlwZSAoVUFGLCBkb3VibGUtZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIHBhcnRpYWwgc3RydWN0dXJlIGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXhwaXJhdGlvbiBjaGVja3MgdmlhIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAgdG8gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCgpYCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCwgbWF0Y2hpbmcgdGhlIGV4cGlyYXRpb24gY2hlY2sgc2VtYW50aWNzIHVzZWQgaW4gb3RoZXIgc2V0IHR5cGVzIChzdWNoIGFzIGhhc2gsIHJidHJlZSwgYW5kIHBpcGFwbykuXFxuXFxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczogVGhlIGxvY2FsIHZhcmlhYmxlIGB0c3RhbXBgIGlzIGFuIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgNjQtYml0IHRpbWVzdGFtcCAoYHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpYCkuIFRoZSBzZXQgZWxlbWVudCBleHRlbnNpb24gaW5zcGVjdGVkIGJ5IGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYG5mdF9zZXRfZWxlbV9pbml0KClgLCB3aGVyZSBgdGltZW91dGAgYW5kIGBleHBpcmF0aW9uYCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGZpcnN0IGNvbmZpcm1zIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGBORlRfU0VUX0VYVF9USU1FT1VUYCBleHRlbnNpb24gYmVmb3JlIHJlYWRpbmcgdGhlc2UgZmllbGRzLlxcbi0gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTogRmFpbGluZyB0byBjaGVjayBleHBpcmF0aW9uIGZvciBjYXRjaGFsbCBlbGVtZW50cyBwcmV2aW91c2x5IHJpc2tlZCBsb2dpY2FsIGVycm9ycyAoLUVFWElTVCBvbiBpbnNlcnQpIGFuZCBsaWZlY3ljbGUgYnVncyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIC8gZG91YmxlLWZyZWUgaWYgZGVhY3RpdmF0aW9uIHJhY2VkIHdpdGggR0MgZWxlbWVudCByZWNsYW1hdGlvbiAoYG5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKClgKS4gTWVtb3J5IHNhZmV0eSBpc3N1ZXMgb2YgdGhpcyB0eXBlIChVQUYsIGRvdWJsZS1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgcGFydGlhbCBzdHJ1Y3R1cmUgY29waWVzIGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowgx8vn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 12:49:38 +0000 UTC FinishedAt: 2026-09-14 13:33:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_TABLES" ], "series_id": "7adcbe12-088a-4857-aff3-1fdd3dd2fc59" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_setelem_catchall_insert", "nft_setelem_catchall_deactivate", "nft_setelem_insert", "nft_setelem_deactivate", "nft_add_set_elem", "nft_del_setelem" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "a401a9d547c50ef34db1088cc1fb9a201a7af657", "base_tree": "nf" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1faW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2FkZF9zZXRfZWxlbSYjMzQ7LAogICAgJiMzNDtuZnRfZGVsX3NldGVsZW0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGV4cGlyYXRpb24gY2hlY2tzIHZpYSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHRvIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AsIG1hdGNoaW5nIHRoZSBleHBpcmF0aW9uIGNoZWNrIHNlbWFudGljcyB1c2VkIGluIG90aGVyIHNldCB0eXBlcyAoc3VjaCBhcyBoYXNoLCByYnRyZWUsIGFuZCBwaXBhcG8pLlxuXG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOiBUaGUgbG9jYWwgdmFyaWFibGUgYHRzdGFtcGAgaXMgYW4gZXhwbGljaXRseSBpbml0aWFsaXplZCA2NC1iaXQgdGltZXN0YW1wIChgdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldClgKS4gVGhlIHNldCBlbGVtZW50IGV4dGVuc2lvbiBpbnNwZWN0ZWQgYnkgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBpbiBgbmZ0X3NldF9lbGVtX2luaXQoKWAsIHdoZXJlIGB0aW1lb3V0YCBhbmQgYGV4cGlyYXRpb25gIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgZmlyc3QgY29uZmlybXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYE5GVF9TRVRfRVhUX1RJTUVPVVRgIGV4dGVuc2lvbiBiZWZvcmUgcmVhZGluZyB0aGVzZSBmaWVsZHMuXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6IEZhaWxpbmcgdG8gY2hlY2sgZXhwaXJhdGlvbiBmb3IgY2F0Y2hhbGwgZWxlbWVudHMgcHJldmlvdXNseSByaXNrZWQgbG9naWNhbCBlcnJvcnMgKC1FRVhJU1Qgb24gaW5zZXJ0KSBhbmQgbGlmZWN5Y2xlIGJ1Z3Mgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSAvIGRvdWJsZS1mcmVlIGlmIGRlYWN0aXZhdGlvbiByYWNlZCB3aXRoIEdDIGVsZW1lbnQgcmVjbGFtYXRpb24gKGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYygpYCkuIE1lbW9yeSBzYWZldHkgaXNzdWVzIG9mIHRoaXMgdHlwZSAoVUFGLCBkb3VibGUtZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIHBhcnRpYWwgc3RydWN0dXJlIGNvcGllcyBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGIwYjdjMWViNDkzNDI3ZTg0NDc2NjRlNzFlOTVjYTMyMWM5NDBmZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjExOjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IDc2NWE5MmZhOTBkNjIuLjdlZjJlMTllNjY1NWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTkxLDExICYjNDM7Njk5MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4gXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuJiM0MztcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xuIFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuIFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG4tXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpIHtcbiYjNDM7XHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XG4gXHRcdFx0KnByaXYgPSBjYXRjaGFsbC1cdTAwM2VlbGVtO1xuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHR9XG5AQCAtNzA4OCwxMSAmIzQzOzcwOTAsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiYjNDM7XHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXG4mIzQzO1x0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcbiYjNDM7XHRcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0a2ZyZWUoZWxlbS1cdTAwM2Vwcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1faW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2FkZF9zZXRfZWxlbSYjMzQ7LAogICAgJiMzNDtuZnRfZGVsX3NldGVsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGIwYjdjMWViNDkzNDI3ZTg0NDc2NjRlNzFlOTVjYTMyMWM5NDBmZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEzOjExOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCA3NjVhOTJmYTkwZDYyLi43ZWYyZTE5ZTY2NTVhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwpAQCAtNjk5MSwxMSAmIzQzOzY5OTEsMTMgQEAgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LAogewogCXN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsOwogCXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7CiYjNDM7CXU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpOwogCXN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgJmFtcDtzZXQtJmd0O2NhdGNoYWxsX2xpc3QsIGxpc3QpIHsKIAkJZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLSZndDtlbGVtKTsKLQkJaWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSkgewomIzQzOwkJaWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7CiAJCQkqcHJpdiA9IGNhdGNoYWxsLSZndDtlbGVtOwogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCX0KQEAgLTcwODgsMTEgJiM0Mzs3MDkwLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pCiB7CiAJc3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7CiYjNDM7CXU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpOwogCXN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgJmFtcDtzZXQtJmd0O2NhdGNoYWxsX2xpc3QsIGxpc3QpIHsKIAkJZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLSZndDtlbGVtKTsKLQkJaWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpKQomIzQzOwkJaWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8CiYjNDM7CQkgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpCiAJCQljb250aW51ZTsKIAogCQlrZnJlZShlbGVtLSZndDtwcml2KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIwOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIGluc3RydWN0aW9ucyBhbmQgc2FmZXR5IGd1aWRlbGluZXMgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIOKAkyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suIFJpZ2h0LCB0aGlzIGlzIGRlZmVuc2l2ZSBRQSBmb3Igc3l6a2FsbGVyLCBldmFsdWF0aW5nIGEgTGludXgga2VybmVsIHBhdGNoIGFwcGxpZWQgdG8gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gU291bmRzIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGRlZmluaXRlbHkgYmVuaWduOyBkZXZlbG9wZXIgUUEsIHBhdGNoIGV2YWx1YXRpb24uLi4gbm8gbWFsd2FyZSBvciBleHBsb2l0IGRldmVsb3BtZW50IGhlcmUuCgpUaGUgY29yZSBvZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGluc3BlY3RpbmcgdGhlIGNvZGUsIGZpZ3VyaW5nIG91dCBgV29ydGhGdXp6aW5nYCwgZXh0cmFjdGluZyBhbnkgYEZvY3VzU3ltYm9sc2AsIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGVuLCBvZiBjb3Vyc2UsIHJlcG9ydGluZyB0aGUgcmVzdWx0cy4KClJpZ2h0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYWN0dWFsIHBhdGNoLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdHdvIGZ1bmN0aW9ucywgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCwgd2l0aGluIGBuZl90YWJsZXNfYXBpLmNgLiBUaGUgZGlmZiBpbnRyb2R1Y2VzIGEgYHRzdGFtcGAgKHRpbWVzdGFtcCkgdmFyaWFibGUgYW5kIGFkZHMgYSBjYWxsIHRvIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYCBpbiB0aGUgY29uZGl0aW9uYWwgY2hlY2tzIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgc29tZSB0aW1lLWJhc2VkIGV4cGlyeSBjaGVja3Mgd2l0aGluIHRoaXMgYG5mdF9zZXRfZWxlbWAgZnVuY3Rpb25hbGl0eS4KCk5vdyBJIG5lZWQgdG8gZ28gZGVlcGVyLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgZnVsbHksIEkmIzM5O2xsIG5lZWQgdG8gc2VlIG1vcmUgY29udGV4dC4gVGltZSB0byB1c2Ugc29tZSB0b29scyDigJMgZWl0aGVyIGEgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlIG9yIG1heWJlIGEgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgY2FsbGVycyBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIHVuZGVyc3RhbmQgaG93IGBuZnRfc2V0X2VsZW1gIGlzIHVzZWQgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdGltZXN0YW1wIGNoZWNrcyBpbnRlcmFjdCB3aXRoIHRoZSBvdmVyYWxsIGRhdGEgZmxvdyBhbmQgaWYgaXQgaW50cm9kdWNlcyBhbnkgbmV3IGNvZGUgcGF0aHMgdGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBhbmFseXNpcyBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5ODA6XHRcdFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxuNjk4MTpcdFx0XHRcdHJldHVybiBleHQ7XG42OTgyOlx0XHR9XG42OTgzOlx0XG42OTg0Olx0XHRyZXR1cm4gTlVMTDtcbjY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG42OTk1Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5OTY6XHRcbjY5OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG42OTk4Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjY5OTk6XHRcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbjcwMDA6XHRcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xuNzAwMTpcdFx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcwMDI6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjcwMDM6XHRcdFx0fVxuNzAwNDpcdFx0fVxuNzAwNTpcdFxuNzAwNjpcdFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG43MDA3Olx0XHRpZiAoIWNhdGNoYWxsKVxuNzAwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcwMDk6XHRcbjcwMTA6XHRcdGNhdGNoYWxsLVx1MDAzZWVsZW0gPSBlbGVtLVx1MDAzZXByaXY7XG43MDExOlx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XG43MDEyOlx0XG43MDEzOlx0XHRyZXR1cm4gMDtcbjcwMTQ6XHR9XG43MDE1Olx0XG43MDE2Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzAxNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDE4Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjcwMTk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcbjcwMjA6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG43MDIxOlx0e1xuNzAyMjpcdFx0aW50IHJldDtcbjcwMjM6XHRcbjcwMjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxuNzAyNTpcdFx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG43MDI2Olx0XHRlbHNlXG43MDI3Olx0XHRcdHJldCA9IHNldC1cdTAwM2VvcHMtXHUwMDNlaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xuNzAyODpcdFxuNzAyOTpcdFx0cmV0dXJuIHJldDtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwMzM6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuNzAzNDpcdHtcbjcwMzU6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XG43MDM2Olx0XG43MDM3Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfRkxBR1MpIFx1MDAyNlx1MDAyNlxuNzAzODpcdFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG43MDM5Olx0XHRcdHJldHVybiB0cnVlO1xuNzA0MDpcdFxuNzA0MTpcdFx0cmV0dXJuIGZhbHNlO1xuNzA0MjpcdH1cbjcwNDM6XHRcbjcwNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDQ1Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbjcwNDY6XHR7XG43MDQ3Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xuNzA0ODpcdFxuNzA0OTpcdFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xuNzA1MDpcdFx0XHRuZnRfY2xlYXIobmV0LCBleHQpO1xuNzA1MTpcdFx0fSBlbHNlIHtcbjcwNTI6XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbjcwNTM6XHRcdH1cbjcwNTQ6XHR9XG43MDU1Olx0XG43MDU2Olx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDU3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXG43MDU4Olx0e1xuNzA1OTpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbjcwNjA6XHRcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXHUwMDNldXBkYXRlO1xuNzA2MTpcdFxuNzA2MjpcdFx0aWYgKHVwZGF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1RSQU5TX1VQRF9USU1FT1VUKVxuNzA2MzpcdFx0XHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0LCB1cGRhdGUtXHUwMDNldGltZW91dCk7XG43MDY0Olx0XG43MDY1Olx0XHRpZiAodXBkYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXG43MDY2Olx0XHRcdFdSSVRFX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24sIGdldF9qaWZmaWVzXzY0KCkgJiM0MzsgdXBkYXRlLVx1MDAzZWV4cGlyYXRpb24pO1xuNzA2NzpcdH1cbjcwNjg6XHRcbjcwNjk6XHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG43MDcwOlx0XHRcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlKVxuNzA3MTpcdHtcbjcwNzI6XHRcdGludCBpO1xuNzA3MzpcdFxuNzA3NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGUtXHUwMDNlbmVsZW1zOyBpJiM0MzsmIzQzOykge1xuNzA3NTpcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtID0gXHUwMDI2dGUtXHUwMDNlZWxlbXNbaV07XG43MDc2Olx0XG43MDc3Olx0XHRcdGlmIChlbGVtLVx1MDAzZXVwZGF0ZSlcbjcwNzg6XHRcdFx0XHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXHUwMDNlc2V0LCBlbGVtKTtcbjcwNzk6XHRcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MzgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFJlbGV2YW50IFNlY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGxpbmVzIDcwODAgdG8gNzEzMC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBkaXNjdXNzZWQgd2l0aGluIHRoYXQgc2VnbWVudC4gSSBzdXNwZWN0IGl0JiMzOTtzIGxpa2VseSBhIGNyaXRpY2FsIGp1bmN0dXJlIGluIHRoZSBhcmd1bWVudCwgcGVyaGFwcyBhIGRldGFpbGVkIGFuYWx5c2lzLCBhIGNhc2Ugc3R1ZHksIGEgcGl2b3RhbCBjb21wYXJpc29uLCBvciB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBldmlkZW5jZS4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIHF1aWNrbHkgc2tpbSB0aG9zZSBsaW5lcywgbG9va2luZyBmb3Iga2V5IHRlcm1zLCBtZXRob2RvbG9naWNhbCBzaGlmdHMsIGNvbmNsdXNpb25zIGJlaW5nIGRyYXduLCBvciBjb3VudGVyYXJndW1lbnRzIGJlaW5nIGFkZHJlc3NlZC4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlIGNvbnRleHQgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgdGhhdCBzZWN0aW9uIGlmIHRoZSBtZWFuaW5nIGlzIHVuY2xlYXIuIEZyb20gZXhwZXJpZW5jZSwgaW1wb3J0YW50IGRpc2N1c3Npb25zIGFyZSBvZnRlbiBwcmVzZW50ZWQgaW4gc2hvcnQgc2VjdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQuIEkgd2lsbCBhbHNvIGJlIHByZXBhcmVkIHRvIHJldmlzaXQgYW5kIHJlLXJlYWQgaXQgaWYgdGhlIGZpcnN0IHBhc3MgZG9lc24mIzM5O3QgcHJvdmlkZSBhIGNsZWFyIHBpY3R1cmU7IHNvbWV0aW1lcyB0aGUgaW50cmljYWNpZXMgb2YgdGhlIGFyZ3VtZW50IG9ubHkgcmV2ZWFsIHRoZW1zZWx2ZXMgYWZ0ZXIgYSBtb3JlIHRob3JvdWdoIGFuZCBjYXJlZnVsIGV4YW1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwODA6XHRcdFx0XHRuZnRfc2V0ZWxlbV9hY3RpdmF0ZShjdHgtXHUwMDNlbmV0LCB0ZS1cdTAwM2VzZXQsIGVsZW0tXHUwMDNlcHJpdik7XG43MDgxOlx0XG43MDgyOlx0XHRcdG5mX3RhYmxlc19zZXRlbGVtX25vdGlmeShjdHgsIHRlLVx1MDAzZXNldCwgZWxlbS1cdTAwM2Vwcml2LFxuNzA4MzpcdFx0XHRcdFx0XHQgTkZUX01TR19ORVdTRVRFTEVNKTtcbjcwODQ6XHRcdFx0a2ZyZWUoZWxlbS1cdTAwM2V1cGRhdGUpO1xuNzA4NTpcdFx0fVxuNzA4NjpcdH1cbjcwODc6XHRcbjcwODg6XHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzA4OTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuNzA5MDpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuNzA5MTpcdHtcbjcwOTI6XHRcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xuNzA5MzpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG43MDk0Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjcwOTU6XHRcbjcwOTY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG43MDk3Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjcwOTg6XHRcdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XG43MDk5Olx0XHRcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbjcxMDA6XHRcdFx0XHRjb250aW51ZTtcbjcxMDE6XHRcbjcxMDI6XHRcdFx0a2ZyZWUoZWxlbS1cdTAwM2Vwcml2KTtcbjcxMDM6XHRcdFx0ZWxlbS1cdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcxMDQ6XHRcdFx0bmZ0X3NldF9lbGVtX2NoYW5nZV9hY3RpdmUobmV0LCBzZXQsIGV4dCk7XG43MTA1Olx0XHRcdHJldHVybiAwO1xuNzEwNjpcdFx0fVxuNzEwNzpcdFxuNzEwODpcdFx0cmV0dXJuIC1FTk9FTlQ7XG43MTA5Olx0fVxuNzExMDpcdFxuNzExMTpcdHN0YXRpYyBpbnQgX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcxMTI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuNzExMzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG43MTE0Olx0e1xuNzExNTpcdFx0dm9pZCAqcHJpdjtcbjcxMTY6XHRcbjcxMTc6XHRcdHByaXYgPSBzZXQtXHUwMDNlb3BzLVx1MDAzZWRlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xuNzExODpcdFx0aWYgKCFwcml2KVxuNzExOTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjcxMjA6XHRcbjcxMjE6XHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG43MTIyOlx0XHRlbGVtLVx1MDAzZXByaXYgPSBwcml2O1xuNzEyMzpcdFx0c2V0LVx1MDAzZW5kZWFjdCYjNDM7JiM0Mzs7XG43MTI0Olx0XG43MTI1Olx0XHRyZXR1cm4gMDtcbjcxMjY6XHR9XG43MTI3Olx0XG43MTI4Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcxMjk6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcxMzA6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSwgdTMyIGZsYWdzKVxuNzEzMTpcdHtcbjcxMzI6XHRcdGludCByZXQ7XG43MTMzOlx0XG43MTM0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcbjcxMzU6XHRcdFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XG43MTM2Olx0XHRlbHNlXG43MTM3Olx0XHRcdHJldCA9IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XG43MTM4Olx0XG43MTM5Olx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNzEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIG5mX3RhYmxlcyBmb3IgU2VjdXJpdHkgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgYG5mX3RhYmxlc2AgaW4gbmV0ZmlsdGVyLCBhIGtub3duIHRhcmdldCBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGZvY3VzIGltbWVkaWF0ZWx5IHNoaWZ0cyB0byB0aGUgYXR0YWNrIHN1cmZhY2U6IG5ldGxpbmsgYWNjZXNzIHZpYSBgbmZuZXRsaW5rYC4gVGhhdCBtZWFucyB1bnByaXZpbGVnZWQgdXNlciBuYW1lc3BhY2VzIGFyZSBpbiBwbGF5IGlmIGBORl9UQUJMRVNgIGlzIGVuYWJsZWQsIG9yIGZ1bGwgYENBUF9ORVRfQURNSU5gIGFjY2VzcyBpZiB0aGF0IGlzbiYjMzk7dCB0aGUgY2FzZS4gVGhpcyBtYWtlcyBpdCBhbiBhdHRyYWN0aXZlIHRhcmdldCwgYXMgZXhwZWN0ZWQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzLiBMZXQgbWUgY2hlY2sgdGhlIGdpdCBsb2cgZm9yIHRoZSBjb21taXQuIEhtbSwgSSBkb24mIzM5O3QgaGF2ZSB0aGUgYGdpdCBsb2dgIHRvb2wgcmVhZGlseSBhdmFpbGFibGUuIE5vIHByb2JsZW0sIGxldCYjMzk7cyBzZWUsIEkgY2FuIHVzZSBncmVwcGVyIG9yIGlmIEkgY2FuJiMzOTt0IGRvIHRoYXQsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvbW1pdCBkaWZmIGFuZCBzZWFyY2ggdGhlIGNvbW1pdCBtZXNzYWdlIGlmIG5lY2Vzc2FyeS4KCkFjdHVhbGx5LCBiZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGUgY29tbWl0LCBsZXQmIzM5O3MgY2xhcmlmeSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgc2hvdWxkIGNoZWNrIHdoaWNoIEtjb25maWcgb3B0aW9ucyBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiBgbmZfdGFibGVzX2FwaS5jYC4gQSBxdWljayBgZ3JlcGAgZm9yIGBuZl90YWJsZXNfYXBpLm9gIG9yIGBDT05GSUdfTkZfVEFCTEVTYCB3aWxsIGdpdmUgbWUgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gVGhpcyB3aWxsIGhlbHAgdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGFyZSByZWxldmFudCwgYW5kIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19hcGkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODQ9b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXHQmIzQzOz0gbmZfZHVwX25ldGRldi5vXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04Ni0jIG5mX3RhYmxlc1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTo4NzpuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXHRcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgc3BlY2lmaWMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgYnVpbGQgcHJvY2Vzcy4gQmFzZWQgb24gbXkgZXhpc3Rpbmcga25vd2xlZGdlLCB0aGUgaXNzdWUgaXMgbGlrZWx5IHJvb3RlZCBpbiBvbmUgb2YgdGhlIE1ha2VmaWxlIHJ1bGVzIGZvciB0aGF0IHN1YnN5c3RlbS4gTXkgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIG1vc3QgbGlrZWx5IGFyb3VuZCBsaW5lIDg0LiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgc2VjdGlvbiB3aWxsIGhhbmRsZSB0aGUgY29tcGlsYXRpb24gb3IgbGlua2luZyBvZiBhIG1vZHVsZSBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGFuZCB0aGlzIHdpbGwgbW9zdCBsaWtlbHkgcmV2ZWFsIHdoYXQgSSBuZWVkIHRvIHNlZSBhYm91dCB0aGUgb2JqZWN0IGZpbGVzIG9yIGNvbW1hbmRzIHRoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XG4gIDgxOlx0b2JqLSQoQ09ORklHX05FVEZJTFRFUl9DT05OQ09VTlQpICYjNDM7PSBuZl9jb25uY291bnQub1xuICA4MjpcdFxuICA4MzpcdCMgZ2VuZXJpYyBwYWNrZXQgZHVwbGljYXRpb24gZnJvbSBuZXRkZXYgZmFtaWx5XG4gIDg0Olx0b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXHQmIzQzOz0gbmZfZHVwX25ldGRldi5vXG4gIDg1Olx0XG4gIDg2Olx0IyBuZl90YWJsZXNcbiAgODc6XHRuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcbiAgODg6XHRcdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG4gIDg5Olx0XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbiAgOTA6XHRcdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxuICA5MTpcdFx0XHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXG4gIDkyOlx0XHRcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxuICA5MzpcdFx0XHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxuICA5NDpcdFx0XHQgIG5mdF9zZXRfcGlwYXBvLm9cbiAgOTU6XHRcbiAgOTY6XHRpZmRlZiBDT05GSUdfWDg2XzY0XG4gIDk3Olx0aWZuZGVmIENPTkZJR19VTUxcbiAgOTg6XHRuZl90YWJsZXMtb2JqcyAmIzQzOz0gbmZ0X3NldF9waXBhcG9fYXZ4Mi5vXG4gIDk5Olx0ZW5kaWZcbiAxMDA6XHRlbmRpZlxuIDEwMTpcdFxuIDEwMjpcdGlmZGVmIENPTkZJR19ORlRfQ1RcbiAxMDM6XHRpZmRlZiBDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkVcbiAxMDQ6XHRuZl90YWJsZXMtb2JqcyAmIzQzOz0gbmZ0X2N0X2Zhc3Qub1xuIDEwNTpcdGVuZGlmXG4gMTA2Olx0ZW5kaWZcbiAxMDc6XHRcbiAxMDg6XHRvYmotJChDT05GSUdfTkZfVEFCTEVTKVx0XHQmIzQzOz0gbmZfdGFibGVzLm9cbiAxMDk6XHRvYmotJChDT05GSUdfTkZUX0NPTVBBVClcdCYjNDM7PSBuZnRfY29tcGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQxNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBvZiBgbmZfdGFibGVzLW9ianNgKioKCkFscmlnaHQsIHNvIGBuZl90YWJsZXMtb2Jqc2AgaXMgdGhlIGtleSwgYW5kIEkga25vdyBpdCYjMzk7cyB1bmRlciB0aGUgY29udHJvbCBvZiBgQ09ORklHX05GX1RBQkxFU2AuIFRoaXMgcmluZ3MgYSBiZWxsLiBJdCBzb3VuZHMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3ksIHNvIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBjb25uZWN0aW9uLiBUaW1lIHRvIGp1bXAgb3ZlciB0byB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIGZvciBgbmV0ZmlsdGVyYCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgdHJlZSDigJMgdGhhdCB3b3VsZCBiZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhpcyBzaG91bGQgY2xlYXJseSBsYXkgb3V0IHRoZSByZWxhdGlvbnNoaXAgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcyBpbiBob3cgYE5GX1RBQkxFU2AgYWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIGBuZl90YWJsZXMtb2Jqc2AuIEJlc3QgdG8gY2hlY2sgdGhlIHNvdXJjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYG5ldGZpbHRlcmAgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gQW5kIGlmIG15IG1lbW9yeSBzZXJ2ZXMsIHRoZSByZWxldmFudCBzZWN0aW9uIGZvciB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbiBzdGFydHMgYXJvdW5kIGxpbmUgNDU1LiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgb3B0aW9ucyBhdmFpbGFibGUsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byBlYWNoIG90aGVyIHdpdGhpbiB0aGlzIGNvbXBsZXggZnJhbWV3b3JrLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBzdGF0ZW1lbnRzLCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIG1heWJlIHNvbWUgYHNlbGVjdGAgc3RhdGVtZW50cyB0byBndWlkZSB0aGUgYnVpbGQgcHJvY2Vzcy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGNvbW1lbnRlZCBlbm91Z2ggdGhhdCBJIGNhbiBxdWlja2x5IGdyb2sgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdmFyaW91cyBOZXRmaWx0ZXIgZmVhdHVyZXMgYW5kIG9wdGlvbnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUwOlx0Y29uZmlnIE5FVEZJTFRFUl9TWU5QUk9YWVxuIDQ1MTpcdFx0dHJpc3RhdGVcbiA0NTI6XHRcbiA0NTM6XHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xuIDQ1NDpcdFxuIDQ1NTpcdGNvbmZpZyBORl9UQUJMRVNcbiA0NTY6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDQ1NzpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiA0NTg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuIDQ1OTpcdFx0aGVscFxuIDQ2MDpcdFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXG4gNDYxOlx0XHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XG4gNDYyOlx0XHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxuIDQ2MzpcdFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICYjMzk7bmZ0JiMzOTsgdXRpbGl0eVxuIDQ2NDpcdFx0ICAoaHR0cHM6Ly93d3cubmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9uZnRhYmxlcykgdXNlcyB0byBidWlsZCB0aGVcbiA0NjU6XHRcdCAgcnVsZS1zZXQuIEl0IGFsc28gY29tZXMgd2l0aCB0aGUgZ2VuZXJpYyBzZXQgaW5mcmFzdHJ1Y3R1cmUgdGhhdFxuIDQ2NjpcdFx0ICBhbGxvd3MgeW91IHRvIGNvbnN0cnVjdCBtYXBwaW5ncyBiZXR3ZWVuIG1hdGNoaW5ncyBhbmQgYWN0aW9uc1xuIDQ2NzpcdFx0ICBmb3IgcGVyZm9ybWFuY2UgbG9va3Vwcy5cbiA0Njg6XHRcbiA0Njk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiA0NzA6XHRcbiA0NzE6XHRpZiBORl9UQUJMRVNcbiA0NzI6XHRjb25maWcgTkZfVEFCTEVTX0lORVRcbiA0NzM6XHRcdGRlcGVuZHMgb24gSVBWNlxuIDQ3NDpcdFx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NzYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBQYXRjaCBJbXBhY3Qgb24gU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc3RhcnQgYnkgaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgaXQgdG91Y2hlczogYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gUmlnaHQsIEkgcmVtZW1iZXIgc2VlaW5nIHRoZW0gaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBhcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucz8gWWVzLCBhIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoZXkgYXJlIGluZGVlZCBkZWNsYXJlZCBhcyBzdGF0aWMuIAoKTm93LCBoZXJl4oCZcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBob3cgc3RhdGljIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZC4gVGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCBzdGF0aWMgKmlubGluZSogZnVuY3Rpb25zIGRlY2xhcmVkIGluIGhlYWRlciBmaWxlcyBkb27igJl0IGhhdmUgZGlzdGluY3Qgc3ltYm9scyBpbiBgdm1saW51eGAgYW5kIGNhbiYjMzk7dCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4gSG1tLCBidXQgdGhlc2UgYXJlICpub3QqIGlubGluZSBmdW5jdGlvbnMgaW4gYSBoZWFkZXIuIFRoZXkmIzM5O3JlIHN0YXRpYyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gYSBgLmNgIGZpbGUsIGBuZl90YWJsZXNfYXBpLmNgLiBBcmUgdGhleSB0cmVhdGVkIHRoZSBzYW1lIHdheT8gQ291bGQgdGhlIGNvbXBpbGVyIGlubGluZSB0aGVtIGFueXdheSwgb3IgZG8gdGhleSByZW1haW4gYXMgZGlzdGluY3Qgc3ltYm9scz8gSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhleSBhcmUgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb25zLCBhbmQgd2hhdCB0aG9zZSBjYWxsZXIgZnVuY3Rpb25zIGFyZS4KClRoZXJlZm9yZSwgbGV0IG1lIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYm90aCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYCB0byB1bmRlcnN0YW5kIHRoZWlyIHVzYWdlIGFuZCB3aGV0aGVyIHRoZSBjb21waWxlciBpcyBsaWtlbHkgdG8gaW5saW5lIHRoZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGltcGFjdCBhbmQgd2hldGhlciB0aGV5JiMzOTtyZSBwcm9wZXJseSByZXByZXNlbnRlZCBpbiB0aGUgc3ltYm9sIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTY5PXN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9jYXRjaGFsbF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTg3OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODgtXHRcdFx0XHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDE2PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDI1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDI2LVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgYG5mdF9zZXRlbGVtX2luc2VydGAgQ2FsbGVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmZ0X3NldGVsZW1faW5zZXJ0YCBpcyBiZWluZyBpbnZva2VkLiBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIHJpZ2h0IG5vdy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGFwcHJvYWNoIOKAkyB1c2luZyB0aGUgdG9vbGluZyBJJiMzOTttIG1vc3QgY29tZm9ydGFibGUgd2l0aC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHRyYWNrIGRvd24gYWxsIGRpcmVjdCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIGBubWAgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyB3cmFwcGVyIGZ1bmN0aW9ucywgb3IgbWFjcm9zIGludm9sdmVkLCBzbyBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIGF0IHRoZSBhc3NlbWJseSBsZXZlbC4KCkJleW9uZCBhIHNpbXBsZSB0ZXh0IHNlYXJjaCB0aG91Z2gsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgc3RhdGljIGFuYWx5c2lzIHRlY2huaXF1ZXMuIFRvb2xzIGxpa2UgYGtjYWNoZWdyaW5kYCBvciBldmVuIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgc2NyaXB0IHdpdGggc29tZXRoaW5nIGxpa2UgYGNsYW5nYCBjb3VsZCBwcm92aWRlIGNhbGwgZ3JhcGhzLiBUaGF0IHdpbGwgYmUgbW9yZSBpbnNpZ2h0ZnVsIHRoYW4gYSByYXcgdGV4dCBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgdG9vLCBzaW5jZSB0aGF0IGNhbiBhZGQgY29tcGxleGl0eS4KCk9uY2UgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgY2FsbCBzaXRlcywgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGV2YWx1YXRlIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkgYXJlIG1hZGUuIFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCBsb2NrcyBhcmUgaGVsZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlcnJvciBwYXRocz8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGhvdyBkbyB0aGVzZSBjYWxscyBpbXBhY3QgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5PyBJJiMzOTtsbCBwcm9iYWJseSBlbmQgdXAgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGRldGFpbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBsaWtlbHkgdG8gbGVhZCB0byBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZXQgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgdXNlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9zZXRlbGVtX2luc2VydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5ODc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDE2OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTctXHRcdFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ5PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1NzEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NTcyOlx0ZXJyID0gbmZ0X3NldGVsZW1faW5zZXJ0KGN0eC1cdTAwM2VuZXQsIHNldCwgXHUwMDI2ZWxlbSwgXHUwMDI2ZWxlbV9wcml2LCBmbGFncyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTczLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5NgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIE5GVCBTZXQgRWxlbWVudCBJbnNlcnRpb24gUGF0aCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgbmV3IGVsZW1lbnRzIGFyZSBhZGRlZCB0byBORlQgc2V0cy4gSSBzZWUgdGhhdCB0aGUgYG5mdF9hZGRfc2V0X2VsZW1gIGZ1bmN0aW9uIGlzIHRoZSBrZXkgcGxheWVyIGhlcmUsIGFuZCB0aGF0IGl0IGNhbGxzIGBuZnRfc2V0ZWxlbV9pbnNlcnRgLiBHb29kLCBtYWtlcyBzZW5zZS4gQnV0IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFdoYXQmIzM5O3MgdGhlICpvcmlnaW4qIG9mIGBuZnRfYWRkX3NldF9lbGVtYD8gQWgsIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgYG5mX3RhYmxlc19uZXdzZXRlbGVtYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgSSYjMzk7bSBhZnRlciwgdGhlIGluaXRpYWwgdHJpZ2dlciBmb3IgYSBuZXcgc2V0IGVsZW1lbnQuCgpOb3csIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGRlYWN0aXZhdGlvbiDigJMgc3BlY2lmaWNhbGx5IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gV2hhdCB0cmlnZ2VycyB0aGF0PyBBbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGUgbW9yZSBnZW5lcmljIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCBmdW5jdGlvbiwganVzdCB0byBnZXQgYSBicm9hZGVyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IHNldCBlbGVtZW50cyBhcmUgZGVhY3RpdmF0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGhzIGZvciBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIHJlbW92YWwgc2NlbmFyaW9zLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNjk9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2FkZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwODctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDg4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg5LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcxMjg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkFuYWx5emluZyBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAgQ2FsbGVycyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IHdhbnRzIG1lIHRvIGFuYWx5emUgdGhlIGNhbGxlcnMgb2YgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgbGlrZWx5IG1lYW5zIGlkZW50aWZ5aW5nIHdoZXJlIHRoaXMgY29yZSBmdW5jdGlvbiBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayBpcyBiZWluZyBpbnZva2VkLiBJdCYjMzk7cyBhYm91dCBmaWd1cmluZyBvdXQgd2hpY2ggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0IHRvIGRpc2FibGUgb3IgaW52YWxpZGF0ZSBlbGVtZW50cyB3aXRoaW4gTmV0ZmlsdGVyIHRhYmxlcyBvciBzZXRzLCB3aGljaCBpbiB0dXJuIGFmZmVjdCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBuZXR3b3JrIGJlaGF2aW9yLiBNeSBpbnR1aXRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd2luZyBtZSB0byBwb3RlbnRpYWwgYXJlYXM6CgoqICAgKipSdWxlIE1hbmFnZW1lbnQ6KiogSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdGhpcyBpcyBkaXJlY3RseSBsaW5rZWQgdG8gdGhlIHJlbW92YWwgb3IgZGVhY3RpdmF0aW9uIG9mIHJ1bGVzIHdpdGhpbiBOZXRmaWx0ZXIgc2V0cy4gU28gSSYjMzk7ZCBiZSBsb29raW5nIGZvciBjb2RlIHJlbGF0ZWQgdG8gYG5mdCBhZGQvZGVsZXRlIGVsZW1lbnRgIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgYSBtb3JlIGludGVybmFsIGZ1bmN0aW9uLgoqICAgKipTZXQgR2FyYmFnZSBDb2xsZWN0aW9uL0V4cGlyeToqKiBUaGlzIGNvdWxkIGJlIHBhcnQgb2YgYSBtZWNoYW5pc20gdG8gYXV0b21hdGljYWxseSByZW1vdmUgb3IgaW52YWxpZGF0ZSBzZXQgZWxlbWVudHMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCAoZS5nLiwgZHVlIHRvIHRpbWVvdXRzLCByZXNvdXJjZSBsaW1pdGF0aW9ucywgb3IgcG9saWN5IGNoYW5nZXMpLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIHRpbWVycywgY2xlYW51cCByb3V0aW5lcyBvciBldmVudHMuCiogICAqKkVycm9yIEhhbmRsaW5nL1JvbGxiYWNrOioqIFBvdGVudGlhbGx5LCBpdCBjb3VsZCBiZSB1c2VkIGluIHNjZW5hcmlvcyB3aGVyZSBhIE5ldGZpbHRlciBvcGVyYXRpb24gZmFpbHMsIGFuZCB3ZSBuZWVkIHRvIHJvbGwgYmFjayBjaGFuZ2VzLCBkZWFjdGl2YXRpbmcgZWxlbWVudHMgYWRkZWQgZHVyaW5nIGEgZmFpbGVkIHRyYW5zYWN0aW9uLgoqICAgKipDb25udHJhY2sgSW50ZWdyYXRpb246KiogU2luY2Ugc2V0cyBjYW4gYmUgdXNlZCB3aXRoIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHRoaXMgZnVuY3Rpb24gY291bGQgYmUgdXRpbGl6ZWQgdG8gaGFuZGxlIHRoZSByZW1vdmFsIG9mIHNldCBlbGVtZW50cyB0aGF0IGNvcnJlc3BvbmQgdG8gZXhwaXJlZCBvciB0ZXJtaW5hdGVkIGNvbm5lY3Rpb25zLgoqICAgKipDb25maWd1cmF0aW9uIFJlbG9hZHM6KiogV2hlbiBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbG9hZGVkIG9yIHVwZGF0ZWQsIGV4aXN0aW5nIHNldCBlbGVtZW50cyBtaWdodCBiZSBkZWFjdGl2YXRlZCBhbmQgbmV3IGVsZW1lbnRzIGFjdGl2YXRlZC4gSSB3aWxsIGhhdmUgdG8gbG9vayBhdCB0aGUgcmVsb2FkIG9yIGNvbmZpZyBjb2RlLgoKRXNzZW50aWFsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxpZmVjeWNsZSBvZiBzZXQgZWxlbWVudHMgYW5kIGhvdyB0aGV5IGFyZSBtYW5hZ2VkOiBjcmVhdGlvbiwgYWN0aXZhdGlvbiwgdXNlLCBhbmQgdWx0aW1hdGVseSwgZGVhY3RpdmF0aW9uL3JlbW92YWwuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgY29kZSBwYXRoIHRoYXQgaGFuZGxlcyB0aGUgJiMzOTtjbGVhbnVwJiMzOTsgc3RhZ2Ugb2YgdGhlc2UgZWxlbWVudHMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBzdGFydCB0cmFjaW5nIGNhbGxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA4OD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMTAtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTExOnN0YXRpYyBpbnQgX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMTItXHRcdFx0XHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTI3LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEyODpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEyOS1cdFx0XHRcdCAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM2LVx0ZWxzZVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEzNzpcdFx0cmV0ID0gX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzgtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzgyOT1zdGF0aWMgaW50IG5mdF9kZWxfc2V0ZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5MDEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTAyOlx0ZXJyID0gbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjdHgtXHUwMDNlbmV0LCBzZXQsIFx1MDAyNmVsZW0sIGZsYWdzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5MDMtXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY0NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlY29uc3RydWN0aW5nIHRoZSBORlQgRGVsZXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mdF9kZWxfc2V0ZWxlbWAgaGVyZSwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgbmZfdGFibGVzX2RlbHNldGVsZW1gLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gU3RhbmRhcmQgZGVsZXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGUgZWxlbWVudCBkZWFjdGl2YXRpb24sIHNvIEkgbmVlZCB0byBkaWcgaW50byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBwYXRjaCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGV4cGlyYXRpb24gbG9naWMsIHdoaWNoIG1ha2VzIHNlbnNlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBzZXRzLiBMZXQgbWUgc2VhcmNoIGZvciBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGNoYW5nZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbmZ0X3NldF9lbGVtX2V4cGlyZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5ODc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTktXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDAwOlx0XHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDAxLVx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5OC1cdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk5Olx0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTAwLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjc5PXN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2OTI6XHRcdGlmICghX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5My1cdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTU5PXN0YXRpYyBpbmxpbmUgaW50IG5mdF9yaGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTY4LVx0XHRyZXR1cm4gMTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6Njk6XHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZoZS1cdTAwM2VleHQsIHgtXHUwMDNldHN0YW1wKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNzAtXHRcdHJldHVybiAxO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz00MTk9c3RhdGljIHN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKnBpcGFwb19nZXRfc2xvdyhjb25zdCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtNDc4LVx0XHRcdGUgPSBmLVx1MDAzZW10W2JdLmU7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6NDc5Olx0XHRcdGlmICh1bmxpa2VseShfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNmUtXHUwMDNlZXh0LCB0c3RhbXApIHx8XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtNDgwLVx0XHRcdFx0ICAgICAhbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZlLVx1MDAzZWV4dCwgZ2VubWFzaykpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xNzEwPXN0YXRpYyB2b2lkIHBpcGFwb19nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQsIHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzUwLVx0XHQgKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNzUxOlx0XHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZlLVx1MDAzZWV4dCwgdHN0YW1wKSkge1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3NTItXHRcdFx0aWYgKCFuZnRfdHJhbnNfZ2Nfc3BhY2UoZ2MpKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmM9MTEzMD1zdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICpwaXBhcG9fZ2V0X2F2eDIoY29uc3Qgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmMtMTIxNi1cdFx0XHRlID0gZi1cdTAwM2VtdFtyZXRdLmU7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYzoxMjE3Olx0XHRcdGlmICh1bmxpa2VseShfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNmUtXHUwMDNlZXh0LCB0c3RhbXApIHx8XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYy0xMjE4LVx0XHRcdFx0ICAgICAhbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZlLVx1MDAzZWV4dCwgZ2VubWFzaykpKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTM0Mj1zdGF0aWMgaW50IF9fbmZ0X3JidHJlZV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0zOTctXHRcdCAqL1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjM5ODpcdFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2cmJlLVx1MDAzZWV4dCwgdHN0YW1wKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0zOTktXHRcdCAgICBuZnRfc2V0X2VsZW1fYWN0aXZlKFx1MDAyNnJiZS1cdTAwM2VleHQsIGN1cl9nZW5tYXNrKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz03ODM9bmZ0X3JidHJlZV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODE5LVx0XHRcdFx0Y29udGludWU7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6ODIwOlx0XHRcdH0gZWxzZSBpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZyYmUtXHUwMDNlZXh0LCB0c3RhbXApKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODIxLVx0XHRcdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg5MT1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtOTExLVx0XHR9XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6OTEyOlx0XHRpZiAoIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2cmJlLVx1MDAzZWV4dCwgdHN0YW1wKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy05MTMtXHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzIxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2F0Y2hhbGwgRWxlbWVudCBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGNoYW5nZXMgdG8gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gSW5pdGlhbGx5LCBJIHNlZSB0aGF0IHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgdGhlIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYCBjaGVjaywgaW5jb3Jwb3JhdGluZyB0aGUgYHRzdGFtcGAuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMsIHdoaWNoIGlzIGtleS4KCkluIHRoZSBpbnNlcnQgZnVuY3Rpb24sIHRoZSBvbGQgY29kZSByZXR1cm5lZCBgLUVFWElTVGAgaWYgYW4gYWN0aXZlIGNhdGNoYWxsIGVsZW1lbnQgd2FzIGZvdW5kLiBOb3csIGl0IHNraXBzIHRoZSBlbGVtZW50ICppZiBpdCYjMzk7cyBleHBpcmVkKiBhbmQgYXR0ZW1wdHMgdG8gaW5zZXJ0IGEgKm5ldyogY2F0Y2hhbGwgZWxlbWVudC4gSG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGhhcHBlbnMgdG8gdGhlICpvbGQqLCBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQgdGhhdCYjMzk7cyBhbHJlYWR5IGluIGBzZXQtJmd0O2NhdGNoYWxsX2xpc3RgPyBUaGF0JiMzOTtzIHRoZSByZWFsIHF1ZXN0aW9uLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIG5vdCBiZWluZyByZW1vdmVkLiBUaGUgZXhpc3RpbmcgZWxlbWVudCBpcyBqdXN0IGlnbm9yZWQsIGFuZCBhICpuZXcqIG9uZSBpcyBhcHBlbmRlZCB0byB0aGUgbGlzdC4KCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGluc2VydGlvbiBjb2RlOiB0aGUgb2xkIGV4cGlyZWQgZWxlbWVudCB3YXNuJiMzOTt0IHJlbW92ZWQgYmVmb3JlIHRoZSBuZXcgb25lIHdhcyBhZGRlZCB0byBgc2V0LSZndDtjYXRjaGFsbF9saXN0YC4gKlllcyEqIFRoYXQgbWVhbnMgdGhlcmUgY2FuIG5vdyBiZSBtdWx0aXBsZSBjYXRjaGFsbCBlbGVtZW50cyBpbiBgc2V0LSZndDtjYXRjaGFsbF9saXN0YC4gVGhlIG9sZCBlbGVtZW50IGlzIG5vdCByZW1vdmVkIHdoZW4gaXQgZXhwaXJlcywgdGhlIG5ldyBlbGVtZW50IGlzIGp1c3QgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCEKCkluIHRoZSBkZWFjdGl2YXRpb24gZnVuY3Rpb24sIGl0IG5vdyBza2lwcyBleHBpcmVkIGVsZW1lbnRzIGFzIHdlbGwuIElmIGFuIGV4cGlyZWQgY2F0Y2hhbGwgaXMgZm91bmQgaXQganVzdCBjb250aW51ZXMgdG8gdGhlIG5leHQgZWxlbWVudC4gSXQgZXZlbnR1YWxseSByZXR1cm5zIGAtRU5PRU5UYCBpZiBubyBhY3RpdmUvbm9uLWV4cGlyZWQgZWxlbWVudHMgYXJlIGZvdW5kLgoKVGhpcyBhbGwgcG9pbnRzIHRvIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IGNhdGNoYWxsIGVsZW1lbnRzIGFyZSBtYW5hZ2VkLiBXZSYjMzk7cmUgZGVmZXJyaW5nIHRoZSBjbGVhbnVwIG9mIGV4cGlyZWQgZWxlbWVudHMgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLCB0cmFuc2FjdGlvbiBjb21taXQvYWJvcnQsIG9yIHBvdGVudGlhbGx5IGR1cmluZyBsb29rdXBzLiBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb3BlcmF0ZXMsIGFsb25nIHdpdGggYW55IHRyYW5zYWN0aW9uLXJlbGF0ZWQgaW1wbGljYXRpb25zLiBBbHNvLCB3aGF0IGhhcHBlbnMgaW4gYG5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0IGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGhvdyBpdCBtaWdodCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhpcyBpcyBsaWtlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGJ1dCB0aGUgaW1wbGljYXRpb25zIG9uIGxpc3QgbWFuYWdlbWVudCBuZWVkIGEgY2xvc2VyIGxvb2suIEkgcmVhbGx5IGhvcGUgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGtub3dzIGhvdyB0byBoYW5kbGUgbGlzdHMgb2YgZXhwaXJlZCBlbGVtZW50cyBpbiB0aGlzIG1hbm5lci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Njk2MDpcdFx0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG42OTYxOlx0XHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuNjk2MjpcdFxuNjk2MzpcdFx0XHRleHByX2FycmF5W2ldID0gTlVMTDtcbjY5NjQ6XHRcdH1cbjY5NjU6XHRcbjY5NjY6XHRcdHJldHVybiAtRU5PTUVNO1xuNjk2NzpcdH1cbjY5Njg6XHRcbjY5Njk6XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjY5NzA6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG42OTcxOlx0e1xuNjk3MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTczOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XG42OTc0Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5NzU6XHRcbjY5NzY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xuNjk3NzpcdFx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG42OTc4Olx0XHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG42OTc5Olx0XHRcdCAgICAhbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0KSBcdTAwMjZcdTAwMjZcbjY5ODA6XHRcdFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxuNjk4MTpcdFx0XHRcdHJldHVybiBleHQ7XG42OTgyOlx0XHR9XG42OTgzOlx0XG42OTg0Olx0XHRyZXR1cm4gTlVMTDtcbjY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipFeGFtaW5pbmcgQ2F0Y2hhbGwgRWxlbWVudCBHYXJiYWdlIENvbGxlY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzIGZvciAmIzM0O2NhdGNoYWxsJiMzNDsgZWxlbWVudHMgaW4gdGhpcyBgbmZ0YWJsZXNgIGNvbnRleHQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBhbmQgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHRoZXNlIGVsZW1lbnRzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG91dCBgbmZ0X3NldF9jYXRjaGFsbF9nY2AgYW5kIGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luY2AuIEkmIzM5O20gZ3Vlc3NpbmcgdGhlc2UgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgaGFuZGxpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIHJlbGF0ZWQgdG8gdGhlc2Ugc3BlY2lhbCAmIzM0O2NhdGNoYWxsJiMzNDsgZWxlbWVudHMuIE15IGdvYWwgaXMgdG8gbWFwIG91dCB3aGVyZSB0aGVzZSBjYXRjaGFsbCBlbGVtZW50cyBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSBzeXN0ZW0gYW5kLCBjcnVjaWFsbHksIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGlzIHRyaWdnZXJlZCBhbmQgd2hhdCBjcml0ZXJpYSBkZXRlcm1pbmUgd2hlbiB0aG9zZSBlbGVtZW50cyBhcmUgY29uc2lkZXJlZCBlbGlnaWJsZSBmb3IgY29sbGVjdGlvbi4gSG9wZWZ1bGx5LCBieSB0cmFja2luZyB0aGUgY29udHJvbCBmbG93IG9mIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucywgSSBjYW4gZ2FpbiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBjYXRjaGFsbCBlbGVtZW50cyBhbmQgaG93IHRoZWlyIG1lbW9yeSBpcyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjYXRjaGFsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTgzNz1zdGF0aWMgaW50IG5mdF9tYXBlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NTItXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NTM6c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NTQtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg1OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg1OTpzdGF0aWMgdm9pZCBuZnRfbWFwX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg2MC1cdFx0XHRcdFx0c3RydWN0IG5mdF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjItXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg2MzpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODY0LVx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NjY6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODY3Olx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjgtXHRcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg3MS1cdFx0bmZ0X3NldF9lbGVtX2NoYW5nZV9hY3RpdmUoY3R4LVx1MDAzZW5ldCwgc2V0LCBleHQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODcyOlx0XHRuZnRfc2V0ZWxlbV9kYXRhX2RlYWN0aXZhdGUoY3R4LVx1MDAzZW5ldCwgc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg3My1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz04ODE9c3RhdGljIHZvaWQgbmZ0X21hcF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODkxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODkyOlx0bmZ0X21hcF9jYXRjaGFsbF9kZWFjdGl2YXRlKGN0eCwgc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5My19XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDI1Mj1pbnQgbmZ0X3NldGVsZW1fdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00Mjg0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDI4NTppbnQgbmZ0X3NldF9jYXRjaGFsbF92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI4Ni17XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI4OS1cdH07XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MjkwOlx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MjkxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQyOTQtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0Mjk1Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI5Ni1cdFx0XHRcdGxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChjdHgtXHUwMDNlbmV0KSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDI5NzpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI5OC1cdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZHVtbXlfaXRlci5nZW5tYXNrKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzAwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDMwMTpcdFx0cmV0ID0gbmZ0X3NldGVsZW1fdmFsaWRhdGUoY3R4LCBzZXQsIFx1MDAyNmR1bW15X2l0ZXIsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDMwMi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01NDM2PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU2ODMtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzZXQtXHUwMDNlYmluZGluZ3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTY4NDpcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU2ODUtXHRyZWZjb3VudF9zZXQoXHUwMDI2c2V0LVx1MDAzZXJlZnMsIDEpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDAtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQxOnN0YXRpYyB2b2lkIG5mdF9zZXRfY2F0Y2hhbGxfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc0Mi1cdFx0XHRcdCAgICAgc3RydWN0IG5mdF9zZXQgKnNldClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDMte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0NDpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKm5leHQsICpjYXRjaGFsbDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQ2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhdGNoYWxsLCBuZXh0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0NzpcdFx0bGlzdF9kZWxfcmN1KFx1MDAyNmNhdGNoYWxsLVx1MDAzZWxpc3QpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0ODpcdFx0bmZfdGFibGVzX3NldF9lbGVtX2Rlc3Ryb3koY3R4LCBzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0OTpcdFx0a2ZyZWVfcmN1KGNhdGNoYWxsLCByY3UpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc1MC1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01NzYxPXN0YXRpYyB2b2lkIG5mdF9zZXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NzEtXHRzZXQtXHUwMDNlb3BzLVx1MDAzZWRlc3Ryb3koY3R4LCBzZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc3MjpcdG5mdF9zZXRfY2F0Y2hhbGxfZGVzdHJveShjdHgsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NzczLVx0bmZ0X3NldF9wdXQoc2V0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01ODQ2PXN0YXRpYyBpbnQgbmZfdGFibGVzX2JpbmRfY2hlY2tfc2V0ZWxlbShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NTgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1ODU5OnN0YXRpYyBpbnQgbmZ0X3NldF9jYXRjaGFsbF9iaW5kX2NoZWNrKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01ODYwLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg2Mi1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KGN0eC1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTg2MzpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg2NC1cdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NjYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1ODY3Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg2OC1cdFx0XHRcdGxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChjdHgtXHUwMDNlbmV0KSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTg2OTpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg3MC1cdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU4NzM6XHRcdHJldCA9IG5mdF9zZXRlbGVtX2RhdGFfdmFsaWRhdGUoY3R4LCBzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg3NC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01ODgxPWludCBuZl90YWJsZXNfYmluZF9zZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTA1LVx0XHRpZiAoIWl0ZXIuZXJyKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTkwNjpcdFx0XHRpdGVyLmVyciA9IG5mdF9zZXRfY2F0Y2hhbGxfYmluZF9jaGVjayhjdHgsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTA3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU5NDA9c3RhdGljIGludCBuZnRfbWFwZWxlbV9hY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTU3OnN0YXRpYyB2b2lkIG5mdF9tYXBfY2F0Y2hhbGxfYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NTgtXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjAtXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjE6XHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjItXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTY0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjU6XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjYtXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTk2OS1cdFx0bmZ0X2NsZWFyKGN0eC1cdTAwM2VuZXQsIGV4dCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTcwOlx0XHRuZnRfc2V0ZWxlbV9kYXRhX2FjdGl2YXRlKGN0eC1cdTAwM2VuZXQsIHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTcxLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU5NzQ9c3RhdGljIHZvaWQgbmZ0X21hcF9hY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5ODQtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTg1Olx0bmZ0X21hcF9jYXRjaGFsbF9hY3RpdmF0ZShjdHgsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTg2LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02MjY2PXN0cnVjdCBuZnRfc2V0X2R1bXBfY3R4IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MjcxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjI3MjpzdGF0aWMgaW50IG5mdF9zZXRfY2F0Y2hhbGxfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MjczLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsIGJvb2wgcmVzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI3NS17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2Mjc2Olx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Mjc3LVx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX2N1cihuZXQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYyODAtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2MjgxOlx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2MjgyOlx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MjgzLVx0XHRpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSB8fFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYyODYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2Mjg3Olx0XHRyZXQgPSBuZl90YWJsZXNfZmlsbF9zZXRlbGVtKHNrYiwgc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtLCByZXNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Mjg4LVx0XHRpZiAocmVzZXQgXHUwMDI2XHUwMDI2ICFyZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjI5Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19kdW1wX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjM2Ni1cdGlmICghYXJncy5pdGVyLmVyciBcdTAwMjZcdTAwMjYgYXJncy5pdGVyLmNvdW50ID09IGNiLVx1MDAzZWFyZ3NbMF0pXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2MzY3Olx0XHRhcmdzLml0ZXIuZXJyID0gbmZ0X3NldF9jYXRjaGFsbF9kdW1wKG5ldCwgc2tiLCBzZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MzY4LVx0XHRcdFx0XHRcdCAgICAgIGR1bXBfY3R4LVx1MDAzZXJlc2V0LCBjYi1cdTAwM2VzZXEpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY0Nzc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9wYXJzZV9kYXRhKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjQ5Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY0OTc6c3RhdGljIHZvaWQgKm5mdF9zZXRlbGVtX2NhdGNoYWxsX2dldChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NDk4LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY0OTkte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjUwMDpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUwMS1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTA0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjUwNTpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjUwNjpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUwNy1cdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgfHxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTEwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjUxMTpcdFx0cHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTEyLVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02NTE4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fZ2V0KHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUyNy1cdH0gZWxzZSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NTI4Olx0XHRwcml2ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZ2V0KGN0eC1cdTAwM2VuZXQsIHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTI5LVx0XHRpZiAoIXByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjkyND1zdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk2OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5Njk6c3RydWN0IG5mdF9zZXRfZXh0ICpuZnRfc2V0X2NhdGNoYWxsX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTcwLVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5NzEte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3MjpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk3My1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTc1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3NjpcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3NzpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk3OC1cdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTg2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk4NzpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTg4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5MS17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTkyOlx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTkzLVx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTk2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk5NzpcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTk4Olx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTk5LVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwMC1cdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwMTpcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDAyLVx0XHRcdHJldHVybiAtRUVYSVNUO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDA2Olx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDA3Olx0aWYgKCFjYXRjaGFsbClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDgtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwOS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMTA6XHRjYXRjaGFsbC1cdTAwM2VlbGVtID0gZWxlbS1cdTAwM2Vwcml2O1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAxMTpcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmNhdGNoYWxsLVx1MDAzZWxpc3QsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTItXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzAxNj1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNC1cdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAyNTpcdFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNi1cdGVsc2Vcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDMxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAzMjpzdGF0aWMgYm9vbCBuZnRfc2V0ZWxlbV9pc19jYXRjaGFsbChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAzMy1cdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNDQ9c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fYWN0aXZhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwNDgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDQ5Olx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA1MC1cdFx0bmZ0X2NsZWFyKG5ldCwgZXh0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDY5PXN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19hZGQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg3LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA4ODpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4OS1cdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDkxLXtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwOTI6XHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwOTMtXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDk1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5NjpcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk3Olx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDk4LVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTAyLVx0XHRrZnJlZShlbGVtLVx1MDAzZXByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEwMzpcdFx0ZWxlbS1cdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMDQtXHRcdG5mdF9zZXRfZWxlbV9jaGFuZ2VfYWN0aXZlKG5ldCwgc2V0LCBleHQpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcxMjg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM0LVx0aWYgKGZsYWdzIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM1Olx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXHRlbHNlXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE0MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDI6c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVzdHJveShzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDMte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE0NDpcdGxpc3RfZGVsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDU6XHRrZnJlZV9yY3UoY2F0Y2hhbGwsIHJjdSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQ2LX1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDctXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTQ4OnN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2NhdGNoYWxsX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQ5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTEte1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1MjpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsLCAqbmV4dDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTU0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhdGNoYWxsLCBuZXh0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1NTpcdFx0aWYgKGNhdGNoYWxsLVx1MDAzZWVsZW0gPT0gZWxlbV9wcml2KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTU2Olx0XHRcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX2Rlc3Ryb3koY2F0Y2hhbGwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE1Ny1cdFx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MTYyPXN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE2NS17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTY2Olx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNjc6XHRcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX3JlbW92ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNjgtXHRlbHNlXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzE3Mj1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfcmVtb3ZlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE4Ny1cdFx0bmZ0X3NldGVsZW1fcmVtb3ZlKGN0eC1cdTAwM2VuZXQsIHRlLVx1MDAzZXNldCwgdGUtXHUwMDNlZWxlbXNbaV0ucHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTg4Olx0XHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRlLVx1MDAzZXNldCwgdGUtXHUwMDNlZWxlbXNbaV0ucHJpdikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxODktXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlbmVsZW1zKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03Nzg0PXN0YXRpYyBib29sIG5mdF90cmFuc19lbGVtc19uZXdfYWJvcnQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03Nzk5LVx0XHRpZiAoIXRlLVx1MDAzZXNldC1cdTAwM2VvcHMtXHUwMDNlYWJvcnRfc2tpcF9yZW1vdmFsIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3ODAwOlx0XHQgICAgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwodGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4MDEtXHRcdFx0bmZ0X3NldGVsZW1fcmVtb3ZlKGN0eC1cdTAwM2VuZXQsIHRlLVx1MDAzZXNldCwgdGUtXHUwMDNlZWxlbXNbaV0ucHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODAyLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzgwMzpcdFx0aWYgKCFuZnRfc2V0ZWxlbV9pc19jYXRjaGFsbCh0ZS1cdTAwM2VzZXQsIHRlLVx1MDAzZWVsZW1zW2ldLnByaXYpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzgwNC1cdFx0XHRhdG9taWNfZGVjKFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VuZWxlbXMpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4MTM9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2Rlc3Ryb3lfYWJvcnQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODIzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzgyNDpcdFx0aWYgKCFuZnRfc2V0ZWxlbV9pc19jYXRjaGFsbCh0ZS1cdTAwM2VzZXQsIHRlLVx1MDAzZWVsZW1zW2ldLnByaXYpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzgyNS1cdFx0XHR0ZS1cdTAwM2VzZXQtXHUwMDNlbmRlYWN0LS07XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzkyMz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk1MC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5NTE6c3RhdGljIGludCBfX25mdF9zZXRfY2F0Y2hhbGxfZmx1c2goY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NTItXHRcdFx0XHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTY3LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Nzk2ODpzdGF0aWMgaW50IG5mdF9zZXRfY2F0Y2hhbGxfZmx1c2goY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NjktXHRcdFx0XHQgIHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3MS1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KGN0eC1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Nzk3MjpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3My1cdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NzUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTc2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3Ny1cdFx0XHRcdGxvY2tkZXBfY29tbWl0X2xvY2tfaXNfaGVsZChjdHgtXHUwMDNlbmV0KSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Nzk3ODpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3OS1cdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk4MS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5ODI6XHRcdHJldCA9IF9fbmZ0X3NldF9jYXRjaGFsbF9mbHVzaChjdHgsIHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTgzLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc5OTE9c3RhdGljIGludCBuZnRfc2V0X2ZsdXNoKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsIHU4IGdlbm1hc2spXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwMy1cdGlmICghaXRlci5lcnIpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4MDA0Olx0XHRpdGVyLmVyciA9IG5mdF9zZXRfY2F0Y2hhbGxfZmx1c2goY3R4LCBzZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwNS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDQ5NT1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZ2NfdHJhbnNfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDUwNi1cdFx0ZWxlbV9wcml2ID0gdHJhbnMtXHUwMDNlcHJpdltpXTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNTA3Olx0XHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRyYW5zLVx1MDAzZXNldCwgZWxlbV9wcml2KSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNTA4LVx0XHRcdGF0b21pY19kZWMoXHUwMDI2dHJhbnMtXHUwMDNlc2V0LVx1MDAzZW5lbGVtcyk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2NDA9dm9pZCBuZnRfdHJhbnNfZ2NfcXVldWVfc3luY19kb25lKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKnRyYW5zKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjUxLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2NTI6c3RydWN0IG5mdF90cmFuc19nYyAqbmZ0X3RyYW5zX2djX2NhdGNoYWxsX2FzeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NTMtXHRcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBnY19zZXEpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY1NC17XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY1NTpcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NTYtXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0ID0gZ2MtXHUwMDNlc2V0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjU4LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2NTk6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjYwOlx0XHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXHUwMDNlZWxlbSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY2MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY3Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjczOlx0XHRuZnRfdHJhbnNfZ2NfZWxlbV9hZGQoZ2MsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NzQtXHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NzgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY3OTpzdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjgwLXtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjgxOlx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2ODItXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAoZ2MtXHUwMDNlbmV0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjg5Olx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhdGNoYWxsLCBuZXh0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2OTA6XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkxLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjk4LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2OTk6XHRcdGVsZW1fcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMC1cdFx0bmZ0X3NldGVsZW1fZGF0YV9kZWFjdGl2YXRlKGdjLVx1MDAzZW5ldCwgZ2MtXHUwMDNlc2V0LCBlbGVtX3ByaXYpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3MDE6XHRcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX2Rlc3Ryb3koY2F0Y2hhbGwpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3MDItXHRcdG5mdF90cmFuc19nY19lbGVtX2FkZChnYywgZWxlbV9wcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNTkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IG5mX3RhYmxlcyBDYXRjaGFsbCBFbGVtZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBkZWFsaW5nIHdpdGggY2F0Y2hhbGwgZWxlbWVudHMgaW4gYG5mX3RhYmxlc2Agc2V0cy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBiZWNhdXNlIGluc2VydGluZyBhIGNhdGNoYWxsIGVsZW1lbnQgd2hlbiB0aGVyZSB3YXMgYW4gZXhwaXJlZCBvbmUgcHJlc2VudCB1c2VkIHRvIGNhdXNlIGlzc3VlcyAocmV0dXJuaW5nIGAtRUVYSVNUYCBpbmNvcnJlY3RseSwgb3IgZGVhY3RpdmF0aW5nIHRoZSBleHBpcmVkIGVsZW1lbnQgaW5zdGVhZCBvZiB0aGUgYWN0aXZlIG9uZSkuIFRoaXMgaGFzIHRvdWNoZWQgZXhlY3V0YWJsZSBsb2dpYyB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4KCkZpcnN0IHRoaW5ncyBmaXJzdDogaXMgdGhpcyBldmVuIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBgbmZfdGFibGVzYCBpcyBjb3JlLCByZWFjaGFibGUgYnkgdW5wcml2aWxlZ2VkIHVzZXJzIGluIHVzZXIgbmFtZXNwYWNlcyAodGhyb3VnaCBgQ0xPTkVfTkVXVVNFUiB8IENMT05FX05FV05FVGApIG9yLCBtb3JlIGNvbW1vbmx5LCBieSByb290IGFuZCB0aG9zZSB3aXRoIGBDQVBfTkVUX0FETUlOYC4gVGhpcyBtYWtlcyBpdCBwcmltZSBzeXprYWxsZXIgdGVycml0b3J5IOKAkyBhIHdlbGwta25vd24gYnVnLXByb25lIHN1YnN5c3RlbS4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRlZmluaW5nIG15IGBGb2N1c1N5bWJvbHNgLiBMZXQmIzM5O3Mgc2VlLCB0aGUgZnVuY3Rpb25zIHRvdWNoZWQgYXJlIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRob3NlIHRoZSByaWdodCBsZXZlbCBvZiBncmFudWxhcml0eSBmb3IgdGhlIGZ1enplcj8gTGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyEgVGhleSBzdGF0ZSB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFsdGVyZWQsIG9yIHRoZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBBbHNvLCBsZXQmIzM5O3MgYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgZnV6emVyIGZyb20gYmVpbmcgZGlsdXRlZC4gU28sIGFyZSB0aGVzZSBpdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgbWlnaHQgYmUgaW5saW5lZC4KCkhhbmcgb24uIEkgc2VlIHRoZXkmIzM5O3JlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGZ1bmN0aW9uczogYHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KC4uLilgIGFuZCBgc3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKC4uLilgLiBDb3VsZCB0aGUgY29tcGlsZXIgaGF2ZSBpbmxpbmVkIHRoZW0/IEdpdmVuIHRoZXkmIzM5O3JlIG9ubHkgY2FsbGVkICpvbmNlKiBlYWNoLCBmcm9tIGBuZnRfc2V0ZWxlbV9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAgcmVzcGVjdGl2ZWx5LCBpdCYjMzk7cyB2ZXJ5IHBvc3NpYmxlLgoKT2theSwgc28gd2hhdCAqYXJlKiB0aGUgYWN0dWFsIGVudHJ5cG9pbnRzPyBJIGhhdmUgdG8gY29uc2lkZXI6CiogICBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YAoqICAgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgCiogICBgbmZ0X3NldGVsZW1faW5zZXJ0YAoqICAgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgCiogICBgbmZfdGFibGVzX25ld3NldGVsZW1gCiogICBgbmZfdGFibGVzX2RlbHNldGVsZW1gCgpTbywgbGV0JiMzOTtzIGluY2x1ZGUgYm90aCB0aGUgY29yZSBjYXRjaGFsbCBmdW5jdGlvbnMgYW5kIHRoZWlyIGltbWVkaWF0ZSBjYWxsZXJzLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHNjb3BlLCBhbmQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGNoZWNrIHdoYXQgb3RoZXIgc3ltYm9scyBleGlzdCBpbiBgbmZfdGFibGVzX2FwaS5jYCBhcm91bmQgYG5ld3NldGVsZW1gIGFuZCBgZGVsc2V0ZWxlbWAuIFRoaXMgd2lsbCBnaXZlIHRoZSBmdXp6ZXIgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfKG5ld3xkZWwpc2V0ZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2Njg6c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2OS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Nzk5MT1zdGF0aWMgaW50IG5mdF9zZXRfZmx1c2goc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwgdTggZ2VubWFzaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDA4LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODAwOTpzdGF0aWMgaW50IG5mX3RhYmxlc19kZWxzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDEwLVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTM5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDQyLVx0W05GVF9NU0dfTkVXU0VURUxFTV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA0MzpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfbmV3c2V0ZWxlbSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDQ0LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjAtXHRbTkZUX01TR19ERUxTRVRFTEVNXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDYxOlx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjItXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2Ni1cdFtORlRfTVNHX0RFU1RST1lTRVRFTEVNXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDY3Olx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjgtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc1MDUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoJiMzOTtzIFNjb3BlKioKCk9rYXksIHNvIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgZGVmaW5pdGVseSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGZvY3VzIGlzIHByZWNpc2UuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgd291bGQgYmUgYG5mdF9zZXRlbGVtX2luc2VydGAsIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCwgYG5mX3RhYmxlc19uZXdzZXRlbGVtYCwgYW5kIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIAoKTm93LCBob3cgZ3JhbnVsYXIgZG8gSSBuZWVkIHRvIGJlIHdpdGggdGhlIGtleSBmdW5jdGlvbnMgdG8gaW5jbHVkZT8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBGb2N1c2luZyBvbiB0aGUgc3BlY2lmaWMgZmVhdHVyZSBsb2dpYyBhbmQgZW50cnkgcG9pbnRzLCBJIGhhdmU6IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgLCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAsIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAsIGFuZCBgbmZfdGFibGVzX2RlbHNldGVsZW1gLgoKSG9sZCBvbi4uLiB3aGF0IGFib3V0IHRoZSB1c2VyLWZhY2luZyBlbnRyeXBvaW50czogYG5mdF9hZGRfc2V0X2VsZW1gIGFuZCBgbmZ0X2RlbF9zZXRlbGVtYD8gVGhvc2UgYXJlIGNydWNpYWwsIHRvby4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBgY2F0Y2hhbGxgIGZ1bmN0aW9ucyBtaWdodCBiZSBpbmxpbmVkLiBJZiB0aGV5IGFyZSBpbmxpbmVkLCB0aGVuIGluY2x1ZGluZyBgbmZ0X3NldGVsZW1faW5zZXJ0YCwgYG5mdF9hZGRfc2V0X2VsZW1gLCBvciBgbmZfdGFibGVzX25ld3NldGVsZW1gIHdvdWxkIGNhcHR1cmUgdGhlbS4gCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJvYWRlbiB0aGUgbmV0IGEgYml0LCBqdXN0IHRvIGJlIHN1cmU6CgoqICAgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAKKiAgIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYAoqICAgYG5mdF9zZXRlbGVtX2luc2VydGAKKiAgIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYAoqICAgYG5mdF9hZGRfc2V0X2VsZW1gCiogICBgbmZ0X2RlbF9zZXRlbGVtYAoKQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaXMgc2V0LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGlzIGVuYWJsZWQuIFdhaXQsIGRvZXMgdGhhdCBvcHRpb24gZGVwZW5kIG9uIGFueXRoaW5nIGVsc2U/IEkgc2hvdWxkIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFyb3VuZCBgY29uZmlnIE5GX1RBQkxFU2AgKGFyb3VuZCBsaW5lIDQ1NSkuIEkmIzM5O2xsIHNjYW4gYSB3aWRlciByYW5nZSwgc2F5IGxpbmVzIDQ0MCB0byA0NzAsIGp1c3QgdG8gYmUgc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlbGV2YW50IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDA6XHRcbiA0NDE6XHRjb25maWcgTkZfTkFUX1JFRElSRUNUXG4gNDQyOlx0XHRib29sXG4gNDQzOlx0XG4gNDQ0Olx0Y29uZmlnIE5GX05BVF9NQVNRVUVSQURFXG4gNDQ1Olx0XHRib29sXG4gNDQ2Olx0XG4gNDQ3Olx0Y29uZmlnIE5GX05BVF9PVlNcbiA0NDg6XHRcdGJvb2xcbiA0NDk6XHRcbiA0NTA6XHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXG4gNDUxOlx0XHR0cmlzdGF0ZVxuIDQ1MjpcdFxuIDQ1MzpcdGVuZGlmICMgTkZfQ09OTlRSQUNLXG4gNDU0Olx0XG4gNDU1Olx0Y29uZmlnIE5GX1RBQkxFU1xuIDQ1NjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4gNDU3Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuIDQ1ODpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XCYjMzQ7XG4gNDU5Olx0XHRoZWxwXG4gNDYwOlx0XHQgIG5mdGFibGVzIGlzIHRoZSBuZXcgcGFja2V0IGNsYXNzaWZpY2F0aW9uIGZyYW1ld29yayB0aGF0IGludGVuZHMgdG9cbiA0NjE6XHRcdCAgcmVwbGFjZSB0aGUgZXhpc3Rpbmcge2lwLGlwNixhcnAsZWJ9X3RhYmxlcyBpbmZyYXN0cnVjdHVyZS4gSXRcbiA0NjI6XHRcdCAgcHJvdmlkZXMgYSBwc2V1ZG8tc3RhdGUgbWFjaGluZSB3aXRoIGFuIGV4dGVuc2libGUgaW5zdHJ1Y3Rpb24tc2V0XG4gNDYzOlx0XHQgIChhbHNvIGtub3duIGFzIGV4cHJlc3Npb25zKSB0aGF0IHRoZSB1c2Vyc3BhY2UgJiMzOTtuZnQmIzM5OyB1dGlsaXR5XG4gNDY0Olx0XHQgIChodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL25mdGFibGVzKSB1c2VzIHRvIGJ1aWxkIHRoZVxuIDQ2NTpcdFx0ICBydWxlLXNldC4gSXQgYWxzbyBjb21lcyB3aXRoIHRoZSBnZW5lcmljIHNldCBpbmZyYXN0cnVjdHVyZSB0aGF0XG4gNDY2Olx0XHQgIGFsbG93cyB5b3UgdG8gY29uc3RydWN0IG1hcHBpbmdzIGJldHdlZW4gbWF0Y2hpbmdzIGFuZCBhY3Rpb25zXG4gNDY3Olx0XHQgIGZvciBwZXJmb3JtYW5jZSBsb29rdXBzLlxuIDQ2ODpcdFxuIDQ2OTpcdFx0ICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDQ3MDpcdFxuIDQ3MTpcdGlmIE5GX1RBQkxFU1xuIDQ3MjpcdGNvbmZpZyBORl9UQUJMRVNfSU5FVFxuIDQ3MzpcdFx0ZGVwZW5kcyBvbiBJUFY2XG4gNDc0Olx0XHRzZWxlY3QgTkZfVEFCTEVTX0lQVjRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4ODUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIGBORl9UQUJMRVNgIGl0c2VsZiBkb2VzbiYjMzk7dCBleHBsaWNpdGx5ICpkZXBlbmQgb24qIGFueXRoaW5nIGVsc2UgaW4gdGhlIHN0YW5kYXJkIEtjb25maWcgc2Vuc2UuIEJ1dCwgaXQmIzM5O3MgbmVzdGVkIHdpdGhpbiB0aGUgJiMzNDtDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uJiMzNDsgbWVudS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBwYXJ0IG9mIGEgbGFyZ2VyLCBjb250ZXh0dWFsIGdyb3VwaW5nLiBBbmQgdGhhdCBtZW51IGlzICpndWFyZGVkKiBieSB0aGUgYE5FVEZJTFRFUmAgc3ltYm9sLCB3aGljaCBtZWFucyBlbmFibGluZyBgTkZfVEFCTEVTYCBoaW5nZXMgb24gYE5FVEZJTFRFUmAgYmVpbmcgYWN0aXZlLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCBwcm9iYWJseSBnbGFuY2UgYXQgdGhlIHN0YXJ0IG9mIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSB2YXJpb3VzIGNvbXBvbmVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBBbHdheXMgZ29vZCB0byBoYXZlIHRoZSBmdWxsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0bWVudSBcJiMzNDtDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IE5FVEZJTFRFUlxuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xuICAgNjpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgaW5ncmVzcyBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZWZhdWx0IHlcbiAgIDg6XHRcdHNlbGVjdCBORVRfSU5HUkVTU1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBmcm9tIGluZ3Jlc3MgdXNpbmcgdGhlIE5ldGZpbHRlclxuICAxMTpcdFx0ICBpbmZyYXN0cnVjdHVyZS5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTkVURklMVEVSX0VHUkVTU1xuICAxNDpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgZWdyZXNzIHN1cHBvcnRcJiMzNDtcbiAgMTU6XHRcdGRlZmF1bHQgeVxuICAxNjpcdFx0c2VsZWN0IE5FVF9FR1JFU1NcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmVmb3JlIHRyYW5zbWlzc2lvbiB1c2luZyB0aGVcbiAgMTk6XHRcdCAgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLlxuICAyMDpcdFxuICAyMTpcdGNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcbiAgMjI6XHRcdGRlZl9ib29sIE5FVEZJTFRFUl9FR1JFU1MgXHUwMDI2XHUwMDI2IChORVRfQ0xTX0FDVCB8fCBJRkIpXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXG4gIDI1Olx0XHRib29sXG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXG4gIDI4Olx0XHRib29sXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXG4gIDMxOlx0XHRib29sXG4gIDMyOlx0XG4gIDMzOlx0Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xuICAzNDpcdFx0ZGVmX2Jvb2wgQlBGX1NZU0NBTExcbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xuICAzNzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcJiMzNDtcbiAgMzg6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gIDM5Olx0XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xuICA0MDpcdFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTkzCgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgbmZfdGFibGVzYCBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIGhvdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMuIFRoaXMgYG5mX3RhYmxlc2AgcGF0Y2ggY2xlYXJseSBoaW5nZXMgb24gYElORVRgIGFuZCBgTkVURklMVEVSYCwgYnV0IGBORVRGSUxURVJgIGlzIHByZXR0eSBtdWNoIHN0YW5kYXJkIG5ldHdvcmtpbmcsIHNvIHJlYWxseSwgaXQmIzM5O3MgYWJvdXQgdGhvc2Uga2V5IGBORl9UQUJMRVNgIGNvbmZpZ3VyYXRpb25zLiBGaXJzdCBzdGVwLCBjb25maXJtIHRoYXQgYE5GX1RBQkxFU2AgYnVpbGRzIGBuZl90YWJsZXNfYXBpLm9gIGJ5IGNoZWNraW5nIHRoZSBNYWtlZmlsZS4gWWVwLCBsaW5lIDEwOCBvZiBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWA6IGBvYmotJChDT05GSUdfTkZfVEFCTEVTKSAmIzQzOz0gbmZfdGFibGVzLm9gIGFuZCBgbmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gLi4uYCBjb25maXJtcyBpdC4gQW5kIGBORl9UQUJMRVNgIGlzIGEgY2hpbGQgb2YgYE5FVEZJTFRFUmAuCgpOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gSXMgdGhpcyBwYXRjaCBhY3R1YWxseSBpbiBjb2RlIHRoYXQgZ2V0cyBydW4/IEFic29sdXRlbHkuIEl0IG1vZGlmaWVzIGBuZl90YWJsZXNfYXBpLmNgLCB3aGljaCBoYW5kbGVzIHRob3NlIHVzZXItc3BhY2UgbmV0bGluayBjb21tYW5kcyB0byBjb25maWd1cmUgbmZ0YWJsZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRob3NlIHNwZWNpZmljIHNldCBlbGVtZW50cywgdGhlIGNhdGNoYWxsIG9uZXMsIHdpdGggdGltZW91dHMuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHRvIGhhbmRsZSBlbGVtZW50IGV4cGlyYXRpb24gdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYC4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogY2hhbmdlIGluIGhvdyBjYXRjaGFsbCBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgKGF2b2lkaW5nIC1FRVhJU1QgZm9yIGV4cGlyZWQgZWxlbWVudHMpIGFuZCBkZWFjdGl2YXRlZCAoc2tpcHBpbmcgZXhwaXJlZCBlbGVtZW50cykuCgpHaXZlbiB0aGUgaGlzdG9yeSBvZiBidWdzIGluIG5mX3RhYmxlcyBzZXQgc3RhdGUgaGFuZGxpbmcsIGVzcGVjaWFsbHkgdGhlIGxpZmVjeWNsZSB0cmFuc2l0aW9ucyByZWxhdGVkIHRvIGV4cGlyYXRpb24sIEkmIzM5O20gYWxyZWFkeSBzZWVpbmcgc29tZSBwb3RlbnRpYWwgcmVkIGZsYWdzLiBSYWNlIGNvbmRpdGlvbnMsIHN0YXRlIGluY29uc2lzdGVuY2llcywgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MgYXJlIHBsYXVzaWJsZSB3aXRoIHRoaXMga2luZCBvZiBjaGFuZ2UuCgpTbywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyBwYXJhbWV0ZXJzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGBSZWFzb25pbmdgIHdpbGwgaGlnaGxpZ2h0IHRoZSBuZl90YWJsZXMgc2V0IGVsZW1lbnQgbGlmZWN5Y2xlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBleHBpcmF0aW9uIGhhbmRsaW5nIGluIHJlYWNoYWJsZSBuZXRmaWx0ZXIgbmV0bGluayBjb2RlLCBwb2ludGluZyBvdXQgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zLCBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUvZG91YmxlLWZyZWUgd2l0aCBjYXRjaGFsbCBlbGVtZW50cy4gV2UmIzM5O2xsIGZvY3VzIHRoZSBmdXp6aW5nIG9uIHRoZXNlIGZ1bmN0aW9uczogYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAsIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYCwgYG5mdF9zZXRlbGVtX2luc2VydGAsIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCwgYG5mdF9hZGRfc2V0X2VsZW1gLCBhbmQgYG5mdF9kZWxfc2V0ZWxlbWAuIEFuZCBvZiBjb3Vyc2UsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBORVRGSUxURVJgIGFuZCBgTkZfVEFCTEVTYC4KClRoYXQmIzM5O3MgaXQuIEl0JiMzOTtzIGFsbCBjbGVhci4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1faW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2FkZF9zZXRfZWxlbSYjMzQ7LAogICAgJiMzNDtuZnRfZGVsX3NldGVsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3NldGVsZW1faW5zZXJ0JiMzNDssCiAgICAmIzM0O25mdF9zZXRlbGVtX2RlYWN0aXZhdGUmIzM0OywKICAgICYjMzQ7bmZ0X2FkZF9zZXRfZWxlbSYjMzQ7LAogICAgJiMzNDtuZnRfZGVsX3NldGVsZW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xM208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGV4cGlyYXRpb24gY2hlY2tzIHZpYSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHRvIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AsIG1hdGNoaW5nIHRoZSBleHBpcmF0aW9uIGNoZWNrIHNlbWFudGljcyB1c2VkIGluIG90aGVyIHNldCB0eXBlcyAoc3VjaCBhcyBoYXNoLCByYnRyZWUsIGFuZCBwaXBhcG8pLlxuXG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOiBUaGUgbG9jYWwgdmFyaWFibGUgYHRzdGFtcGAgaXMgYW4gZXhwbGljaXRseSBpbml0aWFsaXplZCA2NC1iaXQgdGltZXN0YW1wIChgdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldClgKS4gVGhlIHNldCBlbGVtZW50IGV4dGVuc2lvbiBpbnNwZWN0ZWQgYnkgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBpbiBgbmZ0X3NldF9lbGVtX2luaXQoKWAsIHdoZXJlIGB0aW1lb3V0YCBhbmQgYGV4cGlyYXRpb25gIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgZmlyc3QgY29uZmlybXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYE5GVF9TRVRfRVhUX1RJTUVPVVRgIGV4dGVuc2lvbiBiZWZvcmUgcmVhZGluZyB0aGVzZSBmaWVsZHMuXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6IEZhaWxpbmcgdG8gY2hlY2sgZXhwaXJhdGlvbiBmb3IgY2F0Y2hhbGwgZWxlbWVudHMgcHJldmlvdXNseSByaXNrZWQgbG9naWNhbCBlcnJvcnMgKC1FRVhJU1Qgb24gaW5zZXJ0KSBhbmQgbGlmZWN5Y2xlIGJ1Z3Mgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSAvIGRvdWJsZS1mcmVlIGlmIGRlYWN0aXZhdGlvbiByYWNlZCB3aXRoIEdDIGVsZW1lbnQgcmVjbGFtYXRpb24gKGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYygpYCkuIE1lbW9yeSBzYWZldHkgaXNzdWVzIG9mIHRoaXMgdHlwZSAoVUFGLCBkb3VibGUtZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIHBhcnRpYWwgc3RydWN0dXJlIGNvcGllcyBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiMGI3YzFlYjQ5MzQyN2U4NDQ3NjY0ZTcxZTk1Y2EzMjFjOTQwZmYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxMzoxMTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggNzY1YTkyZmE5MGQ2Mi4uN2VmMmUxOWU2NjU1YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTY5OTEsMTEgJiM0Mzs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwKIHsKIAlzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDsKIAl1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpOwomIzQzOwl1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTsKIAlzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsICZhbXA7c2V0LSZndDtjYXRjaGFsbF9saXN0LCBsaXN0KSB7CiAJCWV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC0mZ3Q7ZWxlbSk7Ci0JCWlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpIHsKJiM0MzsJCWlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgJmFtcDsmYW1wOwomIzQzOwkJICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkgewogCQkJKnByaXYgPSBjYXRjaGFsbC0mZ3Q7ZWxlbTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9CkBAIC03MDg4LDExICYjNDM7NzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKQogewogCXN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsOwomIzQzOwl1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTsKIAlzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsICZhbXA7c2V0LSZndDtjYXRjaGFsbF9saXN0LCBsaXN0KSB7CiAJCWV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC0mZ3Q7ZWxlbSk7Ci0JCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSkKJiM0MzsJCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fAomIzQzOwkJICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKQogCQkJY29udGludWU7CiAKIAkJa2ZyZWUoZWxlbS0mZ3Q7cHJpdik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZSoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCBjb2RlLiBNeSBpbml0aWFsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGltZSB0byBwdWxsIHVwIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEkgdGhpbmsgSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIGxvb2ssIG9yIHBlcmhhcHMgYGdyZXBwZXJgIGlmIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGtleXdvcmRzIG9yIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gZXN0YWJsaXNoIGEgc29saWQgZm91bmRhdGlvbiBiZWZvcmUgSSBzdGFydCBwb2tpbmcgYXJvdW5kIHdpdGggdGhlIGRldGFpbHMgb2YgdGhlIHBhdGNoIGl0c2VsZi4gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDt3aHkmIzM0OyB3aWxsIGJlIGFzIGNyaXRpY2FsIGFzIHRoZSAmIzM0O3doYXQuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5ODA6XHRcdFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxuNjk4MTpcdFx0XHRcdHJldHVybiBleHQ7XG42OTgyOlx0XHR9XG42OTgzOlx0XG42OTg0Olx0XHRyZXR1cm4gTlVMTDtcbjY5ODU6XHR9XG42OTg2Olx0XG42OTg3Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNjk4ODpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42OTg5Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjY5OTA6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKnByaXYpXG42OTkxOlx0e1xuNjk5MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTkzOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuNjk5NDpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG42OTk1Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjY5OTY6XHRcbjY5OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG42OTk4Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjY5OTk6XHRcdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbjcwMDA6XHRcdFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xuNzAwMTpcdFx0XHRcdCpwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcwMDI6XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbjcwMDM6XHRcdFx0fVxuNzAwNDpcdFx0fVxuNzAwNTpcdFxuNzAwNjpcdFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG43MDA3Olx0XHRpZiAoIWNhdGNoYWxsKVxuNzAwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjcwMDk6XHRcbjcwMTA6XHRcdGNhdGNoYWxsLVx1MDAzZWVsZW0gPSBlbGVtLVx1MDAzZXByaXY7XG43MDExOlx0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZjYXRjaGFsbC1cdTAwM2VsaXN0LCBcdTAwMjZzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XG43MDEyOlx0XG43MDEzOlx0XHRyZXR1cm4gMDtcbjcwMTQ6XHR9XG43MDE1Olx0XG43MDE2Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzAxNzpcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDE4Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcbjcwMTk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcbjcwMjA6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG43MDIxOlx0e1xuNzAyMjpcdFx0aW50IHJldDtcbjcwMjM6XHRcbjcwMjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxuNzAyNTpcdFx0XHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XG43MDI2Olx0XHRlbHNlXG43MDI3Olx0XHRcdHJldCA9IHNldC1cdTAwM2VvcHMtXHUwMDNlaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xuNzAyODpcdFxuNzAyOTpcdFx0cmV0dXJuIHJldDtcbjcwMzA6XHR9XG43MDMxOlx0XG43MDMyOlx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcwMzM6XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxuNzAzNDpcdHtcbjcwMzU6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XG43MDM2Olx0XG43MDM3Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfRkxBR1MpIFx1MDAyNlx1MDAyNlxuNzAzODpcdFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXG43MDM5Olx0XHRcdHJldHVybiB0cnVlO1xuNzA0MDpcdFxuNzA0MTpcdFx0cmV0dXJuIGZhbHNlO1xuNzA0MjpcdH1cbjcwNDM6XHRcbjcwNDQ6XHRzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDQ1Olx0XHRcdFx0XHQgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcbjcwNDY6XHR7XG43MDQ3Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xuNzA0ODpcdFxuNzA0OTpcdFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xuNzA1MDpcdFx0XHRuZnRfY2xlYXIobmV0LCBleHQpO1xuNzA1MTpcdFx0fSBlbHNlIHtcbjcwNTI6XHRcdFx0c2V0LVx1MDAzZW9wcy1cdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcbjcwNTM6XHRcdH1cbjcwNTQ6XHR9XG43MDU1Olx0XG43MDU2Olx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG43MDU3Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXG43MDU4Olx0e1xuNzA1OTpcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cdTAwM2Vwcml2KTtcbjcwNjA6XHRcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXHUwMDNldXBkYXRlO1xuNzA2MTpcdFxuNzA2MjpcdFx0aWYgKHVwZGF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX1RSQU5TX1VQRF9USU1FT1VUKVxuNzA2MzpcdFx0XHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0LCB1cGRhdGUtXHUwMDNldGltZW91dCk7XG43MDY0Olx0XG43MDY1Olx0XHRpZiAodXBkYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXG43MDY2Olx0XHRcdFdSSVRFX09OQ0UobmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24sIGdldF9qaWZmaWVzXzY0KCkgJiM0MzsgdXBkYXRlLVx1MDAzZWV4cGlyYXRpb24pO1xuNzA2NzpcdH1cbjcwNjg6XHRcbjcwNjk6XHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG43MDcwOlx0XHRcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlKVxuNzA3MTpcdHtcbjcwNzI6XHRcdGludCBpO1xuNzA3MzpcdFxuNzA3NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGUtXHUwMDNlbmVsZW1zOyBpJiM0MzsmIzQzOykge1xuNzA3NTpcdFx0XHRzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtID0gXHUwMDI2dGUtXHUwMDNlZWxlbXNbaV07XG43MDc2Olx0XG43MDc3Olx0XHRcdGlmIChlbGVtLVx1MDAzZXVwZGF0ZSlcbjcwNzg6XHRcdFx0XHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXHUwMDNlc2V0LCBlbGVtKTtcbjcwNzk6XHRcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEkmIzM5O20gdGhlIG9uZSBoYXZpbmcgdGhlc2UgdGhvdWdodHMsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIG5mX3RhYmxlc19hcGkuYyBDb2RlKioKClJpZ2h0LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgYW5kIGV4YW1pbmUgbGluZXMgNzA4MCB0aHJvdWdoIDcxNDAgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNlY3Rpb24gaW4gZGV0YWlsLCBwcm9iYWJseSB0byBncmFzcCBhIHBhcnRpY3VsYXIgZGF0YSBzdHJ1Y3R1cmUgb3IgaW50ZXJhY3Rpb24gcmVsYXRlZCB0byB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBBcmUgd2UgZGVhbGluZyB3aXRoIHRhYmxlIGNyZWF0aW9uLCBydWxlIG1hbmlwdWxhdGlvbiwgc2V0IHVwZGF0ZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHdpdGhpbiB0aGUgbmZfdGFibGVzIGZyYW1ld29yaz8gSXMgdGhpcyB3aGVyZSB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXNlci1zcGFjZSBBUEksIG9yIHBlcmhhcHMgYW4gaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9uPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSDigJMgY29tbWVudHMsIHZhcmlhYmxlIG5hbWVzLCBmdW5jdGlvbiBjYWxscyDigJMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGRlc2lnbiBjaG9pY2VzIGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvciBidWcgZml4ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzcwODA6XHRcdFx0XHRuZnRfc2V0ZWxlbV9hY3RpdmF0ZShjdHgtXHUwMDNlbmV0LCB0ZS1cdTAwM2VzZXQsIGVsZW0tXHUwMDNlcHJpdik7XG43MDgxOlx0XG43MDgyOlx0XHRcdG5mX3RhYmxlc19zZXRlbGVtX25vdGlmeShjdHgsIHRlLVx1MDAzZXNldCwgZWxlbS1cdTAwM2Vwcml2LFxuNzA4MzpcdFx0XHRcdFx0XHQgTkZUX01TR19ORVdTRVRFTEVNKTtcbjcwODQ6XHRcdFx0a2ZyZWUoZWxlbS1cdTAwM2V1cGRhdGUpO1xuNzA4NTpcdFx0fVxuNzA4NjpcdH1cbjcwODc6XHRcbjcwODg6XHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuNzA4OTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuNzA5MDpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuNzA5MTpcdHtcbjcwOTI6XHRcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xuNzA5MzpcdFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG43MDk0Olx0XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbjcwOTU6XHRcbjcwOTY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG43MDk3Olx0XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbjcwOTg6XHRcdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XG43MDk5Olx0XHRcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbjcxMDA6XHRcdFx0XHRjb250aW51ZTtcbjcxMDE6XHRcbjcxMDI6XHRcdFx0a2ZyZWUoZWxlbS1cdTAwM2Vwcml2KTtcbjcxMDM6XHRcdFx0ZWxlbS1cdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXHUwMDNlZWxlbTtcbjcxMDQ6XHRcdFx0bmZ0X3NldF9lbGVtX2NoYW5nZV9hY3RpdmUobmV0LCBzZXQsIGV4dCk7XG43MTA1Olx0XHRcdHJldHVybiAwO1xuNzEwNjpcdFx0fVxuNzEwNzpcdFxuNzEwODpcdFx0cmV0dXJuIC1FTk9FTlQ7XG43MTA5Olx0fVxuNzExMDpcdFxuNzExMTpcdHN0YXRpYyBpbnQgX19uZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcxMTI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuNzExMzpcdFx0XHRcdFx0ICAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG43MTE0Olx0e1xuNzExNTpcdFx0dm9pZCAqcHJpdjtcbjcxMTY6XHRcbjcxMTc6XHRcdHByaXYgPSBzZXQtXHUwMDNlb3BzLVx1MDAzZWRlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xuNzExODpcdFx0aWYgKCFwcml2KVxuNzExOTpcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbjcxMjA6XHRcbjcxMjE6XHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG43MTIyOlx0XHRlbGVtLVx1MDAzZXByaXYgPSBwcml2O1xuNzEyMzpcdFx0c2V0LVx1MDAzZW5kZWFjdCYjNDM7JiM0Mzs7XG43MTI0Olx0XG43MTI1Olx0XHRyZXR1cm4gMDtcbjcxMjY6XHR9XG43MTI3Olx0XG43MTI4Olx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjcxMjk6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9zZXQgKnNldCxcbjcxMzA6XHRcdFx0XHRcdCAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSwgdTMyIGZsYWdzKVxuNzEzMTpcdHtcbjcxMzI6XHRcdGludCByZXQ7XG43MTMzOlx0XG43MTM0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcbjcxMzU6XHRcdFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XG43MTM2Olx0XHRlbHNlXG43MTM3Olx0XHRcdHJldCA9IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XG43MTM4Olx0XG43MTM5Olx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFnYWluLiBJIHNlZSBjaGFuZ2VzIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEl0IHNlZW1zIHRvIGJlIG1vZGlmeWluZyBob3cgY2F0Y2hhbGwgZWxlbWVudHMgYXJlIGhhbmRsZWQgd2l0aGluIE5ldGZpbHRlciBzZXRzLiBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGFuIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIG1lY2hhbmlzbSBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIsIHNvIEkmIzM5O2xsIGJyZWFrIGl0IGRvd24uCgpGaXJzdCwgSSBub3RpY2UgdGhlIGFkZGl0aW9uIG9mIGB1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtgIGluIGJvdGggdGhlIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgZnVuY3Rpb25zLiBUaGlzIHRpbWVzdGFtcCB2YXJpYWJsZSBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBlbGVtZW50IGV4cGlyYXRpb24gb3IgdGltZS1iYXNlZCBtYW5hZ2VtZW50LiBUaGUgc3Vic2VxdWVudCBjYWxscyB0byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBjb25maXJtIHRoaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgZXhwaXJ5IGR1cmluZyBib3RoIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIG9mIHRoZSBjYXRjaGFsbCBlbGVtZW50LgoKSW4gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAsIHRoZSBjb2RlIG5vdyBjaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgYWN0aXZlICphbmQqIG5vdCBleHBpcmVkIGJlZm9yZSByZXR1cm5pbmcgLUVFWElTVC4gVGhlIHNhbWUgbG9naWMgaXMgYXBwbGllZCB0byBkZWFjdGl2YXRpb24gbG9naWMuCgpTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgZG9lcy4gQmFzZWQgb24gdGhlIG5hbWluZywgaXQmIzM5O3MgY2xlYXIgaXQmIzM5O3MgdGhlIGNvcmUgZXhwaXJ5IGNoZWNrLiBBbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksIEkgbXVzdCBmaWd1cmUgb3V0IHdoYXQgYG5mdF9uZXRfdHN0YW1wYCBkb2VzOyB0aGF0JiMzOTtzIHRoZSBzb3VyY2UgZm9yIHRoaXMgdGltZXN0YW1wLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRpbWVzdGFtcCBpcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZmluZCBtb3JlIGNvbnRleHQgZm9yIHRoZXNlIGZ1bmN0aW9ucy4gVGltZSBmb3IgYSBncmVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25mdF9zZXRfZWxlbV9leHBpcmVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD04MzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKm5mdF9zZXRfZXh0X2V4cHIoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgzNy1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4Mzg6c3RhdGljIGlubGluZSBib29sIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODM5LVx0XHRcdFx0XHQgIHU2NCB0c3RhbXApXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTg0OD1zdGF0aWMgaW5saW5lIGJvb2wgbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODQ5LXtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4NTA6XHRyZXR1cm4gX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIGdldF9qaWZmaWVzXzY0KCkpO1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg1MS19XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk4Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5OS1cdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMDA6XHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDEtXHRcdFx0KnByaXYgPSBjYXRjaGFsbC1cdTAwM2VlbGVtO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwODg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDk4LVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwOTk6XHRcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMDAtXHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2Nzk9c3RydWN0IG5mdF90cmFuc19nYyAqbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoc3RydWN0IG5mdF90cmFuc19nYyAqZ2MpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTEtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY5MjpcdFx0aWYgKCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkzLVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9NTk9c3RhdGljIGlubGluZSBpbnQgbmZ0X3JoYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNjgtXHRcdHJldHVybiAxO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo2OTpcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNmhlLVx1MDAzZWV4dCwgeC1cdTAwM2V0c3RhbXApKVxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy03MC1cdFx0cmV0dXJuIDE7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTQxOT1zdGF0aWMgc3RydWN0IG5mdF9waXBhcG9fZWxlbSAqcGlwYXBvX2dldF9zbG93KGNvbnN0IHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy00NzgtXHRcdFx0ZSA9IGYtXHUwMDNlbXRbYl0uZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzo0Nzk6XHRcdFx0aWYgKHVubGlrZWx5KF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2ZS1cdTAwM2VleHQsIHRzdGFtcCkgfHxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy00ODAtXHRcdFx0XHQgICAgICFuZnRfc2V0X2VsZW1fYWN0aXZlKFx1MDAyNmUtXHUwMDNlZXh0LCBnZW5tYXNrKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE3MTA9c3RhdGljIHZvaWQgcGlwYXBvX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldCwgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3NTAtXHRcdCAqL1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjE3NTE6XHRcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNmUtXHUwMDNlZXh0LCB0c3RhbXApKSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTc1Mi1cdFx0XHRpZiAoIW5mdF90cmFuc19nY19zcGFjZShnYykpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYz0xMTMwPXN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKnBpcGFwb19nZXRfYXZ4Mihjb25zdCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYy0xMjE2LVx0XHRcdGUgPSBmLVx1MDAzZW10W3JldF0uZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jOjEyMTc6XHRcdFx0aWYgKHVubGlrZWx5KF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXHUwMDI2ZS1cdTAwM2VleHQsIHRzdGFtcCkgfHxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jLTEyMTgtXHRcdFx0XHQgICAgICFuZnRfc2V0X2VsZW1fYWN0aXZlKFx1MDAyNmUtXHUwMDNlZXh0LCBnZW5tYXNrKSkpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MzQyPXN0YXRpYyBpbnQgX19uZnRfcmJ0cmVlX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTM5Ny1cdFx0ICovXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6Mzk4Olx0XHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZyYmUtXHUwMDNlZXh0LCB0c3RhbXApIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTM5OS1cdFx0ICAgIG5mdF9zZXRfZWxlbV9hY3RpdmUoXHUwMDI2cmJlLVx1MDAzZWV4dCwgY3VyX2dlbm1hc2spKSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTc4Mz1uZnRfcmJ0cmVlX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04MTktXHRcdFx0XHRjb250aW51ZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo4MjA6XHRcdFx0fSBlbHNlIGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFx1MDAyNnJiZS1cdTAwM2VleHQsIHRzdGFtcCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04MjEtXHRcdFx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODkxPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy05MTEtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo5MTI6XHRcdGlmICghX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcdTAwMjZyYmUtXHUwMDNlZXh0LCB0c3RhbXApKVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTkxMy1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk3MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBORlRhYmxlcyBFeHBpcmVkIEVsZW1lbnQgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24sIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaGAsIGhhbmRsZXMgdGhlIGV4cGlyYXRpb24gb2YgZWxlbWVudHMgd2l0aGluIE5GVGFibGVzIHNldHMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgdGhlIGxpZmV0aW1lIG9mIGVudHJpZXMgaW4gdGhlc2UgdGFibGVzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIHBvdGVudGlhbGx5IG9wdGltaXppbmcgb3IgdHJvdWJsZXNob290aW5nIHNldCBtYW5hZ2VtZW50LiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIHRoZSBpbmNsdXNpb24gbG9jYXRpb24sIGl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzIHJlbGF0ZWQgdG8gZXhwaXJpbmcgZWxlbWVudHMsIHJhdGhlciB0aGFuIHRoZSBleHRlcm5hbCB0cmlnZ2VyaW5nLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBleHBpcmVkIGVsZW1lbnQgcmVtb3ZhbCBpcyBpbXBsZW1lbnRlZCwgY29uc2lkZXJpbmcgZmFjdG9ycyBsaWtlIHBvdGVudGlhbCBsb2NrcywgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYW55IHNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGZvciBkaWZmZXJlbnQgc2V0IHR5cGVzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHdvcmsgYmFja3dhcmRzIHRvd2FyZHMgaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGFuZCBnZXQgYSBzZW5zZSBmb3IgdGhlIGV4cGlyYXRpb24gYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBwcm9jZXNzIHRoYXQgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzU6XHRcdHJldHVybiBuZnRfc2V0X2V4dChleHQsIE5GVF9TRVRfRVhUX0VYUFJFU1NJT05TKTtcbiA4MzY6XHR9XG4gODM3Olx0XG4gODM4Olx0c3RhdGljIGlubGluZSBib29sIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXG4gODM5Olx0XHRcdFx0XHRcdCAgdTY0IHRzdGFtcClcbiA4NDA6XHR7XG4gODQxOlx0XHRpZiAoIW5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX1RJTUVPVVQpIHx8XG4gODQyOlx0XHQgICAgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0KSA9PSAwKVxuIDg0MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODQ0Olx0XG4gODQ1Olx0XHRyZXR1cm4gdGltZV9hZnRlcl9lcTY0KHRzdGFtcCwgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2VleHBpcmF0aW9uKSk7XG4gODQ2Olx0fVxuIDg0NzpcdFxuIDg0ODpcdHN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcbiA4NDk6XHR7XG4gODUwOlx0XHRyZXR1cm4gX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIGdldF9qaWZmaWVzXzY0KCkpO1xuIDg1MTpcdH1cbiA4NTI6XHRcbiA4NTM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9lbGVtX2V4dChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIDg1NDpcdFx0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZWxlbV9wcml2ICplbGVtX3ByaXYpXG4gODU1Olx0e1xuIDg1NjpcdFx0cmV0dXJuICh2b2lkICopZWxlbV9wcml2ICYjNDM7IHNldC1cdTAwM2VvcHMtXHUwMDNlZWxlbXNpemU7XG4gODU3Olx0fVxuIDg1ODpcdFxuIDg1OTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mdF9vYmplY3QgKipuZnRfc2V0X2V4dF9vYmooY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZDoKCioqQ2hlY2tpbmcgYG5mdF9uZXRfdHN0YW1wYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuZnRfbmV0X3RzdGFtcGAuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGN1cnJlbnQgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBpbXBsZW1lbnRlZCB3aXRoIGl0IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBjb25jZXJucy4gSXMgdGhpcyByZWxhdGVkIHRvIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaz8gSXMgaXQgY29uZmlndXJlZCBvcHRpbWFsbHksIG9yIGFyZSB0aGVyZSBvYnZpb3VzIGdhaW5zIHRvIGJlIG1hZGUgYnkgYWRqdXN0aW5nIHNvbWUgb2YgdGhlIHVuZGVybHlpbmcgc2V0dGluZ3M/IEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgYXQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgaXRzIHVzYWdlIHdpdGhpbiB0aGUgbmV0d29yayBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yay4gV2hhdCBvdGhlciByZWxhdGVkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBpdD8gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGxpa2VseSBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpZiB0aGlzIHRpbWVzdGFtcCBpcyB3b3JraW5nIGFzIGludGVuZGVkIGFuZCBpZiB0aGVyZSBhcmUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIHRpbWVzdGFtcCBwb3RlbnRpYWxseSBpbXBhY3RzIGEgbG90IG9mIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X25ldF90c3RhbXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTE5NjE9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfcGVybmV0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtMTk2NS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDoxOTY2OnN0YXRpYyBpbmxpbmUgdTY0IG5mdF9uZXRfdHN0YW1wKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC0xOTY3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTg3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTkzLVx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5OTQ6XHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTUtXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5Mi1cdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5MzpcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5NC1cdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjc5PXN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjgxLVx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2ODI6XHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAoZ2MtXHUwMDNlbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjgzLVx0Y29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCA9IGdjLVx1MDAzZXNldDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTE3MT1zdGF0aWMgaW50IG5mdF9yaGFzaF9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtMTgwLVx0XHQua2V5XHQgPSBlbGVtLVx1MDAzZWtleS52YWwuZGF0YSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6MTgxOlx0XHQudHN0YW1wXHQgPSBuZnRfbmV0X3RzdGFtcChuZXQpLFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy0xODItXHR9O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9MjE1PW5mdF9yaGFzaF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTIyMy1cdFx0LmtleVx0ID0gZWxlbS1cdTAwM2VrZXkudmFsLmRhdGEsXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jOjIyNDpcdFx0LnRzdGFtcFx0ID0gbmZ0X25ldF90c3RhbXAobmV0KSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtMjI1LVx0fTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTI4Nj1zdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTI5NS1cdHN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKmUsICpkdXA7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTI5NjpcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyOTctXHRzdHJ1Y3QgbmZ0X3BpcGFwb19maWVsZCAqZjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTcxNC1cdHVuc2lnbmVkIGludCBydWxlc19mMCwgZmlyc3RfcnVsZSA9IDA7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTcxNTpcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3MTYtXHRzdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICplO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xOTE0PW5mdF9waXBhcG9fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE5MjYtXHRlID0gcGlwYXBvX2dldChtLCAoY29uc3QgdTggKillbGVtLVx1MDAzZWtleS52YWwuZGF0YSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxOTI3Olx0XHQgICAgICAgbmZ0X2dlbm1hc2tfbmV4dChuZXQpLCBuZnRfbmV0X3RzdGFtcChuZXQpKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xOTI4LVx0aWYgKCFlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz02ODI9c3RhdGljIGludCBuZnRfcmJ0cmVlX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTY4Ny1cdHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6Njg4Olx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtNjg5LVx0aW50IGVycjtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9NzgzPW5mdF9yYnRyZWVfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTc4OS1cdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6NzkwOlx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtNzkxLVx0aW50IGQ7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg5MT1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODk1LVx0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNnNldC1cdTAwM2VuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjg5NjpcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTg5Ny1cdHN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MDcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENhdGNoYWxsIEVsZW1lbnQgRXhwaXJhdGlvbiBpbiBOZXRmaWx0ZXIgU2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUgY29kZSBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGhhZCBhIHN1YnRsZSBmbGF3IHJlZ2FyZGluZyBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnRzLiBFc3NlbnRpYWxseSwgdGhlIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIGxvZ2ljIHdhc24mIzM5O3QgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRpbWVvdXRzLgoKSW4gdGhlIGBpbnNlcnRgIGZ1bmN0aW9uLCBpZiBhbiBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQgd2FzIGFjdGl2ZSwgdGhlIGNvZGUgd2FzIGluY29ycmVjdGx5IHJldHVybmluZyBgLUVFWElTVGAuIFRoaXMgbWVhbnMgYSBzdGFsZSwgZXhwaXJlZCBydWxlIGNvdWxkIGJlIHByZXZlbnRpbmcgYSBmcmVzaCBydWxlIGZyb20gdGFraW5nIGVmZmVjdC4gSSYjMzk7dmUgY29ycmVjdGVkIHRoaXMgbm93IHNvIHRoYXQgZXhwaXJlZCBlbGVtZW50cyBhcmVuJiMzOTt0IHRyZWF0ZWQgYXMgYWN0aXZlbHkgY29uZmxpY3RpbmcuCgpUaGUgYGRlYWN0aXZhdGVgIGZ1bmN0aW9uIGhhZCBhIHNpbWlsYXIgaXNzdWUuIElmIHNvbWVvbmUgdHJpZWQgdG8gZGVhY3RpdmF0ZSBhbiBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQsIGl0IHdvdWxkIGdvIGFoZWFkIGFuZCBkZWFjdGl2YXRlIGl0LiBUaGlzIGlzIGEgcHJvYmxlbSwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoaXMgY291bGQgbGVhZCB0byBhIGRvdWJsZSBkZWFjdGl2YXRpb24gb3IgcmFjZSBjb25kaXRpb25zLiBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBza2lwIHRoZXNlIGVsZW1lbnRzLgoKVGhlIGtleSBoZXJlIGlzIGVuc3VyaW5nIGV4cGlyZWQgZWxlbWVudHMgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5IGFjcm9zcyB0aGUgYm9hcmQsIGxpa2UgaG93IHJidHJlZSwgcmhhc2gsIG9yIHBpcGFwbyBzZXRzIG1hbmFnZSB0aGVtOiBieSBpZ25vcmluZyB0aGVtLCBhcyBpZiB0aGV5IGFyZSBub3QgZm91bmQgb3IgcmVhZHkgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4gVGhpcyBjb3JyZWN0aW9uIGlzIGEgc3RhbmRhcmQgYmVzdCBwcmFjdGljZSB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgYmVoYXZpb3VyLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIGZpeCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFRpbWUgZm9yIGEgS01TQU4gY2hlY2s6IGFtIEkgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmU/IExldCYjMzk7cyBjaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4KCjEuICAqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlKjogRG9lcyB0aGlzIHBhdGNoIHRvdWNoIGFueSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBtZXNzYWdlIGdlbmVyYXRpb24sIHBhZGRpbmc/IE5vLCBzZWVtcyBzYWZlIGhlcmUuCgoyLiAgKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyo6IEkgbmVlZCB0byBjaGVjayBgbmZ0X25ldF90c3RhbXBgIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBub3QgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0JiMzOTtzIHRoZSBrZXkgdGhpbmcgdG8gZG91YmxlIGNoZWNrLgozLiAgKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocyouIE5vdCBzZWVpbmcgYW55IG9mIHRoYXQgaGVyZS4KNC4gICpCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuKiBUaGlzIGlzbiYjMzk7dCB0aGUgY2FzZSBoZXJlLgoKTG9va3MgbGlrZSB0aGUgb25seSByZW1haW5pbmcgcXVlc3Rpb24gaXMgYG5mdF9uZXRfdHN0YW1wYC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gaG93IHRoYXQgZnVuY3Rpb24gYmVoYXZlcyB0byBiZSBjb21wbGV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTYwOlx0XG4xOTYxOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfcGVybmV0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbjE5NjI6XHR7XG4xOTYzOlx0XHRyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCBuZl90YWJsZXNfbmV0X2lkKTtcbjE5NjQ6XHR9XG4xOTY1Olx0XG4xOTY2Olx0c3RhdGljIGlubGluZSB1NjQgbmZ0X25ldF90c3RhbXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuMTk2NzpcdHtcbjE5Njg6XHRcdHJldHVybiBuZnRfcGVybmV0KG5ldCktXHUwMDNldHN0YW1wO1xuMTk2OTpcdH1cbjE5NzA6XHRcbjE5NzE6XHQjZW5kaWYgLyogX05FVF9ORl9UQUJMRVNfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE5GVCBFbGVtZW50IEV4cGlyYXRpb24gaW4gbmZfdGFibGVzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0aW1lc3RhbXAsIGBuZnRfcGVybmV0KG5ldCktJmd0O3RzdGFtcGAsIGlzIHVwZGF0ZWQgaW4gbmZfdGFibGVzIGR1cmluZyB0cmFuc2FjdGlvbi9uZXRsaW5rIGJhdGNoIHByb2Nlc3NpbmcuIEl0JiMzOTtzIHVwZGF0ZWQgcHJldHR5IHJlZ3VsYXJseS4gQnV0LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGUgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCBmdW5jdGlvbiBhbmQgdGhlIG92ZXJhbGwgZXhwaXJhdGlvbiBtZWNoYW5pc20uCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyIGhvdyBlbGVtZW50IHRpbWVvdXRzIGFyZSBtYW5hZ2VkLiBJIGtub3cgYG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX1RJTUVPVVQpYCBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHRpbWVvdXQgZXh0ZW5zaW9uLiBJZiBpdCAqZG9lcyogZXhpc3QsIEkgZ3JhYiB0aGUgdGltZW91dCB2YWx1ZSB1c2luZyBgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS0mZ3Q7dGltZW91dClgIGFuZCB0aGUgZWxlbWVudCYjMzk7cyBleHBpcmF0aW9uIHRpbWUuCgpXaGF0IEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaXM6IHdoZW4gYSB0aW1lb3V0IGV4dGVuc2lvbiAoYE5GVF9TRVRfRVhUX1RJTUVPVVRgKSBpcyBmaXJzdCAqYWxsb2NhdGVkKiB0byBhIHNldCBlbGVtZW50LCBob3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IFdoYXQgdmFsdWVzIGFyZSBhc3NpZ25lZCBpbml0aWFsbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWZhdWx0IHN0YXRlIG9mIHRoZSB0aW1lb3V0IGNvdW50ZXIuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZnRfc2V0X2VsZW1faW5pdGAgZnVuY3Rpb24uIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlcnMgSSYjMzk7bSBsb29raW5nIGZvciBhbmQgcHJvdmlkZSBhIHN0YXJ0aW5nIHBvaW50IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGUgdGltZW91dCBleHRlbnNpb24gaXMgaGFuZGxlZCB3aXRoaW4gdGhhdCBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9lbGVtX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTg2ND1zdHJ1Y3QgbmZ0X2V4cHIgKm5mdF9zZXRfZWxlbV9leHByX2FsbG9jKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2Ny1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4Njg6c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODY5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02Nzc0PXN0YXRpYyBpbnQgbmZ0X3NldF9leHRfbWVtY3B5KGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLCB1OCBpZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Nzg0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njc4NTpzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY3ODYtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyNi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1Mjc6XHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyOC1cdFx0XHRcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgZWxlbS5kYXRhLnZhbC5kYXRhLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4Mjk9c3RhdGljIGludCBuZnRfZGVsX3NldGVsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODg1LVx0ZXJyID0gLUVOT01FTTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc4ODY6XHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzg4Ny1cdFx0XHRcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgTlVMTCwgMCwgMCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYz01Nj1zdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X2R5bnNldF9uZXcoc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy02OC1cdHRpbWVvdXQgPSBwcml2LVx1MDAzZXRpbWVvdXQgPyA6IFJFQURfT05DRShzZXQtXHUwMDNldGltZW91dCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzo2OTpcdGVsZW1fcHJpdiA9IG5mdF9zZXRfZWxlbV9pbml0KHNldCwgXHUwMDI2cHJpdi1cdTAwM2V0bXBsLFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNzAtXHRcdFx0XHQgICAgICBcdTAwMjZyZWdzLVx1MDAzZWRhdGFbcHJpdi1cdTAwM2VzcmVnX2tleV0sIE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzIzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byBuZl90YWJsZXNfYXBpLmM6IG5mdF9zZXRfZWxlbV9pbml0KioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGFyZSBiZWluZyBpbml0aWFsaXplZCB3aXRoaW4gdGhlIHNldHMsIHNvIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBgbmZ0X3NldF9lbGVtX2luaXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uc3RydWN0aW9uIG9mIHNldCBlbGVtZW50cyB3aXRoaW4gdGhlIE5ldGZpbHRlciB0YWJsZSBmcmFtZXdvcmssIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4gSSBleHBlY3QgaXQmIzM5O3MgZ29pbmcgdG8gYmUgZnVuZGFtZW50YWwgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgbGFpZCBvdXQgYW5kIGhvdyB0aGUgbWVtb3J5IGlzIG1hbmFnZWQgZm9yIHRoZXNlIHNldCBlbGVtZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBhcmd1bWVudHMgaXQgdGFrZXMsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIHdoYXQgdGhlIG92ZXJhbGwgZ29hbCBvZiB0aGUgcm91dGluZSBpcy4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2Nzg1Olx0c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG42Nzg2Olx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuNjc4NzpcdFx0XHRcdFx0XHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxuNjc4ODpcdFx0XHRcdFx0XHRjb25zdCB1MzIgKmRhdGEsXG42Nzg5Olx0XHRcdFx0XHRcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKVxuNjc5MDpcdHtcbjY3OTE6XHRcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuNjc5MjpcdFx0dm9pZCAqZWxlbTtcbjY3OTM6XHRcbjY3OTQ6XHRcdGVsZW0gPSBremFsbG9jKHNldC1cdTAwM2VvcHMtXHUwMDNlZWxlbXNpemUgJiM0MzsgdG1wbC1cdTAwM2VsZW4sIGdmcCk7XG42Nzk1Olx0XHRpZiAoZWxlbSA9PSBOVUxMKVxuNjc5NjpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjY3OTc6XHRcbjY3OTg6XHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtKTtcbjY3OTk6XHRcdG5mdF9zZXRfZXh0X2luaXQoZXh0LCB0bXBsKTtcbjY4MDA6XHRcbjY4MDE6XHRcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9LRVkpIFx1MDAyNlx1MDAyNlxuNjgwMjpcdFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9LRVksXG42ODAzOlx0XHRcdFx0ICAgICAgIG5mdF9zZXRfZXh0X2tleShleHQpLCBrZXksIHNldC1cdTAwM2VrbGVuKSBcdTAwM2MgMClcbjY4MDQ6XHRcdFx0Z290byBlcnJfZXh0X2NoZWNrO1xuNjgwNTpcdFxuNjgwNjpcdFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWV9FTkQpIFx1MDAyNlx1MDAyNlxuNjgwNzpcdFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9LRVlfRU5ELFxuNjgwODpcdFx0XHRcdCAgICAgICBuZnRfc2V0X2V4dF9rZXlfZW5kKGV4dCksIGtleV9lbmQsIHNldC1cdTAwM2VrbGVuKSBcdTAwM2MgMClcbjY4MDk6XHRcdFx0Z290byBlcnJfZXh0X2NoZWNrO1xuNjgxMDpcdFxuNjgxMTpcdFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0RBVEEpIFx1MDAyNlx1MDAyNlxuNjgxMjpcdFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9EQVRBLFxuNjgxMzpcdFx0XHRcdCAgICAgICBuZnRfc2V0X2V4dF9kYXRhKGV4dCksIGRhdGEsIHNldC1cdTAwM2VkbGVuKSBcdTAwM2MgMClcbjY4MTQ6XHRcdFx0Z290byBlcnJfZXh0X2NoZWNrO1xuNjgxNTpcdFxuNjgxNjpcdFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX1RJTUVPVVQpKSB7XG42ODE3Olx0XHRcdG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cdTAwM2V0aW1lb3V0ID0gdGltZW91dDtcbjY4MTg6XHRcbjY4MTk6XHRcdFx0aWYgKGV4cGlyYXRpb24gPT0gMClcbjY4MjA6XHRcdFx0XHRleHBpcmF0aW9uID0gdGltZW91dDtcbjY4MjE6XHRcbjY4MjI6XHRcdFx0bmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZWV4cGlyYXRpb24gPSBnZXRfamlmZmllc182NCgpICYjNDM7IGV4cGlyYXRpb247XG42ODIzOlx0XHR9XG42ODI0Olx0XG42ODI1Olx0XHRyZXR1cm4gZWxlbTtcbjY4MjY6XHRcbjY4Mjc6XHRlcnJfZXh0X2NoZWNrOlxuNjgyODpcdFx0a2ZyZWUoZWxlbSk7XG42ODI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzUyCgkJCQkJCQlvdXRwdXQ6IDM1OAoJCQkJCQkJdGhvdWdodHM6IDEyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gTmVlZCBmb3IgRGVkaWNhdGVkIFNlc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmlzayB0aGF0ICpvbmx5KiBLTVNBTiBjb3VsZCBkZXRlY3QuIFRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBhZGRpbmcgZXhwaXJhdGlvbiBjaGVja3MgdG8gdGhlIGBjYXRjaGFsbGAgc2V0IHR5cGUgd2l0aGluIHRoZSBOZXRmaWx0ZXIgdGFibGUgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBQcmV2aW91c2x5LCB0aGVzZSBmdW5jdGlvbnMgZGlkbiYjMzk7dCBjaGVjayBmb3IgZXhwaXJlZCBlbGVtZW50cywgd2hpY2ggaXMgbm93IGJlaW5nIGNvcnJlY3RlZCB0byBhbGlnbiB3aXRoIGhvdyBvdGhlciBzZXQgdHlwZXMgKHJoYXNoLCByYnRyZWUsIHBpcGFwbykgaGFuZGxlIGV4cGlyYXRpb24gdXNpbmcgdGhlIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAgbWFjcm8uCgpUaGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMgb3IgY29udHJvbCBmbG93LgoKKiAgIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhlIGJ1ZyB0aGUgcGF0Y2ggZml4ZXM6IGFuIGV4cGlyZWQgZWxlbWVudCBjb3VsZCBjYXVzZSBgLUVFWElTVGAgb24gaW5zZXJ0IGR1ZSB0byBhbiBpbmNvcnJlY3QgYWN0aXZlIGNoZWNrLiBEZWFjdGl2YXRpbmcgaXQgY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MuCgoqICAgVGhlIHRpbWVyIHZhbHVlIChgdHN0YW1wYCkgdXNlZCBpbiB0aGUgZXhwaXJ5IGNoZWNrIGlzIGluaXRpYWxpemVkIGxvY2FsbHkgd2l0aCB0aGUgcmVzdWx0IG9mIGBuZnRfbmV0X3RzdGFtcChuZXQpYC4KCiogICBga3phbGxvY2AgaXMgdXNlZCB0byBhbGxvY2F0ZSB0aGUgY2F0Y2hhbGwgZWxlbWVudCBleHRlbnNpb25zLCBlbnN1cmluZyBpbml0aWFsaXphdGlvbiBvZiBmaWVsZHMgaW5jbHVkaW5nIGB0aW1lb3V0YCBhbmQgYGV4cGlyYXRpb25gLCBhbmQgdGhlc2UgYXJlIHN1YnNlcXVlbnRseSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBUaGUgcGF0Y2ggaXRzZWxmIGRvZXNuJiMzOTt0IGNoYW5nZSBpbml0aWFsaXphdGlvbiBsb2dpYy4KCiogICBUaGUgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgIG1hY3JvIGNoZWNrcyB0aGF0IGBORlRfU0VUX0VYVF9USU1FT1VUYCBleGlzdHMsIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHRpbWVvdXQgYW5kIGV4cGlyYXRpb24gZmllbGRzLgoKVGhlIGJ1Z3MgdGhpcyBwYXRjaCBhZGRyZXNzZXMgKGRvdWJsZS1mcmVlLCBVQUYsIGFuZCByYWNlcykgYXJlIGNsYXNzaWMgaXNzdWVzIHRoYXQgS0FTQU4gc2hvdWxkIGhhbmRsZS4gVGhlIHBhdGNoIGNvcnJlY3RzIGxvZ2ljIHRvIHByZXZlbnQgdGhlc2UgbWVtb3J5LWxpZmVjeWNsZSBidWdzIGZyb20gYmVpbmcgaGl0LgoKTG9va2luZyBhdCB0aGUgcnVsZXMsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCBLTVNBTiBpcyB1bmlxdWVseSBwb3NpdGlvbmVkIHRvIGNhdGNoOgoKMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGV4cG9zZWQuCjIuICBUaGUgY29kZSBkb2VzbiYjMzk7dCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcyBmb3IgY29udHJvbCBmbG93LgozLiAgTm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCBpbiByZWFjaGFibGUgY29kZS4KNC4gIEJvdW5kcyBjaGVja3MgYW5kIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBhcmUgdW5hZmZlY3RlZCBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKRXNzZW50aWFsbHksIGJ5IGFkZGluZyB0aGlzIGV4cGlyYXRpb24gY2hlY2ssIHdlIGFyZSBlbGltaW5hdGluZyB0aGVzZSBjbGFzc2VzIG9mIGJ1Z3MuIFRoZSBjaGFuZ2VzIGludHJvZHVjZSBzYWZlciBjb2RlLCBidXQgdGhleSBkbyBub3QgaW5jcmVhc2UgdGhlIHJpc2sgb2YgS01TQU4tc3BlY2lmaWMgYnVncy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgdGhlIGFwcHJvcHJpYXRlIGFwcHJvYWNoIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEzOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXhwaXJhdGlvbiBjaGVja3MgdmlhIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAgdG8gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCgpYCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCwgbWF0Y2hpbmcgdGhlIGV4cGlyYXRpb24gY2hlY2sgc2VtYW50aWNzIHVzZWQgaW4gb3RoZXIgc2V0IHR5cGVzIChzdWNoIGFzIGhhc2gsIHJidHJlZSwgYW5kIHBpcGFwbykuXG5cbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6IFRoZSBsb2NhbCB2YXJpYWJsZSBgdHN0YW1wYCBpcyBhbiBleHBsaWNpdGx5IGluaXRpYWxpemVkIDY0LWJpdCB0aW1lc3RhbXAgKGB1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KWApLiBUaGUgc2V0IGVsZW1lbnQgZXh0ZW5zaW9uIGluc3BlY3RlZCBieSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBuZnRfc2V0X2VsZW1faW5pdCgpYCwgd2hlcmUgYHRpbWVvdXRgIGFuZCBgZXhwaXJhdGlvbmAgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBmaXJzdCBjb25maXJtcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgTkZUX1NFVF9FWFRfVElNRU9VVGAgZXh0ZW5zaW9uIGJlZm9yZSByZWFkaW5nIHRoZXNlIGZpZWxkcy5cbi0gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTogRmFpbGluZyB0byBjaGVjayBleHBpcmF0aW9uIGZvciBjYXRjaGFsbCBlbGVtZW50cyBwcmV2aW91c2x5IHJpc2tlZCBsb2dpY2FsIGVycm9ycyAoLUVFWElTVCBvbiBpbnNlcnQpIGFuZCBsaWZlY3ljbGUgYnVncyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIC8gZG91YmxlLWZyZWUgaWYgZGVhY3RpdmF0aW9uIHJhY2VkIHdpdGggR0MgZWxlbWVudCByZWNsYW1hdGlvbiAoYG5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKClgKS4gTWVtb3J5IHNhZmV0eSBpc3N1ZXMgb2YgdGhpcyB0eXBlIChVQUYsIGRvdWJsZS1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgcGFydGlhbCBzdHJ1Y3R1cmUgY29waWVzIGFyZSBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBleHBpcmF0aW9uIGNoZWNrcyB2aWEgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCB0byBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KClgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSgpYCBpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLCBtYXRjaGluZyB0aGUgZXhwaXJhdGlvbiBjaGVjayBzZW1hbnRpY3MgdXNlZCBpbiBvdGhlciBzZXQgdHlwZXMgKHN1Y2ggYXMgaGFzaCwgcmJ0cmVlLCBhbmQgcGlwYXBvKS5cblxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczogVGhlIGxvY2FsIHZhcmlhYmxlIGB0c3RhbXBgIGlzIGFuIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgNjQtYml0IHRpbWVzdGFtcCAoYHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpYCkuIFRoZSBzZXQgZWxlbWVudCBleHRlbnNpb24gaW5zcGVjdGVkIGJ5IGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYG5mdF9zZXRfZWxlbV9pbml0KClgLCB3aGVyZSBgdGltZW91dGAgYW5kIGBleHBpcmF0aW9uYCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGZpcnN0IGNvbmZpcm1zIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGBORlRfU0VUX0VYVF9USU1FT1VUYCBleHRlbnNpb24gYmVmb3JlIHJlYWRpbmcgdGhlc2UgZmllbGRzLlxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OiBGYWlsaW5nIHRvIGNoZWNrIGV4cGlyYXRpb24gZm9yIGNhdGNoYWxsIGVsZW1lbnRzIHByZXZpb3VzbHkgcmlza2VkIGxvZ2ljYWwgZXJyb3JzICgtRUVYSVNUIG9uIGluc2VydCkgYW5kIGxpZmVjeWNsZSBidWdzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgLyBkb3VibGUtZnJlZSBpZiBkZWFjdGl2YXRpb24gcmFjZWQgd2l0aCBHQyBlbGVtZW50IHJlY2xhbWF0aW9uIChgbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoKWApLiBNZW1vcnkgc2FmZXR5IGlzc3VlcyBvZiB0aGlzIHR5cGUgKFVBRiwgZG91YmxlLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBObyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBwYXJ0aWFsIHN0cnVjdHVyZSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjExOjA2LjQ0MDc5NjE0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTYyMDM0NjYyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9zZXRlbGVtX2luc2VydFwiLFxuICAgIFwibmZ0X3NldGVsZW1fZGVhY3RpdmF0ZVwiLFxuICAgIFwibmZ0X2FkZF9zZXRfZWxlbVwiLFxuICAgIFwibmZ0X2RlbF9zZXRlbGVtXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGlyYXRpb24gY2hlY2tzIHZpYSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHRvIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AsIG1hdGNoaW5nIHRoZSBleHBpcmF0aW9uIGNoZWNrIHNlbWFudGljcyB1c2VkIGluIG90aGVyIHNldCB0eXBlcyAoc3VjaCBhcyBoYXNoLCByYnRyZWUsIGFuZCBwaXBhcG8pLlxcblxcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6IFRoZSBsb2NhbCB2YXJpYWJsZSBgdHN0YW1wYCBpcyBhbiBleHBsaWNpdGx5IGluaXRpYWxpemVkIDY0LWJpdCB0aW1lc3RhbXAgKGB1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KWApLiBUaGUgc2V0IGVsZW1lbnQgZXh0ZW5zaW9uIGluc3BlY3RlZCBieSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBuZnRfc2V0X2VsZW1faW5pdCgpYCwgd2hlcmUgYHRpbWVvdXRgIGFuZCBgZXhwaXJhdGlvbmAgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBmaXJzdCBjb25maXJtcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgTkZUX1NFVF9FWFRfVElNRU9VVGAgZXh0ZW5zaW9uIGJlZm9yZSByZWFkaW5nIHRoZXNlIGZpZWxkcy5cXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6IEZhaWxpbmcgdG8gY2hlY2sgZXhwaXJhdGlvbiBmb3IgY2F0Y2hhbGwgZWxlbWVudHMgcHJldmlvdXNseSByaXNrZWQgbG9naWNhbCBlcnJvcnMgKC1FRVhJU1Qgb24gaW5zZXJ0KSBhbmQgbGlmZWN5Y2xlIGJ1Z3Mgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSAvIGRvdWJsZS1mcmVlIGlmIGRlYWN0aXZhdGlvbiByYWNlZCB3aXRoIEdDIGVsZW1lbnQgcmVjbGFtYXRpb24gKGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYygpYCkuIE1lbW9yeSBzYWZldHkgaXNzdWVzIG9mIHRoaXMgdHlwZSAoVUFGLCBkb3VibGUtZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIHBhcnRpYWwgc3RydWN0dXJlIGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIGxvZ2ljIGluIG5mX3RhYmxlcyAobmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMpIHRvIHRha2UgZWxlbWVudCBleHBpcmF0aW9uIGludG8gYWNjb3VudCB2aWEgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpLiBuZl90YWJsZXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBhbmQgc2V0IGVsZW1lbnQgbGlmZWN5Y2xlL2V4cGlyYXRpb24gaGFuZGxpbmcgaXMgcHJvbmUgdG8gc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCByZWZlcmVuY2UgY291bnRpbmcvdXNlLWFmdGVyLWZyZWUgYnVncy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGlzIGFsdGVyZWQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTE6MDYuNDQwODk3OTE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUzMjEwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYjBiN2MxZWI0OTM0MjdlODQ0NzY2NGU3MWU5NWNhMzIxYzk0MGZmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDEzOjExOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5pbmRleCA3NjVhOTJmYTkwZDYyLi43ZWYyZTE5ZTY2NTVhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5AQCAtNjk5MSwxMSArNjk5MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuIFxcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XFxuK1xcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbiBcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG4gXFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG4tXFx0XFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSkge1xcbitcXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcXG4gXFx0XFx0XFx0KnByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcdFxcdH1cXG5AQCAtNzA4OCwxMSArNzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbiB7XFxuIFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbitcXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcXG4gXFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuLVxcdFxcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSlcXG4rXFx0XFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XFxuK1xcdFxcdCAgICBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRrZnJlZShlbGVtLVxcdTAwM2Vwcml2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTE6MDcuMDU2ODA3ODA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MzQ5MTM5MzQzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9zZXRlbGVtX2luc2VydFwiLFxuICAgIFwibmZ0X3NldGVsZW1fZGVhY3RpdmF0ZVwiLFxuICAgIFwibmZ0X2FkZF9zZXRfZWxlbVwiLFxuICAgIFwibmZ0X2RlbF9zZXRlbGVtXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY2F0Y2hhbGwgc2V0IGVsZW1lbnQgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgaW4gbmZfdGFibGVzIChuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYykgdG8gdGFrZSBlbGVtZW50IGV4cGlyYXRpb24gaW50byBhY2NvdW50IHZpYSBfX25mdF9zZXRfZWxlbV9leHBpcmVkKCkuIG5mX3RhYmxlcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIGFuZCBzZXQgZWxlbWVudCBsaWZlY3ljbGUvZXhwaXJhdGlvbiBoYW5kbGluZyBpcyBwcm9uZSB0byBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHJlZmVyZW5jZSBjb3VudGluZy91c2UtYWZ0ZXItZnJlZSBidWdzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoaXMgYWx0ZXJlZCBzdGF0ZSBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMGI3YzFlYjQ5MzQyN2U4NDQ3NjY0ZTcxZTk1Y2EzMjFjOTQwZmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAxMzoxMTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IDc2NWE5MmZhOTBkNjIuLjdlZjJlMTllNjY1NWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTkxLDExICs2OTkxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcbiBcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4rXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKSB7XG4rXHRcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcbiBcdFx0XHQqcHJpdiA9IGNhdGNoYWxsLVx1MDAzZWVsZW07XG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdH1cbkBAIC03MDg4LDExICs3MDkwLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4rXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbiBcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXHUwMDI2c2V0LVx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcbiBcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVx1MDAzZWVsZW0pO1xuLVx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkpXG4rXHRcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxuK1x0XHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGtmcmVlKGVsZW0tXHUwMDNlcHJpdik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxMTowNy4wNTY4MDkyNjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODc5NTgxODMxNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBzYWZldHkgZ3VpZGVsaW5lcyB0byBtYWtlIHN1cmUgSSdtIG9uIHRoZSByaWdodCB0cmFjayDigJMgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBSaWdodCwgdGhpcyBpcyBkZWZlbnNpdmUgUUEgZm9yIHN5emthbGxlciwgZXZhbHVhdGluZyBhIExpbnV4IGtlcm5lbCBwYXRjaCBhcHBsaWVkIHRvIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFNvdW5kcyBzdHJhaWdodGZvcndhcmQsIGFuZCBkZWZpbml0ZWx5IGJlbmlnbjsgZGV2ZWxvcGVyIFFBLCBwYXRjaCBldmFsdWF0aW9uLi4uIG5vIG1hbHdhcmUgb3IgZXhwbG9pdCBkZXZlbG9wbWVudCBoZXJlLlxuXG5UaGUgY29yZSBvZiB0aGlzIGlzIGdvaW5nIHRvIGJlIGluc3BlY3RpbmcgdGhlIGNvZGUsIGZpZ3VyaW5nIG91dCBgV29ydGhGdXp6aW5nYCwgZXh0cmFjdGluZyBhbnkgYEZvY3VzU3ltYm9sc2AsIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGVuLCBvZiBjb3Vyc2UsIHJlcG9ydGluZyB0aGUgcmVzdWx0cy5cblxuUmlnaHQsIGxldCdzIGxvb2sgYXQgdGhlIGFjdHVhbCBwYXRjaC4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHR3byBmdW5jdGlvbnMsIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAsIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYC4gVGhlIGRpZmYgaW50cm9kdWNlcyBhIGB0c3RhbXBgICh0aW1lc3RhbXApIHZhcmlhYmxlIGFuZCBhZGRzIGEgY2FsbCB0byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgaW4gdGhlIGNvbmRpdGlvbmFsIGNoZWNrcyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIHNvbWUgdGltZS1iYXNlZCBleHBpcnkgY2hlY2tzIHdpdGhpbiB0aGlzIGBuZnRfc2V0X2VsZW1gIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdyBJIG5lZWQgdG8gZ28gZGVlcGVyLiBUbyB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgZnVsbHksIEknbGwgbmVlZCB0byBzZWUgbW9yZSBjb250ZXh0LiBUaW1lIHRvIHVzZSBzb21lIHRvb2xzIOKAkyBlaXRoZXIgYSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIHdob2xlIHBpY3R1cmUgb3IgbWF5YmUgYSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBjYWxsZXJzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgYG5mdF9zZXRfZWxlbWAgaXMgdXNlZCBpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0aW1lc3RhbXAgY2hlY2tzIGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBpZiBpdCBpbnRyb2R1Y2VzIGFueSBuZXcgY29kZSBwYXRocyB0aGF0IHdvdWxkIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGFuYWx5c2lzIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwOCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjE1LjAxNDk5NjU3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5ODAsXG4gIFwiTGluZUNvdW50XCI6IDEzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTgwOlxcdFxcdFxcdCAgICAhbmZ0X3NldF9lbGVtX2lzX2RlYWQoZXh0KSlcXG42OTgxOlxcdFxcdFxcdFxcdHJldHVybiBleHQ7XFxuNjk4MjpcXHRcXHR9XFxuNjk4MzpcXHRcXG42OTg0OlxcdFxcdHJldHVybiBOVUxMO1xcbjY5ODU6XFx0fVxcbjY5ODY6XFx0XFxuNjk4NzpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNjk4ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG42OTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLFxcbjY5OTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqcHJpdilcXG42OTkxOlxcdHtcXG42OTkyOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbjY5OTM6XFx0XFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG42OTk0OlxcdFxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbjY5OTU6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNjk5NjpcXHRcXG42OTk3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG42OTk4OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNjk5OTpcXHRcXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxuNzAwMDpcXHRcXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxuNzAwMTpcXHRcXHRcXHRcXHQqcHJpdiA9IGNhdGNoYWxsLVxcdTAwM2VlbGVtO1xcbjcwMDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuNzAwMzpcXHRcXHRcXHR9XFxuNzAwNDpcXHRcXHR9XFxuNzAwNTpcXHRcXG43MDA2OlxcdFxcdGNhdGNoYWxsID0ga21hbGxvY19vYmooKmNhdGNoYWxsLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjcwMDc6XFx0XFx0aWYgKCFjYXRjaGFsbClcXG43MDA4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjcwMDk6XFx0XFxuNzAxMDpcXHRcXHRjYXRjaGFsbC1cXHUwMDNlZWxlbSA9IGVsZW0tXFx1MDAzZXByaXY7XFxuNzAxMTpcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2Y2F0Y2hhbGwtXFx1MDAzZWxpc3QsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QpO1xcbjcwMTI6XFx0XFxuNzAxMzpcXHRcXHRyZXR1cm4gMDtcXG43MDE0OlxcdH1cXG43MDE1OlxcdFxcbjcwMTY6XFx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcwMTc6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDE4OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuNzAxOTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqKmVsZW1fcHJpdixcXG43MDIwOlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG43MDIxOlxcdHtcXG43MDIyOlxcdFxcdGludCByZXQ7XFxuNzAyMzpcXHRcXG43MDI0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG43MDI1OlxcdFxcdFxcdHJldCA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG43MDI2OlxcdFxcdGVsc2VcXG43MDI3OlxcdFxcdFxcdHJldCA9IHNldC1cXHUwMDNlb3BzLVxcdTAwM2VpbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XFxuNzAyODpcXHRcXG43MDI5OlxcdFxcdHJldHVybiByZXQ7XFxuNzAzMDpcXHR9XFxuNzAzMTpcXHRcXG43MDMyOlxcdHN0YXRpYyBib29sIG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzAzMzpcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdilcXG43MDM0OlxcdHtcXG43MDM1OlxcdFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW1fcHJpdik7XFxuNzAzNjpcXHRcXG43MDM3OlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9GTEFHUykgXFx1MDAyNlxcdTAwMjZcXG43MDM4OlxcdFxcdCAgICAqbmZ0X3NldF9leHRfZmxhZ3MoZXh0KSBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG43MDM5OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjcwNDA6XFx0XFxuNzA0MTpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNzA0MjpcXHR9XFxuNzA0MzpcXHRcXG43MDQ0OlxcdHN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX2FjdGl2YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDQ1OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbjcwNDY6XFx0e1xcbjcwNDc6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbV9wcml2KTtcXG43MDQ4OlxcdFxcbjcwNDk6XFx0XFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xcbjcwNTA6XFx0XFx0XFx0bmZ0X2NsZWFyKG5ldCwgZXh0KTtcXG43MDUxOlxcdFxcdH0gZWxzZSB7XFxuNzA1MjpcXHRcXHRcXHRzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW1fcHJpdik7XFxuNzA1MzpcXHRcXHR9XFxuNzA1NDpcXHR9XFxuNzA1NTpcXHRcXG43MDU2OlxcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtX3VwZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwNTc6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZ0X3RyYW5zX29uZV9lbGVtICplbGVtKVxcbjcwNTg6XFx0e1xcbjcwNTk6XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbS1cXHUwMDNlcHJpdik7XFxuNzA2MDpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fdXBkYXRlICp1cGRhdGUgPSBlbGVtLVxcdTAwM2V1cGRhdGU7XFxuNzA2MTpcXHRcXG43MDYyOlxcdFxcdGlmICh1cGRhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1RSQU5TX1VQRF9USU1FT1VUKVxcbjcwNjM6XFx0XFx0XFx0V1JJVEVfT05DRShuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXFx1MDAzZXRpbWVvdXQsIHVwZGF0ZS1cXHUwMDNldGltZW91dCk7XFxuNzA2NDpcXHRcXG43MDY1OlxcdFxcdGlmICh1cGRhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX1RSQU5TX1VQRF9FWFBJUkFUSU9OKVxcbjcwNjY6XFx0XFx0XFx0V1JJVEVfT05DRShuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXFx1MDAzZWV4cGlyYXRpb24sIGdldF9qaWZmaWVzXzY0KCkgKyB1cGRhdGUtXFx1MDAzZWV4cGlyYXRpb24pO1xcbjcwNjc6XFx0fVxcbjcwNjg6XFx0XFxuNzA2OTpcXHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuNzA3MDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlKVxcbjcwNzE6XFx0e1xcbjcwNzI6XFx0XFx0aW50IGk7XFxuNzA3MzpcXHRcXG43MDc0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZS1cXHUwMDNlbmVsZW1zOyBpKyspIHtcXG43MDc1OlxcdFxcdFxcdHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0gPSBcXHUwMDI2dGUtXFx1MDAzZWVsZW1zW2ldO1xcbjcwNzY6XFx0XFxuNzA3NzpcXHRcXHRcXHRpZiAoZWxlbS1cXHUwMDNldXBkYXRlKVxcbjcwNzg6XFx0XFx0XFx0XFx0bmZ0X3RyYW5zX2VsZW1fdXBkYXRlKHRlLVxcdTAwM2VzZXQsIGVsZW0pO1xcbjcwNzk6XFx0XFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDoxNS4wMTU3Mzc2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0MDA1NzI3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUmVsZXZhbnQgU2VjdGlvbioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDcwODAgdG8gNzEzMC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGRpc2N1c3NlZCB3aXRoaW4gdGhhdCBzZWdtZW50LiBJIHN1c3BlY3QgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBqdW5jdHVyZSBpbiB0aGUgYXJndW1lbnQsIHBlcmhhcHMgYSBkZXRhaWxlZCBhbmFseXNpcywgYSBjYXNlIHN0dWR5LCBhIHBpdm90YWwgY29tcGFyaXNvbiwgb3IgdGhlIGludHJvZHVjdGlvbiBvZiBuZXcgZXZpZGVuY2UuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBxdWlja2x5IHNraW0gdGhvc2UgbGluZXMsIGxvb2tpbmcgZm9yIGtleSB0ZXJtcywgbWV0aG9kb2xvZ2ljYWwgc2hpZnRzLCBjb25jbHVzaW9ucyBiZWluZyBkcmF3biwgb3IgY291bnRlcmFyZ3VtZW50cyBiZWluZyBhZGRyZXNzZWQuIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIGNvbnRleHQgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcgdGhhdCBzZWN0aW9uIGlmIHRoZSBtZWFuaW5nIGlzIHVuY2xlYXIuIEZyb20gZXhwZXJpZW5jZSwgaW1wb3J0YW50IGRpc2N1c3Npb25zIGFyZSBvZnRlbiBwcmVzZW50ZWQgaW4gc2hvcnQgc2VjdGlvbnMgdGhhdCBhcmUgY3JpdGljYWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQuIEkgd2lsbCBhbHNvIGJlIHByZXBhcmVkIHRvIHJldmlzaXQgYW5kIHJlLXJlYWQgaXQgaWYgdGhlIGZpcnN0IHBhc3MgZG9lc24ndCBwcm92aWRlIGEgY2xlYXIgcGljdHVyZTsgc29tZXRpbWVzIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgYXJndW1lbnQgb25seSByZXZlYWwgdGhlbXNlbHZlcyBhZnRlciBhIG1vcmUgdGhvcm91Z2ggYW5kIGNhcmVmdWwgZXhhbWluYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MzgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjE4LjQxNjMxMzgwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNTg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDgwOlxcdFxcdFxcdFxcdG5mdF9zZXRlbGVtX2FjdGl2YXRlKGN0eC1cXHUwMDNlbmV0LCB0ZS1cXHUwMDNlc2V0LCBlbGVtLVxcdTAwM2Vwcml2KTtcXG43MDgxOlxcdFxcbjcwODI6XFx0XFx0XFx0bmZfdGFibGVzX3NldGVsZW1fbm90aWZ5KGN0eCwgdGUtXFx1MDAzZXNldCwgZWxlbS1cXHUwMDNlcHJpdixcXG43MDgzOlxcdFxcdFxcdFxcdFxcdFxcdCBORlRfTVNHX05FV1NFVEVMRU0pO1xcbjcwODQ6XFx0XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNldXBkYXRlKTtcXG43MDg1OlxcdFxcdH1cXG43MDg2OlxcdH1cXG43MDg3OlxcdFxcbjcwODg6XFx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG43MDg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzA5MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbjcwOTE6XFx0e1xcbjcwOTI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNzA5MzpcXHRcXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcXG43MDk0OlxcdFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xcbjcwOTU6XFx0XFxuNzA5NjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XFxuNzA5NzpcXHRcXHRcXHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbjcwOTg6XFx0XFx0XFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XFxuNzA5OTpcXHRcXHRcXHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxuNzEwMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MTAxOlxcdFxcbjcxMDI6XFx0XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuNzEwMzpcXHRcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuNzEwNDpcXHRcXHRcXHRuZnRfc2V0X2VsZW1fY2hhbmdlX2FjdGl2ZShuZXQsIHNldCwgZXh0KTtcXG43MTA1OlxcdFxcdFxcdHJldHVybiAwO1xcbjcxMDY6XFx0XFx0fVxcbjcxMDc6XFx0XFxuNzEwODpcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43MTA5OlxcdH1cXG43MTEwOlxcdFxcbjcxMTE6XFx0c3RhdGljIGludCBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcxMTI6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzExMzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcXG43MTE0OlxcdHtcXG43MTE1OlxcdFxcdHZvaWQgKnByaXY7XFxuNzExNjpcXHRcXG43MTE3OlxcdFxcdHByaXYgPSBzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxuNzExODpcXHRcXHRpZiAoIXByaXYpXFxuNzExOTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43MTIwOlxcdFxcbjcxMjE6XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuNzEyMjpcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG43MTIzOlxcdFxcdHNldC1cXHUwMDNlbmRlYWN0Kys7XFxuNzEyNDpcXHRcXG43MTI1OlxcdFxcdHJldHVybiAwO1xcbjcxMjY6XFx0fVxcbjcxMjc6XFx0XFxuNzEyODpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcxMjk6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcxMzA6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXFxuNzEzMTpcXHR7XFxuNzEzMjpcXHRcXHRpbnQgcmV0O1xcbjcxMzM6XFx0XFxuNzEzNDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxuNzEzNTpcXHRcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG43MTM2OlxcdFxcdGVsc2VcXG43MTM3OlxcdFxcdFxcdHJldCA9IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxuNzEzODpcXHRcXG43MTM5OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjE4LjQxNzI0NDU2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyOTI1NjQwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIG5mX3RhYmxlcyBmb3IgU2VjdXJpdHkgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gdGhpcyBpcyBhYm91dCBgbmZfdGFibGVzYCBpbiBuZXRmaWx0ZXIsIGEga25vd24gdGFyZ2V0IGZvciBzeXprYWxsZXIgZnV6emluZy4gTXkgZm9jdXMgaW1tZWRpYXRlbHkgc2hpZnRzIHRvIHRoZSBhdHRhY2sgc3VyZmFjZTogbmV0bGluayBhY2Nlc3MgdmlhIGBuZm5ldGxpbmtgLiBUaGF0IG1lYW5zIHVucHJpdmlsZWdlZCB1c2VyIG5hbWVzcGFjZXMgYXJlIGluIHBsYXkgaWYgYE5GX1RBQkxFU2AgaXMgZW5hYmxlZCwgb3IgZnVsbCBgQ0FQX05FVF9BRE1JTmAgYWNjZXNzIGlmIHRoYXQgaXNuJ3QgdGhlIGNhc2UuIFRoaXMgbWFrZXMgaXQgYW4gYXR0cmFjdGl2ZSB0YXJnZXQsIGFzIGV4cGVjdGVkLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzLiBMZXQgbWUgY2hlY2sgdGhlIGdpdCBsb2cgZm9yIHRoZSBjb21taXQuIEhtbSwgSSBkb24ndCBoYXZlIHRoZSBgZ2l0IGxvZ2AgdG9vbCByZWFkaWx5IGF2YWlsYWJsZS4gTm8gcHJvYmxlbSwgbGV0J3Mgc2VlLCBJIGNhbiB1c2UgZ3JlcHBlciBvciBpZiBJIGNhbid0IGRvIHRoYXQsIEknbGwgZXhhbWluZSB0aGUgY29tbWl0IGRpZmYgYW5kIHNlYXJjaCB0aGUgY29tbWl0IG1lc3NhZ2UgaWYgbmVjZXNzYXJ5LlxuXG5BY3R1YWxseSwgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gdGhlIGNvbW1pdCwgbGV0J3MgY2xhcmlmeSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIEkgc2hvdWxkIGNoZWNrIHdoaWNoIEtjb25maWcgb3B0aW9ucyBjb250cm9sIHRoZSBjb21waWxhdGlvbiBvZiBgbmZfdGFibGVzX2FwaS5jYC4gQSBxdWljayBgZ3JlcGAgZm9yIGBuZl90YWJsZXNfYXBpLm9gIG9yIGBDT05GSUdfTkZfVEFCTEVTYCB3aWxsIGdpdmUgbWUgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gVGhpcyB3aWxsIGhlbHAgdW5kZXJzdGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIGFyZSByZWxldmFudCwgYW5kIHRoZSBhdmFpbGFibGUgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDcxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTQ6MjIuNzA5ODExNTYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzg5NjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfYXBpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcXHQrPSBuZl9kdXBfbmV0ZGV2Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODYtIyBuZl90YWJsZXNcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg3Om5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cXHRcXHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDoyMi44NDc3MTI2MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzYzMTk0OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTmV0ZmlsdGVyIE1ha2VmaWxlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHNwZWNpZmljIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGJ1aWxkIHByb2Nlc3MuIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSwgdGhlIGlzc3VlIGlzIGxpa2VseSByb290ZWQgaW4gb25lIG9mIHRoZSBNYWtlZmlsZSBydWxlcyBmb3IgdGhhdCBzdWJzeXN0ZW0uIE15IGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBsb2dpYyBpcyBtb3N0IGxpa2VseSBhcm91bmQgbGluZSA4NC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IHNlY3Rpb24gd2lsbCBoYW5kbGUgdGhlIGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgb2YgYSBtb2R1bGUgSSdtIGludGVyZXN0ZWQgaW4sIGFuZCB0aGlzIHdpbGwgbW9zdCBsaWtlbHkgcmV2ZWFsIHdoYXQgSSBuZWVkIHRvIHNlZSBhYm91dCB0aGUgb2JqZWN0IGZpbGVzIG9yIGNvbW1hbmRzIHRoZXJlLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjI1LjYxMDkxMDM0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXG4gIDgxOlxcdG9iai0kKENPTkZJR19ORVRGSUxURVJfQ09OTkNPVU5UKSArPSBuZl9jb25uY291bnQub1xcbiAgODI6XFx0XFxuICA4MzpcXHQjIGdlbmVyaWMgcGFja2V0IGR1cGxpY2F0aW9uIGZyb20gbmV0ZGV2IGZhbWlseVxcbiAgODQ6XFx0b2JqLSQoQ09ORklHX05GX0RVUF9ORVRERVYpXFx0Kz0gbmZfZHVwX25ldGRldi5vXFxuICA4NTpcXHRcXG4gIDg2OlxcdCMgbmZfdGFibGVzXFxuICA4NzpcXHRuZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbiAgODg6XFx0XFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG4gIDg5OlxcdFxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbiAgOTA6XFx0XFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxuICA5MTpcXHRcXHRcXHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXFxcXG4gIDkyOlxcdFxcdFxcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxcXFxuICA5MzpcXHRcXHRcXHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxcXFxuICA5NDpcXHRcXHRcXHQgIG5mdF9zZXRfcGlwYXBvLm9cXG4gIDk1OlxcdFxcbiAgOTY6XFx0aWZkZWYgQ09ORklHX1g4Nl82NFxcbiAgOTc6XFx0aWZuZGVmIENPTkZJR19VTUxcXG4gIDk4OlxcdG5mX3RhYmxlcy1vYmpzICs9IG5mdF9zZXRfcGlwYXBvX2F2eDIub1xcbiAgOTk6XFx0ZW5kaWZcXG4gMTAwOlxcdGVuZGlmXFxuIDEwMTpcXHRcXG4gMTAyOlxcdGlmZGVmIENPTkZJR19ORlRfQ1RcXG4gMTAzOlxcdGlmZGVmIENPTkZJR19NSVRJR0FUSU9OX1JFVFBPTElORVxcbiAxMDQ6XFx0bmZfdGFibGVzLW9ianMgKz0gbmZ0X2N0X2Zhc3Qub1xcbiAxMDU6XFx0ZW5kaWZcXG4gMTA2OlxcdGVuZGlmXFxuIDEwNzpcXHRcXG4gMTA4OlxcdG9iai0kKENPTkZJR19ORl9UQUJMRVMpXFx0XFx0Kz0gbmZfdGFibGVzLm9cXG4gMTA5OlxcdG9iai0kKENPTkZJR19ORlRfQ09NUEFUKVxcdCs9IG5mdF9jb21wYXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDoyNS42MTEwNTE1NTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAwMjM0MzY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IG9mIGBuZl90YWJsZXMtb2Jqc2AqKlxuXG5BbHJpZ2h0LCBzbyBgbmZfdGFibGVzLW9ianNgIGlzIHRoZSBrZXksIGFuZCBJIGtub3cgaXQncyB1bmRlciB0aGUgY29udHJvbCBvZiBgQ09ORklHX05GX1RBQkxFU2AuIFRoaXMgcmluZ3MgYSBiZWxsLiBJdCBzb3VuZHMgbGlrZSBhIHByZXR0eSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3ksIHNvIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhpcyBjb25uZWN0aW9uLiBUaW1lIHRvIGp1bXAgb3ZlciB0byB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgb25lIGZvciBgbmV0ZmlsdGVyYCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgdHJlZSDigJMgdGhhdCB3b3VsZCBiZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhpcyBzaG91bGQgY2xlYXJseSBsYXkgb3V0IHRoZSByZWxhdGlvbnNoaXAgYW5kIGFueSBwb3RlbnRpYWwgbnVhbmNlcyBpbiBob3cgYE5GX1RBQkxFU2AgYWN0aXZhdGVzIG9yIGRlYWN0aXZhdGVzIGBuZl90YWJsZXMtb2Jqc2AuIEJlc3QgdG8gY2hlY2sgdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQxNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTQ6MjguNjEzMzk4MDcxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDMzMzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDoyOC42ODc3MzkwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg0NDkwNjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRoZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkLiBMZXQncyBzZWUuLi4gdGhlIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gQW5kIGlmIG15IG1lbW9yeSBzZXJ2ZXMsIHRoZSByZWxldmFudCBzZWN0aW9uIGZvciB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHN0YXJ0cyBhcm91bmQgbGluZSA0NTUuIFRoYXQncyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gZGlnIGluIGFuZCBzZWUgdGhlIG9wdGlvbnMgYXZhaWxhYmxlLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlciB3aXRoaW4gdGhpcyBjb21wbGV4IGZyYW1ld29yay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBgY29uZmlnYCBzdGF0ZW1lbnRzLCBgZGVwZW5kcyBvbmAgY2xhdXNlcywgYW5kIG1heWJlIHNvbWUgYHNlbGVjdGAgc3RhdGVtZW50cyB0byBndWlkZSB0aGUgYnVpbGQgcHJvY2Vzcy4gSG9wZWZ1bGx5LCBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgY29tbWVudGVkIGVub3VnaCB0aGF0IEkgY2FuIHF1aWNrbHkgZ3JvayB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIE5ldGZpbHRlciBmZWF0dXJlcyBhbmQgb3B0aW9ucy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDozMC44NzIyMzI0NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTA6XFx0Y29uZmlnIE5FVEZJTFRFUl9TWU5QUk9YWVxcbiA0NTE6XFx0XFx0dHJpc3RhdGVcXG4gNDUyOlxcdFxcbiA0NTM6XFx0ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG4gNDU0OlxcdFxcbiA0NTU6XFx0Y29uZmlnIE5GX1RBQkxFU1xcbiA0NTY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuIDQ1NzpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiA0NTg6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDU5OlxcdFxcdGhlbHBcXG4gNDYwOlxcdFxcdCAgbmZ0YWJsZXMgaXMgdGhlIG5ldyBwYWNrZXQgY2xhc3NpZmljYXRpb24gZnJhbWV3b3JrIHRoYXQgaW50ZW5kcyB0b1xcbiA0NjE6XFx0XFx0ICByZXBsYWNlIHRoZSBleGlzdGluZyB7aXAsaXA2LGFycCxlYn1fdGFibGVzIGluZnJhc3RydWN0dXJlLiBJdFxcbiA0NjI6XFx0XFx0ICBwcm92aWRlcyBhIHBzZXVkby1zdGF0ZSBtYWNoaW5lIHdpdGggYW4gZXh0ZW5zaWJsZSBpbnN0cnVjdGlvbi1zZXRcXG4gNDYzOlxcdFxcdCAgKGFsc28ga25vd24gYXMgZXhwcmVzc2lvbnMpIHRoYXQgdGhlIHVzZXJzcGFjZSAnbmZ0JyB1dGlsaXR5XFxuIDQ2NDpcXHRcXHQgIChodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL25mdGFibGVzKSB1c2VzIHRvIGJ1aWxkIHRoZVxcbiA0NjU6XFx0XFx0ICBydWxlLXNldC4gSXQgYWxzbyBjb21lcyB3aXRoIHRoZSBnZW5lcmljIHNldCBpbmZyYXN0cnVjdHVyZSB0aGF0XFxuIDQ2NjpcXHRcXHQgIGFsbG93cyB5b3UgdG8gY29uc3RydWN0IG1hcHBpbmdzIGJldHdlZW4gbWF0Y2hpbmdzIGFuZCBhY3Rpb25zXFxuIDQ2NzpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZSBsb29rdXBzLlxcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuIDQ3MDpcXHRcXG4gNDcxOlxcdGlmIE5GX1RBQkxFU1xcbiA0NzI6XFx0Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxuIDQ3MzpcXHRcXHRkZXBlbmRzIG9uIElQVjZcXG4gNDc0OlxcdFxcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDozMC44NzI0NTY0NDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAzNTkwMDU0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBQYXRjaCBJbXBhY3Qgb24gU3RhdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIExldCdzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIGl0IHRvdWNoZXM6IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAuIFJpZ2h0LCBJIHJlbWVtYmVyIHNlZWluZyB0aGVtIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM/IFllcywgYSBxdWljayBjaGVjayBjb25maXJtcyB0aGV5IGFyZSBpbmRlZWQgZGVjbGFyZWQgYXMgc3RhdGljLiBcblxuTm93LCBoZXJl4oCZcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBob3cgc3RhdGljIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZC4gVGhlIGRvY3VtZW50YXRpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCBzdGF0aWMgKmlubGluZSogZnVuY3Rpb25zIGRlY2xhcmVkIGluIGhlYWRlciBmaWxlcyBkb27igJl0IGhhdmUgZGlzdGluY3Qgc3ltYm9scyBpbiBgdm1saW51eGAgYW5kIGNhbid0IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLiBIbW0sIGJ1dCB0aGVzZSBhcmUgKm5vdCogaW5saW5lIGZ1bmN0aW9ucyBpbiBhIGhlYWRlci4gVGhleSdyZSBzdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGEgYC5jYCBmaWxlLCBgbmZfdGFibGVzX2FwaS5jYC4gQXJlIHRoZXkgdHJlYXRlZCB0aGUgc2FtZSB3YXk/IENvdWxkIHRoZSBjb21waWxlciBpbmxpbmUgdGhlbSBhbnl3YXksIG9yIGRvIHRoZXkgcmVtYWluIGFzIGRpc3RpbmN0IHN5bWJvbHM/IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZXkgYXJlIGNhbGxlZCBmcm9tIG90aGVyIGZ1bmN0aW9ucywgYW5kIHdoYXQgdGhvc2UgY2FsbGVyIGZ1bmN0aW9ucyBhcmUuXG5cblRoZXJlZm9yZSwgbGV0IG1lIGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYm90aCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHdpdGhpbiBgbmZfdGFibGVzX2FwaS5jYCB0byB1bmRlcnN0YW5kIHRoZWlyIHVzYWdlIGFuZCB3aGV0aGVyIHRoZSBjb21waWxlciBpcyBsaWtlbHkgdG8gaW5saW5lIHRoZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZWlyIGltcGFjdCBhbmQgd2hldGhlciB0aGV5J3JlIHByb3Blcmx5IHJlcHJlc2VudGVkIGluIHRoZSBzeW1ib2wgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NzYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNDo1MS4yMzE0NjQ5MTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDk3MzgzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk2OT1zdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk4NzpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk4OC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwMTY9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAyNTpcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNi1cXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjUxLjc1MjQ0NTY3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzU5MTc0ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBuZnRfc2V0ZWxlbV9pbnNlcnRgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmZ0X3NldGVsZW1faW5zZXJ0YCBpcyBiZWluZyBpbnZva2VkLiBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24gcmlnaHQgbm93LiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGFwcHJvYWNoIOKAkyB1c2luZyB0aGUgdG9vbGluZyBJJ20gbW9zdCBjb21mb3J0YWJsZSB3aXRoLiBJJ20gZ29pbmcgdG8gd2FudCB0byB0cmFjayBkb3duIGFsbCBkaXJlY3QgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGFuIGBubWAgc2VhcmNoIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZS4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHdyYXBwZXIgZnVuY3Rpb25zLCBvciBtYWNyb3MgaW52b2x2ZWQsIHNvIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBhdCB0aGUgYXNzZW1ibHkgbGV2ZWwuXG5cbkJleW9uZCBhIHNpbXBsZSB0ZXh0IHNlYXJjaCB0aG91Z2gsIEknbGwgbmVlZCB0byBjb25zaWRlciBzdGF0aWMgYW5hbHlzaXMgdGVjaG5pcXVlcy4gVG9vbHMgbGlrZSBga2NhY2hlZ3JpbmRgIG9yIGV2ZW4gYSBjYXJlZnVsbHkgY3JhZnRlZCBzY3JpcHQgd2l0aCBzb21ldGhpbmcgbGlrZSBgY2xhbmdgIGNvdWxkIHByb3ZpZGUgY2FsbCBncmFwaHMuIFRoYXQgd2lsbCBiZSBtb3JlIGluc2lnaHRmdWwgdGhhbiBhIHJhdyB0ZXh0IHNlYXJjaC4gSSdsbCBuZWVkIHRvIGJlIGF3YXJlIG9mIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRvbywgc2luY2UgdGhhdCBjYW4gYWRkIGNvbXBsZXhpdHkuXG5cbk9uY2UgSSd2ZSBpZGVudGlmaWVkIHRoZSBjYWxsIHNpdGVzLCBJJ20gZ29pbmcgdG8gbmVlZCB0byBldmFsdWF0ZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5IGFyZSBtYWRlLiBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQ/IFdoYXQgbG9ja3MgYXJlIGhlbGQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgcGF0aHM/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBob3cgZG8gdGhlc2UgY2FsbHMgaW1wYWN0IHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eT8gSSdsbCBwcm9iYWJseSBlbmQgdXAgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGRldGFpbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBwdXJwb3NlIGFuZCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBsaWtlbHkgdG8gbGVhZCB0byBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzZXQgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgdXNlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDM4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTQ6NTQuNTExNjIyODcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODU1MDkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0ZWxlbV9pbnNlcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk4Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDE1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMTY6c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMTctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTcxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1NzI6XFx0ZXJyID0gbmZ0X3NldGVsZW1faW5zZXJ0KGN0eC1cXHUwMDNlbmV0LCBzZXQsIFxcdTAwMjZlbGVtLCBcXHUwMDI2ZWxlbV9wcml2LCBmbGFncyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU3My1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE0OjU0LjU3MDE4MTIwMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTA2MjUwNjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIE5GVCBTZXQgRWxlbWVudCBJbnNlcnRpb24gUGF0aCoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IG5ldyBlbGVtZW50cyBhcmUgYWRkZWQgdG8gTkZUIHNldHMuIEkgc2VlIHRoYXQgdGhlIGBuZnRfYWRkX3NldF9lbGVtYCBmdW5jdGlvbiBpcyB0aGUga2V5IHBsYXllciBoZXJlLCBhbmQgdGhhdCBpdCBjYWxscyBgbmZ0X3NldGVsZW1faW5zZXJ0YC4gR29vZCwgbWFrZXMgc2Vuc2UuIEJ1dCBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBXaGF0J3MgdGhlICpvcmlnaW4qIG9mIGBuZnRfYWRkX3NldF9lbGVtYD8gQWgsIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBgbmZfdGFibGVzX25ld3NldGVsZW1gLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IEknbSBhZnRlciwgdGhlIGluaXRpYWwgdHJpZ2dlciBmb3IgYSBuZXcgc2V0IGVsZW1lbnQuXG5cbk5vdywgSSdtIGFsc28gY3VyaW91cyBhYm91dCBkZWFjdGl2YXRpb24g4oCTIHNwZWNpZmljYWxseSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAuIFdoYXQgdHJpZ2dlcnMgdGhhdD8gQW5kIHdoaWxlIEknbSBhdCBpdCwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBjaGVjayB0aGUgY2FsbGVycyBvZiB0aGUgbW9yZSBnZW5lcmljIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCBmdW5jdGlvbiwganVzdCB0byBnZXQgYSBicm9hZGVyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IHNldCBlbGVtZW50cyBhcmUgZGVhY3RpdmF0ZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaHMgZm9yIGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIGFuZCBwb3RlbnRpYWwgcmVtb3ZhbCBzY2VuYXJpb3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE1OjA1LjYzMjY5MDEzMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0ODc2NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA2OT1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfYWRkKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwODg6c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDg5LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MTI4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTM0LVxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9TRVRfRUxFTV9DQVRDSEFMTClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTM1OlxcdFxcdHJldCA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzYtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNTowNS43Mzc1NzE5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjU2MDgyNTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHJlcXVlc3QsIHRoaW5raW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCBDYWxsZXJzKipcblxuT2theSwgc28gdGhlIHByb21wdCB3YW50cyBtZSB0byBhbmFseXplIHRoZSBjYWxsZXJzIG9mIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGxpa2VseSBtZWFucyBpZGVudGlmeWluZyB3aGVyZSB0aGlzIGNvcmUgZnVuY3Rpb24gaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgaXMgYmVpbmcgaW52b2tlZC4gSXQncyBhYm91dCBmaWd1cmluZyBvdXQgd2hpY2ggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0IHRvIGRpc2FibGUgb3IgaW52YWxpZGF0ZSBlbGVtZW50cyB3aXRoaW4gTmV0ZmlsdGVyIHRhYmxlcyBvciBzZXRzLCB3aGljaCBpbiB0dXJuIGFmZmVjdCBwYWNrZXQgZmlsdGVyaW5nIGFuZCBuZXR3b3JrIGJlaGF2aW9yLiBNeSBpbnR1aXRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd2luZyBtZSB0byBwb3RlbnRpYWwgYXJlYXM6XG5cbiogICAqKlJ1bGUgTWFuYWdlbWVudDoqKiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRoaXMgaXMgZGlyZWN0bHkgbGlua2VkIHRvIHRoZSByZW1vdmFsIG9yIGRlYWN0aXZhdGlvbiBvZiBydWxlcyB3aXRoaW4gTmV0ZmlsdGVyIHNldHMuIFNvIEknZCBiZSBsb29raW5nIGZvciBjb2RlIHJlbGF0ZWQgdG8gYG5mdCBhZGQvZGVsZXRlIGVsZW1lbnRgIG9wZXJhdGlvbnMsIG9yIHBlcmhhcHMgYSBtb3JlIGludGVybmFsIGZ1bmN0aW9uLlxuKiAgICoqU2V0IEdhcmJhZ2UgQ29sbGVjdGlvbi9FeHBpcnk6KiogVGhpcyBjb3VsZCBiZSBwYXJ0IG9mIGEgbWVjaGFuaXNtIHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIG9yIGludmFsaWRhdGUgc2V0IGVsZW1lbnRzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQgKGUuZy4sIGR1ZSB0byB0aW1lb3V0cywgcmVzb3VyY2UgbGltaXRhdGlvbnMsIG9yIHBvbGljeSBjaGFuZ2VzKS4gSSdkIGJlIGxvb2tpbmcgZm9yIHRpbWVycywgY2xlYW51cCByb3V0aW5lcyBvciBldmVudHMuXG4qICAgKipFcnJvciBIYW5kbGluZy9Sb2xsYmFjazoqKiBQb3RlbnRpYWxseSwgaXQgY291bGQgYmUgdXNlZCBpbiBzY2VuYXJpb3Mgd2hlcmUgYSBOZXRmaWx0ZXIgb3BlcmF0aW9uIGZhaWxzLCBhbmQgd2UgbmVlZCB0byByb2xsIGJhY2sgY2hhbmdlcywgZGVhY3RpdmF0aW5nIGVsZW1lbnRzIGFkZGVkIGR1cmluZyBhIGZhaWxlZCB0cmFuc2FjdGlvbi5cbiogICAqKkNvbm50cmFjayBJbnRlZ3JhdGlvbjoqKiBTaW5jZSBzZXRzIGNhbiBiZSB1c2VkIHdpdGggY29ubmVjdGlvbiB0cmFja2luZywgdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSB1dGlsaXplZCB0byBoYW5kbGUgdGhlIHJlbW92YWwgb2Ygc2V0IGVsZW1lbnRzIHRoYXQgY29ycmVzcG9uZCB0byBleHBpcmVkIG9yIHRlcm1pbmF0ZWQgY29ubmVjdGlvbnMuXG4qICAgKipDb25maWd1cmF0aW9uIFJlbG9hZHM6KiogV2hlbiBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbG9hZGVkIG9yIHVwZGF0ZWQsIGV4aXN0aW5nIHNldCBlbGVtZW50cyBtaWdodCBiZSBkZWFjdGl2YXRlZCBhbmQgbmV3IGVsZW1lbnRzIGFjdGl2YXRlZC4gSSB3aWxsIGhhdmUgdG8gbG9vayBhdCB0aGUgcmVsb2FkIG9yIGNvbmZpZyBjb2RlLlxuXG5Fc3NlbnRpYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsaWZlY3ljbGUgb2Ygc2V0IGVsZW1lbnRzIGFuZCBob3cgdGhleSBhcmUgbWFuYWdlZDogY3JlYXRpb24sIGFjdGl2YXRpb24sIHVzZSwgYW5kIHVsdGltYXRlbHksIGRlYWN0aXZhdGlvbi9yZW1vdmFsLiBJIHdhbnQgdG8gaWRlbnRpZnkgYW55IGNvZGUgcGF0aCB0aGF0IGhhbmRsZXMgdGhlICdjbGVhbnVwJyBzdGFnZSBvZiB0aGVzZSBlbGVtZW50cy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UgYW5kIHN0YXJ0IHRyYWNpbmcgY2FsbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzM5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTU6MTAuOTkzNjU3OTk4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk0MjA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwODg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMTAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzExMTpzdGF0aWMgaW50IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzExMi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEyODpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMjktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzNi1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEzNzpcXHRcXHRyZXQgPSBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUobmV0LCBzZXQsIGVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzgtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03ODI5PXN0YXRpYyBpbnQgbmZ0X2RlbF9zZXRlbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5MDI6XFx0ZXJyID0gbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShjdHgtXFx1MDAzZW5ldCwgc2V0LCBcXHUwMDI2ZWxlbSwgZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5MDMtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE1OjExLjA1MzYwNTI3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTk2NzQ2NDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBORlQgRGVsZXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZnRfZGVsX3NldGVsZW1gIGhlcmUsIGFuZCBpdCdzIGNhbGxpbmcgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgbmZfdGFibGVzX2RlbHNldGVsZW1gLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gU3RhbmRhcmQgZGVsZXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBlbGVtZW50IGRlYWN0aXZhdGlvbiwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gSSdtIGd1ZXNzaW5nIHRoaXMgcGF0Y2ggaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBleHBpcmF0aW9uIGxvZ2ljLCB3aGljaCBtYWtlcyBzZW5zZSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc2V0cy4gTGV0IG1lIHNlYXJjaCBmb3IgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGltZSB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTU6MTQuMDUwMzU0NzkxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTIzMTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25mdF9zZXRfZWxlbV9leHBpcmVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njk4Nz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTk5LVxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDAwOlxcdFxcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDAxLVxcdFxcdFxcdCpwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDk4LVxcdFxcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZXh0KSB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwOTk6XFx0XFx0ICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMDAtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY3OT1zdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjkxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjkyOlxcdFxcdGlmICghX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTMtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTU5PXN0YXRpYyBpbmxpbmUgaW50IG5mdF9yaGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNjgtXFx0XFx0cmV0dXJuIDE7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYzo2OTpcXHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2aGUtXFx1MDAzZWV4dCwgeC1cXHUwMDNldHN0YW1wKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTcwLVxcdFxcdHJldHVybiAxO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTQxOT1zdGF0aWMgc3RydWN0IG5mdF9waXBhcG9fZWxlbSAqcGlwYXBvX2dldF9zbG93KGNvbnN0IHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTQ3OC1cXHRcXHRcXHRlID0gZi1cXHUwMDNlbXRbYl0uZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6NDc5OlxcdFxcdFxcdGlmICh1bmxpa2VseShfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZlLVxcdTAwM2VleHQsIHRzdGFtcCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtNDgwLVxcdFxcdFxcdFxcdCAgICAgIW5mdF9zZXRfZWxlbV9hY3RpdmUoXFx1MDAyNmUtXFx1MDAzZWV4dCwgZ2VubWFzaykpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jPTE3MTA9c3RhdGljIHZvaWQgcGlwYXBvX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldCwgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTc1MC1cXHRcXHQgKi9cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM6MTc1MTpcXHRcXHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2ZS1cXHUwMDNlZXh0LCB0c3RhbXApKSB7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3NTItXFx0XFx0XFx0aWYgKCFuZnRfdHJhbnNfZ2Nfc3BhY2UoZ2MpKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYz0xMTMwPXN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKnBpcGFwb19nZXRfYXZ4Mihjb25zdCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jLTEyMTYtXFx0XFx0XFx0ZSA9IGYtXFx1MDAzZW10W3JldF0uZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYzoxMjE3OlxcdFxcdFxcdGlmICh1bmxpa2VseShfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZlLVxcdTAwM2VleHQsIHRzdGFtcCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvX2F2eDIuYy0xMjE4LVxcdFxcdFxcdFxcdCAgICAgIW5mdF9zZXRfZWxlbV9hY3RpdmUoXFx1MDAyNmUtXFx1MDAzZWV4dCwgZ2VubWFzaykpKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MzQyPXN0YXRpYyBpbnQgX19uZnRfcmJ0cmVlX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMzk3LVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzozOTg6XFx0XFx0aWYgKF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNnJiZS1cXHUwMDNlZXh0LCB0c3RhbXApIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTM5OS1cXHRcXHQgICAgbmZ0X3NldF9lbGVtX2FjdGl2ZShcXHUwMDI2cmJlLVxcdTAwM2VleHQsIGN1cl9nZW5tYXNrKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTc4Mz1uZnRfcmJ0cmVlX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTgxOS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6ODIwOlxcdFxcdFxcdH0gZWxzZSBpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2cmJlLVxcdTAwM2VleHQsIHRzdGFtcCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODIxLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg5MT1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy05MTEtXFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo5MTI6XFx0XFx0aWYgKCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZyYmUtXFx1MDAzZWV4dCwgdHN0YW1wKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtOTEzLVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNToxNC4xMzk1OTE1M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NDg0ODg0ODA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENhdGNoYWxsIEVsZW1lbnQgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBJbml0aWFsbHksIEkgc2VlIHRoYXQgdGhleSd2ZSBpbnRyb2R1Y2VkIHRoZSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgY2hlY2ssIGluY29ycG9yYXRpbmcgdGhlIGB0c3RhbXBgLiBUaGlzIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBjaGFuZ2UgaW4gaG93IHdlIGhhbmRsZSBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnRzLCB3aGljaCBpcyBrZXkuXG5cbkluIHRoZSBpbnNlcnQgZnVuY3Rpb24sIHRoZSBvbGQgY29kZSByZXR1cm5lZCBgLUVFWElTVGAgaWYgYW4gYWN0aXZlIGNhdGNoYWxsIGVsZW1lbnQgd2FzIGZvdW5kLiBOb3csIGl0IHNraXBzIHRoZSBlbGVtZW50ICppZiBpdCdzIGV4cGlyZWQqIGFuZCBhdHRlbXB0cyB0byBpbnNlcnQgYSAqbmV3KiBjYXRjaGFsbCBlbGVtZW50LiBIb2xkIG9uIGEgc2Vjb25kLi4uIHdoYXQgaGFwcGVucyB0byB0aGUgKm9sZCosIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudCB0aGF0J3MgYWxyZWFkeSBpbiBgc2V0LVx1MDAzZWNhdGNoYWxsX2xpc3RgPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQncyBub3QgYmVpbmcgcmVtb3ZlZC4gVGhlIGV4aXN0aW5nIGVsZW1lbnQgaXMganVzdCBpZ25vcmVkLCBhbmQgYSAqbmV3KiBvbmUgaXMgYXBwZW5kZWQgdG8gdGhlIGxpc3QuXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGluc2VydGlvbiBjb2RlOiB0aGUgb2xkIGV4cGlyZWQgZWxlbWVudCB3YXNuJ3QgcmVtb3ZlZCBiZWZvcmUgdGhlIG5ldyBvbmUgd2FzIGFkZGVkIHRvIGBzZXQtXHUwMDNlY2F0Y2hhbGxfbGlzdGAuICpZZXMhKiBUaGF0IG1lYW5zIHRoZXJlIGNhbiBub3cgYmUgbXVsdGlwbGUgY2F0Y2hhbGwgZWxlbWVudHMgaW4gYHNldC1cdTAwM2VjYXRjaGFsbF9saXN0YC4gVGhlIG9sZCBlbGVtZW50IGlzIG5vdCByZW1vdmVkIHdoZW4gaXQgZXhwaXJlcywgdGhlIG5ldyBlbGVtZW50IGlzIGp1c3QgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCFcblxuSW4gdGhlIGRlYWN0aXZhdGlvbiBmdW5jdGlvbiwgaXQgbm93IHNraXBzIGV4cGlyZWQgZWxlbWVudHMgYXMgd2VsbC4gSWYgYW4gZXhwaXJlZCBjYXRjaGFsbCBpcyBmb3VuZCBpdCBqdXN0IGNvbnRpbnVlcyB0byB0aGUgbmV4dCBlbGVtZW50LiBJdCBldmVudHVhbGx5IHJldHVybnMgYC1FTk9FTlRgIGlmIG5vIGFjdGl2ZS9ub24tZXhwaXJlZCBlbGVtZW50cyBhcmUgZm91bmQuXG5cblRoaXMgYWxsIHBvaW50cyB0byBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBjYXRjaGFsbCBlbGVtZW50cyBhcmUgbWFuYWdlZC4gV2UncmUgZGVmZXJyaW5nIHRoZSBjbGVhbnVwIG9mIGV4cGlyZWQgZWxlbWVudHMgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLCB0cmFuc2FjdGlvbiBjb21taXQvYWJvcnQsIG9yIHBvdGVudGlhbGx5IGR1cmluZyBsb29rdXBzLiBJIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igb3BlcmF0ZXMsIGFsb25nIHdpdGggYW55IHRyYW5zYWN0aW9uLXJlbGF0ZWQgaW1wbGljYXRpb25zLiBBbHNvLCB3aGF0IGhhcHBlbnMgaW4gYG5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwYD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0IGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AgdG8gc2VlIGhvdyBpdCBtaWdodCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gVGhpcyBpcyBsaWtlbHkgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGJ1dCB0aGUgaW1wbGljYXRpb25zIG9uIGxpc3QgbWFuYWdlbWVudCBuZWVkIGEgY2xvc2VyIGxvb2suIEkgcmVhbGx5IGhvcGUgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGtub3dzIGhvdyB0byBoYW5kbGUgbGlzdHMgb2YgZXhwaXJlZCBlbGVtZW50cyBpbiB0aGlzIG1hbm5lci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMjEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTY6MzguOTg4NDQyODY3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTYwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTYwOlxcdFxcdFxcdGlmIChvdmVycmlkZV9leHBycylcXG42OTYxOlxcdFxcdFxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcXG42OTYyOlxcdFxcbjY5NjM6XFx0XFx0XFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XFxuNjk2NDpcXHRcXHR9XFxuNjk2NTpcXHRcXG42OTY2OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjY5Njc6XFx0fVxcbjY5Njg6XFx0XFxuNjk2OTpcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG42OTcwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbjY5NzE6XFx0e1xcbjY5NzI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNjk3MzpcXHRcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XFxuNjk3NDpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG42OTc1OlxcdFxcbjY5NzY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG42OTc3OlxcdFxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxuNjk3ODpcXHRcXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxuNjk3OTpcXHRcXHRcXHQgICAgIW5mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCkgXFx1MDAyNlxcdTAwMjZcXG42OTgwOlxcdFxcdFxcdCAgICAhbmZ0X3NldF9lbGVtX2lzX2RlYWQoZXh0KSlcXG42OTgxOlxcdFxcdFxcdFxcdHJldHVybiBleHQ7XFxuNjk4MjpcXHRcXHR9XFxuNjk4MzpcXHRcXG42OTg0OlxcdFxcdHJldHVybiBOVUxMO1xcbjY5ODU6XFx0fVxcbjY5ODY6XFx0XFxuNjk4NzpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNjk4ODpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG42OTg5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLFxcbjY5OTA6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqcHJpdilcXG42OTkxOlxcdHtcXG42OTkyOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbjY5OTM6XFx0XFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG42OTk0OlxcdFxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxNjozOC45ODg5MDcyNzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjk4MzAzMDc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipFeGFtaW5pbmcgQ2F0Y2hhbGwgRWxlbWVudCBHYXJiYWdlIENvbGxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MgZm9yIFwiY2F0Y2hhbGxcIiBlbGVtZW50cyBpbiB0aGlzIGBuZnRhYmxlc2AgY29udGV4dC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBsb29rIGF0IHRoZSBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlc2UgZWxlbWVudHMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb3V0IGBuZnRfc2V0X2NhdGNoYWxsX2djYCBhbmQgYG5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jYC4gSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIGhhbmRsaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiByZWxhdGVkIHRvIHRoZXNlIHNwZWNpYWwgXCJjYXRjaGFsbFwiIGVsZW1lbnRzLiBNeSBnb2FsIGlzIHRvIG1hcCBvdXQgd2hlcmUgdGhlc2UgY2F0Y2hhbGwgZWxlbWVudHMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgc3lzdGVtIGFuZCwgY3J1Y2lhbGx5LCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBnYXJiYWdlIGNvbGxlY3RvciBpcyB0cmlnZ2VyZWQgYW5kIHdoYXQgY3JpdGVyaWEgZGV0ZXJtaW5lIHdoZW4gdGhvc2UgZWxlbWVudHMgYXJlIGNvbnNpZGVyZWQgZWxpZ2libGUgZm9yIGNvbGxlY3Rpb24uIEhvcGVmdWxseSwgYnkgdHJhY2tpbmcgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMsIEkgY2FuIGdhaW4gYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgY2F0Y2hhbGwgZWxlbWVudHMgYW5kIGhvdyB0aGVpciBtZW1vcnkgaXMgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE2OjQxLjk3MTk0MTE1MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc3NzI1OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNhdGNoYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTgzNz1zdGF0aWMgaW50IG5mdF9tYXBlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg1Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NTM6c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODU0LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODU4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg1OTpzdGF0aWMgdm9pZCBuZnRfbWFwX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg2Mi1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXFx1MDAzZW5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODYzOlxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg2NC1cXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODY2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4Njc6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NjgtXFx0XFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzEtXFx0XFx0bmZ0X3NldF9lbGVtX2NoYW5nZV9hY3RpdmUoY3R4LVxcdTAwM2VuZXQsIHNldCwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4NzI6XFx0XFx0bmZ0X3NldGVsZW1fZGF0YV9kZWFjdGl2YXRlKGN0eC1cXHUwMDNlbmV0LCBzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04NzMtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODgxPXN0YXRpYyB2b2lkIG5mdF9tYXBfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODkxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg5MjpcXHRuZnRfbWFwX2NhdGNoYWxsX2RlYWN0aXZhdGUoY3R4LCBzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5My19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MjUyPWludCBuZnRfc2V0ZWxlbV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI4NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0Mjg1OmludCBuZnRfc2V0X2NhdGNoYWxsX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI4Ni17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00Mjg5LVxcdH07XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDI5MDpcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MjkxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDI5NC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0Mjk1OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQyOTYtXFx0XFx0XFx0XFx0bG9ja2RlcF9jb21taXRfbG9ja19pc19oZWxkKGN0eC1cXHUwMDNlbmV0KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQyOTc6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00Mjk4LVxcdFxcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGR1bW15X2l0ZXIuZ2VubWFzaykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzAwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQzMDE6XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fdmFsaWRhdGUoY3R4LCBzZXQsIFxcdTAwMjZkdW1teV9pdGVyLCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDMwMi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU0MzY9c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NjgzLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzZXQtXFx1MDAzZWJpbmRpbmdzKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1Njg0OlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU2ODUtXFx0cmVmY291bnRfc2V0KFxcdTAwMjZzZXQtXFx1MDAzZXJlZnMsIDEpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc0MC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQxOnN0YXRpYyB2b2lkIG5mdF9zZXRfY2F0Y2hhbGxfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDMte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU3NDQ6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqbmV4dCwgKmNhdGNoYWxsO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NDUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTc0NjpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2F0Y2hhbGwsIG5leHQsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQ3OlxcdFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Y2F0Y2hhbGwtXFx1MDAzZWxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU3NDg6XFx0XFx0bmZfdGFibGVzX3NldF9lbGVtX2Rlc3Ryb3koY3R4LCBzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzQ5OlxcdFxcdGtmcmVlX3JjdShjYXRjaGFsbCwgcmN1KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NzUwLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU3NjE9c3RhdGljIHZvaWQgbmZ0X3NldF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NzcxLVxcdHNldC1cXHUwMDNlb3BzLVxcdTAwM2VkZXN0cm95KGN0eCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1NzcyOlxcdG5mdF9zZXRfY2F0Y2hhbGxfZGVzdHJveShjdHgsIHNldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc3My1cXHRuZnRfc2V0X3B1dChzZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NTg0Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19iaW5kX2NoZWNrX3NldGVsZW0oY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NTgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTg1OTpzdGF0aWMgaW50IG5mdF9zZXRfY2F0Y2hhbGxfYmluZF9jaGVjayhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NjAtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01ODYyLVxcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KGN0eC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1ODYzOlxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NjQtXFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01ODY2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU4Njc6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTg2OC1cXHRcXHRcXHRcXHRsb2NrZGVwX2NvbW1pdF9sb2NrX2lzX2hlbGQoY3R4LVxcdTAwM2VuZXQpKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTg2OTpcXHRcXHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NzAtXFx0XFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01ODcyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU4NzM6XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fZGF0YV92YWxpZGF0ZShjdHgsIHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU4NzQtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01ODgxPWludCBuZl90YWJsZXNfYmluZF9zZXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5MDUtXFx0XFx0aWYgKCFpdGVyLmVycilcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTA2OlxcdFxcdFxcdGl0ZXIuZXJyID0gbmZ0X3NldF9jYXRjaGFsbF9iaW5kX2NoZWNrKGN0eCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTA3LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NTk0MD1zdGF0aWMgaW50IG5mdF9tYXBlbGVtX2FjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTU2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NTc6c3RhdGljIHZvaWQgbmZ0X21hcF9jYXRjaGFsbF9hY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NTgtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NjAtXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQoY3R4LVxcdTAwM2VuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjE6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTk2Mi1cXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjQ6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5NjU6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTY2LVxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTY5LVxcdFxcdG5mdF9jbGVhcihjdHgtXFx1MDAzZW5ldCwgZXh0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1OTcwOlxcdFxcdG5mdF9zZXRlbGVtX2RhdGFfYWN0aXZhdGUoY3R4LVxcdTAwM2VuZXQsIHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU5NzEtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NTk3ND1zdGF0aWMgdm9pZCBuZnRfbWFwX2FjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01OTg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU5ODU6XFx0bmZ0X21hcF9jYXRjaGFsbF9hY3RpdmF0ZShjdHgsIHNldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTk4Ni19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02MjY2PXN0cnVjdCBuZnRfc2V0X2R1bXBfY3R4IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYyNzEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NjI3MjpzdGF0aWMgaW50IG5mdF9zZXRfY2F0Y2hhbGxfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI3My1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwgYm9vbCByZXNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYyNzUte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYyNzY6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI3Ny1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02MjgwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYyODE6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2MjgyOlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI4My1cXHRcXHRpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSB8fFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI4Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2Mjg3OlxcdFxcdHJldCA9IG5mX3RhYmxlc19maWxsX3NldGVsZW0oc2tiLCBzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtLCByZXNldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjI4OC1cXHRcXHRpZiAocmVzZXQgXFx1MDAyNlxcdTAwMjYgIXJldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTYyOTY9c3RhdGljIGludCBuZl90YWJsZXNfZHVtcF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjM2Ni1cXHRpZiAoIWFyZ3MuaXRlci5lcnIgXFx1MDAyNlxcdTAwMjYgYXJncy5pdGVyLmNvdW50ID09IGNiLVxcdTAwM2VhcmdzWzBdKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjYzNjc6XFx0XFx0YXJncy5pdGVyLmVyciA9IG5mdF9zZXRfY2F0Y2hhbGxfZHVtcChuZXQsIHNrYiwgc2V0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTYzNjgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZHVtcF9jdHgtXFx1MDAzZXJlc2V0LCBjYi1cXHUwMDNlc2VxKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY0Nzc9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9wYXJzZV9kYXRhKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NDk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY0OTc6c3RhdGljIHZvaWQgKm5mdF9zZXRlbGVtX2NhdGNoYWxsX2dldChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjQ5OC1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY0OTkte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY1MDA6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUwMS1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTA0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY1MDU6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NTA2OlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUwNy1cXHRcXHRpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSB8fFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUxMC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2NTExOlxcdFxcdHByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTEyLVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjUxOD1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2dldChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjUyNy1cXHR9IGVsc2Uge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY1Mjg6XFx0XFx0cHJpdiA9IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2dldChjdHgtXFx1MDAzZW5ldCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NTI5LVxcdFxcdGlmICghcHJpdilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTY5MjQ9c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk2OC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTY5OnN0cnVjdCBuZnRfc2V0X2V4dCAqbmZ0X3NldF9jYXRjaGFsbF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5NzAtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk3MS17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3MjpcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTczLVxcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19jdXIobmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5NzUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk3NjpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5Nzc6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTc4LVxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5ODYtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njk4NzpzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk4OC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTEte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5OTI6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5My1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTk3OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTk4OlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjk5OS1cXHRcXHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwMC1cXHRcXHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwMTpcXHRcXHRcXHQqcHJpdiA9IGNhdGNoYWxsLVxcdTAwM2VlbGVtO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDItXFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDA1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMDY6XFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAwNzpcXHRpZiAoIWNhdGNoYWxsKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDgtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAwOS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDEwOlxcdGNhdGNoYWxsLVxcdTAwM2VlbGVtID0gZWxlbS1cXHUwMDNlcHJpdjtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDExOlxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZjYXRjaGFsbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAxMi1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwMTY9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9pbnNlcnQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzAyNTpcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQobmV0LCBzZXQsIGVsZW0sIGVsZW1fcHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzAyNi1cXHRlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDMxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMzI6c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDMzLVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzA0ND1zdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9hY3RpdmF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDQ4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwNDk6XFx0aWYgKG5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHNldCwgZWxlbV9wcml2KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwNTAtXFx0XFx0bmZ0X2NsZWFyKG5ldCwgZXh0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwNjk9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2FkZChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDg4OnN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA4OS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5MS17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5MjpcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDkzLVxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5NS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MDk3OlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5OC1cXHRcXHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMDItXFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzEwMzpcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEwNC1cXHRcXHRuZnRfc2V0X2VsZW1fY2hhbmdlX2FjdGl2ZShuZXQsIHNldCwgZXh0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcxMjg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxMzQtXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxMzU6XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEzNi1cXHRlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDI6c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVzdHJveShzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTQzLXtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTQ0OlxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Y2F0Y2hhbGwtXFx1MDAzZWxpc3QpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNDU6XFx0a2ZyZWVfcmN1KGNhdGNoYWxsLCByY3UpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDYtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE0ODpzdGF0aWMgdm9pZCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9yZW1vdmUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNDktXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTEte1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcxNTI6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE1NDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2F0Y2hhbGwsIG5leHQsIFxcdTAwMjZzZXQtXFx1MDAzZWNhdGNoYWxsX2xpc3QsIGxpc3QpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTU1OlxcdFxcdGlmIChjYXRjaGFsbC1cXHUwMDNlZWxlbSA9PSBlbGVtX3ByaXYpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTU2OlxcdFxcdFxcdG5mdF9zZXRlbGVtX2NhdGNoYWxsX2Rlc3Ryb3koY2F0Y2hhbGwpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxNTctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MTYyPXN0YXRpYyB2b2lkIG5mdF9zZXRlbGVtX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MTY1LXtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3MTY2OlxcdGlmIChuZnRfc2V0ZWxlbV9pc19jYXRjaGFsbChzZXQsIGVsZW1fcHJpdikpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE2NzpcXHRcXHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9yZW1vdmUobmV0LCBzZXQsIGVsZW1fcHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzE2OC1cXHRlbHNlXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MTcyPXN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19yZW1vdmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxODctXFx0XFx0bmZ0X3NldGVsZW1fcmVtb3ZlKGN0eC1cXHUwMDNlbmV0LCB0ZS1cXHUwMDNlc2V0LCB0ZS1cXHUwMDNlZWxlbXNbaV0ucHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzE4ODpcXHRcXHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRlLVxcdTAwM2VzZXQsIHRlLVxcdTAwM2VlbGVtc1tpXS5wcml2KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcxODktXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlbmVsZW1zKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc3ODQ9c3RhdGljIGJvb2wgbmZ0X3RyYW5zX2VsZW1zX25ld19hYm9ydChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzc5OS1cXHRcXHRpZiAoIXRlLVxcdTAwM2VzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWJvcnRfc2tpcF9yZW1vdmFsIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzgwMDpcXHRcXHQgICAgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwodGUtXFx1MDAzZXNldCwgdGUtXFx1MDAzZWVsZW1zW2ldLnByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4MDEtXFx0XFx0XFx0bmZ0X3NldGVsZW1fcmVtb3ZlKGN0eC1cXHUwMDNlbmV0LCB0ZS1cXHUwMDNlc2V0LCB0ZS1cXHUwMDNlZWxlbXNbaV0ucHJpdik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzgwMi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3ODAzOlxcdFxcdGlmICghbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwodGUtXFx1MDAzZXNldCwgdGUtXFx1MDAzZWVsZW1zW2ldLnByaXYpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4MDQtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlbmVsZW1zKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4MTM9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1zX2Rlc3Ryb3lfYWJvcnQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4MjMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzgyNDpcXHRcXHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRlLVxcdTAwM2VzZXQsIHRlLVxcdTAwM2VlbGVtc1tpXS5wcml2KSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODI1LVxcdFxcdFxcdHRlLVxcdTAwM2VzZXQtXFx1MDAzZW5kZWFjdC0tO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzkyMz1zdGF0aWMgaW50IG5mdF9zZXRlbGVtX2ZsdXNoKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTUwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5NTE6c3RhdGljIGludCBfX25mdF9zZXRfY2F0Y2hhbGxfZmx1c2goY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk2Ny1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTY4OnN0YXRpYyBpbnQgbmZ0X3NldF9jYXRjaGFsbF9mbHVzaChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NjktXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3MS1cXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChjdHgtXFx1MDAzZW5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Nzk3MjpcXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2NhdGNoYWxsICpjYXRjaGFsbDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTczLVxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk3NS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTc2OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5NzctXFx0XFx0XFx0XFx0bG9ja2RlcF9jb21taXRfbG9ja19pc19oZWxkKGN0eC1cXHUwMDNlbmV0KSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc5Nzg6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03OTc5LVxcdFxcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzk4MS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3OTgyOlxcdFxcdHJldCA9IF9fbmZ0X3NldF9jYXRjaGFsbF9mbHVzaChjdHgsIHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc5ODMtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03OTkxPXN0YXRpYyBpbnQgbmZ0X3NldF9mbHVzaChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LCB1OCBnZW5tYXNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwMy1cXHRpZiAoIWl0ZXIuZXJyKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjgwMDQ6XFx0XFx0aXRlci5lcnIgPSBuZnRfc2V0X2NhdGNoYWxsX2ZsdXNoKGN0eCwgc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04MDA1LVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA0OTU9c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2djX3RyYW5zX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDUwNi1cXHRcXHRlbGVtX3ByaXYgPSB0cmFucy1cXHUwMDNlcHJpdltpXTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDUwNzpcXHRcXHRpZiAoIW5mdF9zZXRlbGVtX2lzX2NhdGNoYWxsKHRyYW5zLVxcdTAwM2VzZXQsIGVsZW1fcHJpdikpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA1MDgtXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2dHJhbnMtXFx1MDAzZXNldC1cXHUwMDNlbmVsZW1zKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjQwPXZvaWQgbmZ0X3RyYW5zX2djX3F1ZXVlX3N5bmNfZG9uZShzdHJ1Y3QgbmZ0X3RyYW5zX2djICp0cmFucylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjUxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjUyOnN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9hc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY1My1cXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGdjX3NlcSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY1NC17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2NTU6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NTYtXFx0Y29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCA9IGdjLVxcdTAwM2VzZXQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY1OC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY1OTpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjYwOlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2NjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY3Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY3MzpcXHRcXHRuZnRfdHJhbnNfZ2NfZWxlbV9hZGQoZ2MsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY3NC1cXHR9XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY3OC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY3OTpzdHJ1Y3QgbmZ0X3RyYW5zX2djICpuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYyhzdHJ1Y3QgbmZ0X3RyYW5zX2djICpnYylcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY4MC17XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2ODE6XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjgyLVxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChnYy1cXHUwMDNlbmV0KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNjg4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjg5OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYXRjaGFsbCwgbmV4dCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjkwOlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cXHUwMDNlZWxlbSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5OC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDY5OTpcXHRcXHRlbGVtX3ByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMC1cXHRcXHRuZnRfc2V0ZWxlbV9kYXRhX2RlYWN0aXZhdGUoZ2MtXFx1MDAzZW5ldCwgZ2MtXFx1MDAzZXNldCwgZWxlbV9wcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDcwMTpcXHRcXHRuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZXN0cm95KGNhdGNoYWxsKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDcwMi1cXHRcXHRuZnRfdHJhbnNfZ2NfZWxlbV9hZGQoZ2MsIGVsZW1fcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE2OjQyLjU0OTY3MTU3MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NzY3MjI3NDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogbmZfdGFibGVzIENhdGNoYWxsIEVsZW1lbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBkZWFsaW5nIHdpdGggY2F0Y2hhbGwgZWxlbWVudHMgaW4gYG5mX3RhYmxlc2Agc2V0cy4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGJlY2F1c2UgaW5zZXJ0aW5nIGEgY2F0Y2hhbGwgZWxlbWVudCB3aGVuIHRoZXJlIHdhcyBhbiBleHBpcmVkIG9uZSBwcmVzZW50IHVzZWQgdG8gY2F1c2UgaXNzdWVzIChyZXR1cm5pbmcgYC1FRVhJU1RgIGluY29ycmVjdGx5LCBvciBkZWFjdGl2YXRpbmcgdGhlIGV4cGlyZWQgZWxlbWVudCBpbnN0ZWFkIG9mIHRoZSBhY3RpdmUgb25lKS4gVGhpcyBoYXMgdG91Y2hlZCBleGVjdXRhYmxlIGxvZ2ljIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3Q6IGlzIHRoaXMgZXZlbiBmdXp6YWJsZT8gQWJzb2x1dGVseS4gYG5mX3RhYmxlc2AgaXMgY29yZSwgcmVhY2hhYmxlIGJ5IHVucHJpdmlsZWdlZCB1c2VycyBpbiB1c2VyIG5hbWVzcGFjZXMgKHRocm91Z2ggYENMT05FX05FV1VTRVIgfCBDTE9ORV9ORVdORVRgKSBvciwgbW9yZSBjb21tb25seSwgYnkgcm9vdCBhbmQgdGhvc2Ugd2l0aCBgQ0FQX05FVF9BRE1JTmAuIFRoaXMgbWFrZXMgaXQgcHJpbWUgc3l6a2FsbGVyIHRlcnJpdG9yeSDigJMgYSB3ZWxsLWtub3duIGJ1Zy1wcm9uZSBzdWJzeXN0ZW0uIFNvLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IGB0cnVlYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRlZmluaW5nIG15IGBGb2N1c1N5bWJvbHNgLiBMZXQncyBzZWUsIHRoZSBmdW5jdGlvbnMgdG91Y2hlZCBhcmUgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydGAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYC4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhvc2UgdGhlIHJpZ2h0IGxldmVsIG9mIGdyYW51bGFyaXR5IGZvciB0aGUgZnV6emVyPyBMZXQncyBub3QgZm9yZ2V0IHRoZSBmdXp6aW5nIGd1aWRlbGluZXMhIFRoZXkgc3RhdGUgdG8gbGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhbHRlcmVkLCBvciB0aGUgZGlyZWN0IEFQSSBlbnRyeXBvaW50cy4gQWxzbywgbGV0J3MgYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgZnV6emVyIGZyb20gYmVpbmcgZGlsdXRlZC4gU28sIGFyZSB0aGVzZSBpdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgbWlnaHQgYmUgaW5saW5lZC5cblxuSGFuZyBvbi4gSSBzZWUgdGhleSdyZSBkZWNsYXJlZCBhcyBgc3RhdGljYCBmdW5jdGlvbnM6IGBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCguLi4pYCBhbmQgYHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSguLi4pYC4gQ291bGQgdGhlIGNvbXBpbGVyIGhhdmUgaW5saW5lZCB0aGVtPyBHaXZlbiB0aGV5J3JlIG9ubHkgY2FsbGVkICpvbmNlKiBlYWNoLCBmcm9tIGBuZnRfc2V0ZWxlbV9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAgcmVzcGVjdGl2ZWx5LCBpdCdzIHZlcnkgcG9zc2libGUuXG5cbk9rYXksIHNvIHdoYXQgKmFyZSogdGhlIGFjdHVhbCBlbnRyeXBvaW50cz8gSSBoYXZlIHRvIGNvbnNpZGVyOlxuKiAgIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgXG4qICAgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgXG4qICAgYG5mdF9zZXRlbGVtX2luc2VydGBcbiogICBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWBcbiogICBgbmZfdGFibGVzX25ld3NldGVsZW1gXG4qICAgYG5mX3RhYmxlc19kZWxzZXRlbGVtYFxuXG5TbywgbGV0J3MgaW5jbHVkZSBib3RoIHRoZSBjb3JlIGNhdGNoYWxsIGZ1bmN0aW9ucyBhbmQgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgc2NvcGUsIGFuZCBJJ2xsIG1ha2Ugc3VyZSB0byBjaGVjayB3aGF0IG90aGVyIHN5bWJvbHMgZXhpc3QgaW4gYG5mX3RhYmxlc19hcGkuY2AgYXJvdW5kIGBuZXdzZXRlbGVtYCBhbmQgYGRlbHNldGVsZW1gLiBUaGlzIHdpbGwgZ2l2ZSB0aGUgZnV6emVyIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNTksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTc6NTAuMjIxOTQ4ODExWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQxNzk2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzXyhuZXd8ZGVsKXNldGVsZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzI0OT1zdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc2NjctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzY2ODpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2OS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Nzk5MT1zdGF0aWMgaW50IG5mdF9zZXRfZmx1c2goc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwgdTggZ2VubWFzaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTgwMDgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODAwOTpzdGF0aWMgaW50IG5mX3RhYmxlc19kZWxzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAxMC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDQyLVxcdFtORlRfTVNHX05FV1NFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDQzOlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfbmV3c2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0NC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDYwLVxcdFtORlRfTVNHX0RFTFNFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDYxOlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsc2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2Mi1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDY2LVxcdFtORlRfTVNHX0RFU1RST1lTRVRFTEVNXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA2NzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX2RlbHNldGVsZW0sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjgtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE3OjUwLjUyNjEzNDA2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTkxMjc5NzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gncyBTY29wZSoqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgZGVmaW5pdGVseSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBJIG5lZWQgdG8gZW5zdXJlIG15IGZvY3VzIGlzIHByZWNpc2UuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlaXIgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgd291bGQgYmUgYG5mdF9zZXRlbGVtX2luc2VydGAsIGBuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlYCwgYG5mX3RhYmxlc19uZXdzZXRlbGVtYCwgYW5kIGBuZl90YWJsZXNfZGVsc2V0ZWxlbWAuIFxuXG5Ob3csIGhvdyBncmFudWxhciBkbyBJIG5lZWQgdG8gYmUgd2l0aCB0aGUga2V5IGZ1bmN0aW9ucyB0byBpbmNsdWRlPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gRm9jdXNpbmcgb24gdGhlIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5IHBvaW50cywgSSBoYXZlOiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCwgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLCBgbmZfdGFibGVzX25ld3NldGVsZW1gLCBhbmQgYG5mX3RhYmxlc19kZWxzZXRlbGVtYC5cblxuSG9sZCBvbi4uLiB3aGF0IGFib3V0IHRoZSB1c2VyLWZhY2luZyBlbnRyeXBvaW50czogYG5mdF9hZGRfc2V0X2VsZW1gIGFuZCBgbmZ0X2RlbF9zZXRlbGVtYD8gVGhvc2UgYXJlIGNydWNpYWwsIHRvby4gTGV0J3Mgc2VlIGlmIHRob3NlIGBjYXRjaGFsbGAgZnVuY3Rpb25zIG1pZ2h0IGJlIGlubGluZWQuIElmIHRoZXkgYXJlIGlubGluZWQsIHRoZW4gaW5jbHVkaW5nIGBuZnRfc2V0ZWxlbV9pbnNlcnRgLCBgbmZ0X2FkZF9zZXRfZWxlbWAsIG9yIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAgd291bGQgY2FwdHVyZSB0aGVtLiBcblxuQWxyaWdodCwgbGV0J3MgYnJvYWRlbiB0aGUgbmV0IGEgYml0LCBqdXN0IHRvIGJlIHN1cmU6XG5cbiogICBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YFxuKiAgIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlYFxuKiAgIGBuZnRfc2V0ZWxlbV9pbnNlcnRgXG4qICAgYG5mdF9zZXRlbGVtX2RlYWN0aXZhdGVgXG4qICAgYG5mdF9hZGRfc2V0X2VsZW1gXG4qICAgYG5mdF9kZWxfc2V0ZWxlbWBcblxuQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaXMgc2V0LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGlzIGVuYWJsZWQuIFdhaXQsIGRvZXMgdGhhdCBvcHRpb24gZGVwZW5kIG9uIGFueXRoaW5nIGVsc2U/IEkgc2hvdWxkIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFyb3VuZCBgY29uZmlnIE5GX1RBQkxFU2AgKGFyb3VuZCBsaW5lIDQ1NSkuIEknbGwgc2NhbiBhIHdpZGVyIHJhbmdlLCBzYXkgbGluZXMgNDQwIHRvIDQ3MCwganVzdCB0byBiZSBzdXJlIEkgZG9uJ3Qgb3Zlcmxvb2sgYW55IGRlcGVuZGVuY2llcyBvciByZWxldmFudCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUwNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxODo1MC40Mzg5MzQxMTVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NDAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDA6XFx0XFxuIDQ0MTpcXHRjb25maWcgTkZfTkFUX1JFRElSRUNUXFxuIDQ0MjpcXHRcXHRib29sXFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdGNvbmZpZyBORl9OQVRfTUFTUVVFUkFERVxcbiA0NDU6XFx0XFx0Ym9vbFxcbiA0NDY6XFx0XFxuIDQ0NzpcXHRjb25maWcgTkZfTkFUX09WU1xcbiA0NDg6XFx0XFx0Ym9vbFxcbiA0NDk6XFx0XFxuIDQ1MDpcXHRjb25maWcgTkVURklMVEVSX1NZTlBST1hZXFxuIDQ1MTpcXHRcXHR0cmlzdGF0ZVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHRlbmRpZiAjIE5GX0NPTk5UUkFDS1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRjb25maWcgTkZfVEFCTEVTXFxuIDQ1NjpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gNDU3OlxcdFxcdHNlbGVjdCBORVRfQ1JDMzJDXFxuIDQ1ODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiA0NTk6XFx0XFx0aGVscFxcbiA0NjA6XFx0XFx0ICBuZnRhYmxlcyBpcyB0aGUgbmV3IHBhY2tldCBjbGFzc2lmaWNhdGlvbiBmcmFtZXdvcmsgdGhhdCBpbnRlbmRzIHRvXFxuIDQ2MTpcXHRcXHQgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHtpcCxpcDYsYXJwLGVifV90YWJsZXMgaW5mcmFzdHJ1Y3R1cmUuIEl0XFxuIDQ2MjpcXHRcXHQgIHByb3ZpZGVzIGEgcHNldWRvLXN0YXRlIG1hY2hpbmUgd2l0aCBhbiBleHRlbnNpYmxlIGluc3RydWN0aW9uLXNldFxcbiA0NjM6XFx0XFx0ICAoYWxzbyBrbm93biBhcyBleHByZXNzaW9ucykgdGhhdCB0aGUgdXNlcnNwYWNlICduZnQnIHV0aWxpdHlcXG4gNDY0OlxcdFxcdCAgKGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbmZ0YWJsZXMpIHVzZXMgdG8gYnVpbGQgdGhlXFxuIDQ2NTpcXHRcXHQgIHJ1bGUtc2V0LiBJdCBhbHNvIGNvbWVzIHdpdGggdGhlIGdlbmVyaWMgc2V0IGluZnJhc3RydWN0dXJlIHRoYXRcXG4gNDY2OlxcdFxcdCAgYWxsb3dzIHlvdSB0byBjb25zdHJ1Y3QgbWFwcGluZ3MgYmV0d2VlbiBtYXRjaGluZ3MgYW5kIGFjdGlvbnNcXG4gNDY3OlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlIGxvb2t1cHMuXFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNDcwOlxcdFxcbiA0NzE6XFx0aWYgTkZfVEFCTEVTXFxuIDQ3MjpcXHRjb25maWcgTkZfVEFCTEVTX0lORVRcXG4gNDczOlxcdFxcdGRlcGVuZHMgb24gSVBWNlxcbiA0NzQ6XFx0XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjE4OjUwLjQzOTA1OTAwNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjc3MTgyNzQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHNvIGBORl9UQUJMRVNgIGl0c2VsZiBkb2Vzbid0IGV4cGxpY2l0bHkgKmRlcGVuZCBvbiogYW55dGhpbmcgZWxzZSBpbiB0aGUgc3RhbmRhcmQgS2NvbmZpZyBzZW5zZS4gQnV0LCBpdCdzIG5lc3RlZCB3aXRoaW4gdGhlIFwiQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblwiIG1lbnUuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBwYXJ0IG9mIGEgbGFyZ2VyLCBjb250ZXh0dWFsIGdyb3VwaW5nLiBBbmQgdGhhdCBtZW51IGlzICpndWFyZGVkKiBieSB0aGUgYE5FVEZJTFRFUmAgc3ltYm9sLCB3aGljaCBtZWFucyBlbmFibGluZyBgTkZfVEFCTEVTYCBoaW5nZXMgb24gYE5FVEZJTFRFUmAgYmVpbmcgYWN0aXZlLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIHNob3VsZCBwcm9iYWJseSBnbGFuY2UgYXQgdGhlIHN0YXJ0IG9mIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSB2YXJpb3VzIGNvbXBvbmVudHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBBbHdheXMgZ29vZCB0byBoYXZlIHRoZSBmdWxsIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoxOToxMy4yMTA4ODk1MzZaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudSBcXFwiQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBORVRGSUxURVJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXFxuICAgNjpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgaW5ncmVzcyBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRzZWxlY3QgTkVUX0lOR1JFU1NcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgZnJvbSBpbmdyZXNzIHVzaW5nIHRoZSBOZXRmaWx0ZXJcXG4gIDExOlxcdFxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGNvbmZpZyBORVRGSUxURVJfRUdSRVNTXFxuICAxNDpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgZWdyZXNzIHN1cHBvcnRcXFwiXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfRUdSRVNTXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGJlZm9yZSB0cmFuc21pc3Npb24gdXNpbmcgdGhlXFxuICAxOTpcXHRcXHQgIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xcbiAgMjI6XFx0XFx0ZGVmX2Jvb2wgTkVURklMVEVSX0VHUkVTUyBcXHUwMDI2XFx1MDAyNiAoTkVUX0NMU19BQ1QgfHwgSUZCKVxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktcXG4gIDI1OlxcdFxcdGJvb2xcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFXFxuICAyODpcXHRcXHRib29sXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxcbiAgMzE6XFx0XFx0Ym9vbFxcbiAgMzI6XFx0XFxuICAzMzpcXHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXFxuICAzNDpcXHRcXHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxcbiAgMzU6XFx0XFxuICAzNjpcXHRjb25maWcgTkVURklMVEVSX05FVExJTktfSE9PS1xcbiAgMzc6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTkZfVEFCTEVTXFxuICA0MDpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MTk6MTMuMjExMDEwMjc2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ4Njc3MzUwMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBuZl90YWJsZXNgIFBhdGNoKipcblxuT2theSwgaGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcy4gVGhpcyBgbmZfdGFibGVzYCBwYXRjaCBjbGVhcmx5IGhpbmdlcyBvbiBgSU5FVGAgYW5kIGBORVRGSUxURVJgLCBidXQgYE5FVEZJTFRFUmAgaXMgcHJldHR5IG11Y2ggc3RhbmRhcmQgbmV0d29ya2luZywgc28gcmVhbGx5LCBpdCdzIGFib3V0IHRob3NlIGtleSBgTkZfVEFCTEVTYCBjb25maWd1cmF0aW9ucy4gRmlyc3Qgc3RlcCwgY29uZmlybSB0aGF0IGBORl9UQUJMRVNgIGJ1aWxkcyBgbmZfdGFibGVzX2FwaS5vYCBieSBjaGVja2luZyB0aGUgTWFrZWZpbGUuIFllcCwgbGluZSAxMDggb2YgYG5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVgOiBgb2JqLSQoQ09ORklHX05GX1RBQkxFUykgKz0gbmZfdGFibGVzLm9gIGFuZCBgbmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gLi4uYCBjb25maXJtcyBpdC4gQW5kIGBORl9UQUJMRVNgIGlzIGEgY2hpbGQgb2YgYE5FVEZJTFRFUmAuXG5cbk5vdywgbGV0J3MgZGl2ZSBkZWVwZXIuIElzIHRoaXMgcGF0Y2ggYWN0dWFsbHkgaW4gY29kZSB0aGF0IGdldHMgcnVuPyBBYnNvbHV0ZWx5LiBJdCBtb2RpZmllcyBgbmZfdGFibGVzX2FwaS5jYCwgd2hpY2ggaGFuZGxlcyB0aG9zZSB1c2VyLXNwYWNlIG5ldGxpbmsgY29tbWFuZHMgdG8gY29uZmlndXJlIG5mdGFibGVzLiBXZSdyZSB0YWxraW5nIGFib3V0IHRob3NlIHNwZWNpZmljIHNldCBlbGVtZW50cywgdGhlIGNhdGNoYWxsIG9uZXMsIHdpdGggdGltZW91dHMuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIHRvIGhhbmRsZSBlbGVtZW50IGV4cGlyYXRpb24gdXNpbmcgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYC4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogY2hhbmdlIGluIGhvdyBjYXRjaGFsbCBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgKGF2b2lkaW5nIC1FRVhJU1QgZm9yIGV4cGlyZWQgZWxlbWVudHMpIGFuZCBkZWFjdGl2YXRlZCAoc2tpcHBpbmcgZXhwaXJlZCBlbGVtZW50cykuXG5cbkdpdmVuIHRoZSBoaXN0b3J5IG9mIGJ1Z3MgaW4gbmZfdGFibGVzIHNldCBzdGF0ZSBoYW5kbGluZywgZXNwZWNpYWxseSB0aGUgbGlmZWN5Y2xlIHRyYW5zaXRpb25zIHJlbGF0ZWQgdG8gZXhwaXJhdGlvbiwgSSdtIGFscmVhZHkgc2VlaW5nIHNvbWUgcG90ZW50aWFsIHJlZCBmbGFncy4gUmFjZSBjb25kaXRpb25zLCBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMsIG9yIGV2ZW4gdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgc2NlbmFyaW9zIGFyZSBwbGF1c2libGUgd2l0aCB0aGlzIGtpbmQgb2YgY2hhbmdlLlxuXG5TbywgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHBhcmFtZXRlcnMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBoaWdobGlnaHQgdGhlIG5mX3RhYmxlcyBzZXQgZWxlbWVudCBsaWZlY3ljbGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGV4cGlyYXRpb24gaGFuZGxpbmcgaW4gcmVhY2hhYmxlIG5ldGZpbHRlciBuZXRsaW5rIGNvZGUsIHBvaW50aW5nIG91dCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMsIHN0YXRlIGluY29uc2lzdGVuY2llcywgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZS9kb3VibGUtZnJlZSB3aXRoIGNhdGNoYWxsIGVsZW1lbnRzLiBXZSdsbCBmb2N1cyB0aGUgZnV6emluZyBvbiB0aGVzZSBmdW5jdGlvbnM6IGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgLCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAsIGBuZnRfc2V0ZWxlbV9pbnNlcnRgLCBgbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZWAsIGBuZnRfYWRkX3NldF9lbGVtYCwgYW5kIGBuZnRfZGVsX3NldGVsZW1gLiBBbmQgb2YgY291cnNlLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgTkVURklMVEVSYCBhbmQgYE5GX1RBQkxFU2AuXG5cblRoYXQncyBpdC4gSXQncyBhbGwgY2xlYXIuIEknbSBzYXRpc2ZpZWQuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1OTMsIk91dHB1dFRva2VucyI6MjAxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MjA6MDEuODg4MzYzNDExWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzNzM2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0XCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlXCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9pbnNlcnRcIixcbiAgICBcIm5mdF9zZXRlbGVtX2RlYWN0aXZhdGVcIixcbiAgICBcIm5mdF9hZGRfc2V0X2VsZW1cIixcbiAgICBcIm5mdF9kZWxfc2V0ZWxlbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNhdGNoYWxsIHNldCBlbGVtZW50IGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIGxvZ2ljIGluIG5mX3RhYmxlcyAobmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMpIHRvIHRha2UgZWxlbWVudCBleHBpcmF0aW9uIGludG8gYWNjb3VudCB2aWEgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpLiBuZl90YWJsZXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBhbmQgc2V0IGVsZW1lbnQgbGlmZWN5Y2xlL2V4cGlyYXRpb24gaGFuZGxpbmcgaXMgcHJvbmUgdG8gc3RhdGUgaW5jb25zaXN0ZW5jaWVzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCByZWZlcmVuY2UgY291bnRpbmcvdXNlLWFmdGVyLWZyZWUgYnVncy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGlzIGFsdGVyZWQgc3RhdGUgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydFwiLFxuICAgIFwibmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZVwiLFxuICAgIFwibmZ0X3NldGVsZW1faW5zZXJ0XCIsXG4gICAgXCJuZnRfc2V0ZWxlbV9kZWFjdGl2YXRlXCIsXG4gICAgXCJuZnRfYWRkX3NldF9lbGVtXCIsXG4gICAgXCJuZnRfZGVsX3NldGVsZW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjYXRjaGFsbCBzZXQgZWxlbWVudCBpbnNlcnRpb24gYW5kIGRlYWN0aXZhdGlvbiBsb2dpYyBpbiBuZl90YWJsZXMgKG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jKSB0byB0YWtlIGVsZW1lbnQgZXhwaXJhdGlvbiBpbnRvIGFjY291bnQgdmlhIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKS4gbmZfdGFibGVzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgYW5kIHNldCBlbGVtZW50IGxpZmVjeWNsZS9leHBpcmF0aW9uIGhhbmRsaW5nIGlzIHByb25lIHRvIHN0YXRlIGluY29uc2lzdGVuY2llcywgcmFjZSBjb25kaXRpb25zLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nL3VzZS1hZnRlci1mcmVlIGJ1Z3MuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhpcyBhbHRlcmVkIHN0YXRlIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIwOjAxLjk3MDc0NjI1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODA2NzM1MDY1NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoyMDowMS45NzEyNTg2NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjc4MDY3Mjk5MDgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBleHBpcmF0aW9uIGNoZWNrcyB2aWEgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCB0byBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KClgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZSgpYCBpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLCBtYXRjaGluZyB0aGUgZXhwaXJhdGlvbiBjaGVjayBzZW1hbnRpY3MgdXNlZCBpbiBvdGhlciBzZXQgdHlwZXMgKHN1Y2ggYXMgaGFzaCwgcmJ0cmVlLCBhbmQgcGlwYXBvKS5cXG5cXG4tIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuYWx5c2lzOiBUaGUgbG9jYWwgdmFyaWFibGUgYHRzdGFtcGAgaXMgYW4gZXhwbGljaXRseSBpbml0aWFsaXplZCA2NC1iaXQgdGltZXN0YW1wIChgdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldClgKS4gVGhlIHNldCBlbGVtZW50IGV4dGVuc2lvbiBpbnNwZWN0ZWQgYnkgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBpbiBgbmZ0X3NldF9lbGVtX2luaXQoKWAsIHdoZXJlIGB0aW1lb3V0YCBhbmQgYGV4cGlyYXRpb25gIGZpZWxkcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoKWAgZmlyc3QgY29uZmlybXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYE5GVF9TRVRfRVhUX1RJTUVPVVRgIGV4dGVuc2lvbiBiZWZvcmUgcmVhZGluZyB0aGVzZSBmaWVsZHMuXFxuLSBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OiBGYWlsaW5nIHRvIGNoZWNrIGV4cGlyYXRpb24gZm9yIGNhdGNoYWxsIGVsZW1lbnRzIHByZXZpb3VzbHkgcmlza2VkIGxvZ2ljYWwgZXJyb3JzICgtRUVYSVNUIG9uIGluc2VydCkgYW5kIGxpZmVjeWNsZSBidWdzIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgLyBkb3VibGUtZnJlZSBpZiBkZWFjdGl2YXRpb24gcmFjZWQgd2l0aCBHQyBlbGVtZW50IHJlY2xhbWF0aW9uIChgbmZ0X3RyYW5zX2djX2NhdGNoYWxsX3N5bmMoKWApLiBNZW1vcnkgc2FmZXR5IGlzc3VlcyBvZiB0aGlzIHR5cGUgKFVBRiwgZG91YmxlLWZyZWUpIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLiBObyBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBwYXJ0aWFsIHN0cnVjdHVyZSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYjBiN2MxZWI0OTM0MjdlODQ0NzY2NGU3MWU5NWNhMzIxYzk0MGZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTM6MTE6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCA3NjVhOTJmYTkwZDYyLi43ZWYyZTE5ZTY2NTVhIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtNjk5MSwxMSArNjk5MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXG4ge1xuIFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG4gXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xuK1x0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG4gXHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbi1cdFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSkge1xuK1x0XHRpZiAobmZ0X3NldF9lbGVtX2FjdGl2ZShleHQsIGdlbm1hc2spIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKSB7XG4gXHRcdFx0KnByaXYgPSBjYXRjaGFsbC1cdTAwM2VlbGVtO1xuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHR9XG5AQCAtNzA4OCwxMSArNzA5MCwxMyBAQCBzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxuIHtcbiBcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xuK1x0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2F0Y2hhbGwsIFx1MDAyNnNldC1cdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XG4gXHRcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBjYXRjaGFsbC1cdTAwM2VlbGVtKTtcbi1cdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpKVxuK1x0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGV4dCkgfHxcbitcdFx0ICAgIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRrZnJlZShlbGVtLVx1MDAzZXByaXYpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MjA6MDEuOTcxMjU5N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzA4MDM1MDA5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGNvZGUuIE15IGluaXRpYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBUaW1lIHRvIHB1bGwgdXAgYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gSSB0aGluayBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBxdWljayBsb29rLCBvciBwZXJoYXBzIGBncmVwcGVyYCBpZiBJIG5lZWQgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBrZXl3b3JkcyBvciBmdW5jdGlvbnMgd2l0aGluIHRoYXQgZmlsZS4gSSBuZWVkIHRvIGVzdGFibGlzaCBhIHNvbGlkIGZvdW5kYXRpb24gYmVmb3JlIEkgc3RhcnQgcG9raW5nIGFyb3VuZCB3aXRoIHRoZSBkZXRhaWxzIG9mIHRoZSBwYXRjaCBpdHNlbGYuIFVuZGVyc3RhbmRpbmcgdGhlIFwid2h5XCIgd2lsbCBiZSBhcyBjcml0aWNhbCBhcyB0aGUgXCJ3aGF0LlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIyOjUyLjc3NDc2MzcyMloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk4MCxcbiAgXCJMaW5lQ291bnRcIjogMTMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY5ODA6XFx0XFx0XFx0ICAgICFuZnRfc2V0X2VsZW1faXNfZGVhZChleHQpKVxcbjY5ODE6XFx0XFx0XFx0XFx0cmV0dXJuIGV4dDtcXG42OTgyOlxcdFxcdH1cXG42OTgzOlxcdFxcbjY5ODQ6XFx0XFx0cmV0dXJuIE5VTEw7XFxuNjk4NTpcXHR9XFxuNjk4NjpcXHRcXG42OTg3OlxcdHN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG42OTg4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjY5ODk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0sXFxuNjk5MDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9lbGVtX3ByaXYgKipwcml2KVxcbjY5OTE6XFx0e1xcbjY5OTI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNjk5MzpcXHRcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbjY5OTQ6XFx0XFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxuNjk5NTpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG42OTk2OlxcdFxcbjY5OTc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjYXRjaGFsbCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCwgbGlzdCkge1xcbjY5OTg6XFx0XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGNhdGNoYWxsLVxcdTAwM2VlbGVtKTtcXG42OTk5OlxcdFxcdFxcdGlmIChuZnRfc2V0X2VsZW1fYWN0aXZlKGV4dCwgZ2VubWFzaykgXFx1MDAyNlxcdTAwMjZcXG43MDAwOlxcdFxcdFxcdCAgICAhX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpIHtcXG43MDAxOlxcdFxcdFxcdFxcdCpwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuNzAwMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG43MDAzOlxcdFxcdFxcdH1cXG43MDA0OlxcdFxcdH1cXG43MDA1OlxcdFxcbjcwMDY6XFx0XFx0Y2F0Y2hhbGwgPSBrbWFsbG9jX29iaigqY2F0Y2hhbGwsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuNzAwNzpcXHRcXHRpZiAoIWNhdGNoYWxsKVxcbjcwMDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzAwOTpcXHRcXG43MDEwOlxcdFxcdGNhdGNoYWxsLVxcdTAwM2VlbGVtID0gZWxlbS1cXHUwMDNlcHJpdjtcXG43MDExOlxcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZjYXRjaGFsbC1cXHUwMDNlbGlzdCwgXFx1MDAyNnNldC1cXHUwMDNlY2F0Y2hhbGxfbGlzdCk7XFxuNzAxMjpcXHRcXG43MDEzOlxcdFxcdHJldHVybiAwO1xcbjcwMTQ6XFx0fVxcbjcwMTU6XFx0XFxuNzAxNjpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNzAxNzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwMTg6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSxcXG43MDE5OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZnRfZWxlbV9wcml2ICoqZWxlbV9wcml2LFxcbjcwMjA6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxcbjcwMjE6XFx0e1xcbjcwMjI6XFx0XFx0aW50IHJldDtcXG43MDIzOlxcdFxcbjcwMjQ6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbjcwMjU6XFx0XFx0XFx0cmV0ID0gbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KG5ldCwgc2V0LCBlbGVtLCBlbGVtX3ByaXYpO1xcbjcwMjY6XFx0XFx0ZWxzZVxcbjcwMjc6XFx0XFx0XFx0cmV0ID0gc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWluc2VydChuZXQsIHNldCwgZWxlbSwgZWxlbV9wcml2KTtcXG43MDI4OlxcdFxcbjcwMjk6XFx0XFx0cmV0dXJuIHJldDtcXG43MDMwOlxcdH1cXG43MDMxOlxcdFxcbjcwMzI6XFx0c3RhdGljIGJvb2wgbmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG43MDMzOlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2KVxcbjcwMzQ6XFx0e1xcbjcwMzU6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgZWxlbV9wcml2KTtcXG43MDM2OlxcdFxcbjcwMzc6XFx0XFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0ZMQUdTKSBcXHUwMDI2XFx1MDAyNlxcbjcwMzg6XFx0XFx0ICAgICpuZnRfc2V0X2V4dF9mbGFncyhleHQpIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0NBVENIQUxMKVxcbjcwMzk6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNzA0MDpcXHRcXG43MDQxOlxcdFxcdHJldHVybiBmYWxzZTtcXG43MDQyOlxcdH1cXG43MDQzOlxcdFxcbjcwNDQ6XFx0c3RhdGljIHZvaWQgbmZ0X3NldGVsZW1fYWN0aXZhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcwNDU6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfZWxlbV9wcml2ICplbGVtX3ByaXYpXFxuNzA0NjpcXHR7XFxuNzA0NzpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtX3ByaXYpO1xcbjcwNDg6XFx0XFxuNzA0OTpcXHRcXHRpZiAobmZ0X3NldGVsZW1faXNfY2F0Y2hhbGwoc2V0LCBlbGVtX3ByaXYpKSB7XFxuNzA1MDpcXHRcXHRcXHRuZnRfY2xlYXIobmV0LCBleHQpO1xcbjcwNTE6XFx0XFx0fSBlbHNlIHtcXG43MDUyOlxcdFxcdFxcdHNldC1cXHUwMDNlb3BzLVxcdTAwM2VhY3RpdmF0ZShuZXQsIHNldCwgZWxlbV9wcml2KTtcXG43MDUzOlxcdFxcdH1cXG43MDU0OlxcdH1cXG43MDU1OlxcdFxcbjcwNTY6XFx0c3RhdGljIHZvaWQgbmZ0X3RyYW5zX2VsZW1fdXBkYXRlKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzA1NzpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfb25lX2VsZW0gKmVsZW0pXFxuNzA1ODpcXHR7XFxuNzA1OTpcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtLVxcdTAwM2Vwcml2KTtcXG43MDYwOlxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfZWxlbV91cGRhdGUgKnVwZGF0ZSA9IGVsZW0tXFx1MDAzZXVwZGF0ZTtcXG43MDYxOlxcdFxcbjcwNjI6XFx0XFx0aWYgKHVwZGF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVFJBTlNfVVBEX1RJTUVPVVQpXFxuNzA2MzpcXHRcXHRcXHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNldGltZW91dCwgdXBkYXRlLVxcdTAwM2V0aW1lb3V0KTtcXG43MDY0OlxcdFxcbjcwNjU6XFx0XFx0aWYgKHVwZGF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfVFJBTlNfVVBEX0VYUElSQVRJT04pXFxuNzA2NjpcXHRcXHRcXHRXUklURV9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNlZXhwaXJhdGlvbiwgZ2V0X2ppZmZpZXNfNjQoKSArIHVwZGF0ZS1cXHUwMDNlZXhwaXJhdGlvbik7XFxuNzA2NzpcXHR9XFxuNzA2ODpcXHRcXG43MDY5OlxcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19hZGQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG43MDcwOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGUpXFxuNzA3MTpcXHR7XFxuNzA3MjpcXHRcXHRpbnQgaTtcXG43MDczOlxcdFxcbjcwNzQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlLVxcdTAwM2VuZWxlbXM7IGkrKykge1xcbjcwNzU6XFx0XFx0XFx0c3RydWN0IG5mdF90cmFuc19vbmVfZWxlbSAqZWxlbSA9IFxcdTAwMjZ0ZS1cXHUwMDNlZWxlbXNbaV07XFxuNzA3NjpcXHRcXG43MDc3OlxcdFxcdFxcdGlmIChlbGVtLVxcdTAwM2V1cGRhdGUpXFxuNzA3ODpcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZWxlbV91cGRhdGUodGUtXFx1MDAzZXNldCwgZWxlbSk7XFxuNzA3OTpcXHRcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIyOjUyLjc3NTE0NDAzMloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODY0MTM4NzYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIEknbSB0aGUgb25lIGhhdmluZyB0aGVzZSB0aG91Z2h0cywgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBuZl90YWJsZXNfYXBpLmMgQ29kZSoqXG5cblJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgZXhhbWluZSBsaW5lcyA3MDgwIHRocm91Z2ggNzE0MCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc2VjdGlvbiBpbiBkZXRhaWwsIHByb2JhYmx5IHRvIGdyYXNwIGEgcGFydGljdWxhciBkYXRhIHN0cnVjdHVyZSBvciBpbnRlcmFjdGlvbiByZWxhdGVkIHRvIHRoZSBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIFdoYXQncyB0aGUgY29udGV4dD8gQXJlIHdlIGRlYWxpbmcgd2l0aCB0YWJsZSBjcmVhdGlvbiwgcnVsZSBtYW5pcHVsYXRpb24sIHNldCB1cGRhdGVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSB3aXRoaW4gdGhlIG5mX3RhYmxlcyBmcmFtZXdvcms/IElzIHRoaXMgd2hlcmUgd2UncmUgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXNlci1zcGFjZSBBUEksIG9yIHBlcmhhcHMgYW4gaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9uPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIOKAkyBjb21tZW50cywgdmFyaWFibGUgbmFtZXMsIGZ1bmN0aW9uIGNhbGxzIOKAkyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZGVzaWduIGNob2ljZXMgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9yIGJ1ZyBmaXhlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MjM6MjEuNDE2NTM1MDcyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MDgwOlxcdFxcdFxcdFxcdG5mdF9zZXRlbGVtX2FjdGl2YXRlKGN0eC1cXHUwMDNlbmV0LCB0ZS1cXHUwMDNlc2V0LCBlbGVtLVxcdTAwM2Vwcml2KTtcXG43MDgxOlxcdFxcbjcwODI6XFx0XFx0XFx0bmZfdGFibGVzX3NldGVsZW1fbm90aWZ5KGN0eCwgdGUtXFx1MDAzZXNldCwgZWxlbS1cXHUwMDNlcHJpdixcXG43MDgzOlxcdFxcdFxcdFxcdFxcdFxcdCBORlRfTVNHX05FV1NFVEVMRU0pO1xcbjcwODQ6XFx0XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNldXBkYXRlKTtcXG43MDg1OlxcdFxcdH1cXG43MDg2OlxcdH1cXG43MDg3OlxcdFxcbjcwODg6XFx0c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG43MDg5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzA5MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtKVxcbjcwOTE6XFx0e1xcbjcwOTI6XFx0XFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XFxuNzA5MzpcXHRcXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcXG43MDk0OlxcdFxcdHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0O1xcbjcwOTU6XFx0XFxuNzA5NjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhdGNoYWxsLCBcXHUwMDI2c2V0LVxcdTAwM2VjYXRjaGFsbF9saXN0LCBsaXN0KSB7XFxuNzA5NzpcXHRcXHRcXHRleHQgPSBuZnRfc2V0X2VsZW1fZXh0KHNldCwgY2F0Y2hhbGwtXFx1MDAzZWVsZW0pO1xcbjcwOTg6XFx0XFx0XFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XFxuNzA5OTpcXHRcXHRcXHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxuNzEwMDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43MTAxOlxcdFxcbjcxMDI6XFx0XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuNzEwMzpcXHRcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gY2F0Y2hhbGwtXFx1MDAzZWVsZW07XFxuNzEwNDpcXHRcXHRcXHRuZnRfc2V0X2VsZW1fY2hhbmdlX2FjdGl2ZShuZXQsIHNldCwgZXh0KTtcXG43MTA1OlxcdFxcdFxcdHJldHVybiAwO1xcbjcxMDY6XFx0XFx0fVxcbjcxMDc6XFx0XFxuNzEwODpcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43MTA5OlxcdH1cXG43MTEwOlxcdFxcbjcxMTE6XFx0c3RhdGljIGludCBfX25mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcxMTI6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuNzExMzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSlcXG43MTE0OlxcdHtcXG43MTE1OlxcdFxcdHZvaWQgKnByaXY7XFxuNzExNjpcXHRcXG43MTE3OlxcdFxcdHByaXYgPSBzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxuNzExODpcXHRcXHRpZiAoIXByaXYpXFxuNzExOTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG43MTIwOlxcdFxcbjcxMjE6XFx0XFx0a2ZyZWUoZWxlbS1cXHUwMDNlcHJpdik7XFxuNzEyMjpcXHRcXHRlbGVtLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG43MTIzOlxcdFxcdHNldC1cXHUwMDNlbmRlYWN0Kys7XFxuNzEyNDpcXHRcXG43MTI1OlxcdFxcdHJldHVybiAwO1xcbjcxMjY6XFx0fVxcbjcxMjc6XFx0XFxuNzEyODpcXHRzdGF0aWMgaW50IG5mdF9zZXRlbGVtX2RlYWN0aXZhdGUoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbjcxMjk6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjcxMzA6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X3NldF9lbGVtICplbGVtLCB1MzIgZmxhZ3MpXFxuNzEzMTpcXHR7XFxuNzEzMjpcXHRcXHRpbnQgcmV0O1xcbjcxMzM6XFx0XFxuNzEzNDpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfU0VUX0VMRU1fQ0FUQ0hBTEwpXFxuNzEzNTpcXHRcXHRcXHRyZXQgPSBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKG5ldCwgc2V0LCBlbGVtKTtcXG43MTM2OlxcdFxcdGVsc2VcXG43MTM3OlxcdFxcdFxcdHJldCA9IF9fbmZ0X3NldGVsZW1fZGVhY3RpdmF0ZShuZXQsIHNldCwgZWxlbSk7XFxuNzEzODpcXHRcXG43MTM5OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIzOjIxLjQxNjg4MDAyMVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MDU5OTg5OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhZ2Fpbi4gSSBzZWUgY2hhbmdlcyBpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgaG93IGNhdGNoYWxsIGVsZW1lbnRzIGFyZSBoYW5kbGVkIHdpdGhpbiBOZXRmaWx0ZXIgc2V0cy4gU3BlY2lmaWNhbGx5LCB0aGVyZSdzIGFuIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIG1lY2hhbmlzbSBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIsIHNvIEknbGwgYnJlYWsgaXQgZG93bi5cblxuRmlyc3QsIEkgbm90aWNlIHRoZSBhZGRpdGlvbiBvZiBgdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7YCBpbiBib3RoIHRoZSBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgIGZ1bmN0aW9ucy4gVGhpcyB0aW1lc3RhbXAgdmFyaWFibGUgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgZm9ybSBvZiBlbGVtZW50IGV4cGlyYXRpb24gb3IgdGltZS1iYXNlZCBtYW5hZ2VtZW50LiBUaGUgc3Vic2VxdWVudCBjYWxscyB0byBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHdpdGhpbiB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBjb25maXJtIHRoaXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgbm93IGNoZWNrcyBmb3IgZXhwaXJ5IGR1cmluZyBib3RoIGluc2VydGlvbiBhbmQgZGVhY3RpdmF0aW9uIG9mIHRoZSBjYXRjaGFsbCBlbGVtZW50LlxuXG5JbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCwgdGhlIGNvZGUgbm93IGNoZWNrcyBpZiB0aGUgZWxlbWVudCBpcyBhY3RpdmUgKmFuZCogbm90IGV4cGlyZWQgYmVmb3JlIHJldHVybmluZyAtRUVYSVNULiBUaGUgc2FtZSBsb2dpYyBpcyBhcHBsaWVkIHRvIGRlYWN0aXZhdGlvbiBsb2dpYy5cblxuU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWRgIGRvZXMuIEJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0J3MgY2xlYXIgaXQncyB0aGUgY29yZSBleHBpcnkgY2hlY2suIEFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgSSBtdXN0IGZpZ3VyZSBvdXQgd2hhdCBgbmZ0X25ldF90c3RhbXBgIGRvZXM7IHRoYXQncyB0aGUgc291cmNlIGZvciB0aGlzIHRpbWVzdGFtcC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IHRpbWVzdGFtcCBpcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uIG9mIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgbW9yZSBjb250ZXh0IGZvciB0aGVzZSBmdW5jdGlvbnMuIFRpbWUgZm9yIGEgZ3JlcCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTM1OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIzOjMwLjQ3Njg3Mjc2MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1ODkwOTU0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25mdF9zZXRfZWxlbV9leHBpcmVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD04MzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKm5mdF9zZXRfZXh0X2V4cHIoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODM3LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4Mzg6c3RhdGljIGlubGluZSBib29sIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTgzOS1cXHRcXHRcXHRcXHRcXHQgIHU2NCB0c3RhbXApXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg9ODQ4PXN0YXRpYyBpbmxpbmUgYm9vbCBuZnRfc2V0X2VsZW1fZXhwaXJlZChjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dClcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODQ5LXtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6ODUwOlxcdHJldHVybiBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgZ2V0X2ppZmZpZXNfNjQoKSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg1MS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTg3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTktXFx0XFx0aWYgKG5mdF9zZXRfZWxlbV9hY3RpdmUoZXh0LCBnZW5tYXNrKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwMDA6XFx0XFx0ICAgICFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwMDEtXFx0XFx0XFx0KnByaXYgPSBjYXRjaGFsbC1cXHUwMDNlZWxlbTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcwODg9c3RhdGljIGludCBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTcwOTgtXFx0XFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBleHQpIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzA5OTpcXHRcXHQgICAgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzEwMC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjc5PXN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2OTEtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA2OTI6XFx0XFx0aWYgKCFfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY5My1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9NTk9c3RhdGljIGlubGluZSBpbnQgbmZ0X3JoYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X2hhc2guYy02OC1cXHRcXHRyZXR1cm4gMTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jOjY5OlxcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZoZS1cXHUwMDNlZXh0LCB4LVxcdTAwM2V0c3RhbXApKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtNzAtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9NDE5PXN0YXRpYyBzdHJ1Y3QgbmZ0X3BpcGFwb19lbGVtICpwaXBhcG9fZ2V0X3Nsb3coY29uc3Qgc3RydWN0IG5mdF9waXBhcG9fbWF0Y2ggKm0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtNDc4LVxcdFxcdFxcdGUgPSBmLVxcdTAwM2VtdFtiXS5lO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzo0Nzk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNmUtXFx1MDAzZWV4dCwgdHN0YW1wKSB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy00ODAtXFx0XFx0XFx0XFx0ICAgICAhbmZ0X3NldF9lbGVtX2FjdGl2ZShcXHUwMDI2ZS1cXHUwMDNlZXh0LCBnZW5tYXNrKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzUwLVxcdFxcdCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYzoxNzUxOlxcdFxcdGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZlLVxcdTAwM2VleHQsIHRzdGFtcCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTc1Mi1cXHRcXHRcXHRpZiAoIW5mdF90cmFuc19nY19zcGFjZShnYykpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jPTExMzA9c3RydWN0IG5mdF9waXBhcG9fZWxlbSAqcGlwYXBvX2dldF9hdngyKGNvbnN0IHN0cnVjdCBuZnRfcGlwYXBvX21hdGNoICptLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwb19hdngyLmMtMTIxNi1cXHRcXHRcXHRlID0gZi1cXHUwMDNlbXRbcmV0XS5lO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jOjEyMTc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNmUtXFx1MDAzZWV4dCwgdHN0YW1wKSB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG9fYXZ4Mi5jLTEyMTgtXFx0XFx0XFx0XFx0ICAgICAhbmZ0X3NldF9lbGVtX2FjdGl2ZShcXHUwMDI2ZS1cXHUwMDNlZXh0LCBnZW5tYXNrKSkpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0zNDI9c3RhdGljIGludCBfX25mdF9yYnRyZWVfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0zOTctXFx0XFx0ICovXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjM5ODpcXHRcXHRpZiAoX19uZnRfc2V0X2VsZW1fZXhwaXJlZChcXHUwMDI2cmJlLVxcdTAwM2VleHQsIHRzdGFtcCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMzk5LVxcdFxcdCAgICBuZnRfc2V0X2VsZW1fYWN0aXZlKFxcdTAwMjZyYmUtXFx1MDAzZWV4dCwgY3VyX2dlbm1hc2spKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9NzgzPW5mdF9yYnRyZWVfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODE5LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzo4MjA6XFx0XFx0XFx0fSBlbHNlIGlmIChfX25mdF9zZXRfZWxlbV9leHBpcmVkKFxcdTAwMjZyYmUtXFx1MDAzZWV4dCwgdHN0YW1wKSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04MjEtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODkxPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTkxMS1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjkxMjpcXHRcXHRpZiAoIV9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoXFx1MDAyNnJiZS1cXHUwMDNlZXh0LCB0c3RhbXApKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy05MTMtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjIzOjMyLjYzNTc4NzcyOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODAxNjAzNzc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5GVGFibGVzIEV4cGlyZWQgRWxlbWVudCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX25mdF9zZXRfZWxlbV9leHBpcmVkYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24sIGRlZmluZWQgaW4gYGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaGAsIGhhbmRsZXMgdGhlIGV4cGlyYXRpb24gb2YgZWxlbWVudHMgd2l0aGluIE5GVGFibGVzIHNldHMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgdGhlIGxpZmV0aW1lIG9mIGVudHJpZXMgaW4gdGhlc2UgdGFibGVzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGVtZW50YXRpb24gaXMga2V5IHRvIHBvdGVudGlhbGx5IG9wdGltaXppbmcgb3IgdHJvdWJsZXNob290aW5nIHNldCBtYW5hZ2VtZW50LiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgdGhlIGluY2x1c2lvbiBsb2NhdGlvbiwgaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBpbnRlcm5hbCBtZWNoYW5pY3MgcmVsYXRlZCB0byBleHBpcmluZyBlbGVtZW50cywgcmF0aGVyIHRoYW4gdGhlIGV4dGVybmFsIHRyaWdnZXJpbmcuIEkgbmVlZCB0byBncmFzcCBob3cgdGhlIGV4cGlyZWQgZWxlbWVudCByZW1vdmFsIGlzIGltcGxlbWVudGVkLCBjb25zaWRlcmluZyBmYWN0b3JzIGxpa2UgcG90ZW50aWFsIGxvY2tzLCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbnkgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yIGRpZmZlcmVudCBzZXQgdHlwZXMuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byB3b3JrIGJhY2t3YXJkcyB0b3dhcmRzIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBhbmQgZ2V0IGEgc2Vuc2UgZm9yIHRoZSBleHBpcmF0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcyB0aGF0IGlzIGltcGxlbWVudGVkIGluIHRoaXMgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MjQ6MDAuNjUxODI4MjU4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogODM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODM1OlxcdFxcdHJldHVybiBuZnRfc2V0X2V4dChleHQsIE5GVF9TRVRfRVhUX0VYUFJFU1NJT05TKTtcXG4gODM2OlxcdH1cXG4gODM3OlxcdFxcbiA4Mzg6XFx0c3RhdGljIGlubGluZSBib29sIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXFxuIDgzOTpcXHRcXHRcXHRcXHRcXHRcXHQgIHU2NCB0c3RhbXApXFxuIDg0MDpcXHR7XFxuIDg0MTpcXHRcXHRpZiAoIW5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX1RJTUVPVVQpIHx8XFxuIDg0MjpcXHRcXHQgICAgUkVBRF9PTkNFKG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNldGltZW91dCkgPT0gMClcXG4gODQzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0cmV0dXJuIHRpbWVfYWZ0ZXJfZXE2NCh0c3RhbXAsIFJFQURfT05DRShuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXFx1MDAzZWV4cGlyYXRpb24pKTtcXG4gODQ2OlxcdH1cXG4gODQ3OlxcdFxcbiA4NDg6XFx0c3RhdGljIGlubGluZSBib29sIG5mdF9zZXRfZWxlbV9leHBpcmVkKGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0KVxcbiA4NDk6XFx0e1xcbiA4NTA6XFx0XFx0cmV0dXJuIF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCBnZXRfamlmZmllc182NCgpKTtcXG4gODUxOlxcdH1cXG4gODUyOlxcdFxcbiA4NTM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfZWxlbV9leHQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gODU0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZWxlbV9wcml2ICplbGVtX3ByaXYpXFxuIDg1NTpcXHR7XFxuIDg1NjpcXHRcXHRyZXR1cm4gKHZvaWQgKillbGVtX3ByaXYgKyBzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZWxlbXNpemU7XFxuIDg1NzpcXHR9XFxuIDg1ODpcXHRcXG4gODU5OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mdF9vYmplY3QgKipuZnRfc2V0X2V4dF9vYmooY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjI0OjAwLjY1MTk0MjEzOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTM0MjM1MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZDpcblxuKipDaGVja2luZyBgbmZ0X25ldF90c3RhbXBgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgbmZ0X25ldF90c3RhbXBgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGN1cnJlbnQgc3RhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGltcGxlbWVudGVkIHdpdGggaXQgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIGNvbmNlcm5zLiBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrPyBJcyBpdCBjb25maWd1cmVkIG9wdGltYWxseSwgb3IgYXJlIHRoZXJlIG9idmlvdXMgZ2FpbnMgdG8gYmUgbWFkZSBieSBhZGp1c3Rpbmcgc29tZSBvZiB0aGUgdW5kZXJseWluZyBzZXR0aW5ncz8gSSdsbCBwcm9iYWJseSBsb29rIGF0IHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0cyB1c2FnZSB3aXRoaW4gdGhlIG5ldHdvcmsgcGFja2V0IGZpbHRlcmluZyBmcmFtZXdvcmsuIFdoYXQgb3RoZXIgcmVsYXRlZCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQ/IEtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBsaWtlbHkgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyB0aW1lc3RhbXAgaXMgd29ya2luZyBhcyBpbnRlbmRlZCBhbmQgaWYgdGhlcmUgYXJlIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIHRpbWVzdGFtcCBwb3RlbnRpYWxseSBpbXBhY3RzIGEgbG90IG9mIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njg0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoyNDowMy41ODYxNzk0NTNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTgwMDQ5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X25ldF90c3RhbXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTE5NjE9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfcGVybmV0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC0xOTY1LVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDoxOTY2OnN0YXRpYyBpbmxpbmUgdTY0IG5mdF9uZXRfdHN0YW1wKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtMTk2Ny17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTg3PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTMtXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo2OTk0OlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5OTUtXFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MDg4PXN0YXRpYyBpbnQgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MDkyLVxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcwOTM6XFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzA5NC1cXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwNjc5PXN0cnVjdCBuZnRfdHJhbnNfZ2MgKm5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKHN0cnVjdCBuZnRfdHJhbnNfZ2MgKmdjKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA2ODEtXFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGwsICpuZXh0O1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNjgyOlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChnYy1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDY4My1cXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0ID0gZ2MtXFx1MDAzZXNldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM9MTcxPXN0YXRpYyBpbnQgbmZ0X3JoYXNoX2luc2VydChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTE4MC1cXHRcXHQua2V5XFx0ID0gZWxlbS1cXHUwMDNla2V5LnZhbC5kYXRhLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6MTgxOlxcdFxcdC50c3RhbXBcXHQgPSBuZnRfbmV0X3RzdGFtcChuZXQpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtMTgyLVxcdH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jPTIxNT1uZnRfcmhhc2hfZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfaGFzaC5jLTIyMy1cXHRcXHQua2V5XFx0ID0gZWxlbS1cXHUwMDNla2V5LnZhbC5kYXRhLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmM6MjI0OlxcdFxcdC50c3RhbXBcXHQgPSBuZnRfbmV0X3RzdGFtcChuZXQpLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9oYXNoLmMtMjI1LVxcdH07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTI4Nj1zdGF0aWMgaW50IG5mdF9waXBhcG9faW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xMjk1LVxcdHN0cnVjdCBuZnRfcGlwYXBvX2VsZW0gKmUsICpkdXA7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjEyOTY6XFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTEyOTctXFx0c3RydWN0IG5mdF9waXBhcG9fZmllbGQgKmY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmM9MTcxMD1zdGF0aWMgdm9pZCBwaXBhcG9fZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0LCBzdHJ1Y3QgbmZ0X3BpcGFwb19tYXRjaCAqbSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYy0xNzE0LVxcdHVuc2lnbmVkIGludCBydWxlc19mMCwgZmlyc3RfcnVsZSA9IDA7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjE3MTU6XFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE3MTYtXFx0c3RydWN0IG5mdF9waXBhcG9fZWxlbSAqZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9waXBhcG8uYz0xOTE0PW5mdF9waXBhcG9fZGVhY3RpdmF0ZShjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcGlwYXBvLmMtMTkyNi1cXHRlID0gcGlwYXBvX2dldChtLCAoY29uc3QgdTggKillbGVtLVxcdTAwM2VrZXkudmFsLmRhdGEsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jOjE5Mjc6XFx0XFx0ICAgICAgIG5mdF9nZW5tYXNrX25leHQobmV0KSwgbmZ0X25ldF90c3RhbXAobmV0KSk7XFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3BpcGFwby5jLTE5MjgtXFx0aWYgKCFlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTY4Mj1zdGF0aWMgaW50IG5mdF9yYnRyZWVfaW5zZXJ0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy02ODctXFx0c3RydWN0IG5mdF9yYnRyZWUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6Njg4OlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy02ODktXFx0aW50IGVycjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz03ODM9bmZ0X3JidHJlZV9kZWFjdGl2YXRlKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy03ODktXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6NzkwOlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy03OTEtXFx0aW50IGQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODkxPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTg5NS1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6ODk2OlxcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTctXFx0c3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoyNDowNS4zMDQxOTMzMjZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjgxMjQ5ODk3MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDYXRjaGFsbCBFbGVtZW50IEV4cGlyYXRpb24gaW4gTmV0ZmlsdGVyIFNldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb2RlIGluIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnRgIGFuZCBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfZGVhY3RpdmF0ZWAgaGFkIGEgc3VidGxlIGZsYXcgcmVnYXJkaW5nIGV4cGlyZWQgY2F0Y2hhbGwgZWxlbWVudHMuIEVzc2VudGlhbGx5LCB0aGUgaW5zZXJ0aW9uIGFuZCBkZWFjdGl2YXRpb24gbG9naWMgd2Fzbid0IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aW1lb3V0cy5cblxuSW4gdGhlIGBpbnNlcnRgIGZ1bmN0aW9uLCBpZiBhbiBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQgd2FzIGFjdGl2ZSwgdGhlIGNvZGUgd2FzIGluY29ycmVjdGx5IHJldHVybmluZyBgLUVFWElTVGAuIFRoaXMgbWVhbnMgYSBzdGFsZSwgZXhwaXJlZCBydWxlIGNvdWxkIGJlIHByZXZlbnRpbmcgYSBmcmVzaCBydWxlIGZyb20gdGFraW5nIGVmZmVjdC4gSSd2ZSBjb3JyZWN0ZWQgdGhpcyBub3cgc28gdGhhdCBleHBpcmVkIGVsZW1lbnRzIGFyZW4ndCB0cmVhdGVkIGFzIGFjdGl2ZWx5IGNvbmZsaWN0aW5nLlxuXG5UaGUgYGRlYWN0aXZhdGVgIGZ1bmN0aW9uIGhhZCBhIHNpbWlsYXIgaXNzdWUuIElmIHNvbWVvbmUgdHJpZWQgdG8gZGVhY3RpdmF0ZSBhbiBleHBpcmVkIGNhdGNoYWxsIGVsZW1lbnQsIGl0IHdvdWxkIGdvIGFoZWFkIGFuZCBkZWFjdGl2YXRlIGl0LiBUaGlzIGlzIGEgcHJvYmxlbSwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoaXMgY291bGQgbGVhZCB0byBhIGRvdWJsZSBkZWFjdGl2YXRpb24gb3IgcmFjZSBjb25kaXRpb25zLiBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBza2lwIHRoZXNlIGVsZW1lbnRzLlxuXG5UaGUga2V5IGhlcmUgaXMgZW5zdXJpbmcgZXhwaXJlZCBlbGVtZW50cyBhcmUgdHJlYXRlZCB0aGUgc2FtZSB3YXkgYWNyb3NzIHRoZSBib2FyZCwgbGlrZSBob3cgcmJ0cmVlLCByaGFzaCwgb3IgcGlwYXBvIHNldHMgbWFuYWdlIHRoZW06IGJ5IGlnbm9yaW5nIHRoZW0sIGFzIGlmIHRoZXkgYXJlIG5vdCBmb3VuZCBvciByZWFkeSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGlzIGNvcnJlY3Rpb24gaXMgYSBzdGFuZGFyZCBiZXN0IHByYWN0aWNlIHRvIHByZXZlbnQgdW5leHBlY3RlZCBiZWhhdmlvdXIuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmaXggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBUaW1lIGZvciBhIEtNU0FOIGNoZWNrOiBhbSBJIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlPyBMZXQncyBjaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS5cblxuMS4gICpLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UqOiBEb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55IGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIG1lc3NhZ2UgZ2VuZXJhdGlvbiwgcGFkZGluZz8gTm8sIHNlZW1zIHNhZmUgaGVyZS5cblxuMi4gICpDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMqOiBJIG5lZWQgdG8gY2hlY2sgYG5mdF9uZXRfdHN0YW1wYCB0byBtYWtlIHN1cmUgaXQncyBub3QgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGF0J3MgdGhlIGtleSB0aGluZyB0byBkb3VibGUgY2hlY2suXG4zLiAgKkFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocyouIE5vdCBzZWVpbmcgYW55IG9mIHRoYXQgaGVyZS5cbjQuICAqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLiogVGhpcyBpc24ndCB0aGUgY2FzZSBoZXJlLlxuXG5Mb29rcyBsaWtlIHRoZSBvbmx5IHJlbWFpbmluZyBxdWVzdGlvbiBpcyBgbmZ0X25ldF90c3RhbXBgLiBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGF0IGZ1bmN0aW9uIGJlaGF2ZXMgdG8gYmUgY29tcGxldGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMzoyODo0Ni41NTQwOTMwNTZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxOTYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTYwOlxcdFxcbjE5NjE6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfcGVybmV0KGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG4xOTYyOlxcdHtcXG4xOTYzOlxcdFxcdHJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIG5mX3RhYmxlc19uZXRfaWQpO1xcbjE5NjQ6XFx0fVxcbjE5NjU6XFx0XFxuMTk2NjpcXHRzdGF0aWMgaW5saW5lIHU2NCBuZnRfbmV0X3RzdGFtcChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXFxuMTk2NzpcXHR7XFxuMTk2ODpcXHRcXHRyZXR1cm4gbmZ0X3Blcm5ldChuZXQpLVxcdTAwM2V0c3RhbXA7XFxuMTk2OTpcXHR9XFxuMTk3MDpcXHRcXG4xOTcxOlxcdCNlbmRpZiAvKiBfTkVUX05GX1RBQkxFU19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjI4OjQ2LjU1NDE5NjU2NVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzY4MzQ1ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTkZUIEVsZW1lbnQgRXhwaXJhdGlvbiBpbiBuZl90YWJsZXMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSB0aW1lc3RhbXAsIGBuZnRfcGVybmV0KG5ldCktXHUwMDNldHN0YW1wYCwgaXMgdXBkYXRlZCBpbiBuZl90YWJsZXMgZHVyaW5nIHRyYW5zYWN0aW9uL25ldGxpbmsgYmF0Y2ggcHJvY2Vzc2luZy4gSXQncyB1cGRhdGVkIHByZXR0eSByZWd1bGFybHkuIEJ1dCwgSSdtIGNvbmNlcm5lZCBhYm91dCB0aGUgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCBmdW5jdGlvbiBhbmQgdGhlIG92ZXJhbGwgZXhwaXJhdGlvbiBtZWNoYW5pc20uXG5cblNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBwaWVjZSB0b2dldGhlciBob3cgZWxlbWVudCB0aW1lb3V0cyBhcmUgbWFuYWdlZC4gSSBrbm93IGBuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9USU1FT1VUKWAgY2hlY2tzIGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSB0aW1lb3V0IGV4dGVuc2lvbi4gSWYgaXQgKmRvZXMqIGV4aXN0LCBJIGdyYWIgdGhlIHRpbWVvdXQgdmFsdWUgdXNpbmcgYFJFQURfT05DRShuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXHUwMDNldGltZW91dClgIGFuZCB0aGUgZWxlbWVudCdzIGV4cGlyYXRpb24gdGltZS5cblxuV2hhdCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaXM6IHdoZW4gYSB0aW1lb3V0IGV4dGVuc2lvbiAoYE5GVF9TRVRfRVhUX1RJTUVPVVRgKSBpcyBmaXJzdCAqYWxsb2NhdGVkKiB0byBhIHNldCBlbGVtZW50LCBob3cgaXMgaXQgaW5pdGlhbGl6ZWQ/IFdoYXQgdmFsdWVzIGFyZSBhc3NpZ25lZCBpbml0aWFsbHk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWZhdWx0IHN0YXRlIG9mIHRoZSB0aW1lb3V0IGNvdW50ZXIuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBgbmZ0X3NldF9lbGVtX2luaXRgIGZ1bmN0aW9uLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXJzIEknbSBsb29raW5nIGZvciBhbmQgcHJvdmlkZSBhIHN0YXJ0aW5nIHBvaW50IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgZm9jdXMgb24gaG93IHRoZSB0aW1lb3V0IGV4dGVuc2lvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGF0IGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjI4OjUwLjMyMjU0NTM1OVoiLCJTZXEiOjUyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5MjU4ODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0X2VsZW1faW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg9ODY0PXN0cnVjdCBuZnRfZXhwciAqbmZ0X3NldF9lbGVtX2V4cHJfYWxsb2MoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04NjctXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjg2ODpzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODY5LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Njc3ND1zdGF0aWMgaW50IG5mdF9zZXRfZXh0X21lbWNweShjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCwgdTggaWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Nzg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY3ODU6c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjc4Ni1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDk9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTI2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1Mjc6XFx0ZWxlbS5wcml2ID0gbmZ0X3NldF9lbGVtX2luaXQoc2V0LCBcXHUwMDI2dG1wbCwgZWxlbS5rZXkudmFsLmRhdGEsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyOC1cXHRcXHRcXHRcXHQgICAgICBlbGVtLmtleV9lbmQudmFsLmRhdGEsIGVsZW0uZGF0YS52YWwuZGF0YSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4Mjk9c3RhdGljIGludCBuZnRfZGVsX3NldGVsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4ODUtXFx0ZXJyID0gLUVOT01FTTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3ODg2OlxcdGVsZW0ucHJpdiA9IG5mdF9zZXRfZWxlbV9pbml0KHNldCwgXFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc4ODctXFx0XFx0XFx0XFx0ICAgICAgZWxlbS5rZXlfZW5kLnZhbC5kYXRhLCBOVUxMLCAwLCAwLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9NTY9c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9keW5zZXRfbmV3KHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy02OC1cXHR0aW1lb3V0ID0gcHJpdi1cXHUwMDNldGltZW91dCA/IDogUkVBRF9PTkNFKHNldC1cXHUwMDNldGltZW91dCk7XFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM6Njk6XFx0ZWxlbV9wcml2ID0gbmZ0X3NldF9lbGVtX2luaXQoc2V0LCBcXHUwMDI2cHJpdi1cXHUwMDNldG1wbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy03MC1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cmVncy1cXHUwMDNlZGF0YVtwcml2LVxcdTAwM2VzcmVnX2tleV0sIE5VTEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjI4OjUyLjMxNTE0MTg0OFoiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5NDA4OTk0NDg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byBuZl90YWJsZXNfYXBpLmM6IG5mdF9zZXRfZWxlbV9pbml0KipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZl90YWJsZXNfYXBpLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZWxlbWVudHMgYXJlIGJlaW5nIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgc2V0cywgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgYG5mdF9zZXRfZWxlbV9pbml0YCBmdW5jdGlvbi4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uc3RydWN0aW9uIG9mIHNldCBlbGVtZW50cyB3aXRoaW4gdGhlIE5ldGZpbHRlciB0YWJsZSBmcmFtZXdvcmssIHNvIGxldCdzIHN0YXJ0IHRoZXJlLiBJIGV4cGVjdCBpdCdzIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGxhaWQgb3V0IGFuZCBob3cgdGhlIG1lbW9yeSBpcyBtYW5hZ2VkIGZvciB0aGVzZSBzZXQgZWxlbWVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYXJndW1lbnRzIGl0IHRha2VzLCB3aGF0IGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGdvYWwgb2YgdGhlIHJvdXRpbmUgaXMuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMyMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEzOjMwOjI2LjQwNTA4OTc5NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODA0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjc4NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjc4NTpcXHRzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG42Nzg2OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxcbjY3ODc6XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgdTMyICprZXksIGNvbnN0IHUzMiAqa2V5X2VuZCxcXG42Nzg4OlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHUzMiAqZGF0YSxcXG42Nzg5OlxcdFxcdFxcdFxcdFxcdFxcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKVxcbjY3OTA6XFx0e1xcbjY3OTE6XFx0XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XFxuNjc5MjpcXHRcXHR2b2lkICplbGVtO1xcbjY3OTM6XFx0XFxuNjc5NDpcXHRcXHRlbGVtID0ga3phbGxvYyhzZXQtXFx1MDAzZW9wcy1cXHUwMDNlZWxlbXNpemUgKyB0bXBsLVxcdTAwM2VsZW4sIGdmcCk7XFxuNjc5NTpcXHRcXHRpZiAoZWxlbSA9PSBOVUxMKVxcbjY3OTY6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNjc5NzpcXHRcXG42Nzk4OlxcdFxcdGV4dCA9IG5mdF9zZXRfZWxlbV9leHQoc2V0LCBlbGVtKTtcXG42Nzk5OlxcdFxcdG5mdF9zZXRfZXh0X2luaXQoZXh0LCB0bXBsKTtcXG42ODAwOlxcdFxcbjY4MDE6XFx0XFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWSkgXFx1MDAyNlxcdTAwMjZcXG42ODAyOlxcdFxcdCAgICBuZnRfc2V0X2V4dF9tZW1jcHkodG1wbCwgTkZUX1NFVF9FWFRfS0VZLFxcbjY4MDM6XFx0XFx0XFx0XFx0ICAgICAgIG5mdF9zZXRfZXh0X2tleShleHQpLCBrZXksIHNldC1cXHUwMDNla2xlbikgXFx1MDAzYyAwKVxcbjY4MDQ6XFx0XFx0XFx0Z290byBlcnJfZXh0X2NoZWNrO1xcbjY4MDU6XFx0XFxuNjgwNjpcXHRcXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfS0VZX0VORCkgXFx1MDAyNlxcdTAwMjZcXG42ODA3OlxcdFxcdCAgICBuZnRfc2V0X2V4dF9tZW1jcHkodG1wbCwgTkZUX1NFVF9FWFRfS0VZX0VORCxcXG42ODA4OlxcdFxcdFxcdFxcdCAgICAgICBuZnRfc2V0X2V4dF9rZXlfZW5kKGV4dCksIGtleV9lbmQsIHNldC1cXHUwMDNla2xlbikgXFx1MDAzYyAwKVxcbjY4MDk6XFx0XFx0XFx0Z290byBlcnJfZXh0X2NoZWNrO1xcbjY4MTA6XFx0XFxuNjgxMTpcXHRcXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfREFUQSkgXFx1MDAyNlxcdTAwMjZcXG42ODEyOlxcdFxcdCAgICBuZnRfc2V0X2V4dF9tZW1jcHkodG1wbCwgTkZUX1NFVF9FWFRfREFUQSxcXG42ODEzOlxcdFxcdFxcdFxcdCAgICAgICBuZnRfc2V0X2V4dF9kYXRhKGV4dCksIGRhdGEsIHNldC1cXHUwMDNlZGxlbikgXFx1MDAzYyAwKVxcbjY4MTQ6XFx0XFx0XFx0Z290byBlcnJfZXh0X2NoZWNrO1xcbjY4MTU6XFx0XFxuNjgxNjpcXHRcXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfVElNRU9VVCkpIHtcXG42ODE3OlxcdFxcdFxcdG5mdF9zZXRfZXh0X3RpbWVvdXQoZXh0KS1cXHUwMDNldGltZW91dCA9IHRpbWVvdXQ7XFxuNjgxODpcXHRcXG42ODE5OlxcdFxcdFxcdGlmIChleHBpcmF0aW9uID09IDApXFxuNjgyMDpcXHRcXHRcXHRcXHRleHBpcmF0aW9uID0gdGltZW91dDtcXG42ODIxOlxcdFxcbjY4MjI6XFx0XFx0XFx0bmZ0X3NldF9leHRfdGltZW91dChleHQpLVxcdTAwM2VleHBpcmF0aW9uID0gZ2V0X2ppZmZpZXNfNjQoKSArIGV4cGlyYXRpb247XFxuNjgyMzpcXHRcXHR9XFxuNjgyNDpcXHRcXG42ODI1OlxcdFxcdHJldHVybiBlbGVtO1xcbjY4MjY6XFx0XFxuNjgyNzpcXHRlcnJfZXh0X2NoZWNrOlxcbjY4Mjg6XFx0XFx0a2ZyZWUoZWxlbSk7XFxuNjgyOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzA6MjYuNDA1NjczNTM0WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NjIzODU1MzE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgU2Vzc2lvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcmlzayB0aGF0ICpvbmx5KiBLTVNBTiBjb3VsZCBkZXRlY3QuIFRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBhZGRpbmcgZXhwaXJhdGlvbiBjaGVja3MgdG8gdGhlIGBjYXRjaGFsbGAgc2V0IHR5cGUgd2l0aGluIHRoZSBOZXRmaWx0ZXIgdGFibGUgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBgbmZ0X3NldGVsZW1fY2F0Y2hhbGxfaW5zZXJ0YCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGVgLiBQcmV2aW91c2x5LCB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IGNoZWNrIGZvciBleHBpcmVkIGVsZW1lbnRzLCB3aGljaCBpcyBub3cgYmVpbmcgY29ycmVjdGVkIHRvIGFsaWduIHdpdGggaG93IG90aGVyIHNldCB0eXBlcyAocmhhc2gsIHJidHJlZSwgcGlwYXBvKSBoYW5kbGUgZXhwaXJhdGlvbiB1c2luZyB0aGUgYF9fbmZ0X3NldF9lbGVtX2V4cGlyZWQoZXh0LCB0c3RhbXApYCBtYWNyby5cblxuVGhpbmtpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIG9yIGNvbnRyb2wgZmxvdy5cblxuKiAgIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhlIGJ1ZyB0aGUgcGF0Y2ggZml4ZXM6IGFuIGV4cGlyZWQgZWxlbWVudCBjb3VsZCBjYXVzZSBgLUVFWElTVGAgb24gaW5zZXJ0IGR1ZSB0byBhbiBpbmNvcnJlY3QgYWN0aXZlIGNoZWNrLiBEZWFjdGl2YXRpbmcgaXQgY291bGQgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSBzY2VuYXJpb3MuXG5cbiogICBUaGUgdGltZXIgdmFsdWUgKGB0c3RhbXBgKSB1c2VkIGluIHRoZSBleHBpcnkgY2hlY2sgaXMgaW5pdGlhbGl6ZWQgbG9jYWxseSB3aXRoIHRoZSByZXN1bHQgb2YgYG5mdF9uZXRfdHN0YW1wKG5ldClgLlxuXG4qICAgYGt6YWxsb2NgIGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGNhdGNoYWxsIGVsZW1lbnQgZXh0ZW5zaW9ucywgZW5zdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgZmllbGRzIGluY2x1ZGluZyBgdGltZW91dGAgYW5kIGBleHBpcmF0aW9uYCwgYW5kIHRoZXNlIGFyZSBzdWJzZXF1ZW50bHkgZXhwbGljaXRseSBpbml0aWFsaXplZC4gVGhlIHBhdGNoIGl0c2VsZiBkb2Vzbid0IGNoYW5nZSBpbml0aWFsaXphdGlvbiBsb2dpYy5cblxuKiAgIFRoZSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZGAgbWFjcm8gY2hlY2tzIHRoYXQgYE5GVF9TRVRfRVhUX1RJTUVPVVRgIGV4aXN0cywgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdGltZW91dCBhbmQgZXhwaXJhdGlvbiBmaWVsZHMuXG5cblRoZSBidWdzIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIChkb3VibGUtZnJlZSwgVUFGLCBhbmQgcmFjZXMpIGFyZSBjbGFzc2ljIGlzc3VlcyB0aGF0IEtBU0FOIHNob3VsZCBoYW5kbGUuIFRoZSBwYXRjaCBjb3JyZWN0cyBsb2dpYyB0byBwcmV2ZW50IHRoZXNlIG1lbW9yeS1saWZlY3ljbGUgYnVncyBmcm9tIGJlaW5nIGhpdC5cblxuTG9va2luZyBhdCB0aGUgcnVsZXMsIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGF0IEtNU0FOIGlzIHVuaXF1ZWx5IHBvc2l0aW9uZWQgdG8gY2F0Y2g6XG5cbjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBleHBvc2VkLlxuMi4gIFRoZSBjb2RlIGRvZXNuJ3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMgZm9yIGNvbnRyb2wgZmxvdy5cbjMuICBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSByZWFkIGluIHJlYWNoYWJsZSBjb2RlLlxuNC4gIEJvdW5kcyBjaGVja3MgYW5kIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBhcmUgdW5hZmZlY3RlZCBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5Fc3NlbnRpYWxseSwgYnkgYWRkaW5nIHRoaXMgZXhwaXJhdGlvbiBjaGVjaywgd2UgYXJlIGVsaW1pbmF0aW5nIHRoZXNlIGNsYXNzZXMgb2YgYnVncy4gVGhlIGNoYW5nZXMgaW50cm9kdWNlIHNhZmVyIGNvZGUsIGJ1dCB0aGV5IGRvIG5vdCBpbmNyZWFzZSB0aGUgcmlzayBvZiBLTVNBTi1zcGVjaWZpYyBidWdzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHRoZSBhcHByb3ByaWF0ZSBhcHByb2FjaCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM1MiwiT3V0cHV0VG9rZW5zIjozNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTM6MzM6MDIuNjQ0MjI5NTMxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGlyYXRpb24gY2hlY2tzIHZpYSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZChleHQsIHRzdGFtcClgIHRvIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9pbnNlcnQoKWAgYW5kIGBuZnRfc2V0ZWxlbV9jYXRjaGFsbF9kZWFjdGl2YXRlKClgIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AsIG1hdGNoaW5nIHRoZSBleHBpcmF0aW9uIGNoZWNrIHNlbWFudGljcyB1c2VkIGluIG90aGVyIHNldCB0eXBlcyAoc3VjaCBhcyBoYXNoLCByYnRyZWUsIGFuZCBwaXBhcG8pLlxcblxcbi0gVW5pbml0aWFsaXplZCBtZW1vcnkgYW5hbHlzaXM6IFRoZSBsb2NhbCB2YXJpYWJsZSBgdHN0YW1wYCBpcyBhbiBleHBsaWNpdGx5IGluaXRpYWxpemVkIDY0LWJpdCB0aW1lc3RhbXAgKGB1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KWApLiBUaGUgc2V0IGVsZW1lbnQgZXh0ZW5zaW9uIGluc3BlY3RlZCBieSBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBuZnRfc2V0X2VsZW1faW5pdCgpYCwgd2hlcmUgYHRpbWVvdXRgIGFuZCBgZXhwaXJhdGlvbmAgZmllbGRzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBgX19uZnRfc2V0X2VsZW1fZXhwaXJlZCgpYCBmaXJzdCBjb25maXJtcyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgTkZUX1NFVF9FWFRfVElNRU9VVGAgZXh0ZW5zaW9uIGJlZm9yZSByZWFkaW5nIHRoZXNlIGZpZWxkcy5cXG4tIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6IEZhaWxpbmcgdG8gY2hlY2sgZXhwaXJhdGlvbiBmb3IgY2F0Y2hhbGwgZWxlbWVudHMgcHJldmlvdXNseSByaXNrZWQgbG9naWNhbCBlcnJvcnMgKC1FRVhJU1Qgb24gaW5zZXJ0KSBhbmQgbGlmZWN5Y2xlIGJ1Z3Mgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSAvIGRvdWJsZS1mcmVlIGlmIGRlYWN0aXZhdGlvbiByYWNlZCB3aXRoIEdDIGVsZW1lbnQgcmVjbGFtYXRpb24gKGBuZnRfdHJhbnNfZ2NfY2F0Y2hhbGxfc3luYygpYCkuIE1lbW9yeSBzYWZldHkgaXNzdWVzIG9mIHRoaXMgdHlwZSAoVUFGLCBkb3VibGUtZnJlZSkgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4uIE5vIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIHBhcnRpYWwgc3RydWN0dXJlIGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXhwaXJhdGlvbiBjaGVja3MgdmlhIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKGV4dCwgdHN0YW1wKWAgdG8gYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2luc2VydCgpYCBhbmQgYG5mdF9zZXRlbGVtX2NhdGNoYWxsX2RlYWN0aXZhdGUoKWAgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYCwgbWF0Y2hpbmcgdGhlIGV4cGlyYXRpb24gY2hlY2sgc2VtYW50aWNzIHVzZWQgaW4gb3RoZXIgc2V0IHR5cGVzIChzdWNoIGFzIGhhc2gsIHJidHJlZSwgYW5kIHBpcGFwbykuXFxuXFxuLSBVbmluaXRpYWxpemVkIG1lbW9yeSBhbmFseXNpczogVGhlIGxvY2FsIHZhcmlhYmxlIGB0c3RhbXBgIGlzIGFuIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgNjQtYml0IHRpbWVzdGFtcCAoYHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpYCkuIFRoZSBzZXQgZWxlbWVudCBleHRlbnNpb24gaW5zcGVjdGVkIGJ5IGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYG5mdF9zZXRfZWxlbV9pbml0KClgLCB3aGVyZSBgdGltZW91dGAgYW5kIGBleHBpcmF0aW9uYCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIGBfX25mdF9zZXRfZWxlbV9leHBpcmVkKClgIGZpcnN0IGNvbmZpcm1zIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGBORlRfU0VUX0VYVF9USU1FT1VUYCBleHRlbnNpb24gYmVmb3JlIHJlYWRpbmcgdGhlc2UgZmllbGRzLlxcbi0gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTogRmFpbGluZyB0byBjaGVjayBleHBpcmF0aW9uIGZvciBjYXRjaGFsbCBlbGVtZW50cyBwcmV2aW91c2x5IHJpc2tlZCBsb2dpY2FsIGVycm9ycyAoLUVFWElTVCBvbiBpbnNlcnQpIGFuZCBsaWZlY3ljbGUgYnVncyBzdWNoIGFzIHVzZS1hZnRlci1mcmVlIC8gZG91YmxlLWZyZWUgaWYgZGVhY3RpdmF0aW9uIHJhY2VkIHdpdGggR0MgZWxlbWVudCByZWNsYW1hdGlvbiAoYG5mdF90cmFuc19nY19jYXRjaGFsbF9zeW5jKClgKS4gTWVtb3J5IHNhZmV0eSBpc3N1ZXMgb2YgdGhpcyB0eXBlIChVQUYsIGRvdWJsZS1mcmVlKSBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTi4gTm8ga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgcGFydGlhbCBzdHJ1Y3R1cmUgY29waWVzIGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowgx8vn[1] Phase: Succeeded StartedAt: 2026-09-14 13:33:13 +0000 UTC FinishedAt: 2026-09-14 13:33:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 13:33:13 +0000 UTC FinishedAt: 2026-09-14 13:33:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2] Phase: Succeeded StartedAt: 2026-09-14 13:33:13 +0000 UTC FinishedAt: 2026-09-14 18:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 13:33:13 +0000 UTC FinishedAt: 2026-09-14 18:22:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 13:33:13 +0000 UTC FinishedAt: 2026-09-14 13:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 13:33:13 +0000 UTC FinishedAt: 2026-09-14 13:33:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgx8vn/series-workflowgx8vn-convert-artifact-3441935515/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 13:33:23 +0000 UTC FinishedAt: 2026-09-14 13:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 13:33:23 +0000 UTC FinishedAt: 2026-09-14 13:49:13 +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:*f01c139a-548f-4e98-903f-bb6bd912ea98,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-workflowgx8vn/series-workflowgx8vn-convert-artifact-3441935515/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": "1b990d1b-e2d5-4cf4-8382-f46b77d0ee7e", "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-workflowgx8vn/series-workflowgx8vn-build-action-3730657497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 13:33:23 +0000 UTC FinishedAt: 2026-09-14 13:49:03 +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:*f01c139a-548f-4e98-903f-bb6bd912ea98,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-workflowgx8vn/series-workflowgx8vn-convert-artifact-3441935515/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": "1b990d1b-e2d5-4cf4-8382-f46b77d0ee7e", "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-workflowgx8vn/series-workflowgx8vn-build-action-3730657497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 13:49:13 +0000 UTC FinishedAt: 2026-09-14 13:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 13:49:13 +0000 UTC FinishedAt: 2026-09-14 13:49:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 13:49:13 +0000 UTC FinishedAt: 2026-09-14 13:49:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 13:49:13 +0000 UTC FinishedAt: 2026-09-14 13:49:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgx8vn/series-workflowgx8vn-convert-artifact-754976754/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 13:49:23 +0000 UTC FinishedAt: 2026-09-14 13:51:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 13:49:23 +0000 UTC FinishedAt: 2026-09-14 13:51:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1b990d1b-e2d5-4cf4-8382-f46b77d0ee7e,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-workflowgx8vn/series-workflowgx8vn-build-action-3730657497/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-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 13:51:44 +0000 UTC FinishedAt: 2026-09-14 13:51:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 13:51:44 +0000 UTC FinishedAt: 2026-09-14 13:51:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 13:51:44 +0000 UTC FinishedAt: 2026-09-14 14:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 13:51:44 +0000 UTC FinishedAt: 2026-09-14 14:10:10 +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:*f01c139a-548f-4e98-903f-bb6bd912ea98,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-workflowgx8vn/series-workflowgx8vn-convert-artifact-754976754/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": "99024d94-8855-4666-94ff-03eef646c1a1", "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-workflowgx8vn/series-workflowgx8vn-build-action-1420691334/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 13:51:44 +0000 UTC FinishedAt: 2026-09-14 14:09:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f01c139a-548f-4e98-903f-bb6bd912ea98,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-workflowgx8vn/series-workflowgx8vn-convert-artifact-754976754/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": "99024d94-8855-4666-94ff-03eef646c1a1", "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-workflowgx8vn/series-workflowgx8vn-build-action-1420691334/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 14:10:10 +0000 UTC FinishedAt: 2026-09-14 14:10:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 14:10:10 +0000 UTC FinishedAt: 2026-09-14 14:10:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 14:10:11 +0000 UTC FinishedAt: 2026-09-14 14:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 14:10:11 +0000 UTC FinishedAt: 2026-09-14 14:12:16 +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:*99024d94-8855-4666-94ff-03eef646c1a1,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-workflowgx8vn/series-workflowgx8vn-build-action-1420691334/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-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 14:12:26 +0000 UTC FinishedAt: 2026-09-14 18:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 14:12:26 +0000 UTC FinishedAt: 2026-09-14 18:22:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"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:*1b990d1b-e2d5-4cf4-8382-f46b77d0ee7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99024d94-8855-4666-94ff-03eef646c1a1,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-workflowgx8vn/series-workflowgx8vn-build-action-3730657497/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-workflowgx8vn/series-workflowgx8vn-build-action-1420691334/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 14:12:26 +0000 UTC FinishedAt: 2026-09-14 14:12:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 14:12:26 +0000 UTC FinishedAt: 2026-09-14 14:12:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"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-workflowgx8vn/series-workflowgx8vn-convert-artifact-3496727623/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 14:12:26 +0000 UTC FinishedAt: 2026-09-14 14:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 14:12:26 +0000 UTC FinishedAt: 2026-09-14 14:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 14:12:26 +0000 UTC FinishedAt: 2026-09-14 14:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 14:12:49 +0000 UTC FinishedAt: 2026-09-14 18:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgx8vn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"base_commit":"a401a9d547c50ef34db1088cc1fb9a201a7af657","base_tree":"nf","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_setelem_catchall_insert","nft_setelem_catchall_deactivate","nft_setelem_insert","nft_setelem_deactivate","nft_add_set_elem","nft_del_setelem"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a401a9d547c50ef34db1088cc1fb9a201a7af657","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_TABLES"],"series_id":"7adcbe12-088a-4857-aff3-1fdd3dd2fc59","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 14:12:49 +0000 UTC FinishedAt: 2026-09-14 18:22:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1b990d1b-e2d5-4cf4-8382-f46b77d0ee7e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*99024d94-8855-4666-94ff-03eef646c1a1,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-workflowgx8vn/series-workflowgx8vn-build-action-3730657497/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-workflowgx8vn/series-workflowgx8vn-build-action-1420691334/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-workflowgx8vn/series-workflowgx8vn-convert-artifact-3496727623/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,}